kingkingyyk3
Visitor (Welcome to the Jungle, Baby!)
- Reaction score
- 216
JASS:
//////////////////////////////////////////////////////////////////////////////////////////////
// UnitUtils by kingking //
// v1 alpha //
// //
// Thanks Viikuna for the great dummy trick. //
// //
// What functions are included? //
// GetUnitZ(unit) -> height //
// SetUnitZInstant(unit, height) //
// SetUnitZTimed(unit,height) //
// GetParabolaZ(MaxHeight,Current X pos,Displacement from source to current position )->real//
// GetParabolaByLoc(MaxHeight,Current Location,Displacement from source to current position)->real//
// AngleBetweenUnits(unit1, unit2)->real //
// DistanceBetweenUnits(unit1, unit2)->real //
// DummyTargetOrder(player p, integer abil_id, string order, widget target) //
// DummyTargetOrderById(player p, integer abil_id, integer id, widget target) //
// DummyImmediateOrderXY(player p, integer abil_id, string order, real x, real y) //
// DummyImmediateOrderLoc(player p, integer abil_id, string order, location l) //
// DummyPointOrderXY(player p, integer abil_id, string order, real sourceX, real sourceY, real targetX, real targetY)//
// DummyPointOrderLoc(player p, integer abil_id, string order, location source, location target)//
// DummyPointOrderXYById(player p, integer abil_id, integer id, real sourceX, real sourceY, real targetX, real targetY)//
// DummyPointOrderLocById(player p, integer abil_id, integer id, location source, location target)//
// IsUnitDead(unit)->boolean //
// //
// You need to configure the variables below before using it! //
/////////////////////////////////////////////////////////////////////////////////////////////
library UnitUtils initializer Init
globals
private constant integer CROW_FORM_ID = 039;Arav039;
//Fly Hack ability
private constant integer CASTER_DUMMY_ID = 039;n000039;
//Rawcode of Caster Dummy in your map
//The caster dummy's animation time should be all 0.000
private unit array CASTER_DUMMY
//Caster Dummy for every player
endglobals
function GetUnitZ takes unit u returns real
local location l = GetUnitLoc(u)
local real r = GetLocationZ(l)
call RemoveLocation(l)
set l = null
return r
endfunction
function SetUnitZInstant takes unit u, real zOffset returns nothing
call UnitAddAbility(u,CROW_FORM_ID)
call UnitRemoveAbility(u,CROW_FORM_ID)
call SetUnitFlyHeight(u,zOffset,99999.99)
endfunction
function SetUnitZTimed takes unit u, real zOffset, real duration returns nothing
call UnitAddAbility(u,CROW_FORM_ID)
call UnitRemoveAbility(u,CROW_FORM_ID)
call SetUnitFlyHeight(u,zOffset,zOffset/duration)
endfunction
function GetParabolaZ takes real maxheight, real x, real displacement returns real
return maxheight * x * (displacement-x)/displacement*displacement
endfunction
function GetParabolaZByLoc takes real maxheight, location l, real displacement returns real
return maxheight * GetLocationX(l) * (displacement-GetLocationX(l))/displacement*displacement
endfunction
function AngleBetweenUnits takes unit u1, unit u2 returns real
return bj_RADTODEG * Atan2(GetUnitY(u2) - GetUnitY(u1), GetUnitX(u2) - GetUnitX(u1))
endfunction
function DistanceBetweenUnits takes unit u1, unit u2 returns real
local real x = GetUnitX(u2) - GetUnitX(u1)
local real y = GetUnitY(u2) - GetUnitY(u1)
return SquareRoot(x * x + y * y)
endfunction
function DummyTargetOrder takes player p, integer abil_id, string order, widget target returns nothing
local integer i = GetPlayerId(p)
local real x = GetWidgetX(target)
local real y = GetWidgetY(target)
call UnitRemoveAbility(CASTER_DUMMY<i>,GetUnitUserData(CASTER_DUMMY<i>))
call UnitAddAbility(CASTER_DUMMY<i>,abil_id)
call SetUnitX(CASTER_DUMMY<i>,x)
call SetUnitY(CASTER_DUMMY<i>,y)
call IssueTargetOrder(CASTER_DUMMY<i>,order,target)
call SetUnitUserData(CASTER_DUMMY<i>,abil_id)
endfunction
function DummyTargetOrderById takes player p, integer abil_id, integer id, widget target returns nothing
local integer i = GetPlayerId(p)
local real x = GetWidgetX(target)
local real y = GetWidgetY(target)
call UnitRemoveAbility(CASTER_DUMMY<i>,GetUnitUserData(CASTER_DUMMY<i>))
call UnitAddAbility(CASTER_DUMMY<i>,abil_id)
call SetUnitX(CASTER_DUMMY<i>,x)
call SetUnitY(CASTER_DUMMY<i>,y)
call IssueTargetOrderById(CASTER_DUMMY<i>,id,target)
call SetUnitUserData(CASTER_DUMMY<i>,abil_id)
endfunction
function DummyImmediateOrderXY takes player p, integer abil_id, string order, real x, real y returns nothing
local integer i = GetPlayerId(p)
call UnitRemoveAbility(CASTER_DUMMY<i>,GetUnitUserData(CASTER_DUMMY<i>))
call UnitAddAbility(CASTER_DUMMY<i>,abil_id)
call SetUnitX(CASTER_DUMMY<i>,x)
call SetUnitY(CASTER_DUMMY<i>,y)
call IssueImmediateOrder(CASTER_DUMMY<i>,order)
call SetUnitUserData(CASTER_DUMMY<i>,abil_id)
endfunction
function DummyImmediateOrderLoc takes player p, integer abil_id, string order, location l returns nothing
local integer i = GetPlayerId(p)
call UnitRemoveAbility(CASTER_DUMMY<i>,GetUnitUserData(CASTER_DUMMY<i>))
call UnitAddAbility(CASTER_DUMMY<i>,abil_id)
call SetUnitPositionLoc(CASTER_DUMMY<i>,l)
call IssueImmediateOrder(CASTER_DUMMY<i>,order)
call SetUnitUserData(CASTER_DUMMY<i>,abil_id)
endfunction
function DummyPointOrderXY takes player p, integer abil_id, string order, real x, real y, real tX, real tY returns nothing
local integer i = GetPlayerId(p)
call UnitRemoveAbility(CASTER_DUMMY<i>,GetUnitUserData(CASTER_DUMMY<i>))
call UnitAddAbility(CASTER_DUMMY<i>,abil_id)
call SetUnitX(CASTER_DUMMY<i>,x)
call SetUnitY(CASTER_DUMMY<i>,y)
call IssuePointOrder(CASTER_DUMMY<i>,order,tX,tY)
call SetUnitUserData(CASTER_DUMMY<i>,abil_id)
endfunction
function DummyPointOrderLoc takes player p, integer abil_id, string order, location source, location target returns nothing
local integer i = GetPlayerId(p)
call UnitRemoveAbility(CASTER_DUMMY<i>,GetUnitUserData(CASTER_DUMMY<i>))
call UnitAddAbility(CASTER_DUMMY<i>,abil_id)
call SetUnitPositionLoc(CASTER_DUMMY<i>,source)
call IssuePointOrderLoc(CASTER_DUMMY<i>,order,target)
call SetUnitUserData(CASTER_DUMMY<i>,abil_id)
endfunction
function DummyPointOrderXYById takes player p, integer abil_id, integer id, real x, real y, real tX, real tY returns nothing
local integer i = GetPlayerId(p)
call UnitRemoveAbility(CASTER_DUMMY<i>,GetUnitUserData(CASTER_DUMMY<i>))
call UnitAddAbility(CASTER_DUMMY<i>,abil_id)
call SetUnitX(CASTER_DUMMY<i>,x)
call SetUnitY(CASTER_DUMMY<i>,y)
call IssuePointOrderById(CASTER_DUMMY<i>,id,tX,tY)
call SetUnitUserData(CASTER_DUMMY<i>,abil_id)
endfunction
function DummyPointOrderLocById takes player p, integer abil_id, integer id, location source, location target returns nothing
local integer i = GetPlayerId(p)
call UnitRemoveAbility(CASTER_DUMMY<i>,GetUnitUserData(CASTER_DUMMY<i>))
call UnitAddAbility(CASTER_DUMMY<i>,abil_id)
call SetUnitPositionLoc(CASTER_DUMMY<i>,source)
call IssuePointOrderLoc(CASTER_DUMMY<i>,OrderId2String(id),target)
call SetUnitUserData(CASTER_DUMMY<i>,abil_id)
endfunction
function IsUnitDead takes unit u returns boolean
return GetWidgetLife(u) <= .405
endfunction
private function Init takes nothing returns nothing
local integer i = 0
loop
exitwhen i == 16
set CASTER_DUMMY<i> = CreateUnit(Player(i),CASTER_DUMMY_ID,0.,0.,0.)
set i = i + 1
endloop
endfunction
endlibrary
</i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i></i>
This snippet contains many functions commonly used by spell makers. Hope these can help you to make your spell easier.
PS : Anymore functions you would like to add, feel free to tell me.