Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Inflicts damage on npc/player
- * replaces fragmented hp subtracting and standardizes hit update data for hitmarks
- */
- public static void inflictDamage(Client c, int i, int damage, int mask, int hitType) {
- Client o = (Client) PlayerHandler.players[i];
- int critical;
- if(!c.castingMagic && c.projectileStage > 0) //range
- critical = 1;
- else if (c.projectileStage > 0)
- critical = 2;
- else if (hitType == 0)
- critical = 0;
- else
- critical = 0;
- if(damage > 20 && Misc.random(2) == 0) {
- damage -= DamageSoak.soakReduce(damage, i, critical);
- } else {
- PlayerHandler.players[i].soak = 0;
- }
- int finaldamage = (PlayerHandler.players[i].playerLevel[3] - damage < 0) ? PlayerHandler.players[i].playerLevel[3] : damage;
- boolean crit = false;
- int M = c.getCombat().calculateMeleeMaxHit();
- int R = c.getCombat().rangeMaxHit();
- int m = c.getCombat().magicMaxHit();
- switch(critical) {
- case 0:
- if(finaldamage >= M)
- crit = true;
- break;
- case 1:
- if(finaldamage >= R)
- crit = true;
- break;
- case 2:
- if(finaldamage >= m)
- crit = true;
- break;
- }
- switch(mask) {
- case 1:
- PlayerHandler.players[i].dealDamage(finaldamage);
- PlayerHandler.players[i].damageTaken[c.playerId] += finaldamage;
- c.totalPlayerDamageDealt += finaldamage;
- PlayerHandler.players[i].updateRequired = true;
- o.getPA().refreshSkill(3);
- break;
- case 2:
- PlayerHandler.players[i].dealDamage(finaldamage);
- PlayerHandler.players[i].damageTaken[c.playerId] += finaldamage;
- c.totalPlayerDamageDealt += finaldamage;
- c.doubleHit = false;
- PlayerHandler.players[i].updateRequired = true;
- o.getPA().refreshSkill(3);
- break;
- }
- PlayerHandler.players[i].crit = crit;
- PlayerHandler.players[i].handleHitMask(finaldamage, hitType, 0);
- /** future extensions (soak, absorb) here */
- }
- public static void inflictDamageNPC(Client c, int i, int damage, int mask, int hitType) {
- int finaldamage = (NPCHandler.npcs[i].HP - damage < 0) ? damage = NPCHandler.npcs[i].HP : damage;
- int critical;
- if(!c.castingMagic && c.projectileStage > 0) //range
- critical = 1;
- else if (c.projectileStage > 0)
- critical = 2;
- else if (hitType == 0)
- critical = 0;
- else
- critical = 0;
- boolean crit = false;
- int M = c.getCombat().calculateMeleeMaxHit();
- int R = c.getCombat().rangeMaxHit();
- int m = c.getCombat().magicMaxHit();
- switch(critical) {
- case 0:
- if(finaldamage >= M)
- crit = true;
- break;
- case 1:
- if(finaldamage >= R)
- crit = true;
- break;
- case 2:
- if(finaldamage >= m)
- crit = true;
- break;
- }
- switch(mask) {
- case 1:
- NPCHandler.npcs[i].hitDiff = finaldamage;
- NPCHandler.npcs[i].HP -= finaldamage;
- c.totalDamageDealt += finaldamage;
- NPCHandler.npcs[i].updateRequired = true;
- break;
- case 2:
- NPCHandler.npcs[i].hitDiff2 = finaldamage;
- NPCHandler.npcs[i].HP -= finaldamage;
- c.totalDamageDealt += finaldamage;
- NPCHandler.npcs[i].updateRequired = true;
- c.doubleHit = false;
- break;
- }
- NPCHandler.npcs[i].handleHitMask(finaldamage, hitType, 0);
- NPCHandler.npcs[i].crit = crit;
- /** future extensions (soak, absorb) here */
- }
Add Comment
Please, Sign In to add comment