Topic hỏi đáp về cách làm map | version 14

Status
Không mở trả lời sau này.
dùng trigger set life và lệnh kiểm tra alll / ênmy là được
 
^
thử rồi mà lỗi đầy. Mất máu target unit lẫn casting unit
 
^
chắc là dummy creep làm, tuskar chỉ việc quơ tay 1 phát thực chất là đánh thường (có model khi mang chop tree) mà thôi :D

---------- Post added at 10:49 ---------- Previous post was at 09:49 ----------

bây giờ em muốn làm skill này nhưng nghĩ hoài ko ra, mong mọi ng giúp:
tạo 1 skill active, khi target là ally thì bom (heal) cho nó 100/200/300/400 HP, khi target là enemy thì gây (deal) 100/200/300/400 damage cho nó, khi target là self thì bom (heal) cho chính mình 100/200/300/400 HP
* đặc biệt: khi cast skill này thì thằng cast sẽ mất 50/100/150/200 HP :D
tks!!! \m/
Tạo cái skill base trên skill channel, tạo trigger khi dùng nó thì sẽ
local integer effectAmount = GetSpellTargetUnit,GetUnitAbilityLevel(GetTriggerUnit(),'ID cua skill heal')*100
If IsUnitAlly(GetSpellTargetUnit(),GetTriggerPlayer()) then
//Bơm Máu
call SetWidgetLife(GetSpellTargetUnit(),GetWidgetLife(GetSpellTargetUnit())+effectAmount)
else
call UnitDamageTarget(GetTriggerUnit(),effectAmount,true,true,ATTACK_TYPE_SPELL,DAMAGE_TYPE_MAGIC,WEAPON_TYPE_WHOKNOWS)
endif

Chú ý:
ATTACK_TYPE_SPELL: có thể target tùy vào DAMEGE_TYPE_
ATTACK_TYPE_MAGIC:ko thể ảnh hưởng unit kháng phép, luôn ảnh hưởng unit dạng Ghost(banish)
ATTACK_TYPE_cònlại: ko thể target unit ở dạng Ghost (Banish)

DAMAGE_TYPE_MAGIC: có thể ảnh hưởng unit dạng Ghost, ko thể ảnh hưởng unit kháng phép, có thể ảnh hưởng unit dạng ghost/banish (Trừ khi dùng chung ATTACK_TYPE_cònlại)
DAMAGE_TYPE_UNIVERSAL: con nào cũng ảnh hưởng :D, xem mục ATTACK_TYPE de ket hợp
DAMAGE_TYPE_NORMAL/ENCHANCED: ko ảnh hưởng các con dạng ghost (trừ khi dùng chung ATTACK_TYPE_MAGIC)

Tham khảo ở đây
http://www.wc3c.net/showthread.php?p=1030046

Ahh mình thử làm cái IndexSystem dựa trên cái PUI (Perfect Unit Indexing) với mục đích để hiểu rõ hơn về Unit Index. Ai rỗi check lỗi dùm mình với, cái map up kèm nè.

globals
unit array IPUI_arrA
//unit array MT_arrB
//integer array MT_exp
integer IPUI_Freeslot=0
integer array IPUI_arrSlots
integer IPUI_MaxIndex=0


integer IPUI_maxcount=10//2000//000
real IPUI_checkCD=0.03
integer IPUI_checking=0
//End MT Data type
endglobals
//MT Data type
function IPUI_GetFreeSlot takes nothing returns integer
local integer slot = IPUI_Freeslot
if slot!=0 then
set IPUI_Freeslot = IPUI_arrSlots[IPUI_Freeslot]
else
set IPUI_MaxIndex=IPUI_MaxIndex +1
set slot = IPUI_MaxIndex
endif
return slot
endfunction
function IPUI_ClearSlot takes integer index returns nothing
local integer slot = index
if IPUI_arrA[index]==null then
//Dam bao o do da co unit
return
endif
call SetUnitUserData(IPUI_arrA[slot],0)
set IPUI_arrA[slot]=null
set IPUI_arrSlots[slot]=IPUI_Freeslot
set IPUI_Freeslot= slot
endfunction
function GetIPUIndex takes unit u returns integer //Day cung la ham de danh dau unit
local integer index=GetUnitUserData(u)
if index==0 then
set index=IPUI_GetFreeSlot()
call SetUnitUserData(u,index)
set IPUI_arrA[index]=u
endif
return index
endfunction
function GetIPUIUnit takes integer i returns unit
return IPUI_arrA
endfunction

