Topic hỏi đáp cho anh em (Về cách làm map)

Status
Không mở trả lời sau này.
:-/ Cho mình hỏi khi sử dụng trigger move caster, phải chỉnh wait làm sao để thằng cast vào đúng điểm bị cast thì mới turn off trigger? :hug: (chỉnh distance thì có lúc chưa tới, lúc thì bay qua luôn :D )
 
Cho hỏi nè :
- làm sao tạo 1 even mà ghi mình ghi 1 đoạn mã thì even đó bắt đầu sảy ra . Làm đi làm lại mà vẫn sai .::(
- Đổi tên map sao nhỉ mình không biết :'> .
- làm sao khi mình ghi 1 đoạn chat VD : -rd thì tất cả người chơi random hero.
Câu này dễ để tui trả lời cho:cool:

Để mà tạo even mà khi mình ghi 1 đoạn mã thì even đó bắt đầu xảy ra thì khi chọn loại even thì tìm cái loại có tên là "Player - Chat Message", nó sẽ hiện ra cái 1 cái bảng có 3 mục bạn có thể chỉnh được:
- Mục Player 1 để chỉnh Player nào chat đoạn mã thì trigger sẽ hoạt động. Nếu dùng cho nhiều thằng player thì làm cho mỗi thằng 1 even
- Mục Text để ghi mã cần chat vào (VD: -rd)
- Mục An exact match để chỉnh cho dòng chat phải chính xác hoàn toàn hay chỉ cần chứa dòng chat đó thui (với trường hợp của bạn thì chỉ cần An exact match)
Còn action thì tự làm nhé:D

À còn về đổi tên map thì vô mục Scenario ở trên thanh toolbar xong rồi chọn mục Map Description. Ở trong đấy nó có mục Scenario Name đấy, gõ tên vô.
 
Thêm 1 biến đếm xem.
m=10
n=distance between(location of caster) &(location of target of ability being cast) chẳng hạn.Turn on trigger di chuyển.

Trigger di chuyển:
Event: every 0,1s.

Action:
if m>0 then
-------Move caster to (position of caster) offset by n/10 toward(angle between (location of caster) &(location of target oif ability being cast).
-------m=m-1.
else turn off this triger
//Như vầy sau 0.1x10=1s sẽ tới nơi.

Nhớ đặt biến point cho location caster và vị trí cast.
 
Ừ cảm ơn làm được rồi :D
Thế còn cái vụ
làm sao để khi hero chết làm 1 bảng mã đếm time cho hero đó hồi sinh .
thì sao làm hoài như mấy bạn trước chỉ mà không được . chỉ giúp luôn nha .
- Sao mình làm nó tự động ra creep đánh thành như dday thì nó ra được nhưng mà tạo theo creep được tao trong vùng đó đánh thành kia thì cả creep mình khi vào đó cũng chạy vèo về đánh nhà là sao ::(
 
ko ai giúp em hết àh ...
nản quá đi ::(::(
 
Ở mỗi phép dòng đầu tiên bao h cũng là Ar- Animation Names, ấn vô đó rồi viết tên animation zoo(VD: attack, throw.....Spell,Looping..)
 
anh nói cụ thể hơn 1 tí đc hem
em ko hiểu vấn đề này cho lắm
sẵn tiện cho hỏi spell này :D
khi mình shock wave vào 1 chỗ nào thì thằng unit cast cũng bay theo shock wave luôn thì làm trigger thế nào
làm giống anh tom mà mò cả ngày ko ra mới ức ::(
 
trời ơi chán nhỉ :(
forum này giờ vắng rồi ko còn ai nữa :(
ai pro vào help em cái vấn đề trên đi :-s
 
Anh em chú ý: Khi làm map vào phần Windows, tắt cái tùy chọn Brush list đi, ko thôi thao tác với object nó lag vãi l ra đấy...:D
 
cái này em bik lâu rồi anh ơi :(
anh giúp em cái problem ở trang kia đi :(
 
À, mỗi Unit thường có nhiều diễn hoạt (animation) khác nhau, muốn biết tên thì bạn mở cái khung cửa sổ chính của WE ra, phần mà xem được địa hình ấy, bên cạnh đó ,mở object luôn, rồi click đúp vào phần: Art=Model của unit đó, để ý bân trái khung cửa sổ WE lúc này xuất hiện hình nhân vật, phía trên khung có tên anim, được xem trước luôn, bạn click mũi tên để xem hết anim của nó (cơ bản thì: birth, death, stand, attack1, attack2, spell, spell salm,...)
-Tuy nhiên khi cast phép nếu hero đứng cạnh địch thì anim bị cancel ngay trừ khi pause hay làm gì đấy mà chắc chắn không an toàn :D
 
hiểu roài thanks
nhưng em muốn hero này chơi spell theo kiểu attack slam này nè
spell đó khi cast theo kiểu attack slam thì unit trượt tới thằng bị cast giống như cast shock wave vậy đó
 
Ừ cảm ơn làm được rồi :D
Thế còn cái vụ

làm sao để khi hero chết làm 1 bảng mã đếm time cho hero đó hồi sinh .


thì sao làm hoài như mấy bạn trước chỉ mà không được . chỉ giúp luôn nha .
- Sao mình làm nó tự động ra creep đánh thành như dday thì nó ra được nhưng mà tạo theo creep được tao trong vùng đó đánh thành kia thì cả creep mình khi vào đó cũng chạy vèo về đánh nhà là sao ::(

Hướng dẫn mất thời gian lắm, sao ko down map DDay deprotected về mà tìm hiểu?
 
hiểu roài thanks
nhưng em muốn hero này chơi spell theo kiểu attack slam này nè
spell đó khi cast theo kiểu attack slam thì unit trượt tới thằng bị cast giống như cast shock wave vậy đó

Có phải là khi cast spell thì nó play animation attack slam ko?Thêm 2 cái string attack và slam vào animation name của spell.

Còn vừa phi thân vừa attack slam thì chỗ create fake unit ở map đấy thêm cái play attack slam animation vô >"<
 
ko đc anh ơi
cái spell hồi sáng anh làm thì lúc chơi
hero ẩn trong cái shock wave thì làm sao để Animation đc
nghĩ cách khác đi :(
Spell Black
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Black Tornado
Actions
Set Hero = (Casting unit)
Set VitriCast = (Position of Hero)
Set VitriBay = (Target point of ability being cast)
Set KhoangCach = (Distance between VitriCast and VitriBay)
Set LvchiuBT = (Level of Stats Bonus for Hero)
Set TempGroup = (Units in (Playable map area))
Unit Group - Remove all units from TempGroup
Unit - Pause Hero
Unit - Turn collision for Hero Off
Animation - Change Hero's vertex coloring to (100.00%, 100.00%, 100.00%) with 100.00% transparency
Special Effect - Create a special effect attached to the origin of Hero using Abilities\Spells\Orc\Shockwave\ShockwaveMissile.mdl
Animation - Play (Casting unit)'s (attack + slam) animation
Set ShockWaveEffect = (Last created special effect)
Trigger - Turn on Mover <gen>
Trigger - Turn on Damage <gen>
Trigger - Add to Damage <gen> the event (Unit - A unit comes within 256.00 of Hero)
Wait 1.00 seconds
Trigger - Turn off Mover <gen>
Trigger - Turn off Damage <gen>
Unit - Unpause Hero
Unit - Turn collision for Hero On
Animation - Change Hero's vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
Special Effect - Destroy ShockWaveEffect
Custom script: call RemoveLocation(udg_VitriCast)
Custom script: call RemoveLocation(udg_VitriBay)
Custom script: call DestroyGroup(udg_TempGroup)
Mover
Events
Time - Every 0.05 seconds of game time
Conditions
Actions
Set TempLoc = (Position of Hero)
Unit - Move Hero instantly to (TempLoc offset by (KhoangCach / 20.00) towards (Angle from VitriCast to VitriBay) degrees), facing (Angle from VitriCast to VitriBay) degrees
Unit - Create 1 Fake Unit Black Tornadoes for (Owner of Hero) at TempLoc facing (Angle from VitriCast to VitriBay) degrees
Unit - Add a 0.20 second Generic expiration timer to (Last created unit)
Animation - Play (Last created unit)'s attack slam animation
Animation - Change (Last created unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 50.00% transparency
Special Effect - Create a special effect at TempLoc using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl
Special Effect - Destroy (Last created special effect)
Custom script: call RemoveLocation(udg_TempLoc)

Damage
Events
Conditions
((Triggering unit) belongs to an enemy of (Owner of Hero)) Equal to True
((Triggering unit) is in TempGroup) Equal to False
Actions
Unit - Cause Hero to damage (Triggering unit), dealing (100000000.00 x (Real(LvchiuBT))) damage of attack type Hero and damage type Universal
Unit Group - Add (Triggering unit) to TempGroup
 
Tom ơi cho anh hỏi...có 1 số spell mà mình làm sẽ cần dùng 2 trigger, 1 cái để gọi nó, và 1 cái là event: every x seconds.
-Chẳng hạn:

trigger1:

event: a unit start the effect of an ability
condition: ability being cast = A
action: set caster
set target
turn on trigger2
wait x seconds
turn off trigger2

trigger2:

event: every 2 seconds
condition: create effetc at loc
cause caster damage target


Vậy cái spell trên có MUI ko, và khi làm = JASS thì làm thế nào đây? khi có tới 2 trigger. 2 event và phải turn on/off nữa...Nếu được em làm 1 ví dụ đơn giản, 1 = GUI, và 1 =JASS cho anh học hỏi được ko? thanks
 
Ok, tối qua anh đã xem lại bài tuto về struct của em, hóa ra trong trường hợp này dùng struct...anh cũng đã thử làm lại 1 spell = cách này, có vẻ hoạt động ổn, nhưng vẫn muốn nhờ Tom, hoặc ai biết Jass càng tốt xem dùm. Xem code đã neat chưa, có cách nào hiệu quả hơn k?

-Ý tưởng là mỗi 0.20 giây sẽ tạo effect hình chữ X, deal dam con nào vào phạm vi 100. con nào chết thì cộng 1 EXP cho skill đó, đạt đủ point thì lên cấp. (tất nhiên sau này sẽ có thêm điều kiện level quái nữa chứ ko chúng nó ra spamm lên mob yếu mà max skill level à :D)

-Ý tưởng vậy, code cũng xong nhưng ko đảm bảo 100% safe, mọi người giúp dùm nha..dưới đây mình post cả code và map:

scope StompOfBeast

//***************************************************
globals
private constant integer AbilityID = 'A000'
private constant attacktype AttackType = ATTACK_TYPE_CHAOS
private constant damagetype DamageType = DAMAGE_TYPE_UNIVERSAL
private constant real VSRatio = 0.10
private constant real BonusRatio = 0.10
private constant real dt = 0.10
private constant string ET = "|cffffcc00Stomp of the Beast acquired total "
private constant string CT = "|cffffcc00Stomp of the Beast's level has increased"
private constant string SFX = "Abilities\\Spells\\Undead\\Impale\\ImpaleHitTarget.mdl"
private string color = "|cffff00ff"
private integer EXP = 0
private unit caster
private unit target
private player p
private real dam
private real VSdam
private real Bonusdam
private unit u
endglobals
//****************************************************

private function condition takes nothing returns boolean
return GetSpellAbilityId() == AbilityID
endfunction

private function Check takes nothing returns boolean
return not IsUnitAlly(GetFilterUnit(), GetOwningPlayer(u)) and GetWidgetLife(GetFilterUnit())>0.405 and GetUnitTypeId(GetFilterUnit()) != 'H007'
endfunction


private struct Data
unit caster
integer DIST
real ANG
location loc
static method create takes unit c, integer i, real r, location l returns Data
local Data D = Data.allocate()
set D.caster = c
set D.DIST = i
set D.ANG = r
set D.loc = l
return D
endmethod
endstruct


private function callback takes nothing returns nothing
local timer t = GetExpiredTimer()
local Data D = GetCSData(t)
local real X
local real Y
local group g = CreateGroup()
local unit enum
set u = D.caster

set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 4
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
set X = GetLocationX(D.loc) + D.DIST * Cos(D.ANG + ( 90.00 * I2R(GetForLoopIndexA())) * bj_DEGTORAD)
set Y = GetLocationY(D.loc) + D.DIST * Sin(D.ANG + ( 90.00 * I2R(GetForLoopIndexA())) * bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect(SFX,X,Y))
set bj_forLoopAIndex = bj_forLoopAIndex + 1
call GroupEnumUnitsInRange(g, X, Y, 100, Condition(function Check))
loop
set enum = FirstOfGroup(g)
exitwhen enum == null
call GroupRemoveUnit(g,enum)
if IsUnitInGroup(enum, udg_Group_Water) then
call UnitDamageTarget(D.caster, enum, (dam+Bonusdam+VSdam), false, false, AttackType, DamageType, null)
if GetWidgetLife(enum) <= 0.405 and GetUnitAbilityLevel(D.caster, AbilityID) < 10 then
set EXP=EXP+1
if udg_Bo_TextOff ==false then
call DisplayTimedTextToForce( GetForceOfPlayer(GetOwningPlayer(D.caster)), 4.00, ET+I2S(EXP)+" SP")
endif
if EXP ==4 or EXP ==8 or EXP ==12 or EXP ==50 or EXP ==66 or EXP ==84 or EXP ==104 or EXP ==126 or EXP ==150 or EXP ==200 then
call DisplayTimedTextToForce( GetForceOfPlayer(GetOwningPlayer(D.caster)), 4.00, CT)
call IncUnitAbilityLevel(D.caster, AbilityID)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl", D.caster, "origin"))
endif
endif
else
call UnitDamageTarget(D.caster, enum, (dam+Bonusdam), false, false, AttackType, DamageType, null)
call DisplayTimedTextToForce( GetForceOfPlayer(GetOwningPlayer(D.caster)), 4.00, ET+I2S(R2I(dam))+" damage")
if GetWidgetLife(enum) <= 0.405 and GetUnitAbilityLevel(D.caster, AbilityID) < 10 then
set EXP=EXP+1
if udg_Bo_TextOff ==false then
call DisplayTimedTextToForce( GetForceOfPlayer(GetOwningPlayer(D.caster)), 4.00, ET+I2S(EXP)+" SP")
endif
if EXP ==4 or EXP ==8 or EXP ==12 or EXP ==50 or EXP ==66 or EXP ==84 or EXP ==104 or EXP ==126 or EXP ==150 or EXP ==200 then
call DisplayTimedTextToForce( GetForceOfPlayer(GetOwningPlayer(D.caster)), 4.00, CT)
call IncUnitAbilityLevel(D.caster, AbilityID)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Resurrect\\ResurrectTarget.mdl", D.caster, "origin"))
endif
endif
endif
endloop
endloop
set D.DIST = (D.DIST + 50)
if D.DIST == 425 then
call DestroyGroup(g)
call RemoveLocation(D.loc)
set D.loc = null
call D.destroy()
call ReleaseTimer(t)
endif
set t = null
set g=null
set enum=null
endfunction


private function action takes nothing returns nothing
//Variables
local Data D = Data.create(GetTriggerUnit(), 25, GetUnitFacing(GetTriggerUnit()), GetUnitLoc(GetTriggerUnit()))
local timer t = NewTimer()
local integer lvl = GetUnitAbilityLevel(D.caster, AbilityID)
// Damage
set dam = ((60.00*I2R(lvl))+(2.00*I2R(GetHeroInt(D.caster, true))))/3
set VSdam = dam*VSRatio
if IsUnitInGroup(D.caster, udg_Group_Water) == true then
set Bonusdam = BonusRatio*dam
call TextTag_Unit(D.caster, "+"+I2S(R2I(Bonusdam)), color)
else
set Bonusdam = 0.00
endif
call SetCSData(t, D)
call TimerStart(t,0.10,true,function callback)
set t = null
endfunction

public function InitTrig takes nothing returns nothing
local trigger Trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(Trig, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(Trig, Condition(function condition))
call TriggerAddAction(Trig, function action)
call Preload("Abilities\\Spells\\Undead\\Impale\\ImpaleHitTarget.mdl")
set Trig = null
endfunction
endscope
 
có ai biết down warcraft 3 viewer ở đâu không, hồi trước nó nằm trong tools for map maker, mà giờ tìm không thấy :|
 
có ai biết down warcraft 3 viewer ở đâu không, hồi trước nó nằm trong tools for map maker, mà giờ tìm không thấy :|

Here: Warcraft III Viewer

---------------

@Rex, bài tuto kia vẫn... thiếu :'>, em đang lười update quá :-s

về code của anh, em cũng ko làm gì hơn đc, chỉ "clean" một số BJ thôi (code có TESH vào, nhìn BJ màu đỏ, kinh kinh thế nào ấy anh ạ :| ), và cả... leak nữa.

Mã:
call DisplayTimedTextToForce( [B]GetForceOfPlayer(GetOwningPlayer(D.caster))[/B], 4.00, CT)
leak cái Force (player group)

và em thấy anh dùng CSSafety với timer, sao anh ko dùng với group ?

Thôi, em gửi kèm map rôi, anh xem đi :D.
 

Attachments

Cám ơn Tom..giả dụ trong trường hơpk này anh muốn kết thúc cái vòng lặp sau 1 giây thì làm thế nào, map kia kết' thúc khi DIST =445...
 
Status
Không mở trả lời sau này.
Back
Top