Need help with hook - TeamSetEra

Craig_Sutter

Deity
Joined
Aug 13, 2002
Messages
2,773
Location
Calgary, Canada
This code is meant to spawn a settler when sweden enters a new era... could not find a working example. Onmodactivated, etc. is set properly.

error in log:

Code:
[1395416.978] Runtime Error: C:\Users\doms\Documents\My Games\Sid Meier's Civilization 5\MODS\The Viking Age for BNW (v 2)\LUA/SwedenTrait.lua:45: attempt to call field 'TeamSetEra' (a table value)
[1395416.978] Runtime Error: Error loading C:\Users\doms\Documents\My Games\Sid Meier's Civilization 5\MODS\The Viking Age for BNW (v 2)\LUA/SwedenTrait.lua.


Code:
-- Lua Script1
-- Author: Craig and Nancy
-- DateCreated: 7/23/2014 11:50:56 PM
--------------------------------------------------------------

function  SwedenSettler(teamId, eEra)

-- Set up Sweden Player

	for iPlayer=0, GameDefines.MAX_MAJOR_CIVS-1 do 

	local pSweden = Players[iPlayer]

		if (GameInfo.Civilizations.CIVILIZATION_SWEDEN.ID == pSweden:GetCivilizationType()) then
	
		Sweden = pSweden
		SwedenTeamID = Sweden:GetTeam();
		SwedenTeam= Teams[ Sweden:GetTeam() ]

		end	
	end

--Spawn Units
	
	if teamID==SwedenTeamID then
		
		if eEra>0 then

			local pCity = Sweden:GetCapitalCity()				
			if pCity then

			local pPlot = pCity:Plot();
			local Spawnunit;
			local iSpawnX = pPlot:GetX();
			local iSpawnY = pPlot:GetY();

			Spawnunit = Sweden:InitUnit(GameInfoTypes["UNIT_SETTLER"], iSpawnX, iSpawnY, UNITAI_SETTLE, DIRECTION_NORTHWEST )
			print (Sweden:GetName() ,"...is spawning settler due to Era change in...", pCity:GetName());
	
			end	
		end
	end

end
						
GameEvents.TeamSetEra(SwedenSettler);

Thank-you in advance.
 
This code is still not working. The green print statements show up, but not the red... which is bizarre since I've used that part of the function many times. The blue line is the likely culprit, although I cannot see why...

Code:
function  SwedenSettler(teamId, eEra)

local Sweden
local SwedenTeamID

[COLOR="Lime"]print("eEra = " .. eEra)[/COLOR]

	if eEra>=0 then
	[COLOR="Lime"]print("eEra confirmed at..." .. eEra)[/COLOR]

		for iPlayer=0, GameDefines.MAX_MAJOR_CIVS-1 do 

		local Sweden = Players[iPlayer]

			if (GameInfo.Civilizations.CIVILIZATION_SWEDEN.ID == Sweden:GetCivilizationType()) then
				
				local SwedenTeamID = Sweden:GetTeam()
				[COLOR="Lime"]print (Sweden:GetName() ,"...confirmed as on team");[/COLOR]

				[COLOR="RoyalBlue"]if	SwedenTeamID == teamID then[/COLOR]
						
					local pCity = Sweden:GetCapitalCity()
					local pPlot = pCity:GetCityIndexPlot();
					local Spawnunit;
					local iSpawnX = pPlot:GetX();
					local iSpawnY = pPlot:GetY();

					Spawnunit = Sweden:InitUnit(GameInfoTypes["UNIT_SETTLER"], iSpawnX, iSpawnY, UNITAI_SETTLE, DIRECTION_NORTHWEST )
					[COLOR="Red"]print (pCity:GetName() ,"...is spawning a Settler from switching eras... ");[/COLOR]

				end		
			end
		end
	end
end

GameEvents.TeamSetEra.Add(SwedenSettler);

Finally, this was in the log...

Spoiler :


