From 2bfd64f491fddfe6034f13679177fa2ff1427ce0 Mon Sep 17 00:00:00 2001 From: Reedux Date: Tue, 12 Jan 2021 17:44:05 +0000 Subject: [PATCH] When receiving a COMPNOR experience bonus from a destroy mission, your pet will now also receive 50% of the experience needed for the pets current level. https://github.com/SWG-Source/qa-testing/issues/286 --- .../game/script/library/beast_lib.java | 35 +++++++++++++++++++ .../systems/missions/base/mission_base.java | 6 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/sku.0/sys.server/compiled/game/script/library/beast_lib.java b/sku.0/sys.server/compiled/game/script/library/beast_lib.java index e32755a5e..e830305df 100755 --- a/sku.0/sys.server/compiled/game/script/library/beast_lib.java +++ b/sku.0/sys.server/compiled/game/script/library/beast_lib.java @@ -1940,6 +1940,41 @@ public class beast_lib extends script.base_script setBeastExperience(beast, experience); setBCDBeastExperience(bcd, experience); } + public static void incrementBeastExperienceMission(obj_id beast, int xpAmountToGrant) throws InterruptedException { + if (!isValidBeast(beast)) { + return; + } + int experience = getBeastExperience(beast); + int previousExperience = experience; + obj_id bcd = getBeastBCD(beast); + if (!isValidBCD(bcd)) { + return; + } + float happinessAdjustment = (getBCDBeastHappiness(bcd) / 100.0f) + 1.0f; + if (happinessAdjustment > 1.5f) { + happinessAdjustment = 1.5f; + } else if (happinessAdjustment < 0.5f) { + happinessAdjustment = 0.5f; + } + float percentageBonuses = happinessAdjustment; + if (buff.hasBuff(beast, "bm_beast_steroid")) { + percentageBonuses += 0.01f * utils.getIntScriptVar(beast, "beastBuff.beastXpBonusPercent"); + } + obj_id master = getMaster(beast); + if (isValidPlayer(master)) { + int experienceGain = Math.round(xpAmountToGrant * percentageBonuses); + experienceGain += experienceGain * 0.01f * getEnhancedSkillStatisticModifierUncapped(master, "bm_xp_mod_boost"); + int multiplier = utils.stringToInt(getConfigSetting("GameServer", "xpMultiplier")); + if (multiplier > 1) { + experienceGain *= multiplier; + } + experience += experienceGain; + prose_package pp = prose.getPackage(xp.SID_FLYTEXT_XP, experience - previousExperience); + showFlyTextPrivate(beast, master, pp, 2.5f, new color(180, 60, 240, 255)); + } + setBeastExperience(beast, experience); + setBCDBeastExperience(bcd, experience); + } public static void incrementBeastLevel(obj_id beast) throws InterruptedException { if (!isValidBeast(beast)) diff --git a/sku.0/sys.server/compiled/game/script/systems/missions/base/mission_base.java b/sku.0/sys.server/compiled/game/script/systems/missions/base/mission_base.java index 89c6e1999..e4464f73d 100755 --- a/sku.0/sys.server/compiled/game/script/systems/missions/base/mission_base.java +++ b/sku.0/sys.server/compiled/game/script/systems/missions/base/mission_base.java @@ -158,8 +158,10 @@ public class mission_base extends script.base_script } float divisor = missions.alterMissionPayoutDivisorDaily(objPlayer); intReward = intReward / (int)divisor; - if (missions.canEarnDailyMissionXp(objPlayer) && missions.isDestroyMission(objMissionData)) - { + if (missions.canEarnDailyMissionXp(objPlayer) && missions.isDestroyMission(objMissionData)){ + if (beast_lib.isBeastMaster(objPlayer) && beast_lib.hasActiveBeast(objPlayer)) { + beast_lib.incrementBeastExperienceMission(beast_lib.getBeastOnPlayer(objPlayer), xp.getMissionXpAmount(objPlayer, intPlayerDifficulty)); + } xp.grantMissionXp(objPlayer, intPlayerDifficulty); } transferBankCreditsFromNamedAccount(money.ACCT_MISSION_DYNAMIC, objPlayer, intReward, "testSuccess", "testFail", dctParams);