Files
2021-10-24 15:36:18 -04:00

134 lines
4.4 KiB
Lua
Executable File

require( "map_encounter" )
require( "aghanim_utility_functions" )
require( "spawner" )
--------------------------------------------------------------------------------
if CMapEncounter_BonusBase == nil then
CMapEncounter_BonusBase = class( {}, {}, CMapEncounter )
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:constructor( hRoom, szEncounterName )
CMapEncounter.constructor( self, hRoom, szEncounterName )
self.bGameStarted = false
self.PlayerGoldCollected = {}
self.flEndTime = 9999999999999
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:Precache( context )
CMapEncounter.Precache( self, context )
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:OnEncounterLoaded()
CMapEncounter.OnEncounterLoaded( self )
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:GetMaxSpawnedUnitCount()
return 0
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:Start()
CMapEncounter.Start( self )
self.nItemPickedUpListener = ListenToGameEvent( "dota_item_picked_up", Dynamic_Wrap( getclass( self ), "OnItemPickedUp" ), self )
self.nGoldReward = 0
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:StartBonusRound( flTimeLimit )
EmitGlobalSound( "RoundStart" )
self.bGameStarted = true
self.flEndTime = GameRules:GetGameTime() + flTimeLimit
for nPlayerID=0,AGHANIM_PLAYERS-1 do
self.PlayerGoldCollected[ nPlayerID ] = {}
self.PlayerGoldCollected[ nPlayerID ][ "bags" ] = 0
self.PlayerGoldCollected[ nPlayerID ][ "gold" ] = 0
end
local BonusStartData = {}
BonusStartData[ "end_time" ] = self.flEndTime
CustomNetTables:SetTableValue( "encounter_state", "bonus", self.PlayerGoldCollected )
CustomGameEventManager:Send_ServerToAllClients( "bonus_start", BonusStartData )
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:OnComplete()
CMapEncounter.OnComplete( self )
StopListeningToGameEvent( self.nItemPickedUpListener )
for nPlayerID=0,AGHANIM_PLAYERS-1 do
CenterCameraOnUnit( nPlayerID, PlayerResource:GetSelectedHeroEntity( nPlayerID ) )
end
CustomGameEventManager:Send_ServerToAllClients( "bonus_complete", self.PlayerGoldCollected )
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:OnThink()
CMapEncounter.OnThink( self )
end
--------------------------------------------------------------------------------
function CMapEncounter_BonusBase:CheckForCompletion()
return GameRules:GetGameTime() > self.flEndTime
end
---------------------------------------------------------
-- dota_item_picked_up
-- * PlayerID
-- * HeroEntityIndex
-- * UnitEntityIndex (only if parent is not a hero)
-- * itemname
-- * ItemEntityIndex
---------------------------------------------------------
function CMapEncounter_BonusBase:OnItemPickedUp( event )
local item = EntIndexToHScript( event.ItemEntityIndex )
local hCollector = nil
if event.HeroEntityIndex then
hCollector = EntIndexToHScript( event.HeroEntityIndex )
elseif event.UnitEntityIndex then
hCollector = EntIndexToHScript( event.UnitEntityIndex )
end
if hCollector and item and item:GetAbilityName() == "item_bag_of_gold" then
--printf( "hCollector name: %s", hCollector:GetUnitName() )
--printf( "hCollector player id: %d", hCollector:GetPlayerID() )
--printf( "self.PlayerGoldCollected table: " )
--PrintTable( self.PlayerGoldCollected, " -- " )
if not self.PlayerGoldCollected or #self.PlayerGoldCollected <= 0 then
printf( "WARNING - self.PlayerGoldCollected is nil or empty" )
return
end
--printf( "encounter name: %s", self:GetEncounter():GetName() )
self.PlayerGoldCollected[ hCollector:GetPlayerID() ][ "bags" ] = self.PlayerGoldCollected[ hCollector:GetPlayerID() ][ "bags" ] + 1
self.PlayerGoldCollected[ hCollector:GetPlayerID() ][ "gold" ] = self.PlayerGoldCollected[ hCollector:GetPlayerID() ][ "gold" ] + item:GetCurrentCharges()
CustomNetTables:SetTableValue( "encounter_state", "bonus", self.PlayerGoldCollected )
end
end
-----------------------------------------
return CMapEncounter_BonusBase