Topic hỏi đáp (tập 5) về cách làm map

Status
Không mở trả lời sau này.
@Kingwar:
[spoil]
Mã:
globals
    unit array UNITP
endglobals

scope CreateUnits initializer IntCreateUnit
function Create_Actions takes nothing returns nothing
    local integer i = 1
    
    loop
        exitwhen i > 50
        
        set UNITP[i] = CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270) 
        call TriggerSleepAction( 0. )
        
        set i = i + 1
    endloop
endfunction

function IntCreateUnit takes nothing returns nothing
    local trigger Create = CreateTrigger()
    call TriggerRegisterTimerEventSingle( Create, 5 )
    call TriggerAddAction(Create, function Create_Actions)
endfunction
endscope

scope GameInfo initializer InitTrig
function Trig_Actions takes nothing returns nothing
    local integer i
    
    call DisplayTimedTextToPlayer( Player( 0 ), 0., 0., 30., "Create Peasant !")
    
    call TriggerSleepAction( 3. )
    
    call DisplayTimedTextToPlayer( Player( 0 ), 0., 0., 30., "Kill Peasant !")

    set i = 1
    loop 
        exitwhen i > 50
        
        call KillUnit( UNITP[i] )
        call DisplayTimedTextToPlayer( Player( 0 ), 0., 0., 30., "Killed " + I2S( i ) + " Peasant !")
        
        call TriggerSleepAction( 0.1 )
        
        set i = i + 1
    endloop
endfunction

function InitTrig takes nothing returns nothing
    local trigger Trig = CreateTrigger()
    call TriggerRegisterTimerEventSingle(Trig,3)
    call TriggerAddAction(Trig, function Trig_Actions)
endfunction
endscope

Như đoạn code trên, Sau khi mỗi Peasant create ở trong loop (scope 1) thì đc "save" vào biến globals array UNITP. Và Peasant sẽ bị kill ở scope 2. [/spoil]

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

@Zhenghe: Xem post này: http://forum.gamevn.com/showpost.php?p=15877471
[spoil]Đoạn code đấy thiếu và sai rất nhiều.

Dùng Jassnewgen, native này kô có
Mã:
   call [B]AddSpecialEffectTargetUnit[/B]( "chest", data.target, data.sfx)
thì nó kô hiện lên màu (ngoại trừ một số native ở 1.24, jassnewgen chưa cập nhật). Native đúng của nó phải là
Mã:
    call[B] AddSpecialEffectTarget[/B]( "chest", data.target, data.sfx)

Và function này:
Mã:
function Thunder_Wraith_Setup takes unit caster, unit target, unit dummy, integer int, string sfx, location loc returns nothing
   local TS data = TS.create()
   local timer t1 = NewTimer()
   local timer t2
   set data.caster = GetSpellAbility()
   set data.target = GetSpellTargetUnit()
   set loc = GetUnitLoc (data.target)
   set data.sfx = "Abilities\Spells\Orc\LightningShield\LightningShieldBuff.mdl"
   set data.int = 3
   set data.dummy = CreateNUnitsAtLoc ( 1, 'e001', GetOwningPlayer(data.caster), GetUnitLoc(data.target), 0.00)
   call TimerStart( t1, (I2R(4/3) ), true, function Thunder_Wraith_Count)
   call TimerStart( t2, 0.03 ), true, function Dummy_Attach_Target)
   set t1 = null
   set t2 = null
endfunction

có:

1/
Mã:
   local timer t1 = NewTimer()
   local timer t2
timer t1 thì có NewTimer() timer t2 thì lại bỏ trống ? Như vậy chẳng phải là toàn bộ những thứ gì dính dáng đến timer t2 đều vô giá trị à ?

2/
Mã:
   set data.caster = GetSpellAbility()
Dùng Jassnewgen, muốn xem native như thế nào thì bấm Ctrl + Chuột trái vào cái native đó. Native GetSpellAbility như sau:
Mã:
constant native GetSpellAbility takes nothing [B]returns ability[/B]
Để ý cái phần bôi đên, tức là native này sẽ trả 1 giá trị ability, còn data.caster thì là unit, set unit = ability ? Nếu muốn lấy caster thì dùng native GetTriggerUnit.

3/
Mã:
   set data.dummy = CreateNUnitsAtLoc ( 1, 'e001', GetOwningPlayer(data.caster), GetUnitLoc(data.target), 0.00)
