Author: jtn Date: Mon Nov 17 11:34:22 2014 New Revision: 27065 URL: http://svn.gna.org/viewcvs/freeciv?rev=27065&view=rev Log: Prevent teams getting multiplayer Philosophy bonus multiple times with team_pooled_research.
See gna bug #22782. Modified: branches/S2_5/data/multiplayer/script.lua Modified: branches/S2_5/data/multiplayer/script.lua URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_5/data/multiplayer/script.lua?rev=27065&r1=27064&r2=27065&view=diff ============================================================================== --- branches/S2_5/data/multiplayer/script.lua (original) +++ branches/S2_5/data/multiplayer/script.lua Mon Nov 17 11:34:22 2014 @@ -60,6 +60,24 @@ signal.connect("building_built", "building_built_handler") +-- Hack: record which players already got Philosophy, to avoid +-- teams getting it multiple times with team_pooled_research. +-- Stored as a string as this is a type simple enough to be included +-- in savefiles. +-- (It`s probably not necessary to test for existence as savefile +-- data is loaded after this script is executed.) +if philo_players == nil then + philo_players = "" +end + +-- Record that a player got Philosophy in our hacky string. +function record_philo(player) + local pos = player.id + 1 + philo_players = string.sub(philo_players, 1, pos-1) .. + string.rep(" ", math.max(0, pos - 1 - #philo_players)) .. + "." .. string.sub(philo_players, pos+1) +end + -- Grant one tech when the tech Philosophy is researched. function tech_researched_handler(tech, player, how) local id @@ -72,6 +90,19 @@ id = tech.id if id == find.tech_type("Philosophy").id and how == "researched" then + + -- Check potential teammates. + for p in players_iterate() do + if player:shares_research(p) + and string.sub(philo_players, p.id+1, p.id+1) == "." then + -- Another player in the same team already got Philosophy. + record_philo(player) + return + end + end + + record_philo(player) + -- Give the player a free advance. -- This will give a free advance for each player that shares research. gained = player:give_technology(nil, "researched") _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits