- Joined
- Sep 16, 2008
- Messages
- 47
Grenade Init
Grenade Cast
Grenade Loop
My question is:
Why parabola don;t work?
How to fix this spell?
JASS:
function Trig_Grenade_Init_Actions takes nothing returns nothing
call InitHashtableBJ( )
set udg_Grenade_Table = GetLastCreatedHashtableBJ()
endfunction
//===========================================================================
function InitTrig_Grenade_Init takes nothing returns nothing
set gg_trg_Grenade_Init = CreateTrigger( )
call TriggerAddAction( gg_trg_Grenade_Init, function Trig_Grenade_Init_Actions )
endfunction
JASS:
function Trig_Grenade_Cast_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A002' ) ) then
return false
endif
return true
endfunction
function Trig_Grenade_Cast_Actions takes nothing returns nothing
// ============================================
// ----------------------------------------------------------------------------------
// Caster
// ----------------------------------------------------------------------------------------
// ============================================
set udg_Grenade_Caster = GetTriggerUnit()
set udg_Grenade_CasterPosition = GetUnitLoc(udg_Grenade_Caster)
// ============================================
// ----------------------------------------------------------------------------------
// Ability
// ----------------------------------------------------------------------------------------
// ============================================
set udg_Grenade_Ability = 'A002'
set udg_Grenade_AbilityLevel = GetUnitAbilityLevelSwapped(udg_Grenade_Ability, udg_Grenade_Caster)
set udg_Grenade_SpellPoint = GetSpellTargetLoc()
// ============================================
// ----------------------------------------------------------------------------------
// Throw
// ----------------------------------------------------------------------------------------
// ============================================
set udg_Grenade_Distance = DistanceBetweenPoints(udg_Grenade_CasterPosition, udg_Grenade_SpellPoint)
set udg_Grenade_Angle = AngleBetweenPoints(udg_Grenade_CasterPosition, udg_Grenade_SpellPoint)
set udg_Grenade_CurrentDistance = 0.00
set udg_Grenade_MaxHeight = 500.00
set udg_Grenade_Speed = 4.00
// ============================================
// ----------------------------------------------------------------------------------
// Dummy
// ----------------------------------------------------------------------------------------
// ============================================
set udg_Grenade_DummyModel = "Abilities\\Spells\\Other\\AcidBomb\\BottleMissile.mdl"
set udg_Grenade_CreateDistance = 50.00
set udg_Grenade_CreatePoint = PolarProjectionBJ(udg_Grenade_CasterPosition, udg_Grenade_CreateDistance, udg_Grenade_Angle)
// ============================================
// ----------------------------------------------------------------------------------
// Damage
// ----------------------------------------------------------------------------------------
// ============================================
set udg_Grenade_Damage = ( 100 * udg_Grenade_AbilityLevel )
set udg_Grenade_DamageRange = 300.00
// ============================================
// ----------------------------------------------------------------------------------
// Hashtables
// ----------------------------------------------------------------------------------------
// ============================================
// Reals
// ----------------------------------------------------------------------------------------
call SaveRealBJ( udg_Grenade_Angle, 0, GetHandleIdBJ(GetTriggerUnit()), udg_Grenade_Table )
call SaveRealBJ( udg_Grenade_DamageRange, 1, GetHandleIdBJ(GetTriggerUnit()), udg_Grenade_Table )
call SaveRealBJ( udg_Grenade_Distance, 2, GetHandleIdBJ(GetTriggerUnit()), udg_Grenade_Table )
call SaveRealBJ( udg_Grenade_MaxHeight, 3, GetHandleIdBJ(GetTriggerUnit()), udg_Grenade_Table )
call SaveRealBJ( udg_Grenade_Speed, 4, GetHandleIdBJ(GetTriggerUnit()), udg_Grenade_Table )
call SaveRealBJ( udg_Grenade_CurrentDistance, 6, GetHandleIdBJ(GetTriggerUnit()), udg_Grenade_Table )
// ----------------------------------------------------------------------------------------
// Integers
// ----------------------------------------------------------------------------------------
call SaveIntegerBJ( udg_Grenade_Damage, 5, GetHandleIdBJ(GetTriggerUnit()), udg_Grenade_Table )
// ----------------------------------------------------------------------------------------
// Strings
// ----------------------------------------------------------------------------------------
// ============================================
// ----------------------------------------------------------------------------------
// Actions
// ----------------------------------------------------------------------------------------
// ============================================
call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(udg_Grenade_Caster), udg_Grenade_CreatePoint, udg_Grenade_Angle )
set udg_Grenade_Dummy = GetLastCreatedUnit()
call AddSpecialEffectTargetUnitBJ( "chest", udg_Grenade_Dummy, udg_Grenade_DummyModel )
call GroupAddUnitSimple( udg_Grenade_Caster, udg_Grenade_SpellGroup )
endfunction
//===========================================================================
function InitTrig_Grenade_Cast takes nothing returns nothing
set gg_trg_Grenade_Cast = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Grenade_Cast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Grenade_Cast, Condition( function Trig_Grenade_Cast_Conditions ) )
call TriggerAddAction( gg_trg_Grenade_Cast, function Trig_Grenade_Cast_Actions )
endfunction
JASS:
function Trig_Grenade_Loop_Func001Func010Func005Func002C takes nothing returns boolean
if ( not ( IsUnitEnemy(udg_Grenade_Damaged, GetOwningPlayer(udg_Grenade_Caster)) == false ) ) then
return false
endif
if ( not ( IsUnitType(udg_Grenade_Damaged, UNIT_TYPE_MAGIC_IMMUNE) == false ) ) then
return false
endif
if ( not ( IsUnitType(udg_Grenade_Damaged, UNIT_TYPE_FLYING) == false ) ) then
return false
endif
return true
endfunction
function Trig_Grenade_Loop_Func001Func010Func005A takes nothing returns nothing
set udg_Grenade_Damaged = GetEnumUnit()
if ( Trig_Grenade_Loop_Func001Func010Func005Func002C() ) then
call UnitDamageTargetBJ( udg_Grenade_Caster, udg_Grenade_Damaged, I2R(udg_Grenade_Damage), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
else
endif
endfunction
function Trig_Grenade_Loop_Func001Func010C takes nothing returns boolean
if ( not ( udg_Grenade_CurrentDistance < udg_Grenade_Distance ) ) then
return false
endif
return true
endfunction
function Trig_Grenade_Loop_Func001A takes nothing returns nothing
set udg_Grenade_Dummies = GetEnumUnit()
set udg_Grenade_Casters = GetEnumUnit()
set udg_Grenade_Angle = LoadRealBJ(0, GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table)
set udg_Grenade_DamageRange = LoadRealBJ(1, GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table)
set udg_Grenade_Distance = LoadRealBJ(2, GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table)
set udg_Grenade_MaxHeight = LoadRealBJ(3, GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table)
set udg_Grenade_Speed = LoadRealBJ(4, GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table)
set udg_Grenade_Damage = LoadIntegerBJ(5, GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table)
set udg_Grenade_CurrentDistance = LoadRealBJ(6, GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table)
if ( Trig_Grenade_Loop_Func001Func010C() ) then
call DisplayTimedTextToForce( GetPlayersAll(), 0.01, "TRIGSTR_619" )
set udg_Grenade_DummyPosition = GetUnitLoc(udg_Grenade_Dummy)
set udg_Grenade_MovePoint = PolarProjectionBJ(udg_Grenade_DummyPosition, udg_Grenade_Speed, udg_Grenade_Angle)
call SetUnitPositionLoc( udg_Grenade_Dummy, udg_Grenade_MovePoint )
call SaveRealBJ( ( udg_Grenade_CurrentDistance + udg_Grenade_Speed ), 6, GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table )
set udg_Grenade_Real[1] = udg_Grenade_MaxHeight
set udg_Grenade_Real[2] = udg_Grenade_Distance
set udg_Grenade_Real[3] = udg_Grenade_CurrentDistance
set udg_Grenade_Real[4] = ( 4 * udg_Grenade_Real[1] / udg_Grenade_Real[2]) * ( udg_Grenade_Real[2] - udg_Grenade_Real[3]) * ( udg_Grenade_Real[3] / udg_Grenade_Real[2] )
call SetUnitFlyHeightBJ( udg_Grenade_Dummies, udg_Grenade_Real[4], 0.00 )
call RemoveLocation(udg_Grenade_DummiesPosition)
call RemoveLocation(udg_Grenade_MovePoint)
else
set udg_Grenade_DummiesPosition = GetUnitLoc(udg_Grenade_Dummies)
set udg_Grenade_DamageGroup = GetUnitsInRangeOfLocAll(udg_Grenade_DamageRange, udg_Grenade_DummiesPosition)
call ForGroupBJ( udg_Grenade_DamageGroup, function Trig_Grenade_Loop_Func001Func010Func005A )
call RemoveLocation(udg_Grenade_DummiesPosition)
call GroupRemoveUnitSimple( udg_Grenade_Dummy, udg_Grenade_SpellGroup )
call RemoveUnit( udg_Grenade_Dummy )
call FlushChildHashtableBJ( GetHandleIdBJ(GetEnumUnit()), udg_Grenade_Table )
endif
endfunction
function Trig_Grenade_Loop_Actions takes nothing returns nothing
call ForGroupBJ( udg_Grenade_SpellGroup, function Trig_Grenade_Loop_Func001A )
endfunction
//===========================================================================
function InitTrig_Grenade_Loop takes nothing returns nothing
set gg_trg_Grenade_Loop = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Grenade_Loop, 0.01 )
call TriggerAddAction( gg_trg_Grenade_Loop, function Trig_Grenade_Loop_Actions )
endfunction
My question is:
Why parabola don;t work?
How to fix this spell?