當前位置:編程學習大全網 - 源碼下載 - 魔獸地圖編輯器 技能設計的問題

魔獸地圖編輯器 技能設計的問題

很抱歉啊.忙活了大半天,只能做到這樣了.測試了壹會,大概沒什麽問題

以下是技能代碼.

先新建壹個遊戲緩存類型的變量叫"gc_jump"

觸發名字叫"jump"

我做完發現我貌似做的是真三裏面關羽的跳- -!

不過比他的方便,我這個既可以點地板.又可以點人,點人會追到人砸上去.

function htoi takes handle h returns integer

return h

return 0

endfunction

function itou takes integer i returns unit

return i

return null

endfunction

function gc takes nothing returns gamecache

if gc_jump==null then

call FlushGameCache(InitGameCache("Nef.w3v"))

set gc_jump=InitGameCache("Nef.w3v")

endif

return gc_jump

endfunction

function jump_move_i takes nothing returns nothing

local timer tm = GetExpiredTimer()

local unit trgunit = itou(GetStoredInteger(gc(),I2S(htoi(tm)),"trgunit"))

local real ox = GetStoredReal(gc(),I2S(htoi(tm)),"ox")

local real oy = GetStoredReal(gc(),I2S(htoi(tm)),"oy")

local real tx = GetStoredReal(gc(),I2S(htoi(tm)),"tx")

local real ty = GetStoredReal(gc(),I2S(htoi(tm)),"ty")

local integer step = GetStoredInteger(gc(),I2S(htoi(tm)),"step")

local integer max = GetStoredInteger(gc(),I2S(htoi(tm)),"max")

if step < max then

call SetUnitX(trgunit,ox+((tx-ox)/I2R(max))*I2R(step))

call SetUnitY(trgunit,oy+((ty-oy)/I2R(max))*I2R(step))

if (step < max/2+1) then

call SetUnitFlyHeight(trgunit,(1200.00/I2R(max))*I2R(step),9999.99)

else

call SetUnitFlyHeight(trgunit,(1200.00/I2R(max))*I2R(max-step),9999.99)

endif

set step = step + 1

call StoreInteger(gc(),I2S(htoi(tm)),"step",step)

else