Cũng như trên, nếu dùng BJ CreateNUnitsAtLoc thì sẽ trả group, set unit = group ? Trong trường hợp này, phải dùng native CreateUnitAtLoc:
Mã:
   set data.dummy = CreateUnitAtLoc ( 'e001', GetOwningPlayer(data.caster), GetUnitLoc(data.target), 0. )

4/
Mã:
   set loc = GetUnitLoc (data.target)
loc ở đây là cái gì mài set = GetUnitLoc( data.target ) ? Chưa local, chưa gì cả mà đã set luôn rồi.
Mã:
local location loc = GetUnitLoc( data.target )
hoặc
Mã:
local location loc
...........
set loc = GetUnitLoc( data.target )
[code]
(local phải luôn luôn ở đầu function). Sau đó nhớ [B]call RemoveLocation( loc )[/B] và [B]set loc = null[/B]

5/Và ở tên function
[code]function Thunder_Wraith_Setup [B]takes unit caster, unit target, unit dummy, integer int, string sfx, location loc[/B]returns nothing
Kô thấy function nào gọi function này, mà function này chỉ chạy khi cast spell, thế thì mấy cái kia có cần thiết kô ?

6/Tên struct ở trên là TW, ở dưới lại
Mã:
local TS data = TS.create()
?

7/Phần trigger Init,
Mã:
call TriggerAddAction( gg_trg_t, function Thunder_Wraith_Actions )
Mà sao kô thấy function nào tên là Thunder_Wraith_Actions ?

8/Cả cái lệnh này nữa
Mã:
   call TimerStart( t1, (I2R(4/3) ), true, function [B]Thunder_Wraith_Count[/B])
Chả thấy function nào tên là Thunder_Wraith_Count cả.

9/Đang dùng TimerUtils phải kô ? Muốn lưu struct thì phải có dòng SetTimerData đã (cái này trong TimerUtils có, kèm cả GetTimerData để lấy struct nữa):
Mã:
call SetTimerData( timer, data )

Sửa hết tất cả lỗi cho function này thì đc:
Mã:
function Thunder_Wraith_Actions takes nothing returns nothing
   local TW data = TW.create()
   
   local timer t1 = NewTimer()
   local timer t2 = NewTimer()
   
   local location loc
   
   set data.caster = GetTriggerUnit()
   set data.target = GetSpellTargetUnit()
   
   set loc = GetUnitLoc( data.target )
   
   set data.sfx = "Abilities\Spells\Orc\LightningShield\LightningShieldBuff.mdl"
   
   set data.int = 3
   
   set data.dummy = CreateUnitAtLoc( 'e001', GetOwningPlayer(data.caster), GetUnitLoc(data.target), 0. )
   
   call SetTimerData( t1, data )
   call SetTimerData( t2, data )
   call TimerStart( t1, (I2R(4/3) ), true, function Dummy_Wraith_Count)
   call TimerStart( t2, 0.03 ), true, function Dummy_Attach_Target)
   
   call RemoveLocation( loc )
   set loc = null
   set t1 = null
   set t2 = null
endfunction

Tiếp, 2 function còn lại. Xem sơ qua thì function Dummy_Attach_Target là để move dummy unit sát với target, function Dummy_Wraith_Count là để deals damage. Có thể gộp 2 function này lại làm 1. Nhưng trước hết sửa lỗi ở function Dummy_Wraith_Count đã.
Mã:
function Dummy_Wraith_Count takes nothing returns nothing
   local timer t1 = GetExpiredTimer()
   call UnitAddAbility( 'A006', data.dummy)
   call IssueTargetOrder( data.dummy, "chainlightning", data.target)
   call AddSpecialEffectTarget( "chest", data.target, data.sfx)
   call DestroyEffect( GetLastCreatedEffect() )
   call UnitDamageTarget( data.caster, data.target, ((35*I2R(GetUnitAbilityLevel(data.caster, 'A004')))+ 15),true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) 
   set data.int = (data.int - 1)
   if data.int <= 0 then
      call data.destroy()
      call ReleaseTimer(t1)
   endif
   set t1 = null
endfunction
1/ Chưa có cái gì liên quan đến data cả, sao mà dùng ngay đc ? Phải lấy "data" từ struct TW đã
Mã:
local timer t1 = GetExpiredTimer()
local TW data = GetTimerData( t1 )

2/
Mã:
   call AddSpecialEffectTarget( "chest", data.target, data.sfx)
   call DestroyEffect( GetLastCreatedEffect() )
