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

Status
Không mở trả lời sau này.
Mã:
function Create_Actions takes nothing returns nothing
    call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)        
endfunction

function IntCreateUnit takes nothing returns nothing
    local trigger Create = CreateTrigger()
    call TriggerRegisterTimerEventSingle( Create, 5 )
    call TriggerAddAction(Create, function Create_Actions)
endfunction
đang học jass
nhưng sao zo game ko có con lính nào hết vậy :|
ai bít, fix hộ dùm
dừng- bảo là đổi GUI thành jass :D

Để thế kia làm sao nó biết đc function nào Init ?
Thêm cái scope vào:
Mã:
scope CreateUnit initializer IntCreateUnit
function Create_Actions takes nothing returns nothing
    call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)        
endfunction

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

Nếu kô muốn dùng scope thì phải để tên function Init "đúng". Muốn biết tên "đúng" thì Disabled rồi Enabled cái trigger đấy, Jassnewgen sẽ báo.
 
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
 
Cái function init ở đây là function IntCreateUnit. Mà muốn cái function này chạy lúc "Map Initializing" thì phải cho vào scope hoặc đặt tên "đúng" của nó. Như lúc ban đầu function này chưa đc xem là function Init, thì
Mã:
call TriggerAddAction(Create, function Create_Actions)
chả có tác dụng gì cả :-@.
 
Vậy chỉ mình cái đó đi;;)

Hỏi thêm làm sao để thay đổi đc Attack type từ melee sang Attack range khi sử dụng skill vậy (cái này hình như là trong dota có con hero gì đó thì phải)
Gameplay Constants -> Chance to miss (moving or highing ground) -> đổi 0,25 thành bất cứ số nào bạn muốn
 
Dùng Metamorphosis 'AEme' của Demon Hunter. Với Data - Alternate Form Unit là unit range, Data - Normal Form là unit melee. Chỉnh Data - Morphing FlagsUninterruptablePermanent, Stats - Duration - Hero là 0 (có thể chỉnh luôn Stats - Duration - Normal là 0 để chuyển ngay lập tức).
 
Untitled2.jpg

Untitled.jpg


còn đây là những lỗi nào :P

và tại sao mà copy vào test map liền ko dc (dis k test dc) , save mới vào dc :|

Mã:
scope CreateUnit initializer IntCreateUnit
function Create_Actions takes nothing returns nothing
    call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)        
endfunction

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

và có thể làm 1 jass riêng về "int" ko?
Mã:
scope CreateUnit initializer IntCreateUnit

và hõi thêm chĩnh số unit ra ở đâu
call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)
 
Chỉnh sửa cuối:
@LeoNguyen: cái đó chả ảnh hưởng gì đến việc miss ở đây cả, ý bạn ấy là tỉ lệ đánh miss như các game RPG nhưng war ko có, chỉ có skill evasion (ko biết ghi đúng ko). Cái của bạn chỉ là miss khi chênh lệch độ cao.

Cho hỏi cái này skill này sửa thế nào? Tập làm Jass, mô tả skill muốn làm: trong 4s tạo dummy xài chainlightning vào target 3 lần, dummy move theo target (attach vào target)

Mã:
function Cond takes nothing returns boolean
return GetSpellAbilityId() == 'A004'
endfunction

struct TW
   unit caster
   unit target
   unit dummy
   location loc
   integer int
   string sfx
endstruct

function Dummy_Attach_Target takes nothing returns nothing
   local timer t2 = GetExpiredTimer()
      call SetUnitPositionLoc( data.dummy, data.target)
   if IsUnitAliveBJ(data.dummy) == false then
      call ReleaseTimer(t2)
   endif
