I am creating Frintezza for aCis but I came across something really does FinalEmperialTomb exist in the interlude? Because I created it based on research and I didn't find anything about Interlude, I just found about High Five. A part of my code, yes it is working perfectly I would like to know more about FinalEmperialTomb because I don't want to waste time on it.
package net.sf.l2j.gameserver.scripting.script.ai.area;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;import net.sf.l2j.commons.random.Rnd;import net.sf.l2j.gameserver.data.manager.GrandBossManager;import net.sf.l2j.gameserver.data.manager.ZoneManager;import net.sf.l2j.gameserver.data.xml.DoorData;import net.sf.l2j.gameserver.data.xml.ScriptData;import net.sf.l2j.gameserver.enums.SayType;import net.sf.l2j.gameserver.enums.ScriptEventType;import net.sf.l2j.gameserver.model.actor.Creature;import net.sf.l2j.gameserver.model.actor.Npc;import net.sf.l2j.gameserver.model.actor.Player;import net.sf.l2j.gameserver.model.location.Location;import net.sf.l2j.gameserver.model.zone.type.BossZone;import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;import net.sf.l2j.gameserver.scripting.script.ai.AttackableAIScript;import net.sf.l2j.gameserver.scripting.script.ai.boss.Frintezza;publicclassFinalEmperialTomb extends AttackableAIScript{privatestatic final BossZone ZONE =ZoneManager.getInstance().getZoneById(110012,BossZone.class);privatestatic final int[][] MOBLOC ={{18328,172894,-76019,-5107,243},{18328,174095,-77279,-5107,16216},{18328,174111,-74833,-5107,49043},{18328,175344,-76042,-5107,32847},{18330,173489,-76227,-5134,63565},{18330,173498,-75724,-5107,58498},{18330,174365,-76745,-5107,22424},{18330,174570,-75584,-5107,31968},{18330,174613,-76179,-5107,31471},{18332,173620,-75981,-5107,4588},{18332,173630,-76340,-5107,62454},{18332,173755,-75613,-5107,57892},{18332,173823,-76688,-5107,2411},{18332,174000,-75411,-5107,54718},{18332,174487,-75555,-5107,33861},{18332,174517,-76471,-5107,21893},{18332,174576,-76122,-5107,31176},{18332,174600,-75841,-5134,35927},{18329,173481,-76043,-5107,61312},{18329,173539,-75678,-5107,59524},{18329,173584,-76386,-5107,3041},{18329,173773,-75420,-5107,51115},{18329,173777,-76650,-5107,12588},{18329,174585,-76510,-5107,21704},{18329,174623,-75571,-5107,40141},{18329,174744,-76240,-5107,29202},{18329,174769,-75895,-5107,29572},{18333,173861,-76011,-5107,383},{18333,173872,-76461,-5107,8041},{18333,173898,-75668,-5107,51856},{18333,174422,-75689,-5107,42878},{18333,174460,-76355,-5107,27311},{18333,174483,-76041,-5107,30947},{18331,173515,-76184,-5107,6971},{18331,173516,-75790,-5134,3142},{18331,173696,-76675,-5107,6757},{18331,173766,-75502,-5134,60827},{18331,174473,-75321,-5107,37147},{18331,174493,-76505,-5107,34503},{18331,174568,-75654,-5134,41661},{18331,174584,-76263,-5107,31729},{18339,173892,-81592,-5123,50849},{18339,173958,-81820,-5123,7459},{18339,174128,-81805,-5150,21495},{18339,174245,-81566,-5123,41760},{18334,173264,-81529,-5072,1646},{18334,173265,-81656,-5072,441},{18334,173267,-81889,-5072,0},{18334,173271,-82015,-5072,65382},{18334,174867,-81655,-5073,32537},{18334,174868,-81890,-5073,32768},{18334,174869,-81485,-5073,32315},{18334,174871,-82017,-5073,33007},{18335,173074,-80817,-5107,8353},{18335,173128,-82702,-5107,5345},{18335,173181,-82544,-5107,65135},{18335,173191,-80981,-5107,6947},{18335,174859,-80889,-5134,24103},{18335,174924,-82666,-5107,38710},{18335,174947,-80733,-5107,22449},{18335,175096,-82724,-5107,42205},{18336,173435,-80512,-5107,65215},{18336,173440,-82948,-5107,417},{18336,173443,-83120,-5107,1094},{18336,173463,-83064,-5107,286},{18336,173465,-80453,-5107,174},{18336,173465,-83006,-5107,2604},{18336,173468,-82889,-5107,316},{18336,173469,-80570,-5107,65353},{18336,173469,-80628,-5107,166},{18336,173492,-83121,-5107,394},{18336,173493,-80683,-5107,0},{18336,173497,-80510,-5134,417},{18336,173499,-82947,-5107,0},{18336,173521,-83063,-5107,316},{18336,173523,-82889,-5107,128},{18336,173524,-80627,-5134,65027},{18336,173524,-83007,-5107,0},{18336,173526,-80452,-5107,64735},{18336,173527,-80569,-5134,65062},{18336,174602,-83122,-5107,33104},{18336,174604,-82949,-5107,33184},{18336,174609,-80514,-5107,33234},{18336,174609,-80684,-5107,32851},{18336,174629,-80627,-5107,33346},{18336,174632,-80570,-5107,32896},{18336,174632,-83066,-5107,32768},{18336,174635,-82893,-5107,33594},{18336,174636,-80456,-5107,32065},{18336,174639,-83008,-5107,33057},{18336,174660,-80512,-5107,33057},{18336,174661,-83121,-5107,32768},{18336,174663,-82948,-5107,32768},{18336,174664,-80685,-5107,32676},{18336,174687,-83008,-5107,32520},{18336,174691,-83066,-5107,32961},{18336,174692,-80455,-5107,33202},{18336,174692,-80571,-5107,32768},{18336,174693,-80630,-5107,32994},{18336,174693,-82889,-5107,32622},{18337,172837,-82382,-5107,58363},{18337,172867,-81123,-5107,64055},{18337,172883,-82495,-5107,64764},{18337,172916,-81033,-5107,7099},{18337,172940,-82325,-5107,58998},{18337,172946,-82435,-5107,58038},{18337,172971,-81198,-5107,14768},{18337,172992,-81091,-5107,9438},{18337,173032,-82365,-5107,59041},{18337,173064,-81125,-5107,5827},{18337,175014,-81173,-5107,26398},{18337,175061,-82374,-5107,43290},{18337,175096,-81080,-5107,24719},{18337,175169,-82453,-5107,37672},{18337,175172,-80972,-5107,32315},{18337,175174,-82328,-5107,41760},{18337,175197,-81157,-5107,27617},{18337,175245,-82547,-5107,40275},{18337,175249,-81075,-5107,28435},{18337,175292,-82432,-5107,42225},{18338,173014,-82628,-5107,11874},{18338,173033,-80920,-5107,10425},{18338,173095,-82520,-5107,49152},{18338,173115,-80986,-5107,9611},{18338,173144,-80894,-5107,5345},{18338,173147,-82602,-5107,51316},{18338,174912,-80825,-5107,24270},{18338,174935,-80899,-5107,18061},{18338,175016,-82697,-5107,39533},{18338,175041,-80834,-5107,25420},{18338,175071,-82549,-5107,39163},{18338,175154,-82619,-5107,36345}};privatestatic final int[] NPCS ={18328,18329,18330,18331,18332,18333,18334,18335,18336,18337,18338,18339,29048,29049,29050,29051,32011};privatestatic final Location[] FRINTEZZA_IN ={newLocation(174102,-76039,-5105),newLocation(173235,-76884,-5105),newLocation(175003,-76933,-5105),newLocation(174196,-76190,-5105),newLocation(174013,-76120,-5105),newLocation(173263,-75161,-5105)};privateSet<Npc> _roomMobs =ConcurrentHashMap.newKeySet();privateint _check;publicFinalEmperialTomb(){
super("ai/area");}@Overrideprotectedvoid registerNpcs(){
addEventIds(NPCS,ScriptEventType.ON_TALK,ScriptEventType.ON_KILL);}@OverridepublicString onTalk(Npc npc,Player player){String htmltext ="";int status;switch(npc.getNpcId()){case32011:if(player.getInventory().hasItems(8073)){
status =GrandBossManager.getInstance().getBossStatus(Frintezza.FRINTEZZA);if(status ==Frintezza.DORMANT){GrandBossManager.getInstance().setBossStatus(Frintezza.FRINTEZZA,Frintezza.WAITING);
startQuestTimer("close", null, null,100);
startQuestTimer("beginning", null, null,5000);ScriptData.getInstance().getQuest("Frintezza").startQuestTimer("frintezza_despawn", null, null,60000);// Take item from party leader.
takeItems(player,8784,1);
final BossZone zone =ZoneManager.getInstance().getZoneById(110012,BossZone.class);
zone.allowPlayerEntry(player,300);
player.teleportTo(Rnd.get(FRINTEZZA_IN),50);}elseif(status ==Frintezza.DEAD)
htmltext ="<html><body>There is nothing beyond the Magic Force Field. Come back later.<br>(You may not enter because Frintezza is not inside the Imperial Tomb.)</body></html>";}else
htmltext ="<html><body>You dont have required item.</body></html>";break;}return htmltext;}@OverridepublicString onTimer(String name,Npc npc,Player player){if(name.equalsIgnoreCase("beginning")){
closeDoors();
_check =35;for(int i =0; i <=17; i++)
_roomMobs.add(addSpawn(MOBLOC[i][0], MOBLOC[i][1], MOBLOC[i][2], MOBLOC[i][3], MOBLOC[i][4],false,0,false));
ZONE.broadcastPacket(newCreatureSay(SayType.SHOUT,"Hall Alarm Device","Intruders! Sound the alarm!"));
startQuestTimer("check", null, null,60000);ScriptData.getInstance().getQuest("Frintezza").startQuestTimer("frintezza_despawn", null, null,60000);}elseif(name.equalsIgnoreCase("check")){if(_check ==0){
ZONE.broadcastPacket(newCreatureSay(SayType.SHOUT,"Frintezza Gatekeeper","Time limit exceeded, challenge failed!"));
ZONE.oustAllPlayers();
cancelQuestTimers("check");ScriptData.getInstance().getQuest("Frintezza").cancelQuestTimers("frintezza_despawn");
deleteAllMobs();
closeDoors();GrandBossManager.getInstance().setBossStatus(Frintezza.FRINTEZZA,Frintezza.DORMANT);}
_check--;
ZONE.broadcastPacket(newExShowScreenMessage(_check +" minute(s) remaining.",10000));}elseif(name.equalsIgnoreCase("cleanMobs"))
deleteAllMobs();elseif(name.equalsIgnoreCase("close"))
closeDoors();return super.onTimer(name, npc, player);}@OverridepublicString onKill(Npc npc,Creature killer){switch(npc.getNpcId()){case18328:int alarmsRemaining = getRemainingMonsters(npc);if(alarmsRemaining ==1){for(int i =25150051; i <=25150058; i++)
openDoor(i);}elseif(alarmsRemaining ==0){
ZONE.broadcastPacket(newCreatureSay(npc.getObjectId(),SayType.SHOUT, npc.getName(),"De-activate the alarm."));
deleteAllMobs();Spawn(1);}break;case18339:if(getRemainingMonsters(npc)==0)Spawn(2);break;case18334:if(getRemainingMonsters(npc)==0){
deleteAllMobs();
openDoor(25150045);
openDoor(25150046);
cancelQuestTimers("check");
startQuestTimer("waiting", null, null,180000);}break;}return super.onKill(npc, killer);}privatevoidSpawn(int spawn){if(spawn ==1){for(int i =41; i <=44; i++)
_roomMobs.add(addSpawn(MOBLOC[i][0], MOBLOC[i][1], MOBLOC[i][2], MOBLOC[i][3], MOBLOC[i][4],false,0,false));for(int i =25150051; i <=25150058; i++)
openDoor(i);
openDoor(25150042);
openDoor(25150043);}else{
closeDoor(25150042);
closeDoor(25150043);
closeDoor(25150045);
closeDoor(25150046);for(int i =25150061; i <=25150070; i++)
openDoor(i);for(int i =45; i <=131; i++)
_roomMobs.add(addSpawn(MOBLOC[i][0], MOBLOC[i][1], MOBLOC[i][2], MOBLOC[i][3], MOBLOC[i][4],false,0,false));}}privatestaticvoid closeDoors(){for(int i =25150051; i <=25150058; i++)
closeDoor(i);for(int i =25150061; i <=25150070; i++)
closeDoor(i);
closeDoor(25150042);
closeDoor(25150043);
closeDoor(25150045);
closeDoor(25150046);}privatestaticvoid openDoor(int doorid){DoorData.getInstance().getDoor(doorid).openMe();}privatestaticvoid closeDoor(int doorid){DoorData.getInstance().getDoor(doorid).closeMe();}privatevoid deleteAllMobs(){for(Npc mob : _roomMobs)
mob.deleteMe();for(Npc mob : ZONE.getKnownTypeInside(Npc.class))
mob.deleteMe();
_roomMobs.clear();}privateint getRemainingMonsters(Npc npc){
_roomMobs.remove(npc);return(int)_roomMobs.stream().filter(m -> m.getNpcId()== npc.getNpcId()).count();}}
2 clients:
StyleA: Original client
test1: Unity client
Monster kills are displayed correctly on both clients. Soon it will be possible to kill mobs in a party on 2 different clients
I apologize for my incompetence. The ability to trade is limited only for builder 1. Ordinary characters can trade with each other, and this has nothing to do with auto loot.)
Question
Williams
I am creating Frintezza for aCis but I came across something really does FinalEmperialTomb exist in the interlude? Because I created it based on research and I didn't find anything about Interlude, I just found about High Five. A part of my code, yes it is working perfectly I would like to know more about FinalEmperialTomb because I don't want to waste time on it.
4 answers to this question
Recommended Posts