Hai dòng này có thể gộp lại làm một
Mã:
call DestroyEffect( AddSpecialEffectTarget( "chest", data.target, data.sfx ) )
Mà vốn dĩ, chả có native hay BJ nào là GetLastCreatedEffect cả >> sai :-@.

3/
Mã:
   call UnitAddAbility( 'A006', data.dummy)
Sao kô Add luôn lúc tạo dummy ? Ở function Thunder_Wraith_Actions ấy (sau khi tạo dummy thì add vào).

Tổng kết:
Mã:
function Dummy_Wraith_Count takes nothing returns nothing
   local timer t1 = GetExpiredTimer()
   local TW data = GetTimerData( t1 )
   
   call IssueTargetOrder( data.dummy, "chainlightning", data.target)
   
   call DestroyEffect( AddSpecialEffectTarget( "chest", data.target, data.sfx ) )
   call UnitDamageTarget( data.caster, data.target, ((35*I2R(GetUnitAbilityLevel(data.caster, 'A004')))+ 15),true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) 
   
   set data.int = data.int - 1
   if data.int <= 0 then
      call data.destroy()
      call ReleaseTimer( t1 )
   endif
   
   set t1 = null
endfunction

Trở lại việc gộp 2 function kia. Spell này mỗi 1 giây deals damage 1 lần đúng kô ? Giờ tạo thêm 1 biến integer ở struct, đặt tên là tick.
Mã:
 struct TW
   unit caster
   unit target
   unit dummy
   location loc // Giờ mới để ý cái này, bỏ đi, kô dùng đến mà.
   integer int
   string sfx
endstruct

Thêm tick, bỏ loc đi:

Mã:
truct TW
   unit caster
   unit target
   unit dummy
   
   integer int
   integer tick
   
   string sfx
endstruct

Ngừng ở đây, kô chữa nữa, làm lại cái mới thôi.
[/spoil]
 
Chỉnh sửa cuối:
dùng Global, nếu dùng Global trong jass thi khỏi cần udg, các function đều có thể dùng

globals
integer i
real a
endglobals

nếu

globals
private integer i
private real a
endglobals

thì chỉ xài được cho các function trong scope đó thôi
 
@Kingwar:
Mã:
globals
    unit array UNITP
endglobals

scope CreateUnits initializer IntCreateUnit
function Create_Actions takes nothing returns nothing
    local integer i = 1
    
    loop
        exitwhen i > 50
        
        set UNITP[i] = CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270) 
        call TriggerSleepAction( 0. )
        
        set i = i + 1
    endloop
endfunction

function IntCreateUnit takes nothing returns nothing
    local trigger Create = CreateTrigger()
    call TriggerRegisterTimerEventSingle( Create, 5 )
    call TriggerAddAction(Create, function Create_Actions)
endfunction
endscope

scope GameInfo initializer InitTrig
function Trig_Actions takes nothing returns nothing
    local integer i
    
    call DisplayTimedTextToPlayer( Player( 0 ), 0., 0., 30., "Create Peasant !")
    
    call TriggerSleepAction( 3. )
    
    call DisplayTimedTextToPlayer( Player( 0 ), 0., 0., 30., "Kill Peasant !")

    set i = 1
    loop 
        exitwhen i > 50
        
        call KillUnit( UNITP[i] )
        call DisplayTimedTextToPlayer( Player( 0 ), 0., 0., 30., "Killed " + I2S( i ) + " Peasant !")
        
        call TriggerSleepAction( 0.1 )
        
        set i = i + 1
    endloop
endfunction

function InitTrig takes nothing returns nothing
    local trigger Trig = CreateTrigger()
    call TriggerRegisterTimerEventSingle(Trig,3)
    call TriggerAddAction(Trig, function Trig_Actions)
endfunction
endscope

Như đoạn code trên, Sau khi mỗi Peasant create ở trong loop (scope 1) thì đc "save" vào biến globals array UNITP. Và Peasant sẽ bị kill ở scope 2.

bài giảng rất hay, nhưng rep hết dc (spam bên trại rep hết rùi):D
 
@Andien: mình ko biết cụ thể skill nó thế nào nhưng có thể dùng Custom scrip: wait( den khi target mat mau ) đùa tí thôi, bạn dùng Event - Unit take damage
ví dụ: Skill passive có 25% gây damage AoE từ vị trí của target.
Tạo 3 trigger
Trigger 1: Event: Time Elapse 0.00
Cond: Trống
Action: Pick every Unit in playable map
- Add Picked unit to TakeDamageGroup
- Add Event trigger 3 ( picked unit take damage)

