[GS] Is this Lua correct?

Lenin1870

Chieftain
Joined
Mar 16, 2013
Messages
50
Code:
local numMilitarization = 0;
local ProjectEncampmentTrainingID = GameInfo.Projects["PROJECT_ENHANCE_DISTRICT_ENCAMPMENT"].Index;

function GetPrussiaPlayer()
    if gPrussiaPlayer == nil then   
        for playerNum = 0, GameDefines.MAX_CIV_PLAYERS - 1 do
            local player = Players[playerNum];           
            if player ~= nil and PlayerConfigurations:GetCivilizationTypeName() == "CIVILIZATION_YUKINO_PRUSSIA" then
                gPrussiaPlayer = player;
                break;
            end
        end
    end
    
    return gPrussiaPlayer;
end

function PrussianUnitsLoseMilitarizationYield(iPlayer)
    local pPlayer = Players[iPlayer]; 
    local gPrussiaPlayer = GetPrussiaPlayer();
    local pPlayerUnits = pPlayer:GetUnits();
    local gPrussiaPlayerUnits = gPrussiaPlayer:GetUnits();
    if gPrussiaPlayer:IsAlive and pPlayerUnits == gPrussiaPlayerUnits then
        numMilitarization = numMilitarization - 1
    end
end
Events.UnitKilledInCombat.Add(PrussianUnitsLoseMilitarizationYield);

function PrussianUnitsGetMilitarizationYield(iPlayer)
    local pPlayer = Players[iPlayer]; 
    local gPrussiaPlayer = GetPrussiaPlayer();
    local pPlayerUnits = pPlayer:GetUnits();
    local gPrussiaPlayerUnits = gPrussiaPlayer:GetUnits();
    if gPrussiaPlayer:IsAlive and pPlayerUnits != gPrussiaPlayerUnits then
        numMilitarization = numMilitarization + 1
    end
end
Events.UnitKilledInCombat.Add(PrussianUnitsGetMilitarizationYield);

function PrussianLoyaltyLoseMilitarizationYield()
    local gPrussiaPlayer = GetPrussiaPlayer();
    local gPrussiaPlayerCitiesLoyalty = gPrussiaPlayer:GetCities():ChangeLoyalty();
    if gPrussiaPlayer:IsAlive and gPrussiaPlayerCitiesLoyalty < 0 then
        numMilitarization = numMilitarization - 1
    end
end
Events.CityLoyaltyChanged.Add(PrussianLoyaltyLoseMilitarizationYield);

function PrussianEncampmentTrainingCompleteGetMilitarizationYield()
    local gPrussiaPlayer = GetPrussiaPlayer();
    local gPrussiaPlayerCitiesProduction = gPrussiaPlayer:GetCities():GetBuildQueue();
    if gPrussiaPlayer:IsAlive and gPrussiaPlayerCitiesProduction == ProjectEncampmentTrainingID then
        numMilitarization = numMilitarization + 5
    end
end
Events.CityProductionCompleted.Add(PrussianEncampmentTrainingCompleteGetMilitarizationYield);

function PrussianDeficitLoseMilitarizationYield()
    local gPrussiaPlayer = GetPrussiaPlayer();
    local gPrussiaPlayerGoldYield = gPrussiaPlayer:GetTreasury():GetGoldYield();
    if gPrussiaPlayer:IsAlive and gPrussiaPlayerGoldYield < 0 then
        numMilitarization = numMilitarization - 1
    end
end
Events.TurnEnd.Add(PrussianDeficitLoseMilitarizationYield);

function PrussianMilitarizationBonus(iPlayer)
    local gPrussiaPlayer = GetPrussiaPlayer();
    local gPrussiaPlayerUnits = gPrussiaPlayer:GetUnits();
    local gPrussiaPlayerUnitsCombat = gPrussiaPlayerUnits:GetDamage();
    local gPrussiaPlayerUnitsExperience = gPrussiaPlayerUnits:GetExperience();
    local PrussianUnitsCombat = 0;
    local PrussianUnitsExperience = 0;
    if gPrussiaPlayer:IsAlive and gPrussiaPlayerUnits:IsCombatUnit() then
        for numMilitarization, Units in gPrussiaPlayerUnits:Members() do
            PrussianUnitsCombat = gPrussiaPlayerUnitsCombat * 0.01
            PrussianUnitsExperience = gPrussiaPlayerExperience * 0.005
            Units:ChangeDamage(PrussianUnitsCombat)
            Units:ChangeExperience(PrussianUnitsExperience)
        end
    end
end
Events.TurnEnd.Add(PrussianMilitarizationBonus);

function PrussiaOnCombat(combatResult)
    local attacker = combatResult[CombatResultParameters.ATTACKER]
    local defender = combatResult[CombatResultParameters.DEFENDER]
    PrussianKillBonus(attacker, defender)
end
Events.Combat.Add(PrussiaOnCombat)

function PrussianKillBonus(attacker, defender)
    local gPrussiaPlayer = GetPrussiaPlayer();
    local gPrussiaPlayerUnits = gPrussiaPlayer:GetUnits();
    local pPlayerAttacker = Players[attacker.ID.player];
    local pPlayerDefender = Players[defender.ID.player]; 
    local pPlayerAttackerUnit = pPlayerAttacker:GetUnits();
    local pPlayerDefenderUnit = pPlayerDefender:GetUnits();
    local PrussianEnemyUnitsKillRate = 0;
    if pPlayer.GetCivilizationTypeName() ~= "CIVILIZATION_YUKINO_PRUSSIA" then
        for i = 0, numMilitarization do
            PrussianEnemyUnitsKillRate = PrussianEnemyUnitsKillRate + 0.1
        end
        if Math.random() * 100 <= PrussianEnemyUnitsKillRate and gPrussiaPlayerUnits == pPlayerAttackerUnit then
            UnitManager.Kill(pPlayerDefenderUnit)
        elseif Math.random() * 100 <= PrussianEnemyUnitsKillRate and gPrussiaPlayerUnits == pPlayerDefenderUnit then
            UnitManager.Kill(pPlayerAttackerUnit)
        end
    end
end
 
Personally, I never trust my code reading skill, I always check with the lua.log
 
Top Bottom