function ClearIPUIndex takes integer index returns nothing
local unit u =IPUI_arrA[index]
if GetUnitUserData(u)==index then//Check xem unit o vi tri Index do co ko, va neu index ko phai la 0 thi
call IPUI_ClearSlot(index)
endif
set u = null
endfunction
function ClearIPUIUnit takes unit u returns nothing //Manually clear slot by unit
local integer index=GetUnitUserData(u)
if IPUI_arrA[index]==u then //neu nhu unit do ton tai va da dc danh dau
call IPUI_ClearSlot(index)
endif
endfunction


function Trig_IPUI_Actions takes nothing returns nothing
local integer check=IPUI_checking
set IPUI_checking=IPUI_checking+1
if IPUI_checking>IPUI_maxcount then
set IPUI_checking=1
endif
if IPUI_arrA[IPUI_checking]!=null and GetUnitUserData(IPUI_arrA[IPUI_checking])!=IPUI_checking then // day la dieu kien kiem tra unit da bi remove chua
//Neu co trong unit dc danh dau
//Nhung UserData lai ko dung voi cai da dc danh dau
call IPUI_ClearSlot(IPUI_checking)
endif
endfunction

//===========================================================================
function InitTrig_IPUI takes nothing returns nothing
set gg_trg_IPUI = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_IPUI, IPUI_checkCD )
call TriggerAddAction( gg_trg_IPUI, function Trig_IPUI_Actions )
endfunction



Ai rảnh check wa dùm em xem có lỗi gì ko nhé? dùng GetIPUIndex để đặt/lấy index unit, GETIPUIUnit để lấy unit có index đã lưu, ClearIPUIUnit để xóa việc đã đánh dấu Unit, ClearIPUIndex để xóa việc đã đánh dấu theo Index.
 
Chỉnh sửa cuối:
cho em hỏi làm thế nào để khi dùng skill Impale thì nó chỉ cast tới vị trí mình kick chuột thôi chứ ko cast hết khoảng cách của nó ko?
 
Trigger mình đang làm nhưng giữa chừng bỏ dở vì ko biết ghi tiếp cái gì. Mình có 2 ý định:
1) dùng skill Holy Light, heal/damage = 100/200/300/400 (target allow: hero, enemy, allied, self). Sau đó dùng trigger deal 50/100/150/200 damage to casting unit và deal 50/100/150/200 damage to target nếu là enemy (vì lượng damage của Holy Light = 1/2 lượng HP heal)
2) dùng 1 skill nào đó như Storm Bolt, Chain Lightning, v...v và dùng các trigger như trên nhưng thay số
theo mấy pro thì cách nào chính xác hơn
 
dùng 3 lệnh if else then :
_ Kiểm tra target :
+ Ally
+ Casting
+ Enemy
_> Deal dame hoặc tăng HP thôi
 
Trigger mình đang làm nhưng giữa chừng bỏ dở vì ko biết ghi tiếp cái gì. Mình có 2 ý định:
1) dùng skill Holy Light, heal/damage = 100/200/300/400 (target allow: hero, enemy, allied, self). Sau đó dùng trigger deal 50/100/150/200 damage to casting unit và deal 50/100/150/200 damage to target nếu là enemy (vì lượng damage của Holy Light = 1/2 lượng HP heal)

Cái này: nếu là ally thì xài đc rồi, nhưng nếu là enemy như bạn nói thì phải deal 150/300/450/600 dam (chứ ko phải 50/100/150/200 như bạn nói) vì đã heal 100/200/300/400, vậy mới gây đc 50/100/150/200 dam (=1/2 lượng heal)
nếu vậy thì bạn nên dùng loại dam là ATTACK_TYPE_CHAOS (nếu bạn ko chỉnh gì custom constants), DAMAGE_TYPE_UNIVERSAL, vậy sẽ gây đc dam thuần đúng con số đó :D
 
