From 52ea9667f037b1c2d480ffde573ee59feba4aabe Mon Sep 17 00:00:00 2001 From: Ziggy Date: Wed, 13 Jul 2022 02:49:24 +0200 Subject: [PATCH] Holocore-435 [Brawler] Parry Riposte Stance Lots of file edits because I also created SWGColor and used in relevant places. It contains commonly used colors for flytexts, so we don't need to look them up each time. There are way more colors than the ones I added, but I figure it makes sense to add them as we go along. --- serverdata/command/combat_commands.sdb | 1 + .../resources/support/color/SWGColor.kt | 28 +++++++++ .../KnockdownRecoveryCmdCallback.java | 60 ------------------- .../callbacks/KnockdownRecoveryCmdCallback.kt | 31 ++++++++++ .../resources/support/npc/ai/NpcCombatMode.kt | 4 +- .../support/objects/swg/custom/AIObject.java | 4 +- .../combat/command/CombatCommandAttack.java | 44 +++++++++++++- .../combat/command/CombatCommandCommon.java | 12 ++-- .../combat/command/CombatCommandHeal.java | 4 +- .../experience/ExperiencePointService.java | 5 +- .../global/commands/CommandQueueService.java | 3 +- 11 files changed, 117 insertions(+), 79 deletions(-) create mode 100644 src/main/java/com/projectswg/holocore/resources/support/color/SWGColor.kt delete mode 100644 src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KnockdownRecoveryCmdCallback.java create mode 100644 src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KnockdownRecoveryCmdCallback.kt diff --git a/serverdata/command/combat_commands.sdb b/serverdata/command/combat_commands.sdb index 64aee7457..efc908c7f 100644 --- a/serverdata/command/combat_commands.sdb +++ b/serverdata/command/combat_commands.sdb @@ -21,6 +21,7 @@ meleeHit LEFT_CLICK_DEFAULT STANDARD ATTACK HEALTH 1 object/tangible/spac meleeStrike LEFT_CLICK_DEFAULT STANDARD ATTACK HEALTH 1 object/tangible/space/content_infrastructure/generic_egg_small.iff -1 3 1 TARGET STANDARD TRUE TRUE attack_high_right_medium_0,attack_high_right_medium_1,attack_high_center_medium_0,attack_high_center_medium_1,attack_high_center_1_jab_double_medium,attack_high_center_medium_2,attack_high_left_medium_0,attack_high_left_medium_1,attack_mid_left_medium_0,attack_mid_left_medium_1,attack_mid_left_medium_2,attack_mid_right_medium_0,attack_mid_right_medium_1,attack_mid_right_medium_2,attack_special_elbow_throw_medium SINGLE_TARGET 0 0 0 0 0 0 1.2 0 1 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 PISTOL RANGED_WEAPON KINETIC KINETIC 0 0 0 FALSE WEAPON_NAME 0 0 1 0 neurotoxin RIGHT_CLICK_SPECIAL STANDARD ATTACK HEALTH 1 appearance/pt_special_attack_blind.prt weapon object/tangible/space/content_infrastructure/generic_egg_small.iff -1 3 1 TARGET STANDARD TRUE TRUE fire_1_single_medium attack_special_knee_strike_medium combo_2b_medium combo_4c_medium combo_4c_medium fire_1_single_medium fire_1_single_medium fire_1_single_medium fire_1_single_medium *heavy_wpn SINGLE_TARGET 0 0 0 0 20 0 1 0 1 0 0 0 0 0 50 0 0 0 0 0 medicNeurotoxin_1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 PISTOL RANGED_WEAPON KINETIC KINETIC 0 0 0 FALSE ACTION_NAME 0 0 1 0 paintTarget RIGHT_CLICK_SPECIAL STANDARD DEBUFF HEALTH 1 appearance/pt_special_attack_startle.prt weapon object/tangible/space/content_infrastructure/generic_egg_small.iff -1 3 1 TARGET STANDARD TRUE TRUE fire_1_single_medium attack_special_knee_strike_medium combo_2b_medium combo_4c_medium combo_4c_medium fire_1_single_medium fire_1_single_medium fire_1_single_medium fire_1_single_medium *heavy_wpn SINGLE_TARGET 0 0 0 0 20 0 1 0 1 0 0 0 0 0 50 0 0 0 0 0 officerPaintTarget_1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 PISTOL RANGED_WEAPON KINETIC KINETIC 0 0 0 FALSE perform_target ACTION_NAME 0 0 1 0 +parryRiposte RIGHT_CLICK_SPECIAL NONE BUFF HEALTH 1 object/tangible/space/content_infrastructure/generic_egg_small.iff -1 3 1 TARGET STANDARD TRUE TRUE SINGLE_TARGET 0 0 0 0 0 0 1 0 1 0 0 0 0 0 50 0 0 0 0 0 0 0 parryRiposte 0 0 1 0 0 0 0 0 0 0 0 0 0 PISTOL RANGED_WEAPON KINETIC KINETIC 0 0 0 FALSE perform_notarget ACTION_NAME 0 0 1 0 rangedShot LEFT_CLICK_DEFAULT STANDARD ATTACK HEALTH 1 object/tangible/space/content_infrastructure/generic_egg_small.iff -1 3 1 TARGET STANDARD TRUE TRUE fire_1_single_medium fire_1_single_medium fire_1_single_medium fire_3_single_medium fire_1_single_medium SINGLE_TARGET 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 PISTOL RANGED_WEAPON KINETIC KINETIC 0 0 0 FALSE WEAPON_NAME 0 0 1 0 saberHit LEFT_CLICK_DEFAULT STANDARD ATTACK HEALTH 1 object/tangible/space/content_infrastructure/generic_egg_small.iff -1 3 1 TARGET STANDARD TRUE TRUE attack_high_center_medium_0,attack_high_center_medium_1,attack_high_center_medium_2,attack_high_left_medium_0,attack_high_left_medium_1,attack_high_left_medium_2,attack_high_right_medium_0,attack_high_right_medium_1,attack_high_right_medium_2,attack_low_left_medium_0,attack_low_left_medium_1,attack_low_left_medium_2,attack_low_right_medium_0,attack_low_right_medium_1,attack_low_right_medium_2,attack_mid_center_medium_0,attack_mid_center_medium_1,attack_mid_center_medium_2,attack_mid_left_medium_0,attack_mid_left_medium_1,attack_mid_left_medium_2,attack_mid_right_medium_0,attack_mid_right_medium_1,attack_mid_right_medium_2 attack_high_center_medium_0,attack_high_center_medium_1,attack_high_center_medium_2,attack_high_left_medium_0,attack_high_left_medium_1,attack_high_left_medium_2,attack_high_right_medium_0,attack_high_right_medium_1,attack_high_right_medium_2,attack_low_left_medium_0,attack_low_left_medium_1,attack_low_left_medium_2,attack_low_right_medium_0,attack_low_right_medium_1,attack_low_right_medium_2,attack_mid_center_medium_0,attack_mid_center_medium_1,attack_mid_center_medium_2,attack_mid_left_medium_0,attack_mid_left_medium_1,attack_mid_left_medium_2,attack_mid_right_medium_0,attack_mid_right_medium_1,attack_mid_right_medium_2 attack_high_center_medium_0,attack_high_center_medium_1,attack_high_center_medium_2,attack_high_left_medium_0,attack_high_left_medium_1,attack_high_left_medium_2,attack_high_right_medium_0,attack_high_right_medium_1,attack_high_right_medium_2,attack_low_left_medium_0,attack_low_left_medium_1,attack_low_left_medium_2,attack_low_right_medium_0,attack_low_right_medium_1,attack_low_right_medium_2,attack_mid_center_medium_0,attack_mid_center_medium_1,attack_mid_center_medium_2,attack_mid_left_medium_0,attack_mid_left_medium_1,attack_mid_left_medium_2,attack_mid_right_medium_0,attack_mid_right_medium_1,attack_mid_right_medium_2 attack_high_center_medium_0,attack_high_center_medium_1,attack_high_center_medium_2,attack_high_left_medium_0,attack_high_left_medium_1,attack_high_left_medium_2,attack_high_right_medium_0,attack_high_right_medium_1,attack_high_right_medium_2,attack_low_left_medium_0,attack_low_left_medium_1,attack_low_left_medium_2,attack_low_right_medium_0,attack_low_right_medium_1,attack_low_right_medium_2,attack_mid_center_medium_0,attack_mid_center_medium_1,attack_mid_center_medium_2,attack_mid_left_medium_0,attack_mid_left_medium_1,attack_mid_left_medium_2,attack_mid_right_medium_0,attack_mid_right_medium_1,attack_mid_right_medium_2 SINGLE_TARGET 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 PISTOL RANGED_WEAPON KINETIC KINETIC 0 0 0 FALSE WEAPON_NAME 0 0 1 0 stormLordSpecial RIGHT_CLICK_SPECIAL STANDARD DEBUFF HEALTH 1 clienteffect/pl_storm_lord_special.cef object/tangible/space/content_infrastructure/generic_egg_small.iff -1 3 1 TARGET STANDARD FALSE FALSE $force_lightning_1_arc_particle_level_[private_force_lightning_single_power:2]_medium AREA 30 0 0 32 10000 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1000 1500 PISTOL RANGED_WEAPON KINETIC KINETIC 0 0 0 FALSE NO_ATTACK_NAME 0 0 1 0 diff --git a/src/main/java/com/projectswg/holocore/resources/support/color/SWGColor.kt b/src/main/java/com/projectswg/holocore/resources/support/color/SWGColor.kt new file mode 100644 index 000000000..8014a2dfa --- /dev/null +++ b/src/main/java/com/projectswg/holocore/resources/support/color/SWGColor.kt @@ -0,0 +1,28 @@ +package com.projectswg.holocore.resources.support.color + +import com.projectswg.common.data.RGB + +object SWGColor { + val black = RGB(0, 0, 0) + + object Blues { + val cyan = RGB(0, 255, 255) + } + + object Greens { + val seagreen = RGB(46, 139, 87) + } + + object Reds { + val orangered = RGB(255, 69, 0) + val red = RGB(255, 0, 0) + } + + object Violets { + val magenta = RGB(255, 0, 255) + } + + object Whites { + val white = RGB(255, 255, 255) + } +} \ No newline at end of file diff --git a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KnockdownRecoveryCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KnockdownRecoveryCmdCallback.java deleted file mode 100644 index ccf41302c..000000000 --- a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KnockdownRecoveryCmdCallback.java +++ /dev/null @@ -1,60 +0,0 @@ -/*********************************************************************************** - * Copyright (c) 2018 /// Project SWG /// www.projectswg.com * - * * - * ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on * - * July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. * - * Our goal is to create an emulator which will provide a server for players to * - * continue playing a game similar to the one they used to play. We are basing * - * it on the final publish of the game prior to end-game events. * - * * - * This file is part of Holocore. * - * * - * --------------------------------------------------------------------------------* - * * - * Holocore is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Affero General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * * - * Holocore is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Affero General Public License for more details. * - * * - * You should have received a copy of the GNU Affero General Public License * - * along with Holocore. If not, see . * - ***********************************************************************************/ -package com.projectswg.holocore.resources.support.global.commands.callbacks; - -import com.projectswg.common.data.RGB; -import com.projectswg.common.data.encodables.oob.StringId; -import com.projectswg.common.data.encodables.tangible.Posture; -import com.projectswg.common.network.packets.swg.zone.object_controller.ShowFlyText; -import com.projectswg.holocore.resources.support.global.commands.ICmdCallback; -import com.projectswg.holocore.resources.support.global.commands.Locomotion; -import com.projectswg.holocore.resources.support.global.player.Player; -import com.projectswg.holocore.resources.support.objects.swg.SWGObject; -import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; -import org.jetbrains.annotations.NotNull; - -public class KnockdownRecoveryCmdCallback implements ICmdCallback{ - - @Override - public void execute(@NotNull Player player, SWGObject target, @NotNull String args) { - CreatureObject creatureObject = player.getCreatureObject(); - - if (Locomotion.KNOCKED_DOWN.isActive(creatureObject)) { - standUp(creatureObject); - } else { - showWrongPostureFlyText(creatureObject); - } - } - - private void showWrongPostureFlyText(CreatureObject creatureObject) { - creatureObject.sendSelf(new ShowFlyText(creatureObject.getObjectId(), new StringId("combat_effects", "wrong_posture_fly"), ShowFlyText.Scale.MEDIUM, new RGB(255, 255, 255))); - } - - private void standUp(CreatureObject creatureObject) { - creatureObject.setPosture(Posture.UPRIGHT); - } -} diff --git a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KnockdownRecoveryCmdCallback.kt b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KnockdownRecoveryCmdCallback.kt new file mode 100644 index 000000000..7363722e3 --- /dev/null +++ b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/KnockdownRecoveryCmdCallback.kt @@ -0,0 +1,31 @@ +package com.projectswg.holocore.resources.support.global.commands.callbacks + +import com.projectswg.common.data.encodables.oob.StringId +import com.projectswg.common.data.encodables.tangible.Posture +import com.projectswg.common.network.packets.swg.zone.object_controller.ShowFlyText +import com.projectswg.holocore.resources.support.color.SWGColor +import com.projectswg.holocore.resources.support.global.commands.ICmdCallback +import com.projectswg.holocore.resources.support.global.commands.Locomotion +import com.projectswg.holocore.resources.support.global.player.Player +import com.projectswg.holocore.resources.support.objects.swg.SWGObject +import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject + +class KnockdownRecoveryCmdCallback : ICmdCallback { + override fun execute(player: Player, target: SWGObject?, args: String) { + val creatureObject = player.creatureObject + + if (Locomotion.KNOCKED_DOWN.isActive(creatureObject)) { + standUp(creatureObject) + } else { + showWrongPostureFlyText(creatureObject) + } + } + + private fun showWrongPostureFlyText(creatureObject: CreatureObject) { + creatureObject.sendSelf(ShowFlyText(creatureObject.objectId, StringId("combat_effects", "wrong_posture_fly"), ShowFlyText.Scale.MEDIUM, SWGColor.Whites.white)) + } + + private fun standUp(creatureObject: CreatureObject) { + creatureObject.posture = Posture.UPRIGHT + } +} \ No newline at end of file diff --git a/src/main/java/com/projectswg/holocore/resources/support/npc/ai/NpcCombatMode.kt b/src/main/java/com/projectswg/holocore/resources/support/npc/ai/NpcCombatMode.kt index f07c24904..7213608b9 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/npc/ai/NpcCombatMode.kt +++ b/src/main/java/com/projectswg/holocore/resources/support/npc/ai/NpcCombatMode.kt @@ -1,6 +1,5 @@ package com.projectswg.holocore.resources.support.npc.ai -import com.projectswg.common.data.RGB import com.projectswg.common.data.encodables.oob.StringId import com.projectswg.common.data.encodables.tangible.Posture import com.projectswg.common.data.location.Location @@ -12,6 +11,7 @@ import com.projectswg.holocore.intents.support.npc.ai.StartNpcCombatIntent import com.projectswg.holocore.intents.support.npc.ai.StartNpcMovementIntent import com.projectswg.holocore.intents.support.npc.ai.StopNpcMovementIntent import com.projectswg.holocore.intents.support.objects.swg.MoveObjectIntent +import com.projectswg.holocore.resources.support.color.SWGColor import com.projectswg.holocore.resources.support.data.server_info.loader.DataLoader import com.projectswg.holocore.resources.support.data.server_info.mongodb.PswgDatabase import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject @@ -62,7 +62,7 @@ class NpcCombatMode(obj: AIObject) : NpcMode(obj) { } private fun showExclamationMarkAboveNpc() { - ai.sendObservers(ShowFlyText(ai.objectId, StringId("npc_reaction/flytext", "threaten"), ShowFlyText.Scale.SMALL, RGB(204, 0, 0))) + ai.sendObservers(ShowFlyText(ai.objectId, StringId("npc_reaction/flytext", "threaten"), ShowFlyText.Scale.SMALL, SWGColor.Reds.red)) } override fun onModeEnd() { diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/custom/AIObject.java b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/custom/AIObject.java index 305bd14ae..1e908a348 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/custom/AIObject.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/custom/AIObject.java @@ -26,13 +26,13 @@ ***********************************************************************************/ package com.projectswg.holocore.resources.support.objects.swg.custom; -import com.projectswg.common.data.RGB; import com.projectswg.common.data.encodables.oob.StringId; import com.projectswg.common.data.location.Location; import com.projectswg.common.network.packets.swg.zone.baselines.Baseline.BaselineType; import com.projectswg.common.network.packets.swg.zone.object_controller.ShowFlyText; import com.projectswg.holocore.intents.support.npc.ai.ScheduleNpcModeIntent; import com.projectswg.holocore.intents.support.npc.ai.StartNpcCombatIntent; +import com.projectswg.holocore.resources.support.color.SWGColor; import com.projectswg.holocore.resources.support.npc.spawn.Spawner; import com.projectswg.holocore.resources.support.objects.ObjectCreator; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; @@ -170,7 +170,7 @@ public class AIObject extends CreatureObject { } private void showQuestionMarkAboveNpc() { - this.sendObservers(new ShowFlyText(this.getObjectId(), new StringId("npc_reaction/flytext", "alert"), ShowFlyText.Scale.SMALL, new RGB(204, 0, 0))); + this.sendObservers(new ShowFlyText(this.getObjectId(), new StringId("npc_reaction/flytext", "alert"), ShowFlyText.Scale.SMALL, SWGColor.Reds.INSTANCE.getRed())); } private void checkAwareAttack(CreatureObject player) { diff --git a/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandAttack.java b/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandAttack.java index bf824c4fa..d32a3c7e1 100644 --- a/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandAttack.java +++ b/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandAttack.java @@ -27,17 +27,20 @@ package com.projectswg.holocore.services.gameplay.combat.command; -import com.projectswg.common.data.RGB; import com.projectswg.common.data.combat.*; +import com.projectswg.common.data.encodables.oob.OutOfBandPackage; +import com.projectswg.common.data.encodables.oob.ProsePackage; import com.projectswg.common.data.encodables.oob.StringId; import com.projectswg.common.data.location.Location; import com.projectswg.common.network.packets.swg.zone.object_controller.ShowFlyText; import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatAction; import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatAction.Defender; +import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatSpam; import com.projectswg.holocore.intents.gameplay.combat.EnterCombatIntent; import com.projectswg.holocore.intents.gameplay.combat.KnockdownIntent; import com.projectswg.holocore.intents.gameplay.combat.RequestCreatureDeathIntent; import com.projectswg.holocore.intents.support.global.chat.SystemMessageIntent; +import com.projectswg.holocore.resources.support.color.SWGColor; import com.projectswg.holocore.resources.support.global.commands.CombatCommand; import com.projectswg.holocore.resources.support.global.commands.Locomotion; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; @@ -196,7 +199,7 @@ enum CombatCommandAttack implements CombatCommandHitType { if (randomNumberBetween0And100() > toHit) { info.setSuccess(false); - ShowFlyText missFlyText = new ShowFlyText(target.getObjectId(), new StringId("combat_effects", "miss"), ShowFlyText.Scale.MEDIUM, new RGB(255, 255, 255)); + ShowFlyText missFlyText = new ShowFlyText(target.getObjectId(), new StringId("combat_effects", "miss"), ShowFlyText.Scale.MEDIUM, SWGColor.Whites.INSTANCE.getWhite()); target.sendSelf(missFlyText); source.sendSelf(missFlyText); @@ -258,11 +261,48 @@ enum CombatCommandAttack implements CombatCommandHitType { int hate = (int) (finalDamage * command.getHateDamageModifier()); hate += command.getHateAdd(); target.handleHate(source, hate); + + boolean bothUsingMelee = target.getEquippedWeapon().getType().isMelee() && source.getEquippedWeapon().getType().isMelee(); + + if (bothUsingMelee) { + double percentOfDamageToReflectBackToAttacker = target.getSkillModValue("private_melee_dmg_shield") / 100d; + + if (percentOfDamageToReflectBackToAttacker > 0) { + riposte(source, target, rawDamage, percentOfDamageToReflectBackToAttacker); + } + } } source.sendObservers(action); } + private static void riposte(CreatureObject source, CreatureObject target, int rawDamage, double percentOfDamageToReflectBackToAttacker) { + int reflectedDamage = (int) (percentOfDamageToReflectBackToAttacker * rawDamage); + + ShowFlyText riposteFlytext = new ShowFlyText(target.getObjectId(), new StringId("cbt_spam", "dmg_shield_melee_fly"), ShowFlyText.Scale.MEDIUM, SWGColor.Reds.INSTANCE.getOrangered()); + target.sendSelf(riposteFlytext); + source.sendSelf(riposteFlytext); + + OutOfBandPackage spamMessage = new OutOfBandPackage(new ProsePackage(new StringId("cbt_spam", "dmg_shield_melee_spam"), "TU", target.getObjectName(), "TT", source.getObjectName(), "DI", reflectedDamage)); + sendRiposteCombatSpam(target, spamMessage); + sendRiposteCombatSpam(source, spamMessage); + + if (source.getHealth() < reflectedDamage) { + // Took more damage than they had health left. Final damage becomes the amount of remaining health. + RequestCreatureDeathIntent.broadcast(source, target); + } else { + source.modifyHealth(-reflectedDamage); + } + } + + private static void sendRiposteCombatSpam(CreatureObject receiver, OutOfBandPackage spamMessage) { + CombatSpam riposteCombatSpamTo = new CombatSpam(receiver.getObjectId()); + riposteCombatSpamTo.setDataType((byte) 2); + riposteCombatSpamTo.setSpamMessage(spamMessage); + riposteCombatSpamTo.setSpamType(CombatSpamType.HIT); + receiver.sendSelf(riposteCombatSpamTo); + } + private static double calculateToHit(CreatureObject source, WeaponObject sourceWeapon, CreatureObject target) { int accMod = calculateAccMod(source, sourceWeapon); int defMod = calculateDefMod(source, target); diff --git a/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandCommon.java b/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandCommon.java index 30d66c2f0..3ba671cfb 100644 --- a/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandCommon.java +++ b/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandCommon.java @@ -39,6 +39,7 @@ import com.projectswg.common.network.packets.swg.zone.object_controller.ShowFlyT import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatAction; import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatSpam; import com.projectswg.holocore.intents.gameplay.combat.buffs.BuffIntent; +import com.projectswg.holocore.resources.support.color.SWGColor; import com.projectswg.holocore.resources.support.global.commands.CombatCommand; import com.projectswg.holocore.resources.support.global.commands.Command; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; @@ -50,9 +51,6 @@ import java.util.concurrent.ThreadLocalRandom; public class CombatCommandCommon { - private static final RGB COLOR_WHITE = new RGB(255, 255, 255); - private static final RGB COLOR_CYAN = new RGB(0, 255, 255); - private CombatCommandCommon() { } @@ -161,10 +159,10 @@ public class CombatCommandCommon { public static void handleStatus(CreatureObject source, CombatStatus status) { switch (status) { - case NO_TARGET -> showFlyText(source, "@combat_effects:target_invalid_fly", Scale.MEDIUM, COLOR_WHITE, ShowFlyText.Flag.PRIVATE); - case TOO_FAR -> showFlyText(source, "@combat_effects:range_too_far", Scale.MEDIUM, COLOR_CYAN, ShowFlyText.Flag.PRIVATE); - case INVALID_TARGET -> showFlyText(source, "@combat_effects:target_invalid_fly", Scale.MEDIUM, COLOR_CYAN, ShowFlyText.Flag.PRIVATE); - default -> showFlyText(source, "@combat_effects:action_failed", Scale.MEDIUM, COLOR_WHITE, ShowFlyText.Flag.PRIVATE); + case NO_TARGET -> showFlyText(source, "@combat_effects:target_invalid_fly", Scale.MEDIUM, SWGColor.Whites.INSTANCE.getWhite(), ShowFlyText.Flag.PRIVATE); + case TOO_FAR -> showFlyText(source, "@combat_effects:range_too_far", Scale.MEDIUM, SWGColor.Blues.INSTANCE.getCyan(), ShowFlyText.Flag.PRIVATE); + case INVALID_TARGET -> showFlyText(source, "@combat_effects:target_invalid_fly", Scale.MEDIUM, SWGColor.Blues.INSTANCE.getCyan(), ShowFlyText.Flag.PRIVATE); + default -> showFlyText(source, "@combat_effects:action_failed", Scale.MEDIUM, SWGColor.Whites.INSTANCE.getWhite(), ShowFlyText.Flag.PRIVATE); } } diff --git a/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandHeal.java b/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandHeal.java index e47bf8a17..f6e3be845 100644 --- a/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandHeal.java +++ b/src/main/java/com/projectswg/holocore/services/gameplay/combat/command/CombatCommandHeal.java @@ -27,7 +27,6 @@ package com.projectswg.holocore.services.gameplay.combat.command; -import com.projectswg.common.data.RGB; import com.projectswg.common.data.combat.*; import com.projectswg.common.data.encodables.oob.OutOfBandPackage; import com.projectswg.common.data.encodables.oob.ProsePackage; @@ -42,6 +41,7 @@ import com.projectswg.common.network.packets.swg.zone.object_controller.combat.C import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatAction.Defender; import com.projectswg.common.network.packets.swg.zone.object_controller.combat.CombatSpam; import com.projectswg.holocore.intents.gameplay.player.experience.ExperienceIntent; +import com.projectswg.holocore.resources.support.color.SWGColor; import com.projectswg.holocore.resources.support.global.commands.CombatCommand; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; @@ -187,7 +187,7 @@ enum CombatCommandHeal implements CombatCommandHitType { combatAction.addDefender(new Defender(healed.getObjectId(), healed.getPosture(), false, (byte) 0, HitLocation.HIT_LOCATION_BODY, (short) 0)); OutOfBandPackage oobp = new OutOfBandPackage(new ProsePackage("StringId", new StringId("healing", "heal_fly"), "DI", difference, "TO", attribName)); - ShowFlyText flyText = new ShowFlyText(healed.getObjectId(), oobp, Scale.MEDIUM, new RGB(46, 139, 87), ShowFlyText.Flag.IS_HEAL); + ShowFlyText flyText = new ShowFlyText(healed.getObjectId(), oobp, Scale.MEDIUM, SWGColor.Greens.INSTANCE.getSeagreen(), ShowFlyText.Flag.IS_HEAL); String commandName = combatCommand.getName(); SWGPacket effect; diff --git a/src/main/java/com/projectswg/holocore/services/gameplay/player/experience/ExperiencePointService.java b/src/main/java/com/projectswg/holocore/services/gameplay/player/experience/ExperiencePointService.java index 18fa984c6..ceff30d1d 100644 --- a/src/main/java/com/projectswg/holocore/services/gameplay/player/experience/ExperiencePointService.java +++ b/src/main/java/com/projectswg/holocore/services/gameplay/player/experience/ExperiencePointService.java @@ -1,6 +1,5 @@ package com.projectswg.holocore.services.gameplay.player.experience; -import com.projectswg.common.data.RGB; import com.projectswg.common.data.encodables.oob.OutOfBandPackage; import com.projectswg.common.data.encodables.oob.ProsePackage; import com.projectswg.common.data.encodables.oob.StringId; @@ -9,6 +8,7 @@ import com.projectswg.common.network.packets.swg.zone.object_controller.ShowFlyT import com.projectswg.common.network.packets.swg.zone.object_controller.ShowFlyText.Scale; import com.projectswg.holocore.intents.gameplay.player.experience.ExperienceIntent; import com.projectswg.holocore.intents.support.global.chat.SystemMessageIntent; +import com.projectswg.holocore.resources.support.color.SWGColor; import com.projectswg.holocore.resources.support.data.server_info.mongodb.PswgDatabase; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; @@ -68,8 +68,7 @@ public class ExperiencePointService extends Service { private void showFlytext(CreatureObject creatureObject, SWGObject flytextTarget, int xpGained) { OutOfBandPackage message = new OutOfBandPackage(new ProsePackage(new StringId("base_player", "prose_flytext_xp"), "DI", xpGained)); - RGB magenta = new RGB(255, 0, 255); - ShowFlyText packet = new ShowFlyText(flytextTarget.getObjectId(), message, Scale.MEDIUM, magenta); + ShowFlyText packet = new ShowFlyText(flytextTarget.getObjectId(), message, Scale.MEDIUM, SWGColor.Violets.INSTANCE.getMagenta()); creatureObject.sendSelf(packet); } diff --git a/src/main/java/com/projectswg/holocore/services/support/global/commands/CommandQueueService.java b/src/main/java/com/projectswg/holocore/services/support/global/commands/CommandQueueService.java index 6648b46ff..1589cd7d2 100644 --- a/src/main/java/com/projectswg/holocore/services/support/global/commands/CommandQueueService.java +++ b/src/main/java/com/projectswg/holocore/services/support/global/commands/CommandQueueService.java @@ -14,6 +14,7 @@ import com.projectswg.holocore.intents.support.global.command.ExecuteCommandInte import com.projectswg.holocore.intents.support.global.command.QueueCommandIntent; import com.projectswg.holocore.intents.support.global.network.InboundPacketIntent; import com.projectswg.holocore.intents.support.global.zone.PlayerEventIntent; +import com.projectswg.holocore.resources.support.color.SWGColor; import com.projectswg.holocore.resources.support.data.server_info.StandardLog; import com.projectswg.holocore.resources.support.data.server_info.loader.DataLoader; import com.projectswg.holocore.resources.support.data.server_info.loader.ValidWeapon; @@ -332,7 +333,7 @@ public class CommandQueueService extends Service { } private void showInvalidWeaponFlyText(CreatureObject source) { - source.sendSelf(new ShowFlyText(source.getObjectId(), new StringId("cbt_spam", "invalid_weapon"), ShowFlyText.Scale.MEDIUM, new RGB(255, 255, 255))); + source.sendSelf(new ShowFlyText(source.getObjectId(), new StringId("cbt_spam", "invalid_weapon"), ShowFlyText.Scale.MEDIUM, SWGColor.Whites.INSTANCE.getWhite())); } }