Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Help with istance fix TiamatStrongHold

Newbie Spellweaver
Joined
Nov 5, 2013
Messages
14
Reaction score
1
hello i'm tryng to fix TiamatStronghold.
my problem is that when you speak to Kahrun he asks wheter you are ready or not. If you ask yes he should destroy the gate and let balaur attack the player. Currently i don't know how to intercept the user clicking on "yes" options to make the gate despawn, thus the balaur arrive at the gate and gets back because thay cannot go trough the wall. Robson26 your help would be apreciated :p
 
Newbie Spellweaver
Joined
Oct 30, 2013
Messages
34
Reaction score
3
Look through the source code and find the action that also has a "yes" option and use that.
if @Robson26 does it for you, you won't learn anything.
 
Upvote 0
Newbie Spellweaver
Joined
Oct 30, 2013
Messages
34
Reaction score
3
And so far you've not shown the files you've been looking at, what you've tried etc.. give us all the steps you've tried and we will give you clues. We won't be giving you source code, you're in the emulation development section of ragezone, you should be showing us what you have done to drive your understanding better otherwise you won't learn anything.
 
Upvote 0
Newbie Spellweaver
Joined
Nov 5, 2013
Messages
14
Reaction score
1
first of all, i never asked for sourcecode...
second i have asked for clue where could i find insidethe source a similar thing so i could copy or watch...
by the way here is the code..

/**
* This file is part of Aion-Lightning <aion-lightning.org>.
*
* Aion-Lightning is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Aion-Lightning 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 General Public License for more details. *
*
* You should have received a copy of the GNU General Public License
* along with Aion-Lightning.
* If not, see <http://www.gnu.org/licenses/>.
*
*
* Credits goes to all Open Source Core Developer Groups listed below
* Please do not change here something, ragarding the developer credits, except the "developed by XXXX".
* Even if you edit a lot of files in this source, you still have no rights to call it as "your Core".
* Everybody knows that this Emulator Core was developed by Aion Lightning
* -Aion-Unique-
* -Aion-Lightning
* @Aion-Engine
* @Aion-Extreme
* @Aion-NextGen
* @Aion-Core Dev.
*/
package instance;

import com.aionemu.commons.network.util.ThreadPoolManager;
import com.aionemu.commons.utils.Rnd;
import com.aionemu.gameserver.ai2.AIState;
import com.aionemu.gameserver.ai2.AbstractAI;
import com.aionemu.gameserver.instance.handlers.GeneralInstanceHandler;
import com.aionemu.gameserver.instance.handlers.InstanceID;
import com.aionemu.gameserver.model.EmotionType;
import com.aionemu.gameserver.model.drop.DropItem;
import com.aionemu.gameserver.model.gameobjects.Creature;
import com.aionemu.gameserver.model.gameobjects.Npc;
import com.aionemu.gameserver.model.gameobjects.StaticDoor;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.network.aion.serverpackets.SM_DIE;
import com.aionemu.gameserver.network.aion.serverpackets.SM_EMOTION;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.services.NpcShoutsService;
import com.aionemu.gameserver.services.drop.DropRegistrationService;
import com.aionemu.gameserver.services.player.PlayerReviveService;
import com.aionemu.gameserver.services.teleport.TeleportService2;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.world.WorldMapInstance;
import com.aionemu.gameserver.world.zone.ZoneInstance;
import com.aionemu.gameserver.world.zone.ZoneName;

import java.util.Map;
import java.util.Set;

