[NFP] About my functions using combat event

Lenin1870

Chieftain
Joined
Mar 16, 2013
Messages
50
Code:
function pPlayerMilitarizationBonus(attacker, defender)
    local tAttackerID = attacker[CombatResultParameters.ID];
    local pAttackingPlayerConfig = PlayerConfigurations[tAttackerID.player];
    local tDefenderID = defender[CombatResultParameters.ID];
    local pDefendingPlayerConfig = PlayerConfigurations[tDefenderID.player];
    local iAttackerCombatStrength = attacker[CombatResultParameters.COMBAT_STRENGTH];
    local iDefenderCombatStrength = defender[CombatResultParameters.COMBAT_STRENGTH];
    local iAttackerBonus = attacker[CombatResultParameters.STRENGTH_MODIFIER];
    local iDefenderBonus = defender[CombatResultParameters.STRENGTH_MODIFIER];
    local iAttackerUnitBonus = GetMilitarizationBalance(tAttackerID.player);
    local iDefenderUnitBonus = GetMilitarizationBalance(tDefenderID.player);

    if (pAttackingPlayerConfig:GetCivilizationTypeName() == "CIVILIZATION_GERMANY") then
        iAttackerBonus = iAttackerCombatStrength + (0.01 * iAttackerCombatStrength * iAttackerUnitBonus)
        print("Prussian attacker bonus")
    elseif (pDefendingPlayerConfig:GetCivilizationTypeName() == "CIVILIZATION_GERMANY") then
        iDefenderBonus = iDefenderCombatStrength + (0.01 * iDefenderCombatStrength * iDefenderUnitBonus)
        print("Prussian defender bonus")
    end
end
----------------------------------------------------------------------------------------------------------------------------
function pPlayerRestoreBonus(attacker, defender)
    local tAttackerID = attacker[CombatResultParameters.ID];
    local pAttackingPlayerConfig = PlayerConfigurations[tAttackerID.player];
    local tDefenderID = defender[CombatResultParameters.ID];
    local pDefendingPlayerConfig = PlayerConfigurations[tDefenderID.player];
    local iAttackerUnitBonus = GetMilitarizationBalance(tAttackerID.player);
    local iDefenderUnitBonus = GetMilitarizationBalance(tDefenderID.player);

    if (pAttackingPlayerConfig:GetCivilizationTypeName() == "CIVILIZATION_GERMANY") then
        local pPlayerEnemyUnitsKillRate = 0.5 * iAttackerUnitBonus
        if (100 * math.random() <= pPlayerEnemyUnitsRestoreRate) then
            UnitManager.RestoreMovement()
            UnitManager.RestoreUnitAttacks()
            print("Restore movement & attack chance of Prussian attacker!")
        end
    elseif (pDefendingPlayerConfig:GetCivilizationTypeName() == "CIVILIZATION_GERMANY") then
        local pPlayerEnemyUnitsKillRate = 0.5 * iDefenderUnitBonus
        if (100 * math.random() <= pPlayerEnemyUnitsRestoreRate) then
             UnitManager.RestoreMovement()
            UnitManager.RestoreUnitAttacks()
            print("Restore movement & attack chance of Prussian defender!")
        end
    end
end
----------------------------------------------------------------------------------------------------------------------------
function pPlayerKillBonus(attacker, defender)
    local tAttackerID = attacker[CombatResultParameters.ID];
    local pAttackingPlayer = Players[tAttackerID.player];
    local pAttackingPlayerConfig = PlayerConfigurations[tAttackerID.player];
    local pAttackingPlayerUnits = pAttackingPlayer:GetUnits();
    local iAttackerUnitBonus = GetMilitarizationBalance(tAttackerID.player);
    local tDefenderID = defender[CombatResultParameters.ID];
    local pDefendingPlayer = Players[tDefenderID.player];
    local pDefendingPlayerConfig = PlayerConfigurations[tDefenderID.player];
    local pDefendingPlayerUnits = pDefendingPlayer:GetUnits();
    local iDefenderUnitBonus = GetMilitarizationBalance(tDefenderID.player);

    if (pAttackingPlayerConfig:GetCivilizationTypeName() == "CIVILIZATION_GERMANY") then
        local pkAttacker = UnitManager.GetUnit(tAttackerID.player);
        local pPlayerEnemyUnitsKillRate = 0.1 * iAttackerUnitBonus
        if (100 * math.random() <= pPlayerEnemyUnitsKillRate) then
            for i, pDefendingPlayerUnit in pDefendingPlayerUnits:Members() do
                pkAttacker.Kill(pDefendingPlayerUnit)
                print("Critical damage of Prussian attacker!")
            end
        end
    elseif (pDefendingPlayerConfig:GetCivilizationTypeName() == "CIVILIZATION_GERMANY") then
        local pkDefender = UnitManager.GetUnit(tDefenderID.player);
        local pPlayerEnemyUnitsKillRate = 0.1 * iDefenderUnitBonus
        if (100 * math.random() <= pPlayerEnemyUnitsKillRate) then
            for i, pAttackingPlayerUnit in pAttackingPlayerUnits:Members() do
                 pkDefender.Kill(pAttackingPlayerUnit)
                print("Critical damage of Prussian defender!")
            end
        end
    end
end
I resolved some unknown issues. Now I only need to solve a few problems.

I checked pPlayerMilitarizationBonus was normally marked in Lua.log. But I have not known pPlayerMilitarizationBonus normally worked and checked pPlayerRestoreBonus had an error and seemed pPlayerKillBonus was not worked.

Frankly, I don't know exactly method for using Lua and Combat Event. So I expect these functions involve many errors. I'd like you to help.
 

Attachments

Back
Top Bottom