Trigger 2 Event: Unit enter Playable map
Cond: Trigger Unit in TakeDamageGroup equal false
Act:
Add Event trigger 3 Trigger Unit take damage

Trigger 3: Event bỏ trống (vì đã add ở trigger 1 và 2)
Cond: Lvl của skill passive > 1
Random integer from 1 to 100 less than or equal 25 (random int để tạo % đánh ra skill, đổi số 25 thành bất cứ số nào tùy thích)
Action: thích gì thêm vào

P/s: tại sao em xài Damage Source nhìu thì bị văng khỏi war3 ???

cách trên mình đã thử rồi, nó có bug là khi sử dụng skill gây damage thì passive này tự họat động luôn
 
cách trên mình đã thử rồi, nó có bug là khi sử dụng skill gây damage thì passive này tự họat động luôn
Demo Map đây, chỉ cần 1 trigger là đủ:)
 
Mong mấy anh chị chỉ dạy thêm về điều này: Trong Warcraft có khá nhiều Event Response (trong trigger í) như Entering Unit, Dying Unit,... mấy anh chị vui lòng giải nghĩa hết giùm em đc ko?
Còn nữa, muốn tạo một item mà chỉ cần mua nó là biến (như trong KT chủa anh Rex) thì làm thế nào?


Em ko có thời gian để lục diễm đàn. Hu hu

---------- Post added at 16:28 ---------- Previous post was at 16:26 ----------

Mong mấy anh chị chỉ dạy thêm về điều này: Trong Warcraft có khá nhiều Event Response (trong trigger í) như Entering Unit, Dying Unit,... mấy anh chị vui lòng giải nghĩa hết giùm em đc ko?
Còn nữa, muốn tạo một item mà chỉ cần mua nó là biến (như trong KT chủa anh Rex) thì làm thế nào?;));))


Em ko có thời gian để lục diễm đàn. :(:(
 
Mong mấy anh chị chỉ dạy thêm về điều này: Trong Warcraft có khá nhiều Event Response (trong trigger í) như Entering Unit, Dying Unit,... mấy anh chị vui lòng giải nghĩa hết giùm em đc ko?
Còn nữa, muốn tạo một item mà chỉ cần mua nó là biến (như trong KT chủa anh Rex) thì làm thế nào?


Em ko có thời gian để lục diễm đàn. Hu hu

---------- Post added at 16:28 ---------- Previous post was at 16:26 ----------

Mong mấy anh chị chỉ dạy thêm về điều này: Trong Warcraft có khá nhiều Event Response (trong trigger í) như Entering Unit, Dying Unit,... mấy anh chị vui lòng giải nghĩa hết giùm em đc ko?
Còn nữa, muốn tạo một item mà chỉ cần mua nó là biến (như trong KT chủa anh Rex) thì làm thế nào?;));))


Em ko có thời gian để lục diễm đàn. :(:(

http://forum.gamevn.com/showpost.php?p=6613167
 
các bạn cho mình hỏi mình tạo 1 nhà hero rồi thêm vào map nhưng nó không cho mua nhân vật, kể cả thêm 1 unit ở cạnh nhà tướng.Đây là ảnh
untitled.jpg

con unti bên cạnh phải bỏ vào cho nó có chế độ thấy và là có inventory
mơi ok

---------- Post added at 17:05 ---------- Previous post was at 17:04 ----------

Mong mấy anh chị chỉ dạy thêm về điều này: Trong Warcraft có khá nhiều Event Response (trong trigger í) như Entering Unit, Dying Unit,... mấy anh chị vui lòng giải nghĩa hết giùm em đc ko?
Còn nữa, muốn tạo một item mà chỉ cần mua nó là biến (như trong KT chủa anh Rex) thì làm thế nào?


Em ko có thời gian để lục diễm đàn. Hu hu

---------- Post added at 16:28 ---------- Previous post was at 16:26 ----------

Mong mấy anh chị chỉ dạy thêm về điều này: Trong Warcraft có khá nhiều Event Response (trong trigger í) như Entering Unit, Dying Unit,... mấy anh chị vui lòng giải nghĩa hết giùm em đc ko?
Còn nữa, muốn tạo một item mà chỉ cần mua nó là biến (như trong KT chủa anh Rex) thì làm thế nào?;));))


