YAN[asian]
Mario & Luigi
- 27/3/07
- 812
- 417
Nhờ Tom hướng dẫn mình lại vụ unit slide đến mép bản đồ thì dừng lại nhé.
Chỉnh sửa cuối:
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
, mặc dù chắc là ko dùng gì nhưng có lẽ post lên người khác biết vẫn tốt :P2/Nếu 1 unit A summon ra nhiều unit B thì nênglobals
hashtable MyHash = InitHashtable()
endglobals
function Integer2Widget takes integer int returns widget
call SaveFogStateHandle(MyHash,0,0,ConvertFogState(int))
return LoadWidgetHandle(MyHash,0,0)
endfunction
. Cám ơn bạn nhiều. Mà có 1 điều là lúc đầu mình GetUnitUserData thì ra 0, nhưng remove xong Get lại thì nó là 48, nó đổi là vì unit đó đã ko tồn tại nữa phải ko, ý mình là nếu dùng những hàm khác ảnh hưởng unit thì cái UserData mình set đâu có bị gì phải ko
?function Trig_Test_Actions takes nothing returns nothing
local unit u=CreateUnit(Player(0),'hspt',000,0,0)
call BJDebugMsg("Truoc remove " + R2S(GetUnitUserData(u)) + " - " + I2S(GetHandleId(u)))
//call KillUnit(u)
call RemoveUnit(u)
if u!=null then//and GetWidgetLife(u)>0.405 then
call BJDebugMsg("Sau remove " + R2S(GetUnitUserData(u)) + " - " + GetUnitName(u) + I2S(GetHandleId(u)))
endif
set g=null
endfunction
, vừa thử
. nếu
Mình vừa thử thay nó = 1 biến unit global, và cũng ko khác gì1, cái đó theo bây giờ vẫn còn tại và còn một cái "kế nhiệm" tốt hơn nó là Hashtable
p/s:mình vừa thử lại,
theo mình "đoán" đầu tiên bạn cục bộ đơn vị đó bằng hàm local. tiếp theo kiểm tên bằng handle(u) đó
sau đó remove unit với handle là (u).
mặc dù unit đã xóa sổ nhưng trong cục bộ function vẫn còn data của unit đó. có thể là tên thậm chí còn có thể lưu trữ lại Z Y X cuối cùng trước khi xóa sổ (bằng cách set u = null) vì điều này sẽ khiến (u) vẫn hiển thị tên. nếu
globals
private unit u
endglobals
set u=CreateUnit(Player(0),'hspt',000,0,0) thay vì local unit u=CreateUnit(Player(0),'hspt',000,0,0) thì điều đó có thể không xảy ra![]()

Mấy Pro chỉ em cái, em dở nhất mấy cái vụ Trigger và biến nên không làm một số spell hay được mong các bác giúp giùm em.
1: Biến
Hướng dẫn cách làm biến tạo Unit ngay tại bản thân( chơi chiêu ấy)
Hướng dẫn cách làm biến tạo Unit ở các Unit xung quanh một vùng.
2: Spell
Một spell cơ bản về sử dụng chiêu gây sát thương bằng chính lượng damage của mình
Một spell cơ bản về sử dụng chiêu gây sát thương bằng các chỉ số Agi, Str ...
Một spell cơ bản về sử dụng chiêu gây sát thương bằng chính lượng mana hoặc Hp của mình ấy.
(Lưu ý cơ bản thôi nha đùng quá phức tạp)
Mong các Pro chỉ dùm cho, cảm ơn nhiều![]()

Quote lại lần nữa ai giúp mình không, làm ơn đi mà![]()
Hướng dẫn cách làm biến tạo Unit ở các Unit xung quanh một vùng: dùng trigger Unit - Creat 1 ...............
---------- Post added at 09:28 ---------- Previous post was at 09:19 ----------
Một spell cơ bản về sử dụng chiêu gây sát thương bằng các chỉ số Agi, Str: dùng trigger Unit - Damage Target
bua lun 1
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to bua lun 1
Actions
Unit - Cause (Casting unit) to damage (Target unit of ability being cast), dealing ((Real((Level of bua lun 1 for (Casting unit)))) + ((Real((Strength of (Casting unit) (Exclude bonuses)))) x 2.00)) damage of attack type Spells and damage type Normal



globals
unit Untitled_Trigger_001_u
endglobals
function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
call BJDebugMsg("Truoc remove " + R2S(GetUnitUserData(Untitled_Trigger_001_u)) + " - " + I2S(GetHandleId(Untitled_Trigger_001_u)))
call RemoveUnit(Untitled_Trigger_001_u)
if Untitled_Trigger_001_u!=null then
call BJDebugMsg("Sau remove " + R2S(GetUnitUserData(Untitled_Trigger_001_u)) + " - " + GetUnitName(Untitled_Trigger_001_u) + I2S(GetHandleId(Untitled_Trigger_001_u)))
endif
endfunction
function InitTrig_Untitled_Trigger_001 takes nothing returns nothing
set gg_trg_Untitled_Trigger_001 = CreateTrigger( )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_Untitled_Trigger_001, Player(0) )
call TriggerAddAction( gg_trg_Untitled_Trigger_001, function Trig_Untitled_Trigger_001_Actions )
set Untitled_Trigger_001_u=CreateUnit(Player(0),'hspt',000,0,0)
endfunction

