Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.
Required changes:
Get rid of BJ functions in Burrow Strike
TriggerSleepAction is not very accurate
Epicenter is not MUI
Stolen or not, you should post the code and improve these, else they will be rejected.
JASS:
function Trig_Burrowstrike_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A008'
endfunction
function Trig_Burrowstrike_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local integer i = GetUnitAbilityLevelSwapped('A008', u)
local location l = GetUnitLoc(u)
local location m = GetSpellTargetLoc()
call CreateNUnitsAtLoc( 1, 'n000', GetOwningPlayer(u), PolarProjectionBJ(l, -100.00, AngleBetweenPoints(l, m)), GetUnitFacing(u) )
if i==1 then
call UnitAddAbility( GetLastCreatedUnit(), 'A005' )
call SetUnitAbilityLevelSwapped( 'A005', GetLastCreatedUnit(), ( R2I(DistanceBetweenPoints(l, m)) / 100 ) )
else
if i==2 then
call UnitAddAbility( GetLastCreatedUnit(), 'A006' )
call SetUnitAbilityLevelSwapped( 'A006', GetLastCreatedUnit(), ( R2I(DistanceBetweenPoints(l, m)) / 100 ) )
else
if i==3 then
call UnitAddAbility( GetLastCreatedUnit(), 'A007' )
call SetUnitAbilityLevelSwapped( 'A007', GetLastCreatedUnit(), ( R2I(DistanceBetweenPoints(l, m)) / 100 ) )
else
call UnitAddAbility( GetLastCreatedUnit(), 'A004' )
call SetUnitAbilityLevelSwapped( 'A004', GetLastCreatedUnit(), ( R2I(DistanceBetweenPoints(l, m)) / 100 ) )
endif
endif
endif
call IssuePointOrder( GetLastCreatedUnit(), "impale", GetLocationX(m),GetLocationY(m) )
call TriggerSleepAction( ( DistanceBetweenPoints(l, m) / 4000.00 ) )
call SetUnitPositionLoc( u, m )
call SetUnitAnimation( u, "morph ALTERNATE" )
set u = null
call RemoveLocation(l)
call RemoveLocation(m)
set l = null
set m = null
endfunction
//===========================================================================
function InitTrig_Burrowstrike takes nothing returns nothing
set gg_trg_Burrowstrike = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Burrowstrike, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Burrowstrike, Condition( function Trig_Burrowstrike_Conditions ) )
call TriggerAddAction( gg_trg_Burrowstrike, function Trig_Burrowstrike_Actions )
endfunction
Epicenter
Events
Unit - A unit Finishes casting an ability
Conditions
(Ability being cast) Equal to Epicenter
Actions
Set Epicenter_Caster = (Triggering unit)
Set Epicenter_Pulses = (4 + (2 x (Level of Epicenter Slow for Epicenter_Caster)))
Set Epicenter_Damage = 110
Trigger - Turn on Epicenter Action <gen>
Wait until (Epicenter_Pulses Equal to 0), checking every 0.10 seconds
Trigger - Turn off Epicenter Action <gen>
Epicenter Action
Events
Time - Every 0.30 seconds of game time
Conditions
Actions
Set Epicenter_Pulses = (Epicenter_Pulses - 1)
Set Epicenter_Caster_Loc = (Position of Epicenter_Caster)
Set Epicenter_Group = (Units within 600.00 of Epicenter_Caster_Loc matching ((((Matching unit) belongs to an enemy of (Owner of Epicenter_Caster)) Equal to True) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) is A structure) Equal to False))))
Environment - Create a 0.50 second Temporary crater deformation at Epicenter_Caster_Loc with radius 560.00 and depth 28.00
Unit - Create 1 Dummy Unit for (Owner of Epicenter_Caster) at Epicenter_Caster_Loc facing Default building facing degrees
Unit - Add Epicenter Slow to (Last created unit)
Unit - Order (Last created unit) to Human Mountain King - Thunder Clap
Unit - Add a 0.30 second Generic expiration timer to (Last created unit)
Unit Group - Pick every unit in Epicenter_Group and do (Actions)
Loop - Actions
Set Epicenter_Picked_Loc = (Position of (Picked unit))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between Epicenter_Caster_Loc and Epicenter_Picked_Loc) Less than or equal to 200.00
Then - Actions
Unit - Cause Epicenter_Caster to damage (Picked unit), dealing ((Real(Epicenter_Damage)) + 20.00) damage of attack type Spells and damage type Universal
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between Epicenter_Caster_Loc and Epicenter_Picked_Loc) Less than or equal to 400.00
Then - Actions
Unit - Cause Epicenter_Caster to damage (Picked unit), dealing ((Real(Epicenter_Damage)) - 20.00) damage of attack type Spells and damage type Universal
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Distance between Epicenter_Caster_Loc and Epicenter_Picked_Loc) Less than or equal to 600.00
Then - Actions
Unit - Cause Epicenter_Caster to damage (Picked unit), dealing ((Real(Epicenter_Damage)) - 30.00) damage of attack type Spells and damage type Universal
First of all, you should get rid of all the BJs.
The BJs are those funtions highlighted in red.
ALL BJs are bad except for TriggerRegisterAnyUnitEventBJ, ModuloInteger, ModuloReal, IAbsBJ, RAbsBJ,
IMinBJ, IMaxBJ, RMinBJ, RMaxBJ and IntegerTertiary. Instead of GetLastCreatedUnit() and CreateNUnitsAtLoc(),
you should use a local unit variable and set it to CreateUnit(....) then use that unit variable instead of using
GetLastCreatedUnit().
You have leaks in there too. PolarProjectionBJ(l, -100.00, AngleBetweenPoints(l, m)) Leaks.
Instead of SetUnitAbilityLevelSwapped, just use SetUnitAbilityLevel. It's more
efficient and it's name is shorter -> thus it's faster.
DistanceBetweenPoints -> SquareRoot((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
And you should cache the distance to increase efficiency since you're calling the function multiple times.
Instead of locations, you should be using coordinates. No one uses locations in Jass .. unless you want to
find the Z of a certain point on the map via GetLocationZ
And you shouldn't be setting the animation of the unit to something like that, it might not have it.
All models are expected to have the "walk", "stand" and "attack" animations at least. Use those.
You could make it configurable using functions like this though:
JASS:
function BurrowStrike_Animation takes nothing returns string
return "stand"
endfunction
Instead of SetUnitPositionLoc, use SetUnitX and SetUnitY.
And you shouldn't be using waits, use timers instead. (Don't use TriggerSleepAction)
And all this was directed only at your BurrowStrike spell.
There are a lot of things that could and should be improved.
These spells aren't MUI. MUI means Multi-Unit-Instanceable.
To make a spell MUI, you can either use Hashtables, or arrays.
If you want to use arrays, you can either go with Dynamic Indexing or you can use a simple stack structure.
I'd go with Dynamic Indexing if I were you. It has O(1) complexity. (Meaning it's faster)
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.