[Tutorial] - Slide, Chain Spells

Này, tại sao dùng Array thì Ai cast nó chả ra cái quái gì thế???

ko ra là sao, đưa tôi xem trigger nào ?
 
SlideMove //để OFF sẵn
Events
Time - Every 0.04 seconds of game time
Conditions
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SlideTick Equal to 0 //tick = 0, dừng trigger thôi
Then - Actions
Trigger - Turn off (This trigger)
Skip remaining actions
Else - Actions
-------- ---------------- --------
Set SlideTick = (SlideTick - 1) //giảm tick
Set TempLoc = (Position of SlideUnit) //phải cho point vào variable để remove, ko thì sẽ leak
Set TempLoc2 = (TempLoc offset by SlideDistance towards SlideAngle degrees) //phải cho point vào variable để remove, ko thì sẽ leak
Unit - Move SlideUnit instantly to TempLoc2
Special Effect - Create a special effect at TempLoc2 using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl //tạo effect "khói"
Special Effect - Destroy (Last created special effect)
Destructible - Pick every destructible within 200.00 of TempLoc2 and do (Actions)
Loop - Actions
Destructible - Kill (Picked destructible) //phá cây
Custom script: call RemoveLocation( udg_TempLoc ) //cái này để remove leak
Custom script: call RemoveLocation( udg_TempLoc2 ) //cái này để remove leak

Mấy lần em làm theo kiểu này nhưng khi đang move thì gặp vật cản thì nó bị chặn , thế nên em toàn làm dummy movement type kiểu fly để move thay cho hero :o
 
Mình dùng cái trigger của anh Tom thì quá là ngon lành luôn:|,thậm chí đang gần bờ vực đẩy nó lên bờ được luôn:|
 
Rõ ràng là bị , chả hiểu sao nữa , cứ gặp vật cản là bị chặn :o
 
Ơ anh Tom ơi,làm cái kiểu này nó leak à ?
VD nhé...
Mã:
Tu Tuong Dong Quy move
    Events
        Time - Every 0.02 seconds of game time
    Conditions
    Actions
        Set TempGroup = (Units of type Tu Tuong Dong Quy <Dummy Unit>)
        Unit Group - Pick every unit in TempGroup and do (Actions)
            Loop - Actions
                Set TempLoc = (Position of (Picked unit))
                Unit - Move (Picked unit) instantly to [b](TempLoc offset by 14.00 towards (Facing of (Picked unit)) degrees)[/b], facing (Facing of (Picked unit)) degrees
                Custom script:   call RemoveLocation(udg_TempLoc)
        Custom script:   call DestroyGroup(udg_TempGroup)
Đó anh,có phải đặt biến cho cái TempLoc offset by 14.00 towards (Facing of (Picked unit)) degrees ko anh ? Chết thật,dùng cái leak check nó ko báo thế là cứ chủ quan:(
 
@game_war48, muốn ko bị cản thì trước khi Slide, dùng Unit - Turn Collision On/Off, Turn collision for Unit Off khi đã "tắt" collision ( gọi là "va chạm" chả biết dịch là gì luôn ::( ) thì sẽ ko bị cản nữa. nhớ turn "On" sau khi đã slide xong

@lucifekit, phải đặt biến chứ. ko thì leak.
 
Đặt biến sau đó dùng RemoveLocation để chống leak một cách hiệu quả , ngoài ra 1 số spell thay vì add timer cho units thì lại dùng remove unit để chống leak , nhưng cách này hay bị bug =((
 
sao ko ai xem cách Silde của tui hết vậy ::(
ít nhất cũng có người xem chứ :((
cách silde này làm lâu lắm cách silde của tui làm lẹ mà muốn MUI cũng đc thôi
tạo array vào các point,unit,...
 
À thôi sửa được rồi, dù sao cũng cám ơn nhé.
 
ngoài silde ra có thể làm thêm tut jump ko anh tom? :D
nhiều người hỏi lắm đó kiếm cái nào hay hay cho anh em đi :wink:
 
anh Tom cho em hỏi, cái triger đầu tiên trong hướng dẩn phải có thêm một triger nữa để hoạt động phải không, chứ em thấy cứ 0.04s check slidetick mà không biết sildetick ở đâu ra giá trị mà check. Em còn noob, xin hướng dẫn giúp em với. :D

---------- merge ---------- >:)

àh còn cái triger mui nữa, sao cái triger kia dễ hơn thì có giải thích o cuối dòng, còn cái này ~X( thì chẳng có giải thích gì cả >> em cũng ~X( luôn.
 
Thế, có coi trigger nằm dưới nó chưa?
"Set SlideTick = 20 //tick = 20, mỗi tick là 0.04 (xem event của trigger Slide) -> cần 20 * 0.04 = 0.8 giây để move xong, tương đương với 0.8s stun ::)
"
Còn cái MUI nó không cần giải thích nữa là vì có giải thích thì cũng như cái trên
Và đây giải thích lý do nó MUI

-"Đầu tiên có 1 cái loop, vòng lặp từ 1 đến SlideIndex (số slide đang dùng ấy) Nếu SlideIndex = 0 thì ko lặp.

Sau đó kiểm tra SlideTick từ 1 đến SlideIndex, cái nào = 0 thì dừng slide đó, nhg thay vì tắt trigger như trên thì ta giảm SlideIndex."-
Mã:
For each (Integer B) from (Integer A) to (SlideIndex - 1), do (Actions)
                            Loop - Actions
                                Set SlideAngle[(Integer A)] = SlideAngle[((Integer A) + 1)]
                                Set SlideDistance[(Integer A)] = SlideDistance[((Integer A) + 1)]
                                Set SlideTick[(Integer A)] = SlideTick[((Integer A) + 1)]
                                Set SlideUnit[(Integer A)] = SlideUnit[((Integer A) + 1)]
                        Set SlideIndex = (SlideIndex - 1)
Loop B này dùng để đẩy index lùi lại. Ví dụ ta có thế này:
Mã:
1 2 3 4 5 6 7
Và Slide 4 dừng, thì phải lặp từ slide 4, và đẩy các dữ liệu (unit, distance, angle, tick) lùi lại, tức là 5 -> 4, 6 -> 5, 7 -> 6 và giảm SlideIndex đi 1 đơn vị
Mã:
1 2 3 4 5 6 7  //cũ: index = 7
1 2 3 5 6 7     //đẩy lùi lại, bây giờ index = 6
còn phía dưới thì cứ move unit bình thường.

Bây giờ Slide đã MUI rồi, 100 unit slide cùng lúc cũng ko sao.
 
Vẫn chưa hiểu tại sao dùng array lại MUI dc :(. Thực sự là không hiểu
 
Các bạn đào mộ ghê vãi :-"
 
Chắc vì ST nói cao siêu quá ;))
Nói bình dân là :) :
Khi dùng array thì có thể chia biến ra nhiều hơn vd như unit[1], unit[2], unit [3],....
Và khi MUI để không trùng nhau người ta dùng cách set như thế
Để nâng các số trong ngoặc [ ] thì phải dùng thêm 1 biến integer
Khi mỗi lần unit cast phép sẽ dùng lệnh: Set Integer = Integer + 1
Sau đó set caster là unit[Integer]
Và các unit sẽ được phân biệt nhau :)
-------
Khi dùng loop A từ 1 đến Integer thì nó sẽ lập lại các lệnh trong loop từ 1 lần đến Integer lần, vd: Loop A từ 1 đến 6 thì sẽ lặp lại 6 lần
Trong loop ấy sẽ dùng unit[IntegerA]
IntegerA chính là con số từ 1 đến Integer
Có nghĩa là khi loop nó sẽ làm cùng lúc các lệnh với các unit[1,2,3,...,Integer]
Đã hiểu chưa ;))
 
(sao mình ngu thế nhở) Em vẫn chưa hiểu khi check slidetick = 0 thì sao phải tăng slideangel, slidedistace ... lên làm gì, công dụng của mấy cái này và
1 2 3 4 5 6 7
cái này là gì vậy, ví dụ àh?
.
___________Auto Merge________________

.
hiểu rồi. vừa thấy bài của WE, thì ra là tăng Inter A để tránh chép dữ liệu, thế mà cứ nghỉ là tăng giá trị của slideangel ... :D

----- merge ---- \m/

thế em muốn slide 4 unit với cùng distance nhưng angel khác nhau (cụ thể là về 4 hướng với góc 90 dreege) thì phải làm thế nào.
 
thế em muốn slide 4 unit với cùng distance nhưng angel khác nhau (cụ thể là về 4 hướng với góc 90 dreege) thì phải làm thế nào.

Mã:
------ ------
Set SlideIndex = (SlideIndex + 1)
Set SlideUnit[SlideIndex] = [COLOR="Blue"]<unit "bị" Slide>[/COLOR]
Set SlideAngle[SlideIndex] = [COLOR="Blue"]<góc Slide>[/COLOR]
Set SlideTick[SlideIndex] = [COLOR="Blue"]<thời gian slide / 0.04>[/COLOR]
Set SlideDistance[SlideIndex] = [COLOR="Blue"]<khoảng cách Slide>[/COLOR] / SlideTick[SlideIndex]
------ ------

bốn lần vậy là được bốn unit
 
xin lỗi vì em nói không rõ. em muốn là mỗi lần cast spell sẽ tạo ra 4 unit, sau đó slide unit ra 4 hướng và dam unit nào chạm vào slideunit
 
Có thể anh Tom nói là 1 dummy = 1 đống var đó
=> bạn cần có 4 vả tương tự, chỉnh angle, point sao cho hợp tý.
Phần còn lại tự discover đi
 
hix, mình làm 2 triger này
Flame
Events
Unit - A unit Dies
Conditions
(Unit-type of (Triggering unit)) Equal to Bomb
Actions
Set Int4 = 4.00
For each (Integer A) from 1 to 4, do (Actions)
Loop - Actions
Unit - Create 1 Flame for (Owner of (Triggering unit)) at (Position of (Triggering unit)) facing Default building facing degrees
Set SlideUnit[(Integer A)] = (Last created unit)
Set SlideAngle[(Integer A)] = (Int4 x 90.00)
Set SlideTick[(Integer A)] = 20
Set FlamePoint = (Position of (Triggering unit))
Set Int4 = (Int4 - 1.00)
Flame Slide
Events
Time - Elapsed game time is 0.04 seconds
Conditions
Actions
For each (Integer A) from 1 to SlideIndex, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SlideTick[(Integer A)] Equal to 0
Then - Actions
Unit - Remove SlideUnit[(Integer A)] from the game
For each (Integer B) from (Integer A) to (SlideIndex - 1), do (Actions)
Loop - Actions
Set SlideAngle[(Integer A)] = (SlideAngle[(Integer A)] + 1.00)
Set SlideTick[(Integer A)] = (SlideTick[(Integer A)] + 1)
Set SlideUnit[(Integer A)] = SlideUnit[((Integer A) + 1)]
Set SlideIndex = (SlideIndex - 1)
Else - Actions
-------- ------- ------------------- ------------------- --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
SlideTick[(Integer A)] Greater than 0
Then - Actions
Set SlideTick[(Integer A)] = (SlideTick[(Integer A)] - 1)
Set FlamePoint = (FlamePoint offset by 200.00 towards SlideAngle[(Integer A)] degrees)
Unit - Move SlideUnit[(Integer A)] instantly to (Center of (Playable map area))
Unit Group - Pick every unit in (Units in (Region centered at FlamePoint with size (200.00, 200.00))) and do (Unit Group - Add (Picked unit) to BombTaget)
Unit - Remove (Picked unit) from the game
Else - Actions
khi test thì thấy có tạo unit thật, nhưng không slide. Có thể cho em biết em sai cho nào không.
 
Back
Top