/**
* @author Cheatkiller
* @updated 4.3 Eloann
*/ InstanceID(300510000)
public class TiamatStrongHoldInstance extends GeneralInstanceHandler {

private Map<Integer, StaticDoor> doors;
private boolean isInstanceDestroyed;
private int drakans;
private boolean startSuramaEvent;
boolean first=false,second=false,third=false;


@Override
public void onDie(Npc npc) {

if (isInstanceDestroyed) {
return;
}
switch (npc.getNpcId()) {
case 730612:
firstWave();
break;
case 219417:
drakans++;

if(drakans==4){
firstWave();

}
if (drakans == 9) {
secondWave();
} else if (drakans == 15) {
thirdWave();
}
break;
case 219352: // Invincible Shabokan
sendMsg(1401614);
spawn(219308, 1175.65f, 1069.08f, 498.52f, (byte) 0); // satra special forces magicker
spawn(701501, 1075.4409f, 1078.5071f, 787.685f, (byte) 16); // balaur medal box
doors.get(48).setOpen(true);
spawnKahrun();
break;
case 219357: // Adjutant Anuhart
sendMsg(1401614);
spawn(701501, 1077.1716f, 1058.1995f, 787.685f, (byte) 61); // balaur medal box
doors.get(37).setOpen(true);
isDeadBosses();
break;
case 219358: // Brigade General Tahabata
sendMsg(1401614);
spawn(701541, 677.35785f, 1069.5361f, 499.86716f, (byte) 0); // tahabata's treasure chest
spawn(730622, 652.4821f, 1069.0302f, 498.7787f, (byte) 0, 82); // central passage teleport
spawn(283180, 679.88f, 1068.88f, 504.2f, (byte) 119); // tiamat's eye
isDeadBosses();
break;
case 219353: // Brigade General Chantra
sendMsg(1401614);
spawn(701501, 1071.5909f, 1040.6797f, 787.685f, (byte) 23); // balaur medal box
doors.get(711).setOpen(true);
isDeadBosses();
break;
case 219354: // Brigade General Terath
sendMsg(1401614);
spawn(283178, 1030.03f, 301.83f, 411f, (byte) 26); // tiamat's eye
spawn(701501, 1086.274f, 1098.3997f, 787.685f, (byte) 90); // balaur medal box
spawn(730622, 1029.792f, 267.0502f, 409.7982f, (byte) 0, 83); // central passage teleport
isDeadBosses();
break;
case 219355: // Traitor Kumbanda
sendMsg(1401614);
spawn(701501, 1063.5973f, 1092.7402f, 787.685f, (byte) 107); // balaur medal box
doors.get(51).setOpen(true);
doors.get(54).setOpen(true);
doors.get(78).setOpen(true);
doors.get(11).setOpen(true);
doors.get(79).setOpen(true);
isDeadBosses();
break;
case 219356: // Brigade General Laksyaka
sendMsg(1401614);
spawn(701501, 1099.8691f, 1047.1895f, 787.685f, (byte) 64); // balaur medal box
spawn(730622, 644.4221f, 1319.6221f, 488.7422f, (byte) 0, 15); // central passage teleport
spawn(701527, 1073.948f, 1068.8732f, 787.685f, (byte) 61); // stronghold treasure chest
spawn(800438, 665.63409f, 1319.7051f, 487.9f, (byte) 61); // murugan the loyal
spawn(283179, 629.1f, 1319.5f, 501.2f, (byte) 0); // tiamat's eye
isDeadBosses();
break;
}
System.out.println("drakans:"+drakans);
}

private void firstWave() {
if(!first) {
first = true;
ThreadPoolManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
despawnNpc(getNpc(730612)); //Protect Wall.
despawnNpc(getNpc(800335)); //Kahrun (Reian Leader).
despawnNpc(getNpc(219352)); //shabokan, must be firist defeat the waves
despawnNpc(getNpc(800336)); //Kahrun in front of gates must defeat shab first
despawnNpc(getNpc(800347)); //garnon in front of gates must defeat shab first
attackPlayer((Npc) spawn(219417, 1505.09f, 1068.54f, 491.38f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1510.54f, 1058.04f, 491.5f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1517.38f, 1063.5f, 491.52f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1516.81f, 1073.6f, 491.52f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1510.41f, 1078.8f, 491.52f, (byte) 0));
}
}, 5000);
}

}