Chỉnh sửa cuối:
Cái này: nếu là ally thì xài đc rồi, nhưng nếu là enemy như bạn nói thì phải deal 150/300/450/600 dam (chứ ko phải 50/100/150/200 như bạn nói) vì đã heal 100/200/300/400, vậy mới gây đc 50/100/150/200 dam (=1/2 lượng heal)
nếu vậy thì bạn nên dùng loại dam là ATTACK_TYPE_CHAOS (nếu bạn ko chỉnh gì custom constants), DAMAGE_TYPE_UNIVERSAL, vậy sẽ gây đc dam thuần đúng con số đó :D

Bày GUI cho nó đi. đừng có bày jass. GUI làm chưa êm mà đòi jass :(
 
Trigger mình đang làm nhưng giữa chừng bỏ dở vì ko biết ghi tiếp cái gì. Mình có 2 ý định:
1) dùng skill Holy Light, heal/damage = 100/200/300/400 (target allow: hero, enemy, allied, self). Sau đó dùng trigger deal 50/100/150/200 damage to casting unit và deal 50/100/150/200 damage to target nếu là enemy (vì lượng damage của Holy Light = 1/2 lượng HP heal)
2) dùng 1 skill nào đó như Storm Bolt, Chain Lightning, v...v và dùng các trigger như trên nhưng thay số
theo mấy pro thì cách nào chính xác hơn

- Theo tôi nghĩ cách 1 ko khả thi, vì hình như Holy Life chỉ có thể cast vào bản thân, đồng đội, hoặc kẻ địch là undead, ngoài ra ko thể cast vào kẻ địch là các race khác.
- Cách 2 thì làm như sau :
Events : (Tự cho)
Conditions : (Tự cho)
Actions :
set life of (caster) = life of (caster) - ...
if (unit bị cast là enemy với caster) is true
then
deal damage target ...
eles
set life of (unit được cast) = life of (unit được cast) + ...
 
