function Operation.GetStolenTech(agent)
local player = Players[agent:GetOwner()];
local defendingPlayer = Players[agent:GetCity():GetOwner()]
local availableTechs = player:GetAllAvailableTechs();
local operationTurns = GetOperationTurns(agent:GetOwner(), agent:GetIndex(), Operation.Info.ID);
local defendingPlayerDominantAffinity = defendingPlayer:GetDominantAffinityType();
local weightFunc = function(techType)
local weight = 0;
if (player:CanResearch(techType)) then
local techInfo = GameInfo.Technologies[techType]
local turnsToResearchTech = player:GetResearchTurnsLeft(techType, true);
weight = techInfo.Cost;
if (turnsToResearchTech >= operationTurns) then
weight = weight / 2;
else
weight = weight * 2;
end
if (defendingPlayerDominantAffinity ~= -1) then
local techAffinityValue = Game.GetTechAffinityValue(techType, defendingPlayerDominantAffinity);
if (techAffinityValue > 0) then
weight = weight * 1.5;
end
end
end
return weight;
end
return GameplayUtilities.GetRandomRewardTech(availableTechs, weightFunc);
end