local maxCall = 50
local seen = {}
function dump(t,i)
seen[t]=true
local s={}
local n=0
for k, v in pairs(t) do
print(i,k, v)
if type(v)=="table" and not seen[v] then
dump(v,i.."\t\t")
end
end
end
function getEventArguments(...)
local args = {...}
if args then
print("---------------------------------------------------------------------------------- Start <")
print("num arguments = " .. #args)
print(unpack({...}))
for i = 1, #args do
if type(args[i])== "table" then
print("--------------- "..tostring(args[i]).." ---------------");
dump(args[i], "");
print();
end
end
print("------------------------------------------------------------------------------------ End >");
print();
else
print("---------------------------------------------------------------------------------- Start <")
print("No arguments...")
print("------------------------------------------------------------------------------------ End >");
print();
end
end
local eventslist = {
-- GameCoreEvent
"AnarchyBegins",
"AnarchyEnds",
"BeliefAdded",
"BuildingAddedToMap",
"BuildingChanged",
"BuildingRemovedFromMap",
"CapitalCityChanged",
"CityAddedToMap",
"CityCommandStarted",
"CityDefenseStatusChanged",
"CityFocusChanged",
"CityInitialized",
"CityLiberated",
"CityMadePurchase",
"CityPopulationChanged",
"CityProductionChanged",
"CityProductionCompleted",
"CityProductionUpdated",
"CityProjectCompleted",
"CityReligionChanged",
"CityReligionFollowersChanged",
"CityRemovedFromMap",
"CitySiegeStatusChanged",
"CityTileOwnershipChanged",
"CityUnitsChanged",
"CityVisibilityChanged",
"CityWorkerChanged",
"CivicBoostTriggered",
"CivicChanged",
"CivicCompleted",
"CivicQueueChanged",
"CivicsUnlocked",
"Combat",
"CultureChanged",
"CultureYieldChanged",
"DiplomacyDealEnacted",
"DiplomacyDealExpired",
"DiplomacyDeclareWar",
"DiplomacyIncomingDeal",
"DiplomacyMakePeace",
"DiplomacyMeet",
"DiplomacyMeetMajorMinor",
"DiplomacyMeetMajors",
"DiplomacyRefusePeace",
"DiplomacyRelationshipChanged",
"DiplomacySessionClosed",
"DiplomacyStatement",
"DistrictAddedToMap",
"DistrictBuildProgressChanged",
"DistrictCombatChanged",
"DistrictDamageChanged",
"DistrictPillaged",
"DistrictRemovedFromMap",
"DistrictUnitsChanged",
"DistrictVisibilityChanged",
"EndTurnBlockingChanged",
"EndTurnDirty",
"FaithChanged",
"FeatureAddedToMap",
"FeatureChanged",
"FeatureRemovedFromMap",
"GoodyHutReward",
"GovernmentChanged",
"GovernmentPolicyChanged",
"GovernmentPolicyObsoleted",
"GreatPeoplePointsChanged",
"GreatPeopleTimelineChanged",
"GreatWorkCreated",
"GreatWorkMoved",
"ImprovementActivated",
"ImprovementAddedToMap",
"ImprovementChanged",
"ImprovementOwnershipChanged",
"ImprovementRemovedFromMap",
"ImprovementVisibilityChanged",
"InfluenceChanged",
"InfluenceGiven",
"LevyCounterChanged",
"LocalPlayerChanged",
"LocalPlayerTurnBegin",
"LocalPlayerTurnEnd",
"MapYieldsChanged",
"NationalParkAdded",
"NaturalWonderRevealed",
"NotificationAdded",
"NotificationDismissed",
"NotificationRefreshRequested",
"ObjectPairing",
"OnAiAdvisorUpdated",
"PantheonFounded",
"PhaseBegin",
"PhaseEnd",
"PlayerBordersChanged",
"PlayerDefeat",
"PlayerDestroyed",
"PlayerEraChanged",
"PlayerOperationComplete",
"PlayerTurnActivated",
"PlayerTurnDeactivated",
--"PlayerVictory",
"PlotMarkerChanged",
"PlotVisibilityChanged",
"PlotYieldChanged",
"QuestChanged",
"ReligionFounded",
"RemotePlayerTurnBegin",
"RemotePlayerTurnEnd",
"ResearchChanged",
"ResearchCompleted",
"ResearchQueueChanged",
"ResearchYieldChanged",
"ResourceAddedToMap",
"ResourceChanged",
"ResourceRemovedFromMap",
"ResourceVisibilityChanged",
"RouteAddedToMap",
"RouteChanged",
"RouteRemovedFromMap",
"SpyAdded",
"SpyMissionUpdated",
"SpyRemoved",
"SpyUpdated",
"StatusMessage",
"TeamVictory",
"TechBoostTriggered",
"TerrainTypeChanged",
"TradeRouteActivityChanged",
"TradeRouteAddedToMap",
"TradeRouteCapacityChanged",
"TradeRouteRangeChanged",
"TradeRouteRemovedFromMap",
"TreasuryChanged",
"TurnBegin",
"TurnEnd",
"UnitActivityChanged",
"UnitAddedToMap",
"UnitAirlifted",
"UnitArtifactChanged",
"UnitCaptured",
"UnitChargesChanged",
"UnitCommandStarted",
"UnitDamageChanged",
"UnitEmbarkedStateChanged",
"UnitEnterFormation",
"UnitExitFormation",
"UnitFormArmy",
"UnitFormCorps",
"UnitFortificationChanged",
"UnitGreatPersonActivated",
"UnitGreatPersonChanged",
"UnitGreatPersonCreated",
"UnitKilledInCombat",
"UnitMoveComplete",
"UnitMoved",
"UnitMovementPointsChanged",
"UnitMovementPointsCleared",
"UnitMovementPointsRestored",
"UnitOperationAdded",
"UnitOperationDeactivated",
"UnitOperationSegmentComplete",
"UnitOperationStarted",
"UnitOperationsCleared",
"UnitPromoted",
"UnitPromotionAvailable",
"UnitRemovedFromMap",
"UnitTeleported",
"UnitUpgraded",
"UnitVisibilityChanged",
"WMDCountChanged",
"WMDDetonated",
"WMDFalloutChanged",
"WMDFalloutVisibilityChanged",
"WonderCompleted",
"WorldTextMessage",
-- LocalMachineEvent
"ARXOrientationChanged",
"ARXTap",
"AchievementProgress",
"AchievementUnlocked",
"Begin2KLoginProcess",
"BeginGameView",
"BeginMy2KLinkAccountProcess",
"BeginWonderReveal",
"Camera_Updated",
"CloudGameInfoUpdated",
"CloudGameJoinResponse",
"CloudGameListUpdated",
"EndGameView",
"EndWonderReveal",
"ExitToMainMenu",
"FiraxisLiveActivate",
"FrontEndPopup",
"GameConfigChanged",
"HideLeaderScreen",
"InputActionTriggered",
"InputGestureRecorded",
"LeaderAnimationChanged",
"LeaderAnimationComplete",
"LeaderScreenFinishedLoading",
"LeaveGameComplete",
"ModStatusUpdated",
"MultiplayerChat",
"MultiplayerGameAbandoned",
"MultiplayerGameLastPlayer",
"MultiplayerGameListClear",
"MultiplayerGameListComplete",
"MultiplayerGameListUpdated",
"MultiplayerHostMigrated",
"MultiplayerJoinGameComplete",
"MultiplayerJoinRoomAttempt",
"MultiplayerJoinRoomComplete",
"MultiplayerJoinRoomFailed",
"MultiplayerPingTimesChanged",
"MultiplayerPlayerConnected",
"MultiplayerPostPlayerDisconnected",
"MultiplayerPrePlayerDisconnected",
"MultiplayerSnapshotProcessed",
"My2KActivate",
"My2KLinkAccountResult",
"OptionChangeRequiresAppRestart",
"OptionChangeRequiresGameRestart",
"OptionChangeRequiresResolutionAck",
"OptionChanged",
"OptionsReset",
"OptionsReverted",
"OptionsSaved",
"PlayerInfoChanged",
"ShowLeaderScreen",
"SteamFriendsPresenceUpdated",
"SteamFriendsStatusUpdated",
"SteamServersConnected",
"SteamServersDisconnected",
"TurnTimerUpdated",
"UpdateGraphicsOptions",
"UserAcceptsEULA",
"UserAcceptsOutdatedDriver",
"UserAcceptsUnknownDevice",
"UserConfirmedClose",
"UserRequestClose",
"WorldRenderViewChanged",
-- SequenceEvent
"AppInitComplete",
"GameViewStateDone",
"LoadGameViewStateDone",
"LoadScreenClose",
"LoadScreenContentReady",
"MainMenuStateDone",
-- SerialEvent
"AfterGameplayContentChange",
"AfterGameplayContentConfigure",
"AllCitiesDeselected",
"AllDistrictsDeselected",
"AllUnitsDeselected",
"AutomationTestComplete",
"BeforeGameplayContentChange",
"BeforeGameplayContentConfigure",
"BeforeMultiplayerInviteProcessing",
"CitySelectionChanged",
"CombatVisBegin",
"CombatVisEnd",
"CycleUnitSelectionRequest",
"DemoExit",
"DemoTurnLimitReached",
"DistrictSelectionChanged",
"FinishedGameplayContentChange",
"FinishedGameplayContentConfigure",
"GameConfigurationParameterChanged",
"GameConfigurationRebuilt",
"GameConfigurationResolved",
"GameCoreEventPlaybackComplete",
"GameCoreEventPublishComplete",
"InterfaceModeChanged",
"LensFocusHex",
"LensLayerOff",
"LensLayerOn",
"LensUnFocusHex",
"LoadCanceled",
"LoadComplete",
"MapMaxMajorPlayersChanged",
"MultiplayerGameInvite",
"MultiplayerGameLaunched",
"PreTurnBegin",
"RequestLoad",
"RequestSave",
"SaveCanceled",
"SaveComplete",
"SubscriptionDownloadStatus",
"UnitSelectionChanged",
"UnitSimPositionChanged",
"UserOptionChanged",
"VisualStateRestored",
-- UIEvent
"DragCamera",
"SystemUpdateUI",
-- New
}
local gameEventsList = {
"CityBuilt",
"CityConquered",
"OnCityPopulationChanged",
"OnFaithEarned",
"OnGameTurnStarted",
"OnGreatPersonActivated",
"OnNewMajorityReligion",
"OnPillage",
"OnUnitRetreated",
"PlayerTurnStartComplete",
"PlayerTurnStarted",
}
local numCall = {}
local eventsFunctions = {}
for i, eventName in ipairs(eventslist) do
print("Adding Listen to Events." .. eventName)
numCall[eventName] = 0
eventsFunctions[eventName] = function (...) if numCall[eventName] < maxCall then print("-- Events."..eventName); getEventArguments(...); numCall[eventName] = numCall[eventName] + 1; else Events[eventName].Remove( eventsFunctions[eventName] ) end; end;
Events[eventName].RemoveAll() -- remove previous listener when running the code again...
Events[eventName].Add( eventsFunctions[eventName] )
end
for i, eventName in ipairs(gameEventsList) do
print("Adding Listen to GameEvents." .. eventName)
numCall[eventName] = 0
eventsFunctions[eventName] = function (...) if numCall[eventName] < maxCall then print("-- GameEvents."..eventName); getEventArguments(...); numCall[eventName] = numCall[eventName] + 1; else GameEvents[eventName].Remove( eventsFunctions[eventName] ) end; end;
GameEvents[eventName].RemoveAll()
GameEvents[eventName].Add( eventsFunctions[eventName] )
end