Bày GUI cho nó đi. đừng có bày jass. GUI làm chưa êm mà đòi jass :(

Tớ ko biết làm GUI T_T
Nhưng cái tớ bày phía trên đâu phải JASS đâu :-s...
- Theo tôi nghĩ cách 1 ko khả thi, vì hình như Holy Life chỉ có thể cast vào bản thân, đồng đội, hoặc kẻ địch là undead, ngoài ra ko thể cast vào kẻ địch là các race khác.
- Cách 2 thì làm như sau :
Events : (Tự cho)
Conditions : (Tự cho)
Actions :
set life of (caster) = life of (caster) - ...
if (unit bị cast là enemy với caster) is true
then
deal damage target ...
eles
set life of (unit được cast) = life of (unit được cast) + ...
Uh nhỉ ko để ý holy life ko cast dc enemy ko phải Undead, cứ tưởng chỉnh target allowed đc chứ nhỉ :D

Bạn làm thử 1 cái ability có thể target đc cả ta và địch, ròi dùng Trigger này nha
Events
Unit - A unit Starts the effect of an ability
Conditions
(GetSpellAbilityId()=='asdd') Equal to True
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(IsUnitAlly(GetSpellTargetUnit(),GetTriggerPlayer())) Equal to True
Then - Actions
Custom script: call SetWidgetLife(GetSpellTargetUnit(),GetWidgetLife(GetSpellTargetUnit())+100*GetUnitAbilityLevel(GetTriggerUnit(),'asdd'))
Else - Actions
Unit - Cause (Triggering unit) to damage (Target unit of ability being cast), dealing (50*GetUnitAbilityLevel(GetTriggerUnit(),'asdd')) damage of attack type Chaos and damage type Universal
Thay asdd = ability ID của bạn
 
Chỉnh sửa cuối:
Tớ ko biết làm GUI T_T
Nhưng cái tớ bày phía trên đâu phải JASS đâu :-s...

Uh nhỉ ko để ý holy life ko cast dc enemy ko phải Undead, cứ tưởng chỉnh target allowed đc chứ nhỉ :D

1. ???
2. WE có 2 skill cast target undead
 
Events
Unit - A unit Starts the effect of an ability
Conditions
(GetSpellAbilityId()=='asdd') Equal to True
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(IsUnitAlly(GetSpellTargetUnit(),GetTriggerPlayer())) Equal to True
Then - Actions
Custom script: call SetWidgetLife(GetSpellTargetUnit(),GetWidgetLife(GetSpellTargetUnit())+100*GetUnitAbilityLevel(GetTriggerUnit(),'asdd'))
Else - Actions
Unit - Cause (Triggering unit) to damage (Target unit of ability being cast), dealing (50*GetUnitAbilityLevel(GetTriggerUnit(),'asdd')) damage of attack type Chaos and damage type Universal


Life cost đâu ? Bạn thiếu 1 code trừ cost đấy
?
 
Các pro cho mình hỏi làm thế nào để khi chọn Heroes thì heroes đó xuất hiện ở cái Circle of Power và khi chết đi heroes sẽ tự động hồi sinh lại ở cái Circle of Power đó? Mình dùng các bóng ngăn cách nhưng ko hiểu sao lúc test game thì chọn heroes nó lại xuất hiện ở cái nhà Tavern vừa chọn ?

Và cho mình hỏi vì sao 1 số game vừa vào game thì có dòng thông báo ở bên trái màn hình. VD: Bạn đang chơi game Dota II2.5.
 
Mình đang cần giúp:

Mình làm hệ thống tàu hỏa và mình muốn khi tàu đến thì thông báo trên tàu là đến còn nếu người khác không đi tàu mà đi qua thì hiện cho người đó thanks

---------- Post added at 22:54 ---------- Previous post was at 22:51 ----------

Các pro cho mình hỏi làm thế nào để khi chọn Heroes thì heroes đó xuất hiện ở cái Circle of Power và khi chết đi heroes sẽ tự động hồi sinh lại ở cái Circle of Power đó? Mình dùng các bóng ngăn cách nhưng ko hiểu sao lúc test game thì chọn heroes nó lại xuất hiện ở cái nhà Tavern vừa chọn ?

Và cho mình hỏi vì sao 1 số game vừa vào game thì có dòng thông báo ở bên trái màn hình. VD: Bạn đang chơi game Dota II2.5.

Bạn thử áp dụng học item qua mua skills hay gì ấy quên rùi
 
Mình đang cần giúp:

Mình làm hệ thống tàu hỏa và mình muốn khi tàu đến thì thông báo trên tàu là đến còn nếu người khác không đi tàu mà đi qua thì hiện cho người đó thanks

---------- Post added at 22:54 ---------- Previous post was at 22:51 ----------



Bạn thử áp dụng học item qua mua skills hay gì ấy quên rùi

Bạn nói zay mình sao hiểu ? Còn ko hướng dẫn nói vậy thì...Dù sao cũng thanks vì comment
 
Mình đang cần giúp:

Mình làm hệ thống tàu hỏa và mình muốn khi tàu đến thì thông báo trên tàu là đến còn nếu người khác không đi tàu mà đi qua thì hiện cho người đó thanks

---------- Post added at 22:54 ---------- Previous post was at 22:51 ----------



Bạn thử áp dụng học item qua mua skills hay gì ấy quên rùi

Dùng code khi soil unit ( không biết viết đúng không ) thì move unit này về rect / pos / camera object / ... nào đó ( unit move : soil unit _)
 
Mình đang cần giúp:

Mình làm hệ thống tàu hỏa và mình muốn khi tàu đến thì thông báo trên tàu là đến còn nếu người khác không đi tàu mà đi qua thì hiện cho người đó thanks

---------- Post added at 22:54 ---------- Previous post was at 22:51 ----------



Bạn thử áp dụng học item qua mua skills hay gì ấy quên rùi

Bạn thử áp dụng DisplayTextToPlayer kết hợp GetLocalPlayer() kiểm tra và hiện text tương ứng xem.
 
Status
Không mở trả lời sau này.
Back
Top