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())); } }