View attachment 149087
Ví dụ: Thứ tự trong WE tính từ trên xuống
Item đầu tiên tương đương vị trí là cột 0 dòng 0
Item thứ 6 tương đương vị trí là cột 1 dòng 1y

YAN[asian];21584751 nói:Nhờ Tom hướng dẫn mình lại vụ unit slide đến mép bản đồ thì dừng lại nhé.



YAN[asian];21588898 nói:Xóa bài mà ko giúp hả Tom? :(
SlideMove // ko cần OFF sẵn, cứ ON luôn
Events
Time - Every 0.04 seconds of game time
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
For each (Integer B) from (Integer A) to (SlideIndex - 1), do (Actions)
Loop - Actions
Set SlideAngle[(Integer B)] = SlideAngle[((Integer B) + 1)]
Set SlideDistance[(Integer B)] = SlideDistance[((Integer B) + 1)]
Set SlideTick[(Integer B)] = SlideTick[((Integer B) + 1)]
Set SlideUnit[(Integer B)] = SlideUnit[((Integer B) + 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 TempLoc = (Position of SlideUnit[(Integer A)])
Set TempLoc2 = (TempLoc offset by SlideDistance[(Integer A)] towards SlideAngle[(Integer A)] degrees)
[COLOR="#0000FF"]If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Playable map area) contains TempLoc2) Equal to True
Then - Actions
Unit - Move SlideUnit[(Integer A)] instantly to TempLoc2
Special Effect - Create a special effect at TempLoc2 using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
Destructible - Pick every destructible within 200.00 of TempLoc2 and do (Actions)
Loop - Actions
Destructible - Kill (Picked destructible)
Else - Actions
Set SlideTick[(Integer A)] = 0[/COLOR]
Custom script: call RemoveLocation( udg_TempLoc )
Custom script: call RemoveLocation( udg_TempLoc2 )
Else - Actions
Anh Tom............. l...ự...u......đ...ạ...n
cho em hỏi cách chuyển 1 skill từ active sang passive vì spellbook nhấn đc, xấu lắm
p.s: em chỉ nói vậy cho vui chứ ko phải chửi anh nhé![]()

Learn
Events
Unit - A unit Learns a skill
Conditions
(Learned Hero Skill) Equal to [B]ability A[/B]
Actions
Set TempUnit = (Triggering unit)
Set TempInt = (Learned skill level)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
TempInt Equal to 1
Then - Actions
Unit - Add [B]Spell Book[/B] to TempUnit
Else - Actions
[COLOR="#0000FF"]Unit - Set level of [B]ability trong spellbook[/B] for TempUnit to TempInt[/COLOR]
sửa đi sửa lại mà vẫn lag.... chỉ còn 1 cách thôi....
mình chỉ cho bạn, bạn hứa ko đc nói với ai nghe chưa!
[spoil]tạo lại map mới thử đê![/spoil]
như mình đã nói đấy thôi:
1. Doodad nhìu 1 chỗ lag
2. tạo một lượt nhìu unit lag
3. timer loop nhìu lần nhìu đơn vị lag
4. một vài action ko hợp lệ trong hàm lag
5. period time của skill buff ko đúng chỉ định lag
6. blah blah blah... lag...
sửa ko hết thì cách đấy là nước cờ cuối cùng!
đấy là cố cắt ra trigger khác bớt rồi đấy. Vì cái này lớn nhất map nên mình xem kỹ cả rồi.... chắc phải có nguyên nhân nào đó chứ ?Sao ko dùng group thì chỉ cần 1 cái array và bao nhiêu unit cũng đượcfunction test takes nothing returns nothing
local unit u=CreateUnit(Player(0),'<id unit>',0,0,0)
if GetRandomInt(0,1)==0 then
call RemoveUnit(u)
//Nếu ở đây mình ko set u=null hay gì khác
endif
//thì ngay chỗ này ko thể nào biết đc u đã bị remove chưa đúng ko bạn?
endfucntion
. Tại đó h ít dùng group
.Thì mình dùng UnitB[GetUnitUserData(GetTriggerUnit())*3+0/1/2] để lấy unit B thứ 1/2/3 của A nhỉQuay về cái ability abcxyz lúc nãy, ví dụ mình có 1 unitA tạo 3 unitB, mình tạo 3 mảng arrUnitB1, arrUnitB2, arrUnitB3 và lưu index dữ liệu vào UserDat của unitA, rồi khi nào cần mình arrUnitB1/2/3[GetUnitUserData(GetTriggerUnit())] đế lấy unit B thứ 1/2/3 của A đc phải ko?

map vltk của mình đưa cho thằng nào edit lại chắc nó cũng hoa cả mắt :) cái trigger Tống kim dài đến nỗi Con trượt bên cạnh dài còn khoảng chưa đầy 1cmđấy là cố cắt ra trigger khác bớt rồi đấy. Vì cái này lớn nhất map nên mình xem kỹ cả rồi.... chắc phải có nguyên nhân nào đó chứ ?
ừa, giả lập mảng 2 chiều @@
nhưng mà tớ giờ cũng ko chắc dùng group hay unit array nhanh hơn nữa ...
