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

Nghĩa là mình cần một library như kiểu CSData có thể lưu nhận lại một unit mà không có hoặc ít bug lỗi ấy.

CSData vẫn tốt mà? ý cậu định chỉ về AutoIndex,AIDS ???
 
Cho mình hỏi: Có cách nào để ko thể điều khiển một unit ko?
Unit khác vẫn đk đc, và unit ko đk thì vẫn dùng ability đc như bt, tức là disable control thôi ý, mà minh disable control phần cinematic thì nó yên luôn :|
 
Cho hỏi là làm thế nào để play Walk Animation của 1 group unit hay nói cách khác là của 1 unit bất kì :-?
 
Bạn nào giúp mình làm spell "Phong sương toái ảnh" của con NMC nhưng làm sao để nó truy đuổi kiểu missile và spell mưa kiếm của con Cửu thiên tuyết ma được ko, mình xin thank trc

- - - Updated - - -

Bạn nào giúp mình làm spell "Phong sương toái ảnh" của con NMC nhưng làm sao để nó truy đuổi kiểu missile và spell mưa kiếm của con Cửu thiên tuyết ma được ko, mình xin thank trc
 
^
^ mình đã đọc qua và cũng chưa hiểu lắm ,đây là làm cho 1 unit bất kì mà @@
 
Cho mình hỏi: Có cách nào để ko thể điều khiển một unit ko?
Unit khác vẫn đk đc, và unit ko đk thì vẫn dùng ability đc như bt, tức là disable control thôi ý, mà minh disable control phần cinematic thì nó yên luôn :|

Quoteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
 
CSData vẫn tốt mà? ý cậu định chỉ về AutoIndex,AIDS ???

Thế thì có 3 system nhiều người dùng nhất là: AutoIndex, AIDS, Unit Indexer

Thanks

Quoteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

Gán Locust cho unit đó thì không điều khiển được.
Còn chỉ muốn cho unit A sử dụng ability mà ko move,blah blah thì gán biến cho unit A tạo một unit dummy có tên là B khác,gắn các ability dummy cho unit B (các ability này nếu là target point hay target unit thì đặt cast range 99999999)
khi select unit A thì clear select và select unit dummy B (nếu ko có locust thì kiếm event nào đó để select unit B :!)
khi unit dummy B xài skill dummy thì sẽ cho unit A (đã gán biến) oder ra vị trí đó
Hay ý em là sao ? Nói mơ hồ thì khó giúp.
 
Cho mình hỏi: Có cách nào để ko thể điều khiển một unit ko?
Unit khác vẫn đk đc, và unit ko đk thì vẫn dùng ability đc như bt, tức là disable control thôi ý, mà minh disable control phần cinematic thì nó yên luôn :|
cái này chắc chỉ có nước cậu code để mỗi khi thằng ko có quyền điều khiển (mà cậu muốn) order 1 số lệnh trừ cast spell ra thì stop mặc dù player đó vẫn được share full control

Cho hỏi là làm thế nào để play Walk Animation của 1 group unit hay nói cách khác là của 1 unit bất kì :-?
Vì cách duy nhất để play animation walk là dùng play index animation (như là cái mà LeoNguyen đưa ra trên kia) + mỗi 1 unit thì cách sắp xếp animation của nó lại ko cố định
Nên ko thể play animation walk của 1 unit bất kì 1 cách chuẩn xác được. Cách duy nhất mà mình biết đến thì lại phải lôi ra từ tập hợp đã định sẵn trong hashtable mà kiểu này thì lag là chắc @@
 
Cho mình hỏi cái:
+ Độ cao health bar chỉnh ở đâu ? Nhiều model mới thêm vào có health bar quá cao so với đầu của nó.
+ Skill Permanent Immolation, khi để LV1 thì ko sao. Nhưng khi để LV3 chẳng hạn, các LV sau của nó đều ko thay đổi damage so với LV1 dù damage tăng cả chục lần ? Mình nhớ trong X Hero Siege cũng sử dụng skill này.
 
Cho mình hỏi cái:
+ Độ cao health bar chỉnh ở đâu ? Nhiều model mới thêm vào có health bar quá cao so với đầu của nó.
+ Skill Permanent Immolation, khi để LV1 thì ko sao. Nhưng khi để LV3 chẳng hạn, các LV sau của nó đều ko thay đổi damage so với LV1 dù damage tăng cả chục lần ? Mình nhớ trong X Hero Siege cũng sử dụng skill này.

Skill đó là một trong các Unlevelable Abilities (các abilities có lên level cũng ko có tác dụng)
Xem thêm : http://forum.gamevn.com/showthread.php?956566 hoặc http://world-editor-tutorials.thehelper.net/cat_usersubmit.php?view=44234
 
Mã:
function SoulWaveCon takes nothing returns boolean
    return GetSpellAbilityId() == 'A00Z'
endfunction

