Browse Source

players who attack buildinsg added to cityOutlaw list

feature-workorder
FatBoy-DOTC 1 year ago
parent
commit
bbdb683061
  1. 141
      src/engine/gameManager/CombatManager.java

141
src/engine/gameManager/CombatManager.java

@ -518,7 +518,7 @@ public enum CombatManager {
/** /**
* Attempt to attack target * Attempt to attack target
*/ */
private static void attack(AbstractCharacter ac, AbstractWorldObject target, Item weapon, ItemBase wb, boolean mainHand) { private static void attack(AbstractCharacter attacker, AbstractWorldObject target, Item weapon, ItemBase wb, boolean mainHand) {
float atr; float atr;
int minDamage, maxDamage; int minDamage, maxDamage;
@ -526,20 +526,20 @@ public enum CombatManager {
try { try {
if (ac == null) if (attacker == null)
return; return;
if (target == null) if (target == null)
return; return;
if (mainHand) { if (mainHand) {
atr = ac.getAtrHandOne(); atr = attacker.getAtrHandOne();
minDamage = ac.getMinDamageHandOne(); minDamage = attacker.getMinDamageHandOne();
maxDamage = ac.getMaxDamageHandOne(); maxDamage = attacker.getMaxDamageHandOne();
} else { } else {
atr = ac.getAtrHandTwo(); atr = attacker.getAtrHandTwo();
minDamage = ac.getMinDamageHandTwo(); minDamage = attacker.getMinDamageHandTwo();
maxDamage = ac.getMaxDamageHandTwo(); maxDamage = attacker.getMaxDamageHandTwo();
} }
boolean tarIsRat = false; boolean tarIsRat = false;
@ -558,9 +558,9 @@ public enum CombatManager {
//Dont think we need to do this anymore. //Dont think we need to do this anymore.
if (tarIsRat) if (tarIsRat)
if (ac.getBonuses().getFloatPercentAll(ModType.Slay, SourceType.Rat) != 0) { //strip away current % dmg buffs then add with rat % if (attacker.getBonuses().getFloatPercentAll(ModType.Slay, SourceType.Rat) != 0) { //strip away current % dmg buffs then add with rat %
float percent = 1 + ac.getBonuses().getFloatPercentAll(ModType.Slay, SourceType.Rat); float percent = 1 + attacker.getBonuses().getFloatPercentAll(ModType.Slay, SourceType.Rat);
minDamage *= percent; minDamage *= percent;
maxDamage *= percent; maxDamage *= percent;
@ -571,24 +571,24 @@ public enum CombatManager {
//subtract stamina //subtract stamina
if (wb == null) if (wb == null)
ac.modifyStamina(-0.5f, ac, true); attacker.modifyStamina(-0.5f, attacker, true);
else { else {
float stam = wb.getWeight() / 3; float stam = wb.getWeight() / 3;
stam = (stam < 1) ? 1 : stam; stam = (stam < 1) ? 1 : stam;
ac.modifyStamina(-(stam), ac, true); attacker.modifyStamina(-(stam), attacker, true);
} }
ac.cancelOnAttackSwing(); attacker.cancelOnAttackSwing();
errorTrack = 2; errorTrack = 2;
//set last time this player has attacked something. //set last time this player has attacked something.
if (target.getObjectType().equals(GameObjectType.PlayerCharacter) && target.getObjectUUID() != ac.getObjectUUID() && ac.getObjectType() == GameObjectType.PlayerCharacter) { if (target.getObjectType().equals(GameObjectType.PlayerCharacter) && target.getObjectUUID() != attacker.getObjectUUID() && attacker.getObjectType() == GameObjectType.PlayerCharacter) {
ac.setTimeStamp("LastCombatPlayer", System.currentTimeMillis()); attacker.setTimeStamp("LastCombatPlayer", System.currentTimeMillis());
((PlayerCharacter) target).setTimeStamp("LastCombatPlayer", System.currentTimeMillis()); ((PlayerCharacter) target).setTimeStamp("LastCombatPlayer", System.currentTimeMillis());
} else } else
ac.setTimeStamp("LastCombatMob", System.currentTimeMillis()); attacker.setTimeStamp("LastCombatMob", System.currentTimeMillis());
errorTrack = 3; errorTrack = 3;
@ -599,7 +599,7 @@ public enum CombatManager {
if (target.getObjectType().equals(GameObjectType.Building)) { if (target.getObjectType().equals(GameObjectType.Building)) {
if (BuildingManager.getBuildingFromCache(target.getObjectUUID()) == null) { if (BuildingManager.getBuildingFromCache(target.getObjectUUID()) == null) {
ac.setCombatTarget(null); attacker.setCombatTarget(null);
return; return;
} }
@ -607,34 +607,15 @@ public enum CombatManager {
Building building = (Building) target; Building building = (Building) target;
if (building.getParentZone() != null && building.getParentZone().isPlayerCity()) { City playerCity = ZoneManager.getCityAtLocation(building.getLoc());
if(playerCity != null){
if (System.currentTimeMillis() > building.getTimeStamp("CallForHelp")) { if(!playerCity.cityOutlaws.contains(attacker.getObjectUUID()))
playerCity.cityOutlaws.add(attacker.getObjectUUID());
building.getTimestamps().put("CallForHelp", System.currentTimeMillis() + 15000);
for (Mob mob : building.getParentZone().zoneMobSet) {
if (!mob.isPlayerGuard())
continue;
if (mob.getCombatTarget() != null)
continue;
if (mob.getGuild() != null && building.getGuild() != null)
if (!Guild.sameGuild(mob.getGuild().getNation(), building.getGuild().getNation()))
continue;
if (mob.getLoc().distanceSquared2D(building.getLoc()) > sqr(300))
continue;
mob.setCombatTarget(ac);
}
}
} }
} else { } else {
AbstractCharacter tar = (AbstractCharacter) target; AbstractCharacter tar = (AbstractCharacter) target;
defense = tar.getDefenseRating(); defense = tar.getDefenseRating();
handleRetaliate(tar, ac); //Handle target attacking back if in combat and has no other target handleRetaliate(tar, attacker); //Handle target attacking back if in combat and has no other target
} }
errorTrack = 4; errorTrack = 4;
@ -660,11 +641,11 @@ public enum CombatManager {
if (roll < chance) { if (roll < chance) {
if (ac.getObjectType().equals(GameObjectType.PlayerCharacter)) if (attacker.getObjectType().equals(GameObjectType.PlayerCharacter))
updateAttackTimers((PlayerCharacter) ac, target, true); updateAttackTimers((PlayerCharacter) attacker, target, true);
boolean skipPassives = false; boolean skipPassives = false;
PlayerBonuses bonuses = ac.getBonuses(); PlayerBonuses bonuses = attacker.getBonuses();
if (bonuses != null && bonuses.getBool(ModType.IgnorePassiveDefense, SourceType.None)) if (bonuses != null && bonuses.getBool(ModType.IgnorePassiveDefense, SourceType.None))
skipPassives = true; skipPassives = true;
@ -679,26 +660,26 @@ public enum CombatManager {
// Apply Weapon power effect if any. don't try to apply twice if // Apply Weapon power effect if any. don't try to apply twice if
// dual wielding. Perform after passive test for sync purposes. // dual wielding. Perform after passive test for sync purposes.
if (ac.getObjectType().equals(GameObjectType.PlayerCharacter) && (mainHand || wb.isTwoHanded())) { if (attacker.getObjectType().equals(GameObjectType.PlayerCharacter) && (mainHand || wb.isTwoHanded())) {
dpj = ((PlayerCharacter) ac).getWeaponPower(); dpj = ((PlayerCharacter) attacker).getWeaponPower();
if (dpj != null) { if (dpj != null) {
PlayerBonuses bonus = ac.getBonuses(); PlayerBonuses bonus = attacker.getBonuses();
float attackRange = getWeaponRange(wb, bonus); float attackRange = getWeaponRange(wb, bonus);
dpj.attack(target, attackRange); dpj.attack(target, attackRange);
if (dpj.getPower() != null && (dpj.getPowerToken() == -1851459567 || dpj.getPowerToken() == -1851489518)) if (dpj.getPower() != null && (dpj.getPowerToken() == -1851459567 || dpj.getPowerToken() == -1851489518))
((PlayerCharacter) ac).setWeaponPower(dpj); ((PlayerCharacter) attacker).setWeaponPower(dpj);
} }
} }
//check to apply second backstab. //check to apply second backstab.
if (ac.getObjectType().equals(GameObjectType.PlayerCharacter) && !mainHand) { if (attacker.getObjectType().equals(GameObjectType.PlayerCharacter) && !mainHand) {
dpj = ((PlayerCharacter) ac).getWeaponPower(); dpj = ((PlayerCharacter) attacker).getWeaponPower();
if (dpj != null && dpj.getPower() != null && (dpj.getPowerToken() == -1851459567 || dpj.getPowerToken() == -1851489518)) { if (dpj != null && dpj.getPower() != null && (dpj.getPowerToken() == -1851459567 || dpj.getPowerToken() == -1851489518)) {
float attackRange = getWeaponRange(wb, bonuses); float attackRange = getWeaponRange(wb, bonuses);
@ -718,24 +699,24 @@ public enum CombatManager {
//Handle Block passive //Handle Block passive
if (testPassive(ac, tarAc, "Block") && canTestBlock(ac, target)) { if (testPassive(attacker, tarAc, "Block") && canTestBlock(attacker, target)) {
if (!target.isAlive()) if (!target.isAlive())
return; return;
sendPassiveDefenseMessage(ac, wb, target, MBServerStatics.COMBAT_SEND_BLOCK, dpj, mainHand); sendPassiveDefenseMessage(attacker, wb, target, MBServerStatics.COMBAT_SEND_BLOCK, dpj, mainHand);
passiveFired = true; passiveFired = true;
} }
//Handle Parry passive //Handle Parry passive
if (!passiveFired) if (!passiveFired)
if (canTestParry(ac, target) && testPassive(ac, tarAc, "Parry")) { if (canTestParry(attacker, target) && testPassive(attacker, tarAc, "Parry")) {
if (!target.isAlive()) if (!target.isAlive())
return; return;
sendPassiveDefenseMessage(ac, wb, target, MBServerStatics.COMBAT_SEND_PARRY, dpj, mainHand); sendPassiveDefenseMessage(attacker, wb, target, MBServerStatics.COMBAT_SEND_PARRY, dpj, mainHand);
passiveFired = true; passiveFired = true;
} }
@ -746,12 +727,12 @@ public enum CombatManager {
//Handle Dodge passive //Handle Dodge passive
if (!passiveFired) if (!passiveFired)
if (testPassive(ac, tarAc, "Dodge")) { if (testPassive(attacker, tarAc, "Dodge")) {
if (!target.isAlive()) if (!target.isAlive())
return; return;
sendPassiveDefenseMessage(ac, wb, target, MBServerStatics.COMBAT_SEND_DODGE, dpj, mainHand); sendPassiveDefenseMessage(attacker, wb, target, MBServerStatics.COMBAT_SEND_DODGE, dpj, mainHand);
passiveFired = true; passiveFired = true;
} }
} }
@ -767,7 +748,7 @@ public enum CombatManager {
//if target is player, set last attack timestamp //if target is player, set last attack timestamp
if (target.getObjectType().equals(GameObjectType.PlayerCharacter)) if (target.getObjectType().equals(GameObjectType.PlayerCharacter))
updateAttackTimers((PlayerCharacter) target, ac, false); updateAttackTimers((PlayerCharacter) target, attacker, false);
//Get damage Type //Get damage Type
@ -775,7 +756,7 @@ public enum CombatManager {
if (wb != null) if (wb != null)
damageType = wb.getDamageType(); damageType = wb.getDamageType();
else if (ac.getObjectType().equals(GameObjectType.Mob) && ((Mob) ac).isSiege()) else if (attacker.getObjectType().equals(GameObjectType.Mob) && ((Mob) attacker).isSiege())
damageType = DamageType.Siege; damageType = DamageType.Siege;
else else
damageType = DamageType.Crush; damageType = DamageType.Crush;
@ -794,7 +775,7 @@ public enum CombatManager {
//make sure target is not immune to damage type; //make sure target is not immune to damage type;
if (resists != null && resists.immuneTo(damageType)) { if (resists != null && resists.immuneTo(damageType)) {
sendCombatMessage(ac, target, 0f, wb, dpj, mainHand); sendCombatMessage(attacker, target, 0f, wb, dpj, mainHand);
return; return;
} }
@ -805,9 +786,9 @@ public enum CombatManager {
float damage; float damage;
if (wb != null) if (wb != null)
damage = calculateDamage(ac, tarAc, minDamage, maxDamage, damageType, resists); damage = calculateDamage(attacker, tarAc, minDamage, maxDamage, damageType, resists);
else else
damage = calculateDamage(ac, tarAc, minDamage, maxDamage, damageType, resists); damage = calculateDamage(attacker, tarAc, minDamage, maxDamage, damageType, resists);
float d = 0f; float d = 0f;
@ -821,34 +802,34 @@ public enum CombatManager {
damage *= 2.5f; //increase damage if sitting damage *= 2.5f; //increase damage if sitting
if (tarAc.getHealth() > 0) if (tarAc.getHealth() > 0)
d = tarAc.modifyHealth(-damage, ac, false); d = tarAc.modifyHealth(-damage, attacker, false);
} else if (target.getObjectType().equals(GameObjectType.Building)) { } else if (target.getObjectType().equals(GameObjectType.Building)) {
if (BuildingManager.getBuildingFromCache(target.getObjectUUID()) == null) { if (BuildingManager.getBuildingFromCache(target.getObjectUUID()) == null) {
ac.setCombatTarget(null); attacker.setCombatTarget(null);
return; return;
} }
if (target.getHealth() > 0) if (target.getHealth() > 0)
d = ((Building) target).modifyHealth(-damage, ac); d = ((Building) target).modifyHealth(-damage, attacker);
} }
errorTrack = 13; errorTrack = 13;
//Test to see if any damage needs done to weapon or armor //Test to see if any damage needs done to weapon or armor
testItemDamage(ac, target, weapon, wb); testItemDamage(attacker, target, weapon, wb);
// if target is dead, we got the killing blow, remove attack timers on our weapons // if target is dead, we got the killing blow, remove attack timers on our weapons
if (tarAc != null && !tarAc.isAlive()) if (tarAc != null && !tarAc.isAlive())
removeAttackTimers(ac); removeAttackTimers(attacker);
//test double death fix //test double death fix
if (d != 0) if (d != 0)
sendCombatMessage(ac, target, damage, wb, dpj, mainHand); //send damage message sendCombatMessage(attacker, target, damage, wb, dpj, mainHand); //send damage message
errorTrack = 14; errorTrack = 14;
@ -875,7 +856,7 @@ public enum CombatManager {
int procChance = ThreadLocalRandom.current().nextInt(100); int procChance = ThreadLocalRandom.current().nextInt(100);
if (procChance < MBServerStatics.PROC_CHANCE) if (procChance < MBServerStatics.PROC_CHANCE)
((WeaponProcEffectModifier) aem).applyProc(ac, target); ((WeaponProcEffectModifier) aem).applyProc(attacker, target);
} }
} }
@ -887,52 +868,52 @@ public enum CombatManager {
//handle damage shields //handle damage shields
if (ac.isAlive() && tarAc != null && tarAc.isAlive()) if (attacker.isAlive() && tarAc != null && tarAc.isAlive())
handleDamageShields(ac, tarAc, damage); handleDamageShields(attacker, tarAc, damage);
} else { } else {
// Apply Weapon power effect if any. // Apply Weapon power effect if any.
// don't try to apply twice if dual wielding. // don't try to apply twice if dual wielding.
if (ac.getObjectType().equals(GameObjectType.PlayerCharacter) && (mainHand || wb.isTwoHanded())) { if (attacker.getObjectType().equals(GameObjectType.PlayerCharacter) && (mainHand || wb.isTwoHanded())) {
dpj = ((PlayerCharacter) ac).getWeaponPower(); dpj = ((PlayerCharacter) attacker).getWeaponPower();
if (dpj != null) { if (dpj != null) {
PowersBase wp = dpj.getPower(); PowersBase wp = dpj.getPower();
if (wp.requiresHitRoll() == false) { if (wp.requiresHitRoll() == false) {
PlayerBonuses bonus = ac.getBonuses(); PlayerBonuses bonus = attacker.getBonuses();
float attackRange = getWeaponRange(wb, bonus); float attackRange = getWeaponRange(wb, bonus);
dpj.attack(target, attackRange); dpj.attack(target, attackRange);
} else } else
((PlayerCharacter) ac).setWeaponPower(null); ((PlayerCharacter) attacker).setWeaponPower(null);
} }
} }
if (target.getObjectType() == GameObjectType.Mob) if (target.getObjectType() == GameObjectType.Mob)
((Mob) target).handleDirectAggro(ac); ((Mob) target).handleDirectAggro(attacker);
errorTrack = 17; errorTrack = 17;
//miss, Send miss message //miss, Send miss message
sendCombatMessage(ac, target, 0f, wb, dpj, mainHand); sendCombatMessage(attacker, target, 0f, wb, dpj, mainHand);
//if attacker is player, set last attack timestamp //if attacker is player, set last attack timestamp
if (ac.getObjectType().equals(GameObjectType.PlayerCharacter)) if (attacker.getObjectType().equals(GameObjectType.PlayerCharacter))
updateAttackTimers((PlayerCharacter) ac, target, true); updateAttackTimers((PlayerCharacter) attacker, target, true);
} }
errorTrack = 18; errorTrack = 18;
//cancel effects that break on attack or attackSwing //cancel effects that break on attack or attackSwing
ac.cancelOnAttack(); attacker.cancelOnAttack();
} catch (Exception e) { } catch (Exception e) {
Logger.error(ac.getName() + ' ' + errorTrack + ' ' + e); Logger.error(attacker.getName() + ' ' + errorTrack + ' ' + e);
} }
} }

Loading…
Cancel
Save