Crafters & keybinding & commands fix + updated MobBook info
Fixed player receiving DOT even if protected on Orbis Tower <B2>, added HPbar on Rombot, fixed keybinding issue with clashing skill-item id's, fixed some mischeckings on NPC crafters, fixed "travelling events" sending players to random spawnpoints when arriving, fixed hair&face commands, fixed dispel effect not showing to others, updated drop data on mobbook.
This commit is contained in:
@@ -1315,7 +1315,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
||||
byte value = (byte)mbs.getValue().value;
|
||||
|
||||
if(value == 1 && thisMap.getReturnMapId() == 211000000) return true; //protection from cold
|
||||
else if(value == 2 && thisMap.getReturnMapId() == 230000000) return true; //breathing underwater
|
||||
else if(value == 2 && (thisMap.getReturnMapId() == 211000000 || thisMap.getReturnMapId() == 230000000)) return true; //breathing underwater
|
||||
else return false;
|
||||
}
|
||||
}
|
||||
@@ -2035,6 +2035,11 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
||||
extraRecoveryTask = TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (getBuffSource(MapleBuffStat.HPREC) == -1 && getBuffSource(MapleBuffStat.MPREC) == -1) {
|
||||
stopExtraTask();
|
||||
return;
|
||||
}
|
||||
|
||||
if(hp < localmaxhp) {
|
||||
if(healHP > 0) {
|
||||
client.announce(MaplePacketCreator.showOwnRecovery(healHP));
|
||||
@@ -3457,7 +3462,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
||||
public Map<Skill, SkillEntry> getSkills() {
|
||||
return Collections.unmodifiableMap(skills);
|
||||
}
|
||||
|
||||
|
||||
public int getSkillLevel(int skill) {
|
||||
SkillEntry ret = skills.get(SkillFactory.getSkill(skill));
|
||||
if (ret == null) {
|
||||
@@ -4979,16 +4984,35 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
||||
}
|
||||
} else if (effect.isRecovery()) {
|
||||
int healInterval = (ServerConstants.USE_ULTRA_RECOVERY) ? 2500 : 5000;
|
||||
|
||||
final byte heal = (byte) effect.getX();
|
||||
recoveryTask = TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
addHP(heal);
|
||||
client.announce(MaplePacketCreator.showOwnRecovery(heal));
|
||||
getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showRecovery(id, heal), false);
|
||||
}
|
||||
}, healInterval, healInterval);
|
||||
|
||||
chrLock.lock();
|
||||
try {
|
||||
recoveryTask = TimerManager.getInstance().register(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (getBuffSource(MapleBuffStat.RECOVERY) == -1) {
|
||||
chrLock.lock();
|
||||
try {
|
||||
if (recoveryTask != null) {
|
||||
recoveryTask.cancel(false);
|
||||
recoveryTask = null;
|
||||
}
|
||||
} finally {
|
||||
chrLock.unlock();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
addHP(heal);
|
||||
client.announce(MaplePacketCreator.showOwnRecovery(heal));
|
||||
getMap().broadcastMessage(MapleCharacter.this, MaplePacketCreator.showRecovery(id, heal), false);
|
||||
}
|
||||
}, healInterval, healInterval);
|
||||
} finally {
|
||||
chrLock.unlock();
|
||||
}
|
||||
} else if (effect.isDojoBuff() || effect.getSourceId() == 2022337) {
|
||||
boolean isRecoveryBuff = false;
|
||||
if(effect.getHpRRate() > 0) {
|
||||
|
||||
@@ -1548,21 +1548,31 @@ public class Commands {
|
||||
victim.updateSingleStat(MapleStat.FAME, victim.getFame());
|
||||
break;
|
||||
|
||||
case "giftnx":
|
||||
case "givenx":
|
||||
if (sub.length < 3){
|
||||
player.yellowMessage("Syntax: !giftnx <playername> <gainnx>");
|
||||
player.yellowMessage("Syntax: !givenx <playername> <gainnx>");
|
||||
break;
|
||||
}
|
||||
cserv.getPlayerStorage().getCharacterByName(sub[1]).getCashShop().gainCash(1, Integer.parseInt(sub[2]));
|
||||
player.message("NX given.");
|
||||
break;
|
||||
|
||||
case "vp":
|
||||
if (sub.length < 2){
|
||||
player.yellowMessage("Syntax: !vp <gainvotepoint>");
|
||||
case "givevp":
|
||||
if (sub.length < 3){
|
||||
player.yellowMessage("Syntax: !givevp <playername> <gainvotepoint>");
|
||||
break;
|
||||
}
|
||||
c.addVotePoints(Integer.parseInt(sub[1]));
|
||||
cserv.getPlayerStorage().getCharacterByName(sub[1]).getClient().addVotePoints(Integer.parseInt(sub[2]));
|
||||
player.message("VP given.");
|
||||
break;
|
||||
|
||||
case "givems":
|
||||
if (sub.length < 3){
|
||||
player.yellowMessage("Syntax: !givemx <playername> <gainmx>");
|
||||
break;
|
||||
}
|
||||
cserv.getPlayerStorage().getCharacterByName(sub[1]).gainMeso(Integer.parseInt(sub[2]), true);
|
||||
player.message("MESO given.");
|
||||
break;
|
||||
|
||||
case "id":
|
||||
@@ -1871,6 +1881,79 @@ public class Commands {
|
||||
}
|
||||
break;
|
||||
|
||||
case "face":
|
||||
if (sub.length < 2){
|
||||
player.yellowMessage("Syntax: !face [<playername>] <faceid>");
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
if (sub.length == 2) {
|
||||
int itemId = Integer.parseInt(sub[1]);
|
||||
if(!(itemId >= 20000 && itemId < 22000) || MapleItemInformationProvider.getInstance().getName(itemId) == null) {
|
||||
player.yellowMessage("Face id '" + sub[1] + "' does not exist.");
|
||||
break;
|
||||
}
|
||||
|
||||
player.setFace(itemId);
|
||||
player.updateSingleStat(MapleStat.FACE, itemId);
|
||||
player.equipChanged();
|
||||
} else {
|
||||
int itemId = Integer.parseInt(sub[2]);
|
||||
if(!(itemId >= 20000 && itemId < 22000) || MapleItemInformationProvider.getInstance().getName(itemId) == null) {
|
||||
player.yellowMessage("Face id '" + sub[2] + "' does not exist.");
|
||||
break;
|
||||
}
|
||||
|
||||
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
|
||||
if(victim == null) {
|
||||
player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
|
||||
break;
|
||||
}
|
||||
victim.setFace(itemId);
|
||||
victim.updateSingleStat(MapleStat.FACE, itemId);
|
||||
victim.equipChanged();
|
||||
}
|
||||
} catch(Exception e) {}
|
||||
|
||||
break;
|
||||
|
||||
case "hair":
|
||||
if (sub.length < 2){
|
||||
player.yellowMessage("Syntax: !hair [<playername>] <hairid>");
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
if (sub.length == 2) {
|
||||
int itemId = Integer.parseInt(sub[1]);
|
||||
if(!(itemId >= 30000 && itemId < 32000) || MapleItemInformationProvider.getInstance().getName(itemId) == null) {
|
||||
player.yellowMessage("Hair id '" + sub[1] + "' does not exist.");
|
||||
break;
|
||||
}
|
||||
|
||||
player.setHair(itemId);
|
||||
player.updateSingleStat(MapleStat.HAIR, itemId);
|
||||
player.equipChanged();
|
||||
} else {
|
||||
int itemId = Integer.parseInt(sub[2]);
|
||||
if(!(itemId >= 30000 && itemId < 32000) || MapleItemInformationProvider.getInstance().getName(itemId) == null) {
|
||||
player.yellowMessage("Hair id '" + sub[2] + "' does not exist.");
|
||||
break;
|
||||
}
|
||||
|
||||
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
|
||||
if(victim == null) {
|
||||
player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
|
||||
break;
|
||||
}
|
||||
victim.setHair(itemId);
|
||||
victim.updateSingleStat(MapleStat.HAIR, itemId);
|
||||
victim.equipChanged();
|
||||
}
|
||||
} catch(Exception e) {}
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -2053,57 +2136,6 @@ public class Commands {
|
||||
player.playerNPC(c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]), Integer.parseInt(sub[2]));
|
||||
break;
|
||||
|
||||
case "face":
|
||||
if (sub.length < 2){
|
||||
player.yellowMessage("Syntax: !face [<playername>] <faceid>");
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
if (sub.length == 2) {
|
||||
player.setFace(Integer.parseInt(sub[1]));
|
||||
player.equipChanged();
|
||||
} else {
|
||||
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
|
||||
if(victim == null) {
|
||||
player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
|
||||
break;
|
||||
}
|
||||
victim.setFace(Integer.parseInt(sub[2]));
|
||||
victim.equipChanged();
|
||||
}
|
||||
} catch(Exception e) {}
|
||||
|
||||
break;
|
||||
|
||||
case "hair":
|
||||
if (sub.length < 2){
|
||||
player.yellowMessage("Syntax: !hair [<playername>] <hairid>");
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
if (sub.length == 2) {
|
||||
player.setHair(Integer.parseInt(sub[1]));
|
||||
player.equipChanged();
|
||||
|
||||
player.getMap().removePlayer(player);
|
||||
player.getMap().addPlayer(player);
|
||||
} else {
|
||||
victim = c.getChannelServer().getPlayerStorage().getCharacterByName(sub[1]);
|
||||
if(victim == null) {
|
||||
player.yellowMessage("Player '" + sub[1] + "' has not been found on this channel.");
|
||||
break;
|
||||
}
|
||||
victim.setHair(Integer.parseInt(sub[2]));
|
||||
victim.equipChanged();
|
||||
|
||||
victim.getMap().removePlayer(victim);
|
||||
victim.getMap().addPlayer(victim);
|
||||
}
|
||||
} catch(Exception e) {}
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user