Ir para conteúdo
  • Cadastre-se
  • -1

Como eu altero esse codigo do evento 2x2 pra 4x4 e 9x9 ?


gleyce123

Pergunta


if (target instanceof L2PcInstance
&& ((L2PcInstance)target).getAppearance().getInvisible()
&& !activeChar.isGM())
return;
troca por isso
if (target instanceof L2PcInstance) {
L2PcInstance player = (L2PcInstance)target;
if (player.getAppearance().getInvisible() && !activeChar.isGM()
|| player.isInArenaEvent() && !activeChar.isInArenaEvent()
|| !player.isInArenaEvent() && activeChar.isInArenaEvent()) {
getClient().sendPacket(ActionFailed.STATIC_PACKET);
return;
}
}
Index: datapack/data/html/default/93001.htm
===================================================================
--- datapack/data/html/default/93001.htm (revision 0)
+++ datapack/data/html/default/93001.htm (working copy)
@@ -0,0 +1,8 @@
+<html>
+<body>
+<center>
+<tr><td><font color="FF44FF">Event Arena Manager</font></tr></td><br>
+<br>
+<button value="Event" action="bypass -h npc_%objectId%_Quest 8010_ArenaEvent" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal">
+</body>
+</html>
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/1.htm
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/1.htm (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/1.htm (working copy)
@@ -0,0 +1,7 @@
+<html><body>Event Arena Manager:<br>
+Explain Event .... bla bla bla bla bla <br>
+bla bla bla bla bla bla bla bla bla bla <br>
+<a action="bypass -h Quest 8010_ArenaEvent 1">Register</a><br>
+<a action="bypass -h Quest 8010_ArenaEvent 2">Unregister</a><br>
+<a action="bypass -h Quest 8010_ArenaEvent 3">I want observe</a><br>
+</body></html>
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/__init__.py
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/__init__.py (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/__init__.py (working copy)
@@ -0,0 +1,58 @@
+# Author Alisson Oliveira
+import sys
+from com.l2jfrozen.gameserver.model.quest import State
+from com.l2jfrozen.gameserver.model.quest import QuestState
+from com.l2jfrozen.gameserver.model.quest.jython import QuestJython as JQuest
+from com.l2jfrozen.gameserver.model.entity.event import EvtArenaManager as Event
+from java.util import Map
+
+qn = "8010_ArenaEvent"
+NPCID = 93001
+initialhtml = "1.htm"
+
+class Quest (JQuest) :
+ def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)
+
+ def onEvent(self,event,st):
+ player = st.getPlayer()
+ html = initialhtml
+ if event == "1":
+ party = player.getParty()
+ if not player.isNoble(): return "only-noble.htm"
+ if not party: return "no-party.htm"
+ if not party.isLeader(player): return "no-leader.htm"
+ if party.getMemberCount() != 2: return "only-two.htm"
+ assist = party.getPartyMembers()[1] # get the last player in party
+ if not assist.isNoble(): return "only-noble.htm"
+ if Event.getInstance().register(player, assist):
+ return "registered.htm"
+ elif event == "2":
+ if Event.getInstance().remove(player):
+ return "unregistered.htm"
+ elif event == "3":
+ fights = Event.getInstance().getFights()
+ html = "<html><body>Event Arena Manager:<br> <br> Fights: <br>"
+ if len(fights) == 0:
+ html += "No fights going on right now<br></body></html>"
+ else:
+ for id in fights.keySet():
+ html += "<a action=\"bypass -h Quest "+ qn +" 4_"+str(id)+"\">"+fights.get(id)+"</a><br><br>"
+ html += "</body></html>"
+ return html
+ elif event.startswith("4_"):
+ if not Event.getInstance().isRegistered(player):
+ arenaId = int(event.replace("4_",""))
+ Event.getInstance().addSpectator(player, arenaId)
+ return "default.htm"
+
+ def onTalk (self, npc, player):
+ return initialhtml
+
+QUEST = Quest(-1, qn, "custom")
+CREATED = State('Start', QUEST)
+STARTED = State('Started', QUEST)
+
+QUEST.setInitialState(CREATED)
+
+QUEST.addStartNpc(NPCID)
+QUEST.addTalkId(NPCID)
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/default.htm
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/default.htm (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/default.htm (working copy)
@@ -0,0 +1,3 @@
+<html><body>Event Arena Manager:<br>
+I have nothing to say to you!
+</body></html>
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/no-leader.htm
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/no-leader.htm (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/no-leader.htm (working copy)
@@ -0,0 +1,4 @@
+<html><body>Event Arena Manager:<br>
+Only party leader can do this <br>
+bla bla bla bla bla bla bla bla bla bla <br>
+</body></html>
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/no-party.htm
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/no-party.htm (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/no-party.htm (working copy)
@@ -0,0 +1,4 @@
+<html><body>Event Arena Manager:<br>
+You're not in party <br>
+bla bla bla bla bla bla bla bla bla bla <br>
+</body></html>
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/only-noble.htm
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/only-noble.htm (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/only-noble.htm (working copy)
@@ -0,0 +1,3 @@
+<html><body>Event Arena Manager:<br>
+Only nobless can participate <br>
+</body></html>
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/only-two.htm
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/only-two.htm (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/only-two.htm (working copy)
@@ -0,0 +1,4 @@
+<html><body>Event Arena Manager:<br>
+You must be in party with only Two members <br>
+bla bla bla bla bla bla bla bla bla bla <br>
+</body></html>
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/registered.htm
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/registered.htm (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/registered.htm (working copy)
@@ -0,0 +1,4 @@
+<html><body>Event Arena Manager:<br>
+You're registered successful <br>
+bla bla bla bla bla bla bla bla bla bla <br>
+</body></html>
\ No newline at end of file
Index: datapack/data/scripts/custom/8010_ArenaEvent/unregistered.htm
===================================================================
--- datapack/data/scripts/custom/8010_ArenaEvent/unregistered.htm (revision 0)
+++ datapack/data/scripts/custom/8010_ArenaEvent/unregistered.htm (working copy)
@@ -0,0 +1,4 @@
+<html><body>Event Arena Manager:<br>
+You're unregistered successful <br>
+bla bla bla bla bla bla bla bla bla bla <br>
+</body></html>
\ No newline at end of file
Index: datapack/data/scripts.cfg
===================================================================
--- datapack/data/scripts.cfg (revision 938)
+++ datapack/data/scripts.cfg (working copy)
@@ -43,6 +43,7 @@
custom/8871_gve/__init__.py
custom/6666_NoblessTrader/__init__.py
custom/6667_ClanManager/__init__.py
+custom/8010_ArenaEvent/__init__.py
# quests
quests/SagasSuperclass/__init__.py
Index: gameserver/config/frozen/arena.properties
===================================================================
--- gameserver/config/frozen/arena.properties (revision 0)
+++ gameserver/config/frozen/arena.properties (working copy)
@@ -0,0 +1,24 @@
+# Arena Event
+ArenaEventEnabled = True
+
+# Arenas Location
+# e.g: 149360, 46594, -3415; x, y, z; x1, y1, z1
+ArenasLoc = 149360, 46594, -3415;
+
+# item to give to winners
+ArenaRewardId = 57
+
+# Count of item to give to winners
+ArenaRewardCount = 2000000
+
+# If False Players cannot use grade S
+ArenaAllowS = False
+
+# Time between check players status [in seconds]
+ArenaBattleCheckInterval = 15
+
+# Time between Call registered players [in seconds]
+ArenaBattleCallInterval = 60
+
+# Time to start battle after players are called [in seconds]
+ArenaBattleWaitInterval = 20
\ No newline at end of file
Index: gameserver/head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -454,11 +454,11 @@
public List<String> active_boxes_characters = new ArrayList<String>();
/** UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=? ,face=?,hairStyle=?,hairColor =?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have =?,rec_left=?,clanid=?,maxload =?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs =?,wantspeace=?,base_class =?,onlinetime=?,in_jail=?,jail_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date =?,lvl_joined_academy =?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=? ,char_name=?,death_penalty_level=?,good=?,evil=?,gve_kills=? WHERE obj_id=?. */
- private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,pc_point=?,name_color=?,title_color=?,aio=?,aio_end=? WHERE obj_id=?";
+ private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,pc_point=?,name_color=?,title_color=?,aio=?,aio_end=?,arena_wins=?,arena_defeats=? WHERE obj_id=?";
/** SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, in_jail, jail_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,good,evil,gve_kills FROM characters WHERE obj_id=?. */
//private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, in_jail, jail_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,pc_point,banchat_time,name_color,title_color,first_log,aio,aio_end FROM characters WHERE obj_id=?";
- private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon,punish_level,punish_timer,"+/* in_jail, jail_timer,*/ "newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,pc_point"+/*,banchat_time*/",name_color,title_color,first_log,aio,aio_end FROM characters WHERE obj_id=?";
+ private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon,punish_level,punish_timer,"+/* in_jail, jail_timer,*/ "newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,pc_point"+/*,banchat_time*/",name_color,title_color,first_log,aio,aio_end,arena_wins,arena_defeats FROM characters WHERE obj_id=?";
/** The Constant STATUS_DATA_GET. */
private static final String STATUS_DATA_GET = "SELECT hero, noble, donator, hero_end_date FROM characters_custom_data WHERE obj_Id = ?";
@@ -4249,6 +4249,8 @@
/** The _moving task defined. */
private Boolean _movingTaskDefined = false;
+
+ private boolean inArenaEvent = false;
/**
* MoveOnAttack Task.
@@ -10132,6 +10134,8 @@
player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level"));
player.setAio(rset.getInt("aio") == 1 ? true : false);
player.setAioEndTime(rset.getLong("aio_end"));
+ player.setArenaWins(rset.getInt("arena_wins"));
+ player.setArenaDefeats(rset.getInt("arena_defeats"));
// Add the L2PcInstance object in _allObjects
//L2World.getInstance().storeObject(player);
@@ -10217,6 +10221,8 @@
return player;
}
+
+
/**
* Gets the mail.
*
@@ -10614,8 +10620,10 @@
statement.setInt(60, isAio() ? 1 : 0);
statement.setLong(61, getAioEndTime());
+ statement.setInt(62, arenaWins);
+ statement.setInt(63, arenaDefeats);
- statement.setInt(62, getObjectId());
+ statement.setInt(64, getObjectId());
//statement.setLong(58, getChatBanTimer());
@@ -19642,5 +19650,32 @@
}
}
+
+ public void setInArenaEvent(boolean val) {
+ inArenaEvent = val;
+ }
+ public boolean isInArenaEvent() {
+ return inArenaEvent;
+ }
+
+ private int arenaDefeats;
+ private int arenaWins;
+
+ public void increaseArenaDefeats() {
+ arenaDefeats++;
+ }
+
+ public void increaseArenaWins() {
+ arenaWins++;
+ }
+
+ private void setArenaDefeats(int val) {
+ arenaDefeats = val;
+ }
+
+ private void setArenaWins(int val) {
+ arenaWins = val;
+ }
+
}
Index: gameserver/head-src/com/l2jfrozen/gameserver/model/entity/event/EvtArenaManager.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/model/entity/event/EvtArenaManager.java (revision 0)
+++ gameserver/head-src/com/l2jfrozen/gameserver/model/entity/event/EvtArenaManager.java (working copy)
@@ -0,0 +1,464 @@
+package com.l2jfrozen.gameserver.model.entity.event;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import javolution.util.FastList;
+import javolution.util.FastMap;
+
+import com.l2jfrozen.Config;
+import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
+import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate;
+import com.l2jfrozen.gameserver.network.serverpackets.ItemList;
+import com.l2jfrozen.gameserver.templates.L2Item;
+import com.l2jfrozen.util.L2FastList;
+import com.l2jfrozen.util.random.Rnd;
+
+/**
+ * Event Arena Manager.
+ *
+ *
+ * This Event works only in pairs. Two players must to do a party and the leader register in the event
+ * if any member of party already registered, then the registrations fails. Only leader can removes
+ * from event. anyone can see the battles except the registered player in event.
+ * The battle only finish when only one party keep alive. In the end of each battle, winners earn a reward.
+ *
+ * The event is open all the time. have a little interval between call of battles of 1 minute
+ *
+ * @author Alisson Oliveira
+ *
+ */
+public class EvtArenaManager implements Runnable {
+
+ // list of participants
+ private List<Pair> registered;
+ // number of Arenas
+ private int free = Config.ARENA_EVENT_COUNT;
+ // Arenas
+ private Arena[] arenas = new Arena[Config.ARENA_EVENT_COUNT];
+ // list of fights going on
+ private Map<Integer, String> fights = new FastMap<Integer, String>(Config.ARENA_EVENT_COUNT);
+
+ public EvtArenaManager() {
+ registered = new L2FastList<Pair>();
+ int[] coord;
+ for(int i=0; i < Config.ARENA_EVENT_COUNT; i++) {
+ coord = Config.ARENA_EVENT_LOCS;
+ arenas = new Arena(i, coord[0], coord[1], coord[2]);
+ }
+ System.out.println("Initialized Arena Event");
+ }
+
+
+ public static EvtArenaManager getInstance() {
+ return SingletonHolder.INSTANCE;
+ }
+
+ public boolean register(L2PcInstance player, L2PcInstance assist) {
+ for(Pair p : registered) {
+ if(p.getLeader() == player || p.getAssist() == player) {
+ player.sendMessage("You Already registered");
+ return false;
+ } else if (p.getLeader() == assist || p.getAssist() == assist) {
+ player.sendMessage("Your Partner Already registered");
+ return false;
+ }
+ }
+ if(!Config.ARENA_ALLOW_S) {
+ checkItems(player);
+ checkItems(assist);
+ }
+ return registered.add(new Pair(player, assist));
+ }
+
+ private void checkItems(L2PcInstance player){
+ L2ItemInstance item;
+ int slot;
+ for(int i=1; i < 15; i++){
+ item = player.getInventory().getPaperdollItem(i);
+ if(item==null)
+ continue;
+ if(item.getItem().getItemGrade() == L2Item.CRYSTAL_S){
+ slot = item.getItem().getBodyPart();
+ switch(item.getEquipSlot()) {
+ case 1:
+ slot = L2Item.SLOT_L_EAR;
+ break;
+ case 2:
+ slot = L2Item.SLOT_R_EAR;
+ break;
+ case 4:
+ slot = L2Item.SLOT_L_FINGER;
+ break;
+ case 5:
+ slot = L2Item.SLOT_R_FINGER;
+ break;
+ default:
+ break;
+ }
+
+ L2ItemInstance[] items = player.getInventory().unEquipItemInBodySlotAndRecord(slot);
+ InventoryUpdate iu = new InventoryUpdate();
+ iu.addItems(Arrays.asList(items));
+ player.sendPacket(iu);
+ }
+ }
+ player.sendPacket(new ItemList(player, true));
+ player.broadcastUserInfo();
+ }
+
+ public boolean isRegistered(L2PcInstance player) {
+ for(Pair p : registered) {
+ if(p.getLeader() == player || p.getAssist() == player) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void addSpectator(L2PcInstance spec, int arenaId) {
+ Arena arena = getArena(arenaId);
+ if(arena != null)
+ arena.addSpectator(spec);
+ }
+
+ private Arena getArena(int id) {
+ for(Arena arena : arenas) {
+ if(arena.id == id) {
+ return arena;
+ }
+ }
+ return null;
+ }
+
+ public Map<Integer, String> getFights() {
+ return fights;
+ }
+
+ public boolean remove(L2PcInstance player) {
+ for(Pair p : registered) {
+ if(p.getLeader() == player) {
+ registered.remove(p);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public synchronized void run() {
+ // while server is running
+ while(true) {
+ // if no have participants or arenas are busy wait 1 minute
+ if(registered.size() < 2 || free == 0) {
+ try {
+ Thread.sleep(Config.ARENA_CALL_INTERVAL);
+ } catch (InterruptedException e) {
+ if(Config.ENABLE_ALL_EXCEPTIONS)
+ e.printStackTrace();
+ }
+ continue;
+ }
+ List<Pair> opponents = selectOpponents();
+ if(opponents != null && opponents.size() == 2) {
+ Thread T = new Thread(new EvtArenaTask(opponents));
+ T.setDaemon(true);
+ T.start();
+ }
+ //wait 1 minute for not stress server
+ try {
+ Thread.sleep(Config.ARENA_CALL_INTERVAL);
+ } catch (InterruptedException e) {
+ if(Config.ENABLE_ALL_EXCEPTIONS)
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private List<Pair> selectOpponents() {
+ List<Pair> opponents = new FastList<Pair>();
+ Pair pairOne=null, pairTwo=null;
+ int tries = 3;
+ do {
+ int first = 0, second = 0;
+ if(getRegisteredCount() < 2)
+ return opponents;
+
+ if(pairOne == null) {
+ first = Rnd.get(getRegisteredCount());
+ pairOne = registered.get(first);
+ if(pairOne.check()) {
+ opponents.add(0,pairOne);
+ registered.remove(first);
+ } else {
+ pairOne = null;
+ registered.remove(first);
+ return null;
+ }
+
+ }
+ if(pairTwo == null) {
+ second = Rnd.get(getRegisteredCount());
+ pairTwo = registered.get(second);
+ if(pairTwo.check()){
+ opponents.add(1, pairTwo);
+ registered.remove(second);
+ } else {
+ pairTwo = null;
+ registered.remove(second);
+ return null;
+ }
+
+ }
+ } while ((pairOne == null || pairTwo == null) && --tries > 0);
+ return opponents;
+ }
+
+ public int getRegisteredCount() {
+ return registered.size();
+ }
+
+ private class Pair {
+ private L2PcInstance leader, assist;
+
+ public Pair(L2PcInstance leader, L2PcInstance assist) {
+ this.leader = leader;
+ this.assist = assist;
+ }
+
+ public L2PcInstance getAssist() {
+ return assist;
+ }
+
+ public L2PcInstance getLeader() {
+ return leader;
+ }
+
+ /*
+ * This method send messages to player, but not implement the remotion.
+ * must be removed from caller
+ *
+ */
+ public boolean check(){
+ if((leader == null || leader.isOnline()==0) && (assist != null && assist.isOnline()==1)) {
+ assist.sendMessage("ArenaEventManager: You participation in Event was Canceled");
+ return false;
+ } else if( (assist == null || assist.isOnline()==0) && (leader != null && leader.isOnline()==1)) {
+ leader.sendMessage("ArenaEventManager: You participation in Event was Canceled");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean isAlive() {
+ if((leader == null || leader.isOnline()==0) && (assist==null || assist.isOnline()==0)){
+ return false;
+ } else if((leader == null || leader.isOnline()==0)) {
+ return !assist.isDead();
+ } else if((assist == null || assist.isOnline()==0)) {
+ return !leader.isDead();
+ }
+ return !(leader.isDead() && assist.isDead());
+ }
+
+ public void teleportTo(int x, int y, int z) {
+ if(leader != null) {
+ leader.restoreCP();
+ leader.restoreHPMP();
+ leader.teleToLocation(x, y, z);
+ }
+ if(assist != null) {
+ assist.restoreCP();
+ assist.restoreHPMP();
+ assist.teleToLocation(x, y, z);
+ }
+ }
+
+ public void rewards() {
+ if(leader != null) {
+ leader.getInventory().addItem("Arena_Event", Config.ARENA_REWARD_ID, Config.ARENA_REWARD_COUNT, leader, null);
+ leader.sendPacket( new ItemList(leader, true));
+ leader.increaseArenaWins();
+ }
+ if(assist != null) {
+ assist.getInventory().addItem("Arena_Event", Config.ARENA_REWARD_ID, Config.ARENA_REWARD_COUNT, assist, null);
+ assist.sendPacket( new ItemList(assist, true));
+ assist.increaseArenaWins();
+ }
+ sendMessage("Arena Event Manager: You Win!!!");
+ }
+
+ public void setInEvent(boolean val) {
+ if(leader != null)
+ leader.setInArenaEvent(val);
+ if(assist != null)
+ assist.setInArenaEvent(val);
+ }
+
+ public void revive() {
+ if(leader != null)
+ leader.doRevive();
+ if(assist != null)
+ assist.doRevive();
+ }
+
+ public void setImobilised(boolean val) {
+ if(leader != null) {
+ leader.setIsInvul(val);
+ leader.setIsImobilised(val);
+ }
+ if(assist != null) {
+ assist.setIsInvul(val);
+ assist.setIsImobilised(val);
+ }
+ }
+
+ public void sendMessage(String msg) {
+ if(leader != null){
+ leader.sendMessage(msg);
+ }
+ if(assist != null) {
+ assist.sendMessage(msg);
+ }
+ }
+
+ public void removeEffects() {
+ if(leader != null) {
+ leader.stopAllEffects();
+ }
+ if(assist != null) {
+ assist.stopAllEffects();
+ }
+ }
+
+ public void increasedefeats() {
+ if(leader != null)
+ leader.increaseArenaDefeats();
+ if(assist != null)
+ assist.increaseArenaDefeats();
+ }
+ }
+
+ private class EvtArenaTask implements Runnable {
+
+ private final Pair pairOne;
+ private final Pair pairTwo;
+ private final int pOneX, pOneY, pOneZ, pTwoX, pTwoY, pTwoZ;
+ private Arena arena;
+
+ public EvtArenaTask(List<Pair> opponents) {
+ pairOne = opponents.get(0);
+ pairTwo = opponents.get(1);
+ L2PcInstance leader = pairOne.getLeader();
+ pOneX = leader.getX();
+ pOneY = leader.getY();
+ pOneZ = leader.getZ();
+ leader = pairTwo.getLeader();
+ pTwoX = leader.getX();
+ pTwoY = leader.getY();
+ pTwoZ = leader.getZ();
+ }
+
+ @Override
+ public void run() {
+ free--;
+ portPairsToArena();
+ pairOne.sendMessage("The battle starts in 20 seconds");
+ pairTwo.sendMessage("The battle starts in 20 seconds");
+ try {
+ Thread.sleep(Config.ARENA_WAIT_INTERVAL);
+ } catch (InterruptedException e1) {
+ e1.printStackTrace();
+ }
+ pairOne.sendMessage("The battle starts now");
+ pairTwo.sendMessage("The battle starts now");
+ pairOne.setImobilised(false);
+ pairTwo.setImobilised(false);
+
+ while(check()) {
+ // check players status each seconds
+ try {
+ Thread.sleep(Config.ARENA_CHECK_INTERVAL);
+ } catch (InterruptedException e) {
+ if(Config.ENABLE_ALL_EXCEPTIONS)
+ e.printStackTrace();
+ break;
+ }
+ }
+ finishDuel();
+ free++;
+ }
+
+ private void finishDuel() {
+ fights.remove(arena.id);
+ rewardWinner();
+ pairOne.revive();
+ pairTwo.revive();
+ pairOne.teleportTo(pOneX, pOneY, pOneZ);
+ pairTwo.teleportTo(pTwoX, pTwoY, pTwoZ);
+ pairOne.setInEvent(false);
+ pairTwo.setInEvent(false);
+ arena.setFree(true);
+ }
+
+ private void rewardWinner() {
+ if(pairOne.isAlive() && !pairTwo.isAlive()){
+ pairOne.rewards();
+ pairTwo.increasedefeats();
+ } else if(pairTwo.isAlive() && !pairOne.isAlive()){
+ pairTwo.rewards();
+ pairOne.increasedefeats();
+ }
+ }
+
+ private boolean check() {
+ return (pairOne.isAlive() && pairTwo.isAlive());
+ }
+
+ private void portPairsToArena() {
+ for(Arena arena : arenas) {
+ if(arena.isFree) {
+ this.arena = arena;
+ arena.setFree(false);
+ pairOne.teleportTo(arena.x - 300, arena.y, arena.z);
+ pairTwo.teleportTo(arena.x + 300, arena.y, arena.z);
+ pairOne.removeEffects();
+ pairTwo.removeEffects();
+ pairOne.setImobilised(true);
+ pairTwo.setImobilised(true);
+ pairOne.setInEvent(true);
+ pairTwo.setInEvent(true);
+ fights.put(this.arena.id, pairOne.getLeader().getName() +" vs "+ pairTwo.getLeader().getName());
+ break;
+ }
+ }
+ }
+ }
+
+ private class Arena {
+ protected int x, y, z;
+ protected boolean isFree = true;
+ private int id;
+
+ public Arena(int id, int x, int y, int z) {
+ this.id = id;
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ public void setFree(boolean val) {
+ isFree = val;
+ }
+
+ public void addSpectator(L2PcInstance spec) {
+ spec.enterObserverMode(x, y, z);
+ }
+ }
+
+ private static class SingletonHolder {
+ protected static final EvtArenaManager INSTANCE = new EvtArenaManager();
+ }
+}
Index: gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/Action.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/Action.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/Action.java (working copy)
@@ -89,12 +89,14 @@
}
// Only GMs can directly interact with invisible characters
- if (obj instanceof L2PcInstance
- && (((L2PcInstance)obj).getAppearance().getInvisible())
- && !activeChar.isGM())
- {
- getClient().sendPacket(ActionFailed.STATIC_PACKET);
- return;
+ if (obj instanceof L2PcInstance) {
+ L2PcInstance player = (L2PcInstance)obj;
+ if (player.getAppearance().getInvisible() && !activeChar.isGM()
+ || player.isInArenaEvent() && !activeChar.isInArenaEvent()
+ || !player.isInArenaEvent() && activeChar.isInArenaEvent()) {
+ getClient().sendPacket(ActionFailed.STATIC_PACKET);
+ return;
+ }
}
// Check if the target is valid, if the player haven't a shop or isn't the requester of a transaction (ex : FriendInvite, JoinAlly, JoinParty...)
Index: gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java (working copy)
@@ -43,6 +43,12 @@
if (player == null)
return;
+
+ if (player.isInArenaEvent()) {
+ player.sendMessage("You cannot logou while in Arena Event");
+ player.sendPacket(ActionFailed.STATIC_PACKET);
+ return;
+ }
if (player.isInFunEvent() && !player.isGM())
{
Index: gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java (working copy)
@@ -33,6 +33,7 @@
import com.l2jfrozen.gameserver.model.L2Object;
import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jfrozen.gameserver.model.entity.event.EvtArenaManager;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.EtcStatusUpdate;
@@ -155,6 +156,12 @@
// Items that cannot be used
if(itemId == 57)
return;
+
+ if(!Config.ARENA_ALLOW_S && item.getItem().getItemGrade() == L2Item.CRYSTAL_S &&
+ (activeChar.isInArenaEvent() || EvtArenaManager.getInstance().isRegistered(activeChar))){
+ activeChar.sendMessage("Event Arena Manager: Items Grade S cannot be used in Arena Event");
+ return;
+ }
if((itemId == 5858) && (ClanHallManager.getInstance().getClanHallByOwner(activeChar.getClan()) == null))
{
Index: gameserver/head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java (working copy)
@@ -63,7 +63,7 @@
_canTeleport = !((TvT.is_started() && player._inEventTvT)
|| (DM.is_started() && player._inEventDM)
|| (CTF.is_started() && player._inEventCTF)
- || player.isInFunEvent()
+ || player.isInFunEvent() || player.isInArenaEvent()
|| player.isPendingRevive());
}
_charObjId = cha.getObjectId();
Index: gameserver/head-src/com/l2jfrozen/gameserver/network/L2GameClient.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/network/L2GameClient.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/gameserver/network/L2GameClient.java (working copy)
@@ -842,6 +842,10 @@
L2PcInstance player = L2GameClient.this.getActiveChar();
if (player != null) // this should only happen on connection loss
{
+ if(player.isInArenaEvent()){
+ player.increaseArenaDefeats();
+ player.setXYZ(82698, 148638, -3473);
+ }
// we store all data from players who are disconnected while in an event in order to restore it in the next login
if(player.atEvent)
{
Index: gameserver/head-src/com/l2jfrozen/gameserver/GameServer.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/GameServer.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/gameserver/GameServer.java (working copy)
@@ -118,6 +118,7 @@
import com.l2jfrozen.gameserver.model.entity.Announcements;
import com.l2jfrozen.gameserver.model.entity.Hero;
import com.l2jfrozen.gameserver.model.entity.MonsterRace;
+import com.l2jfrozen.gameserver.model.entity.event.EvtArenaManager;
import com.l2jfrozen.gameserver.model.entity.event.manager.EventManager;
import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSigns;
@@ -166,6 +167,9 @@
// Local Constants
final String LOG_FOLDER = "log";
+ // Load GameServer Configs
+ Config.load();
+
// Create log folder
File logFolder = new File(Config.DATAPACK_ROOT, LOG_FOLDER);
logFolder.mkdir();
@@ -184,9 +188,6 @@
// Print L2jfrozen's Logo
L2Frozen.info();
- // Load GameServer Configs
- Config.load();
-
Util.printSection("Database");
L2DatabaseFactory.getInstance();
_log.info("L2DatabaseFactory: loaded.");
@@ -546,6 +547,10 @@
else
_log.info("All events are Disabled.");
+ if(Config.ARENA_EVENT_ENABLED) {
+ ThreadPoolManager.getInstance().scheduleGeneral(EvtArenaManager.getInstance(), 60000);
+ }
+
if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
OfflineTradeTable.restoreOfflineTraders();
Index: gameserver/head-src/com/l2jfrozen/Config.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/Config.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/Config.java (working copy)
@@ -616,8 +616,58 @@
public static int FS_PARTY_MEMBER_COUNT;
public static boolean ALLOW_QUAKE_SYSTEM;
public static boolean ENABLE_ANTI_PVP_FARM_MSG;
+
+ public static boolean ARENA_EVENT_ENABLED;
+
+ public static int ARENA_EVENT_COUNT;
+
+ public static int[][] ARENA_EVENT_LOCS;
+
+ public static int ARENA_REWARD_ID;
+
+ public static int ARENA_REWARD_COUNT;
+
+ public static boolean ARENA_ALLOW_S;
+
+ public static int ARENA_CHECK_INTERVAL;
+
+ public static int ARENA_CALL_INTERVAL;
+
+ public static int ARENA_WAIT_INTERVAL;
+ public static void loadArenaConfig() {
+ try {
+ Properties arenaSettings = new Properties();
+ InputStream is = new FileInputStream(new File(FService.EVENT_ARENA_FILE));
+ arenaSettings.load(is);
+ is.close();
+
+ ARENA_EVENT_ENABLED = Boolean.parseBoolean(arenaSettings.getProperty("ArenaEventEnabled", "false"));
+ if(ARENA_EVENT_ENABLED) {
+ String[] arenaLocs = arenaSettings.getProperty("ArenasLoc","").split(";");
+ String[] locSplit = null;
+ ARENA_EVENT_COUNT = arenaLocs.length;
+ ARENA_EVENT_LOCS = new int[ARENA_EVENT_COUNT][3];
+ for(int i=0; i < ARENA_EVENT_COUNT; i++) {
+ locSplit = arenaLocs.split(",");
+ for(int j=0; j < 3; j++) {
+ ARENA_EVENT_LOCS[j] = Integer.parseInt(locSplit[j].trim());
+ }
+ }
+ ARENA_REWARD_ID = Integer.parseInt(arenaSettings.getProperty("ArenaRewardId","57"));
+ ARENA_REWARD_COUNT = Integer.parseInt(arenaSettings.getProperty("ArenaRewardCount", "1"));
+ ARENA_ALLOW_S = Boolean.parseBoolean(arenaSettings.getProperty("ArenaAllowS","false"));
+ ARENA_CHECK_INTERVAL = Integer.parseInt(arenaSettings.getProperty("ArenaBattleCheckInterval","15"))*1000;
+ ARENA_CALL_INTERVAL = Integer.parseInt(arenaSettings.getProperty("ArenaBattleCallInterval","60"))*1000;
+ ARENA_WAIT_INTERVAL = Integer.parseInt(arenaSettings.getProperty("ArenaBattleWaitInterval","20"))*1000;
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+
//============================================================
public static void loadOtherConfig()
{
@@ -4436,6 +4486,7 @@
// Load network
loadServerConfig();
+ loadArenaConfig();
// Load system
loadIdFactoryConfig();
Index: gameserver/head-src/com/l2jfrozen/FService.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/FService.java (revision 938)
+++ gameserver/head-src/com/l2jfrozen/FService.java (working copy)
@@ -71,6 +71,7 @@
public static final String EVENT_TVT_FILE = "./config/frozen/tvt.properties";
public static final String EVENT_TW_FILE = "./config/frozen/tw.properties";
public static final String IRC_FILE = "./config/frozen/irc.properties";
+ public static final String EVENT_ARENA_FILE = "./config/frozen/arena.properties";
//fun -- events
public static final String AWAY_FILE = "./config/fun/away.properties";

 

Editado por gleyce123
Link para o comentário
Compartilhar em outros sites

18 respostass a esta questão

Posts recomendados


  • 0

 

 

 

Cara se não me engano é aqui nessa linha em vermelho você coloca quantos menbros em cada party : if party.getMemberCount() != 4: return "only-two.htm"

 

Se não der certo você mudar aqui também, mas é a soma no que está em vermelho a cima. ex: se for 3+3= 6
elif event.startswith("4_"):
if not Event.getInstance().isRegistered(player):
arenaId = int(event.replace("4_",""))
muda um de cada vez e vai testando, eu mexi nisso faz tempo, agora não to no pc. mas da certo assim.
Editado por Ricardo junenho

Pagina - > Lineage 2 - Perfil L2 - > Ricardo Dv Oliveira

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigada irei testar!!


 

Cara se não me engano é aqui nessa linha em vermelho você coloca quantos menbros em cada party : if party.getMemberCount() != 4: return "only-two.htm"

 

Se não der certo você mudar aqui também, mas é a soma no que está em vermelho a cima. ex: se for 3+3= 6
elif event.startswith("4_"):
if not Event.getInstance().isRegistered(player):
arenaId = int(event.replace("4_",""))
muda um de cada vez e vai testando, eu mexi nisso faz tempo, agora não to no pc. mas da certo assim.

 

Amigo tentei colocar o 4x4, porém não deu certo... se poder me ajudar está ai a config.

 

 

class Quest (JQuest) :
def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)
def onEvent(self,event,st):
player = st.getPlayer()
html = initialhtml
if event == "1":
party = player.getParty()
if not party: return "no-party.htm"
if not party.isLeader(player): return "no-leader.htm"
if party.getMemberCount() != 4: return "only-two.htm"
if not player.isNoble(): return "only-noble.htm"
if player.isInOlympiadMode(): return "nooly.htm"
if player._inEventTvT: return "noevt.htm"
if player._inEventDM: return "noevt.htm"
if player._inEventCTF: return "noevt.htm"
assist = party.getPartyMembers()[3] # get the last player in party
if not assist.isNoble(): return "only-noble.htm"
if assist.isInOlympiadMode(): return "nooly.htm"
if assist._inEventTvT: return "noevt.htm"
if assist._inEventDM: return "noevt.htm"
if assist._inEventCTF: return "noevt.htm"
if Event.getInstance().register(player, assist):
return "registered.htm"
elif event == "2":
if Event.getInstance().remove(player):
return "unregistered.htm"
elif event == "3":
fights = Event.getInstance().getFights()
html = "<html><body>Event Arena Manager:<br> <br> Fights: <br>"
if len(fights) == 0:
html += "No fights going on right now<br></body></html>"
else:
for id in fights.keySet():
html += "<a action=\"bypass -h Quest "+ qn +" 4_"+str(id)+"\">"+fights.get(id)+"</a><br><br>"
html += "</body></html>"
return html
elif event.startswith("8_"):
if not Event.getInstance().isRegistered(player):
arenaId = int(event.replace("8_",""))
Event.getInstance().addSpectator(player, arenaId)
return "default.htm"

Link para o comentário
Compartilhar em outros sites

  • 0

 

Obrigada irei testar!!

Amigo tentei colocar o 4x4, porém não deu certo... se poder me ajudar está ai a config.

 

 

class Quest (JQuest) :
def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)
def onEvent(self,event,st):
player = st.getPlayer()
html = initialhtml
if event == "1":
party = player.getParty()
if not party: return "no-party.htm"
if not party.isLeader(player): return "no-leader.htm"
if party.getMemberCount() != 4: return "only-two.htm"
if not player.isNoble(): return "only-noble.htm"
if player.isInOlympiadMode(): return "nooly.htm"
if player._inEventTvT: return "noevt.htm"
if player._inEventDM: return "noevt.htm"
if player._inEventCTF: return "noevt.htm"
assist = party.getPartyMembers()[3] # get the last player in party
if not assist.isNoble(): return "only-noble.htm"
if assist.isInOlympiadMode(): return "nooly.htm"
if assist._inEventTvT: return "noevt.htm"
if assist._inEventDM: return "noevt.htm"
if assist._inEventCTF: return "noevt.htm"
if Event.getInstance().register(player, assist):
return "registered.htm"
elif event == "2":
if Event.getInstance().remove(player):
return "unregistered.htm"
elif event == "3":
fights = Event.getInstance().getFights()
html = "<html><body>Event Arena Manager:<br> <br> Fights: <br>"
if len(fights) == 0:
html += "No fights going on right now<br></body></html>"
else:
for id in fights.keySet():
html += "<a action=\"bypass -h Quest "+ qn +" 4_"+str(id)+"\">"+fights.get(id)+"</a><br><br>"
html += "</body></html>"
return html
elif event.startswith("8_"):
if not Event.getInstance().isRegistered(player):
arenaId = int(event.replace("8_",""))
Event.getInstance().addSpectator(player, arenaId)
return "default.htm"

 

Deixa eu chegar em casa, ai te mando certinho.

pois eu testo o meu.

Pagina - > Lineage 2 - Perfil L2 - > Ricardo Dv Oliveira

Link para o comentário
Compartilhar em outros sites

  • 0

Ta certo quando chegar em casa da uma luz aqui pfv!!

Cara o meu abaixa esta 9x9.

Minha Rev é lionna, mas só mudar pra frozen.

# Author Alisson Oliveira
import sys
from com.l2jlionna.gameserver.model.quest        import State
from com.l2jlionna.gameserver.model.quest        import QuestState
from com.l2jlionna.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2jlionna.gameserver.model.entity.event import EvtArenaManager as Event
from java.util import Map

qn = "8010_ArenaEvent"
NPCID = 93001
initialhtml = "1.htm"

class Quest (JQuest) :
    def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)
    
    def onEvent(self,event,st):
        player = st.getPlayer()
        html = initialhtml
        if event == "1":
           party = player.getParty()
           if not party: return "no-party.htm"
           if not party.isLeader(player): return "no-leader.htm"
           if party.getMemberCount() != 9: return "only-two.htm"
           if not player.isNoble(): return "only-noble.htm"
           if player.isInOlympiadMode(): return "nooly.htm"
           if player._inEventTvT: return "noevt.htm"
           if player._inEventDM: return "noevt.htm"
           if player._inEventCTF: return "noevt.htm"
           assist = party.getPartyMembers()[1] # get the last player in party
           if not assist.isNoble(): return "only-noble.htm"
           if assist.isInOlympiadMode(): return "nooly.htm"
           if assist._inEventTvT: return "noevt.htm"
           if assist._inEventDM: return "noevt.htm"
           if assist._inEventCTF: return "noevt.htm"
           if Event.getInstance().register(player, assist):
              return "registered.htm"
        elif event == "2":
           if Event.getInstance().remove(player):
              return "unregistered.htm"
        elif event == "3":
           fights = Event.getInstance().getFights()
           html = "<html><body>Event Arena Manager:<br> <br> Fights: <br>"
           if len(fights) == 0:
              html += "No fights going on right now<br></body></html>"
           else:
              for id in fights.keySet():
                 html += "<a action=\"bypass -h Quest "+ qn +" 4_"+str(id)+"\">"+fights.get(id)+"</a><br><br>"
              html += "</body></html>"
           return html
        elif event.startswith("4_"):
           if not Event.getInstance().isRegistered(player):
              arenaId = int(event.replace("4_",""))
              Event.getInstance().addSpectator(player, arenaId)           
        return "default.htm"
    
    def onTalk (self, npc, player):
        return initialhtml  
          
QUEST = Quest(-1, qn, "custom")
CREATED     = State('Start', QUEST)
STARTED     = State('Started', QUEST)

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(NPCID)
QUEST.addTalkId(NPCID)

Editado por Ricardo junenho

Pagina - > Lineage 2 - Perfil L2 - > Ricardo Dv Oliveira

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo ja fiz isso ai e está verificando quantas pessoas tem na party na hora de puxar so puxa 2 ...


 

Cara o meu abaixa esta 9x9.

Minha Rev é lionna, mas só mudar pra frozen.

# Author Alisson Oliveira
import sys
from com.l2jlionna.gameserver.model.quest        import State
from com.l2jlionna.gameserver.model.quest        import QuestState
from com.l2jlionna.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2jlionna.gameserver.model.entity.event import EvtArenaManager as Event
from java.util import Map

qn = "8010_ArenaEvent"
NPCID = 93001
initialhtml = "1.htm"

class Quest (JQuest) :
    def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)
    
    def onEvent(self,event,st):
        player = st.getPlayer()
        html = initialhtml
        if event == "1":
           party = player.getParty()
           if not party: return "no-party.htm"
           if not party.isLeader(player): return "no-leader.htm"
           if party.getMemberCount() != 9: return "only-two.htm"
           if not player.isNoble(): return "only-noble.htm"
           if player.isInOlympiadMode(): return "nooly.htm"
           if player._inEventTvT: return "noevt.htm"
           if player._inEventDM: return "noevt.htm"
           if player._inEventCTF: return "noevt.htm"
           assist = party.getPartyMembers()[1] # get the last player in party
           if not assist.isNoble(): return "only-noble.htm"
           if assist.isInOlympiadMode(): return "nooly.htm"
           if assist._inEventTvT: return "noevt.htm"
           if assist._inEventDM: return "noevt.htm"
           if assist._inEventCTF: return "noevt.htm"
           if Event.getInstance().register(player, assist):
              return "registered.htm"
        elif event == "2":
           if Event.getInstance().remove(player):
              return "unregistered.htm"
        elif event == "3":
           fights = Event.getInstance().getFights()
           html = "<html><body>Event Arena Manager:<br> <br> Fights: <br>"
           if len(fights) == 0:
              html += "No fights going on right now<br></body></html>"
           else:
              for id in fights.keySet():
                 html += "<a action=\"bypass -h Quest "+ qn +" 4_"+str(id)+"\">"+fights.get(id)+"</a><br><br>"
              html += "</body></html>"
           return html
        elif event.startswith("4_"):
           if not Event.getInstance().isRegistered(player):
              arenaId = int(event.replace("4_",""))
              Event.getInstance().addSpectator(player, arenaId)           
        return "default.htm"
    
    def onTalk (self, npc, player):
        return initialhtml  
          
QUEST = Quest(-1, qn, "custom")
CREATED     = State('Start', QUEST)
STARTED     = State('Started', QUEST)

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(NPCID)
QUEST.addTalkId(NPCID)


Eai amigo alguma noticia ?

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo ja fiz isso ai e está verificando quantas pessoas tem na party na hora de puxar so puxa 2 ...

 

Eai amigo alguma noticia ?

Eu até identifiquei onde alterar no core do mod pra colocar 4x4, 9x9, mais nao tenho ideia, de como fazer as opcoes na npc.

se eu conseguir eu posto aqui

Lineage 2 Lords

Link para o comentário
Compartilhar em outros sites

  • 0

Eu tentei alterar o código, mais vi que ele tem outras coisas para adicionar em outros lugares, e nao sei se eu Readicionar tudo novamente colocando 4 onde tem 2, 9 onde tem 2 ira funcionar, essa experiencia eu ainda nao tenho..

 

 

 

tenta esperar alguem responder, eles vao ajudar melhor

Lineage 2 Lords

Link para o comentário
Compartilhar em outros sites

  • 0
Em 26/09/2017 at 23:16, gleyce123 disse:

Tem muita gente que sabe só não quer ajudar :/

Oi, vi que esse poste já é de um mês e poco atrás, vocês conseguiram resolver esse enigma? Pois estou querendo por 4x4, 9x9 tbm e não estou conseguindo. kkk

??????

spacer.png

Link para o comentário
Compartilhar em outros sites

  • 0
Em 19/10/2017 at 15:35, gleyce123 disse:

Não não ninguem ajudou...

Putz que tenso, o pior é que tem gente que sabe e toda vez que ve nos pedindo ajuda, mandam msg privada tentando vender pra nós o código. Coisas que os ADMs aqui forum deveriam Banir esses cara,  porem passam de boas

spacer.png

Link para o comentário
Compartilhar em outros sites

  • 0
Em 14/09/2017 at 21:23, Ricardo junenho disse:

Cara o meu abaixa esta 9x9.

Minha Rev é lionna, mas só mudar pra frozen.


# Author Alisson Oliveira
import sys
from com.l2jlionna.gameserver.model.quest        import State
from com.l2jlionna.gameserver.model.quest        import QuestState
from com.l2jlionna.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2jlionna.gameserver.model.entity.event import EvtArenaManager as Event
from java.util import Map

qn = "8010_ArenaEvent"
NPCID = 93001
initialhtml = "1.htm"

class Quest (JQuest) :
    def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)
    
    def onEvent(self,event,st):
        player = st.getPlayer()
        html = initialhtml
        if event == "1":
           party = player.getParty()
           if not party: return "no-party.htm"
           if not party.isLeader(player): return "no-leader.htm"
           if party.getMemberCount() != 9: return "only-two.htm"
           if not player.isNoble(): return "only-noble.htm"
           if player.isInOlympiadMode(): return "nooly.htm"
           if player._inEventTvT: return "noevt.htm"
           if player._inEventDM: return "noevt.htm"
           if player._inEventCTF: return "noevt.htm"
           assist = party.getPartyMembers()[1] # get the last player in party
           if not assist.isNoble(): return "only-noble.htm"
           if assist.isInOlympiadMode(): return "nooly.htm"
           if assist._inEventTvT: return "noevt.htm"
           if assist._inEventDM: return "noevt.htm"
           if assist._inEventCTF: return "noevt.htm"
           if Event.getInstance().register(player, assist):
              return "registered.htm"
        elif event == "2":
           if Event.getInstance().remove(player):
              return "unregistered.htm"
        elif event == "3":
           fights = Event.getInstance().getFights()
           html = "<html><body>Event Arena Manager:<br> <br> Fights: <br>"
           if len(fights) == 0:
              html += "No fights going on right now<br></body></html>"
           else:
              for id in fights.keySet():
                 html += "<a action=\"bypass -h Quest "+ qn +" 4_"+str(id)+"\">"+fights.get(id)+"</a><br><br>"
              html += "</body></html>"
           return html
        elif event.startswith("4_"):
           if not Event.getInstance().isRegistered(player):
              arenaId = int(event.replace("4_",""))
              Event.getInstance().addSpectator(player, arenaId)           
        return "default.htm"
    
    def onTalk (self, npc, player):
        return initialhtml  
          
QUEST = Quest(-1, qn, "custom")
CREATED     = State('Start', QUEST)
STARTED     = State('Started', QUEST)

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(NPCID)
QUEST.addTalkId(NPCID)

tambem queria mudar qntia de player na pt pra ir junto na arena ,ai onde esta em vermelho ja mudei de trudo jeito ,mas apenas um membro da pt é puxado junto com o lider

Link para o comentário
Compartilhar em outros sites

  • -1

 

Olha cansei vou TENTAR fazer amanha se conseguir posto a todos .....

EU NAO TENTEI AINDA ANDO VIAJANDO DIRETO A SERVIÇO CHEGO CANSADO NEM ANIMO DA PRA MEXER COM JOGO EU ATE PAREI DE JOGAR AION POR CAUSA DO TEMPO..EU NEM ADC ESSE CODIGO AINDA .....ASSIM QUE ALIVIAR O SERVIÇO EU MEXO NESSE CODIGO

 

Editado por marcos-sayan

Atitudes Que Fazem A Diferença! 

Não vou dar suporte via mp e nem skype obrigado 

Eu não tenho mais arquivos antigos não tem como ajudar em questões antigas abrigado

Galera todos meus conteúdo estão no fórum..video do meu canal no youtube com revisão npc´s e etc.. estão aqui se não achar e pq não tem mais ...obrigado e espero que de tudo certo a vcs.....

 

Link para o comentário
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...
  • Registre-se

    Faça parte da maior e  mais antigas comunidades sobre Lineage2 da América Latina.





  • Patrocinadores

  • Quem Está Navegando

    • Nenhum usuário registrado visualizando esta página.
  • Posts

    • Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?    
    • muchas gracias muy lindos NPC 🙂
    • relaxa jovem gafanhoto, testa as quests. e posTa os erros indesejaveis.  
    • Se alguém pudesse me ensinar como codificar as missões, eu ficaria feliz em fazer isso sozinho ou pelo menos ajudar. Eu realmente quero jogar em um servidor onde todas as quests funcionem bem e melhor ainda se você puder fazer quests customizadas!
    • mas no interlude, nem todas as quests de class,  vai mostrar onde tem que ir, ate o reborn nao mostrava quando era interlude, só mostrou depois que eles colocaram client classic pra rodar, e ficou melhor ainda quando virou hellbound em diante, mas ha sim alguma chance de modificar isso direto no script para fazer igualmente, só basta te um pouco de paciencia e persistencia exato
    • 408_PathToElvenwizard dá Orion eu tive que mexer tbm, até modifiquei e consegui deixar ela igual do Classic, com a seta e a marcação no mapa. (não retail IL) Dá pra importar py de várias revs, o foda é que não da regular as quest py através do debug em tempo real, pelo menos eu não consegui rsrs
    • Hasta el momento todas las QUESTS son completables si te guias con un tutorial de youtube. El problema es que tienen bugs de locacion y de subquests que no avanzan o no te marcan correctamente a donde ir en el mapa, cosa que en Retail si se ve como corresponde.
    • estranho, mas pelo menos a galera nunca reclamo das quests quando tinha aberto 5x, geral fez class primeira e segunda job, poucos que compraram a class
    • en RUSaCis-3.5 data pack, las Quests estan en formato .java y son diferentes a como estan redactadas en jOrion y jFrozen 1.5 (ProyectX) package net.sf.l2j.gameserver.scripting.quest; import net.sf.l2j.commons.random.Rnd; import net.sf.l2j.gameserver.enums.Paperdoll; import net.sf.l2j.gameserver.enums.QuestStatus; import net.sf.l2j.gameserver.enums.actors.ClassId; 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.network.serverpackets.SocialAction; import net.sf.l2j.gameserver.scripting.QuestState; public class Q224_TestOfSagittarius extends SecondClassQuest { private static final String QUEST_NAME = "Q224_TestOfSagittarius"; // Items private static final int BERNARD_INTRODUCTION = 3294; private static final int HAMIL_LETTER_1 = 3295; private static final int HAMIL_LETTER_2 = 3296; private static final int HAMIL_LETTER_3 = 3297; private static final int HUNTER_RUNE_1 = 3298; private static final int HUNTER_RUNE_2 = 3299; private static final int TALISMAN_OF_KADESH = 3300; private static final int TALISMAN_OF_SNAKE = 3301; private static final int MITHRIL_CLIP = 3302; private static final int STAKATO_CHITIN = 3303; private static final int REINFORCED_BOWSTRING = 3304; private static final int MANASHEN_HORN = 3305; private static final int BLOOD_OF_LIZARDMAN = 3306; private static final int CRESCENT_MOON_BOW = 3028; private static final int WOODEN_ARROW = 17; // Rewards private static final int MARK_OF_SAGITTARIUS = 3293; // NPCs private static final int BERNARD = 30702; private static final int HAMIL = 30626; private static final int SIR_ARON_TANFORD = 30653; private static final int VOKIAN = 30514; private static final int GAUEN = 30717; // Monsters private static final int ANT = 20079; private static final int ANT_CAPTAIN = 20080; private static final int ANT_OVERSEER = 20081; private static final int ANT_RECRUIT = 20082; private static final int ANT_PATROL = 20084; private static final int ANT_GUARD = 20086; private static final int NOBLE_ANT = 20089; private static final int NOBLE_ANT_LEADER = 20090; private static final int BREKA_ORC_SHAMAN = 20269; private static final int BREKA_ORC_OVERLORD = 20270; private static final int MARSH_STAKATO_WORKER = 20230; private static final int MARSH_STAKATO_SOLDIER = 20232; private static final int MARSH_STAKATO_DRONE = 20234; private static final int MARSH_SPIDER = 20233; private static final int ROAD_SCAVENGER = 20551; private static final int MANASHEN_GARGOYLE = 20563; private static final int LETO_LIZARDMAN = 20577; private static final int LETO_LIZARDMAN_ARCHER = 20578; private static final int LETO_LIZARDMAN_SOLDIER = 20579; private static final int LETO_LIZARDMAN_WARRIOR = 20580; private static final int LETO_LIZARDMAN_SHAMAN = 20581; private static final int LETO_LIZARDMAN_OVERLORD = 20582; private static final int SERPENT_DEMON_KADESH = 27090; public Q224_TestOfSagittarius() { super(224, "Test Of Sagittarius"); setItemsIds(BERNARD_INTRODUCTION, HAMIL_LETTER_1, HAMIL_LETTER_2, HAMIL_LETTER_3, HUNTER_RUNE_1, HUNTER_RUNE_2, TALISMAN_OF_KADESH, TALISMAN_OF_SNAKE, MITHRIL_CLIP, STAKATO_CHITIN, REINFORCED_BOWSTRING, MANASHEN_HORN, BLOOD_OF_LIZARDMAN, CRESCENT_MOON_BOW); addQuestStart(BERNARD); addTalkId(BERNARD, HAMIL, SIR_ARON_TANFORD, VOKIAN, GAUEN); addMyDying(ANT, ANT_CAPTAIN, ANT_OVERSEER, ANT_RECRUIT, ANT_PATROL, ANT_GUARD, NOBLE_ANT, NOBLE_ANT_LEADER, BREKA_ORC_SHAMAN, BREKA_ORC_OVERLORD, MARSH_STAKATO_WORKER, MARSH_STAKATO_SOLDIER, MARSH_STAKATO_DRONE, MARSH_SPIDER, ROAD_SCAVENGER, MANASHEN_GARGOYLE, LETO_LIZARDMAN, LETO_LIZARDMAN_ARCHER, LETO_LIZARDMAN_SOLDIER, LETO_LIZARDMAN_WARRIOR, LETO_LIZARDMAN_SHAMAN, LETO_LIZARDMAN_OVERLORD, SERPENT_DEMON_KADESH); } @Override public String onAdvEvent(String event, Npc npc, Player player) { String htmltext = event; QuestState st = player.getQuestList().getQuestState(QUEST_NAME); if (st == null) return htmltext; // BERNARD if (event.equalsIgnoreCase("30702-04.htm")) { st.setState(QuestStatus.STARTED); st.setCond(1); playSound(player, SOUND_ACCEPT); giveItems(player, BERNARD_INTRODUCTION, 1); if (giveDimensionalDiamonds39(player)) htmltext = "30702-04a.htm"; } // HAMIL else if (event.equalsIgnoreCase("30626-03.htm")) { st.setCond(2); playSound(player, SOUND_MIDDLE); takeItems(player, BERNARD_INTRODUCTION, 1); giveItems(player, HAMIL_LETTER_1, 1); } else if (event.equalsIgnoreCase("30626-07.htm")) { st.setCond(5); playSound(player, SOUND_MIDDLE); takeItems(player, HUNTER_RUNE_1, 10); giveItems(player, HAMIL_LETTER_2, 1); } // SIR_ARON_TANFORD else if (event.equalsIgnoreCase("30653-02.htm")) { st.setCond(3); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_1, 1); } // VOKIAN else if (event.equalsIgnoreCase("30514-02.htm")) { st.setCond(6); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_2, 1); } return htmltext; } @Override public String onTalk(Npc npc, Player player) { String htmltext = getNoQuestMsg(); QuestState st = player.getQuestList().getQuestState(QUEST_NAME); if (st == null) return htmltext; switch (st.getState()) { case CREATED: if (player.getClassId() != ClassId.ROGUE && player.getClassId() != ClassId.ELVEN_SCOUT && player.getClassId() != ClassId.ASSASSIN) htmltext = "30702-02.htm"; else if (player.getStatus().getLevel() < 39) htmltext = "30702-01.htm"; else htmltext = "30702-03.htm"; break; case STARTED: int cond = st.getCond(); switch (npc.getNpcId()) { case BERNARD: htmltext = "30702-05.htm"; break; case HAMIL: if (cond == 1) htmltext = "30626-01.htm"; else if (cond == 2 || cond == 3) htmltext = "30626-04.htm"; else if (cond == 4) htmltext = "30626-05.htm"; else if (cond > 4 && cond < 8) htmltext = "30626-08.htm"; else if (cond == 8) { htmltext = "30626-09.htm"; st.setCond(9); playSound(player, SOUND_MIDDLE); takeItems(player, HUNTER_RUNE_2, 10); giveItems(player, HAMIL_LETTER_3, 1); } else if (cond > 8 && cond < 12) htmltext = "30626-10.htm"; else if (cond == 12) { htmltext = "30626-11.htm"; st.setCond(13); playSound(player, SOUND_MIDDLE); } else if (cond == 13) htmltext = "30626-12.htm"; else if (cond == 14) { htmltext = "30626-13.htm"; takeItems(player, BLOOD_OF_LIZARDMAN, -1); takeItems(player, CRESCENT_MOON_BOW, 1); takeItems(player, TALISMAN_OF_KADESH, 1); giveItems(player, MARK_OF_SAGITTARIUS, 1); rewardExpAndSp(player, 54726, 20250); player.broadcastPacket(new SocialAction(player, 3)); playSound(player, SOUND_FINISH); st.exitQuest(false); } break; case SIR_ARON_TANFORD: if (cond == 2) htmltext = "30653-01.htm"; else if (cond > 2) htmltext = "30653-03.htm"; break; case VOKIAN: if (cond == 5) htmltext = "30514-01.htm"; else if (cond == 6) htmltext = "30514-03.htm"; else if (cond == 7) { htmltext = "30514-04.htm"; st.setCond(8); playSound(player, SOUND_MIDDLE); takeItems(player, TALISMAN_OF_SNAKE, 1); } else if (cond > 7) htmltext = "30514-05.htm"; break; case GAUEN: if (cond == 9) { htmltext = "30717-01.htm"; st.setCond(10); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_3, 1); } else if (cond == 10) htmltext = "30717-03.htm"; else if (cond == 11) { htmltext = "30717-02.htm"; st.setCond(12); playSound(player, SOUND_MIDDLE); takeItems(player, MANASHEN_HORN, 1); takeItems(player, MITHRIL_CLIP, 1); takeItems(player, REINFORCED_BOWSTRING, 1); takeItems(player, STAKATO_CHITIN, 1); giveItems(player, CRESCENT_MOON_BOW, 1); giveItems(player, WOODEN_ARROW, 10); } else if (cond > 11) htmltext = "30717-04.htm"; break; } break; case COMPLETED: htmltext = getAlreadyCompletedMsg(); break; } return htmltext; } @Override public void onMyDying(Npc npc, Creature killer) { final Player player = killer.getActingPlayer(); final QuestState st = checkPlayerState(player, npc, QuestStatus.STARTED); if (st == null) return; switch (npc.getNpcId()) { case ANT: case ANT_CAPTAIN: case ANT_OVERSEER: case ANT_RECRUIT: case ANT_PATROL: case ANT_GUARD: case NOBLE_ANT: case NOBLE_ANT_LEADER: if (st.getCond() == 3 && dropItems(player, HUNTER_RUNE_1, 1, 10, 500000)) st.setCond(4); break; case BREKA_ORC_SHAMAN: case BREKA_ORC_OVERLORD: if (st.getCond() == 6 && dropItems(player, HUNTER_RUNE_2, 1, 10, 500000)) { st.setCond(7); giveItems(player, TALISMAN_OF_SNAKE, 1); } break; case MARSH_STAKATO_WORKER: case MARSH_STAKATO_SOLDIER: case MARSH_STAKATO_DRONE: if (st.getCond() == 10 && dropItems(player, STAKATO_CHITIN, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, MITHRIL_CLIP, REINFORCED_BOWSTRING)) st.setCond(11); break; case MARSH_SPIDER: if (st.getCond() == 10 && dropItems(player, REINFORCED_BOWSTRING, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, MITHRIL_CLIP, STAKATO_CHITIN)) st.setCond(11); break; case ROAD_SCAVENGER: if (st.getCond() == 10 && dropItems(player, MITHRIL_CLIP, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, REINFORCED_BOWSTRING, STAKATO_CHITIN)) st.setCond(11); break; case MANASHEN_GARGOYLE: if (st.getCond() == 10 && dropItems(player, MANASHEN_HORN, 1, 1, 100000) && player.getInventory().hasItems(REINFORCED_BOWSTRING, MITHRIL_CLIP, STAKATO_CHITIN)) st.setCond(11); break; case LETO_LIZARDMAN: case LETO_LIZARDMAN_ARCHER: case LETO_LIZARDMAN_SOLDIER: case LETO_LIZARDMAN_WARRIOR: case LETO_LIZARDMAN_SHAMAN: case LETO_LIZARDMAN_OVERLORD: if (st.getCond() == 13) { if (((player.getInventory().getItemCount(BLOOD_OF_LIZARDMAN) - 120) * 5) > Rnd.get(100)) { playSound(player, SOUND_BEFORE_BATTLE); takeItems(player, BLOOD_OF_LIZARDMAN, -1); addSpawn(SERPENT_DEMON_KADESH, player, false, 300000, true); } else dropItemsAlways(player, BLOOD_OF_LIZARDMAN, 1, 0); } break; case SERPENT_DEMON_KADESH: if (st.getCond() == 13) { if (player.getInventory().getItemIdFrom(Paperdoll.RHAND) == CRESCENT_MOON_BOW) { st.setCond(14); playSound(player, SOUND_MIDDLE); giveItems(player, TALISMAN_OF_KADESH, 1); } else addSpawn(SERPENT_DEMON_KADESH, player, false, 300000, true); } break; } } }  
×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.