HT spawn sequence + Banner length
Improved the Horntail spawn sequence to better fit the end of the animation with the HT parts assembly. Thanks to Arnah and Zenns. Improved the usage of visual space by the "hint banners" throughout the source.
This commit is contained in:
@@ -825,4 +825,8 @@ Nova PQ: TreasurePQ, level 140+, acessível via portal em NLC.
|
|||||||
|
|
||||||
08 Março 2018,
|
08 Março 2018,
|
||||||
Corrigido levelup contabilizando o stat INT nos ganhos de MP mesmo quando a flag USE_RANDOMIZE_HPMP_GAIN está desativada.
|
Corrigido levelup contabilizando o stat INT nos ganhos de MP mesmo quando a flag USE_RANDOMIZE_HPMP_GAIN está desativada.
|
||||||
Aprimorado comando de item/drop agora permitindo gerar pets.
|
Aprimorado comando de item/drop agora permitindo gerar pets.
|
||||||
|
|
||||||
|
14 Março 2018,
|
||||||
|
Modificado spawn do Horntail, utilizando efeitos de mob ao invés de schedules. Cortesia de Arnah e Zenns.
|
||||||
|
Modificado "hint" banners para usar menor espaço visual.
|
||||||
@@ -1496,7 +1496,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
|||||||
int nxGain = mapitem.getItemId() == 4031865 ? 100 : 250;
|
int nxGain = mapitem.getItemId() == 4031865 ? 100 : 250;
|
||||||
this.getCashShop().gainCash(1, nxGain);
|
this.getCashShop().gainCash(1, nxGain);
|
||||||
|
|
||||||
showHint("You have earned #e#b" + nxGain + " NX#k#n. (" + this.getCashShop().getCash(1) + " NX)");
|
showHint("You have earned #e#b" + nxGain + " NX#k#n. (" + this.getCashShop().getCash(1) + " NX)", 300);
|
||||||
|
|
||||||
this.getMap().pickItemDrop(pickupPacket, mapitem);
|
this.getMap().pickItemDrop(pickupPacket, mapitem);
|
||||||
} else if (MapleInventoryManipulator.addFromDrop(client, mapitem.getItem(), true)) {
|
} else if (MapleInventoryManipulator.addFromDrop(client, mapitem.getItem(), true)) {
|
||||||
@@ -1573,7 +1573,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
|||||||
int nxGain = mapitem.getItemId() == 4031865 ? 100 : 250;
|
int nxGain = mapitem.getItemId() == 4031865 ? 100 : 250;
|
||||||
this.getCashShop().gainCash(1, nxGain);
|
this.getCashShop().gainCash(1, nxGain);
|
||||||
|
|
||||||
showHint("You have earned #e#b" + nxGain + " NX#k#n. (" + this.getCashShop().getCash(1) + " NX)");
|
showHint("You have earned #e#b" + nxGain + " NX#k#n. (" + this.getCashShop().getCash(1) + " NX)", 300);
|
||||||
} else if (useItem(client, mapitem.getItem().getItemId())) {
|
} else if (useItem(client, mapitem.getItem().getItemId())) {
|
||||||
if (mapitem.getItem().getItemId() / 10000 == 238) {
|
if (mapitem.getItem().getItemId() / 10000 == 238) {
|
||||||
this.getMonsterBook().addCard(client, mapitem.getItem().getItemId());
|
this.getMonsterBook().addCard(client, mapitem.getItem().getItemId());
|
||||||
@@ -4939,7 +4939,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
|||||||
if(this.isPartyLeader()) party.assignNewLeader(client);
|
if(this.isPartyLeader()) party.assignNewLeader(client);
|
||||||
PartyOperationHandler.leaveParty(party, mpc, client);
|
PartyOperationHandler.leaveParty(party, mpc, client);
|
||||||
|
|
||||||
client.announceHint("You have reached #blevel 10#k, therefore you must leave your #rstarter party#k.");
|
showHint("You have reached #blevel 10#k, therefore you must leave your #rstarter party#k.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.guildid > 0) {
|
if (this.guildid > 0) {
|
||||||
@@ -7238,7 +7238,11 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void showHint(String msg) {
|
public void showHint(String msg) {
|
||||||
client.announceHint(msg);
|
showHint(msg, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showHint(String msg, int length) {
|
||||||
|
client.announceHint(msg, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showNote() {
|
public void showNote() {
|
||||||
@@ -7993,7 +7997,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!showMsg.isEmpty()) {
|
if(!showMsg.isEmpty()) {
|
||||||
this.showHint("#ePLAYER EQUIPMENTS:#n\r\n\r\n" + showMsg);
|
this.showHint("#ePLAYER EQUIPMENTS:#n\r\n\r\n" + showMsg, 400);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1258,8 +1258,8 @@ public class MapleClient {
|
|||||||
session.write(packet);
|
session.write(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void announceHint(String msg) {
|
public void announceHint(String msg, int length) {
|
||||||
announce(MaplePacketCreator.sendHint(msg, 500, 10));
|
announce(MaplePacketCreator.sendHint(msg, length, 10));
|
||||||
announce(MaplePacketCreator.enableActions());
|
announce(MaplePacketCreator.enableActions());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -355,9 +355,9 @@ public class Commands {
|
|||||||
case "droplimit":
|
case "droplimit":
|
||||||
int dropCount = c.getPlayer().getMap().getDroppedItemCount();
|
int dropCount = c.getPlayer().getMap().getDroppedItemCount();
|
||||||
if(((float) dropCount) / ServerConstants.ITEM_LIMIT_ON_MAP < 0.75f) {
|
if(((float) dropCount) / ServerConstants.ITEM_LIMIT_ON_MAP < 0.75f) {
|
||||||
c.getPlayer().showHint("Current drop count: #b" + dropCount + "#k / #e" + ServerConstants.ITEM_LIMIT_ON_MAP + "#n");
|
c.getPlayer().showHint("Current drop count: #b" + dropCount + "#k / #e" + ServerConstants.ITEM_LIMIT_ON_MAP + "#n", 300);
|
||||||
} else {
|
} else {
|
||||||
c.getPlayer().showHint("Current drop count: #r" + dropCount + "#k / #e" + ServerConstants.ITEM_LIMIT_ON_MAP + "#n");
|
c.getPlayer().showHint("Current drop count: #r" + dropCount + "#k / #e" + ServerConstants.ITEM_LIMIT_ON_MAP + "#n", 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -523,7 +523,7 @@ public class Commands {
|
|||||||
showMsg += "Server QUEST Rate: #e#b" + c.getWorldServer().getQuestRate() + "x#k#n" + "\r\n";
|
showMsg += "Server QUEST Rate: #e#b" + c.getWorldServer().getQuestRate() + "x#k#n" + "\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
player.showHint(showMsg);
|
player.showHint(showMsg, 300);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "rates":
|
case "rates":
|
||||||
@@ -533,7 +533,7 @@ public class Commands {
|
|||||||
showMsg_ += "DROP Rate: #e#b" + player.getDropRate() + "x#k#n" + "\r\n";
|
showMsg_ += "DROP Rate: #e#b" + player.getDropRate() + "x#k#n" + "\r\n";
|
||||||
if(ServerConstants.USE_QUEST_RATE) showMsg_ += "QUEST Rate: #e#b" + c.getWorldServer().getQuestRate() + "x#k#n" + "\r\n";
|
if(ServerConstants.USE_QUEST_RATE) showMsg_ += "QUEST Rate: #e#b" + c.getWorldServer().getQuestRate() + "x#k#n" + "\r\n";
|
||||||
|
|
||||||
player.showHint(showMsg_);
|
player.showHint(showMsg_, 300);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "online":
|
case "online":
|
||||||
@@ -1970,8 +1970,9 @@ public class Commands {
|
|||||||
player.dropMessage(6, s.substring(0, s.length() - 2));
|
player.dropMessage(6, s.substring(0, s.length() - 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
player.dropMessage(6, "There are a total of " + total + " players online.");
|
|
||||||
player.showHint("Players online: #e#r" + total + "#k#n.");
|
//player.dropMessage(6, "There are a total of " + total + " players online.");
|
||||||
|
player.showHint("Players online: #e#r" + total + "#k#n.", 300);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "warpsnowball":
|
case "warpsnowball":
|
||||||
|
|||||||
@@ -553,7 +553,7 @@ public class Equip extends Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void showLevelupMessage(String msg, MapleClient c) {
|
public final void showLevelupMessage(String msg, MapleClient c) {
|
||||||
c.getPlayer().showHint(msg);
|
c.getPlayer().showHint(msg, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setItemExp(int exp) {
|
public void setItemExp(int exp) {
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ public class MapleMonster extends AbstractLoadedMapleLife {
|
|||||||
private Map<Pair<Integer, Integer>, Integer> skillsUsed = new HashMap<>();
|
private Map<Pair<Integer, Integer>, Integer> skillsUsed = new HashMap<>();
|
||||||
private List<Integer> stolenItems = new ArrayList<>();
|
private List<Integer> stolenItems = new ArrayList<>();
|
||||||
private int team;
|
private int team;
|
||||||
|
private int parentMobOid = 0;
|
||||||
private final HashMap<Integer, AtomicInteger> takenDamage = new HashMap<>();
|
private final HashMap<Integer, AtomicInteger> takenDamage = new HashMap<>();
|
||||||
|
|
||||||
private Lock externalLock = new MonitoredReentrantLock(MonitoredLockType.MOB_EXT);
|
private Lock externalLock = new MonitoredReentrantLock(MonitoredLockType.MOB_EXT);
|
||||||
@@ -128,6 +129,14 @@ public class MapleMonster extends AbstractLoadedMapleLife {
|
|||||||
public void setMap(MapleMap map) {
|
public void setMap(MapleMap map) {
|
||||||
this.map = map;
|
this.map = map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getParentMobOid() {
|
||||||
|
return parentMobOid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParentMobOid(int parentMobId) {
|
||||||
|
this.parentMobOid = parentMobId;
|
||||||
|
}
|
||||||
|
|
||||||
public int getHp() {
|
public int getHp() {
|
||||||
return hp.get();
|
return hp.get();
|
||||||
@@ -497,6 +506,9 @@ public class MapleMonster extends AbstractLoadedMapleLife {
|
|||||||
for (Integer mid : toSpawn) {
|
for (Integer mid : toSpawn) {
|
||||||
final MapleMonster mob = MapleLifeFactory.getMonster(mid);
|
final MapleMonster mob = MapleLifeFactory.getMonster(mid);
|
||||||
mob.setPosition(getPosition());
|
mob.setPosition(getPosition());
|
||||||
|
mob.setFh(getFh());
|
||||||
|
mob.setParentMobOid(getObjectId());
|
||||||
|
|
||||||
if (dropsDisabled()) {
|
if (dropsDisabled()) {
|
||||||
mob.disableDrops();
|
mob.disableDrops();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3534,50 +3534,48 @@ public class MapleMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void spawnHorntailOnGroundBelow(final Point targetPoint) { // ayy lmao
|
public void spawnHorntailOnGroundBelow(final Point targetPoint) { // ayy lmao
|
||||||
spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(8810026), targetPoint);
|
MapleMonster htIntro = MapleLifeFactory.getMonster(8810026);
|
||||||
TimerManager.getInstance().schedule(new Runnable() {
|
spawnMonsterOnGroundBelow(htIntro, targetPoint);
|
||||||
|
|
||||||
|
final MapleMonster ht = MapleLifeFactory.getMonster(8810018);
|
||||||
|
ht.setParentMobOid(htIntro.getObjectId());
|
||||||
|
ht.addListener(new MonsterListener() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void monsterKilled(int aniTime) {}
|
||||||
final MapleMonster ht = MapleLifeFactory.getMonster(8810018);
|
|
||||||
ht.addListener(new MonsterListener() {
|
|
||||||
@Override
|
|
||||||
public void monsterKilled(int aniTime) {}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void monsterDamaged(MapleCharacter from, int trueDmg) {
|
public void monsterDamaged(MapleCharacter from, int trueDmg) {
|
||||||
ht.addHp(trueDmg);
|
ht.addHp(trueDmg);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void monsterHealed(int trueHeal) {
|
|
||||||
ht.addHp(-trueHeal);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
spawnMonsterOnGroundBelow(ht, targetPoint);
|
|
||||||
|
|
||||||
for (int x = 8810002; x <= 8810009; x++) {
|
|
||||||
MapleMonster m = MapleLifeFactory.getMonster(x);
|
|
||||||
|
|
||||||
m.addListener(new MonsterListener() {
|
|
||||||
@Override
|
|
||||||
public void monsterKilled(int aniTime) {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void monsterDamaged(MapleCharacter from, int trueDmg) {
|
|
||||||
ht.applyAndGetHpDamage(trueDmg, true);
|
|
||||||
ht.broadcastMobHpBar(from);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void monsterHealed(int trueHeal) {
|
|
||||||
ht.addHp(trueHeal);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
spawnMonsterOnGroundBelow(m, targetPoint);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}, 5 * 1000);
|
@Override
|
||||||
|
public void monsterHealed(int trueHeal) {
|
||||||
|
ht.addHp(-trueHeal);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
spawnMonsterOnGroundBelow(ht, targetPoint);
|
||||||
|
|
||||||
|
for (int x = 8810002; x <= 8810009; x++) {
|
||||||
|
MapleMonster m = MapleLifeFactory.getMonster(x);
|
||||||
|
m.setParentMobOid(htIntro.getObjectId());
|
||||||
|
|
||||||
|
m.addListener(new MonsterListener() {
|
||||||
|
@Override
|
||||||
|
public void monsterKilled(int aniTime) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void monsterDamaged(MapleCharacter from, int trueDmg) {
|
||||||
|
ht.applyAndGetHpDamage(trueDmg, true);
|
||||||
|
ht.broadcastMobHpBar(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void monsterHealed(int trueHeal) {
|
||||||
|
ht.addHp(trueHeal);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
spawnMonsterOnGroundBelow(m, targetPoint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1428,18 +1428,41 @@ public class MaplePacketCreator {
|
|||||||
mplew.write(life.getStance());
|
mplew.write(life.getStance());
|
||||||
mplew.writeShort(0); //Origin FH //life.getStartFh()
|
mplew.writeShort(0); //Origin FH //life.getStartFh()
|
||||||
mplew.writeShort(life.getFh());
|
mplew.writeShort(life.getFh());
|
||||||
|
|
||||||
if (effect > 0) {
|
|
||||||
mplew.write(effect);
|
/**
|
||||||
mplew.write(0);
|
* -4: Fake
|
||||||
mplew.writeShort(0);
|
* -3: Appear after linked mob is dead
|
||||||
if (effect == 15) {
|
* -2: Fade in
|
||||||
mplew.write(0);
|
* 1: Smoke
|
||||||
|
* 3: King Slime spawn
|
||||||
|
* 4: Summoning rock thing, used for 3rd job?
|
||||||
|
* 6: Magical shit
|
||||||
|
* 7: Smoke shit
|
||||||
|
* 8: 'The Boss'
|
||||||
|
* 9/10: Grim phantom shit?
|
||||||
|
* 11/12: Nothing?
|
||||||
|
* 13: Frankenstein
|
||||||
|
* 14: Angry ^
|
||||||
|
* 15: Orb animation thing, ??
|
||||||
|
* 16: ??
|
||||||
|
* 19: Mushroom kingdom boss thing
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (life.getParentMobOid() != 0) {
|
||||||
|
MapleMonster parentMob = life.getMap().getMonsterByOid(life.getParentMobOid());
|
||||||
|
if(parentMob != null && parentMob.isAlive()) {
|
||||||
|
mplew.write(effect != 0 ? effect : -3);
|
||||||
|
mplew.writeInt(life.getParentMobOid());
|
||||||
|
} else {
|
||||||
|
mplew.write(newSpawn ? -2 : -1);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
mplew.write(newSpawn ? -2 : -1);
|
||||||
}
|
}
|
||||||
mplew.write(newSpawn ? -2 : -1);
|
|
||||||
mplew.write(life.getTeam());
|
mplew.write(life.getTeam());
|
||||||
mplew.writeInt(0);
|
mplew.writeInt(0); // getItemEffect
|
||||||
return mplew.getPacket();
|
return mplew.getPacket();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user