Added handling of deathblow for bounties

This commit is contained in:
Waverunner
2014-05-03 20:04:27 -04:00
parent 44678d8c18
commit 4831f6d8ca
7 changed files with 82 additions and 22 deletions
+48 -9
View File
@@ -43,11 +43,15 @@ import protocol.swg.objectControllerObjects.StartTask;
import resources.buffs.Buff;
import resources.buffs.DamageOverTime;
import resources.common.FileUtilities;
import resources.common.OutOfBand;
import resources.common.ProsePackage;
import resources.datatables.Options;
import resources.datatables.Elemental;
import resources.datatables.Posture;
import resources.datatables.WeaponType;
import resources.objectives.BountyMissionObjective;
import resources.objects.creature.CreatureObject;
import resources.objects.mission.MissionObject;
import resources.objects.player.PlayerObject;
import resources.objects.tangible.TangibleObject;
import resources.objects.waypoint.WaypointObject;
@@ -800,8 +804,10 @@ public class CombatService implements INetworkDispatch {
}, target.getIncapTimer(), TimeUnit.SECONDS);
target.setIncapTask(incapTask);
core.buffService.addBuffToCreature(target, "incapWeaken", target);
if(target.getSlottedObject("ghost") != null)
attacker.sendSystemMessage("You incapacitate " + target.getCustomName() + ".", (byte) 0);
if(target.getSlottedObject("ghost") != null) {
target.sendSystemMessage(new OutOfBand(new ProsePackage("base_player", "prose_victim_incap", attacker.getCustomName())), (byte) 0);
attacker.sendSystemMessage(new OutOfBand(new ProsePackage("base_player", "prose_target_incap", target.getCustomName())), (byte) 0);
}
return;
} else if(target.getHealth() - damage <= 0 && target.getAttachment("AI") != null) {
synchronized(target.getMutex()) {
@@ -983,17 +989,50 @@ public class CombatService implements INetworkDispatch {
target.stopIncapTask();
target.setIncapTask(null);
target.setPosture((byte) 14);
attacker.sendSystemMessage("You have killed " + target.getCustomName() + ".", (byte) 0);
target.sendSystemMessage("@base_player:victim_dead", (byte) 0);
if (target.getSlottedObject("ghost") != null && attacker.getSlottedObject("ghost") != null) {
boolean bountyWindow = true;
if (target.getPlayerObject().getBountyMissionId() != 0) {
MissionObject mission = (MissionObject) core.objectService.getObject(target.getPlayerObject().getBountyMissionId());
if (mission != null && mission.getBountyObjId() == attacker.getObjectId()) {
bountyWindow = false;
target.sendSystemMessage(new OutOfBand(new ProsePackage("bounty_hunter", "bounty_failed_hunter", attacker.getCustomName())), (byte) 0);
ProsePackage pp = new ProsePackage("bounty_hunter", "bounty_failed_target", attacker.getCustomName());
pp.setToCustomString("their");
attacker.sendSystemMessage(new OutOfBand(pp), (byte) 0);
core.missionService.handleMissionAbort(target, mission);
}
} else if (attacker.getPlayerObject().getBountyMissionId() != 0) {
MissionObject mission = (MissionObject) core.objectService.getObject(attacker.getPlayerObject().getBountyMissionId());
if (mission != null && mission.getBountyObjId() == target.getObjectId()) {
bountyWindow = false;
ProsePackage targetProse = new ProsePackage("bounty_hunter", "bounty_success_target", attacker.getCustomName());
targetProse.setDiInteger(mission.getCreditReward());
target.sendSystemMessage(new OutOfBand(targetProse), (byte) 0);
ProsePackage attackerProse = new ProsePackage("bounty_hunter", "bounty_success_hunter", attacker.getCustomName());
attackerProse.setToCustomString("their"); // should be his or her: http://youtu.be/BqeDQQSETJI?t=2m19s
attackerProse.setDiInteger(mission.getCreditReward());
attacker.sendSystemMessage(new OutOfBand(attackerProse), (byte) 0);
core.missionService.handleMissionAbort(target, mission);
}
}
if(target.getDuelList().contains(attacker))
bountyWindow = false;
handleEndDuel(target, attacker, false);
if (bountyWindow) core.playerService.sendSetBountyWindow(target, attacker);
} else { attacker.sendSystemMessage("You have killed " + target.getCustomName() + ".", (byte) 0); }
attacker.removeDefender(target);
target.removeDefender(attacker);
target.setSpeedMultiplierBase(0);
target.setTurnRadius(0);
if(!target.getDuelList().contains(attacker) && attacker.getSlottedObject("ghost") != null)
core.playerService.sendSetBountyWindow(target, attacker);
else
handleEndDuel(target, attacker, false);
target.sendSystemMessage(new OutOfBand(new ProsePackage("base_player", "prose_victim_dead", attacker.getCustomName())), (byte) 0);
core.playerService.sendCloningWindow(target, attacker.getSlottedObject("ghost") != null);
}