[1444230.876] TurnProcessing: Hiding TurnProcessing
[1444252.856] SwedenTrait: eEra = 2
[1444252.856] SwedenTrait: eEra confirmed at...2
[1444252.856] SwedenTrait: Erik ...confirmed as on team
[1444252.872] SwedenTrait: eEra = 2
[1444252.872] SwedenTrait: eEra confirmed at...2
[1444252.872] SwedenTrait: Erik ...confirmed as on team
[1444252.888] SwedenTrait: eEra = 2
[1444252.888] SwedenTrait: eEra confirmed at...2
[1444252.888] SwedenTrait: Erik ...confirmed as on team
[1444252.888] SwedenTrait: eEra = 2
[1444252.903] SwedenTrait: eEra confirmed at...2
[1444252.903] SwedenTrait: Erik ...confirmed as on team
[1444252.903] SwedenTrait: eEra = 2
[1444252.903] SwedenTrait: eEra confirmed at...2
[1444252.903] SwedenTrait: Erik ...confirmed as on team
[1444252.919] SwedenTrait: eEra = 2
[1444252.919] SwedenTrait: eEra confirmed at...2
[1444252.919] SwedenTrait: Erik ...confirmed as on team
[1444252.919] SwedenTrait: eEra = 2
[1444252.919] SwedenTrait: eEra confirmed at...2
[1444252.934] SwedenTrait: Erik ...confirmed as on team
[1444252.934] SwedenTrait: eEra = 2
[1444252.934] SwedenTrait: eEra confirmed at...2
[1444252.934] SwedenTrait: Erik ...confirmed as on team
[1444252.950] SwedenTrait: eEra = 2
[1444252.950] SwedenTrait: eEra confirmed at...2
[1444252.950] SwedenTrait: Erik ...confirmed as on team
[1444252.950] SwedenTrait: eEra = 2
[1444252.950] SwedenTrait: eEra confirmed at...2
[1444252.950] SwedenTrait: Erik ...confirmed as on team
[1444252.966] SwedenTrait: eEra = 2
[1444252.966] SwedenTrait: eEra confirmed at...2
[1444252.966] SwedenTrait: Erik ...confirmed as on team
[1444252.981] SwedenTrait: eEra = 2
[1444252.981] SwedenTrait: eEra confirmed at...2
[1444252.981] SwedenTrait: Erik ...confirmed as on team
[1444252.981] SwedenTrait: eEra = 2
[1444252.981] SwedenTrait: eEra confirmed at...2
[1444252.981] SwedenTrait: Erik ...confirmed as on team
[1444252.997] SwedenTrait: eEra = 2
[1444252.997] SwedenTrait: eEra confirmed at...2
[1444252.997] SwedenTrait: Erik ...confirmed as on team
[1444252.997] SwedenTrait: eEra = 2
[1444253.012] SwedenTrait: eEra confirmed at...2
[1444253.012] SwedenTrait: Erik ...confirmed as on team
[1444253.012] SwedenTrait: eEra = 2
[1444253.012] SwedenTrait: eEra confirmed at...2
[1444253.012] SwedenTrait: Erik ...confirmed as on team
[1444253.028] SwedenTrait: eEra = 2
[1444253.028] SwedenTrait: eEra confirmed at...2
[1444253.028] SwedenTrait: Erik ...confirmed as on team
[1444253.028] SwedenTrait: eEra = 2
[1444253.044] SwedenTrait: eEra confirmed at...2
[1444253.044] SwedenTrait: Erik ...confirmed as on team
[1444253.044] SwedenTrait: eEra = 2
[1444253.044] SwedenTrait: eEra confirmed at...2
[1444253.059] SwedenTrait: Erik ...confirmed as on team
[1444253.059] SwedenTrait: eEra = 2
[1444253.059] SwedenTrait: eEra confirmed at...2
[1444253.059] SwedenTrait: Erik ...confirmed as on team
[1444253.059] SwedenTrait: eEra = 2
[1444253.075] SwedenTrait: eEra confirmed at...2
[1444253.075] SwedenTrait: Erik ...confirmed as on team
[1444253.075] SwedenTrait: eEra = 2
[1444253.075] SwedenTrait: eEra confirmed at...2
[1444253.075] SwedenTrait: Erik ...confirmed as on team
[1444253.090] SwedenTrait: eEra = 2
[1444253.090] SwedenTrait: eEra confirmed at...2
[1444253.090] SwedenTrait: Erik ...confirmed as on team
[1444253.090] SwedenTrait: eEra = 2
[1444253.090] SwedenTrait: eEra confirmed at...2
[1444253.090] SwedenTrait: Erik ...confirmed as on team
[1444253.106] SwedenTrait: eEra = 2
[1444253.106] SwedenTrait: eEra confirmed at...2
[1444253.106] SwedenTrait: Erik ...confirmed as on team
[1444253.106] SwedenTrait: eEra = 2
[1444253.106] SwedenTrait: eEra confirmed at...2
[1444253.122] SwedenTrait: Erik ...confirmed as on team
[1444253.122] SwedenTrait: eEra = 2
[1444253.122] SwedenTrait: eEra confirmed at...2
[1444253.122] SwedenTrait: Erik ...confirmed as on team
[1444253.122] SwedenTrait: eEra = 2
[1444253.137] SwedenTrait: eEra confirmed at...2
[1444253.137] SwedenTrait: Erik ...confirmed as on team
[1444253.137] SwedenTrait: eEra = 2
[1444253.137] SwedenTrait: eEra confirmed at...2
[1444253.137] SwedenTrait: Erik ...confirmed as on team
[1444253.153] SwedenTrait: eEra = 2
[1444253.153] SwedenTrait: eEra confirmed at...2
[1444253.153] SwedenTrait: Erik ...confirmed as on team
[1444253.153] SwedenTrait: eEra = 2
[1444253.153] SwedenTrait: eEra confirmed at...2
[1444253.153] SwedenTrait: Erik ...confirmed as on team
[1444253.168] SwedenTrait: eEra = 2
[1444253.168] SwedenTrait: eEra confirmed at...2
[1444253.168] SwedenTrait: Erik ...confirmed as on team
[1444253.168] SwedenTrait: eEra = 2
[1444253.168] SwedenTrait: eEra confirmed at...2
[1444253.184] SwedenTrait: Erik ...confirmed as on team
[1444253.184] SwedenTrait: eEra = 2
[1444253.184] SwedenTrait: eEra confirmed at...2
[1444253.184] SwedenTrait: Erik ...confirmed as on team
[1444253.184] SwedenTrait: eEra = 2
[1444253.200] SwedenTrait: eEra confirmed at...2
[1444253.200] SwedenTrait: Erik ...confirmed as on team
[1444253.200] SwedenTrait: eEra = 2
[1444253.200] SwedenTrait: eEra confirmed at...2
[1444253.200] SwedenTrait: Erik ...confirmed as on team
[1444253.215] SwedenTrait: eEra = 2
[1444253.215] SwedenTrait: eEra confirmed at...2
[1444253.215] SwedenTrait: Erik ...confirmed as on team
[1444253.215] SwedenTrait: eEra = 2
[1444253.215] SwedenTrait: eEra confirmed at...2
[1444253.215] SwedenTrait: Erik ...confirmed as on team
[1444253.231] SwedenTrait: eEra = 2
[1444253.231] SwedenTrait: eEra confirmed at...2
[1444253.231] SwedenTrait: Erik ...confirmed as on team
[1444253.231] SwedenTrait: eEra = 2
[1444253.246] SwedenTrait: eEra confirmed at...2
[1444253.246] SwedenTrait: Erik ...confirmed as on team
[1444253.246] SwedenTrait: eEra = 2
[1444253.246] SwedenTrait: eEra confirmed at...2
[1444253.246] SwedenTrait: Erik ...confirmed as on team
[1444253.262] SwedenTrait: eEra = 2
[1444253.262] SwedenTrait: eEra confirmed at...2
[1444253.262] SwedenTrait: Erik ...confirmed as on team
[1444253.262] SwedenTrait: eEra = 2
[1444253.262] SwedenTrait: eEra confirmed at...2
[1444253.262] SwedenTrait: Erik ...confirmed as on team
[1444253.278] SwedenTrait: eEra = 2
[1444253.278] SwedenTrait: eEra confirmed at...2
[1444253.278] SwedenTrait: Erik ...confirmed as on team
[1444253.278] SwedenTrait: eEra = 2
[1444253.278] SwedenTrait: eEra confirmed at...2
[1444253.293] SwedenTrait: Erik ...confirmed as on team
[1444253.293] SwedenTrait: eEra = 2
[1444253.293] SwedenTrait: eEra confirmed at...2
[1444253.293] SwedenTrait: Erik ...confirmed as on team
[1444253.293] SwedenTrait: eEra = 2
[1444253.309] SwedenTrait: eEra confirmed at...2
[1444253.309] SwedenTrait: Erik ...confirmed as on team
[1444253.309] SwedenTrait: eEra = 2
[1444253.309] SwedenTrait: eEra confirmed at...2
[1444253.309] SwedenTrait: Erik ...confirmed as on team
[1444253.325] SwedenTrait: eEra = 2
[1444253.325] SwedenTrait: eEra confirmed at...2
[1444253.325] SwedenTrait: Erik ...confirmed as on team
[1444253.325] SwedenTrait: eEra = 2
[1444253.325] SwedenTrait: eEra confirmed at...2
[1444253.325] SwedenTrait: Erik ...confirmed as on team
[1444253.340] SwedenTrait: eEra = 2
[1444253.340] SwedenTrait: eEra confirmed at...2
[1444253.340] SwedenTrait: Erik ...confirmed as on team
[1444253.340] SwedenTrait: eEra = 2
[1444253.340] SwedenTrait: eEra confirmed at...2
[1444253.356] SwedenTrait: Erik ...confirmed as on team
[1444253.356] SwedenTrait: eEra = 2
[1444253.356] SwedenTrait: eEra confirmed at...2
[1444253.356] SwedenTrait: Erik ...confirmed as on team
[1444253.356] SwedenTrait: eEra = 2
[1444253.371] SwedenTrait: eEra confirmed at...2
[1444253.371] SwedenTrait: Erik ...confirmed as on team
[1444253.371] SwedenTrait: eEra = 2
[1444253.371] SwedenTrait: eEra confirmed at...2
[1444253.371] SwedenTrait: Erik ...confirmed as on team
[1444253.387] SwedenTrait: eEra = 2
[1444253.387] SwedenTrait: eEra confirmed at...2
[1444253.387] SwedenTrait: Erik ...confirmed as on team
[1444253.387] SwedenTrait: eEra = 2
[1444253.387] SwedenTrait: eEra confirmed at...2
[1444253.387] SwedenTrait: Erik ...confirmed as on team
[1444253.403] SwedenTrait: eEra = 2
[1444253.403] SwedenTrait: eEra confirmed at...2
[1444253.403] SwedenTrait: Erik ...confirmed as on team
[1444328.829] SwedenTrait: eEra = 2
[1444328.829] SwedenTrait: eEra confirmed at...2
[1444328.829] SwedenTrait: Erik ...confirmed as on team
[1444328.845] Autoplay: Turn... 5

 
Code:
local iSwedenID = GameInfoTypes.CIVILIZATION_SWEDEN