Em ko có thời gian để lục diễm đàn. :(:(
cái kia là vô khả giải thích
có rất là nhiều unit khác nhau nếu bạn muốn học thì phải hỏi từ từ
 
Còn nữa, muốn tạo một item mà chỉ cần mua nó là biến (như trong KT chủa anh Rex) thì làm thế nào?

item loại power up :|
và có thể nói rõ item nào trong map :|
 
Giả sử item tên tome of streng và cần biến đến Move <gen> thì phải làm trigger như thế nào?

---------- Post added at 17:51 ---------- Previous post was at 17:47 ----------

À quên mất, nếu làm camera mà nó chỉ hiển thị phần phía trước của nhân vật (nghĩa là nhân vật quay sang phải thì nó cũng sang phải) thì làm cách nào?

Có bài viết nào tổng hợp đầy đủ các Action trong trigger ko?
 
Giả sử item tên tome of streng và cần biến đến Move <gen> thì phải làm trigger như thế nào?
http://forum.gamevn.com/showpost.php?p=15781889

À quên mất, nếu làm camera mà nó chỉ hiển thị phần phía trước của nhân vật (nghĩa là nhân vật quay sang phải thì nó cũng sang phải) thì làm cách nào?
ko có
Có bài viết nào tổng hợp đầy đủ các Action trong trigger ko?
tùy theo sự edit của người làm map mà action công dụng khác nhau :|
 
sao em vô một map mà vô map thì nó cho trở lại màn hình đánh tên, làm sao đây?
 
save = jngp mới hết bị
nếu trong map jass k có vấn đề
--------
nếu test vẫn k dc thì save map đễ cho jasshelp sữa lại, xong mới test lại
 
Chỉnh sửa cuối:
làm thế nào khi lụm đồ ma full thùng thì đồ bay về thùng đồ vậy
 
Chắc chắn có. Em có một map làm đc như thế( quên mất rồi:((:(()
Thế có ai chỉ làm camera thế này không:
Đầu tiên, từ vị trí camera 1 chuyển đến camera 2 và quay 90 độ theo chiều kim đồng hồ.
Sau đó nó sẽ mở rộng. thu nhỏ màn hình hệt như đất đang rung vậy đó (em ko bik cách viết thế nào cho rõ) như map Võ Lâm Thất Hiệp lúc đánh trùm chết
.

Nếu được chỉ dẫn toàn bộ về camera thì càng tốt (phần đối thoại trong cinematic thì bik rồi, chỉ còn camera cho hoàng tráng thôi)
 
cho mình hỏi cí/ mình replace unit chỉnh thời gian wait là 2s thì đc mà chuyển thành 60s thì kô đc
A unit owned by Player 12 (Brown) Dies
Dying unit is A Group unit Equal True
Wait 60.00 seconds
Unit _ Replace( Dying unit) with a ( Unit-tyoe of ( Dying unit)) using The new units max life and mana
Có cách nào hồi sinh hoặc tạo unit mới sau khi chết kô...hero thì làm đc rôi
 
@tinhle87: tốt nhất nên Create thay cho Replace
Unit - Create 1 Foot man at point .....
 
ngay cả creat cũng không đc rôi ý. vấn đề là wait time thôi. để 2s thì đc mà để hơn thì kô đc
 
local unit unitit = GetDyingUnit()
call CreateNUnitsAtLoc( 1, GetUnitTypeId(unitit), Player(0), GetUnitLoc(unitit), bj_UNIT_FACING )
ngay cả creat cũng không đc rôi ý. vấn đề là wait time thôi. để 2s thì đc mà để hơn thì kô đc
bị leak rùi
 
Chỉnh sửa cuối:
Chắc chắn có. Em có một map làm đc như thế( quên mất rồi:((:(()
Thế có ai chỉ làm camera thế này không:
Đầu tiên, từ vị trí camera 1 chuyển đến camera 2 và quay 90 độ theo chiều kim đồng hồ.
Sau đó nó sẽ mở rộng. thu nhỏ màn hình hệt như đất đang rung vậy đó (em ko bik cách viết thế nào cho rõ) như map Võ Lâm Thất Hiệp lúc đánh trùm chết
.

Nếu được chỉ dẫn toàn bộ về camera thì càng tốt (phần đối thoại trong cinematic thì bik rồi, chỉ còn camera cho hoàng tráng thôi)

coi kỹ trong này : http://forum.gamevn.com/showthread.php?103123
 
Status
Không mở trả lời sau này.
Back
Top