endfunction

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 AddSpecialEffectTargetUnit( "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   

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

//===========================================================================
function InitTrig_Thunder_Wraith takes nothing returns nothing
    set gg_trg_t = CreateTrigger(  )
    call TriggerRegisterAnyUnitEvent( gg_trg_t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition( gg_trg_t, Condition (function Cond))
    call TriggerAddAction( gg_trg_t, function Thunder_Wraith_Actions )
endfunction

P/s 1: ai hướng dẫn xài scope int cho trigger với mình thử thì nó báo lỗi :(
P/s 2: Tại sao xài struct nó lại báo "data is not of a type that allows . syntax
P/s 3: bị lỗi giống 'king war 1' đống "statement out side of function"
 
Chỉnh sửa cuối:
@zhenghe+kingwar: Mấy cái lỗi đó cứ bỏ qua đi, nếu trong game vẫn hoạt động bt thì ko sao đâu.
 
call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)
thêm số lượng unit ra ở đâu

Mã:
scope GameInfo
function Trig_Actions takes nothing returns nothing
    call DisplayTimedTextToForce( GetPlayersAll(), 30, "GameInfo")
endfunction

function InitTrig takes nothing returns nothing
    local trigger Trig = CreateTrigger()
    call TriggerRegisterTimerEventSingle(Trig,3)
    call TriggerAddAction(Trig, function Trig_Actions)
endfunction
endscope
sao zo game k hiện text thế
 
Chỉnh sửa cuối:
@KingWar, Zhenghe: Dùng Jasshelper để check lỗi thôi (update bản mới nhất hiện này là 0.A.2.B), mấy cái Syntax Check của Jassnewgen và cái Jasscraft kia là sai hết đấy.
Muốn chỉnh số lượng tạo unit thì dùng 2 cách:
-1 là dùng loop (khuyên dùng):
Mã:
function Create_Actions takes nothing returns nothing
    local integer i = 1
    
    loop
        exitwhen i > 50
        
        call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)   
        
        set i = i + 1
    endloop
endfunction

50 là tổng số units muốn tạo.

-cách 2 là dùng lệnh CreateNUnitsAtLoc:
Mã:
function Create_Actions takes nothing returns nothing
    call CreateNUnitsAtLoc( 50, 'hpea', Player(0), Location(320,25), 270 )
endfunction

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

Cái code trên thiếu phần "initializer InitTrig" ở scope, để ý cái code mà tớ đưa, phần scope có "initializer IntCreateUnit":
Mã:
scope CreateUnit initializer IntCreateUnit

Bây giờ thêm "initializer InitTrig" vào scope:
Mã:
scope GameInfo initializer InitTrig
function Trig_Actions takes nothing returns nothing
    call DisplayTimedTextToForce( GetPlayersAll(), 30, "GameInfo")
endfunction

function InitTrig takes nothing returns nothing
    local trigger Trig = CreateTrigger()
    call TriggerRegisterTimerEventSingle(Trig,3)
    call TriggerAddAction(Trig, function Trig_Actions)
endfunction
endscope
 
gamewar có thể chỉ cách gộp 2 trigger (jass) thành 1 ko:D cho tiện :)
 
Thì cứ copy vào thôi, ví dụ gộp 2 cái trên lại với nhau thì:
Mã:
scope CreateUnit initializer IntCreateUnit
function Create_Actions takes nothing returns nothing
    local integer i = 1
    
    loop
        exitwhen i > 50
        
        call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)   
        
        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
    call DisplayTimedTextToForce( GetPlayersAll(), 30, "GameInfo")
endfunction

function InitTrig takes nothing returns nothing
    local trigger Trig = CreateTrigger()
    call TriggerRegisterTimerEventSingle(Trig,3)
    call TriggerAddAction(Trig, function Trig_Actions)
endfunction
endscope
(Nhớ là phải có ngăn cách, cụ thể ở đây là cái scope kia).
 
ai chỉ em cách duel giống máp tổng hợp với , khi duel thì ở ngoài pause lại chỉ để duel thôi , lúc vào thì reset toàn bộ cooldowns của skill


