Fixed quest rewarding + Lethal attacks in Dojo
Fixed quests not giving items in some cases, lethal damages rendering dojo uncompletable and added new scripts.
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
This file is part of the OdinMS Maple Story Server
|
||||
Copyright (C) 2008 ~ 2010 Patrick Huy <[email protected]>
|
||||
Matthias Butz <[email protected]>
|
||||
Jan Christian Meyer <[email protected]>
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License version 3
|
||||
as published by the Free Software Foundation. You may not use, modify
|
||||
or distribute this program under any other version of the
|
||||
GNU Affero General Public License.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package server.life;
|
||||
|
||||
import constants.GameConstants;
|
||||
|
||||
public class ChangeableStats extends OverrideMonsterStats {
|
||||
|
||||
public int watk, matk, wdef, mdef, level;
|
||||
|
||||
public ChangeableStats(MapleMonsterStats stats, OverrideMonsterStats ostats) {
|
||||
hp = ostats.getHp();
|
||||
exp = ostats.getExp();
|
||||
mp = ostats.getMp();
|
||||
watk = stats.getPADamage();
|
||||
matk = stats.getMADamage();
|
||||
wdef = stats.getPDDamage();
|
||||
mdef = stats.getMDDamage();
|
||||
level = stats.getLevel();
|
||||
}
|
||||
|
||||
public ChangeableStats(MapleMonsterStats stats, int newLevel, boolean pqMob) { // here we go i think
|
||||
final double mod = (double) newLevel / (double) stats.getLevel();
|
||||
final double hpRatio = (double) stats.getHp() / (double) stats.getExp();
|
||||
final double pqMod = (pqMob ? 1.5 : 1.0); // god damn
|
||||
hp = (int) Math.round((!stats.isBoss() ? GameConstants.getMonsterHP(newLevel) : (stats.getHp() * mod)) * pqMod); // right here lol
|
||||
exp = (int) Math.round((!stats.isBoss() ? (GameConstants.getMonsterHP(newLevel) / hpRatio) : (stats.getExp())) * pqMod);
|
||||
mp = (int) Math.round(stats.getMp() * mod * pqMod);
|
||||
watk = (int) Math.round(stats.getPADamage() * mod);
|
||||
matk = (int) Math.round(stats.getMADamage() * mod);
|
||||
wdef = Math.min(stats.isBoss() ? 30 : 20, (int) Math.round(stats.getPDDamage() * mod));
|
||||
mdef = Math.min(stats.isBoss() ? 30 : 20, (int) Math.round(stats.getMDDamage() * mod));
|
||||
level = newLevel;
|
||||
}
|
||||
}
|
||||
@@ -63,7 +63,7 @@ import tools.Pair;
|
||||
import tools.Randomizer;
|
||||
|
||||
public class MapleMonster extends AbstractLoadedMapleLife {
|
||||
|
||||
private ChangeableStats ostats = null; //unused, v83 WZs offers no support for changeable stats.
|
||||
private MapleMonsterStats stats;
|
||||
private int hp, mp;
|
||||
private WeakReference<MapleCharacter> controller = new WeakReference<>(null);
|
||||
@@ -957,4 +957,36 @@ public class MapleMonster extends AbstractLoadedMapleLife {
|
||||
public Map<MonsterStatus, MonsterStatusEffect> getStati() {
|
||||
return stati;
|
||||
}
|
||||
|
||||
// ---- one can always have fun trying these pieces of codes below in-game rofl ----
|
||||
|
||||
public final ChangeableStats getChangedStats() {
|
||||
return ostats;
|
||||
}
|
||||
|
||||
public final int getMobMaxHp() {
|
||||
if (ostats != null) {
|
||||
return ostats.hp;
|
||||
}
|
||||
return stats.getHp();
|
||||
}
|
||||
|
||||
public final void setOverrideStats(final OverrideMonsterStats ostats) {
|
||||
this.ostats = new ChangeableStats(stats, ostats);
|
||||
this.hp = ostats.getHp();
|
||||
this.mp = ostats.getMp();
|
||||
}
|
||||
|
||||
public final void changeLevel(final int newLevel) {
|
||||
changeLevel(newLevel, true);
|
||||
}
|
||||
|
||||
public final void changeLevel(final int newLevel, boolean pqMob) {
|
||||
if (!stats.isChangeable()) {
|
||||
return;
|
||||
}
|
||||
this.ostats = new ChangeableStats(stats, newLevel, pqMob);
|
||||
this.hp = ostats.getHp();
|
||||
this.mp = ostats.getMp();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ import tools.Pair;
|
||||
* @author Frz
|
||||
*/
|
||||
public class MapleMonsterStats {
|
||||
private boolean changeable;
|
||||
private int exp, hp, mp, level, PADamage, PDDamage, MADamage, MDDamage, dropPeriod, cp, buffToGive, removeAfter;
|
||||
private boolean boss, undead, ffaLoot, isExplosiveReward, firstAttack, removeOnMiss;
|
||||
private String name;
|
||||
@@ -50,6 +51,14 @@ public class MapleMonsterStats {
|
||||
private selfDestruction selfDestruction = null;
|
||||
private boolean friendly;
|
||||
|
||||
public void setChange(boolean change) {
|
||||
this.changeable = change;
|
||||
}
|
||||
|
||||
public boolean isChangeable() {
|
||||
return changeable;
|
||||
}
|
||||
|
||||
public int getExp() {
|
||||
return exp;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
This file is part of the OdinMS Maple Story Server
|
||||
Copyright (C) 2008 ~ 2010 Patrick Huy <patrick.huy@frz.cc>
|
||||
Matthias Butz <matze@odinms.de>
|
||||
Jan Christian Meyer <vimes@odinms.de>
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License version 3
|
||||
as published by the Free Software Foundation. You may not use, modify
|
||||
or distribute this program under any other version of the
|
||||
GNU Affero General Public License.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package server.life;
|
||||
|
||||
public class OverrideMonsterStats {
|
||||
|
||||
public int hp;
|
||||
public int exp, mp;
|
||||
|
||||
public OverrideMonsterStats() {
|
||||
hp = 1;
|
||||
exp = 0;
|
||||
mp = 0;
|
||||
}
|
||||
|
||||
public OverrideMonsterStats(int hp, int mp, int exp, boolean change) {
|
||||
this.hp = /*change ? (hp * 3L / 2L) : */ hp;
|
||||
this.mp = mp;
|
||||
this.exp = exp;
|
||||
}
|
||||
|
||||
public OverrideMonsterStats(int hp, int mp, int exp) {
|
||||
this(hp, mp, exp, true);
|
||||
}
|
||||
|
||||
public int getExp() {
|
||||
return exp;
|
||||
}
|
||||
|
||||
public void setOExp(int exp) {
|
||||
this.exp = exp;
|
||||
}
|
||||
|
||||
public int getHp() {
|
||||
return hp;
|
||||
}
|
||||
|
||||
public void setOHp(int hp) {
|
||||
this.hp = hp;
|
||||
}
|
||||
|
||||
public int getMp() {
|
||||
return mp;
|
||||
}
|
||||
|
||||
public void setOMp(int mp) {
|
||||
this.mp = mp;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user