initial commit
This commit is contained in:
220
aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_shuffle.lua
Executable file
220
aghanim_singleplayer/scripts/vscripts/traps/fire_trap_cycle_shuffle.lua
Executable file
@@ -0,0 +1,220 @@
|
||||
|
||||
--print( "fire_trap_cycle_shuffle" )
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
-- Fire Trap Cycle Shuffle
|
||||
---------------------------------------------------------------------------
|
||||
function Spawn( entityKeyValues )
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
|
||||
if thisEntity == nil then
|
||||
return
|
||||
end
|
||||
-- Determine the type of trap
|
||||
-- If any one type is weighted we can insert more entries into the table
|
||||
thisEntity.hTrapTable = { "standard", "standard", "standard", "tripleshot", "alternating" }
|
||||
local nRandomType = RandomInt( 1,5 ) -- Change this number to correspond to the trap table entries
|
||||
thisEntity.szTrapType = thisEntity.hTrapTable[nRandomType]
|
||||
thisEntity.hRefireTable = { 1.5, 2.0, 2.5, 3.9 }
|
||||
thisEntity.nQuickRefires = 0
|
||||
thisEntity.bNextAttackIsNormal = false
|
||||
thisEntity.fRefireTime = 1.5
|
||||
thisEntity.fQuickRefireTime = 0.5
|
||||
|
||||
if thisEntity.szTrapType == "standard" then
|
||||
--print("Standard Trap")
|
||||
local nRandomRefireTime = RandomInt( 1,4 )
|
||||
thisEntity.fRefireTime = thisEntity.hRefireTable[ nRandomRefireTime ]
|
||||
--print( "Refire time = " .. thisEntity.fRefireTime )
|
||||
elseif thisEntity.szTrapType == "tripleshot" then
|
||||
--print("Triple Shot Trap")
|
||||
thisEntity.fRefireTime = 2.0
|
||||
--print( "Refire time = " .. thisEntity.fRefireTime )
|
||||
elseif thisEntity.szTrapType == "alternating" then
|
||||
--print("Alternating Trap")
|
||||
thisEntity.fRefireTime = 1.8
|
||||
--print( "Refire time = " .. thisEntity.fRefireTime )
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function OnTrigger( trigger )
|
||||
EmitGlobalSound( "ui.ui_player_disconnected" )
|
||||
EmitSoundOn( "AghanimsFortress.FireTrap", hTrigger )
|
||||
|
||||
thisEntity.hBreatheFireAbility = thisEntity:FindAbilityByName( "breathe_fire" )
|
||||
if thisEntity.hBreatheFireAbility == nil then
|
||||
print( "ERROR: thisEntity.hBreatheFireAbility not found" )
|
||||
return
|
||||
end
|
||||
|
||||
if thisEntity.szTrapType == "standard" then
|
||||
-- Standard
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime
|
||||
|
||||
thisEntity:SetContextThink( "FireTrapActivate", function() return FireTrapActivate() end, 0 )
|
||||
elseif thisEntity.szTrapType == "tripleshot" then
|
||||
-- TripleShot
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime
|
||||
|
||||
thisEntity:SetContextThink( "FireTrapActivateTriple", function() return FireTrapActivateTriple() end, 0 )
|
||||
elseif thisEntity.szTrapType == "alternating" then
|
||||
-- Alternating
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime
|
||||
|
||||
thisEntity:SetContextThink( "FireTrapActivateAlternating", function() return FireTrapActivateAlternating() end, 0 )
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
function DisableTrap( trigger )
|
||||
thisEntity.bDisabled = true
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
function FireTrapActivate()
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
|
||||
if thisEntity.bDisabled then
|
||||
return -1
|
||||
end
|
||||
|
||||
if GameRules:IsGamePaused() == true then
|
||||
return 0.5
|
||||
end
|
||||
|
||||
if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then
|
||||
thisEntity:SetAnimation( "bark_attack" );
|
||||
thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 )
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime
|
||||
end
|
||||
|
||||
return 0.5
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
function FireTrapActivateTriple()
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
|
||||
if thisEntity.bDisabled then
|
||||
return -1
|
||||
end
|
||||
|
||||
if GameRules:IsGamePaused() == true then
|
||||
return 0.5
|
||||
end
|
||||
|
||||
if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then
|
||||
return QuickRefireTriple()
|
||||
end
|
||||
|
||||
return 0.25
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
function QuickRefireTriple()
|
||||
thisEntity:SetAnimation( "bark_attack" );
|
||||
thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 )
|
||||
|
||||
thisEntity.nQuickRefires = thisEntity.nQuickRefires + 1
|
||||
|
||||
if thisEntity.nQuickRefires <= 2 then
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime
|
||||
else
|
||||
thisEntity.bNextAttackIsNormal = true
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime
|
||||
thisEntity.nQuickRefires = 0 -- reset counter
|
||||
end
|
||||
|
||||
return 0.25
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
function FireTrapActivateAlternating()
|
||||
if not IsServer() then
|
||||
return
|
||||
end
|
||||
|
||||
if thisEntity.bDisabled then
|
||||
return -1
|
||||
end
|
||||
|
||||
if GameRules:IsGamePaused() == true then
|
||||
return 0.5
|
||||
end
|
||||
|
||||
if GameRules:GetGameTime() >= thisEntity.fNextAttackTime then
|
||||
if thisEntity.bNextAttackIsNormal == false then
|
||||
return QuickRefireAlternating()
|
||||
else
|
||||
return NormalRefire()
|
||||
end
|
||||
end
|
||||
|
||||
return 0.25
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
function QuickRefireAlternating()
|
||||
thisEntity:SetAnimation( "bark_attack" );
|
||||
thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 )
|
||||
|
||||
thisEntity.nQuickRefires = thisEntity.nQuickRefires + 1
|
||||
|
||||
if thisEntity.nQuickRefires <= 2 then
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fQuickRefireTime
|
||||
else
|
||||
thisEntity.bNextAttackIsNormal = true
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime
|
||||
thisEntity.nQuickRefires = 0 -- reset counter
|
||||
end
|
||||
|
||||
return 0.25
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
function NormalRefire()
|
||||
thisEntity:SetAnimation( "bark_attack" );
|
||||
thisEntity:CastAbilityOnPosition( thisEntity:GetTrapTarget(), thisEntity.hBreatheFireAbility, -1 )
|
||||
|
||||
thisEntity.fNextAttackTime = GameRules:GetGameTime() + thisEntity.fRefireTime
|
||||
thisEntity.bNextAttackIsNormal = false
|
||||
|
||||
return 0.25
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
function PickRandomShuffle( reference_list, bucket )
|
||||
if ( #reference_list == 0 ) then
|
||||
return nil
|
||||
end
|
||||
|
||||
if ( #bucket == 0 ) then
|
||||
-- ran out of options, refill the bucket from the reference
|
||||
for k, v in pairs(reference_list) do
|
||||
bucket[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
-- pick a value from the bucket and remove it
|
||||
local pick_index = RandomInt( 1, #bucket )
|
||||
local result = bucket[ pick_index ]
|
||||
table.remove( bucket, pick_index )
|
||||
return result
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user