Initial commit
This commit is contained in:
443
Data/Scripts/Miscellaneous/GameScoring.lua
Executable file
443
Data/Scripts/Miscellaneous/GameScoring.lua
Executable file
@@ -0,0 +1,443 @@
|
||||
require("PGBase")
|
||||
require("GameManager.Constants")
|
||||
require("GameManager.GUIManager")
|
||||
require("GameManager.GalacticGameClass")
|
||||
require("GameManager.TacticalGameClass")
|
||||
require("GameManager.SkirmishGameClass")
|
||||
|
||||
-- ==================================================
|
||||
-- Script Locals
|
||||
-- ==================================================
|
||||
|
||||
---Debug Counter. When this equals ServiceDebugRate, the script will print debug stats.
|
||||
local DebugCounter = 0
|
||||
|
||||
---Debugging service rate.
|
||||
local ServiceDebugRate = 10
|
||||
|
||||
---The Local Player FoC PlayerWrapper object.
|
||||
local LocalPlayer = nil
|
||||
|
||||
---The GUI Manager.
|
||||
---@type GUIManager
|
||||
local GUIManager = GUIManager:New()
|
||||
|
||||
---The Galactic Game manager.
|
||||
---@type GalacticGameClass|nil
|
||||
local GalacticGame = nil
|
||||
|
||||
---The Tactical Game manager.
|
||||
---@type TacticalGameClass|nil
|
||||
local TacticalGame = nil
|
||||
|
||||
---The Skirmish Game manager.
|
||||
---@type SkirmishGameClass|nil
|
||||
local SkirmishGame = nil
|
||||
|
||||
-- ==================================================
|
||||
-- Script Globals
|
||||
-- ==================================================
|
||||
|
||||
ScriptPoolCount = 0
|
||||
ServiceRate = 1
|
||||
ScriptShouldCRC = false
|
||||
|
||||
---GameSpy Game Stats table
|
||||
---@deprecated
|
||||
GameSpy_Game_Stats = {}
|
||||
|
||||
---GameSpy Player Stats table
|
||||
---@deprecated
|
||||
GameSpy_Player_Stats = {}
|
||||
|
||||
-- ==================================================
|
||||
-- Script State Functions
|
||||
-- ==================================================
|
||||
|
||||
---Sets up the base variables for this script.
|
||||
function Base_Definitions()
|
||||
DebugMessage("%s -- In Base_Definitions.", tostring(Script))
|
||||
|
||||
DebugCounter = 0
|
||||
LocalPlayer = Find_Player("local")
|
||||
end
|
||||
|
||||
---Main script function. Does event pumps and servicing.
|
||||
function main()
|
||||
DebugMessage("%s -- In main.", tostring(Script))
|
||||
|
||||
if GameService then
|
||||
while 1 do
|
||||
GameService()
|
||||
PumpEvents()
|
||||
end
|
||||
end
|
||||
|
||||
ScriptExit()
|
||||
end
|
||||
|
||||
---Script servicing function.
|
||||
function GameService()
|
||||
DebugCounter = DebugCounter + 1
|
||||
|
||||
if DebugCounter == ServiceDebugRate then
|
||||
ServiceDebug()
|
||||
DebugCounter = 0
|
||||
end
|
||||
|
||||
if GalacticGame then
|
||||
GalacticGame:Service()
|
||||
|
||||
if TacticalGame then
|
||||
TacticalGame:Service()
|
||||
end
|
||||
end
|
||||
|
||||
if SkirmishGame then
|
||||
SkirmishGame:Service()
|
||||
end
|
||||
|
||||
if GUIManager then
|
||||
GUIManager:Service()
|
||||
end
|
||||
end
|
||||
|
||||
---Script debug servicing.
|
||||
function ServiceDebug()
|
||||
|
||||
end
|
||||
|
||||
-- ==================================================
|
||||
-- Reset State
|
||||
-- ==================================================
|
||||
|
||||
---Reset the Tactical mode game stats.
|
||||
function Reset_Tactical_Stats()
|
||||
DebugMessage("%s -- In Reset_Tactical_Stats", tostring(Script))
|
||||
|
||||
ResetTacticalRegistry()
|
||||
end
|
||||
|
||||
---Reset all the stats and player lists.
|
||||
function Reset_Stats()
|
||||
DebugMessage("%s -- In Reset_Stats", tostring(Script))
|
||||
|
||||
Reset_Tactical_Stats()
|
||||
end
|
||||
|
||||
---A dirty hack to reset tactical script registry values
|
||||
function ResetTacticalRegistry()
|
||||
DebugMessage("Resetting Allow_AI_Controlled_Fog_Reveal to 1 (allowed)")
|
||||
GlobalValue.Set("Allow_AI_Controlled_Fog_Reveal", 1)
|
||||
end
|
||||
|
||||
--- ==================================================
|
||||
--- Event Handlers
|
||||
--- ==================================================
|
||||
|
||||
---This event is triggered on a game mode start.
|
||||
---@param mode string Name of the new mode (i.e. Galactic, Land, Space)
|
||||
---@param map string Name of the map.
|
||||
function Game_Mode_Starting_Event(mode, map)
|
||||
DebugMessage("%s -- Game Mode %s (%s) now starting.", tostring(Script), mode, map)
|
||||
|
||||
if StringCompare(mode, "Galactic") then
|
||||
-- Galactic Campaign
|
||||
Init_Galactic()
|
||||
elseif GalacticGame then
|
||||
-- Galactic mode transition to Tactical
|
||||
Init_Tactical(mode)
|
||||
else
|
||||
-- Skirmish tactical
|
||||
Init_Skirmish(mode)
|
||||
end
|
||||
end
|
||||
|
||||
---This event is triggered on a game mode end.
|
||||
---@param oldMode string Name of the old mode (i.e. Galactic, Land, Space)
|
||||
function Game_Mode_Ending_Event(oldMode)
|
||||
DebugMessage("%s -- Game Mode %s now ending.", tostring(Script), oldMode)
|
||||
|
||||
if StringCompare(oldMode, "Galactic") then
|
||||
-- Galactic mode ending
|
||||
Reset_Galactic()
|
||||
elseif GalacticGame then
|
||||
-- Tactical mode transition to Galactic
|
||||
Reset_Tactical()
|
||||
else
|
||||
-- Skirmish mode ending
|
||||
Reset_Skirmish()
|
||||
end
|
||||
end
|
||||
|
||||
---This event is triggered when a player quits the game.
|
||||
---@param player table FoC PlayerWrapper object that just quit.
|
||||
function Player_Quit_Event(player)
|
||||
DebugMessage("%s -- Player %s (%d) has quit.", tostring(Script), player.Get_Name(), player.Get_ID())
|
||||
|
||||
if TacticalGame then
|
||||
TacticalGame:PlayerQuit(player.Get_ID())
|
||||
end
|
||||
end
|
||||
|
||||
---This event is triggered when production has finished in a tactical mode
|
||||
---@param objectType table FoC GameObjectTypeWrapper object that was just built.
|
||||
---@param player table FoC PlayerWrapper object that built the object.
|
||||
---@param location table|nil FoC GameObjectWrapper of the planet.
|
||||
function Tactical_Production_End_Event(objectType, player, location)
|
||||
if location then
|
||||
DebugMessage("%s -- Tactical production of unit %s by %s ended at %s.", tostring(Script), objectType.Get_Name(),
|
||||
player.Get_Name(),
|
||||
location.Get_Type().Get_Name())
|
||||
else
|
||||
DebugMessage("%s -- Tactical production of unit %s by %s ended.", tostring(Script), objectType.Get_Name(),
|
||||
player.Get_Name())
|
||||
end
|
||||
|
||||
if TacticalGame then
|
||||
TacticalGame:UnitBuilt(objectType, player)
|
||||
end
|
||||
end
|
||||
|
||||
---This event is triggered when a unit is destroyed in tactical mode.
|
||||
---@param object table FoC GameObjectWrapper object that was just killed.
|
||||
---@param killer table FoC PlayerWrapper object that killed the object.
|
||||
function Tactical_Unit_Destroyed_Event(object, killer)
|
||||
DebugMessage("%s -- Tactical unit %s destroyed by %s.", tostring(Script), object.Get_Type().Get_Name(),
|
||||
killer.Get_Name())
|
||||
|
||||
if TacticalGame then
|
||||
TacticalGame:UnitKilled(object)
|
||||
end
|
||||
end
|
||||
|
||||
---This event is triggered when production has begun on an item at a given planet.
|
||||
---@param planet table FoC GameObjectWrapper object of the planet.
|
||||
---@param objectType table FoC GameObjectTypeWrapper object that was just queued.
|
||||
function Galactic_Production_Begin_Event(planet, objectType)
|
||||
DebugMessage("%s -- Galactic production of %s started at %s.", tostring(Script), objectType.Get_Name(),
|
||||
planet.Get_Type().Get_Name())
|
||||
end
|
||||
|
||||
---This event is triggered when production has been prematurely canceled
|
||||
---on an item at a given planet.
|
||||
---@param planet table FoC GameObjectWrapper object of the planet.
|
||||
---@param objectType table FoC GameObjectTypeWrapper object that was just canceled..
|
||||
function Galactic_Production_Canceled_Event(planet, objectType)
|
||||
DebugMessage("%s -- Galactic production of %s canceled at %s.", tostring(Script), objectType.Get_Name(),
|
||||
planet.Get_Type().Get_Name())
|
||||
end
|
||||
|
||||
---This event is triggered when production has finished on an item at a given planet.
|
||||
---@param planet table FoC GameObjectWrapper or of the planet.
|
||||
---@param object table FoC GameObjectWrapper or GameObjectTypeWrapper of the object that was just created.
|
||||
function Galactic_Production_End_Event(planet, object)
|
||||
local typeName = ""
|
||||
|
||||
if object.Get_Type == nil then
|
||||
-- object must be a GameObjectTypeWrapper not a GameObjectWrapper if it doesn't
|
||||
-- have a Get_Type function.
|
||||
typeName = object.Get_Name()
|
||||
else
|
||||
-- object points to the GameObjectWrapper that was just created.
|
||||
typeName = object.Get_Type().Get_Name()
|
||||
end
|
||||
|
||||
DebugMessage("%s -- Galactic production of %s ended at %s.", tostring(Script), typeName,
|
||||
planet.Get_Type().Get_Name())
|
||||
end
|
||||
|
||||
---This event is triggered when a unit is destroyed in galactic mode.
|
||||
---@param object table FoC GameObjectWrapper object that was just killed.
|
||||
---@param killer table FoC PlayerWrapper object that killed the object.
|
||||
function Galactic_Unit_Destroyed_Event(object, killer)
|
||||
DebugMessage("%s -- Object %s killed by %s.", tostring(Script), object.Get_Type().Get_Name(), killer.Get_Name())
|
||||
end
|
||||
|
||||
---This event is triggered when the level of a starbase changes.
|
||||
---@param planet table FoC GameObjectWrapper object of the planet.
|
||||
---@param oldType table FoC GameObjectTypeWrapper object of the old starbase type.
|
||||
---@param newType table FoC GameObjectTypeWrapper object of the new starbase type.
|
||||
function Galactic_Starbase_Level_Change(planet, oldType, newType)
|
||||
DebugMessage("%s -- %s Starbase changed from %s to %s.", tostring(Script), planet.Get_Type().Get_Name(),
|
||||
tostring(oldType), tostring(newType))
|
||||
|
||||
if oldType == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if newType ~= nil then
|
||||
return
|
||||
end
|
||||
|
||||
local fake_object_type = oldType
|
||||
local fake_object_player = planet.Get_Owner()
|
||||
local fake_object = {}
|
||||
|
||||
fake_object.Get_Owner = function()
|
||||
return fake_object_player
|
||||
end
|
||||
|
||||
fake_object.Get_Type = function()
|
||||
return fake_object_type
|
||||
end
|
||||
|
||||
fake_object.Get_Game_Scoring_Type = function()
|
||||
return fake_object_type
|
||||
end
|
||||
|
||||
fake_object.Is_Valid = function()
|
||||
return true
|
||||
end
|
||||
|
||||
Galactic_Unit_Destroyed_Event(fake_object, planet.Get_Final_Blow_Player())
|
||||
end
|
||||
|
||||
---This event is called when a planet changes faction in galactic mode.
|
||||
---@param planet table FoC GameObjectWrapper object of the planet.
|
||||
---@param newOwner table FoC PlayerWrapper of the new owner.
|
||||
---@param oldOwner table FoC PlayerWrapper of the old owner.
|
||||
function Galactic_Planet_Faction_Change(planet, newOwner, oldOwner)
|
||||
local planetName = planet.Get_Type().Get_Name()
|
||||
|
||||
DebugMessage("%s -- %s changed control from %s to %s.", tostring(Script), planetName,
|
||||
oldOwner.Get_Name(), newOwner.Get_Name())
|
||||
end
|
||||
|
||||
---This event is called when a hero is neutralized by another hero in galactic mode.
|
||||
---@param heroType table FoC GameObjectTypeWrapper object for the neutralized hero type.
|
||||
---@param killer table FoC GameObjectWrapper object that killed the hero.
|
||||
function Galactic_Neutralized_Event(heroType, killer)
|
||||
DebugMessage("%s -- Hero %s killed by %s.", tostring(Script), heroType.Get_Name(), killer.Get_Owner().Get_Name())
|
||||
end
|
||||
|
||||
--- ==================================================
|
||||
--- Engine Callbacks
|
||||
--- ==================================================
|
||||
|
||||
---Returns the number of frags by player for the given object type.
|
||||
---@param objectType table FoC GameObjectTypeWrapper object to query.
|
||||
---@param player table FoC PlayerWrapper object to query.
|
||||
---@return integer
|
||||
function Get_Frag_Count_For_Type(objectType, player)
|
||||
return 0
|
||||
end
|
||||
|
||||
---Returns the number of heroes neutralized by player for the given object type.
|
||||
---@param objectType table FoC GameObjectTypeWrapper object to query.
|
||||
---@param player table FoC PlayerWrapper object to query.
|
||||
---@return integer
|
||||
function Get_Neutralized_Count_For_Type(objectType, player)
|
||||
return 0
|
||||
end
|
||||
|
||||
---Returns a game stat for the provided control ID.
|
||||
---@param player table FoC PlayerWrapper object to query.
|
||||
---@param controlId string The Control ID.
|
||||
---@param isTactical boolean Whether the game mode was a tactical mode.
|
||||
---@return number|string
|
||||
function Get_Game_Stat_For_Control_ID(player, controlId, isTactical)
|
||||
DebugMessage("%s -- In Get_Game_Stat_For_Control_ID for %s, Control %s, %s", tostring(Script), player.Get_Name(),
|
||||
controlId, isTactical and "Tactical" or "Galactic")
|
||||
|
||||
if StringCompare(controlId, "IDC_MILITARY_EFFICIENCY_STATIC") then
|
||||
|
||||
elseif StringCompare(controlId, "IDC_CONQUEST_EFFICIENCY_STATIC") then
|
||||
|
||||
elseif StringCompare(controlId, "IDC_KILL_EFFICIENCY_STATIC") then
|
||||
|
||||
elseif StringCompare(controlId, "IDC_YOUR_LOSS_VAL_STATIC") then
|
||||
|
||||
elseif StringCompare(controlId, "IDC_ENEMY_LOSS_VAL_STATIC") then
|
||||
|
||||
elseif StringCompare(controlId, "IDC_TITLE_STATIC") then
|
||||
|
||||
else
|
||||
DebugMessage("%s -- Unknown Control ID: %s", tostring(Script), controlId)
|
||||
end
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
---Returns the current Player ID winner by score.
|
||||
---@return integer Player ID
|
||||
function Get_Current_Winner_By_Score()
|
||||
return 0
|
||||
end
|
||||
|
||||
--- ==================================================
|
||||
--- Engine Callbacks for GameSpy [deprecated]
|
||||
--- ==================================================
|
||||
|
||||
---Updates the GameSpy game stats table.
|
||||
---@deprecated
|
||||
function Update_GameSpy_Game_Stats()
|
||||
GameSpy_Game_Stats = {}
|
||||
end
|
||||
|
||||
---Updates the GameSpy player stats table
|
||||
---@param player table FoC PlayerWrapper object.
|
||||
function Update_GameSpy_Player_Stats(player)
|
||||
GameSpy_Player_Stats = {}
|
||||
end
|
||||
|
||||
--- ==================================================
|
||||
--- Galactic Functions
|
||||
--- ==================================================
|
||||
|
||||
---Initializes Galactic mode.
|
||||
function Init_Galactic()
|
||||
DebugMessage("%s -- Initializing Galactic rules.", tostring(Script))
|
||||
Reset_Stats()
|
||||
GalacticGame = GalacticGameClass:New()
|
||||
end
|
||||
|
||||
---Resets Galactic mode.
|
||||
function Reset_Galactic()
|
||||
DebugMessage("%s -- Resetting Galactic rules.", tostring(Script))
|
||||
Reset_Stats()
|
||||
GalacticGame = nil
|
||||
end
|
||||
|
||||
--- ==================================================
|
||||
--- Tactical Functions
|
||||
--- ==================================================
|
||||
|
||||
---Initializes Tactical mode.
|
||||
---@param gameMode string The tactical game mode.
|
||||
function Init_Tactical(gameMode)
|
||||
DebugMessage("%s -- Initializing Tactical %s rules.", tostring(Script), gameMode)
|
||||
Reset_Tactical_Stats()
|
||||
TacticalGame = TacticalGameClass:New(gameMode)
|
||||
GUIManager:InitTactical(TacticalGame)
|
||||
end
|
||||
|
||||
---Resets Tactica mode.
|
||||
function Reset_Tactical()
|
||||
DebugMessage("%s -- Resetting Tactical rules.", tostring(Script))
|
||||
Reset_Tactical_Stats()
|
||||
TacticalGame = nil
|
||||
GUIManager:Reset()
|
||||
end
|
||||
|
||||
--- ==================================================
|
||||
--- Skirmish Functions
|
||||
--- ==================================================
|
||||
|
||||
---Initializes Skirmish mode.
|
||||
---@param gameMode string The tactical game mode.
|
||||
function Init_Skirmish(gameMode)
|
||||
DebugMessage("%s -- Initializing Skirmish Tacitcal %s rules.", tostring(Script), gameMode)
|
||||
Reset_Stats()
|
||||
SkirmishGame = SkirmishGameClass:New(gameMode)
|
||||
TacticalGame = SkirmishGame.TacticalGame
|
||||
GUIManager:InitSkirmish(SkirmishGame)
|
||||
end
|
||||
|
||||
function Reset_Skirmish()
|
||||
DebugMessage("%s -- Resetting Skirmish Tactical rules.", tostring(Script))
|
||||
Reset_Stats()
|
||||
SkirmishGame = nil
|
||||
TacticalGame = nil
|
||||
GUIManager:Reset()
|
||||
end
|
||||
Reference in New Issue
Block a user