📄 maplecharacter.java
字号:
private void deregisterBuffStats(List<MapleBuffStat> stats) {
List<MapleBuffStatValueHolder> effectsToCancel = new ArrayList<MapleBuffStatValueHolder>(stats.size());
for (MapleBuffStat stat : stats) {
MapleBuffStatValueHolder mbsvh = effects.get(stat);
if (mbsvh != null) {
effects.remove(stat);
boolean addMbsvh = true;
for (MapleBuffStatValueHolder contained : effectsToCancel) {
if (mbsvh.startTime == contained.startTime && contained.effect == mbsvh.effect) {
addMbsvh = false;
}
}
if (addMbsvh) {
effectsToCancel.add(mbsvh);
}
if (stat == MapleBuffStat.SUMMON || stat == MapleBuffStat.PUPPET) {
int summonId = mbsvh.effect.getSourceId();
MapleSummon summon = summons.get(summonId);
if(summon != null) {
getMap().broadcastMessage(MaplePacketCreator.removeSpecialMapObject(this, summonId, true), summon.getPosition());
getMap().removeMapObject(summon);
removeVisibleMapObject(summon);
summons.remove(summonId);
}
} else if (stat == MapleBuffStat.DRAGONBLOOD) {
dragonBloodSchedule.cancel(false);
dragonBloodSchedule = null;
}
}
}
for (MapleBuffStatValueHolder cancelEffectCancelTasks : effectsToCancel) {
if (getBuffStats(cancelEffectCancelTasks.effect, cancelEffectCancelTasks.startTime).size() == 0) {
cancelEffectCancelTasks.schedule.cancel(false);
}
}
}
/**
* @param effect
* @param overwrite when overwrite is set no data is sent and all the Buffstats in the StatEffect are deregistered
* @param startTime
*/
public void cancelEffect(MapleStatEffect effect, boolean overwrite, long startTime) {
List<MapleBuffStat> buffstats;
if (!overwrite) {
buffstats = getBuffStats(effect, startTime);
} else {
List<Pair<MapleBuffStat, Integer>> statups = effect.getStatups();
buffstats = new ArrayList<MapleBuffStat>(statups.size());
for (Pair<MapleBuffStat, Integer> statup : statups) {
buffstats.add(statup.getLeft());
}
}
deregisterBuffStats(buffstats);
if (effect.isMagicDoor()) {
// remove for all on maps
if (!getDoors().isEmpty()) {
MapleDoor door = getDoors().iterator().next();
for (MapleCharacter chr : door.getTarget().getCharacters()) {
door.sendDestroyData(chr.getClient());
}
for (MapleCharacter chr : door.getTown().getCharacters()) {
door.sendDestroyData(chr.getClient());
}
for (MapleDoor destroyDoor : getDoors()) {
door.getTarget().removeMapObject(destroyDoor);
door.getTown().removeMapObject(destroyDoor);
}
clearDoors();
silentPartyUpdate();
}
}
// check if we are still logged in �.o
if (!overwrite) {
cancelPlayerBuffs(buffstats);
if (effect.isHide() && (MapleCharacter) getMap().getMapObject(getObjectId()) != null) {
this.hidden = false;
getMap().broadcastMessage(this, MaplePacketCreator.spawnPlayerMapobject(this), false);
}
}
}
public void cancelBuffStats(MapleBuffStat ... stat) {
List<MapleBuffStat> buffStatList = Arrays.asList(stat);
deregisterBuffStats(buffStatList);
cancelPlayerBuffs(buffStatList);
}
public void cancelEffectFromBuffStat(MapleBuffStat stat) {
cancelEffect(effects.get(stat).effect, false, -1);
}
private void cancelPlayerBuffs(List<MapleBuffStat> buffstats) {
if (getClient().getChannelServer().getPlayerStorage().getCharacterById(getId()) != null) { // are we still connected ?
recalcLocalStats();
enforceMaxHpMp();
getClient().getSession().write(MaplePacketCreator.cancelBuff(buffstats));
getMap().broadcastMessage(this, MaplePacketCreator.cancelForeignBuff(getId(), buffstats), false);
}
}
public void cancelAllBuffs() {
LinkedList<MapleBuffStatValueHolder> allBuffs = new LinkedList<MapleBuffStatValueHolder>(effects.values());
for (MapleBuffStatValueHolder mbsvh : allBuffs) {
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
}
}
public void cancelMagicDoor() {
LinkedList<MapleBuffStatValueHolder> allBuffs = new LinkedList<MapleBuffStatValueHolder>(effects.values());
for (MapleBuffStatValueHolder mbsvh : allBuffs) {
if (mbsvh.effect.isMagicDoor()) {
cancelEffect(mbsvh.effect, false, mbsvh.startTime);
}
}
}
public void handleOrbgain() {
int orbcount = getBuffedValue(MapleBuffStat.COMBO);
ISkill combo = SkillFactory.getSkill(1111002);
ISkill advcombo = SkillFactory.getSkill(1120003);
MapleStatEffect ceffect = null;
int advComboSkillLevel = getSkillLevel(advcombo);
if (advComboSkillLevel > 0) {
ceffect = advcombo.getEffect(advComboSkillLevel);
} else {
ceffect = combo.getEffect(getSkillLevel(combo));
}
if (orbcount < ceffect.getX() + 1) {
int neworbcount = orbcount + 1;
if (advComboSkillLevel > 0 && ceffect.makeChanceResult()) {
if (neworbcount < ceffect.getX() + 1)
neworbcount++;
}
List<Pair<MapleBuffStat, Integer>> stat = Collections.singletonList(new Pair<MapleBuffStat, Integer>(MapleBuffStat.COMBO, neworbcount));
setBuffedValue(MapleBuffStat.COMBO, neworbcount);
int duration = ceffect.getDuration();
duration += (int) ((getBuffedStarttime(MapleBuffStat.COMBO) - System.currentTimeMillis()));
getClient().getSession().write(MaplePacketCreator.giveBuff(1111002, duration, stat));
getMap().broadcastMessage(this, MaplePacketCreator.giveForeignBuff(getId(), stat), false);
}
}
public void handleOrbconsume() {
ISkill combo = SkillFactory.getSkill(1111002);
MapleStatEffect ceffect = combo.getEffect(getSkillLevel(combo));
List<Pair<MapleBuffStat, Integer>> stat = Collections.singletonList(new Pair<MapleBuffStat, Integer>(MapleBuffStat.COMBO, 1));
setBuffedValue(MapleBuffStat.COMBO, 1);
int duration = ceffect.getDuration();
duration += (int)((getBuffedStarttime(MapleBuffStat.COMBO) - System.currentTimeMillis()));
getClient().getSession().write(MaplePacketCreator.giveBuff(1111002, duration, stat));
getMap().broadcastMessage(this, MaplePacketCreator.giveForeignBuff(getId(), stat), false);
}
private void silentEnforceMaxHpMp() {
setMp(getMp());
setHp(getHp(), true);
}
private void enforceMaxHpMp() {
List<Pair<MapleStat, Integer>> stats = new ArrayList<Pair<MapleStat, Integer>>(2);
if (getMp() > getCurrentMaxMp()) {
setMp(getMp());
stats.add(new Pair<MapleStat, Integer>(MapleStat.MP, Integer.valueOf(getMp())));
}
if (getHp() > getCurrentMaxHp()) {
setHp(getHp());
stats.add(new Pair<MapleStat, Integer>(MapleStat.HP, Integer.valueOf(getHp())));
}
if (stats.size() > 0) {
getClient().getSession().write(MaplePacketCreator.updatePlayerStats(stats));
}
}
public MapleMap getMap() {
return map;
}
/**
* only for tests
*
* @param newmap
*/
public void setMap(MapleMap newmap) {
this.map = newmap;
}
public int getMapId() {
if (map != null) {
return map.getId();
}
return mapid;
}
public int getInitialSpawnpoint() {
return initialSpawnPoint;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getLevel() {
return level;
}
public int getRank() {
return rank;
}
public int getRankMove() {
return rankMove;
}
public int getJobRank() {
return jobRank;
}
public int getJobRankMove() {
return jobRankMove;
}
public int getFame() {
return fame;
}
public int getStr() {
return str;
}
public int getDex() {
return dex;
}
public int getLuk() {
return luk;
}
public int getInt() {
return int_;
}
public MapleClient getClient() {
return client;
}
public int getExp() {
return exp.get();
}
public int getHp() {
return hp;
}
public int getMaxHp() {
return maxhp;
}
public int getMp() {
return mp;
}
public int getMaxMp() {
return maxmp;
}
public int getRemainingAp() {
return remainingAp;
}
public int getRemainingSp() {
return remainingSp;
}
public int getMpApUsed() {
return mpApUsed;
}
public void setMpApUsed(int mpApUsed) {
this.mpApUsed = mpApUsed;
}
public int getHpApUsed() {
return hpApUsed;
}
public boolean isHidden() {
return hidden;
}
public void setHpApUsed(int hpApUsed) {
this.hpApUsed = hpApUsed;
}
public MapleSkinColor getSkinColor() {
return skinColor;
}
public MapleJob getJob() {
return job;
}
public int getGender() {
return gender;
}
public int getHair() {
return hair;
}
public int getFace() {
return face;
}
public void setName(String name) {
this.name = name;
}
public void setStr(int str) {
this.str = str;
recalcLocalStats();
}
public void setDex(int dex) {
this.dex = dex;
recalcLocalStats();
}
public void setLuk(int luk) {
this.luk = luk;
recalcLocalStats();
}
public void setInt(int int_) {
this.int_ = int_;
recalcLocalStats();
}
public void setHair(int hair) {
this.hair = hair;
}
public void setFace(int face) {
this.face = face;
}
public void setRemainingAp(int remainingAp) {
this.remainingAp = remainingAp;
}
public void setRemainingSp(int remainingSp) {
this.remainingSp = remainingSp;
}
public void setSkinColor(MapleSkinColor skinColor) {
this.skinColor = skinColor;
}
public void setGender(int gender) {
this.gender = gender;
}
public CheatTracker getCheatTracker() {
return anticheat;
}
public BuddyList getBuddylist() {
return buddylist;
}
public void addFame(int famechange) {
this.fame += famechange;
}
public void changeMap(final MapleMap to, final Point pos) {
/*getClient().getSession().write(MaplePacketCreator.spawnPortal(map.getId(), to.getId(), pos));
if (getParty() != null) {
getClient().getSession().write(MaplePacketCreator.partyPortal(map.getId(), to.getId(), pos));
}*/
MaplePacket warpPacket = MaplePacketCreator.getWarpToMap(to, 0x80, this);
changeMapInternal(to, pos, warpPacket);
}
public void changeMap(final MapleMap to, final MaplePortal pto) {
MaplePacket warpPacket = MaplePacketCreator.getWarpToMap(to, pto.getId(), this);
changeMapInternal(to, pto.getPosition(), warpPacket);
}
private void changeMapInternal(final MapleMap to, final Point pos, MaplePacket warpPacket) {
warpPacket.setOnSend(new Runnable() {
@Override
public void run() {
map.removePlayer(MapleCharacter.this);
if (getClient().getChannelServer().getPlayerStorage().getCharacterById(getId()) != null) {
map = to;
controlled.clear();
visibleMapObjects.clear();
if(chair != 0)
chair = 0;
setPosition(pos);
to.addPlayer(MapleCharacter.this);
if (party != null) {
getClient().getSession().write(MaplePacketCreator.updateParty(getClient().getChannel(), party, PartyOperation.SILENT_UPDATE, null));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -