Hello,
The problem is, in wilderness, a lvl 126 can attack a lvl 3.
How to fix that?
Public boolean checkreqs()
Code:
public boolean checkReqs() {
if(Server.playerHandler.players[c.playerIndex] == null) {
return false;
}
if(Server.playerHandler.players[c.playerIndex].confirmScreen || c.confirmScreen)
return false;
if (c.playerIndex == c.playerId)
return false;
if (c.inPits && Server.playerHandler.players[c.playerIndex].inPits)
return true;
if(Server.playerHandler.players[c.playerIndex].inDuelArena() && c.duelStatus != 5 && !c.usingMagic) {
if(c.arenas() || c.duelStatus == 5) {
c.sendMessage("You can't challenge inside the arena!");
return false;
}
c.getTradeAndDuel().requestDuel(c.playerIndex);
return false;
}
if(c.duelStatus == 5 && Server.playerHandler.players[c.playerIndex].duelStatus == 5) {
if(Server.playerHandler.players[c.playerIndex].duelingWith == c.getId()) {
return true;
} else {
c.sendMessage("This isn't your opponent!");
return false;
}
}
if(!Server.playerHandler.players[c.playerIndex].inWild()) {
c.sendMessage("That player is not in the wilderness.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
if(!c.inWild()) {
c.sendMessage("You are not in the wilderness.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
if(Config.COMBAT_LEVEL_DIFFERENCE) {
int combatDif1 = c.getCombat().getCombatDifference(c.combatLevel, Server.playerHandler.players[c.playerIndex].combatLevel);
if(combatDif1 > c.wildLevel || combatDif1 > Server.playerHandler.players[c.playerIndex].wildLevel) {
c.sendMessage("Your combat level difference is too great to attack that player here.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
}
if(Config.SINGLE_AND_MULTI_ZONES) {
if(!Server.playerHandler.players[c.playerIndex].inMulti()) { // single combat zones
if(Server.playerHandler.players[c.playerIndex].underAttackBy != c.playerId && Server.playerHandler.players[c.playerIndex].underAttackBy != 0) {
c.sendMessage("That player is already in combat.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
if(Server.playerHandler.players[c.playerIndex].playerId != c.underAttackBy && c.underAttackBy != 0 || c.underAttackBy2 > 0) {
c.sendMessage("You are already in combat.");
c.stopMovement();
c.getCombat().resetPlayerAttack();
return false;
}
}
}
return true;
}
Public void attackplayer()
Code:
public void attackPlayer(int i) {
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(!c.getCombat().checkReqs()) {
return;
}
Client o = (Client) Server.playerHandler.players[i];
if(c.ringOfStone || o.ringOfStone)
return;
if(o.wildRocks ||
o.wildBalance ||
o.wildPipe ||
o.endWildPipe ||
o.pipeAnim ||
o.endAnim ||
o.pipe ||
o.log ||
o.net ||
o.balance ||
o.tree ||
!o.canWalk) {
return;
}
if(c.getPA().activeTimers()) {
return;
}
if(o.getPA().activeTimers()) {
return;
}
if(!c.goodDistance(Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), c.getX(), c.getY(), 25)) {
resetPlayerAttack();
return;
}
if(Server.playerHandler.players[i].respawnTimer > 0) {
Server.playerHandler.players[i].playerIndex = 0;
resetPlayerAttack();
return;
}
if (c.getX() == Server.playerHandler.players[i].getX() && c.getY() == Server.playerHandler.players[i].getY()) {
Client opponent = (Client) Server.playerHandler.players[i];
opponent.getPA().walkTo(0, -1);
}
if(c.attackTimer > 0) {
c.attackTimer -= getHybridSubtraction();
}
if(c.attackTimer <= 0) {
if(c.spellId > -1 || c.autocasting) {
c.usingMagic = true;
} else {
c.usingMagic = false;
}
c.hasNotHit = true;
c.usingBow = false;
c.specEffect = 0;
c.usingRangeWeapon = false;
c.rangeItemUsed = 0;
c.attackTimer = getAttackDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
boolean usingBow = false;
boolean usingArrows = false;
boolean usingOtherRangeWeapons = false;
c.projectileStage = 0;
c.bowSpecShot = 0;
if (c.autocasting) {
c.spellId = c.autocastId;
c.oldSpellId = c.autocastId;
c.usingMagic = true;
}
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.duelRule[9]){
boolean canUseWeapon = false;
for(int funWeapon: Config.FUN_WEAPONS) {
if(c.playerEquipment[c.playerWeapon] == funWeapon) {
canUseWeapon = true;
break;
}
}
if(!canUseWeapon) {
c.sendMessage("You can only use fun weapons in this duel!");
resetPlayerAttack();
return;
}
}
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.autocastId <= 0)) {
c.sendMessage("Melee has been disabled in this duel!");
return;
}
if((!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 4) && (usingOtherRangeWeapons && !usingBow && !c.usingMagic && !c.autocasting))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 2) && (!usingOtherRangeWeapons && usingHally() && !usingBow && !c.usingMagic && !c.autocasting))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), getRequiredDistance()) && (!usingOtherRangeWeapons && !usingHally() && !usingBow && !c.usingMagic && !c.autocasting))
|| (!c.goodDistance(c.getX(), c.getY(), Server.playerHandler.players[i].getX(), Server.playerHandler.players[i].getY(), 6) && (usingBow || c.usingMagic || c.autocasting))) {
c.attackTimer = 2;
return;
}
if(!usingArrows && usingBow && (c.playerEquipment[c.playerWeapon] < 4212 || c.playerEquipment[c.playerWeapon] > 4223)) {
c.sendMessage("You have run out of arrows!");
c.stopMovement();
resetPlayerAttack();
return;
}
if(!correctBowAndArrows() && Config.CORRECT_ARROWS && usingBow) {
c.sendMessage("You can't use "+c.getItems().getItemName(c.playerEquipment[c.playerArrows])+"s with a "+c.getItems().getItemName(c.playerEquipment[c.playerWeapon])+".");
c.stopMovement();
resetPlayerAttack();
return;
}
if(!checkMagicReqs(c.spellId)) {
c.stopMovement();
resetPlayerAttack();
return;
}
c.faceUpdate(i+32768);
if(c.duelStatus != 5 && !c.inPits) {
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.skullIcon = 0;
c.getPA().requestUpdates();
}
}
if(usingBow || c.usingMagic || usingOtherRangeWeapons || usingHally()) {
c.stopMovement();
}
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])){
activateSpecial(c.playerEquipment[c.playerWeapon], i);
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
return;
} else {
c.sendMessage("You don't have the required special energy to use this attack.");
c.usingSpecial = false;
c.getItems().updateSpecialBar();
resetPlayerAttack();
return;
}
}
c.specMaxHitIncrease = 0;
if(!c.usingMagic) {
c.startAnimation(getWepAnim(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase()));
c.mageFollow = false;
} else {
c.startAnimation(c.MAGIC_SPELLS[getMagicIndex()][2]);
c.mageFollow = true;
c.followId = c.playerIndex;
}
if(!usingBow && !c.usingMagic && !usingOtherRangeWeapons) { // melee hit delay
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer();
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 0;
c.oldPlayerIndex = i;
}
if(usingBow && !usingOtherRangeWeapons) { // 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();
}
c.usingBow = true;
c.followId = Server.playerHandler.players[c.playerIndex].playerId;
c.getPA().followPlayer();
c.lastWeaponUsed = c.playerEquipment[c.playerWeapon];
c.gfx100(getRangeStartGFX());
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
c.oldPlayerIndex = i;
}
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.gfx100(getRangeStartGFX());
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.projectileStage = 1;
c.oldPlayerIndex = i;
}
if(c.usingMagic) { // magic hit delay
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.autocastId > 0) {
c.followId = c.playerIndex;
c.followDistance = 5;
}
if(c.MAGIC_SPELLS[getMagicIndex()][3] > 0) {
if(getStartGfxHeight() == 100) {
c.gfx100(c.MAGIC_SPELLS[getMagicIndex()][3]);
} else {
c.gfx0(c.MAGIC_SPELLS[getMagicIndex()][3]);
}
}
if(c.MAGIC_SPELLS[c.spellId][4] > 0) {
c.getPA().createPlayersProjectile(pX, pY, offX, offY, 50, 78, c.MAGIC_SPELLS[getMagicIndex()][4], getStartHeight(), getEndHeight(), -i - 1, getStartDelay());
}
c.hitDelay = getHitDelay(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
c.oldPlayerIndex = i;
c.oldSpellId = c.spellId;
c.spellId = -1;
if(!c.autocasting)
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;
}
}
}
}
}
}
Attackplayer class I have this:
Code:
c.faceUpdate(c.playerIndex);
if(!c.getCombat().checkReqs()) {
break;
}
Magic:
Code:
if(!c.getCombat().checkReqs()) {
break;
}
Config class:
public static final boolean COMBAT_LEVEL_DIFFERENCE = true; // wildy levels and combat level differences matters
Any problems in this?