private void secondWave() {
if(!second) {
second = true;
attackPlayer((Npc) spawn(219417, 1426.08f, 1068.41f, 491.38f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1430.3f, 1061.13f, 491.5f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1428.5f, 1056.6f, 491.52f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1439.49f, 1058.5f, 491.4f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1430.3f, 1075.49f, 491.52f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1439.4f, 1078.6f, 491.4f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1428.5f, 1080.9f, 491.46f, (byte) 0));
}

}

private void thirdWave() {
if(!third) {
third = true;
attackPlayer((Npc) spawn(219417, 1296.1f, 1068.3f, 491.38f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1290.9f, 1059.13f, 491.5f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1300.6f, 1056.4f, 491.52f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1302.78f, 1053.55f, 491.4f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1290.94f, 1077.8f, 491.52f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1300.6f, 1080.3f, 491.4f, (byte) 0));
attackPlayer((Npc) spawn(219417, 1302.78f, 1082.8f, 491.5f, (byte) 0));
spawn(219352, 1216.7716f, 1068.9441f, 491.32993f, (byte) 0, 555); //shabokan
}

}

private void attackPlayer(final Npc npc) {
ThreadPoolManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
if (!isInstanceDestroyed) {
for (Player player : instance.getPlayersInside()) {
npc.setTarget(player);
((AbstractAI) npc.getAi2()).setStateIfNot(AIState.WALKING);
npc.setState(1);
npc.getMoveController().moveToTargetObject();
PacketSendUtility.broadcastPacket(npc, new SM_EMOTION(npc, EmotionType.START_EMOTE2, 0, npc.getObjectId()));

}
}
}
}, 2000);
}

private void spawnKahrun() {
ThreadPoolManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
moveToForward((Npc) spawn(800463, 1201.272f, 1074.5463f, 491f, (byte) 61), 1039.5f, 1075.9f, 497.3f, false); // elite reian fighter
moveToForward((Npc) spawn(800463, 1201.272f, 1072.5137f, 491f, (byte) 61), 1130, 1072, 497.3f, false);
moveToForward((Npc) spawn(800463, 1192.8656f, 1071.1085f, 491f, (byte) 61), 1112, 1070, 497, false);
moveToForward((Npc) spawn(800463, 1201.272f, 1064.1759f, 491f, (byte) 61), 1039, 1061, 497.3f, false);
moveToForward((Npc) spawn(800463, 1208.4175f, 1071.1797f, 491f, (byte) 61), 1133, 1072.5f, 497.3f, false);
moveToForward((Npc) spawn(800463, 1192.8656f, 1068.3411f, 491f, (byte) 61), 1114, 1067, 496.7f, false);
moveToForward((Npc) spawn(800463, 1208.4175f, 1068.3979f, 491f, (byte) 61), 1133.32f, 1066.47f, 497.3f, false);
moveToForward((Npc) spawn(800463, 1201.272f, 1066.2085f, 491f, (byte) 61), 1128.8f, 1067, 497.3f, false);
moveToForward((Npc) spawn(800380, 1190.323f, 1068.1558f, 491.03488f, (byte) 61), 1108, 1066, 497.3f, false); // elite reian sniper
moveToForward((Npc) spawn(800374, 1188.4259f, 1066.4757f, 491.55029f, (byte) 61), 1094, 1064, 497.4f, true); // elite reian assaulter
moveToForward((Npc) spawn(800374, 1188.2158f, 1074.2047f, 491.55029f, (byte) 61), 1092.5f, 1074.6f, 497.4f, true);
moveToForward((Npc) spawn(800376, 1190.3859f, 1071.6548f, 491.03488f, (byte) 61), 1109, 1073, 497.2f, false); // elite reian assaulter
moveToForward((Npc) spawn(800461, 1184.7582f, 1068.6f, 491.03488f, (byte) 61), 1111, 1068.6f, 497.33f, false); // sorus
moveToForward((Npc) spawn(800460, 1184.7358f, 1070.77f, 491.03488f, (byte) 61), 1111, 1071, 497, false); // ariana
moveToForward((Npc) spawn(800347, 1178.0425f, 1072.28f, 491.02545f, (byte) 61), 1106, 1072, 497.2f, false); // garnon
moveToForward((Npc) spawn(800336, 1178.0559f, 1069.6f, 491.02545f, (byte) 61), 1104, 1069, 497, true); // kahrun
}
}, 7000);
}