call DestroyEffect( AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", tx, ty) )

call UnitDamagePoint( trgunit, 0, 150.00, tx, ty, 100.00*I2R(GetUnitAbilityLevel(trgunit,'A000')), true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )

// call SetPlayerAbilityAvailable(trgunit,'Amrf',true)

call UnitRemoveAbility( trgunit, 'Amrf' )

call UnitRemoveAbility( trgunit, 'Abun' )

call SetUnitInvulnerable( trgunit, false )

set trgunit = null

call FlushStoredMission(gc(),I2S(htoi(tm)))

call DestroyTimer(tm)

endif

endfunction

function jump_move_ii takes nothing returns nothing

local timer tm = GetExpiredTimer()

local unit trgunit = itou(GetStoredInteger(gc(),I2S(htoi(tm)),"trgunit"))

local unit tarunit = itou(GetStoredInteger(gc(),I2S(htoi(tm)),"tarunit"))

local integer step = GetStoredInteger(gc(),I2S(htoi(tm)),"step")

local integer max = GetStoredInteger(gc(),I2S(htoi(tm)),"max")

local real ox = GetUnitX(trgunit)

local real oy = GetUnitY(trgunit)

local real tx = GetUnitX(tarunit)

local real ty = GetUnitY(tarunit)

if step < max then

call SetUnitX(trgunit,ox+(tx-ox)/(I2R(max-step)))

call SetUnitY(trgunit,oy+(ty-oy)/(I2R(max-step)))

if (step < max/2+1) then

call SetUnitFlyHeight(trgunit,(1200.00/I2R(max))*I2R(step),9999.99)

else

call SetUnitFlyHeight(trgunit,(1200.00/I2R(max))*I2R(max-step),9999.99)

endif

call SetUnitLookAt( trgunit, "bone_head", tarunit, 0, 0, 90 )

set step = step + 1

call StoreInteger(gc(),I2S(htoi(tm)),"step",step)

else

call DestroyEffect( AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", tx, ty) )

call UnitDamagePoint( trgunit, 0, 150.00, tx, ty, 100.00*I2R(GetUnitAbilityLevel(trgunit,'A000')), true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )

// call SetPlayerAbilityAvailable(trgunit,'Amrf',true)

call UnitRemoveAbility( trgunit, 'Abun' )

call UnitRemoveAbility( trgunit, 'Amrf' )

call SetUnitInvulnerable( trgunit, false )

call ResetUnitLookAt(trgunit)

set trgunit = null

set tarunit = null

call FlushStoredMission(gc(),I2S(htoi(tm)))

call DestroyTimer(tm)

endif

endfunction

function Trig_jump_Actions takes nothing returns nothing

local timer tm

local real ox

local real oy

local real tx

local real ty

local unit trgunit

local unit tarunit

local location tarloc

set trgunit = GetTriggerUnit()

set ox = GetUnitX(trgunit)

set oy = GetUnitY(trgunit)

if GetSpellAbilityId()=='A000' then

set tm = CreateTimer()

if GetUnitAbilityLevel(trgunit,'Amrf')==0 then

call UnitAddAbility(trgunit,'Amrf')

call SetPlayerAbilityAvailable(GetTriggerPlayer(),'Amrf',false)

endif

if GetSpellTargetUnit()==null then

set tarloc = GetSpellTargetLoc()

set tx = GetLocationX(tarloc)

set ty = GetLocationY(tarloc)

call StoreInteger(gc(),I2S(htoi(tm)),"trgunit",htoi(trgunit))

call StoreReal(gc(),I2S(htoi(tm)),"ox",ox)

call StoreReal(gc(),I2S(htoi(tm)),"oy",oy)

call StoreReal(gc(),I2S(htoi(tm)),"tx",tx)

call StoreReal(gc(),I2S(htoi(tm)),"ty",ty)

call StoreInteger(gc(),I2S(htoi(tm)),"max",R2I((SquareRoot(Pow((tx-ox),2.00)+Pow((ty-oy),2.00))/30.00+1.00)*2.00))

call StoreInteger(gc(),I2S(htoi(tm)),"step",0)

call SetUnitInvulnerable( GetTriggerUnit(), true )

if GetUnitAbilityLevel(trgunit,'Abun')==0 then

call UnitAddAbility(trgunit,'Abun')

endif

call TimerStart(tm,0.01,TRUE,function jump_move_i)

else

set tarunit = GetSpellTargetUnit()

set tx = GetUnitX(tarunit)

set ty = GetUnitY(tarunit)

call StoreInteger(gc(),I2S(htoi(tm)),"trgunit",htoi(trgunit))

call StoreInteger(gc(),I2S(htoi(tm)),"tarunit",htoi(tarunit))

call StoreInteger(gc(),I2S(htoi(tm)),"max",R2I((SquareRoot(Pow((tx-ox),2.00)+Pow((ty-oy),2.00))/30.00+1.00)*2.00))

call StoreInteger(gc(),I2S(htoi(tm)),"step",0)

call SetUnitInvulnerable( trgunit, true )

if GetUnitAbilityLevel(trgunit,'Abun')==0 then

call UnitAddAbility(trgunit,'Abun')

endif

call TimerStart(tm,0.01,TRUE,function jump_move_ii)

endif

set tm = null

call RemoveLocation(tarloc)

endif

endfunction

//===========================================================================

function InitTrig_jump takes nothing returns nothing

set gg_trg_jump = CreateTrigger( )

call TriggerRegisterAnyUnitEventBJ(gg_trg_jump,EVENT_PLAYER_UNIT_SPELL_EFFECT)

call TriggerAddAction( gg_trg_jump, function Trig_jump_Actions )

endfunction

先試試,改天給妳詳細註釋上去.妳給個電子郵箱到我,我發郵件給妳代碼詳解

  • 上一篇:獲取紅包密碼源代碼
  • 下一篇:今年海南僑中高壹招1420人,指標到校計劃604個?
  • copyright 2024編程學習大全網