function SoulWaveAct takes nothing returns nothing
    local unit cas = GetTriggerUnit()
    local location casloc = GetUnitLoc(cas)
    local location tarloc = GetSpellTargetLoc()
    local integer lvl = GetUnitAbilityLevel(cas,'A00Z')
    local real dis = DistanceBetweenPoints(casloc,tarloc)
    local integer point = R2I(dis/250)
    local real angle = AngleBetweenPoints(casloc,tarloc)
    local location dumpoint
    local unit dummy
    local group casgroup
    if point < 1 then 
    set point = 1
    else
    endif
    
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = point
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set dumpoint = PolarProjectionBJ(casloc,I2R(bj_forLoopAIndex*250),angle)
        set dummy = CreateUnitAtLoc(GetOwningPlayer(cas),'h003',dumpoint,0.00)
        call UnitApplyTimedLife(dummy,'BTLF',1.0)
        call UnitAddAbility(dummy,'A010')
        call SetUnitAbilityLevel(dummy,'A010',lvl)
        call IssueImmediateOrder( dummy,"howlofterror")
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\HowlOfTerror\\HowlCaster.mdl",GetLocationX(dumpoint),GetLocationY(dumpoint)))
        set dummy = null
        call RemoveLocation(dumpoint)
        set dumpoint = null
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    call RemoveLocation(casloc)
    call RemoveLocation(tarloc)
    set casloc = null
    set tarloc = null
    set cas = null
endfunction

