Another WIP

This commit is contained in:
nossr50 2011-04-22 17:28:15 -07:00
parent b38dcbe785
commit d1a7e5b661
12 changed files with 328 additions and 371 deletions

View File

@ -16,7 +16,9 @@ import org.bukkit.entity.Zombie;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageByProjectileEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.config.LoadProperties;
@ -26,17 +28,19 @@ import com.gmail.nossr50.skills.Acrobatics;
import com.gmail.nossr50.skills.Axes;
import com.gmail.nossr50.skills.Skills;
import com.gmail.nossr50.skills.Swords;
import com.gmail.nossr50.skills.Taming;
import com.gmail.nossr50.skills.Unarmed;
public class Combat {
private static mcMMO plugin;
public Combat(mcMMO instance) {
plugin = instance;
}
public static void combatChecks(EntityDamageEvent event){
public static void combatChecks(EntityDamageEvent event, Plugin pluginx){
if(event.isCancelled() || event.getDamage() == 0)
return;
/*
* OFFENSIVE CHECKS
* OFFENSIVE CHECKS FOR PLAYERS VERSUS ENTITIES
*/
if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
{
@ -45,27 +49,114 @@ public class Combat {
Player attacker = (Player)((EntityDamageByEntityEvent) event).getDamager();
PlayerProfile PPa = Users.getProfile(attacker);
//Damage modifiers
if(mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0) //Unarmed
Unarmed.unarmedBonus(attacker, eventb);
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker) && PPa.getAxesInt() >= 500)
event.setDamage(event.getDamage()+4);
//If there are any abilities to activate
combatAbilityChecks(attacker, PPa);
//Check for offensive procs
Axes.axeCriticalCheck(attacker, eventb); //Axe Criticals
if(!Config.getInstance().isBleedTracked(event.getEntity())) //Swords Bleed
Swords.bleedCheck(attacker, event.getEntity());
//Modify the event damage if Attacker is Berserk
if(PPa.getBerserkMode())
event.setDamage(event.getDamage() + (event.getDamage() / 2));
//Handle the combat interactions between the Player and the defending entity
if(event.getEntity() instanceof Player)
playerVersusPlayerChecks(eventb, attacker);
if(event.getEntity() instanceof Animals)
playerVersusAnimalsChecks(eventb, attacker);
if(event.getEntity() instanceof Monster)
playerVersusMonsterChecks(eventb, attacker);
if(event.getEntity() instanceof Squid)
playerVersusSquidChecks(eventb, attacker);
//Handle Ability Interactions
if(PPa.getSkullSplitterMode() && m.isAxes(attacker.getItemInHand()))
Axes.applyAoeDamage(attacker, eventb);
if(PPa.getSerratedStrikesMode() && m.isSwords(attacker.getItemInHand()))
Swords.applySerratedStrikes(attacker, eventb);
//Experience
if(event.getEntity() instanceof Player)
{
Player defender = (Player)event.getEntity();
PlayerProfile PPd = Users.getProfile(defender);
if(attacker != null && defender != null && LoadProperties.pvpxp)
{
if(System.currentTimeMillis() >= PPd.getRespawnATS() + 5000 && defender.getHealth() >= 1)
{
if(m.isAxes(attacker.getItemInHand()))
PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
if(m.isSwords(attacker.getItemInHand()))
PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
if(attacker.getItemInHand().getTypeId() == 0)
PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
}
}
}
if(event.getEntity() instanceof Monster)
{
int xp = 0;
if(event.getEntity() instanceof Creeper)
xp = (event.getDamage() * 4) * LoadProperties.xpGainMultiplier;
if(event.getEntity() instanceof Spider)
xp = (event.getDamage() * 3) * LoadProperties.xpGainMultiplier;
if(event.getEntity() instanceof Skeleton)
xp = (event.getDamage() * 2) * LoadProperties.xpGainMultiplier;
if(event.getEntity() instanceof Zombie)
xp = (event.getDamage() * 2) * LoadProperties.xpGainMultiplier;
if(event.getEntity() instanceof PigZombie)
xp = (event.getDamage() * 3) * LoadProperties.xpGainMultiplier;
if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
PPa.addSwordsXP(xp);
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
PPa.addAxesXP(xp);
if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
PPa.addUnarmedXP(xp);
}
Skills.XpCheck(attacker);
//Taming Debug Stuff
if(event.getEntity() instanceof Wolf)
{
attacker.sendMessage("mcMMO Debug: Wolf Owner Name "+Taming.getOwnerName(event.getEntity()));
event.setCancelled(true);
}
}
/*
* OFFENSIVE CHECKS FOR WOLVES VERSUS ENTITIES
*/
if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Wolf){
EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
if(Taming.hasOwner(eventb.getDamager(), pluginx)){
Player master = Taming.getOwner(eventb.getDamager(), pluginx);
PlayerProfile PPo = Users.getProfile(master);
//Sharpened Claws
if(PPo.getTamingInt() >= 750)
{
event.setDamage(event.getDamage() + 2);
}
//Gore
if(Math.random() * 1000 <= PPo.getTamingInt())
{
event.setDamage(event.getDamage() * 2);
if(event.getEntity() instanceof Player)
{
Player target = (Player)event.getEntity();
target.sendMessage(ChatColor.RED+"**STRUCK BY GORE**");
Users.getProfile(target).setBleedTicks(2);
}
else
Config.getInstance().addToBleedQue(event.getEntity());
master.sendMessage(ChatColor.GREEN+"**GORE**");
}
PPo.addTamingXP(event.getDamage() * 4);
master.sendMessage("mcMMO Debug: Event Damage "+event.getDamage());
Skills.XpCheck(master);
}
}
//Another offensive check for Archery
if(event instanceof EntityDamageByProjectileEvent)
@ -81,6 +172,27 @@ public class Combat {
Swords.counterAttackChecks(event);
Acrobatics.dodgeChecks((EntityDamageByEntityEvent)event);
}
/*
* DEFENSIVE CHECKS FOR WOLVES
*/
if(event.getEntity() instanceof Wolf){
if(Taming.hasOwner(event.getEntity(), pluginx))
{
Player master = Taming.getOwner(event.getEntity(), pluginx);
PlayerProfile PPo = Users.getProfile(master);
//Shock-Proof
if((event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) && PPo.getTamingInt() >= 500)
{
event.setDamage(event.getDamage() / 6);
}
//Thick Fur
if(PPo.getTamingInt() >= 250)
event.setDamage(event.getDamage() / 2);
master.sendMessage("mcMMO Debug: Wolf Damage Taken "+event.getDamage());
}
}
}
public static void combatAbilityChecks(Player attacker, PlayerProfile PPa){
@ -92,239 +204,6 @@ public class Combat {
if(PPa.getFistsPreparationMode())
Skills.berserkActivationCheck(attacker, plugin);
}
public static void playerVersusPlayerChecks(EntityDamageByEntityEvent event, Player attacker){
Entity x = event.getEntity();
if(x instanceof Player){
if(LoadProperties.pvp == false){
event.setCancelled(true);
return;
}
PlayerProfile PPa = Users.getProfile(attacker);
Player defender = (Player)x;
PlayerProfile PPd = Users.getProfile(defender);
/*
* COMPATABILITY CHECKS (Stuff that wouldn't happen normally in basically...)
*/
if(Users.getProfile(defender) == null)
Users.addUser(defender);
if(attacker != null && defender != null && Users.getProfile(attacker).inParty() && Users.getProfile(defender).inParty()){
if(Party.getInstance().inSameParty(defender, attacker)){
event.setCancelled(true);
return;
}
}
/*
* AXE CRITICAL CHECK
*/
axeCriticalCheck(attacker, event, x);
if(!Config.getInstance().isBleedTracked(x)){
Swords.bleedCheck(attacker, x);
}
if(defender != null && mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0){
//Bonus just for having unarmed
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(calculateDamage(event, bonus));
//PROC
if(simulateUnarmedProc(attacker)){
Location loc = defender.getLocation();
if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0){
attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
ItemStack item = defender.getItemInHand();
if(item != null){
loc.getWorld().dropItemNaturally(loc, item);
ItemStack itemx = null;
defender.setItemInHand(itemx);
}
}
}
}
/*
* PVP XP
*/
if(attacker != null && defender != null && LoadProperties.pvpxp){
if(PPd.inParty() && PPa.inParty() && Party.getInstance().inSameParty(attacker, defender))
return;
if(System.currentTimeMillis() >= PPd.getRespawnATS() + 5000 && defender.getHealth() >= 1){
if(m.isAxes(attacker.getItemInHand()))
PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
if(m.isSwords(attacker.getItemInHand()))
PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
if(attacker.getItemInHand().getTypeId() == 0)
PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
}
}
/*
* CHECK FOR LEVEL UPS
*/
Skills.XpCheck(attacker);
}
}
public static void playerVersusSquidChecks(EntityDamageByEntityEvent event, Player attacker){
Entity x = event.getEntity();
PlayerProfile PPa = Users.getProfile(attacker);
int type = attacker.getItemInHand().getTypeId();
if(x instanceof Squid){
if(!Config.getInstance().isBleedTracked(x)){
Swords.bleedCheck(attacker, x);
}
Squid defender = (Squid)event.getEntity();
if(m.isSwords(attacker.getItemInHand()) && defender.getHealth() > 0 && mcPermissions.getInstance().swords(attacker)){
PPa.addSwordsXP(10 * LoadProperties.xpGainMultiplier);
}
Skills.XpCheck(attacker);
if(m.isAxes(attacker.getItemInHand())
&& defender.getHealth() > 0
&& mcPermissions.getInstance().axes(attacker)){
PPa.addAxesXP(10 * LoadProperties.xpGainMultiplier);
Skills.XpCheck(attacker);
}
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(PPa.getAxesInt() >= 500){
event.setDamage(calculateDamage(event, 4));
}
}
/*
* UNARMED VS SQUID
*/
if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
if(defender.getHealth() <= 0)
return;
//Bonus just for having unarmed
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(calculateDamage(event, bonus));
//XP
if(defender.getHealth() != 0){
PPa.addUnarmedXP(10 * LoadProperties.xpGainMultiplier);
Skills.XpCheck(attacker);
}
}
}
}
public static void playerVersusAnimalsChecks(EntityDamageByEntityEvent event, Player attacker){
int type = attacker.getItemInHand().getTypeId();
Entity x = event.getEntity();
PlayerProfile PPa = Users.getProfile(attacker);
if(x instanceof Animals){
if(!Config.getInstance().isBleedTracked(x)){
Swords.bleedCheck(attacker, x);
}
Animals defender = (Animals)event.getEntity();
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(defender.getHealth() <= 0)
return;
if(PPa.getAxesInt() >= 500){
event.setDamage(calculateDamage(event, 4));
}
}
if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
//Bonus just for having unarmed
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(calculateDamage(event, bonus));
}
}
}
public static void playerVersusMonsterChecks(EntityDamageByEntityEvent event, Player attacker){
Entity x = event.getEntity();
int type = attacker.getItemInHand().getTypeId();
PlayerProfile PPa = Users.getProfile(attacker);
if(x instanceof Monster){
/*
* AXE PROC CHECKS
*/
axeCriticalCheck(attacker, event, x);
if(!Config.getInstance().isBleedTracked(x)){
Swords.bleedCheck(attacker, x);
}
Monster defender = (Monster)event.getEntity();
if(m.isSwords(attacker.getItemInHand())
&& defender.getHealth() > 0
&& mcPermissions.getInstance().swords(attacker)){
if(!Config.getInstance().isMobSpawnTracked(x)){
if(x instanceof Creeper)
PPa.addSwordsXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
if(x instanceof Spider)
PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
if(x instanceof Skeleton)
PPa.addSwordsXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof Zombie)
PPa.addSwordsXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof PigZombie)
PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
}
Skills.XpCheck(attacker);
}
if(m.isAxes(attacker.getItemInHand())
&& defender.getHealth() > 0
&& mcPermissions.getInstance().axes(attacker)){
if(!Config.getInstance().isMobSpawnTracked(x)){
if(x instanceof Creeper)
PPa.addAxesXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
if(x instanceof Spider)
PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
if(x instanceof Skeleton)
PPa.addAxesXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof Zombie)
PPa.addAxesXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof PigZombie)
PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
}
Skills.XpCheck(attacker);
}
/*
* AXE DAMAGE SCALING && LOOT CHECKS
*/
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(PPa.getAxesInt() >= 500){
event.setDamage(calculateDamage(event, 4));
}
}
if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
if(defender.getHealth() <= 0)
return;
//Bonus just for having unarmed
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(calculateDamage(event, bonus));
//XP
if(!Config.getInstance().isMobSpawnTracked(x)){
if(x instanceof Creeper)
PPa.addUnarmedXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
if(x instanceof Spider)
PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
if(x instanceof Skeleton)
PPa.addUnarmedXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof Zombie)
PPa.addUnarmedXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof PigZombie)
PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
}
Skills.XpCheck(attacker);
}
}
}
public static void archeryCheck(EntityDamageByProjectileEvent event){
Entity y = event.getDamager();
Entity x = event.getEntity();
@ -370,6 +249,20 @@ public class Combat {
}
}
}
/*
* DAMAGE MODIFIER
*/
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(event.getDamage()+1);
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(event.getDamage()+2);
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(event.getDamage()+3);
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(event.getDamage()+4);
if(PPa.getArcheryInt() >= 1000)
event.setDamage(event.getDamage()+5);
/*
* IGNITION
*/
@ -403,19 +296,6 @@ public class Combat {
* Defender is Monster
*/
if(x instanceof Monster){
/*
* TRACK ARROWS USED AGAINST THE ENTITY
*/
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(calculateDamage(event, 1));
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(calculateDamage(event, 2));
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(calculateDamage(event, 3));
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(calculateDamage(event, 4));
if(PPa.getArcheryInt() >= 1000)
event.setDamage(calculateDamage(event, 5));
//XP
if(!Config.getInstance().isMobSpawnTracked(x)){
if(x instanceof Creeper)
@ -430,36 +310,6 @@ public class Combat {
PPa.addArcheryXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
}
}
/*
* Defender is Animals
*/
if(x instanceof Animals){
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(calculateDamage(event, 1));
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(calculateDamage(event, 2));
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(calculateDamage(event, 3));
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(calculateDamage(event, 4));
if(PPa.getArcheryInt() >= 1000)
event.setDamage(calculateDamage(event, 5));
}
/*
* Defender is Squid
*/
if(x instanceof Squid){
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(calculateDamage(event, 1));
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(calculateDamage(event, 2));
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(calculateDamage(event, 3));
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(calculateDamage(event, 4));
if(PPa.getArcheryInt() >= 1000)
event.setDamage(calculateDamage(event, 5));
}
/*
* Attacker is Player
*/
@ -505,38 +355,10 @@ public class Combat {
defender.sendMessage(ChatColor.DARK_RED+"Touched Fuzzy. Felt Dizzy.");
attacker.sendMessage("Target was "+ChatColor.DARK_RED+"Dazed");
}
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(calculateDamage(event, 1));
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(calculateDamage(event, 2));
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(calculateDamage(event, 3));
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(calculateDamage(event, 4));
if(PPa.getArcheryInt() >= 1000)
event.setDamage(calculateDamage(event, 5));
}
}
Skills.XpCheck(attacker);
}
}
public static boolean simulateUnarmedProc(Player player){
PlayerProfile PP = Users.getProfile(player);
if(PP.getUnarmedInt() >= 1000){
if(Math.random() * 4000 <= 1000){
return true;
}
} else {
if(Math.random() * 4000 <= PP.getUnarmedInt()){
return true;
}
}
return false;
}
public static int calculateDamage(EntityDamageEvent event, int dmg){
return event.getDamage() + dmg;
}
public static void dealDamage(Entity target, int dmg){
if(target instanceof Player){
@ -549,38 +371,4 @@ public class Combat {
((Monster) target).damage(dmg);
}
}
public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Entity x){
PlayerProfile PPa = Users.getProfile(attacker);
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(PPa.getAxesInt() >= 750){
if(Math.random() * 1000 <= 750){
if(x instanceof Player){
Player player = (Player)x;
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
}
if(x instanceof Player){
event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
} else {
event.setDamage(event.getDamage() * 2);
}
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
}
} else if(Math.random() * 1000 <= PPa.getAxesInt()){
if(x instanceof Player){
Player player = (Player)x;
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
}
if(x instanceof Player){
event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
} else {
event.setDamage(event.getDamage() * 2);
}
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
}
}
}
}