private void moveToForward(final Npc npc, float x, float y, float z, boolean despawn) {
((AbstractAI) npc.getAi2()).setStateIfNot(AIState.WALKING);
npc.setState(1);
npc.getMoveController().moveToPoint(x, y, z);
PacketSendUtility.broadcastPacket(npc, new SM_EMOTION(npc, EmotionType.START_EMOTE2, 0, npc.getObjectId()));
System.out.println("DDM Checkpoint 2");
if (despawn) {
ThreadPoolManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
if (npc.getNpcId() == 800336) {
spawn(800338, 1104, 1069f, 497, (byte) 61);
Npc kahrun = getNpc(800338);
NpcShoutsService.getInstance().sendMsg(kahrun, 1500599, kahrun.getObjectId(), 0, 1000);
NpcShoutsService.getInstance().sendMsg(kahrun, 1500600, kahrun.getObjectId(), 0, 5000);

}
npc.getController().onDelete();
}
}, 13000);
}
}

private void spawnColonels() {
int rand = Rnd.get(0, 3);
switch (rand) {
case 0:
spawn(219364, 763.4179f, 1445.6504f, 495.6519f, (byte) 90);
spawn(219395, 893.7009f, 1445.4846f, 495.6421f, (byte) 90);
spawn(219395, 893.3f, 1190.71f, 495.6f, (byte) 30);
spawn(219395, 762.6f, 1192.1f, 495.6f, (byte) 30);
break;
case 1:
spawn(219395, 763.4179f, 1445.6504f, 495.6519f, (byte) 90);
spawn(219364, 893.7009f, 1445.4846f, 495.6421f, (byte) 90);
spawn(219395, 893.3f, 1190.71f, 495.6f, (byte) 30);
spawn(219395, 762.6f, 1192.1f, 495.6f, (byte) 30);
break;
case 2:
spawn(219395, 763.4179f, 1445.6504f, 495.6519f, (byte) 90);
spawn(219395, 893.7009f, 1445.4846f, 495.6421f, (byte) 90);
spawn(219364, 893.3f, 1190.71f, 495.6f, (byte) 30);
spawn(219395, 762.6f, 1192.1f, 495.6f, (byte) 30);
break;
case 3:
spawn(219395, 763.4179f, 1445.6504f, 495.6519f, (byte) 90);
spawn(219395, 893.7009f, 1445.4846f, 495.6421f, (byte) 90);
spawn(219395, 893.3f, 1190.71f, 495.6f, (byte) 30);
spawn(219364, 762.6f, 1192.1f, 495.6f, (byte) 30);
break;
}
}

private boolean isDeadBosses() {
Npc boss = getNpc(219356); // Brigade General Laksyaka
Npc boss1 = getNpc(219355); // Traitor Kumbanda
Npc boss2 = getNpc(219354); // Brigade General Terath
Npc boss3 = getNpc(219353); // Brigade General Chantra
Npc boss4 = getNpc(219358); // Brigade General Tahabata
Npc boss5 = getNpc(219357); // Adjutant Anuhart
Npc boss6 = getNpc(219352); // Invincible Shabokan
if (isDead(boss) && isDead(boss1) && isDead(boss2) && isDead(boss3)
&& isDead(boss4) && isDead(boss5) && isDead(boss6)) {
spawn(800464, 1119.7076f, 1071.1401f, 496.8615f, (byte) 119); // reian sorcerer
spawn(800465, 1119.7421f, 1068.4998f, 496.8616f, (byte) 3); // reian sorcerer
spawn(730629, 1121.3807f, 1069.8124f, 500.3319f, (byte) 0, 555); // tiamat stronghold exit
return true;
}
return false;
}

