-- Building Processed
function QuestScript.OnBuildingProcessed(playerID, buildingID, cityID, buildingAdded)
if QuestScript.PersistentData.PlayerTriggerTables[playerID] ~= nil then
local buildTableData = nil;
for buildingTableID, buildingTableRow in ipairs(QuestScript.PersistentData.PlayerTriggerTables[playerID]) do
if(buildingTableRow.BuildingID == buildingID) then
buildTableData = buildingTableRow;
break;
end
end
if buildTableData ~= nil then
-- data already exists, increment or decrement depending on whether the building is being added or removed
if buildingAdded then
buildTableData.TriggerChance = buildTableData.TriggerChance + TRIGGER_CHANCE;
else
buildTableData.TriggerChance = buildTableData.TriggerChance - TRIGGER_CHANCE;
end
else
-- first building of its class, set base table data
local newTableData = {};
newTableData.TriggerChance = TRIGGER_CHANCE;
newTableData.QuestStarted = false;
newTableData.BuildingID= buildingID;
table.insert(QuestScript.PersistentData.PlayerTriggerTables[playerID], newTableData);
end
else
-- no player table for some reason
error(string.format("No table for player %s in PlayerTriggerTables", playerID));
end
end
GameEvents.BuildingProcessed.Add(QuestScript.OnBuildingProcessed);
-- Active Player Turn Start
function QuestScript.OnPlayerDoTurn(playerID)
--print("QuestScript.OnPlayerDoTurn player " .. playerID);
if QuestScript.PersistentData.PlayerTriggerTables[playerID] ~= nil then
for i, buildingTable in ipairs(QuestScript.PersistentData.PlayerTriggerTables[playerID]) do
-- Only check buildings that have entries in the BUILDING_CHOICES_TABLE
if BUILDING_CHOICES_TABLE[buildingTable.BuildingID] ~= nil then
if buildingTable.QuestStarted == false and buildingTable.TriggerChance > 0 then
print("Rolling to start quest for Building: " .. tostring(GameInfo.Buildings[buildingTable.BuildingID].Type));
local roll = Game.Rand(100, "Building Quest Trigger: player " .. playerID .. " BuildID " .. buildingTable.BuildingID);
if (roll <= buildingTable.TriggerChance) then
buildingTable.QuestStarted = true;
StartQuest(playerID, QuestScript.Info.ID, buildingTable.BuildingID);
return;
end
end
end
end
end
end
GameEvents.PlayerDoTurn.Add(QuestScript.OnPlayerDoTurn);