ai chỉ em làm máp goku trược băng với :((

Giúp em với :((
.................................
 
Thì cứ copy vào thôi, ví dụ gộp 2 cái trên lại với nhau thì:
Mã:
scope CreateUnit initializer IntCreateUnit
function Create_Actions takes nothing returns nothing
    local integer i = 1
    
    loop
        exitwhen i > 50
        
        call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)   
        
        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
    call DisplayTimedTextToForce( GetPlayersAll(), 30, "GameInfo")
endfunction

function InitTrig takes nothing returns nothing
    local trigger Trig = CreateTrigger()
    call TriggerRegisterTimerEventSingle(Trig,3)
    call TriggerAddAction(Trig, function Trig_Actions)
endfunction
endscope
(Nhớ là phải có ngăn cách, cụ thể ở đây là cái scope kia).
kiểu này mà đặt cái VAR (ghi trong jass) liên kết 2 jass này thì sao?
 
Liên kết ? Cụ thể là liên kết ntn ?

@Zhenghe:
Mã:
scope ThunderWraith initializer InitTW // Cho vào scope để dùng đc private

private struct tw // Khi cho vào scope rồi thì có thể dùng private, để WE kô bị "nhầm" với các struct khác 
   unit caster
   unit target
   unit dummy
   
   integer int
   integer tick
   
   string sfx
endstruct

private function ThunderWraith takes nothing returns nothing // Private ở đây có tác dụng tượng tự trên
    local timer ti = GetExpiredTimer() 
    local tw d = GetTimerData( ti ) // Lấy struct qua timer
       
    local location loc = GetUnitLoc( d.target ) // Lấy vị trí của target
    
    call SetUnitPositionLoc( d.dummy, loc ) // Di chuyển vị trí của dummy tới vị trí của target.

    set d.tick = d.tick - 1 // Giảm tick
    if d.tick <= 0 then // Hết tick, hết 1s, giật sét 1 lần
            
        call IssueTargetOrder( d.dummy, "chainlightning", d.target)
    
        call DestroyEffect( AddSpecialEffectTarget( "chest", d.target, d.sfx ) )
        call UnitDamageTarget( d.caster, d.target, ((35*I2R(GetUnitAbilityLevel(d.caster, 'A004')))+ 15),true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) 
        
        set d.tick = 25 // Set d.tick = 25 để có thể chạy lại từ đầu
        set d.int = d.int - 1 // Sét đánh 1 lần, giảm 1 lần.
        if d.int <= 0 then // Hết lần đánh sét, end spell.
            call KillUnit( d.dummy ) // "Giết" dummy
            
            call ReleaseTimer( ti )
            call d.destroy()
        endif
        
    endif
    
    call RemoveLocation( loc )
    set loc = null
    set ti = null
endfunction   

private function Act takes nothing returns nothing
    local tw d = tw.create() // Tạo struct
    
    local timer ti = NewTimer() // Tạo timer
    
    local location loc // Khai báo biến loc
   
    set d.caster = GetTriggerUnit() // Đặt giá trị cho d.caster là thằng cast spell.
    set d.target = GetSpellTargetUnit() // Đặt giá trị cho d.target là thằng bị cast.
   
    set loc = GetUnitLoc( d.target ) // Lấy vị trí của thằng target
   
    set d.sfx = "Abilities\\Spells\\Orc\\LightningShield\\LightningShieldBuff.mdl"
   
    set d.int = 3 // Số lần bị sét đánh
    set d.tick = 25 // Tick này khi chạy hết sẽ giảm 1 d.int và chạy lại từ đầu, hết d.int hết thì end spell.
   
    set d.dummy = CreateUnitAtLoc( GetOwningPlayer( d.caster ), 'e001', loc, 0. )
    call UnitAddAbility( d.dummy, 'A006' )
   
    call SetTimerData( ti, d ) // Lưu struct vào timer
    call TimerStart( ti, 0.04 , true, function ThunderWraith ) // Chạy timer, mỗi 0.04s sẽ chạy 1 lần function ThunderWraith. Nếu để 0.04s giảm 1 d.tick thì hết 1s thì hết d.tick.
   
    call RemoveLocation( loc ) // Remove leak, GUI đã quá quen thuộc rồi
    set loc = null // "Null" loc, remove leak
    set ti = null
endfunction

private function Cond takes nothing returns boolean
    return GetSpellAbilityId() == 'A004'
endfunction

//===========================================================================
private function InitTW takes nothing returns nothing
    local trigger TrigTW = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( TrigTW, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition( TrigTW, Condition ( function Cond ))
    call TriggerAddAction( TrigTW, function Act )
endfunction

endscope
View attachment [Spell] Thunder Wraith.rar
 
Chỉnh sửa cuối:
ví dụ như 2 trigger = GUI thì dùng var
còn jass hình như là local hay globals (ko bít rõ, đang học :P)
 
còn câu này ai trả lời giùm :(
P/s 2: Tại sao xài struct nó lại báo "data is not of a type that allows . syntax
@Leoni bạn lên Hiveworkshop có system slide thì phải.
 
ví dụ như 2 trigger = GUI thì dùng var
còn jass hình như là local hay globals (ko bít rõ, đang học :P)

globals var ở GUI kiểu udg_ hả?

globals
[kiểu biến]--[tên biến]=[giá trị (có hoặc không ) ]
vd int sounittaora = 5
endglobals
 
kiểu này mà đặt cái VAR (ghi trong jass) liên kết 2 jass này thì sao?

làm giúp kiểu demo này dc hem :|
 
Status
Không mở trả lời sau này.
Back
Top