Added finaldamage calculation to API.

This commit is contained in:
sigonasr2 2016-08-14 02:32:01 -05:00
parent 1de22e0664
commit ecbe7f9d2b
6 changed files with 127 additions and 22 deletions

Binary file not shown.

View File

@ -58,16 +58,28 @@ public class NewCombat {
* Returns the amount of damage dealt to target. * Returns the amount of damage dealt to target.
*/ */
public static double applyDamage(LivingEntity target, Entity damager) { public static double applyDamage(LivingEntity target, Entity damager) {
return applyDamage(0,target,damager,false);
}
public static double applyDamage(double basedmg, LivingEntity target, Entity damager) {
return applyDamage(basedmg, target,damager,false);
}
public static double applyDamage(double basedmg, LivingEntity target, Entity damager, boolean isCriticalStrike) {
return applyDamage(basedmg, target,damager,false,"Attack Base Damage");
}
public static double applyDamage(double basedmg, LivingEntity target, Entity damager, boolean isCriticalStrike, String reason) {
switch (DamageType.DetectType(target, damager)) { switch (DamageType.DetectType(target, damager)) {
case MOBVSMOB: case MOBVSMOB:
case MOBPROJECTILEVSMOB: case MOBPROJECTILEVSMOB:
case MOBPROJECTILEVSPLAYER: case MOBPROJECTILEVSPLAYER:
case MOBVSPLAYER: { case MOBVSPLAYER: {
return calculateMobDamage(target, damager); return calculateMobDamage(basedmg, target, damager, isCriticalStrike);
} }
case PLAYERPROJECTILEVSMOB: case PLAYERPROJECTILEVSMOB:
case PLAYERVSMOB: { case PLAYERVSMOB: {
return calculatePlayerDamage(target, damager); return calculatePlayerDamage(basedmg, target, damager, isCriticalStrike, reason);
} }
case OTHER: case OTHER:
default: { default: {
@ -85,13 +97,25 @@ public class NewCombat {
} }
ev.setDamage(0); ev.setDamage(0);
} }
public static double calculatePlayerDamage(LivingEntity target, Entity damager) { public static double calculatePlayerDamage(LivingEntity target, Entity damager) {
return calculatePlayerDamage(0,target,damager,false);
}
public static double calculatePlayerDamage(double basedmg,LivingEntity target, Entity damager) {
return calculatePlayerDamage(basedmg,target,damager,false);
}
public static double calculatePlayerDamage(double basedmg,LivingEntity target, Entity damager, boolean isCriticalStrike) {
return calculatePlayerDamage(basedmg,target,damager,isCriticalStrike,"Attack Base Damage");
}
public static double calculatePlayerDamage(double basedmg,LivingEntity target, Entity damager, boolean isCriticalStrike, String reason) {
LivingEntity shooter = getDamagerEntity(damager); LivingEntity shooter = getDamagerEntity(damager);
double finaldmg = 0.0; double finaldmg = 0.0;
if (shooter!=null) { if (shooter!=null) {
finaldmg += calculateTotalDamage(target, damager); finaldmg += calculateTotalDamage(basedmg, target, damager, isCriticalStrike, reason);
if (shooter instanceof Player) { if (shooter instanceof Player) {
Player p = (Player)shooter; Player p = (Player)shooter;
playerPerformMiscActions(p,target); playerPerformMiscActions(p,target);
@ -113,6 +137,14 @@ public class NewCombat {
} }
public static double calculateMobDamage(LivingEntity target, Entity damager) { public static double calculateMobDamage(LivingEntity target, Entity damager) {
return calculateMobDamage(0,target,damager);
}
public static double calculateMobDamage(double basedmg, LivingEntity target, Entity damager) {
return calculateMobDamage(basedmg,target,damager,false);
}
public static double calculateMobDamage(double basedmg, LivingEntity target, Entity damager, boolean isCriticalStrike) {
double totaldmg = 0.0; double totaldmg = 0.0;
double bonusmult = 1.0; double bonusmult = 1.0;
@ -120,8 +152,9 @@ public class NewCombat {
if (shooter!=null) { if (shooter!=null) {
totaldmg += calculateMobBaseDamage((LivingEntity)shooter, target); totaldmg += calculateMobBaseDamage((LivingEntity)shooter, target);
totaldmg += CalculateWeaponDamage(shooter, target); totaldmg += CalculateWeaponDamage(basedmg, shooter, target);
//bonusmult *= calculateMonsterDifficultyMultiplier(shooter); //bonusmult *= calculateMonsterDifficultyMultiplier(shooter);
bonusmult *= (isCriticalStrike)?2.0:1.0;
} else { } else {
totaldmg = 1.0; totaldmg = 1.0;
} }
@ -136,6 +169,18 @@ public class NewCombat {
} }
static double calculateTotalDamage(LivingEntity target, Entity damager) { static double calculateTotalDamage(LivingEntity target, Entity damager) {
return calculateTotalDamage(0, target,damager,false);
}
static double calculateTotalDamage(double basedmg, LivingEntity target, Entity damager) {
return calculateTotalDamage(basedmg, target,damager,false);
}
static double calculateTotalDamage(double basedmg, LivingEntity target, Entity damager, boolean isCriticalStrike) {
return calculateTotalDamage(basedmg,target,damager,isCriticalStrike,"Attack Base Damage");
}
static double calculateTotalDamage(double basedmg, LivingEntity target, Entity damager, boolean isCriticalStrike, String reason) {
double totaldmg = 0.0; //Final damage dealt. It will be multiplied by mult at the end. double totaldmg = 0.0; //Final damage dealt. It will be multiplied by mult at the end.
double bonusmult = 1.0; //Bonus multiplier for damage dealt. double bonusmult = 1.0; //Bonus multiplier for damage dealt.
double armorpendmg = 0.0; double armorpendmg = 0.0;
@ -147,8 +192,8 @@ public class NewCombat {
Player p = (Player)shooter; Player p = (Player)shooter;
ItemStack weapon = p.getEquipment().getItemInMainHand(); ItemStack weapon = p.getEquipment().getItemInMainHand();
totaldmg+=CalculateWeaponDamage(damager, target); totaldmg+=CalculateWeaponDamage(basedmg, damager, target, false, reason);
double mult1 = calculatePlayerCriticalStrike(weapon,damager); double mult1 = calculatePlayerCriticalStrike(weapon,damager,isCriticalStrike);
addMultiplierToPlayerLogger(damager,"Critical Strike Mult",mult1); addMultiplierToPlayerLogger(damager,"Critical Strike Mult",mult1);
if (mult1>1.0) { if (mult1>1.0) {
aPlugin.API.critEntity(target, 15); aPlugin.API.critEntity(target, 15);
@ -487,10 +532,22 @@ public class NewCombat {
} }
public static double CalculateWeaponDamage(Entity damager, LivingEntity target) { public static double CalculateWeaponDamage(Entity damager, LivingEntity target) {
return CalculateWeaponDamage(damager,target,false); return CalculateWeaponDamage(0,damager,target,false);
} }
public static double CalculateWeaponDamage(Entity damager, LivingEntity target, boolean useBow) { public static double CalculateWeaponDamage(Entity damager, LivingEntity target,boolean useBow) {
return CalculateWeaponDamage(0,damager,target,useBow,"Attack Base Damage");
}
public static double CalculateWeaponDamage(double basedmg, Entity damager, LivingEntity target) {
return CalculateWeaponDamage(basedmg, damager,target,false);
}
public static double CalculateWeaponDamage(double basedmg, Entity damager, LivingEntity target, boolean useBow) {
return CalculateWeaponDamage(basedmg, damager,target,false,"Attack Base Damage");
}
public static double CalculateWeaponDamage(double suppliedDmg, Entity damager, LivingEntity target, boolean useBow, String reason) {
double basedmg = 0.0; double basedmg = 0.0;
double basemult = 1.0; double basemult = 1.0;
@ -503,14 +560,19 @@ public class NewCombat {
LivingEntity ent = shooter; LivingEntity ent = shooter;
ItemStack weapon = ent.getEquipment().getItemInMainHand(); ItemStack weapon = ent.getEquipment().getItemInMainHand();
if (GenericFunctions.isArtifactEquip(weapon)) { if (suppliedDmg!=0) {
double dmg = getBaseArtifactDamageByType(weapon); basedmg += suppliedDmg;
addToPlayerLogger(ent,"Weapon Base Damage",dmg); addToPlayerLogger(ent,reason,basedmg);
basedmg += dmg;
} else { } else {
double dmg = getBaseDamageByType(weapon); if (GenericFunctions.isArtifactEquip(weapon)) {
addToPlayerLogger(ent,"Weapon Base Damage",dmg); double dmg = getBaseArtifactDamageByType(weapon);
basedmg += dmg; addToPlayerLogger(ent,"Weapon Base Damage",dmg);
basedmg += dmg;
} else {
double dmg = getBaseDamageByType(weapon);
addToPlayerLogger(ent,"Weapon Base Damage",dmg);
basedmg += dmg;
}
} }
for (int i=0;i<GenericFunctions.getEquipment(shooter).length;i++) { for (int i=0;i<GenericFunctions.getEquipment(shooter).length;i++) {
@ -600,7 +662,11 @@ public class NewCombat {
setPlayerTarget(damager,target,headshot,preemptive); setPlayerTarget(damager,target,headshot,preemptive);
if (shooter instanceof Monster) { if (shooter instanceof Monster) {
basedmg = 1.0 *calculateMonsterDifficultyMultiplier(shooter); if (suppliedDmg!=0) {
basedmg = suppliedDmg;
} else {
basedmg = 1.0 *calculateMonsterDifficultyMultiplier(shooter);
}
TwosideKeeper.log("New Base damage is "+basedmg, 4); TwosideKeeper.log("New Base damage is "+basedmg, 4);
} }
@ -857,17 +923,20 @@ public class NewCombat {
mult*=mult1; mult*=mult1;
return mult; return mult;
} }
static double calculatePlayerCriticalStrike(ItemStack weapon, Entity damager) { static double calculatePlayerCriticalStrike(ItemStack weapon, Entity damager) {
return calculatePlayerCriticalStrike(weapon,damager,false);
}
static double calculatePlayerCriticalStrike(ItemStack weapon, Entity damager, boolean isCriticalStrike) {
boolean criticalstrike=false; boolean criticalstrike=false;
double critchance = 0.0; double critchance = 0.0;
critchance += calculateCriticalStrikeChance(weapon, damager); critchance += calculateCriticalStrikeChance(weapon, damager);
TwosideKeeper.log("Crit Strike chance is "+critchance,4); TwosideKeeper.log("Crit Strike chance is "+critchance,4);
criticalstrike = isCriticalStrike(critchance); criticalstrike = isCriticalStrike(critchance,isCriticalStrike);
if (damager instanceof Player && criticalstrike) { if (damager instanceof Player && criticalstrike) {
Player p = (Player)damager; Player p = (Player)damager;
p.playSound(p.getLocation(), Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f); p.playSound(p.getLocation(), Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
} }
return criticalstrike?(calculateCriticalStrikeMultiplier(weapon)):1.0; return criticalstrike?(calculateCriticalStrikeMultiplier(weapon)):1.0;
} }
@ -889,7 +958,11 @@ public class NewCombat {
//Chance is between 0.0-1.0. 1.0 is 100%. //Chance is between 0.0-1.0. 1.0 is 100%.
static boolean isCriticalStrike(double chance) { static boolean isCriticalStrike(double chance) {
return (Math.random()<=chance); return isCriticalStrike(chance,false);
}
static boolean isCriticalStrike(double chance, boolean isCriticalStrike) {
return (Math.random()<=chance || isCriticalStrike);
} }
static double calculateCriticalStrikeMultiplier(ItemStack weapon) { static double calculateCriticalStrikeMultiplier(ItemStack weapon) {

View File

@ -57,7 +57,7 @@ public class PartyManager {
Player p = partymembers.get(i); Player p = partymembers.get(i);
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
pd.partybonus = (partymembers.size()>=2)?partymembers.size()-1:0; pd.partybonus = (partymembers.size()>=2)?partymembers.size()-1:0;
TwosideKeeper.log("Party bonus is "+pd.partybonus, 2); TwosideKeeper.log("Party bonus is "+pd.partybonus, 5);
TwosideKeeper.log("Adding Player "+p.getName()+" to Scoreboard..", 5); TwosideKeeper.log("Adding Player "+p.getName()+" to Scoreboard..", 5);
Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard players set "+p.getName().toLowerCase()+" Party"+party+" "+((i+1)*-1)); Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard players set "+p.getName().toLowerCase()+" Party"+party+" "+((i+1)*-1));
Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard teams option "+p.getName().toLowerCase()+" color "+color); Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "scoreboard teams option "+p.getName().toLowerCase()+" color "+color);

View File

@ -209,6 +209,9 @@ public class RecyclingCenter {
if (itemmap.containsKey(m)) { if (itemmap.containsKey(m)) {
int amt = itemmap.get(m); int amt = itemmap.get(m);
double chance = (amt/(double)totalitems*100d); double chance = (amt/(double)totalitems*100d);
if (totalitems<200) {
chance=1.00;
}
if (totalitems>0 && chance>=TwosideKeeper.COMMONITEMPCT) { if (totalitems>0 && chance>=TwosideKeeper.COMMONITEMPCT) {
DecimalFormat df = new DecimalFormat("0.00"); DecimalFormat df = new DecimalFormat("0.00");
TwosideKeeper.log(df.format(chance)+"% of items in nodes are "+GenericFunctions.UserFriendlyMaterialName(m)+". Common item detected...", 3); TwosideKeeper.log(df.format(chance)+"% of items in nodes are "+GenericFunctions.UserFriendlyMaterialName(m)+". Common item detected...", 3);

View File

@ -2060,6 +2060,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} }
},1); },1);
} }
/*if (ev.getRightClicked() instanceof Monster) {
TwosideKeeperAPI.DealDamageToEntity(TwosideKeeperAPI.getFinalDamage(500.0, ev.getPlayer(), (Monster)ev.getRightClicked(), true, "ROFL"), (Monster)ev.getRightClicked(), ev.getPlayer());
}*/
///if (ev.getHand()==EquipmentSlot.OFF_HAND) {aPlugin.API.swingOffHand(ev.getPlayer());}; ///if (ev.getHand()==EquipmentSlot.OFF_HAND) {aPlugin.API.swingOffHand(ev.getPlayer());};
} }

View File

@ -169,6 +169,32 @@ public final class TwosideKeeperAPI {
public static void DealDamageToEntity(double dmg, LivingEntity target, Entity damager, String reason) { public static void DealDamageToEntity(double dmg, LivingEntity target, Entity damager, String reason) {
GenericFunctions.DealDamageToMob(dmg, target, damager, null, reason); GenericFunctions.DealDamageToMob(dmg, target, damager, null, reason);
} }
/**
* Gets the final calculated damage with all offensive and defensive multipliers applied. This is a comprehensive
* damage calculation with the entire game's formula packed in.
* @param dmg The amount of base damage to provide. Using 0 uses the weapon the damager is carrying as the source damage.
* @param damager The damager entity. This can include projectiles with a valid shooter, which is later identified as the damager.
* @param target The targeted entity. This is the entity that all defensive calculations and on-hit effects will be applied to.
* @param isCriticalStrike Whether or not this is a forced critical strike.
* @return Returns the final calculated damage with all modifications applied, using the base damage, if provided. Unlike the
* version of this method with the "reason" argument, it will use a generic "Attack Base Damage" reason.
*/
public static double getFinalDamage(double dmg, Entity damager, LivingEntity target, boolean isCriticalStrike) {
return NewCombat.applyDamage(dmg, target, damager, isCriticalStrike);
}
/**
* Gets the final calculated damage with all offensive and defensive multipliers applied. This is a comprehensive
* damage calculation with the entire game's formula packed in.
* @param dmg The amount of base damage to provide. Using 0 uses the weapon the damager is carrying as the source damage.
* @param damager The damager entity. This can include projectiles with a valid shooter, which is later identified as the damager.
* @param target The targeted entity. This is the entity that all defensive calculations and on-hit effects will be applied to.
* @param isCriticalStrike Whether or not this is a forced critical strike.
* @param reason The name of the base damage that will be displayed in the DPS logger.
* @return Returns the final calculated damage with all modifications applied, using the base damage, if provided.
*/
public static double getFinalDamage(double dmg, Entity damager, LivingEntity target, boolean isCriticalStrike, String reason) {
return NewCombat.applyDamage(dmg, target, damager, isCriticalStrike, reason);
}
//Message COMMANDS. //Message COMMANDS.
public static void playMessageNotification(Player sender) { public static void playMessageNotification(Player sender) {