//===========================================================================
function InitTrig_Soul_Wave takes nothing returns nothing
    local trigger SoulWave = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( SoulWave, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( SoulWave, Condition( function SoulWaveCon ) )
    call TriggerAddAction( SoulWave, function SoulWaveAct )
endfunction
h em muốn làm nó pick unit r` deal damg 1 lần theo đường này thì làm s ạ??? ( Skill Wave Of Terror của VS trong DotA, = Jass nhé, đang tập cách pick group theo jass vs biến local)
 
Vì cách duy nhất để play animation walk là dùng play index animation (như là cái mà LeoNguyen đưa ra trên kia) + mỗi 1 unit thì cách sắp xếp animation của nó lại ko cố định
Nên ko thể play animation walk của 1 unit bất kì 1 cách chuẩn xác được. Cách duy nhất mà mình biết đến thì lại phải lôi ra từ tập hợp đã định sẵn trong hashtable mà kiểu này thì lag là chắc @@
Hix ,vậy ra trong Dota thì mỗi unit type đều có ID của Walk Animation ,xong mỗi lần sử dụng phải dùng ID để play .Vậy giờ mỗi khi mình pick 1 Hero thì set cho hero đó 1 biến số ID của Animation Walk đã định trong model xong lúc cần có thể dùng được ko (ý là thay thế cái hashtable)
 
Mã:
function SoulWaveCon takes nothing returns boolean
    return GetSpellAbilityId() == 'A00Z'
endfunction

function SoulWaveAct takes nothing returns nothing
    local unit cas = GetTriggerUnit()
    local location casloc = GetUnitLoc(cas)
    local location tarloc = GetSpellTargetLoc()
    local integer lvl = GetUnitAbilityLevel(cas,'A00Z')
    local real dis = DistanceBetweenPoints(casloc,tarloc)
    local integer point = R2I(dis/250)
    local real angle = AngleBetweenPoints(casloc,tarloc)
    local location dumpoint
    local unit dummy
    local group casgroup
    if point < 1 then 
    set point = 1
    else
    endif
    
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = point
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set dumpoint = PolarProjectionBJ(casloc,I2R(bj_forLoopAIndex*250),angle)
        set dummy = CreateUnitAtLoc(GetOwningPlayer(cas),'h003',dumpoint,0.00)
        call UnitApplyTimedLife(dummy,'BTLF',1.0)
        call UnitAddAbility(dummy,'A010')
        call SetUnitAbilityLevel(dummy,'A010',lvl)
        call IssueImmediateOrder( dummy,"howlofterror")
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\HowlOfTerror\\HowlCaster.mdl",GetLocationX(dumpoint),GetLocationY(dumpoint)))
        set dummy = null
        call RemoveLocation(dumpoint)
        set dumpoint = null
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    call RemoveLocation(casloc)
    call RemoveLocation(tarloc)
    set casloc = null
    set tarloc = null
    set cas = null
endfunction

//===========================================================================
function InitTrig_Soul_Wave takes nothing returns nothing
    local trigger SoulWave = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( SoulWave, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( SoulWave, Condition( function SoulWaveCon ) )
    call TriggerAddAction( SoulWave, function SoulWaveAct )
endfunction
h em muốn làm nó pick unit r` deal damg 1 lần theo đường này thì làm s ạ??? ( Skill Wave Of Terror của VS trong DotA, = Jass nhé, đang tập cách pick group theo jass vs biến local)
Đã dùng jass thì tốt nhất ko nên dùng location nữa mà dùng X Y ấy,tập dùng luôn sau này đỡ phải sửa lại. Còn pick unit thì CreateGroup() sau đó call GroupEnumUnitsInRange() rồi thao tác
Mã:
globals
   player TempPlayer // tạo một biến globals player để lưu owner của unit sau đó ở hàm Check check xem unit nào là enemy thì pick vào group
endglobals
function Check takes nothing returns boolean // Hàm này trả về các điều kiện để pick unit vào group,nó cũng như pick every unit in group matching condition,bên dưới là các condition
   local boolean b = true
   local unit u = GetFilterUnit()
   set b = b and IsUnitEnemy(u,TempPlayer) == true
   set b = b and GetWidgetLife(u) > .405
   set b = b and IsUnitType(u,UNIT_TYPE_STRUCTURE) == true
   return b
endfunction
//x,y ở đây là tọa độ,GetSpellTargetX(),GetSpellTargetY() == Target point of ability being cast
Mã:
function A takes nothing returns nothing
local unit u = GetTriggerUnit()
local real x
local real y
local unit TempUnit
local group TempGroup = CreateGroup()
set TempPlayer = GetOwningPlayer(u)
call GroupEnumUnitsInRange(TempGroup,x,y,300,function Check)
loop
   set TempUnit = FirstOfGroup(TempGroup)
   exitwhen TempUnit == null
   //Thao tác ở đây,deal damage,tạo effect,blah blah
   call GroupRemoveUnit(TempGroup,TempUnit)
   set TempUnit = null
endloop 
endfunction

Nhớ set null các biến local sau khi dùng xong để tránh leak
 
Chỉnh sửa cuối:
Hix ,vậy ra trong Dota thì mỗi unit type đều có ID của Walk Animation ,xong mỗi lần sử dụng phải dùng ID để play .Vậy giờ mỗi khi mình pick 1 Hero thì set cho hero đó 1 biến số ID của Animation Walk đã định trong model xong lúc cần có thể dùng được ko (ý là thay thế cái hashtable)

Set custom value of unit = ID thử xem :-?.
 
^Là lấy ra animation id theo từng loại unit chứ có phải theo từng con unit đâu mà làm thế @@

Hix ,vậy ra trong Dota thì mỗi unit type đều có ID của Walk Animation ,xong mỗi lần sử dụng phải dùng ID để play .Vậy giờ mỗi khi mình pick 1 Hero thì set cho hero đó 1 biến số ID của Animation Walk đã định trong model xong lúc cần có thể dùng được ko (ý là thay thế cái hashtable)

Thực ra nếu cậu chỉ play cùng lúc độ 30 con unit cùng 1 lúc và sử dụng hashtable thì cũng ko lag đâu mà cùng lắm chỉ giật 1 cái 0.5s thôi :D Còn ko thì chịu vì dota chỉ play animation từng con 1 nên chả lag (nếu có dùng .... )
 
Chỉnh sửa cuối:
^Là lấy ra animation id theo từng loại unit chứ có phải theo từng con unit đâu mà làm thế @@



Thực ra nếu cậu chỉ play cùng lúc độ 30 con unit cùng 1 lúc và sử dụng hashtable thì cũng ko lag đâu mà cùng lắm chỉ giật 1 cái 0.5s thôi :D Còn ko thì chịu vì dota chỉ play animation từng con 1 nên chả lag (nếu có dùng .... )

Không check được loại unit từ từng con unit hay sao mà không được '-'.

Hix ,vậy ra trong Dota thì mỗi unit type đều có ID của Walk Animation ,xong mỗi lần sử dụng phải dùng ID để play .Vậy giờ mỗi khi mình pick 1 Hero thì set cho hero đó 1 biến số ID của Animation Walk đã định trong model xong lúc cần có thể dùng được ko (ý là thay thế cái hashtable)

Cơ mà ý bạn ấy là như này nè '-', vậy tại sao không dùng custom value of unit được :-?.
 
Chỉnh sửa cuối:
Cho hỏi War3 mình bị gì thế này:
- Trước khi cài JNGP thì dota chơi bình thường
- Sau khi cài thì:
  • Vào host ng` ta thì nó bắt down lại map, mặc dù đã có map rồi
  • Mình host thì chỉ có 1 slot duy nhất, vào game thì chỉ có terrain là của dota, còn mọi code đều mất hết, chỉ còn lại cái trigger melee (tạo Town + 5 peasants,...). Và hình như không chỉ có dota, mà các map nào có dùng JNG đều bị thế này, các map melee thì bình thường
- Gỡ JNGP ra thì trở lại bình thường :|
 
Cho hỏi War3 mình bị gì thế này:
- Trước khi cài JNGP thì dota chơi bình thường
- Sau khi cài thì:
  • Vào host ng` ta thì nó bắt down lại map, mặc dù đã có map rồi
  • Mình host thì chỉ có 1 slot duy nhất, vào game thì chỉ có terrain là của dota, còn mọi code đều mất hết, chỉ còn lại cái trigger melee (tạo Town + 5 peasants,...). Và hình như không chỉ có dota, mà các map nào có dùng JNG đều bị thế này, các map melee thì bình thường
- Gỡ JNGP ra thì trở lại bình thường :|

Mình đã và đang bị như vậy là do cài cái X Design Pack vào trực tiếp folder warIII nên vậy đó :))
 
Back
Top