private boolean isDead(Npc npc) {
return (npc == null || npc.getLifeStats().isAlreadyDead());
}

@Override
public void onEnterZone(Player player, ZoneInstance zone) {
if (zone.getAreaTemplate().getZoneName() == ZoneName.get("LAKSYAKA_LEGION_HQ_300510000")) {
if (!startSuramaEvent) {
startSuramaEvent = true;
spawn(800433, 725.93f, 1319.9f, 490.7f, (byte) 61); // surama the traitor
}
}
}

@Override
public void handleUseItemFinish(Player player, Npc npc) {
switch (npc.getNpcId()) {
case 701494: // research center access controller
doors.get(22).setOpen(true);
break;
}
}

@Override
public void onInstanceCreate(WorldMapInstance instance) {
super.onInstanceCreate(instance);
//spawn(800456, 1572.65f, 1058.53f, 492.01f, (byte) 0); //Kahrun (Reian Leader).
doors = instance.getDoors();
doors.get(610).setOpen(true);
doors.get(20).setOpen(true);
doors.get(706).setOpen(true);
doors.get(48).setOpen(false);

spawnColonels();
spawn(800335, 1572.65f, 1058.53f, 492.01f, (byte) 0); //Kahrun (Reian Leader).
despawnNpc(getNpc(730612)); //Protect Wall.
firstWave();


}

@Override
public void onInstanceDestroy() {
isInstanceDestroyed = true;
doors.clear();
}

@Override
public boolean onDie(final Player player, Creature lastAttacker) {
PacketSendUtility.broadcastPacket(player, new SM_EMOTION(player, EmotionType.DIE, 0, player.equals(lastAttacker) ? 0 : lastAttacker.getObjectId()), true);

PacketSendUtility.sendPacket(player, new SM_DIE(player.haveSelfRezEffect(), player.haveSelfRezItem(), 0, 8));
return true;
}

@Override
public boolean onReviveEvent(Player player) {
PlayerReviveService.revive(player, 25, 25, true, 0);
player.getGameStats().updateStatsAndSpeedVisually();
PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_REBIRTH_MASSAGE_ME);
TeleportService2.teleportTo(player, mapId, instanceId, 1534.8584f, 1067.791f, 491.3514f, (byte) 60);
return true;
}

@Override
public void onDropRegistered(Npc npc) {
Set<DropItem> dropItems = DropRegistrationService.getInstance().geCurrentDropMap().get(npc.getObjectId());
int npcId = npc.getNpcId();
switch (npcId) {
case 701527: // stronghold treasure chest
int index = dropItems.size() + 1;
for (Player player : instance.getPlayersInside()) {
if (player.isOnline()) {
dropItems.add(DropRegistrationService.getInstance().regDropItem(index++, player.getObjectId(), npcId, 186000201, 1));
dropItems.add(DropRegistrationService.getInstance().regDropItem(index++, player.getObjectId(), npcId, 186000147, 2));
}
}
break;
case 219363:
dropItems.add(DropRegistrationService.getInstance().regDropItem(1, 0, npc.getNpcId(), 185000120, 1));
break;
case 219364:
dropItems.add(DropRegistrationService.getInstance().regDropItem(1, 0, npc.getNpcId(), 185000121, 1));
break;
}
}

@Override
public void onPlayerLogOut(Player player) {
TeleportService2.moveToInstanceExit(player, mapId, player.getRace());
}

protected void despawnNpc(Npc npc) {
if (npc != null) {
npc.getController().onDelete();
}
}

}



as you see for now the only waqy i found to avoid the problem is not showing kahrun, despawn the wall and start first wave...



//spawn(800456, 1572.65f, 1058.53f, 492.01f, (byte) 0); //Kahrun (Reian Leader).
this npc has a dialog...

in my opinion somewhere there shouldbe a callback event of that dialog that i can call and interact... question is where? my knowledge of the logic of an aion emulator are still poor to understand...
 
Upvote 0
Back
Top