View File

@ -38,7 +38,47 @@ public class Database {
System.out.println("VendorError: " + ex.getErrorCode());
}
}
//Create the DB structure
public void createStructure(){
Write("CREATE TABLE IF NOT EXISTS `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT," +
"`user` varchar(30) NOT NULL," +
"`lastlogin` int(10) unsigned NOT NULL," +
"`party` varchar(100) NOT NULL DEFAULT ''," +
"PRIMARY KEY (`id`)," +
"UNIQUE KEY `user` (`user`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
Write("CREATE TABLE IF NOT EXISTS `skills` (`user_id` int(10) unsigned NOT NULL," +
"`taming` int(10) unsigned NOT NULL DEFAULT '0'," +
"`mining` int(10) unsigned NOT NULL DEFAULT '0'," +
"`woodcutting` int(10) unsigned NOT NULL DEFAULT '0'," +
"`repair` int(10) unsigned NOT NULL DEFAULT '0'," +
"`unarmed` int(10) unsigned NOT NULL DEFAULT '0'," +
"`herbalism` int(10) unsigned NOT NULL DEFAULT '0'," +
"`excavation` int(10) unsigned NOT NULL DEFAULT '0'," +
"`archery` int(10) unsigned NOT NULL DEFAULT '0'," +
"`swords` int(10) unsigned NOT NULL DEFAULT '0'," +
"`axes` int(10) unsigned NOT NULL DEFAULT '0'," +
"`acrobatics` int(10) unsigned NOT NULL DEFAULT '0'," +
"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
Write("CREATE TABLE IF NOT EXISTS `experience` (`user_id` int(10) unsigned NOT NULL," +
"`taming` int(10) unsigned NOT NULL DEFAULT '0'," +
"`mining` int(10) unsigned NOT NULL DEFAULT '0'," +
"`woodcutting` int(10) unsigned NOT NULL DEFAULT '0'," +
"`repair` int(10) unsigned NOT NULL DEFAULT '0'," +
"`unarmed` int(10) unsigned NOT NULL DEFAULT '0'," +
"`herbalism` int(10) unsigned NOT NULL DEFAULT '0'," +
"`excavation` int(10) unsigned NOT NULL DEFAULT '0'," +
"`archery` int(10) unsigned NOT NULL DEFAULT '0'," +
"`swords` int(10) unsigned NOT NULL DEFAULT '0'," +
"`axes` int(10) unsigned NOT NULL DEFAULT '0'," +
"`acrobatics` int(10) unsigned NOT NULL DEFAULT '0'," +
"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
Write("CREATE TABLE IF NOT EXISTS `spawn` (`user_id` int(10) NOT NULL," +
"`x` int(11) NOT NULL DEFAULT '0'," +
"`y` int(11) NOT NULL DEFAULT '0'," +
"`z` int(11) NOT NULL DEFAULT '0'," +
"`world` varchar(50) NOT NULL DEFAULT ''," +
"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
}
// write query
public boolean Write(String sql) {
try {

View File

@ -700,12 +700,12 @@ public class PlayerProfile
public void skillUpTaming(int newskill){
int x = 0;
if(taming != null){
if(isInt(taming)){
x = Integer.parseInt(taming);
}else {
taming = "0";
x = Integer.parseInt(taming);
}
if(isInt(taming)){
x = Integer.parseInt(taming);
}else {
taming = "0";
x = Integer.parseInt(taming);
}
}
x += newskill;
taming = Integer.toString(x);
@ -1053,7 +1053,7 @@ public class PlayerProfile
x = Integer.parseInt(tamingXP);
}
x += newXP;
acrobaticsXP = String.valueOf(x);
tamingXP = String.valueOf(x);
save();
}
public void addAcrobaticsXP(int newXP)

View File

@ -3,4 +3,4 @@ package com.gmail.nossr50.datatypes;
public class PlayerStat {
public String name;
public int statVal = 0;
}
}

View File

@ -26,7 +26,6 @@ public class m {
* I'm storing my functions/methods in here in an unorganized manner. Spheal with it.
*/
private static mcMMO plugin;
private static mcMMO pluginx;
public m(mcMMO instance) {
plugin = instance;
}
@ -172,7 +171,6 @@ public class m {
for (int cy = -radius; cy <= radius; cy++) {
for (int cz = -radius; cz <= radius; cz++) {
Block block = loc.getWorld().getBlockAt(ox + cx, oy + cy, oz + cz);
//If block is block
if (block.getTypeId() == typeid) {
return true;
}
@ -181,6 +179,7 @@ public class m {
}
return false;
}
public static boolean isPvpEnabled(){
String propertyName = "pvp";
FileReader fr = null;
@ -304,6 +303,35 @@ public class m {
}
public static void mmoHelpCheck(String[] split, Player player, PlayerChatEvent event){
PlayerProfile PP = Users.getProfile(player);
if(split[0].equalsIgnoreCase("/taming")){
event.setCancelled(true);
float skillvalue = (float)PP.getTamingInt();
String percentage = String.valueOf((skillvalue / 1000) * 100);
player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"TAMING"+ChatColor.RED+"[]-----");
player.sendMessage(ChatColor.DARK_GRAY+"XP GAIN: "+ChatColor.WHITE+"Fighting with your wolves");
player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"EFFECTS"+ChatColor.RED+"[]---");
//player.sendMessage(ChatColor.DARK_AQUA+"Tree Feller (ABILITY): "+ChatColor.GREEN+"Make trees explode");
player.sendMessage(ChatColor.DARK_AQUA+"Gore: "+ChatColor.YELLOW+ChatColor.GREEN+"Critical Strike that applies Bleed");
player.sendMessage(ChatColor.DARK_AQUA+"Sharpened Claws: "+ChatColor.YELLOW+ChatColor.GREEN+"Damage Bonus");
player.sendMessage(ChatColor.DARK_AQUA+"Thick Fur: "+ChatColor.YELLOW+ChatColor.GREEN+"Damage Reduction");
player.sendMessage(ChatColor.DARK_AQUA+"Shock Proof: "+ChatColor.YELLOW+ChatColor.GREEN+"Explosive Damage Reduction");
player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"YOUR STATS"+ChatColor.RED+"[]---");
if(PP.getTamingInt() < 250)
player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 250+ SKILL (THICK FUR)");
else
player.sendMessage(ChatColor.RED+"Thick Fur: "+ChatColor.YELLOW+"Halved Damage");
if(PP.getTamingInt() < 500)
player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 500+ SKILL (SHOCK PROOF)");
else
player.sendMessage(ChatColor.RED+"Shock Proof: "+ChatColor.YELLOW+"Explosives do 1/6 normal damage");
if(PP.getTamingInt() < 750)
player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 750+ SKILL (SHARPENED CLAWS)");
else
player.sendMessage(ChatColor.RED+"Sharpened Claws: "+ChatColor.YELLOW+"+2 Damage");
player.sendMessage(ChatColor.RED+"Gore Chance: "+ChatColor.YELLOW+percentage+"%");
//player.sendMessage(ChatColor.RED+"Tree Feller Length: "+ChatColor.YELLOW+ticks+"s");
}
if(split[0].equalsIgnoreCase("/woodcutting")){
event.setCancelled(true);
float skillvalue = (float)PP.getWoodCuttingInt();

View File

@ -99,7 +99,7 @@ public class mcEntityListener extends EntityListener {
if(Party.getInstance().inSameParty(defender, attacker))
event.setCancelled(true);
}
Combat.combatChecks(event);
Combat.combatChecks(event, plugin);
}
/*
* Check to see if the defender took damage so we can apply recently hurt

View File

@ -100,7 +100,8 @@ public class mcMMO extends JavaPlugin {
PluginDescriptionFile pdfFile = this.getDescription();
mcPermissions.initialize(getServer());
mcLoadMySQL();
mcLoadMySQL();
database.createStructure(); //Make Structure
Leaderboard.makeLeaderboards(); //Make the leaderboards
System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );

View File

@ -7,7 +7,9 @@ import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
@ -26,6 +28,7 @@ import com.gmail.nossr50.party.Party;
import com.gmail.nossr50.skills.Herbalism;
import com.gmail.nossr50.skills.Repair;
import com.gmail.nossr50.skills.Skills;
import com.gmail.nossr50.skills.Taming;
public class mcPlayerListener extends PlayerListener {
@ -82,7 +85,6 @@ public class mcPlayerListener extends PlayerListener {
if(mcPermissions.getInstance().motd(player)){
player.sendMessage(ChatColor.BLUE +"This server is running MMO "+plugin.getDescription().getVersion()+" type /"+ChatColor.YELLOW+LoadProperties.mcmmo+ChatColor.BLUE+ " for help.");
player.sendMessage(ChatColor.GREEN+"http://mmo.wikia.com"+ChatColor.BLUE+" - MMO Wiki");
player.sendMessage(ChatColor.DARK_RED+"ATTN: YOUR STATS WILL BE BACK TO NORMAL SHORTLY, WE ARE USING MySQL NOW AND I HAVE TO WRITE A MYSQL QUERY TO UPDATE YOUR STATS!");
}
}
public void onPlayerInteract(PlayerInteractEvent event) {
@ -91,6 +93,14 @@ public class mcPlayerListener extends PlayerListener {
Action action = event.getAction();
Block block = event.getClickedBlock();
//Archery Nerf
if(action == Action.LEFT_CLICK_AIR)
{
if(player.getItemInHand().getTypeId() == 352)
{
Block targetBlock = player.getTargetBlock(null, 20);
player.sendMessage("Target Block TypeID = "+targetBlock.getTypeId());
}
}
if(player.getItemInHand().getTypeId() == 261 && LoadProperties.archeryFireRateLimit){
if(System.currentTimeMillis() < PP.getArcheryShotATS() + 1000){
/*

View File

@ -8,10 +8,46 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import com.gmail.nossr50.Users;
import com.gmail.nossr50.m;
import com.gmail.nossr50.mcPermissions;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.party.Party;
public class Axes {
public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event){
Entity x = event.getEntity();
PlayerProfile PPa = Users.getProfile(attacker);
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(PPa.getAxesInt() >= 750){
if(Math.random() * 1000 <= 750){
if(x instanceof Player){
Player player = (Player)x;
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
}
if(x instanceof Player){
event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
} else {
event.setDamage(event.getDamage() * 2);
}
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
}
} else if(Math.random() * 1000 <= PPa.getAxesInt()){
if(x instanceof Player){
Player player = (Player)x;
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
}
if(x instanceof Player){
event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
} else {
event.setDamage(event.getDamage() * 2);
}
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
}
}
}
public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event){
int targets = 0;
Entity x = event.getEntity();

View File

@ -121,6 +121,8 @@ public class Swords {
{
Player defender = (Player)event.getEntity();
PlayerProfile PPd = Users.getProfile(defender);
if(m.isSwords(defender.getItemInHand())&& mcPermissions.getInstance().swords(defender))
{
if(PPd.getSwordsInt() >= 600)
{
if(Math.random() * 2000 <= 600)
@ -138,6 +140,7 @@ public class Swords {
if(f instanceof Player)
((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
}
}
}
}
}

View File

@ -11,8 +11,8 @@ public class Taming {
public static String getOwnerName(Entity theWolf){
CraftWolf cWolf = (CraftWolf)theWolf;
EntityWolf eWolf = (EntityWolf)cWolf.getHandle();
String playerName = eWolf.v();
String playerName = eWolf.x();
return playerName;
}
public static boolean hasOwner(Entity theWolf, Plugin pluginx){
@ -23,7 +23,7 @@ public class Taming {
}
return false;
}
public Player getOwner(Entity theWolf, Plugin pluginx){
public static Player getOwner(Entity theWolf, Plugin pluginx){
for(Player x : pluginx.getServer().getOnlinePlayers()){
if(x != null && x.getName().equals(getOwnerName(theWolf))){
return x;
@ -31,8 +31,4 @@ public class Taming {
}
return null;
}
public static Taming getInstance() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -1,5 +1,60 @@
package com.gmail.nossr50.skills;
public class Unarmed {
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
import com.gmail.nossr50.Users;
import com.gmail.nossr50.datatypes.PlayerProfile;
public class Unarmed {
public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event)
{
PlayerProfile PPa = Users.getProfile(attacker);
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(event.getDamage()+bonus);
}
public static void disarmProcCheck(Player attacker, Player defender)
{
PlayerProfile PP = Users.getProfile(attacker);
if(PP.getUnarmedInt() >= 1000){
if(Math.random() * 4000 <= 1000){
Location loc = defender.getLocation();
if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
{
attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
ItemStack item = defender.getItemInHand();
if(item != null)
{
loc.getWorld().dropItemNaturally(loc, item);
ItemStack itemx = null;
defender.setItemInHand(itemx);
}
}
}
} else {
if(Math.random() * 4000 <= PP.getUnarmedInt()){
Location loc = defender.getLocation();
if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
{
attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
ItemStack item = defender.getItemInHand();
if(item != null)
{
loc.getWorld().dropItemNaturally(loc, item);
ItemStack itemx = null;
defender.setItemInHand(itemx);
}
}
}
}
}
}