- Joined
- Jul 12, 2008
- Messages
- 55
- Reaction score
- 0
in MapleMonster.java
find
add this below it
find
change to
find
add this below it
find
add this below it
find
add this below it
find
add this above it
in ReactorActionManager.java
find
replace it with
make ur SBossMapMonitor.java to look like this
in 2401000.js
change
to this
EDIT minor typo here
in 2111001.js
change
to this
find
PHP:
private MapleMap map;
add this below it
PHP:
private boolean lock;
find
PHP:
private void initWithStats (MapleMonsterStats stats) {
setStance(5);
this.stats = stats;
hp = stats.getHp();
mp = stats.getMp();
}
change to
PHP:
private void initWithStats (MapleMonsterStats stats) {
setStance(5);
this.stats = stats;
hp = stats.getHp();
mp = stats.getMp();
lock=false;
}
find
PHP:
public void damage(MapleCharacter from, int damage, boolean updateAttackTime) {
add this below it
PHP:
if(lock)return;
find
PHP:
public void setControllerHasAggro(boolean controllerHasAggro) {
add this below it
PHP:
if(lock)return;
find
PHP:
public void setControllerKnowsAboutAggro(boolean controllerKnowsAboutAggro) {
add this below it
PHP:
if(lock)return;
find
PHP:
public MaplePacket makeBossHPBarPacket() {
return MaplePacketCreator.showBossHP(getId(), getHp(), getMaxHp(), getTagColor(), getTagBgColor());
}
add this above it
PHP:
public void setLock(boolean lock)
{
this.lock=lock;
}
in ReactorActionManager.java
find
PHP:
public void createMapMonitor(int type,int pMapId,String pName,String sMobId)
{
switch(type)
{
case MapleMapMonitor.BOSS_MAP:
createMapMonitor(type,pMapId,pName);
break;
case MapleMapMonitor.SBOSS_MAP:
MapleMap pMap=getClient().getChannelServer().getMapFactory().getMap(pMapId);
MaplePortal portal=pMap.getPortal(pName);
String[] st=sMobId.split(",");
int[] data=new int[st.length];
for(int i=0;i<st.length;i++)
{
data[i]=Integer.parseInt(st[i]);
}
SBossMapMonitor sbmm=new SBossMapMonitor(getPlayer().getMap(),pMap,portal,data,getClient().getChannelServer());
sbmm.start();
break;
}
}
replace it with
PHP:
public void createMapMonitor(int type,int pMapId,String pName,String sMobId,short type2,int trigger)
{
switch(type)
{
case MapleMapMonitor.BOSS_MAP:
createMapMonitor(type,pMapId,pName);
break;
case MapleMapMonitor.SBOSS_MAP:
MapleMap pMap=getClient().getChannelServer().getMapFactory().getMap(pMapId);
MaplePortal portal=pMap.getPortal(pName);
String[] st=sMobId.split(",");
int[] data=new int[st.length];
for(int i=0;i<st.length;i++)
{
data[i]=Integer.parseInt(st[i]);
}
SBossMapMonitor sbmm=new SBossMapMonitor(getPlayer().getMap(),pMap,portal,data,getClient().getChannelServer(),type2,trigger);
sbmm.start();
break;
}
}
make ur SBossMapMonitor.java to look like this
PHP:
package net.sf.odinms.server.maps;
import java.awt.Point;
import java.util.Arrays;
import java.util.List;
import net.sf.odinms.server.MaplePortal;
import net.sf.odinms.server.life.MapleMonster;
import net.sf.odinms.net.channel.ChannelServer;
/**
*
* @author alex_soh
*/
public class SBossMapMonitor extends BossMapMonitor {
protected int[] mobs;
protected boolean deadCount[];
protected ChannelServer cserv;
protected boolean hasHappen;
protected short type;
protected int trigger;
public static final short HORNTAIL=0;
public static final short ZAKUM=1;
public SBossMapMonitor(MapleMap map,MapleMap pMap,MaplePortal portal,int[] mobs,ChannelServer cserv)
{
super(map,pMap,portal);
this.mobs=mobs;
this.deadCount=new boolean[mobs.length];
this.cserv=cserv;
for(int i=0;i<deadCount.length;i++)
{
deadCount[i]=type!=SBossMapMonitor.HORNTAIL;
}
hasHappen=false;
type=SBossMapMonitor.HORNTAIL;
}
public SBossMapMonitor(MapleMap map,MapleMap pMap,MaplePortal portal,int[] mobs,ChannelServer cserv,short type,int trigger)
{
super(map,pMap,portal);
this.mobs=mobs;
this.deadCount=new boolean[mobs.length];
this.cserv=cserv;
for(int i=0;i<deadCount.length;i++)
{
deadCount[i]=type!=SBossMapMonitor.HORNTAIL;
}
hasHappen=false;
this.type=type;
this.trigger=trigger;
}
private boolean chkDeadCount()
{
boolean result=true;
for(int i=0;i<deadCount.length;i++)
{
if(!deadCount[i] && type==SBossMapMonitor.HORNTAIL)
{
result=false;
break;
}
else if(deadCount[i] && type==SBossMapMonitor.ZAKUM)
{
result=false;
break;
}
}
return result;
}
private MapleMonster getMonster(int id)
{
MapleMonster m=null;
List<MapleMapObject> list=getAllMob();
for(int i=0;i<list.size();i++)
{
MapleMonster monster = (MapleMonster) list.get(i);
if(monster.getId()==id)
{
m=monster;
break;
}
}
return m;
}
private List<MapleMapObject> getAllMob()
{
return map.getMapObjectsInRange(new Point(0,0), Double.POSITIVE_INFINITY, Arrays
.asList(MapleMapObjectType.MONSTER));
}
private boolean chkSpecialBoss()
{
List<MapleMapObject> list=getAllMob();
for(int j=0;j<deadCount.length;j++)
{
if(!deadCount[j] && type==SBossMapMonitor.HORNTAIL)
{
for(int i=0;i<list.size();i++)
{
MapleMonster monster = (MapleMonster) list.get(i);
if(monster.getId()==mobs[j])
{
deadCount[j]=true;
break;
}
}
}
else if(deadCount[j] && type==SBossMapMonitor.ZAKUM)
{
boolean found=false;
for(int i=0;i<list.size();i++)
{
MapleMonster monster = (MapleMonster) list.get(i);
if(monster.getId()==mobs[j])
{
found=true;
break;
}
}
deadCount[j]=found;
}
}
return chkDeadCount();
}
@Override
public void run()
{
MapleMonster triggerMob=null;
switch(type)
{
case SBossMapMonitor.HORNTAIL:
break;
case SBossMapMonitor.ZAKUM:
while(triggerMob==null)
{
triggerMob=getMonster(trigger);
try
{
Thread.sleep(500);
}
catch(InterruptedException e)
{
}
}
triggerMob.setLock(true);
break;
}
while(map.playerCount()>0)
{
if(chkSpecialBoss() && !hasHappen)
{
//special event happen
switch(type)
{
case SBossMapMonitor.HORNTAIL:
map.killAllMonster(true);
cserv.broadcastPacket(net.sf.odinms.tools.MaplePacketCreator.serverNotice(6, cserv.getChannel(), "Congratulations to the crew who successfully defeated Horntail after numerous attempt, you are the true hero of Leafre"));
hasHappen=true;
break;
case SBossMapMonitor.ZAKUM:
triggerMob.setLock(false);
triggerMob.setHp(triggerMob.getMaxHp());
triggerMob.setMp(triggerMob.getMaxMp());
hasHappen=true;
break;
}
}
try
{
switch(type)
{
case SBossMapMonitor.HORNTAIL:
Thread.sleep(3000);//how often it chk for the existence of deads parts,increase to reduce server lag
break;
case SBossMapMonitor.ZAKUM:
Thread.sleep(3000);//how often it chk for the existence of arms,increase to reduce server lag
break;
}
}
catch(InterruptedException e)
{
//e.printStackTrace();
}
}
while(map.mobCount()>0)
{
map.killAllMonster();
try
{
Thread.sleep(5000);
}
catch(InterruptedException e)
{
//e.printStackTrace();
}
}
map.resetReactors();
pMap.resetReactors();
portal.setPortalState(MapleMapPortal.OPEN);
}
}
in 2401000.js
change
PHP:
rm.createMapMonitor(2,240050400,"sp","8810010,8810011,8810012,8810013,8810014,8810015,8810016,8810017");
to this
PHP:
rm.createMapMonitor(2,240050400,"sp","8810010,8810011,8810012,8810013,8810014,8810015,8810016,8810017",0,8810018);
rm.createMapMonitor(2,240050400,"sp","8810002,8810004,8810005,8810006,8810007,8810008,8810009",1,8810003);
EDIT minor typo here
in 2111001.js
change
PHP:
rm.createMapMonitor(1,211042300,"sp");
to this
PHP:
rm.createMapMonitor(2,211042300,"sp","8800003,8800004,8800005,8800006,8800007,8800008,8800009,8800010",1,8800000);
Last edited: