Code:
/**
* Attack Players, same as npc tbh xD
**/
public void attackPlayer(int i) {
if (c.duelStatus > 0) {
try {
Thread.dumpStack();
} catch (Exception e) {
e.printStackTrace();
}
}
if (c.playerEquipment[c.playerWeapon] == 13022) {
c.gfx0(2138);
}
if (c.playerEquipment[c.playerRing] == 15017) {
double attackSpeed = (c.attackTimer / 150 * 150 + c.attackTimer);
attackSpeed = attackSpeed;
}
if (c.playerEquipment[c.playerRing] == 15398) {
double attackSpeed = (c.attackTimer / 10000 * 10000 + c.attackTimer);
attackSpeed = attackSpeed * 10000;
}
if(c.vestaDelay > 0) {
resetPlayerAttack();
return;
}
if(c.playerEquipment[c.playerWeapon] == 18357 && 9342 != c.playerEquipment[c.playerArrows]){
c.sendMessage("You can't use Chaotic Crossbow Without Onyx Bolts! (You dumb?)");
return;
}
if (c.playerEquipment[c.playerWeapon] == 15241) {
c.gfx0(2138);
}
if(c.playerEquipment[c.playerWeapon] == 15241 && 15243 != c.playerEquipment[c.playerArrows]){
c.sendMessage("You can't use Hand Cannon without the shots! (You dumb?)");
return;
}
if(c.curseActive[18]) { // SoulSplit GFX's - CAUSES CRASH
if(c.oldNpcIndex > 0) {
if(Server.npcHandler.npcs[c.oldNpcIndex] != null) {
try {
if(c.curseActive[18] && !c.prayerActive[23] && c.playerLevel[3] <= 99) {
int heal = 2;
if(c.playerLevel[3] + heal >= c.getPA().getLevelForXP(c.playerXP[3])) {
c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
} else {
c.playerLevel[3] += heal;
}
c.getPA().refreshSkill(3);
}
final int pX = c.getX();
final int pY = c.getY();
final int nX = Server.npcHandler.npcs[c.oldNpcIndex].getX();
final int nY = Server.npcHandler.npcs[c.oldNpcIndex].getY();
final int offX = (pY - nY)* -1;
final int offY = (pX - nX)* -1;
c.SSPLIT = true;
c.getPA().createPlayersProjectile2(pX, pY, offX, offY, 50, 50, 2263, 9, 9, c.oldNpcIndex + 1, 24, 0);
EventManager.getSingleton().addEvent(new Event() {
public void execute(EventContainer b) {
c.SSPLIT = false;
b.stop();
}
}, 500);
/*EventManager.getSingleton().addEvent(new Event() { // CAUSES CRASH
public void execute(EventContainer b) {
//c.getPA().createPlayersProjectile2(nX, nY, offX, offY, 50, 50, 2263, 9, 9, - c.playerId - 1, 24, 0);
b.stop();
}
}, 800);*/
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
if(c.curseActive[19]) { // Turmoil
c.getstr = PlayerHandler.players[i].playerLevel[2] * 10 / 100;
c.getdef = PlayerHandler.players[i].playerLevel[1] * 15 / 100;
c.getatt = PlayerHandler.players[i].playerLevel[0] * 15 / 100;
c.getranged = PlayerHandler.players[i].playerLevel[4] * 15 / 100;
c.getmagic = PlayerHandler.players[i].playerLevel[6] * 15 / 100;
}
for (int u : c.Bolts) {
for (int y : c.BOWS) {
if(y == c.playerEquipment[c.playerWeapon] && c.playerEquipment[c.playerWeapon] != 9185 && u == c.playerEquipment[c.playerArrows] && c.playerEquipment[c.playerWeapon] != 15241 && u == c.playerEquipment[c.playerArrows]){
c.sendMessage("You can only use arrows with this bow.");
return;
}
}
}
if(c.specEffect == 4) {
c.specEffect = 0;
}
/* DEGRADING */
if (Server.playerHandler.players[i] != null) {
if (Server.playerHandler.players[i].isDead) {
resetPlayerAttack();
return;
}
if(c.respawnTimer > 0 || Server.playerHandler.players[i].respawnTimer > 0) {
resetPlayerAttack();
return;
}
if(Server.playerHandler.players[i].trade11 > 0) {
c.sendMessage("You cannot attack a player that has just started the game!");
c.sendMessage("this is to stop STG (Stop transfering gold)");
resetPlayerAttack();
return;
}
if(c.underAttackBy != 0 || c.underAttackBy2 > 0 || c.curseActive[9]) {
}
if (c.playerRights >= 1 && c.playerRights < 3 && c.duelStatus < 1) {
c.sendMessage("Staff can't attack players! U fucking dumb? Trying to abuse? Gtfo");
resetPlayerAttack();
}else{
if (c.inFunPk && c.playerRights >= 1 && c.playerRights < 3) {
return;
}
}
if(Server.playerHandler.players[i].playerRights >= 1 && Server.playerHandler.players[i].playerRights < 3 && c.duelStatus < 1) {
c.sendMessage("You can't attack staff members cause they own you!");
resetPlayerAttack();
return;
}
if (c.getPA().getWearingAmount() < 4 && c.duelStatus < 1) {
c.sendMessage("You must be wearing at least 4 items to attack someone.");
resetPlayerAttack();
return;
}
boolean sameSpot = c.absX == Server.playerHandler.players[i].getX() && c.absY == Server.playerHandler.players[i].getY();
if(!c.goodDistance(Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), c.getX(), c.getY(), 25) && !sameSpot) {
resetPlayerAttack();
return;
}
if(Server.playerHandler.players[i].respawnTimer > 0) {
Server.playerHandler.players[i].playerIndex = 0;
resetPlayerAttack();
return;
}
if (Server.playerHandler.players[i].heightLevel != c.heightLevel) {
resetPlayerAttack();
return;
}
if (c.attackTimer == 1) {
applyLeeches(i);
}
//c.sendMessage("Made it here0.");
c.followId = i;
c.followId2 = 0;
if(c.attackTimer <= 0) {
c.usingBow = false;
c.specEffect = 0;
c.usingRangeWeapon = false;
c.rangeItemUsed = 0;
boolean usingBow = false;
boolean usingArrows = false;
boolean usingOtherRangeWeapons = false;
boolean usingCross = c.playerEquipment[c.playerWeapon] == 9185;
c.projectileStage = 0;
if (c.absX == Server.playerHandler.players[i].absX && c.absY == Server.playerHandler.players[i].absY) {
if (c.freezeTimer > 0) {
resetPlayerAttack();
return;
}
c.followId = i;
c.attackTimer = 0;
return;
}
/*if ((c.inPirateHouse() && !Server.playerHandler.players[i].inPirateHouse()) || (Server.playerHandler.players[i].inPirateHouse() && !c.inPirateHouse())) {
resetPlayerAttack();
return;
}*/
//c.sendMessage("Made it here1.");
if(!c.usingMagic) {
for (int bowId : c.BOWS) {
if(c.playerEquipment[c.playerWeapon] == bowId) {
usingBow = true;
for (int arrowId : c.ARROWS) {
if(c.playerEquipment[c.playerArrows] == arrowId) {
usingArrows = true;
}
}
}
}
for (int otherRangeId : c.OTHER_RANGE_WEAPONS) {
if(c.playerEquipment[c.playerWeapon] == otherRangeId) {
usingOtherRangeWeapons = true;
}
}
}
if (c.autocasting) {
c.spellId = c.autocastId;
c.usingMagic = true;
}
//c.sendMessage("Made it here2.");
if(c.spellId > 0) {
c.usingMagic = true;
}
Client o2 = (Client)Server.playerHandler.players[i];
o2.specialHitMask = getHitType(usingBow, c.usingMagic);
c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
if(c.duelRule[9]){
boolean canUseWeapon = false;
for(int funWeapon: Config.FUN_WEAPONS) {
if(c.playerEquipment[c.playerWeapon] == funWeapon) {
canUseWeapon = true;
}
}
if(!canUseWeapon) {
c.sendMessage("You can only use fun weapons in this duel!");
resetPlayerAttack();
return;
}
}
//c.sendMessage("Made it here3.");
if(c.duelRule[2] && (usingBow || usingOtherRangeWeapons)) {
c.sendMessage("Range has been disabled in this duel!");
return;
}
if(c.duelRule[3] && (!usingBow && !usingOtherRangeWeapons && !c.usingMagic)) {
c.sendMessage("Melee has been disabled in this duel!");
return;
}
if(c.duelRule[4] && c.usingMagic) {
c.sendMessage("Magic has been disabled in this duel!");
resetPlayerAttack();
return;
}
if((!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 4) && (usingOtherRangeWeapons && !usingBow && !c.usingMagic))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 2) && (!usingOtherRangeWeapons && usingHally() && !usingBow && !c.usingMagic))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), getRequiredDistance()) && (!usingOtherRangeWeapons && !usingHally() && !usingBow && !c.usingMagic))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 10) && (usingBow || c.usingMagic))) {
//c.sendMessage("Setting attack timer to 1");
c.attackTimer = 1;
if (!usingBow && !c.usingMagic && !usingOtherRangeWeapons && c.freezeTimer > 0)
resetPlayerAttack();
return;
}
if(!usingCross && !usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223) && !c.usingMagic) {
if(c.playerEquipment[c.playerWeapon] == 15241)
c.sendMessage("You have run out of hand cannon shots!");
else
c.sendMessage("You have run out of arrows!");
c.stopMovement();
resetPlayerAttack();
return;
}
if(correctBowAndArrows() < c.playerEquipment[c.playerArrows] && Config.CORRECT_ARROWS && usingBow && !usingCrystalBow() && c.playerEquipment[c.playerWeapon] != 9185 && !c.usingMagic) {
c.sendMessage("You can't use "+c.getItems().getItemName(c.playerEquipment[c.playerArrows]).toLowerCase()+"s with a "+c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+".");
c.stopMovement();
resetPlayerAttack();
return;
}
if(c.playerEquipment[c.playerArrows] != 15243 && c.playerEquipment[c.playerWeapon] == 15241) {
c.sendMessage("You can't use "+c.getItems().getItemName(c.playerEquipment[c.playerArrows]).toLowerCase()+"s with a "+c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()+".");
c.stopMovement();
c.npcIndex = 0;
return;
}
if (c.playerEquipment[c.playerWeapon] == 9185 && !properBolts() && !c.usingMagic) {
c.sendMessage("You must use bolts with a crossbow.");
c.stopMovement();
resetPlayerAttack();
return;
}
if(usingBow || c.usingMagic || usingOtherRangeWeapons || usingHally()) {
c.stopMovement();
}
if(!checkMagicReqs(c.spellId)) {
c.stopMovement();
resetPlayerAttack();
return;
}
c.faceUpdate(i+32768);
if(c.duelStatus != 5) {
if(!c.attackedPlayers.contains(c.playerIndex) && !Server.playerHandler.players[c.playerIndex].attackedPlayers.contains(c.playerId)) {
c.attackedPlayers.add(c.playerIndex);
c.isSkulled = true;
c.skullTimer = Config.SKULL_TIMER;
c.headIconPk = 0;
c.getPA().requestUpdates();
}
}
c.specAccuracy = 1.0;
c.specDamage = 1.0;
c.delayedDamage = c.delayedDamage2 = 0;
if(c.usingSpecial && !c.usingMagic) {
if(c.duelRule[10] && c.duelStatus == 5) {
c.sendMessage("Special attacks have been disabled during this duel!");
c.usingSpecial = false;
c.getItems().updateSpecialBar();
resetPlayerAttack();
return;
}
if(checkSpecAmount(c.playerEquipment[c.playerWeapon])){
c.lastArrowUsed = c.playerEquipment[c.playerArrows];
activateSpecial(c.playerEquipment[c.playerWeapon], i);
c.followId = c.playerIndex;
return;
} else {
c.sendMessage("You don't have the required special energy to use this attack.");
c.usingSpecial = false;
c.getItems().updateSpecialBar();
c.playerIndex = 0;
return;
}
}
if(!c.usingMagic) {
c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
c.mageFollow = false;
} else {
c.startAnimation(c.MAGIC_SPELLS[c.spellId][2]);
c.mageFollow = true;
c.followId = c.playerIndex;
}
Server.playerHandler.players[i].underAttackBy = c.playerId;
Server.playerHandler.players[i].logoutDelay = System.currentTimeMillis();
Server.playerHandler.players[i].singleCombatDelay = System.currentTimeMillis();
Server.playerHandler.players[i].killerId = c.playerId;
c.lastArrowUsed = 0;
c.rangeItemUsed = 0;
if(!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer(c.playerIndex);
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.delayedDamage = Misc.random(calculateMeleeMaxHit());
c.projectileStage = 0;
c.oldPlayerIndex = i;
}
if(usingBow && !usingOtherRangeWeapons && !c.usingMagic || usingCross || c.playerEquipment[c.playerWeapon] == 15241) { // range hit delay
if(c.playerEquipment[c.playerWeapon] >= 4212 && c.playerEquipment[c.playerWeapon] <= 4223) {
c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
c.crystalBowArrowCount++;
} else {
c.rangeItemUsed = c.playerEquipment[c.playerArrows];
c.getItems().deleteArrow();
}
if (c.fightMode == 2)
c.attackTimer--;
if (usingCross)
c.usingBow = true;
c.usingBow = true;
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer(c.playerIndex);
c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
c.lastArrowUsed = c.playerEquipment[c.playerArrows];
c.gfx100(getRangeStartGFX());
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
c.oldPlayerIndex = i;
fireProjectilePlayer();
}
if(usingOtherRangeWeapons) { // knives, darts, etc hit delay
c.rangeItemUsed = c.playerEquipment[c.playerWeapon];
c.getItems().deleteEquipment();
c.usingRangeWeapon = true;
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer(c.playerIndex);
c.gfx100(getRangeStartGFX());
if (c.fightMode == 2)
c.attackTimer--;
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
c.oldPlayerIndex = i;
fireProjectilePlayer();
}
if(c.usingMagic) { // magic hit delay
Client o = (Client)Server.playerHandler.players[i];
int pX = c.getX();
int pY = c.getY();
int nX = Server.playerHandler.players[i].getX();
int nY = Server.playerHandler.players[i].getY();
int offX = (pY - nY)* -1;
int offY = (pX - nX)* -1;
c.castingMagic = true;
c.projectileStage = 2;
if(c.MAGIC_SPELLS[c.spellId][3] > 0) {
if(getStartGfxHeight() == 100) {
c.gfx100(c.MAGIC_SPELLS[c.spellId][3]);
} else {
c.gfx0(c.MAGIC_SPELLS[c.spellId][3]);
}
}
if (o.freezeTimer > 0) {
o.barrageOrb = 1;
} else if (o.freezeTimer <= 0) {
o.barrageOrb = 0;
}
if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[c.spellId][4], getStartHeight(), getEndHeight(), -i - 1, getStartDelay());
}
if (c.autocastId > 0) {
c.followId = c.playerIndex;
c.followDistance = 5;
}
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.oldPlayerIndex = i;
c.oldSpellId = c.spellId;
c.spellId = 0;
//Client o = (Client)Server.playerHandler.players[i];
if(c.MAGIC_SPELLS[c.oldSpellId][0] == 12891 && o.isMoving) {
//c.sendMessage("Barrage projectile..");
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 85, 368, 25, 25, -i - 1, getStartDelay());
}
if(Misc.random(o.getCombat().mageDef()) > Misc.random(mageAtk())) {
c.magicFailed = true;
} else {
c.magicFailed = false;
}
int freezeDelay = getFreezeTime();//freeze time
if(freezeDelay > 0 && Server.playerHandler.players[i].freezeTimer <= -3 && !c.magicFailed) {
Server.playerHandler.players[i].freezeTimer = freezeDelay;
o.resetWalkingQueue();
o.sendMessage("You have been frozen.");
o.barrageorb = 1;
o.frozenBy = c.playerId;
}
if (!c.autocasting && c.spellId <= 0)
c.playerIndex = 0;
}
if(usingBow && Config.CRYSTAL_BOW_DEGRADES) { // crystal bow degrading
if(c.playerEquipment[c.playerWeapon] == 4212) { // new crystal bow becomes full bow on the first shot
c.getItems().wearItem(4214, 1, 3);
}
if(c.crystalBowArrowCount >= 250){
switch(c.playerEquipment[c.playerWeapon]) {
case 4223: // 1/10 bow
c.getItems().wearItem(-1, 1, 3);
c.sendMessage("Your crystal bow has fully degraded.");
if(!c.getItems().addItem(4207, 1)) {
Server.itemHandler.createGroundItem(c, 4207, c.getX(), c.getY(), 1, c.getId());
}
c.crystalBowArrowCount = 0;
break;
default:
c.getItems().wearItem(++c.playerEquipment[c.playerWeapon], 1, 3);
c.sendMessage("Your crystal bow degrades.");
c.crystalBowArrowCount = 0;
break;
}
}
}
}
}
}
Client.java