function SwedenSettler(teamId, eEra)
	--if eEra > 0 then
		--print("eEra confirmed at..." .. eEra)
		for iPlayer = 0, GameDefines.MAX_MAJOR_CIVS - 1, 1 do
			if (Players[iPlayer] ~= nil) then
				if (Players[iPlayer]:GetTeam() == teamId) then
					if Players[iPlayer]:GetCivilizationType() == iSwedenID then
						local pPlayer = Players[iPlayer]
						print (pPlayer:GetName() .. " ...confirmed as on team " .. teamId);
						if pPlayer:GetNumCities() > 0 then
							pPlayer:InitUnit(GameInfoTypes["UNIT_SETTLER"], pPlayer:GetCapitalCity():GetX(), pPlayer:GetCapitalCity():GetY())
							print (pPlayer:GetCapitalCity():GetName() .. " ...is spawning a Settler from switching eras...");
						else
							print ("player has no capital city to spawn a settler in");
						end
						return
					end
				end
			end
		end
	--end
end
GameEvents.TeamSetEra.Add(SwedenSettler)
  1. eEra is always going to meet the ">=" condition so there is no real need for that conditional within the code. I commented-out the conditional-check for ">" in the code shown, along with its required "end" and the print statement to go along with it. Taking the comments out would make the player only get the free settler at the Classical and higher eras.
  2. The code as presented 'caches' the ID# of CIVILIZATION_SWEDEN at game loading, though for the TeamSetEra hook doing so probably won't save much processing time since TeamSetEra simply doesn't fire all that often.
  3. I think the code as you had it had problems with localization issues of variables, multiple re-creation of the same variable-names, etc.
    • Each statement of
      Code:
      local iPizzaParlor = xyz
      creates a new local variable for that "level" of the function with a variable name of iPizzaParlor.
    • manipulation of this new deeper-level variable called iPizzaParlor within the scope of the new deeper-level of the function does not pass the change in the data within iPizzaParlor back up the chain in levels to the previous "higher-up" level of the function.
    • in order to get updates and changes to data held within a variable to be "passed back up the chain" to a higher level of the function, it is necessary to set the name of the variable at the outset of the function before any "if", "for", "while", etc., blocks of code:
      Code:
      function PizzaHandler(iPlayer)
      	local iPizzaParlor = false
      	if Players[iPlayer]:GetCivilizationType() == GameInfoTypes.CIVILIZATION_PIZZASHACK then
      		iPizzaParlor = true
      	end
      	if iPizzaParlor == true then
      		print("Yum!!")
      	else print("But I am hungry!")
      	end
      end
      Note that in the example I did not anywhere restate
      Code:
      local iPizzaParlor =
      I instead simply referenced to the existing local variable name that was first created at the highest level of the function's "food chain".
 
Back
Top Bottom