Removal of cron4j and event abstractions.
This commit is contained in:
@@ -5,7 +5,6 @@
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="dist/libs/cron4j-2.2.5.jar" sourcepath="dist/libs/cron4j-2.2.5-sources.jar"/>
|
||||
<classpathentry kind="lib" path="dist/libs/exp4j-0.4.8.jar" sourcepath="dist/libs/exp4j-0.4.8-sources.jar"/>
|
||||
<classpathentry kind="lib" path="dist/libs/mariadb-java-client-2.7.1.jar" sourcepath="dist/libs/mariadb-java-client-2.7.1-sources.jar"/>
|
||||
<classpathentry kind="lib" path="dist/libs/netty-buffer-4.1.69.Final.jar" sourcepath="dist/libs/netty-buffer-4.1.69.Final-sources.jar"/>
|
||||
|
||||
@@ -222,32 +222,6 @@
|
||||
<admin command="admin_setbe" accessLevel="100" />
|
||||
<admin command="admin_enchant" accessLevel="100" />
|
||||
|
||||
<!-- ADMIN EVENT ENGINE -->
|
||||
<admin command="admin_event" accessLevel="100" />
|
||||
<admin command="admin_event_new" accessLevel="100" />
|
||||
<admin command="admin_event_choose" accessLevel="100" />
|
||||
<admin command="admin_event_store" accessLevel="100" />
|
||||
<admin command="admin_event_set" accessLevel="100" />
|
||||
<admin command="admin_event_change_teams_number" accessLevel="100" />
|
||||
<admin command="admin_event_announce" accessLevel="100" />
|
||||
<admin command="admin_event_panel" accessLevel="100" />
|
||||
<admin command="admin_event_control_begin" accessLevel="100" />
|
||||
<admin command="admin_event_control_teleport" accessLevel="100" />
|
||||
<admin command="admin_add" accessLevel="100" />
|
||||
<admin command="admin_event_see" accessLevel="100" />
|
||||
<admin command="admin_event_del" accessLevel="100" />
|
||||
<admin command="admin_delete_buffer" accessLevel="100" />
|
||||
<admin command="admin_event_control_sit" accessLevel="100" />
|
||||
<admin command="admin_event_name" accessLevel="100" />
|
||||
<admin command="admin_event_control_kill" accessLevel="100" />
|
||||
<admin command="admin_event_control_res" accessLevel="100" />
|
||||
<admin command="admin_event_control_transform" accessLevel="100" />
|
||||
<admin command="admin_event_control_untransform" accessLevel="100" />
|
||||
<admin command="admin_event_control_prize" accessLevel="100" />
|
||||
<admin command="admin_event_control_chatban" accessLevel="100" />
|
||||
<admin command="admin_event_control_kick" accessLevel="100" />
|
||||
<admin command="admin_event_control_finish" accessLevel="100" />
|
||||
|
||||
<!-- ADMIN EVENTS -->
|
||||
<admin command="admin_event_menu" accessLevel="100" />
|
||||
<admin command="admin_event_start" accessLevel="100" />
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/events.xsd">
|
||||
<event name="Ceremony of Chaos" class="org.l2jmobius.gameserver.instancemanager.CeremonyOfChaosManager">
|
||||
<variables>
|
||||
<variable name="max_players" value="18" />
|
||||
<variable name="max_arenas" value="5" />
|
||||
<list type="SkillHolder" name="initial_buff">
|
||||
<skill id="7115" level="1" /> <!-- Energy of Chaos -->
|
||||
</list>
|
||||
<list type="SkillHolder" name="end_buffs">
|
||||
<skill id="9540" level="1" /> <!-- Mysterious Herb of Power -->
|
||||
<skill id="9541" level="1" /> <!-- Mysterious Herb of Magic -->
|
||||
<skill id="19102" level="1" /> <!-- Chaos Sympathy -->
|
||||
</list>
|
||||
<list type="Integer" name="instance_templates">
|
||||
<value>224</value> <!-- CeremonyOfChaosArena1.xml -->
|
||||
<value>225</value> <!-- CeremonyOfChaosArena2.xml -->
|
||||
<value>226</value> <!-- CeremonyOfChaosArena3.xml -->
|
||||
<value>227</value> <!-- CeremonyOfChaosArena4.xml -->
|
||||
</list>
|
||||
</variables>
|
||||
<scheduler>
|
||||
<!-- Schedule of the event period, usually one month long, executing onPeriodEnd at 00:00 -->
|
||||
<schedule minute="00" hour="00" dayOfMonth="01" month="*" dayOfWeek="*">
|
||||
<event name="#onPeriodEnd">
|
||||
<arg type="String">Ceremony of Chaos has ended.</arg>
|
||||
</event>
|
||||
</schedule>
|
||||
|
||||
<!-- Schedule of the event start, usually Monday, Tuesday, Wednesday at 18:00 -->
|
||||
<schedule name="start" minute="00" hour="18" dayOfMonth="*" month="*" dayOfWeek="1-3">
|
||||
<event name="#onEventStart" />
|
||||
</schedule>
|
||||
|
||||
<!-- Schedule of the event end, usually Tuesday, Wednesday, Thursday at 00:00 -->
|
||||
<schedule name="end" minute="00" hour="00" dayOfMonth="*" month="*" dayOfWeek="2-4"> <!-- Tuesday, Wednesday, Thursday -->
|
||||
<event name="#onEventEnd" />
|
||||
</schedule>
|
||||
|
||||
<!-- 0 minutes, Match period begins: an invitation is sent out to every eligible character and appears on their interface and in their chat window. -->
|
||||
<!-- 0-5 minutes, Registration Period: eligible players have 5 minutes to sign up. Registration can be canceled with no penalty during this time. Cancellation of any kind after this results in a penalty. -->
|
||||
<schedule minute="00,15,30,45" hour="18-23" dayOfMonth="*" month="*" dayOfWeek="1-3" repeat="true">
|
||||
<event name="#onRegistrationStart" />
|
||||
</schedule>
|
||||
|
||||
<!-- 5-7 minutes, Entrance Waiting List: after the sign-up period ends, registered characters are notified that they will be moved to the arena after 2 minutes. -->
|
||||
<schedule minute="05,20,35,50" hour="18-23" dayOfMonth="*" month="*" dayOfWeek="1-3" repeat="true">
|
||||
<event name="#onRegistrationEnd" />
|
||||
</schedule>
|
||||
|
||||
<!-- 7-8 minutes, Entrance and Preparation: you are moved to a random Ceremony of Chaos arena and have 60 seconds to prepare for battle. During this time, they are invisible to the enemy. -->
|
||||
<schedule minute="07,22,37,52" hour="18-23" dayOfMonth="*" month="*" dayOfWeek="1-3" repeat="true">
|
||||
<event name="#onPrepareForFight" />
|
||||
</schedule>
|
||||
|
||||
<!-- 8-13:59 minutes, Battle: battle lasts a full 5 minutes. -->
|
||||
<schedule minute="08,23,38,53" hour="18-23" dayOfMonth="*" month="*" dayOfWeek="1-3" repeat="true">
|
||||
<event name="#onStartFight" />
|
||||
</schedule>
|
||||
|
||||
<!-- Schedule of the event match registration end, usually every 20 min -->
|
||||
<schedule name="stopFight" minute="14,29,44,59" hour="18-23" dayOfMonth="*" month="*" dayOfWeek="1-3" repeat="true">
|
||||
<event name="#onEndFight" />
|
||||
</schedule>
|
||||
|
||||
<!-- Attach condition to re-launch start if server boots up in between start - end -->
|
||||
<conditionalSchedule>
|
||||
<run name="start" if="BETWEEN">
|
||||
<name>start</name>
|
||||
<name>end</name>
|
||||
</run>
|
||||
</conditionalSchedule>
|
||||
</scheduler>
|
||||
<rewards>
|
||||
<reward name="initial_items" type="NORMAL">
|
||||
<item id="35991" min="1" max="1" chance="100" /> <!-- Ceremony of Chaos - Attack -->
|
||||
<item id="35992" min="1" max="1" chance="100" /> <!-- Ceremony of Chaos - Magic -->
|
||||
<item id="35993" min="1" max="1" chance="100" /> <!-- Ceremony of Chaos - Defense -->
|
||||
</reward>
|
||||
</rewards>
|
||||
</event>
|
||||
</list>
|
||||
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/events.xsd">
|
||||
<event name="Clan Hall Auction" class="org.l2jmobius.gameserver.instancemanager.ClanHallAuctionManager">
|
||||
<scheduler>
|
||||
<!-- Schedule of the event start, Wednesday at 19:00 -->
|
||||
<schedule name="startAuction" minute="00" hour="18" dayOfMonth="*" month="*" dayOfWeek="3">
|
||||
<event name="#onEventStart" />
|
||||
</schedule>
|
||||
|
||||
<!-- Schedule of the event end, Wednesday at 11:00 -->
|
||||
<schedule name="endAuction" minute="00" hour="11" dayOfMonth="*" month="*" dayOfWeek="3">
|
||||
<event name="#onEventEnd" />
|
||||
</schedule>
|
||||
|
||||
<!-- Attach condition to re-launch start if server boots up in between start - end -->
|
||||
<conditionalSchedule>
|
||||
<run name="startAuction" if="BETWEEN">
|
||||
<name>startAuction</name>
|
||||
<name>endAuction</name>
|
||||
</run>
|
||||
</conditionalSchedule>
|
||||
</scheduler>
|
||||
</event>
|
||||
</list>
|
||||
@@ -1,40 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/events.xsd">
|
||||
<event name="Daily Reset" class="org.l2jmobius.gameserver.instancemanager.DailyTaskManager">
|
||||
<variables>
|
||||
<list name="reset_skills" type="SkillHolder">
|
||||
<skill id="2510" /> <!-- Wondrous Cubic -->
|
||||
<skill id="22180" /> <!-- Wondrous Cubic - 1 time use -->
|
||||
</list>
|
||||
</variables>
|
||||
<scheduler>
|
||||
<!-- Schedule of the reset every day at 06:30 -->
|
||||
<schedule name="reset" hour="06" minute="30" repeat="true">
|
||||
<event name="#onReset" />
|
||||
</schedule>
|
||||
|
||||
<!-- Schedule the save task 30th or 0 minute -->
|
||||
<schedule name="save" minute="30,0">
|
||||
<event name="#onSave" />
|
||||
</schedule>
|
||||
|
||||
<!-- Schedule the clan leader apply task every WEDNESDAY at 6:30 -->
|
||||
<schedule name="clanLeaderApply" hour="06" minute="30" dayOfWeek="3" repeat="true">
|
||||
<event name="#onClanLeaderApply" />
|
||||
</schedule>
|
||||
|
||||
<!-- Schedule the vitality reset task every WEDNESDAY at 6:30 -->
|
||||
<schedule name="vitalityReset" hour="06" minute="30" dayOfWeek="3" repeat="true">
|
||||
<event name="#onVitalityReset" />
|
||||
</schedule>
|
||||
|
||||
|
||||
<!-- Attach condition to reset if server boots up in after 6:30 and hasn't reset yet -->
|
||||
<conditionalSchedule>
|
||||
<run name="reset" if="HASNT_RUN" />
|
||||
<run name="clanLeaderApply" if="HASNT_RUN" />
|
||||
<run name="vitalityReset" if="HASNT_RUN" />
|
||||
</conditionalSchedule>
|
||||
</scheduler>
|
||||
</event>
|
||||
</list>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/events.xsd">
|
||||
<event name="Elpies" class="org.l2jmobius.gameserver.instancemanager.events.ElpiesManager">
|
||||
<scheduler>
|
||||
<!-- Schedule every day at 16:50 -->
|
||||
<schedule name="start" hour="16" minute="50" dayOfMonth="*" month="*" dayOfWeek="*" repeat="true">
|
||||
<event name="#startEvent" />
|
||||
</schedule>
|
||||
|
||||
<!-- Attach condition to reset if server boots up after start and hasn't reset yet -->
|
||||
<conditionalSchedule>
|
||||
<run name="start" if="HASNT_RUN" />
|
||||
</conditionalSchedule>
|
||||
</scheduler>
|
||||
</event>
|
||||
</list>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/events.xsd">
|
||||
<event name="Rabbits" class="org.l2jmobius.gameserver.instancemanager.events.RabbitsManager">
|
||||
<scheduler>
|
||||
<!-- Schedule every day at 16:50 -->
|
||||
<schedule name="start" hour="16" minute="50" dayOfMonth="*" month="*" dayOfWeek="*" repeat="true">
|
||||
<event name="#startEvent" />
|
||||
</schedule>
|
||||
|
||||
<!-- Attach condition to reset if server boots up after start and hasn't reset yet -->
|
||||
<conditionalSchedule>
|
||||
<run name="start" if="HASNT_RUN" />
|
||||
</conditionalSchedule>
|
||||
</scheduler>
|
||||
</event>
|
||||
</list>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/events.xsd">
|
||||
<event name="Race" class="org.l2jmobius.gameserver.instancemanager.events.RaceManager">
|
||||
<scheduler>
|
||||
<!-- Schedule every day at 16:50 -->
|
||||
<schedule name="start" hour="16" minute="50" dayOfMonth="*" month="*" dayOfWeek="*" repeat="true">
|
||||
<event name="#startEvent" />
|
||||
</schedule>
|
||||
|
||||
<!-- Attach condition to reset if server boots up after start and hasn't reset yet -->
|
||||
<conditionalSchedule>
|
||||
<run name="start" if="HASNT_RUN" />
|
||||
</conditionalSchedule>
|
||||
</scheduler>
|
||||
</event>
|
||||
</list>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/events.xsd">
|
||||
<event name="Team Vs Team" class="org.l2jmobius.gameserver.instancemanager.events.TeamVsTeamManager">
|
||||
<scheduler>
|
||||
<!-- Schedule every day at 16:50 -->
|
||||
<schedule name="start" hour="16" minute="50" dayOfMonth="*" month="*" dayOfWeek="*" repeat="true">
|
||||
<event name="#startEvent" />
|
||||
</schedule>
|
||||
|
||||
<!-- Attach condition to reset if server boots up after start and hasn't reset yet -->
|
||||
<conditionalSchedule>
|
||||
<run name="start" if="HASNT_RUN" />
|
||||
</conditionalSchedule>
|
||||
</scheduler>
|
||||
</event>
|
||||
</list>
|
||||
@@ -1,14 +0,0 @@
|
||||
<html><body scroll="no">
|
||||
<table cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td valign="top" align="center">
|
||||
<table width=96% cellpadding=0 cellspacing=0>
|
||||
<tr><td height=30></td></tr>
|
||||
<tr><td align=center><font color="LEVEL">%eventName%</font> by %eventCreator%</td></tr>
|
||||
<tr><td height=20></td></tr>
|
||||
<tr><td align=center>%eventInfo%</td></tr>
|
||||
<tr><td height=34></td></tr>
|
||||
<tr><td align=center><button value="Unregister" action="bypass -h npc_%objectId%_event_unregister" width=120 height=32 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td></tr>
|
||||
<tr><td height=34></td></tr>
|
||||
</table>
|
||||
</td></tr></table>
|
||||
</body></html>
|
||||
@@ -1,14 +0,0 @@
|
||||
<html><body scroll="no">
|
||||
<table cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td valign="top" align="center">
|
||||
<table width=96% cellpadding=0 cellspacing=0>
|
||||
<tr><td height=30></td></tr>
|
||||
<tr><td align=center><font color="LEVEL">%eventName%</font> by %eventCreator%</td></tr>
|
||||
<tr><td height=20></td></tr>
|
||||
<tr><td align=center>%eventInfo%</td></tr>
|
||||
<tr><td height=34></td></tr>
|
||||
<tr><td align=center><button value="Participate" action="bypass -h npc_%objectId%_event_participate" width=120 height=32 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td></tr>
|
||||
<tr><td height=34></td></tr>
|
||||
</table>
|
||||
</td></tr></table>
|
||||
</body></html>
|
||||
@@ -155,7 +155,7 @@ public class ClanHallAuctioneer extends AbstractNpcAI
|
||||
htmltext = htmltext.replace("%id%", String.valueOf(clanHallAuction.getClanHallId()));
|
||||
htmltext = htmltext.replace("%minBid%", String.valueOf(clanHallAuction.getHighestBid()));
|
||||
htmltext = htmltext.replace("%myBid%", String.valueOf(clanHallAuction.getClanBid(clan)));
|
||||
htmltext = htmltext.replace("%auctionEnd%", builder.appendPattern("dd/MM/yyyy HH").appendLiteral(" hour ").appendPattern("mm").appendLiteral(" minutes").toFormatter().format(Instant.ofEpochMilli(Chronos.currentTimeMillis() + clanHallAuction.getRemaingTime()).atZone(ZoneId.systemDefault())));
|
||||
htmltext = htmltext.replace("%auctionEnd%", builder.appendPattern("dd/MM/yyyy HH").appendLiteral(" hour ").appendPattern("mm").appendLiteral(" minutes").toFormatter().format(Instant.ofEpochMilli(Chronos.currentTimeMillis() + ClanHallAuctionManager.getInstance().getRemainingTime()).atZone(ZoneId.systemDefault())));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -190,7 +190,7 @@ public class ClanHallAuctioneer extends AbstractNpcAI
|
||||
|
||||
final ClanHall clanHall = ClanHallData.getInstance().getClanHallById(clanHallAuction.getClanHallId());
|
||||
final Clan owner = clanHall.getOwner();
|
||||
final long remainingTime = clanHallAuction.getRemaingTime();
|
||||
final long remainingTime = ClanHallAuctionManager.getInstance().getRemainingTime();
|
||||
final Instant endTime = Instant.ofEpochMilli(Chronos.currentTimeMillis() + remainingTime);
|
||||
|
||||
final DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
|
||||
@@ -248,7 +248,7 @@ public class ClanHallAuctioneer extends AbstractNpcAI
|
||||
{
|
||||
final ClanHallAuction clanHallAuction = ClanHallAuctionManager.getInstance().getClanHallAuctionById(clanHallId);
|
||||
final Clan owner = clanHall.getOwner();
|
||||
final long remainingTime = clanHallAuction.getRemaingTime();
|
||||
final long remainingTime = ClanHallAuctionManager.getInstance().getRemainingTime();
|
||||
final Instant endTime = Instant.ofEpochMilli(Chronos.currentTimeMillis() + remainingTime);
|
||||
final DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
|
||||
final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
|
||||
@@ -298,7 +298,7 @@ public class ClanHallAuctioneer extends AbstractNpcAI
|
||||
sb.append("\"><font color=\"ffffaa\">&%");
|
||||
sb.append(clanHall.getResidenceId());
|
||||
sb.append(";[0]</font></a></td><td width=50>");
|
||||
sb.append(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(Instant.ofEpochMilli(Chronos.currentTimeMillis() + auction.getRemaingTime()).atZone(ZoneId.systemDefault())));
|
||||
sb.append(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(Instant.ofEpochMilli(Chronos.currentTimeMillis() + ClanHallAuctionManager.getInstance().getRemainingTime()).atZone(ZoneId.systemDefault())));
|
||||
sb.append("</td><td width=70 align=right><font color=\"aaffff\">");
|
||||
sb.append(auction.getHighestBid());
|
||||
sb.append("</font></td></tr>");
|
||||
|
||||
@@ -19,7 +19,6 @@ package ai.others.LaVieEnRose;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent;
|
||||
import org.l2jmobius.gameserver.model.olympiad.OlympiadManager;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
@@ -128,13 +127,7 @@ public class LaVieEnRose extends AbstractNpcAI
|
||||
return false;
|
||||
}
|
||||
|
||||
if (player.isOnEvent(CeremonyOfChaosEvent.class))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_USE_THE_BEAUTY_SHOP_WHILE_REGISTERED_IN_THE_CEREMONY_OF_CHAOS);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (player.isOnEvent()) // custom event message
|
||||
if (player.isRegisteredOnEvent())
|
||||
{
|
||||
player.sendMessage("You cannot use the Beauty Shop while registered in an event.");
|
||||
return false;
|
||||
|
||||
@@ -334,9 +334,9 @@ public class OlyManager extends AbstractNpcAI implements IBypassHandler
|
||||
player.sendPacket(SystemMessageId.THE_OLYMPIAD_GAMES_ARE_NOT_CURRENTLY_IN_PROGRESS);
|
||||
return false;
|
||||
}
|
||||
else if (player.isOnEvent())
|
||||
else if (player.isRegisteredOnEvent())
|
||||
{
|
||||
player.sendMessage("You can not observe games while registered on an event");
|
||||
player.sendMessage("You can not observe games while registered on an event.");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -24,7 +24,6 @@ import org.l2jmobius.gameserver.data.xml.ExperienceData;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
@@ -266,11 +265,7 @@ public class TrainingCamp extends AbstractNpcAI
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (player.isOnEvent(CeremonyOfChaosEvent.class) || (player.getBlockCheckerArena() > -1)) // TODO underground coliseum and kratei checks.
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (player.isOnEvent()) // custom event message
|
||||
else if (player.isRegisteredOnEvent() || (player.getBlockCheckerArena() > -1)) // TODO underground coliseum and kratei checks.
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ public class TvT extends Event
|
||||
{
|
||||
PLAYER_LIST.add(player);
|
||||
PLAYER_SCORES.put(player, 0);
|
||||
player.setOnCustomEvent(true);
|
||||
player.setRegisteredOnEvent(true);
|
||||
addLogoutListener(player);
|
||||
htmltext = "registration-success.html";
|
||||
}
|
||||
@@ -170,13 +170,13 @@ public class TvT extends Event
|
||||
PLAYER_LIST.remove(player);
|
||||
PLAYER_SCORES.remove(player);
|
||||
removeListeners(player);
|
||||
player.setOnCustomEvent(false);
|
||||
player.setRegisteredOnEvent(false);
|
||||
htmltext = "registration-canceled.html";
|
||||
break;
|
||||
}
|
||||
case "BuffHeal":
|
||||
{
|
||||
if (player.isOnCustomEvent() || player.isGM())
|
||||
if (player.isOnEvent() || player.isGM())
|
||||
{
|
||||
if (player.isInCombat())
|
||||
{
|
||||
@@ -225,7 +225,7 @@ public class TvT extends Event
|
||||
for (PlayerInstance participant : PLAYER_LIST)
|
||||
{
|
||||
removeListeners(participant);
|
||||
participant.setOnCustomEvent(false);
|
||||
participant.setRegisteredOnEvent(false);
|
||||
}
|
||||
EVENT_ACTIVE = false;
|
||||
return null;
|
||||
@@ -262,6 +262,7 @@ public class TvT extends Event
|
||||
team = true;
|
||||
}
|
||||
addDeathListener(participant);
|
||||
participant.setOnEvent(true);
|
||||
}
|
||||
// Make Blue CC.
|
||||
if (BLUE_TEAM.size() > 1)
|
||||
@@ -452,7 +453,7 @@ public class TvT extends Event
|
||||
{
|
||||
removeListeners(participant);
|
||||
participant.setTeam(Team.NONE);
|
||||
participant.setOnCustomEvent(false);
|
||||
participant.setOnEvent(false);
|
||||
participant.leaveParty();
|
||||
}
|
||||
// Destroy world.
|
||||
@@ -479,7 +480,7 @@ public class TvT extends Event
|
||||
}
|
||||
case "ResurrectPlayer":
|
||||
{
|
||||
if (player.isDead() && player.isOnCustomEvent())
|
||||
if (player.isDead() && player.isOnEvent())
|
||||
{
|
||||
if (BLUE_TEAM.contains(player))
|
||||
{
|
||||
@@ -532,7 +533,7 @@ public class TvT extends Event
|
||||
PLAYER_SCORES.remove(player);
|
||||
BLUE_TEAM.remove(player);
|
||||
RED_TEAM.remove(player);
|
||||
player.setOnCustomEvent(false);
|
||||
player.setOnEvent(false);
|
||||
removeListeners(player);
|
||||
player.sendMessage("You have been kicked for been inactive.");
|
||||
if (PVP_WORLD != null)
|
||||
@@ -579,7 +580,7 @@ public class TvT extends Event
|
||||
@Override
|
||||
public String onEnterZone(Creature creature, ZoneType zone)
|
||||
{
|
||||
if (creature.isPlayable() && creature.getActingPlayer().isOnCustomEvent())
|
||||
if (creature.isPlayable() && creature.getActingPlayer().isOnEvent())
|
||||
{
|
||||
// Kick enemy players.
|
||||
if ((zone == BLUE_PEACE_ZONE) && (creature.getTeam() == Team.RED))
|
||||
@@ -606,7 +607,7 @@ public class TvT extends Event
|
||||
@Override
|
||||
public String onExitZone(Creature creature, ZoneType zone)
|
||||
{
|
||||
if (creature.isPlayer() && creature.getActingPlayer().isOnCustomEvent())
|
||||
if (creature.isPlayer() && creature.getActingPlayer().isOnEvent())
|
||||
{
|
||||
final PlayerInstance player = creature.getActingPlayer();
|
||||
cancelQuestTimer("KickPlayer" + creature.getObjectId(), null, player);
|
||||
@@ -637,7 +638,7 @@ public class TvT extends Event
|
||||
player.sendMessage("Your level is too high to participate.");
|
||||
return false;
|
||||
}
|
||||
if (player.isOnEvent() || (player.getBlockCheckerArena() > -1))
|
||||
if (player.isRegisteredOnEvent() || (player.getBlockCheckerArena() > -1))
|
||||
{
|
||||
player.sendMessage("You are already registered on an event.");
|
||||
return false;
|
||||
@@ -724,7 +725,7 @@ public class TvT extends Event
|
||||
|
||||
private void addLogoutListener(PlayerInstance player)
|
||||
{
|
||||
player.addListener(new ConsumerEventListener(player, EventType.ON_PLAYER_LOGOUT, (OnPlayerLogout event) -> OnPlayerLogout(event), this));
|
||||
player.addListener(new ConsumerEventListener(player, EventType.ON_PLAYER_LOGOUT, (OnPlayerLogout event) -> onPlayerLogout(event), this));
|
||||
}
|
||||
|
||||
private void addDeathListener(PlayerInstance player)
|
||||
@@ -776,7 +777,7 @@ public class TvT extends Event
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
|
||||
private void OnPlayerLogout(OnPlayerLogout event)
|
||||
private void onPlayerLogout(OnPlayerLogout event)
|
||||
{
|
||||
final PlayerInstance player = event.getPlayer();
|
||||
// Remove player from lists.
|
||||
@@ -881,7 +882,7 @@ public class TvT extends Event
|
||||
{
|
||||
removeListeners(participant);
|
||||
participant.setTeam(Team.NONE);
|
||||
participant.setOnCustomEvent(false);
|
||||
participant.setRegisteredOnEvent(false);
|
||||
}
|
||||
if (PVP_WORLD != null)
|
||||
{
|
||||
|
||||
@@ -76,7 +76,6 @@ import handlers.admincommandhandlers.AdminEditChar;
|
||||
import handlers.admincommandhandlers.AdminEffects;
|
||||
import handlers.admincommandhandlers.AdminElement;
|
||||
import handlers.admincommandhandlers.AdminEnchant;
|
||||
import handlers.admincommandhandlers.AdminEventEngine;
|
||||
import handlers.admincommandhandlers.AdminEvents;
|
||||
import handlers.admincommandhandlers.AdminExpSp;
|
||||
import handlers.admincommandhandlers.AdminFakePlayers;
|
||||
@@ -144,7 +143,6 @@ import handlers.bypasshandlers.ChangePlayerName;
|
||||
import handlers.bypasshandlers.ChatLink;
|
||||
import handlers.bypasshandlers.ClanWarehouse;
|
||||
import handlers.bypasshandlers.EnsoulWindow;
|
||||
import handlers.bypasshandlers.EventEngine;
|
||||
import handlers.bypasshandlers.FindPvP;
|
||||
import handlers.bypasshandlers.Freight;
|
||||
import handlers.bypasshandlers.ItemAuctionLink;
|
||||
@@ -412,7 +410,6 @@ public class MasterHandler
|
||||
AdminEffects.class,
|
||||
AdminElement.class,
|
||||
AdminEnchant.class,
|
||||
AdminEventEngine.class,
|
||||
AdminEvents.class,
|
||||
AdminExpSp.class,
|
||||
AdminFakePlayers.class,
|
||||
@@ -482,7 +479,6 @@ public class MasterHandler
|
||||
ChatLink.class,
|
||||
ClanWarehouse.class,
|
||||
EnsoulWindow.class,
|
||||
EventEngine.class,
|
||||
FindPvP.class,
|
||||
Freight.class,
|
||||
ItemAuctionLink.class,
|
||||
|
||||
@@ -99,7 +99,7 @@ public class SkillConditionMasterHandler
|
||||
SkillConditionHandler.getInstance().registerHandler("OpNeedSummonOrPet", OpNeedSummonOrPetSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("OpNotAffectedBySkill", OpNotAffectedBySkillSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("OpNotCursed", OpNotCursedSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("OpNotInCeremonyOfChaos", OpNotInCeremonyOfChaosSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("OpNotInEvent", OpNotInEventSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("OpNotInPeacezone", OpNotInPeacezoneSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("OpNotInstantzone", OpNotInstantzoneSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("OpNotOlympiad", OpNotOlympiadSkillCondition::new);
|
||||
|
||||
@@ -22,7 +22,6 @@ import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.enums.InstanceType;
|
||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import org.l2jmobius.gameserver.handler.IActionHandler;
|
||||
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
@@ -118,25 +117,19 @@ public class NpcAction implements IActionHandler
|
||||
}
|
||||
|
||||
// Open a chat window on client with the text of the Npc
|
||||
if (npc.hasVariables() && npc.getVariables().getBoolean("eventmob", false))
|
||||
if (npc.hasListener(EventType.ON_NPC_QUEST_START))
|
||||
{
|
||||
GameEvent.showEventHtml(player, String.valueOf(target.getObjectId()));
|
||||
player.setLastQuestNpcObject(target.getObjectId());
|
||||
}
|
||||
if (npc.hasListener(EventType.ON_NPC_FIRST_TALK))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnNpcFirstTalk(npc, player), npc);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (npc.hasListener(EventType.ON_NPC_QUEST_START))
|
||||
{
|
||||
player.setLastQuestNpcObject(target.getObjectId());
|
||||
}
|
||||
if (npc.hasListener(EventType.ON_NPC_FIRST_TALK))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnNpcFirstTalk(npc, player), npc);
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.showChatWindow(player);
|
||||
}
|
||||
npc.showChatWindow(player);
|
||||
}
|
||||
|
||||
if (Config.PLAYER_MOVEMENT_BLOCK_TIME > 0)
|
||||
{
|
||||
player.updateNotMoveUntil();
|
||||
|
||||
@@ -1,548 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.admincommandhandlers;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.AdminData;
|
||||
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
|
||||
import org.l2jmobius.gameserver.instancemanager.events.GameEvent.EventState;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
|
||||
import org.l2jmobius.gameserver.util.Broadcast;
|
||||
|
||||
/**
|
||||
* This class handles following admin commands: - admin = shows menu
|
||||
* @version $Revision: 1.3.2.1.2.4 $ $Date: 2005/04/11 10:06:06 $
|
||||
*/
|
||||
public class AdminEventEngine implements IAdminCommandHandler
|
||||
{
|
||||
private static final String[] ADMIN_COMMANDS =
|
||||
{
|
||||
"admin_event",
|
||||
"admin_event_new",
|
||||
"admin_event_choose",
|
||||
"admin_event_store",
|
||||
"admin_event_set",
|
||||
"admin_event_change_teams_number",
|
||||
"admin_event_announce",
|
||||
"admin_event_panel",
|
||||
"admin_event_control_begin",
|
||||
"admin_event_control_teleport",
|
||||
"admin_add",
|
||||
"admin_event_see",
|
||||
"admin_event_del",
|
||||
"admin_delete_buffer",
|
||||
"admin_event_control_sit",
|
||||
"admin_event_name",
|
||||
"admin_event_control_kill",
|
||||
"admin_event_control_res",
|
||||
"admin_event_control_transform",
|
||||
"admin_event_control_untransform",
|
||||
"admin_event_control_prize",
|
||||
"admin_event_control_chatban",
|
||||
"admin_event_control_kick",
|
||||
"admin_event_control_finish"
|
||||
};
|
||||
|
||||
private static String tempBuffer = "";
|
||||
private static String tempName = "";
|
||||
private static boolean npcsDeleted = false;
|
||||
|
||||
@Override
|
||||
public boolean useAdminCommand(String command, PlayerInstance activeChar)
|
||||
{
|
||||
StringTokenizer st = new StringTokenizer(command);
|
||||
final String actualCommand = st.nextToken();
|
||||
try
|
||||
{
|
||||
if (actualCommand.equals("admin_event"))
|
||||
{
|
||||
if (GameEvent.eventState != EventState.OFF)
|
||||
{
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else
|
||||
{
|
||||
showMainPage(activeChar);
|
||||
}
|
||||
}
|
||||
|
||||
else if (actualCommand.equals("admin_event_new"))
|
||||
{
|
||||
showNewEventPage(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_add"))
|
||||
{
|
||||
// There is an exception here for not using the ST. We use spaces (ST delim) for the event info.
|
||||
tempBuffer += command.substring(10);
|
||||
showNewEventPage(activeChar);
|
||||
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_see"))
|
||||
{
|
||||
// There is an exception here for not using the ST. We use spaces (ST delim) for the event name.
|
||||
final String eventName = command.substring(16);
|
||||
try
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1);
|
||||
final DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(Config.DATAPACK_ROOT + "/data/events/" + eventName)));
|
||||
final BufferedReader inbr = new BufferedReader(new InputStreamReader(in));
|
||||
adminReply.setFile(null, "data/html/mods/EventEngine/Participation.htm");
|
||||
adminReply.replace("%eventName%", eventName);
|
||||
adminReply.replace("%eventCreator%", inbr.readLine());
|
||||
adminReply.replace("%eventInfo%", inbr.readLine());
|
||||
adminReply.replace("npc_%objectId%_event_participate", "admin_event"); // Weird, but nice hack, isnt it? :)
|
||||
adminReply.replace("button value=\"Participate\"", "button value=\"Back\"");
|
||||
activeChar.sendPacket(adminReply);
|
||||
inbr.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_del"))
|
||||
{
|
||||
// There is an exception here for not using the ST. We use spaces (ST delim) for the event name.
|
||||
final String eventName = command.substring(16);
|
||||
final File file = new File(Config.DATAPACK_ROOT + "/data/events/" + eventName);
|
||||
file.delete();
|
||||
showMainPage(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_name"))
|
||||
{
|
||||
// There is an exception here for not using the ST. We use spaces (ST delim) for the event name.
|
||||
tempName += command.substring(17);
|
||||
showNewEventPage(activeChar);
|
||||
}
|
||||
else if (actualCommand.equalsIgnoreCase("admin_delete_buffer"))
|
||||
{
|
||||
tempBuffer = "";
|
||||
showNewEventPage(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_store"))
|
||||
{
|
||||
try
|
||||
{
|
||||
final FileOutputStream file = new FileOutputStream(new File(Config.DATAPACK_ROOT, "data/events/" + tempName));
|
||||
final PrintStream p = new PrintStream(file);
|
||||
p.println(activeChar.getName());
|
||||
p.println(tempBuffer);
|
||||
file.close();
|
||||
p.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
tempBuffer = "";
|
||||
tempName = "";
|
||||
showMainPage(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_set"))
|
||||
{
|
||||
// There is an exception here for not using the ST. We use spaces (ST delim) for the event name.
|
||||
GameEvent._eventName = command.substring(16);
|
||||
showEventParameters(activeChar, 2);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_change_teams_number"))
|
||||
{
|
||||
showEventParameters(activeChar, Integer.parseInt(st.nextToken()));
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_panel"))
|
||||
{
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_announce"))
|
||||
{
|
||||
GameEvent._npcId = Integer.parseInt(st.nextToken());
|
||||
GameEvent._teamsNumber = Integer.parseInt(st.nextToken());
|
||||
String temp = " ";
|
||||
String temp2 = "";
|
||||
while (st.hasMoreElements())
|
||||
{
|
||||
temp += st.nextToken() + " ";
|
||||
}
|
||||
|
||||
st = new StringTokenizer(temp, "-");
|
||||
Integer i = 1;
|
||||
|
||||
while (st.hasMoreElements())
|
||||
{
|
||||
temp2 = st.nextToken();
|
||||
if (!temp2.equals(" "))
|
||||
{
|
||||
GameEvent._teamNames.put(i++, temp2.substring(1, temp2.length() - 1));
|
||||
}
|
||||
}
|
||||
|
||||
activeChar.sendMessage(GameEvent.startEventParticipation());
|
||||
Broadcast.toAllOnlinePlayers(activeChar.getName() + " has started an event. You will find a participation NPC somewhere around you.");
|
||||
|
||||
final PlaySound snd = new PlaySound(1, "B03_F", 0, 0, 0, 0, 0);
|
||||
activeChar.sendPacket(snd);
|
||||
activeChar.broadcastPacket(snd);
|
||||
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1);
|
||||
final String replyMSG = "<html><title>[ L2J EVENT ENGINE ]</title><body><br><center>The event <font color=\"LEVEL\">" + GameEvent._eventName + "</font> has been announced, now you can type //event_panel to see the event panel control</center><br></body></html>";
|
||||
adminReply.setHtml(replyMSG);
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_begin"))
|
||||
{
|
||||
// Starts the event and sends a message of the result
|
||||
activeChar.sendMessage(GameEvent.startEvent());
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_finish"))
|
||||
{
|
||||
// Finishes the event and sends a message of the result
|
||||
activeChar.sendMessage(GameEvent.finishEvent());
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_teleport"))
|
||||
{
|
||||
while (st.hasMoreElements()) // Every next ST should be a team number
|
||||
{
|
||||
final int teamId = Integer.parseInt(st.nextToken());
|
||||
for (PlayerInstance player : GameEvent._teams.get(teamId))
|
||||
{
|
||||
player.setTitle(GameEvent._teamNames.get(teamId));
|
||||
player.teleToLocation(activeChar.getLocation(), true, activeChar.getInstanceWorld());
|
||||
}
|
||||
}
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_sit"))
|
||||
{
|
||||
while (st.hasMoreElements()) // Every next ST should be a team number
|
||||
{
|
||||
// Integer.parseInt(st.nextToken()) == teamId
|
||||
for (PlayerInstance player : GameEvent._teams.get(Integer.parseInt(st.nextToken())))
|
||||
{
|
||||
if (player.getEventStatus() == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
player.getEventStatus().setSitForced(!player.getEventStatus().isSitForced());
|
||||
if (player.getEventStatus().isSitForced())
|
||||
{
|
||||
player.sitDown();
|
||||
}
|
||||
else
|
||||
{
|
||||
player.standUp();
|
||||
}
|
||||
}
|
||||
}
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_kill"))
|
||||
{
|
||||
while (st.hasMoreElements()) // Every next ST should be a team number
|
||||
{
|
||||
for (PlayerInstance player : GameEvent._teams.get(Integer.parseInt(st.nextToken())))
|
||||
{
|
||||
player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, activeChar, null);
|
||||
}
|
||||
}
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_res"))
|
||||
{
|
||||
while (st.hasMoreElements()) // Every next ST should be a team number
|
||||
{
|
||||
for (PlayerInstance player : GameEvent._teams.get(Integer.parseInt(st.nextToken())))
|
||||
{
|
||||
if ((player == null) || !player.isDead())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
player.restoreExp(100.0);
|
||||
player.doRevive();
|
||||
player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
|
||||
player.setCurrentCp(player.getMaxCp());
|
||||
}
|
||||
}
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_transform"))
|
||||
{
|
||||
final int teamId = Integer.parseInt(st.nextToken());
|
||||
final int[] transIds = new int[st.countTokens()];
|
||||
int i = 0;
|
||||
while (st.hasMoreElements()) // Every next ST should be a transform ID
|
||||
{
|
||||
transIds[i++] = Integer.parseInt(st.nextToken());
|
||||
}
|
||||
|
||||
for (PlayerInstance player : GameEvent._teams.get(teamId))
|
||||
{
|
||||
final int transId = transIds[Rnd.get(transIds.length)];
|
||||
if (!player.transform(transId, true))
|
||||
{
|
||||
AdminData.getInstance().broadcastMessageToGMs("EventEngine: Unknow transformation id: " + transId);
|
||||
}
|
||||
}
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_untransform"))
|
||||
{
|
||||
while (st.hasMoreElements()) // Every next ST should be a team number
|
||||
{
|
||||
for (PlayerInstance player : GameEvent._teams.get(Integer.parseInt(st.nextToken())))
|
||||
{
|
||||
player.stopTransformation(true);
|
||||
}
|
||||
}
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_kick"))
|
||||
{
|
||||
if (st.hasMoreElements()) // If has next token, it should be player name.
|
||||
{
|
||||
while (st.hasMoreElements())
|
||||
{
|
||||
final PlayerInstance player = World.getInstance().getPlayer(st.nextToken());
|
||||
if (player != null)
|
||||
{
|
||||
GameEvent.removeAndResetPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((activeChar.getTarget() != null) && (activeChar.getTarget().isPlayer()))
|
||||
{
|
||||
GameEvent.removeAndResetPlayer((PlayerInstance) activeChar.getTarget());
|
||||
}
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
else if (actualCommand.startsWith("admin_event_control_prize"))
|
||||
{
|
||||
final int[] teamIds = new int[st.countTokens() - 2];
|
||||
int i = 0;
|
||||
while ((st.countTokens() - 2) > 0) // The last 2 tokens are used for "n" and "item id"
|
||||
{
|
||||
teamIds[i++] = Integer.parseInt(st.nextToken());
|
||||
}
|
||||
|
||||
final String[] n = st.nextToken().split("\\*");
|
||||
final int itemId = Integer.parseInt(st.nextToken());
|
||||
for (int teamId : teamIds)
|
||||
{
|
||||
rewardTeam(activeChar, teamId, Integer.parseInt(n[0]), itemId, n.length == 2 ? n[1] : "");
|
||||
}
|
||||
showEventControl(activeChar);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
AdminData.getInstance().broadcastMessageToGMs("EventEngine: Error! Possible blank boxes while executing a command which requires a value in the box?");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdminCommandList()
|
||||
{
|
||||
return ADMIN_COMMANDS;
|
||||
}
|
||||
|
||||
private String showStoredEvents()
|
||||
{
|
||||
final File dir = new File(Config.DATAPACK_ROOT, "/data/events");
|
||||
if (dir.isFile())
|
||||
{
|
||||
return "<font color=\"FF0000\">The directory '" + dir.getAbsolutePath() + "' is a file or is corrupted!</font><br>";
|
||||
}
|
||||
|
||||
String note = "";
|
||||
if (!dir.exists())
|
||||
{
|
||||
note = "<font color=\"FF0000\">The directory '" + dir.getAbsolutePath() + "' does not exist!</font><br><font color=\"0099FF\">Trying to create it now...<br></font><br>";
|
||||
if (dir.mkdirs())
|
||||
{
|
||||
note += "<font color=\"006600\">The directory '" + dir.getAbsolutePath() + "' has been created!</font><br>";
|
||||
}
|
||||
else
|
||||
{
|
||||
note += "<font color=\"FF0000\">The directory '" + dir.getAbsolutePath() + "' hasn't been created!</font><br>";
|
||||
return note;
|
||||
}
|
||||
}
|
||||
|
||||
final String[] files = dir.list();
|
||||
final StringBuilder result = new StringBuilder(files.length * 500);
|
||||
result.append("<table>");
|
||||
for (String fileName : files)
|
||||
{
|
||||
result.append("<tr><td align=center>");
|
||||
result.append(fileName);
|
||||
result.append(" </td></tr><tr><td><table cellspacing=0><tr><td><button value=\"Select Event\" action=\"bypass -h admin_event_set ");
|
||||
result.append(fileName);
|
||||
result.append("\" width=90 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><button value=\"View Event\" action=\"bypass -h admin_event_see ");
|
||||
result.append(fileName);
|
||||
result.append("\" width=90 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><button value=\"Delete Event\" action=\"bypass -h admin_event_del ");
|
||||
result.append(fileName);
|
||||
result.append("\" width=90 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table></td></tr><tr><td> </td></tr><tr><td> </td></tr>");
|
||||
}
|
||||
|
||||
result.append("</table>");
|
||||
|
||||
return note + result;
|
||||
}
|
||||
|
||||
private void showMainPage(PlayerInstance activeChar)
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1);
|
||||
final String replyMSG = "<html><title>[ L2J EVENT ENGINE ]</title><body><br><center><button value=\"Create NEW event \" action=\"bypass -h admin_event_new\" width=150 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><center><br><font color=LEVEL>Stored Events:</font><br></center>" + showStoredEvents() + "</body></html>";
|
||||
adminReply.setHtml(replyMSG);
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
|
||||
private void showNewEventPage(PlayerInstance activeChar)
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1);
|
||||
final StringBuilder replyMSG = new StringBuilder(512);
|
||||
replyMSG.append("<html><title>[ L2J EVENT ENGINE ]</title><body><br><br><center><font color=LEVEL>Event name:</font><br>");
|
||||
if (tempName.isEmpty())
|
||||
{
|
||||
replyMSG.append("You can also use //event_name text to insert a new title");
|
||||
replyMSG.append("<center><multiedit var=\"name\" width=260 height=24> <button value=\"Set Event Name\" action=\"bypass -h admin_event_name $name\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
|
||||
}
|
||||
else
|
||||
{
|
||||
replyMSG.append(tempName);
|
||||
}
|
||||
|
||||
replyMSG.append("<br><br><font color=LEVEL>Event description:</font><br></center>");
|
||||
if (tempBuffer.isEmpty())
|
||||
{
|
||||
replyMSG.append("You can also use //add text to add text or //delete_buffer to remove the text.");
|
||||
}
|
||||
else
|
||||
{
|
||||
replyMSG.append(tempBuffer);
|
||||
}
|
||||
|
||||
replyMSG.append("<center><multiedit var=\"txt\" width=270 height=100> <button value=\"Add text\" action=\"bypass -h admin_add $txt\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
|
||||
replyMSG.append("<button value=\"Remove text\" action=\"bypass -h admin_delete_buffer\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
|
||||
if (!(tempName.isEmpty() && tempBuffer.isEmpty()))
|
||||
{
|
||||
replyMSG.append("<br><button value=\"Store Event Data\" action=\"bypass -h admin_event_store\" width=160 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
|
||||
}
|
||||
|
||||
replyMSG.append("</center></body></html>");
|
||||
|
||||
adminReply.setHtml(replyMSG.toString());
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
|
||||
private void showEventParameters(PlayerInstance activeChar, int teamnumbers)
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1);
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("<html><body><title>[ L2J EVENT ENGINE ]</title><br><center> Current event: <font color=\"LEVEL\">");
|
||||
sb.append(GameEvent._eventName);
|
||||
sb.append("</font></center><br>INFO: To start an event, you must first set the number of teams, then type their names in the boxes and finally type the NPC ID that will be the event manager (can be any existing npc) next to the \"Announce Event!\" button.<br><table width=100%>");
|
||||
sb.append("<tr><td><button value=\"Announce Event!\" action=\"bypass -h admin_event_announce $event_npcid ");
|
||||
sb.append(teamnumbers);
|
||||
sb.append(" ");
|
||||
for (int i = 1; (i - 1) < teamnumbers; i++) // Event announce params
|
||||
{
|
||||
sb.append("$event_teams_name");
|
||||
sb.append(i);
|
||||
sb.append(" - ");
|
||||
}
|
||||
sb.append("\" width=140 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||
sb.append("<td><edit var=\"event_npcid\" width=100 height=20></td></tr>");
|
||||
sb.append("<tr><td><button value=\"Set number of teams\" action=\"bypass -h admin_event_change_teams_number $event_teams_number\" width=140 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||
sb.append("<td><edit var=\"event_teams_number\" width=100 height=20></td></tr>");
|
||||
sb.append("</table><br><center><br><br>");
|
||||
sb.append("<font color=\"LEVEL\">Teams' names:</font><br><table width=100% cellspacing=8>");
|
||||
for (int i = 1; (i - 1) < teamnumbers; i++) // Team names params
|
||||
{
|
||||
sb.append("<tr><td align=center>Team #");
|
||||
sb.append(i);
|
||||
sb.append(" name:</td><td><edit var=\"event_teams_name");
|
||||
sb.append(i);
|
||||
sb.append("\" width=150 height=15></td></tr>");
|
||||
}
|
||||
sb.append("</table></body></html>");
|
||||
|
||||
adminReply.setHtml(sb.toString());
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
|
||||
private void showEventControl(PlayerInstance activeChar)
|
||||
{
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1);
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("<html><title>[ EVENT ENGINE ]</title><body><br><center>Current event: <font color=\"LEVEL\">");
|
||||
sb.append(GameEvent._eventName);
|
||||
sb.append("</font></center><br><table cellspacing=-1 width=280><tr><td align=center>Type the team ID(s) that will be affected by the commands. Commands with '*' work with only 1 team ID in the field, while '!' - none.</td></tr><tr><td align=center><edit var=\"team_number\" width=100 height=15></td></tr>");
|
||||
sb.append("<tr><td> </td></tr><tr><td><table width=200>");
|
||||
if (!npcsDeleted)
|
||||
{
|
||||
sb.append("<tr><td><button value=\"Start!\" action=\"bypass -h admin_event_control_begin\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><font color=\"LEVEL\">Destroys all event npcs so no more people can't participate now on</font></td></tr>");
|
||||
}
|
||||
|
||||
sb.append("<tr><td> </td></tr><tr><td><button value=\"Teleport\" action=\"bypass -h admin_event_control_teleport $team_number\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><font color=\"LEVEL\">Teleports the specified team to your position</font></td></tr><tr><td> </td></tr><tr><td><button value=\"Sit/Stand\" action=\"bypass -h admin_event_control_sit $team_number\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><font color=\"LEVEL\">Sits/Stands up the team</font></td></tr><tr><td> </td></tr><tr><td><button value=\"Kill\" action=\"bypass -h admin_event_control_kill $team_number\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><font color=\"LEVEL\">Finish with the life of all the players in the selected team</font></td></tr><tr><td> </td></tr><tr><td><button value=\"Resurrect\" action=\"bypass -h admin_event_control_res $team_number\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><font color=\"LEVEL\">Resurrect Team's members</font></td></tr><tr><td> </td></tr><tr><td><table cellspacing=-1><tr><td><button value=\"Transform*\" action=\"bypass -h admin_event_control_transform $team_number $transf_id\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr><tr><td><edit var=\"transf_id\" width=98 height=15></td></tr></table></td><td><font color=\"LEVEL\">Transforms the team into the transformation with the ID specified. Multiple IDs result in randomly chosen one for each player.</font></td></tr><tr><td> </td></tr><tr><td><button value=\"UnTransform\" action=\"bypass -h admin_event_control_untransform $team_number\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><font color=\"LEVEL\">Untransforms the team</font></td></tr><tr><td> </td></tr><tr><td><table cellspacing=-1><tr><td><button value=\"Give Item\" action=\"bypass -h admin_event_control_prize $team_number $n $id\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><table><tr><td width=32>Num</td><td><edit var=\"n\" width=60 height=15></td></tr><tr><td>ID</td><td><edit var=\"id\" width=60 height=15></td></tr></table></td><td><font color=\"LEVEL\">Give the specified item id to every single member of the team, you can put 5*level, 5*kills or 5 in the number field for example</font></td></tr><tr><td> </td></tr><tr><td><table cellspacing=-1><tr><td><button value=\"Kick Player\" action=\"bypass -h admin_event_control_kick $player_name\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr><tr><td><edit var=\"player_name\" width=98 height=15></td></tr></table></td><td><font color=\"LEVEL\">Kicks the specified player(s) from the event. Blank field kicks target.</font></td></tr><tr><td> </td></tr><tr><td><button value=\"End!\" action=\"bypass -h admin_event_control_finish\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><font color=\"LEVEL\">Will finish the event teleporting back all the players</font></td></tr><tr><td> </td></tr></table></td></tr></table></body></html>");
|
||||
adminReply.setHtml(sb.toString());
|
||||
activeChar.sendPacket(adminReply);
|
||||
}
|
||||
|
||||
private void rewardTeam(PlayerInstance activeChar, int team, int n, int id, String type)
|
||||
{
|
||||
int num = n;
|
||||
for (PlayerInstance player : GameEvent._teams.get(team))
|
||||
{
|
||||
if (type.equalsIgnoreCase("level"))
|
||||
{
|
||||
num = n * player.getLevel();
|
||||
}
|
||||
else if (type.equalsIgnoreCase("kills") && (player.getEventStatus() != null))
|
||||
{
|
||||
num = n * player.getEventStatus().getKills().size();
|
||||
}
|
||||
else
|
||||
{
|
||||
num = n;
|
||||
}
|
||||
|
||||
player.addItem("Event", id, num, activeChar, true);
|
||||
|
||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1);
|
||||
adminReply.setHtml("<html><body> CONGRATULATIONS! You should have been rewarded. </body></html>");
|
||||
player.sendPacket(adminReply);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.bypasshandlers;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.l2jmobius.gameserver.handler.IBypassHandler;
|
||||
import org.l2jmobius.gameserver.instancemanager.events.GameEvent;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
|
||||
public class EventEngine implements IBypassHandler
|
||||
{
|
||||
private static final String[] COMMANDS =
|
||||
{
|
||||
"event_participate",
|
||||
"event_unregister"
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean useBypass(String command, PlayerInstance player, Creature target)
|
||||
{
|
||||
if (!target.isNpc())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (command.equalsIgnoreCase("event_participate"))
|
||||
{
|
||||
GameEvent.registerPlayer(player);
|
||||
return true;
|
||||
}
|
||||
else if (command.equalsIgnoreCase("event_unregister"))
|
||||
{
|
||||
GameEvent.removeAndResetPlayer(player);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Exception in " + getClass().getSimpleName(), e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getBypassList()
|
||||
{
|
||||
return COMMANDS;
|
||||
}
|
||||
}
|
||||
@@ -99,9 +99,9 @@ public class Observation implements IBypassHandler
|
||||
player.sendPacket(SystemMessageId.YOU_MAY_NOT_OBSERVE_A_SIEGE_WITH_A_PET_OR_SERVITOR_SUMMONED);
|
||||
return false;
|
||||
}
|
||||
if (player.isOnEvent())
|
||||
if (player.isRegisteredOnEvent())
|
||||
{
|
||||
player.sendMessage("Cannot use while current Event");
|
||||
player.sendMessage("Cannot use while registered on an event.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,22 +19,21 @@ package handlers.skillconditionhandlers;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent;
|
||||
import org.l2jmobius.gameserver.model.skills.ISkillCondition;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class OpNotInCeremonyOfChaosSkillCondition implements ISkillCondition
|
||||
public class OpNotInEventSkillCondition implements ISkillCondition
|
||||
{
|
||||
public OpNotInCeremonyOfChaosSkillCondition(StatSet params)
|
||||
public OpNotInEventSkillCondition(StatSet params)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUse(Creature caster, Skill skill, WorldObject target)
|
||||
{
|
||||
return (caster.isPlayer() && !caster.getActingPlayer().isOnEvent(CeremonyOfChaosEvent.class));
|
||||
return (caster.isPlayer() && !caster.getActingPlayer().isOnEvent());
|
||||
}
|
||||
}
|
||||
@@ -79,7 +79,7 @@ public class NotFriend implements IAffectObjectHandler
|
||||
}
|
||||
|
||||
// Events.
|
||||
if (player.isOnCustomEvent() && (player.getTeam() == target.getTeam()))
|
||||
if (player.isOnEvent() && (player.getTeam() == target.getTeam()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ public class NotFriendPc implements IAffectObjectHandler
|
||||
}
|
||||
|
||||
// Events.
|
||||
if (player.isOnCustomEvent() && (player.getTeam() == target.getTeam()))
|
||||
if (player.isOnEvent() && (player.getTeam() == target.getTeam()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ public class Q10813_ForGlory extends Quest
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
private void onCeremonyOfChaosMatchResult(OnCeremonyOfChaosMatchResult event)
|
||||
{
|
||||
event.getMembers().forEach(player -> manageQuestProgress(player.getPlayer()));
|
||||
event.getMembers().forEach(player -> manageQuestProgress(player));
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_OLYMPIAD_MATCH_RESULT)
|
||||
|
||||
@@ -169,7 +169,7 @@ public class Q10819_ForHonor extends Quest
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
private void onCeremonyOfChaosMatchResult(OnCeremonyOfChaosMatchResult event)
|
||||
{
|
||||
event.getMembers().forEach(player -> manageQuestProgress(player.getPlayer()));
|
||||
event.getMembers().forEach(player -> manageQuestProgress(player));
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_OLYMPIAD_MATCH_RESULT)
|
||||
|
||||
@@ -1155,7 +1155,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
|
||||
@@ -393,7 +393,7 @@
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -412,7 +412,7 @@
|
||||
<set name="price" val="80" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="for_npc" val="true" />
|
||||
@@ -436,7 +436,7 @@
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -452,7 +452,7 @@
|
||||
<set name="price" val="2000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="for_npc" val="true" />
|
||||
@@ -491,7 +491,7 @@
|
||||
<set name="price" val="240000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<skills>
|
||||
@@ -507,7 +507,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -520,7 +520,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -537,7 +537,7 @@
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2010" level="1" /> <!-- Endeavor Potion -->
|
||||
</skills>
|
||||
@@ -554,7 +554,7 @@
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="for_npc" val="true" />
|
||||
@@ -577,7 +577,7 @@
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="for_npc" val="true" />
|
||||
@@ -598,7 +598,7 @@
|
||||
<set name="price" val="400" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<skills>
|
||||
@@ -615,7 +615,7 @@
|
||||
<set name="price" val="2000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<skills>
|
||||
|
||||
@@ -728,7 +728,7 @@
|
||||
<set name="price" val="500000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<skills>
|
||||
@@ -746,7 +746,7 @@
|
||||
<set name="price" val="80000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<skills>
|
||||
@@ -761,7 +761,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="120" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -773,7 +773,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="120" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -788,7 +788,7 @@
|
||||
<set name="price" val="110000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<skills>
|
||||
@@ -806,7 +806,7 @@
|
||||
<set name="price" val="15000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<skills>
|
||||
@@ -821,7 +821,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="120" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -833,7 +833,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="120" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -848,7 +848,7 @@
|
||||
<set name="price" val="50000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<skills>
|
||||
@@ -866,7 +866,7 @@
|
||||
<set name="price" val="6000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<skills>
|
||||
@@ -881,7 +881,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="120" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -893,7 +893,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="120" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -908,7 +908,7 @@
|
||||
<set name="price" val="5000000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<skills>
|
||||
@@ -926,7 +926,7 @@
|
||||
<set name="price" val="500000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<skills>
|
||||
@@ -941,7 +941,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="120" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_WEAPON" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
@@ -953,7 +953,7 @@
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="120" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_ENCHANT_ARMOR" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
</item>
|
||||
|
||||
@@ -700,7 +700,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -723,7 +723,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -881,7 +881,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="2031" level="1" /> <!-- Healing Potion -->
|
||||
|
||||
@@ -467,7 +467,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -490,7 +490,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
|
||||
@@ -486,7 +486,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -507,7 +507,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -528,7 +528,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -549,7 +549,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -570,7 +570,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -591,7 +591,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -612,7 +612,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -633,7 +633,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -654,7 +654,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -675,7 +675,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -696,7 +696,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -717,7 +717,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -738,7 +738,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -759,7 +759,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -780,7 +780,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
|
||||
@@ -1088,7 +1088,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<skills>
|
||||
<skill id="2166" level="1" /> <!-- CP Potion -->
|
||||
@@ -1107,7 +1107,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<skills>
|
||||
<skill id="2166" level="2" /> <!-- Greater CP Potion -->
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2024" level="1" /> <!-- Firecracker -->
|
||||
</skills>
|
||||
@@ -85,7 +85,7 @@
|
||||
<set name="material" val="STEEL" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<skills>
|
||||
<skill id="2025" level="1" /> <!-- Large Firecracker -->
|
||||
@@ -117,7 +117,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2166" level="2" /> <!-- Greater CP Potion -->
|
||||
</skills>
|
||||
@@ -135,7 +135,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="2038" level="1" /> <!-- Quick Healing Potion -->
|
||||
|
||||
@@ -2125,7 +2125,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2274" level="1" /> <!-- Fisherman's Potion - Green -->
|
||||
</skills>
|
||||
@@ -2142,7 +2142,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2274" level="2" /> <!-- Fisherman's Potion - Jade -->
|
||||
</skills>
|
||||
@@ -2159,7 +2159,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2274" level="3" /> <!-- Fisherman's Potion - Blue -->
|
||||
</skills>
|
||||
@@ -2176,7 +2176,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2274" level="4" /> <!-- Fisherman's Potion - Yellow -->
|
||||
</skills>
|
||||
@@ -2193,7 +2193,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2274" level="5" /> <!-- Fisherman's Potion - Orange -->
|
||||
</skills>
|
||||
@@ -2210,7 +2210,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2274" level="6" /> <!-- Fisherman's Potion - Purple -->
|
||||
</skills>
|
||||
@@ -2227,7 +2227,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2274" level="7" /> <!-- Fisherman's Potion - Red -->
|
||||
</skills>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2274" level="8" /> <!-- Fisherman's Potion - White -->
|
||||
</skills>
|
||||
@@ -27,7 +27,7 @@
|
||||
<set name="price" val="5000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
</item>
|
||||
|
||||
@@ -374,7 +374,7 @@
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -512,7 +512,7 @@
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -635,7 +635,7 @@
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2289" level="6" /> <!-- Elixir of CP (S-grade) -->
|
||||
</skills>
|
||||
@@ -966,7 +966,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="SummonItems" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2103" level="1" /> <!-- Mysterious Potion -->
|
||||
</skills>
|
||||
@@ -982,7 +982,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2291" level="1" /> <!-- Facelifting Potion -->
|
||||
</skills>
|
||||
@@ -998,7 +998,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2292" level="1" /> <!-- Facelifting Potion -->
|
||||
</skills>
|
||||
@@ -1014,7 +1014,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2293" level="1" /> <!-- Facelifting Potion -->
|
||||
</skills>
|
||||
@@ -1030,7 +1030,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2294" level="1" /> <!-- Dye Potion -->
|
||||
</skills>
|
||||
@@ -1046,7 +1046,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2295" level="1" /> <!-- Dye Potion -->
|
||||
</skills>
|
||||
@@ -1062,7 +1062,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2296" level="1" /> <!-- Dye Potion -->
|
||||
</skills>
|
||||
@@ -1078,7 +1078,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2297" level="1" /> <!-- Dye Potion -->
|
||||
</skills>
|
||||
@@ -1094,7 +1094,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2298" level="1" /> <!-- Hair Style Change Potion -->
|
||||
</skills>
|
||||
@@ -1110,7 +1110,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2299" level="1" /> <!-- Hair Style Change Potion -->
|
||||
</skills>
|
||||
@@ -1126,7 +1126,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2300" level="1" /> <!-- Hair Style Change Potion -->
|
||||
</skills>
|
||||
@@ -1142,7 +1142,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2301" level="1" /> <!-- Hair Style Change Potion -->
|
||||
</skills>
|
||||
@@ -1158,7 +1158,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2302" level="1" /> <!-- Hair Style Change Potion -->
|
||||
</skills>
|
||||
@@ -1174,7 +1174,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2303" level="1" /> <!-- Hair Style Change Potion -->
|
||||
</skills>
|
||||
@@ -1190,7 +1190,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2304" level="1" /> <!-- Hair Style Change Potion -->
|
||||
</skills>
|
||||
|
||||
@@ -1104,7 +1104,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2305" level="1" /> <!-- Primeval Potion -->
|
||||
</skills>
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -138,7 +138,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="2341" level="1" /> <!-- Caravaner's Remedy -->
|
||||
|
||||
@@ -1118,7 +1118,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2403" level="1" /> <!-- Hot Springs CP Potion -->
|
||||
</skills>
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player instanceId="43,44,45" />
|
||||
@@ -940,7 +940,7 @@
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_questitem" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="isAppearanceable" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<cond msgId="1518">
|
||||
|
||||
@@ -821,7 +821,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
|
||||
@@ -1802,7 +1802,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -1935,7 +1935,7 @@
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
</cond>
|
||||
@@ -2051,7 +2051,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<skills>
|
||||
<skill id="2862" level="6" /> <!-- Superior Elixir of CP (S-grade) -->
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<cond addName="1" msgId="113">
|
||||
@@ -36,7 +36,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="9086" level="2" /> <!-- Santa - CP Potion -->
|
||||
</skills>
|
||||
@@ -352,7 +352,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="9078" level="1" /> <!-- Hot Springs Recovery Potion -->
|
||||
</skills>
|
||||
|
||||
@@ -988,7 +988,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22042" level="1" /> <!-- Greater CP Potion -->
|
||||
</skills>
|
||||
@@ -1104,7 +1104,7 @@
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22043" level="6" /> <!-- Elixir of CP (S-grade) -->
|
||||
</skills>
|
||||
@@ -1220,7 +1220,7 @@
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22044" level="6" /> <!-- Elixir of Life (S-grade) -->
|
||||
</skills>
|
||||
|
||||
@@ -686,7 +686,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22174" level="1" /> <!-- Evain's Recovery Scroll -->
|
||||
</skills>
|
||||
@@ -764,7 +764,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22178" level="1" /> <!-- Hero's Potion -->
|
||||
</skills>
|
||||
@@ -786,7 +786,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2863" level="1" /> <!-- Superior Healing Potion -->
|
||||
</skills>
|
||||
@@ -808,7 +808,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="2864" level="1" /> <!-- Superior Quick Healing Potion -->
|
||||
</skills>
|
||||
|
||||
@@ -1575,7 +1575,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22214" level="1" /> <!-- MP Recovery Potion -->
|
||||
</skills>
|
||||
@@ -802,7 +802,7 @@
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22217" level="1" /> <!-- Super Healthy Juice (HP) -->
|
||||
</skills>
|
||||
@@ -821,7 +821,7 @@
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22218" level="1" /> <!-- Super Healthy Juice (HP) -->
|
||||
</skills>
|
||||
@@ -870,7 +870,7 @@
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22219" level="1" /> <!-- Super Healthy Juice (CP) -->
|
||||
</skills>
|
||||
@@ -889,7 +889,7 @@
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="22220" level="1" /> <!-- Super Healthy Juice (CP) -->
|
||||
</skills>
|
||||
|
||||
@@ -449,7 +449,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="26024" level="1" /> <!-- Quick Healing Potion -->
|
||||
@@ -472,7 +472,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="26025" level="1" /> <!-- Major Healing Potion -->
|
||||
@@ -495,7 +495,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="26026" level="1" /> <!-- Major Healing Potion -->
|
||||
@@ -616,7 +616,7 @@
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="26027" level="6" /> <!-- Elixir of CP (S-grade) -->
|
||||
@@ -737,7 +737,7 @@
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="S" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="26028" level="6" /> <!-- Elixir of Life (S-grade) -->
|
||||
@@ -760,7 +760,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<skills>
|
||||
<skill id="26029" level="1" /> <!-- CP Potion -->
|
||||
|
||||
@@ -1030,7 +1030,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="6" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1050,7 +1050,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="6" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1070,7 +1070,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="7" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -430,7 +430,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="6" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -453,7 +453,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="6" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -476,7 +476,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="7" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -180,7 +180,7 @@
|
||||
<set name="weight" val="10" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -527,7 +527,7 @@
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="reuse_delay" val="60000" />
|
||||
<set name="shared_reuse_group" val="105" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -562,7 +562,7 @@
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="material" val="LIQUID" />
|
||||
@@ -577,7 +577,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
@@ -590,7 +590,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SHAPE_SHIFTING_AM_FIXED" />
|
||||
@@ -608,7 +608,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SHAPE_SHIFTING_AM_FIXED" />
|
||||
|
||||
@@ -481,7 +481,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -501,7 +501,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1393,7 +1393,7 @@
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="bodypart" val="lbracelet" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="weight" val="150" />
|
||||
<set name="material" val="SILVER" />
|
||||
@@ -1411,7 +1411,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="CAPSULE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="time" val="1440" />
|
||||
|
||||
@@ -1092,7 +1092,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1110,7 +1110,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1164,7 +1164,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
@@ -1426,7 +1426,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SHAPE_SHIFTING_AM_FIXED" />
|
||||
<set name="material" val="STEEL" />
|
||||
@@ -1442,7 +1442,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SHAPE_SHIFTING_AM_FIXED" />
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="is_stackable" val="true" />
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="reuse_delay" val="300000" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -566,7 +566,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -760,7 +760,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
|
||||
@@ -984,7 +984,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="R" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -1008,7 +1008,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="R" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -1032,7 +1032,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="R" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<skills>
|
||||
<skill id="2289" level="7" /> <!-- Elixir of CP (R-grade) -->
|
||||
@@ -1052,7 +1052,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="R" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -1075,7 +1075,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="R" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<cond addName="1" msgId="113">
|
||||
<player flyMounted="false" />
|
||||
@@ -1098,7 +1098,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="handler" val="Elixir" />
|
||||
<set name="crystal_type" val="R" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<skills>
|
||||
<skill id="2862" level="7" /> <!-- Superior Elixir of CP (R-grade) -->
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="6" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -200,7 +200,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="6" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -220,7 +220,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="7" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -1423,7 +1423,7 @@
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="6" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1443,7 +1443,7 @@
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="6" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1463,7 +1463,7 @@
|
||||
<set name="reuse_delay" val="120000" />
|
||||
<set name="shared_reuse_group" val="7" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -771,7 +771,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -791,7 +791,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -475,7 +475,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -377,7 +377,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -791,7 +791,7 @@
|
||||
<set name="is_destroyable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="CAPSULE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_stackable" val="true" />
|
||||
@@ -1079,7 +1079,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="CAPSULE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_stackable" val="true" />
|
||||
@@ -1096,7 +1096,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="CAPSULE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_stackable" val="true" />
|
||||
@@ -1113,7 +1113,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="CAPSULE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_stackable" val="true" />
|
||||
@@ -1130,7 +1130,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="CAPSULE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_stackable" val="true" />
|
||||
@@ -1146,7 +1146,7 @@
|
||||
<set name="weight" val="60" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="MATERIAL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
@@ -1158,7 +1158,7 @@
|
||||
<set name="weight" val="60" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="MATERIAL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="commissionItemType" val="OTHER_ITEM" />
|
||||
@@ -1210,7 +1210,7 @@
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_stackable" val="true" />
|
||||
@@ -1247,7 +1247,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1265,7 +1265,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1283,7 +1283,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1301,7 +1301,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="ELIXIR" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -64,7 +64,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -80,7 +80,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -97,7 +97,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -119,7 +119,7 @@
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -1397,7 +1397,7 @@
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="POTION" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
|
||||
@@ -870,7 +870,7 @@
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="reuse_delay" val="500" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -1187,7 +1187,7 @@
|
||||
<set name="icon" val="icon.freya_scroll" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="is_freightable" val="true" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="is_stackable" val="true" />
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
@@ -79,7 +79,7 @@
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
@@ -442,7 +442,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="ENCHT_ATTR_RUNE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="time" val="120" />
|
||||
@@ -473,7 +473,7 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="ENCHT_ATTR_RUNE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="time" val="43200" />
|
||||
@@ -502,7 +502,7 @@
|
||||
<set name="icon" val="icon.bm_freya_vital_rune" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="ENCHT_ATTR_RUNE" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="time" val="30" />
|
||||
|
||||
@@ -539,7 +539,7 @@
|
||||
<set name="price" val="3000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
</item>
|
||||
<item id="47548" name="Bait" additionalName="R99" type="EtcItem">
|
||||
@@ -552,7 +552,7 @@
|
||||
<set name="price" val="20000" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="material" val="LIQUID" />
|
||||
</item>
|
||||
<item id="47549" name="PA Bait" type="EtcItem">
|
||||
|
||||
@@ -652,7 +652,7 @@
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="18695" level="1" /> <!-- Potion of Protection: Pull -->
|
||||
</skills>
|
||||
@@ -668,7 +668,7 @@
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="18696" level="1" /> <!-- Potion of Protection: Danger Zone -->
|
||||
</skills>
|
||||
@@ -684,7 +684,7 @@
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="18697" level="1" /> <!-- Potion of Protection: Seduction -->
|
||||
</skills>
|
||||
@@ -700,7 +700,7 @@
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="18698" level="1" /> <!-- Potion of Protection: Bluff -->
|
||||
</skills>
|
||||
@@ -716,7 +716,7 @@
|
||||
<set name="material" val="LIQUID" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<skills>
|
||||
<skill id="18699" level="1" /> <!-- Potion of Protection: Faint -->
|
||||
</skills>
|
||||
@@ -743,7 +743,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<skills>
|
||||
@@ -761,7 +761,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<skills>
|
||||
@@ -779,7 +779,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="material" val="PAPER" />
|
||||
<skills>
|
||||
@@ -797,7 +797,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="material" val="PAPER" />
|
||||
<skills>
|
||||
@@ -883,7 +883,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<skills>
|
||||
@@ -904,7 +904,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<skills>
|
||||
@@ -922,7 +922,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
@@ -943,7 +943,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
|
||||
@@ -500,7 +500,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<skills>
|
||||
@@ -520,7 +520,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="material" val="LIQUID" />
|
||||
<skills>
|
||||
@@ -538,7 +538,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
@@ -558,7 +558,7 @@
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
<set name="time" val="120" />
|
||||
<set name="etcitem_type" val="ENCHT_ATTR_RUNE" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="for_npc" val="true" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
|
||||
@@ -931,7 +931,7 @@
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="ENCHT_WP" />
|
||||
<set name="handler" val="EnchantScrolls" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
|
||||
@@ -1191,7 +1191,7 @@
|
||||
<set name="price" val="0" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<skills>
|
||||
@@ -1205,7 +1205,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="material" val="WOOD" />
|
||||
<set name="weight" val="100" />
|
||||
@@ -1242,7 +1242,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
@@ -1258,7 +1258,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="etcitem_type" val="SCROLL" />
|
||||
@@ -1360,7 +1360,7 @@
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="time" val="41600" />
|
||||
<set name="useSkillDisTime" val="1" />
|
||||
<skills>
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
<set name="weight" val="30" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_tradable" val="false" />
|
||||
@@ -163,7 +163,7 @@
|
||||
<set name="weight" val="30" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="commissionItemType" val="SCROLL_OTHER" />
|
||||
<set name="is_tradable" val="false" />
|
||||
@@ -1318,7 +1318,7 @@
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="etcitem_type" val="POTION" />
|
||||
<set name="is_oly_restricted" val="true" />
|
||||
<set name="is_coc_restricted" val="true" />
|
||||
<set name="is_event_restricted" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<set name="reuse_delay" val="300000" />
|
||||
<skills>
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
<xs:enumeration value="is_freightable" />
|
||||
<xs:enumeration value="is_magic_weapon" />
|
||||
<xs:enumeration value="is_oly_restricted" />
|
||||
<xs:enumeration value="is_coc_restricted" />
|
||||
<xs:enumeration value="is_event_restricted" />
|
||||
<xs:enumeration value="isAppearanceable" />
|
||||
<xs:enumeration value="is_premium" />
|
||||
<xs:enumeration value="is_questitem" />
|
||||
|
||||
Binary file not shown.
BIN
L2J_Mobius_05.0_Salvation/dist/libs/cron4j-2.2.5.jar
vendored
BIN
L2J_Mobius_05.0_Salvation/dist/libs/cron4j-2.2.5.jar
vendored
Binary file not shown.
@@ -71,7 +71,6 @@ import org.l2jmobius.gameserver.data.xml.EnchantItemHPBonusData;
|
||||
import org.l2jmobius.gameserver.data.xml.EnchantItemOptionsData;
|
||||
import org.l2jmobius.gameserver.data.xml.EnchantSkillGroupsData;
|
||||
import org.l2jmobius.gameserver.data.xml.EnsoulData;
|
||||
import org.l2jmobius.gameserver.data.xml.EventEngineData;
|
||||
import org.l2jmobius.gameserver.data.xml.ExperienceData;
|
||||
import org.l2jmobius.gameserver.data.xml.FakePlayerData;
|
||||
import org.l2jmobius.gameserver.data.xml.FenceData;
|
||||
@@ -393,8 +392,6 @@ public class GameServer
|
||||
SpawnData.getInstance().init();
|
||||
DBSpawnManager.getInstance();
|
||||
|
||||
printSection("Event Engine");
|
||||
EventEngineData.getInstance();
|
||||
VoteSystem.initialize();
|
||||
|
||||
printSection("Siege");
|
||||
|
||||
@@ -28,7 +28,6 @@ import org.l2jmobius.gameserver.data.BotReportTable;
|
||||
import org.l2jmobius.gameserver.data.sql.ClanTable;
|
||||
import org.l2jmobius.gameserver.data.sql.OfflineTraderTable;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManorManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.CeremonyOfChaosManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.DBSpawnManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
@@ -452,8 +451,6 @@ public class Shutdown extends Thread
|
||||
LOGGER.info("Item Auction Manager: All tasks stopped(" + tc.getEstimatedTimeAndRestartCounter() + "ms).");
|
||||
Olympiad.getInstance().saveOlympiadStatus();
|
||||
LOGGER.info("Olympiad System: Data saved(" + tc.getEstimatedTimeAndRestartCounter() + "ms).");
|
||||
CeremonyOfChaosManager.getInstance().stopScheduler();
|
||||
LOGGER.info("CeremonyOfChaosManager: Scheduler stopped(" + tc.getEstimatedTimeAndRestartCounter() + "ms).");
|
||||
|
||||
Hero.getInstance().shutdown();
|
||||
LOGGER.info("Hero System: Data saved(" + tc.getEstimatedTimeAndRestartCounter() + "ms).");
|
||||
|
||||
@@ -1,582 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.data.xml;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.EventMethodNotification;
|
||||
import org.l2jmobius.gameserver.model.eventengine.EventScheduler;
|
||||
import org.l2jmobius.gameserver.model.eventengine.IConditionalEventScheduler;
|
||||
import org.l2jmobius.gameserver.model.eventengine.conditions.BetweenConditionalScheduler;
|
||||
import org.l2jmobius.gameserver.model.eventengine.conditions.HaventRunConditionalScheduler;
|
||||
import org.l2jmobius.gameserver.model.eventengine.drop.EventDropGroup;
|
||||
import org.l2jmobius.gameserver.model.eventengine.drop.EventDropItem;
|
||||
import org.l2jmobius.gameserver.model.eventengine.drop.EventDrops;
|
||||
import org.l2jmobius.gameserver.model.eventengine.drop.GroupedDrop;
|
||||
import org.l2jmobius.gameserver.model.eventengine.drop.IEventDrop;
|
||||
import org.l2jmobius.gameserver.model.eventengine.drop.NormalDrop;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class EventEngineData implements IXmlReader
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger(EventEngineData.class.getName());
|
||||
|
||||
protected EventEngineData()
|
||||
{
|
||||
load();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load()
|
||||
{
|
||||
parseDatapackDirectory("data/events", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseDocument(Document doc, File f)
|
||||
{
|
||||
for (Node listNode = doc.getFirstChild(); listNode != null; listNode = listNode.getNextSibling())
|
||||
{
|
||||
if ("list".equals(listNode.getNodeName()))
|
||||
{
|
||||
for (Node eventNode = listNode.getFirstChild(); eventNode != null; eventNode = eventNode.getNextSibling())
|
||||
{
|
||||
if ("event".equals(eventNode.getNodeName()))
|
||||
{
|
||||
parseEvent(eventNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param eventNode
|
||||
*/
|
||||
private void parseEvent(Node eventNode)
|
||||
{
|
||||
final String eventName = parseString(eventNode.getAttributes(), "name");
|
||||
final String className = parseString(eventNode.getAttributes(), "class");
|
||||
AbstractEventManager<?> eventManager = null;
|
||||
try
|
||||
{
|
||||
final Class<?> clazz = Class.forName(className);
|
||||
|
||||
// Attempt to find getInstance() method
|
||||
for (Method method : clazz.getMethods())
|
||||
{
|
||||
if (Modifier.isStatic(method.getModifiers()) && AbstractEventManager.class.isAssignableFrom(method.getReturnType()) && (method.getParameterCount() == 0))
|
||||
{
|
||||
eventManager = (AbstractEventManager<?>) method.invoke(null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (eventManager == null)
|
||||
{
|
||||
throw new NoSuchMethodError("Couldn't method that gives instance of AbstractEventManager!");
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't locate event manager instance for event: " + eventName + " !", e);
|
||||
return;
|
||||
}
|
||||
|
||||
for (Node innerNode = eventNode.getFirstChild(); innerNode != null; innerNode = innerNode.getNextSibling())
|
||||
{
|
||||
if ("variables".equals(innerNode.getNodeName()))
|
||||
{
|
||||
parseVariables(eventManager, innerNode);
|
||||
}
|
||||
else if ("scheduler".equals(innerNode.getNodeName()))
|
||||
{
|
||||
parseScheduler(eventManager, innerNode);
|
||||
}
|
||||
else if ("rewards".equals(innerNode.getNodeName()))
|
||||
{
|
||||
parseRewards(eventManager, innerNode);
|
||||
}
|
||||
}
|
||||
|
||||
// Assign event name
|
||||
eventManager.setName(eventName);
|
||||
|
||||
// Start the scheduler
|
||||
eventManager.startScheduler();
|
||||
|
||||
// Start conditional schedulers
|
||||
eventManager.startConditionalSchedulers();
|
||||
|
||||
// Notify the event manager that we've done initializing its stuff
|
||||
eventManager.onInitialized();
|
||||
|
||||
LOGGER.info(getClass().getSimpleName() + ": " + eventManager.getClass().getSimpleName() + ": Initialized.");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param eventManager
|
||||
* @param innerNode
|
||||
*/
|
||||
private void parseVariables(AbstractEventManager<?> eventManager, Node innerNode)
|
||||
{
|
||||
final StatSet variables = new StatSet(LinkedHashMap::new);
|
||||
for (Node variableNode = innerNode.getFirstChild(); variableNode != null; variableNode = variableNode.getNextSibling())
|
||||
{
|
||||
if ("variable".equals(variableNode.getNodeName()))
|
||||
{
|
||||
variables.set(parseString(variableNode.getAttributes(), "name"), parseString(variableNode.getAttributes(), "value"));
|
||||
}
|
||||
else if ("list".equals(variableNode.getNodeName()))
|
||||
{
|
||||
parseListVariables(eventManager, variables, variableNode);
|
||||
}
|
||||
else if ("map".equals(variableNode.getNodeName()))
|
||||
{
|
||||
parseMapVariables(eventManager, variables, variableNode);
|
||||
}
|
||||
}
|
||||
eventManager.setVariables(variables);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param eventManager
|
||||
* @param innerNode
|
||||
*/
|
||||
private void parseScheduler(AbstractEventManager<?> eventManager, Node innerNode)
|
||||
{
|
||||
eventManager.stopScheduler();
|
||||
final Set<EventScheduler> schedulers = new LinkedHashSet<>();
|
||||
final Set<IConditionalEventScheduler> conditionalSchedulers = new LinkedHashSet<>();
|
||||
for (Node scheduleNode = innerNode.getFirstChild(); scheduleNode != null; scheduleNode = scheduleNode.getNextSibling())
|
||||
{
|
||||
if ("schedule".equals(scheduleNode.getNodeName()))
|
||||
{
|
||||
final StatSet params = new StatSet(LinkedHashMap::new);
|
||||
final NamedNodeMap attrs = scheduleNode.getAttributes();
|
||||
for (int i = 0; i < attrs.getLength(); i++)
|
||||
{
|
||||
final Node node = attrs.item(i);
|
||||
params.set(node.getNodeName(), node.getNodeValue());
|
||||
}
|
||||
|
||||
final EventScheduler scheduler = new EventScheduler(eventManager, params);
|
||||
for (Node eventNode = scheduleNode.getFirstChild(); eventNode != null; eventNode = eventNode.getNextSibling())
|
||||
{
|
||||
if ("event".equals(eventNode.getNodeName()))
|
||||
{
|
||||
String methodName = parseString(eventNode.getAttributes(), "name");
|
||||
if (methodName.charAt(0) == '#')
|
||||
{
|
||||
methodName = methodName.substring(1);
|
||||
}
|
||||
|
||||
final List<Object> args = new ArrayList<>();
|
||||
for (Node argsNode = eventNode.getFirstChild(); argsNode != null; argsNode = argsNode.getNextSibling())
|
||||
{
|
||||
if ("arg".equals(argsNode.getNodeName()))
|
||||
{
|
||||
final String type = parseString(argsNode.getAttributes(), "type");
|
||||
final Object value = parseObject(eventManager, type, argsNode.getTextContent());
|
||||
if (value != null)
|
||||
{
|
||||
args.add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
scheduler.addEventNotification(new EventMethodNotification(eventManager, methodName, args));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't add event notification for " + eventManager.getClass().getSimpleName(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
schedulers.add(scheduler);
|
||||
}
|
||||
else if ("conditionalSchedule".equals(scheduleNode.getNodeName()))
|
||||
{
|
||||
final StatSet params = new StatSet(LinkedHashMap::new);
|
||||
final NamedNodeMap attrs = scheduleNode.getAttributes();
|
||||
for (int i = 0; i < attrs.getLength(); i++)
|
||||
{
|
||||
final Node node = attrs.item(i);
|
||||
params.set(node.getNodeName(), node.getNodeValue());
|
||||
}
|
||||
|
||||
for (Node eventNode = scheduleNode.getFirstChild(); eventNode != null; eventNode = eventNode.getNextSibling())
|
||||
{
|
||||
if ("run".equals(eventNode.getNodeName()))
|
||||
{
|
||||
final String name = parseString(eventNode.getAttributes(), "name");
|
||||
final String ifType = parseString(eventNode.getAttributes(), "if", "BETWEEN").toUpperCase();
|
||||
switch (ifType)
|
||||
{
|
||||
case "BETWEEN":
|
||||
{
|
||||
final List<String> names = new ArrayList<>(2);
|
||||
for (Node innerData = eventNode.getFirstChild(); innerData != null; innerData = innerData.getNextSibling())
|
||||
{
|
||||
if ("name".equals(innerData.getNodeName()))
|
||||
{
|
||||
names.add(innerData.getTextContent());
|
||||
}
|
||||
}
|
||||
if (names.size() != 2)
|
||||
{
|
||||
LOGGER.warning(getClass().getSimpleName() + ": Event: " + eventManager.getClass().getSimpleName() + " has incorrect amount of scheduler names: " + names + " expected: 2 found: " + names.size());
|
||||
}
|
||||
else
|
||||
{
|
||||
conditionalSchedulers.add(new BetweenConditionalScheduler(eventManager, name, names.get(0), names.get(1)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "HASNT_RUN":
|
||||
{
|
||||
conditionalSchedulers.add(new HaventRunConditionalScheduler(eventManager, name));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
eventManager.setSchedulers(schedulers);
|
||||
eventManager.setConditionalSchedulers(conditionalSchedulers);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param eventManager
|
||||
* @param innerNode
|
||||
*/
|
||||
private void parseRewards(AbstractEventManager<?> eventManager, Node innerNode)
|
||||
{
|
||||
final Map<String, IEventDrop> rewards = new LinkedHashMap<>();
|
||||
forEach(innerNode, IXmlReader::isNode, rewardsNode ->
|
||||
{
|
||||
if ("reward".equalsIgnoreCase(rewardsNode.getNodeName()))
|
||||
{
|
||||
final String name = parseString(rewardsNode.getAttributes(), "name");
|
||||
final EventDrops dropType = parseEnum(rewardsNode.getAttributes(), EventDrops.class, "type");
|
||||
switch (dropType)
|
||||
{
|
||||
case GROUPED:
|
||||
{
|
||||
final GroupedDrop droplist = dropType.newInstance();
|
||||
forEach(rewardsNode, "group", groupsNode ->
|
||||
{
|
||||
final EventDropGroup group = new EventDropGroup(parseDouble(groupsNode.getAttributes(), "chance"));
|
||||
forEach(groupsNode, "item", itemNode ->
|
||||
{
|
||||
final NamedNodeMap attrs = itemNode.getAttributes();
|
||||
final int id = parseInteger(attrs, "id");
|
||||
final int min = parseInteger(attrs, "min");
|
||||
final int max = parseInteger(attrs, "max");
|
||||
final double chance = parseDouble(attrs, "chance");
|
||||
group.addItem(new EventDropItem(id, min, max, chance));
|
||||
});
|
||||
});
|
||||
rewards.put(name, droplist);
|
||||
break;
|
||||
}
|
||||
case NORMAL:
|
||||
{
|
||||
final NormalDrop droplist = dropType.newInstance();
|
||||
forEach(rewardsNode, "item", itemNode ->
|
||||
{
|
||||
final NamedNodeMap attrs = itemNode.getAttributes();
|
||||
final int id = parseInteger(attrs, "id");
|
||||
final int min = parseInteger(attrs, "min");
|
||||
final int max = parseInteger(attrs, "max");
|
||||
final double chance = parseDouble(attrs, "chance");
|
||||
droplist.addItem(new EventDropItem(id, min, max, chance));
|
||||
});
|
||||
rewards.put(name, droplist);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
eventManager.setRewards(rewards);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param eventManager
|
||||
* @param variables
|
||||
* @param variableNode
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private void parseListVariables(AbstractEventManager<?> eventManager, StatSet variables, Node variableNode)
|
||||
{
|
||||
final String name = parseString(variableNode.getAttributes(), "name");
|
||||
final String type = parseString(variableNode.getAttributes(), "type");
|
||||
final Class<?> classType = getClassByName(eventManager, type);
|
||||
final List<?> values = newList(classType);
|
||||
switch (type)
|
||||
{
|
||||
case "Byte":
|
||||
case "Short":
|
||||
case "Integer":
|
||||
case "Float":
|
||||
case "Long":
|
||||
case "Double":
|
||||
case "String":
|
||||
{
|
||||
for (Node stringNode = variableNode.getFirstChild(); stringNode != null; stringNode = stringNode.getNextSibling())
|
||||
{
|
||||
if ("value".equals(stringNode.getNodeName()))
|
||||
{
|
||||
((List<Object>) values).add(parseObject(eventManager, type, stringNode.getTextContent()));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "ItemHolder":
|
||||
{
|
||||
for (Node stringNode = variableNode.getFirstChild(); stringNode != null; stringNode = stringNode.getNextSibling())
|
||||
{
|
||||
if ("item".equals(stringNode.getNodeName()))
|
||||
{
|
||||
((List<ItemHolder>) values).add(new ItemHolder(parseInteger(stringNode.getAttributes(), "id"), parseLong(stringNode.getAttributes(), "count", 1L)));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SkillHolder":
|
||||
{
|
||||
for (Node stringNode = variableNode.getFirstChild(); stringNode != null; stringNode = stringNode.getNextSibling())
|
||||
{
|
||||
if ("skill".equals(stringNode.getNodeName()))
|
||||
{
|
||||
((List<SkillHolder>) values).add(new SkillHolder(parseInteger(stringNode.getAttributes(), "id"), parseInteger(stringNode.getAttributes(), "level", 1)));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "Location":
|
||||
{
|
||||
for (Node stringNode = variableNode.getFirstChild(); stringNode != null; stringNode = stringNode.getNextSibling())
|
||||
{
|
||||
if ("location".equals(stringNode.getNodeName()))
|
||||
{
|
||||
((List<Location>) values).add(new Location(parseInteger(stringNode.getAttributes(), "x"), parseInteger(stringNode.getAttributes(), "y"), parseInteger(stringNode.getAttributes(), "z", parseInteger(stringNode.getAttributes(), "heading", 0))));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Unhandled list case: " + type + " for event: " + eventManager.getClass().getSimpleName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
variables.set(name, values);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param eventManager
|
||||
* @param variables
|
||||
* @param variableNode
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private void parseMapVariables(AbstractEventManager<?> eventManager, StatSet variables, Node variableNode)
|
||||
{
|
||||
final String name = parseString(variableNode.getAttributes(), "name");
|
||||
final String keyType = parseString(variableNode.getAttributes(), "keyType");
|
||||
final String valueType = parseString(variableNode.getAttributes(), "valueType");
|
||||
final Class<?> keyClass = getClassByName(eventManager, keyType);
|
||||
final Class<?> valueClass = getClassByName(eventManager, valueType);
|
||||
final Map<?, ?> map = newMap(keyClass, valueClass);
|
||||
forEach(variableNode, IXmlReader::isNode, stringNode ->
|
||||
{
|
||||
switch (stringNode.getNodeName())
|
||||
{
|
||||
case "entry":
|
||||
{
|
||||
final NamedNodeMap attrs = stringNode.getAttributes();
|
||||
((Map<Object, Object>) map).put(parseObject(eventManager, keyType, parseString(attrs, "key")), parseObject(eventManager, valueType, parseString(attrs, "value")));
|
||||
break;
|
||||
}
|
||||
case "item":
|
||||
{
|
||||
final NamedNodeMap attrs = stringNode.getAttributes();
|
||||
((Map<Object, ItemHolder>) map).put(parseObject(eventManager, keyType, parseString(attrs, "key")), new ItemHolder(parseInteger(stringNode.getAttributes(), "id"), parseLong(stringNode.getAttributes(), "count")));
|
||||
break;
|
||||
}
|
||||
case "skill":
|
||||
{
|
||||
final NamedNodeMap attrs = stringNode.getAttributes();
|
||||
((Map<Object, SkillHolder>) map).put(parseObject(eventManager, keyType, parseString(attrs, "key")), new SkillHolder(parseInteger(stringNode.getAttributes(), "id"), parseInteger(stringNode.getAttributes(), "level")));
|
||||
break;
|
||||
}
|
||||
case "location":
|
||||
{
|
||||
final NamedNodeMap attrs = stringNode.getAttributes();
|
||||
((Map<Object, Location>) map).put(parseObject(eventManager, keyType, parseString(attrs, "key")), new Location(parseInteger(stringNode.getAttributes(), "x"), parseInteger(stringNode.getAttributes(), "y"), parseInteger(stringNode.getAttributes(), "z", parseInteger(stringNode.getAttributes(), "heading", 0))));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
LOGGER.warning(getClass().getSimpleName() + ": Unhandled map case: " + name + " " + stringNode.getNodeName() + " for event: " + eventManager.getClass().getSimpleName());
|
||||
}
|
||||
}
|
||||
});
|
||||
variables.set(name, map);
|
||||
}
|
||||
|
||||
private Class<?> getClassByName(AbstractEventManager<?> eventManager, String name)
|
||||
{
|
||||
switch (name)
|
||||
{
|
||||
case "Byte":
|
||||
{
|
||||
return Byte.class;
|
||||
}
|
||||
case "Short":
|
||||
{
|
||||
return Short.class;
|
||||
}
|
||||
case "Integer":
|
||||
{
|
||||
return Integer.class;
|
||||
}
|
||||
case "Float":
|
||||
{
|
||||
return Float.class;
|
||||
}
|
||||
case "Long":
|
||||
{
|
||||
return Long.class;
|
||||
}
|
||||
case "Double":
|
||||
{
|
||||
return Double.class;
|
||||
}
|
||||
case "String":
|
||||
{
|
||||
return String.class;
|
||||
}
|
||||
case "ItemHolder":
|
||||
{
|
||||
return ItemHolder.class;
|
||||
}
|
||||
case "SkillHolder":
|
||||
{
|
||||
return SkillHolder.class;
|
||||
}
|
||||
case "Location":
|
||||
{
|
||||
return Location.class;
|
||||
}
|
||||
default:
|
||||
{
|
||||
LOGGER.warning(getClass().getSimpleName() + ": Unhandled class case: " + name + " for event: " + eventManager.getClass().getSimpleName());
|
||||
return Object.class;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Object parseObject(AbstractEventManager<?> eventManager, String type, String value)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case "Byte":
|
||||
{
|
||||
return Byte.decode(value);
|
||||
}
|
||||
case "Short":
|
||||
{
|
||||
return Short.decode(value);
|
||||
}
|
||||
case "Integer":
|
||||
{
|
||||
return Integer.decode(value);
|
||||
}
|
||||
case "Float":
|
||||
{
|
||||
return Float.parseFloat(value);
|
||||
}
|
||||
case "Long":
|
||||
{
|
||||
return Long.decode(value);
|
||||
}
|
||||
case "Double":
|
||||
{
|
||||
return Double.parseDouble(value);
|
||||
}
|
||||
case "String":
|
||||
{
|
||||
return value;
|
||||
}
|
||||
default:
|
||||
{
|
||||
LOGGER.warning(getClass().getSimpleName() + ": Unhandled object case: " + type + " for event: " + eventManager.getClass().getSimpleName());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static <T> List<T> newList(Class<T> type)
|
||||
{
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
private static <K, V> Map<K, V> newMap(Class<K> keyClass, Class<V> valueClass)
|
||||
{
|
||||
return new LinkedHashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the single instance of EventEngineData.
|
||||
* @return single instance of EventEngineData
|
||||
*/
|
||||
public static EventEngineData getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final EventEngineData INSTANCE = new EventEngineData();
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.enums;
|
||||
|
||||
import org.l2jmobius.gameserver.model.eventengine.IEventState;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public enum CeremonyOfChaosState implements IEventState
|
||||
{
|
||||
SCHEDULED,
|
||||
REGISTRATION,
|
||||
PREPARING_FOR_TELEPORT,
|
||||
PREPARING_FOR_FIGHT,
|
||||
RUNNING
|
||||
}
|
||||
@@ -1,458 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.instancemanager;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.enums.CeremonyOfChaosState;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent;
|
||||
import org.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosMember;
|
||||
import org.l2jmobius.gameserver.model.clan.Clan;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
|
||||
import org.l2jmobius.gameserver.model.events.returns.TerminateReturn;
|
||||
import org.l2jmobius.gameserver.model.olympiad.OlympiadManager;
|
||||
import org.l2jmobius.gameserver.model.punishment.PunishmentAffect;
|
||||
import org.l2jmobius.gameserver.model.punishment.PunishmentType;
|
||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ceremonyofchaos.ExCuriousHouseState;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class CeremonyOfChaosManager extends AbstractEventManager<CeremonyOfChaosEvent>
|
||||
{
|
||||
protected static final Logger LOGGER = Logger.getLogger(CeremonyOfChaosManager.class.getName());
|
||||
|
||||
public static final String INITIAL_BUFF_KEY = "initial_buff";
|
||||
public static final String INITIAL_ITEMS_KEY = "initial_items";
|
||||
public static final String MAX_PLAYERS_KEY = "max_players";
|
||||
public static final String MAX_ARENAS_KEY = "max_arenas";
|
||||
public static final String INSTANCE_TEMPLATES_KEY = "instance_templates";
|
||||
public static final String END_BUFFS_KEYH = "end_buffs";
|
||||
|
||||
protected CeremonyOfChaosManager()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized()
|
||||
{
|
||||
if (getState() == null)
|
||||
{
|
||||
setState(CeremonyOfChaosState.SCHEDULED);
|
||||
}
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onPeriodEnd(String text)
|
||||
{
|
||||
// Set monthly true hero.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO, GlobalVariablesManager.getInstance().getInt(GlobalVariablesManager.COC_TOP_MEMBER, 0));
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TRUE_HERO_REWARDED, false);
|
||||
// Reset monthly winner.
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MARKS, 0);
|
||||
GlobalVariablesManager.getInstance().set(GlobalVariablesManager.COC_TOP_MEMBER, 0);
|
||||
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Could not reset Ceremony Of Chaos victories: " + e);
|
||||
}
|
||||
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var = ?"))
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Could not reset Ceremony Of Chaos penalties: " + e);
|
||||
}
|
||||
|
||||
// Update data for online players.
|
||||
for (PlayerInstance player : World.getInstance().getPlayers())
|
||||
{
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_PROHIBITED_PENALTIES);
|
||||
player.getVariables().remove(PlayerVariables.CEREMONY_OF_CHAOS_MARKS);
|
||||
player.getVariables().storeMe();
|
||||
}
|
||||
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos variables have been reset.");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos period has ended!");
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onEventStart()
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos event has started!");
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onEventEnd()
|
||||
{
|
||||
PunishmentManager.getInstance().stopPunishment(PunishmentAffect.CHARACTER, PunishmentType.COC_BAN);
|
||||
LOGGER.info(getClass().getSimpleName() + ": Ceremony of Chaos event has ended!");
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onRegistrationStart()
|
||||
{
|
||||
if (getState() != CeremonyOfChaosState.SCHEDULED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
setState(CeremonyOfChaosState.REGISTRATION);
|
||||
for (PlayerInstance player : World.getInstance().getPlayers())
|
||||
{
|
||||
if (player.isOnline())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.REGISTRATION_FOR_THE_CEREMONY_OF_CHAOS_HAS_BEGUN);
|
||||
if (canRegister(player, false))
|
||||
{
|
||||
player.sendPacket(ExCuriousHouseState.REGISTRATION_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onRegistrationEnd()
|
||||
{
|
||||
if (getState() != CeremonyOfChaosState.REGISTRATION)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
setState(CeremonyOfChaosState.PREPARING_FOR_TELEPORT);
|
||||
for (PlayerInstance player : World.getInstance().getPlayers())
|
||||
{
|
||||
if (player.isOnline())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.REGISTRATION_FOR_THE_CEREMONY_OF_CHAOS_HAS_ENDED);
|
||||
if (!isRegistered(player))
|
||||
{
|
||||
player.sendPacket(ExCuriousHouseState.IDLE_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
||||
final StatSet params = new StatSet();
|
||||
params.set("time", 60);
|
||||
getTimers().addTimer("count_down", params, 60 * 1000, null, null);
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onPrepareForFight()
|
||||
{
|
||||
if (getState() != CeremonyOfChaosState.PREPARING_FOR_TELEPORT)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
setState(CeremonyOfChaosState.PREPARING_FOR_FIGHT);
|
||||
int eventId = 0;
|
||||
int position = 1;
|
||||
CeremonyOfChaosEvent event = null;
|
||||
final List<PlayerInstance> players = getRegisteredPlayers().stream().sorted(Comparator.comparingInt(PlayerInstance::getLevel)).collect(Collectors.toList());
|
||||
final int maxPlayers = getMaxPlayersInArena();
|
||||
final List<Integer> templates = getVariables().getList(INSTANCE_TEMPLATES_KEY, Integer.class);
|
||||
for (PlayerInstance player : players)
|
||||
{
|
||||
if (player.isOnline() && canRegister(player, true))
|
||||
{
|
||||
if ((event == null) || (event.getMembers().size() >= maxPlayers))
|
||||
{
|
||||
final int template = templates.get(Rnd.get(templates.size()));
|
||||
event = new CeremonyOfChaosEvent(eventId++, InstanceManager.getInstance().getInstanceTemplate(template));
|
||||
position = 1;
|
||||
getEvents().add(event);
|
||||
}
|
||||
|
||||
event.addMember(new CeremonyOfChaosMember(player, event, position++));
|
||||
}
|
||||
else
|
||||
{
|
||||
player.prohibiteCeremonyOfChaos();
|
||||
player.sendPacket(ExCuriousHouseState.IDLE_PACKET);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear previously registrated players
|
||||
getRegisteredPlayers().clear();
|
||||
|
||||
// Prepare all event's players for start
|
||||
getEvents().forEach(CeremonyOfChaosEvent::preparePlayers);
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onStartFight()
|
||||
{
|
||||
if (getState() != CeremonyOfChaosState.PREPARING_FOR_FIGHT)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
setState(CeremonyOfChaosState.RUNNING);
|
||||
getEvents().forEach(CeremonyOfChaosEvent::startFight);
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onEndFight()
|
||||
{
|
||||
if (getState() != CeremonyOfChaosState.RUNNING)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
setState(CeremonyOfChaosState.SCHEDULED);
|
||||
getEvents().forEach(CeremonyOfChaosEvent::stopFight);
|
||||
getEvents().clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimerEvent(String event, StatSet params, Npc npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "count_down":
|
||||
{
|
||||
final int time = params.getInt("time", 0);
|
||||
final SystemMessage countdown = new SystemMessage(SystemMessageId.YOU_WILL_BE_MOVED_TO_THE_ARENA_IN_S1_SEC);
|
||||
countdown.addByte(time);
|
||||
broadcastPacket(countdown);
|
||||
|
||||
// Reschedule
|
||||
if (time == 60)
|
||||
{
|
||||
params.set("time", 10);
|
||||
getTimers().addTimer(event, params, 50 * 1000, null, null);
|
||||
}
|
||||
else if (time == 10)
|
||||
{
|
||||
params.set("time", 5);
|
||||
getTimers().addTimer(event, params, 5 * 1000, null, null);
|
||||
}
|
||||
else if ((time > 1) && (time <= 5))
|
||||
{
|
||||
params.set("time", time - 1);
|
||||
getTimers().addTimer(event, params, 1000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void broadcastPacket(IClientOutgoingPacket... packets)
|
||||
{
|
||||
getRegisteredPlayers().forEach(member -> member.sendPacket(packets));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRegister(PlayerInstance player, boolean sendMessage)
|
||||
{
|
||||
boolean canRegister = true;
|
||||
|
||||
final Clan clan = player.getClan();
|
||||
SystemMessageId sm = null;
|
||||
if (player.getLevel() < 85)
|
||||
{
|
||||
sm = SystemMessageId.ONLY_CHARACTERS_LEVEL_85_OR_ABOVE_MAY_PARTICIPATE_IN_THE_TOURNAMENT;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isFlyingMounted())
|
||||
{
|
||||
sm = SystemMessageId.YOU_CANNOT_PARTICIPATE_IN_THE_CEREMONY_OF_CHAOS_AS_A_FLYING_TRANSFORMED_OBJECT;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (!player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))
|
||||
{
|
||||
sm = SystemMessageId.ONLY_CHARACTERS_WHO_HAVE_COMPLETED_THE_3RD_CLASS_TRANSFER_MAY_PARTICIPATE;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (!player.isInventoryUnder80(false) || (player.getWeightPenalty() != 0))
|
||||
{
|
||||
sm = SystemMessageId.UNABLE_TO_PROCESS_THIS_REQUEST_UNTIL_YOUR_INVENTORY_S_WEIGHT_AND_SLOT_COUNT_ARE_LESS_THAN_80_PERCENT_OF_CAPACITY;
|
||||
canRegister = false;
|
||||
}
|
||||
else if ((clan == null) || (clan.getLevel() < 6))
|
||||
{
|
||||
sm = SystemMessageId.ONLY_CHARACTERS_WHO_ARE_A_PART_OF_A_CLAN_OF_LEVEL_6_OR_ABOVE_MAY_PARTICIPATE;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (getRegisteredPlayers().size() >= (getVariables().getInt(MAX_ARENAS_KEY, 5) * getMaxPlayersInArena()))
|
||||
{
|
||||
sm = SystemMessageId.THERE_ARE_TOO_MANY_CHALLENGERS_YOU_CANNOT_PARTICIPATE_NOW;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isCursedWeaponEquipped() || (player.getReputation() < 0))
|
||||
{
|
||||
sm = SystemMessageId.WAITING_LIST_REGISTRATION_IS_NOT_ALLOWED_WHILE_THE_CURSED_SWORD_IS_BEING_USED_OR_THE_STATUS_IS_IN_A_CHAOTIC_STATE;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isInDuel())
|
||||
{
|
||||
sm = SystemMessageId.YOU_CANNOT_REGISTER_IN_THE_WAITING_LIST_DURING_A_DUEL;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isInOlympiadMode() || OlympiadManager.getInstance().isRegistered(player))
|
||||
{
|
||||
sm = SystemMessageId.YOU_CANNOT_REGISTER_IN_THE_WAITING_LIST_WHILE_PARTICIPATING_IN_OLYMPIAD;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isOnEvent(CeremonyOfChaosEvent.class) || (player.getBlockCheckerArena() > -1)) // TODO underground coliseum and kratei checks.
|
||||
{
|
||||
sm = SystemMessageId.YOU_CANNOT_REGISTER_FOR_THE_WAITING_LIST_WHILE_PARTICIPATING_IN_THE_BLOCK_CHECKER_COLISEUM_OLYMPIAD_KRATEI_S_CUBE_CEREMONY_OF_CHAOS;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isInInstance())
|
||||
{
|
||||
sm = SystemMessageId.YOU_MAY_NOT_REGISTER_WHILE_USING_THE_INSTANT_ZONE;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isInSiege())
|
||||
{
|
||||
sm = SystemMessageId.YOU_CANNOT_REGISTER_FOR_THE_WAITING_LIST_ON_THE_BATTLEFIELD_CASTLE_SIEGE_FORTRESS_SIEGE;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isInsideZone(ZoneId.SIEGE))
|
||||
{
|
||||
sm = SystemMessageId.YOU_CANNOT_REGISTER_IN_THE_WAITING_LIST_WHILE_BEING_INSIDE_OF_A_BATTLEGROUND_CASTLE_SIEGE_FORTRESS_SIEGE;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isFlyingMounted())
|
||||
{
|
||||
sm = SystemMessageId.YOU_CANNOT_PARTICIPATE_IN_THE_CEREMONY_OF_CHAOS_AS_A_FLYING_TRANSFORMED_OBJECT;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isFishing())
|
||||
{
|
||||
sm = SystemMessageId.YOU_CANNOT_PARTICIPATE_IN_THE_CEREMONY_OF_CHAOS_WHILE_FISHING;
|
||||
canRegister = false;
|
||||
}
|
||||
else if (player.isCeremonyOfChaosProhibited())
|
||||
{
|
||||
canRegister = false;
|
||||
}
|
||||
|
||||
// TODO : One player can take part in 16 matches per day.
|
||||
if ((sm != null) && sendMessage)
|
||||
{
|
||||
player.sendPacket(sm);
|
||||
}
|
||||
|
||||
return canRegister;
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_BYPASS)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public TerminateReturn OnPlayerBypass(OnPlayerBypass event)
|
||||
{
|
||||
final PlayerInstance player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (event.getCommand().equalsIgnoreCase("pledgegame?command=apply"))
|
||||
{
|
||||
if (registerPlayer(player))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_ARE_NOW_ON_THE_WAITING_LIST_YOU_WILL_AUTOMATICALLY_BE_TELEPORTED_WHEN_THE_TOURNAMENT_STARTS_AND_WILL_BE_REMOVED_FROM_THE_WAITING_LIST_IF_YOU_LOG_OUT_IF_YOU_CANCEL_REGISTRATION_WITHIN_THE_LAST_MIN_OF_ENTERING_THE_ARENA_AFTER_SIGNING_UP_30_TIMES_OR_MORE_OR_FORFEIT_AFTER_ENTERING_THE_ARENA_30_TIMES_OR_MORE_DURING_A_CYCLE_YOU_BECOME_INELIGIBLE_FOR_PARTICIPATION_IN_THE_CEREMONY_OF_CHAOS_UNTIL_THE_NEXT_CYCLE_ALL_THE_BUFFS_EXCEPT_THE_VITALITY_BUFF_WILL_BE_REMOVED_ONCE_YOU_ENTER_THE_ARENAS);
|
||||
player.sendPacket(SystemMessageId.EXCEPT_THE_VITALITY_BUFF_ALL_BUFFS_INCLUDING_ART_OF_SEDUCTION_WILL_BE_DELETED);
|
||||
player.sendPacket(ExCuriousHouseState.PREPARE_PACKET);
|
||||
}
|
||||
return new TerminateReturn(true, false, false);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void OnPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
if (getState() == CeremonyOfChaosState.REGISTRATION)
|
||||
{
|
||||
final PlayerInstance player = event.getPlayer();
|
||||
if (canRegister(player, false))
|
||||
{
|
||||
player.sendPacket(ExCuriousHouseState.REGISTRATION_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL)
|
||||
public void OnPlayerLogout(OnPlayerLogout event)
|
||||
{
|
||||
if (getState() == CeremonyOfChaosState.REGISTRATION)
|
||||
{
|
||||
final PlayerInstance player = event.getPlayer();
|
||||
if (getRegisteredPlayers().contains(player))
|
||||
{
|
||||
getRegisteredPlayers().remove(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// player leave clan
|
||||
|
||||
public int getMaxPlayersInArena()
|
||||
{
|
||||
return getVariables().getInt(MAX_PLAYERS_KEY, 18);
|
||||
}
|
||||
|
||||
public static CeremonyOfChaosManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final CeremonyOfChaosManager INSTANCE = new CeremonyOfChaosManager();
|
||||
}
|
||||
}
|
||||
@@ -16,56 +16,77 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.instancemanager;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.commons.threads.ThreadPool;
|
||||
import org.l2jmobius.commons.util.Chronos;
|
||||
import org.l2jmobius.gameserver.data.xml.ClanHallData;
|
||||
import org.l2jmobius.gameserver.model.clan.Clan;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEvent;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
|
||||
import org.l2jmobius.gameserver.model.residences.ClanHallAuction;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
*/
|
||||
public class ClanHallAuctionManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
public class ClanHallAuctionManager
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger(ClanHallAuctionManager.class.getName());
|
||||
|
||||
private static final Map<Integer, ClanHallAuction> AUCTIONS = new HashMap<>();
|
||||
private static ScheduledFuture<?> _endTask;
|
||||
|
||||
protected ClanHallAuctionManager()
|
||||
{
|
||||
// Schedule of the start, next Wednesday at 19:00.
|
||||
final Calendar start = Calendar.getInstance();
|
||||
if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY))
|
||||
{
|
||||
start.add(Calendar.DAY_OF_YEAR, 7);
|
||||
}
|
||||
start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
|
||||
start.set(Calendar.HOUR_OF_DAY, 19);
|
||||
start.set(Calendar.MINUTE, 0);
|
||||
start.set(Calendar.SECOND, 0);
|
||||
final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis());
|
||||
ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week
|
||||
if (startDelay > 0)
|
||||
{
|
||||
onStart();
|
||||
}
|
||||
|
||||
// Schedule of the end, next Wednesday at 11:00.
|
||||
final Calendar end = Calendar.getInstance();
|
||||
if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY))
|
||||
{
|
||||
end.add(Calendar.DAY_OF_YEAR, 7);
|
||||
}
|
||||
end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
|
||||
end.set(Calendar.HOUR_OF_DAY, 11);
|
||||
end.set(Calendar.MINUTE, 0);
|
||||
end.set(Calendar.SECOND, 0);
|
||||
final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis());
|
||||
_endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onEventStart()
|
||||
private void onStart()
|
||||
{
|
||||
LOGGER.info(getClass().getSimpleName() + ": Clan Hall Auction has started!");
|
||||
AUCTIONS.clear();
|
||||
|
||||
//@formatter:off
|
||||
ClanHallData.getInstance().getFreeAuctionableHall()
|
||||
.forEach(c -> AUCTIONS.put(c.getResidenceId(), new ClanHallAuction(c.getResidenceId())));
|
||||
//@formatter:on
|
||||
ClanHallData.getInstance().getFreeAuctionableHall().forEach(c -> AUCTIONS.put(c.getResidenceId(), new ClanHallAuction(c.getResidenceId())));
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onEventEnd()
|
||||
private void onEnd()
|
||||
{
|
||||
AUCTIONS.values().forEach(ClanHallAuction::finalizeAuctions);
|
||||
AUCTIONS.clear();
|
||||
LOGGER.info(getClass().getSimpleName() + ": Clan Hall Auction has ended!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
public ClanHallAuction getClanHallAuctionById(int clanHallId)
|
||||
{
|
||||
return AUCTIONS.get(clanHallId);
|
||||
@@ -95,6 +116,11 @@ public class ClanHallAuctionManager extends AbstractEventManager<AbstractEvent<?
|
||||
return false;
|
||||
}
|
||||
|
||||
public long getRemainingTime()
|
||||
{
|
||||
return _endTask.getDelay(TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
public static ClanHallAuctionManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
|
||||
@@ -18,13 +18,14 @@ package org.l2jmobius.gameserver.instancemanager;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Calendar;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.threads.ThreadPool;
|
||||
import org.l2jmobius.commons.util.Chronos;
|
||||
import org.l2jmobius.gameserver.data.sql.ClanTable;
|
||||
import org.l2jmobius.gameserver.data.xml.DailyMissionData;
|
||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
|
||||
@@ -33,10 +34,6 @@ import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.stat.PlayerStat;
|
||||
import org.l2jmobius.gameserver.model.clan.Clan;
|
||||
import org.l2jmobius.gameserver.model.clan.ClanMember;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEvent;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.SubClassHolder;
|
||||
import org.l2jmobius.gameserver.model.olympiad.Olympiad;
|
||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
@@ -46,31 +43,54 @@ import org.l2jmobius.gameserver.network.serverpackets.ExWorldChatCnt;
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
public class DailyTaskManager
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger(DailyTaskManager.class.getName());
|
||||
|
||||
private final static int[] RESET_SKILLS =
|
||||
{
|
||||
2510, // Wondrous Cubic
|
||||
22180, // Wondrous Cubic - 1 time use
|
||||
};
|
||||
|
||||
protected DailyTaskManager()
|
||||
{
|
||||
// Schedule reset everyday at 6:30.
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
if ((calendar.get(Calendar.HOUR_OF_DAY) > 6) && (calendar.get(Calendar.MINUTE) > 30))
|
||||
{
|
||||
calendar.add(Calendar.DAY_OF_YEAR, 1);
|
||||
}
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 6);
|
||||
calendar.set(Calendar.MINUTE, 30);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis());
|
||||
ThreadPool.scheduleAtFixedRate(() -> onReset(), startDelay, 86400000); // 86400000 = 1 day
|
||||
|
||||
// Global save task.
|
||||
ThreadPool.scheduleAtFixedRate(() -> onSave(), 1800000, 1800000); // 1800000 = 30 minutes
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onReset()
|
||||
{
|
||||
resetDailyMissionRewards();
|
||||
if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)
|
||||
{
|
||||
clanLeaderApply();
|
||||
resetVitalityWeekly();
|
||||
}
|
||||
else
|
||||
{
|
||||
resetVitalityDaily();
|
||||
}
|
||||
|
||||
resetDailySkills();
|
||||
resetRecommends();
|
||||
resetWorldChatPoints();
|
||||
resetRecommends();
|
||||
resetTrainingCamp();
|
||||
onResetAttendanceRewards();
|
||||
resetDailyMissionRewards();
|
||||
resetAttendanceRewards();
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onSave()
|
||||
{
|
||||
GlobalVariablesManager.getInstance().storeMe();
|
||||
@@ -82,8 +102,7 @@ public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
}
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onClanLeaderApply()
|
||||
private void clanLeaderApply()
|
||||
{
|
||||
for (Clan clan : ClanTable.getInstance().getClans())
|
||||
{
|
||||
@@ -101,8 +120,49 @@ public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
LOGGER.info("Clan leaders has been updated.");
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
private void onVitalityReset()
|
||||
private void resetVitalityDaily()
|
||||
{
|
||||
if (!Config.ENABLE_VITALITY)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int vitality = PlayerStat.MAX_VITALITY_POINTS / 4;
|
||||
for (PlayerInstance player : World.getInstance().getPlayers())
|
||||
{
|
||||
final int VP = player.getVitalityPoints();
|
||||
player.setVitalityPoints(VP + vitality, false);
|
||||
for (SubClassHolder subclass : player.getSubClasses().values())
|
||||
{
|
||||
final int VPS = subclass.getVitalityPoints();
|
||||
subclass.setVitalityPoints(VPS + vitality);
|
||||
}
|
||||
}
|
||||
|
||||
try (Connection con = DatabaseFactory.getConnection())
|
||||
{
|
||||
try (PreparedStatement st = con.prepareStatement("UPDATE character_subclasses SET vitality_points = IF(vitality_points = ?, vitality_points, vitality_points + ?)"))
|
||||
{
|
||||
st.setInt(1, PlayerStat.MAX_VITALITY_POINTS);
|
||||
st.setInt(2, PlayerStat.MAX_VITALITY_POINTS / 4);
|
||||
st.execute();
|
||||
}
|
||||
|
||||
try (PreparedStatement st = con.prepareStatement("UPDATE characters SET vitality_points = IF(vitality_points = ?, vitality_points, vitality_points + ?)"))
|
||||
{
|
||||
st.setInt(1, PlayerStat.MAX_VITALITY_POINTS);
|
||||
st.setInt(2, PlayerStat.MAX_VITALITY_POINTS / 4);
|
||||
st.execute();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Error while updating vitality", e);
|
||||
}
|
||||
LOGGER.info("Daily Vitality Added");
|
||||
}
|
||||
|
||||
private void resetVitalityWeekly()
|
||||
{
|
||||
if (!Config.ENABLE_VITALITY)
|
||||
{
|
||||
@@ -143,12 +203,11 @@ public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection())
|
||||
{
|
||||
final List<SkillHolder> dailySkills = getVariables().getList("reset_skills", SkillHolder.class, Collections.emptyList());
|
||||
for (SkillHolder skill : dailySkills)
|
||||
for (int skill : RESET_SKILLS)
|
||||
{
|
||||
try (PreparedStatement ps = con.prepareStatement("DELETE FROM character_skills_save WHERE skill_id=?;"))
|
||||
{
|
||||
ps.setInt(1, skill.getSkillId());
|
||||
ps.setInt(1, skill);
|
||||
ps.execute();
|
||||
}
|
||||
}
|
||||
@@ -253,7 +312,7 @@ public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
DailyMissionData.getInstance().getDailyMissionData().forEach(DailyMissionDataHolder::reset);
|
||||
}
|
||||
|
||||
public void onResetAttendanceRewards()
|
||||
public void resetAttendanceRewards()
|
||||
{
|
||||
if (Config.ATTENDANCE_REWARDS_SHARE_ACCOUNT)
|
||||
{
|
||||
|
||||
@@ -168,9 +168,9 @@ public class HandysBlockCheckerManager
|
||||
return false;
|
||||
}
|
||||
|
||||
if (player.isOnEvent() || player.isInOlympiadMode())
|
||||
if (player.isRegisteredOnEvent() || player.isInOlympiadMode())
|
||||
{
|
||||
player.sendMessage("Couldnt register you due other event participation");
|
||||
player.sendMessage("Couldnt register you due other event participation.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -401,12 +401,7 @@ public class SellBuffsManager implements IXmlReader
|
||||
player.sendMessage("You can't sell buffs with Olympiad status!");
|
||||
return false;
|
||||
}
|
||||
else if (CeremonyOfChaosManager.getInstance().isRegistered(player))
|
||||
{
|
||||
player.sendMessage("You can't sell buffs with Ceremony of Chaos status!");
|
||||
return false;
|
||||
}
|
||||
else if (player.isOnEvent()) // custom event message
|
||||
else if (player.isRegisteredOnEvent())
|
||||
{
|
||||
player.sendMessage("You can't sell buffs while registered in an event!");
|
||||
return false;
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.instancemanager.events;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEvent;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
|
||||
import org.l2jmobius.gameserver.model.quest.Event;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ElpiesManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
{
|
||||
protected ElpiesManager()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
protected void startEvent()
|
||||
{
|
||||
final Event event = (Event) QuestManager.getInstance().getQuest("Elpies");
|
||||
if (event != null)
|
||||
{
|
||||
event.eventStart(null);
|
||||
}
|
||||
}
|
||||
|
||||
public static ElpiesManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final ElpiesManager INSTANCE = new ElpiesManager();
|
||||
}
|
||||
}
|
||||
@@ -1,548 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.instancemanager.events;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.cache.HtmCache;
|
||||
import org.l2jmobius.gameserver.data.SpawnTable;
|
||||
import org.l2jmobius.gameserver.data.xml.NpcData;
|
||||
import org.l2jmobius.gameserver.instancemanager.AntiFeedManager;
|
||||
import org.l2jmobius.gameserver.model.Spawn;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.holders.PlayerEventHolder;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
|
||||
/**
|
||||
* @author Nik
|
||||
* @Since 2011/05/17 21:51:39
|
||||
*/
|
||||
public class GameEvent
|
||||
{
|
||||
protected static final Logger LOGGER = Logger.getLogger(GameEvent.class.getName());
|
||||
public static EventState eventState = EventState.OFF;
|
||||
public static String _eventName = "";
|
||||
public static String _eventCreator = "";
|
||||
public static String _eventInfo = "";
|
||||
public static int _teamsNumber = 0;
|
||||
public static final Map<Integer, String> _teamNames = new ConcurrentHashMap<>();
|
||||
public static final Set<PlayerInstance> _registeredPlayers = ConcurrentHashMap.newKeySet();
|
||||
public static final Map<Integer, Set<PlayerInstance>> _teams = new ConcurrentHashMap<>();
|
||||
public static int _npcId = 0;
|
||||
private static final Map<PlayerInstance, PlayerEventHolder> _connectionLossData = new ConcurrentHashMap<>();
|
||||
|
||||
public enum EventState
|
||||
{
|
||||
OFF, // Not running
|
||||
STANDBY, // Waiting for participants to register
|
||||
ON // Registration is over and the event has started.
|
||||
}
|
||||
|
||||
/**
|
||||
* @param player
|
||||
* @return The team ID where the player is in, or -1 if player is null or team not found.
|
||||
*/
|
||||
public static int getPlayerTeamId(PlayerInstance player)
|
||||
{
|
||||
if (player == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (Entry<Integer, Set<PlayerInstance>> team : _teams.entrySet())
|
||||
{
|
||||
if (team.getValue().contains(player))
|
||||
{
|
||||
return team.getKey();
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static List<PlayerInstance> getTopNKillers(int n)
|
||||
{
|
||||
final Map<PlayerInstance, Integer> tmp = new HashMap<>();
|
||||
for (Set<PlayerInstance> teamList : _teams.values())
|
||||
{
|
||||
for (PlayerInstance player : teamList)
|
||||
{
|
||||
if (player.getEventStatus() == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
tmp.put(player, player.getEventStatus().getKills().size());
|
||||
}
|
||||
}
|
||||
|
||||
sortByValue(tmp);
|
||||
|
||||
// If the map size is less than "n", n will be as much as the map size
|
||||
if (tmp.size() <= n)
|
||||
{
|
||||
return new ArrayList<>(tmp.keySet());
|
||||
}
|
||||
|
||||
final List<PlayerInstance> toReturn = new ArrayList<>(tmp.keySet());
|
||||
return toReturn.subList(1, n);
|
||||
}
|
||||
|
||||
public static void showEventHtml(PlayerInstance player, String objectid)
|
||||
{
|
||||
// TODO: work on this
|
||||
if (eventState == EventState.STANDBY)
|
||||
{
|
||||
try
|
||||
{
|
||||
final String htmContent;
|
||||
final NpcHtmlMessage html = new NpcHtmlMessage(Integer.parseInt(objectid));
|
||||
if (_registeredPlayers.contains(player))
|
||||
{
|
||||
htmContent = HtmCache.getInstance().getHtm(player, "data/html/mods/EventEngine/Participating.htm");
|
||||
}
|
||||
else
|
||||
{
|
||||
htmContent = HtmCache.getInstance().getHtm(player, "data/html/mods/EventEngine/Participation.htm");
|
||||
}
|
||||
|
||||
if (htmContent != null)
|
||||
{
|
||||
html.setHtml(htmContent);
|
||||
}
|
||||
|
||||
html.replace("%objectId%", objectid); // Yeah, we need this.
|
||||
html.replace("%eventName%", _eventName);
|
||||
html.replace("%eventCreator%", _eventCreator);
|
||||
html.replace("%eventInfo%", _eventInfo);
|
||||
player.sendPacket(html);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Exception on showEventHtml(): " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Spawns an event participation NPC near the player. The npc id used to spawning is GameEvent._npcId
|
||||
* @param target
|
||||
*/
|
||||
public static void spawnEventNpc(PlayerInstance target)
|
||||
{
|
||||
try
|
||||
{
|
||||
final Spawn spawn = new Spawn(_npcId);
|
||||
spawn.setXYZ(target.getX() + 50, target.getY() + 50, target.getZ());
|
||||
spawn.setAmount(1);
|
||||
spawn.setHeading(target.getHeading());
|
||||
spawn.stopRespawn();
|
||||
SpawnTable.getInstance().addNewSpawn(spawn, false);
|
||||
spawn.init();
|
||||
spawn.getLastSpawn().setCurrentHp(999999999);
|
||||
spawn.getLastSpawn().setTitle(_eventName);
|
||||
spawn.getLastSpawn().getVariables().set("eventmob", true);
|
||||
spawn.getLastSpawn().setInvul(true);
|
||||
// spawn.getLastSpawn().decayMe();
|
||||
// spawn.getLastSpawn().spawnMe(spawn.getLastSpawn().getX(), spawn.getLastSpawn().getY(), spawn.getLastSpawn().getZ());
|
||||
spawn.getLastSpawn().broadcastPacket(new MagicSkillUse(spawn.getLastSpawn(), spawn.getLastSpawn(), 1034, 1, 1, 1));
|
||||
|
||||
// _npcs.add(spawn.getLastSpawn());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Exception on spawn(): " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Zoey76: TODO: Rewrite this in a way that doesn't iterate over all spawns.
|
||||
*/
|
||||
public static void unspawnEventNpcs()
|
||||
{
|
||||
SpawnTable.getInstance().forEachSpawn(spawn ->
|
||||
{
|
||||
final Npc npc = spawn.getLastSpawn();
|
||||
if ((npc != null) && npc.getVariables().getBoolean("eventmob", false))
|
||||
{
|
||||
npc.deleteMe();
|
||||
spawn.stopRespawn();
|
||||
SpawnTable.getInstance().deleteSpawn(spawn, false);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param player
|
||||
* @return False: If player is null, his event status is null or the event state is off. True: if the player is inside the _registeredPlayers list while the event state is STANDBY. If the event state is ON, it will check if the player is inside in one of the teams.
|
||||
*/
|
||||
public static boolean isParticipant(PlayerInstance player)
|
||||
{
|
||||
if ((player == null) || (player.getEventStatus() == null))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (eventState)
|
||||
{
|
||||
case OFF:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
case STANDBY:
|
||||
{
|
||||
return _registeredPlayers.contains(player);
|
||||
}
|
||||
case ON:
|
||||
{
|
||||
for (Set<PlayerInstance> teamList : _teams.values())
|
||||
{
|
||||
if (teamList.contains(player))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the player to the list of participants. If the event state is NOT STANDBY, the player wont be registered.
|
||||
* @param player
|
||||
*/
|
||||
public static void registerPlayer(PlayerInstance player)
|
||||
{
|
||||
if (eventState != EventState.STANDBY)
|
||||
{
|
||||
player.sendMessage("The registration period for this event is over.");
|
||||
return;
|
||||
}
|
||||
|
||||
if ((Config.DUALBOX_CHECK_MAX_L2EVENT_PARTICIPANTS_PER_IP == 0) || AntiFeedManager.getInstance().tryAddPlayer(AntiFeedManager.L2EVENT_ID, player, Config.DUALBOX_CHECK_MAX_L2EVENT_PARTICIPANTS_PER_IP))
|
||||
{
|
||||
_registeredPlayers.add(player);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendMessage("You have reached the maximum allowed participants per IP.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the player from the participating players and the teams and restores his init stats before he registered at the event (loc, pvp, pk, title etc)
|
||||
* @param player
|
||||
*/
|
||||
public static void removeAndResetPlayer(PlayerInstance player)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (isParticipant(player))
|
||||
{
|
||||
if (player.isDead())
|
||||
{
|
||||
player.restoreExp(100.0);
|
||||
player.doRevive();
|
||||
player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
|
||||
player.setCurrentCp(player.getMaxCp());
|
||||
}
|
||||
|
||||
player.decayMe();
|
||||
player.spawnMe(player.getX(), player.getY(), player.getZ());
|
||||
player.broadcastUserInfo();
|
||||
|
||||
player.stopTransformation(true);
|
||||
}
|
||||
|
||||
if (player.getEventStatus() != null)
|
||||
{
|
||||
player.getEventStatus().restorePlayerStats();
|
||||
}
|
||||
|
||||
player.setEventStatus(null);
|
||||
|
||||
_registeredPlayers.remove(player);
|
||||
final int teamId = getPlayerTeamId(player);
|
||||
if (_teams.containsKey(teamId))
|
||||
{
|
||||
_teams.get(teamId).remove(player);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Error at unregisterAndResetPlayer in the event:" + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The player's event status will be saved at _connectionLossData
|
||||
* @param player
|
||||
*/
|
||||
public static void savePlayerEventStatus(PlayerInstance player)
|
||||
{
|
||||
_connectionLossData.put(player, player.getEventStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* If _connectionLossData contains the player, it will restore the player's event status. Also it will remove the player from the _connectionLossData.
|
||||
* @param player
|
||||
*/
|
||||
public static void restorePlayerEventStatus(PlayerInstance player)
|
||||
{
|
||||
if (_connectionLossData.containsKey(player))
|
||||
{
|
||||
player.setEventStatus(_connectionLossData.get(player));
|
||||
_connectionLossData.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If the event is ON or STANDBY, it will not start. Sets the event state to STANDBY and spawns registration NPCs
|
||||
* @return a string with information if the event participation has been successfully started or not.
|
||||
*/
|
||||
public static String startEventParticipation()
|
||||
{
|
||||
try
|
||||
{
|
||||
switch (eventState)
|
||||
{
|
||||
case ON:
|
||||
{
|
||||
return "Cannot start event, it is already on.";
|
||||
}
|
||||
case STANDBY:
|
||||
{
|
||||
return "Cannot start event, it is on standby mode.";
|
||||
}
|
||||
case OFF: // Event is off, so no problem turning it on.
|
||||
{
|
||||
eventState = EventState.STANDBY;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Register the event at AntiFeedManager and clean it for just in case if the event is already registered.
|
||||
AntiFeedManager.getInstance().registerEvent(AntiFeedManager.L2EVENT_ID);
|
||||
AntiFeedManager.getInstance().clear(AntiFeedManager.L2EVENT_ID);
|
||||
|
||||
// Just in case
|
||||
unspawnEventNpcs();
|
||||
_registeredPlayers.clear();
|
||||
// _npcs.clear();
|
||||
if (NpcData.getInstance().getTemplate(_npcId) == null)
|
||||
{
|
||||
return "Cannot start event, invalid npc id.";
|
||||
}
|
||||
|
||||
try (FileReader fr = new FileReader(Config.DATAPACK_ROOT + "/data/events/" + _eventName);
|
||||
BufferedReader br = new BufferedReader(fr))
|
||||
{
|
||||
_eventCreator = br.readLine();
|
||||
_eventInfo = br.readLine();
|
||||
}
|
||||
|
||||
final Set<PlayerInstance> temp = new HashSet<>();
|
||||
for (PlayerInstance player : World.getInstance().getPlayers())
|
||||
{
|
||||
if (!player.isOnline())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!temp.contains(player))
|
||||
{
|
||||
spawnEventNpc(player);
|
||||
temp.add(player);
|
||||
}
|
||||
|
||||
World.getInstance().forEachVisibleObjectInRange(player, PlayerInstance.class, 1000, temp::add);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.warning("Event: " + e.getMessage());
|
||||
return "Cannot start event participation, an error has occured.";
|
||||
}
|
||||
|
||||
return "The event participation has been successfully started.";
|
||||
}
|
||||
|
||||
/**
|
||||
* If the event is ON or OFF, it will not start. Sets the event state to ON, creates the teams, adds the registered players ordered by level at the teams and adds a new event status to the players.
|
||||
* @return a string with information if the event has been successfully started or not.
|
||||
*/
|
||||
public static String startEvent()
|
||||
{
|
||||
try
|
||||
{
|
||||
switch (eventState)
|
||||
{
|
||||
case ON:
|
||||
{
|
||||
return "Cannot start event, it is already on.";
|
||||
}
|
||||
case STANDBY:
|
||||
{
|
||||
eventState = EventState.ON;
|
||||
break;
|
||||
}
|
||||
case OFF: // Event is off, so no problem turning it on.
|
||||
{
|
||||
return "Cannot start event, it is off. Participation start is required.";
|
||||
}
|
||||
}
|
||||
|
||||
// Clean the things we will use, just in case.
|
||||
unspawnEventNpcs();
|
||||
_teams.clear();
|
||||
_connectionLossData.clear();
|
||||
|
||||
// Insert empty lists at _teams.
|
||||
for (int i = 0; i < _teamsNumber; i++)
|
||||
{
|
||||
_teams.put(i + 1, ConcurrentHashMap.newKeySet());
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
while (!_registeredPlayers.isEmpty())
|
||||
{
|
||||
// Get the player with the biggest level
|
||||
int max = 0;
|
||||
PlayerInstance biggestLvlPlayer = null;
|
||||
for (PlayerInstance player : _registeredPlayers)
|
||||
{
|
||||
if (player == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (max < player.getLevel())
|
||||
{
|
||||
max = player.getLevel();
|
||||
biggestLvlPlayer = player;
|
||||
}
|
||||
}
|
||||
|
||||
if (biggestLvlPlayer == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
_registeredPlayers.remove(biggestLvlPlayer);
|
||||
_teams.get(i + 1).add(biggestLvlPlayer);
|
||||
biggestLvlPlayer.setEventStatus();
|
||||
i = (i + 1) % _teamsNumber;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.warning("Event: " + e.getMessage());
|
||||
return "Cannot start event, an error has occured.";
|
||||
}
|
||||
|
||||
return "The event has been successfully started.";
|
||||
}
|
||||
|
||||
/**
|
||||
* If the event state is OFF, it will not finish. Sets the event state to OFF, unregisters and resets the players, unspawns and clers the event NPCs, clears the teams, registered players, connection loss data, sets the teams number to 0, sets the event name to empty.
|
||||
* @return a string with information if the event has been successfully stopped or not.
|
||||
*/
|
||||
public static String finishEvent()
|
||||
{
|
||||
switch (eventState)
|
||||
{
|
||||
case OFF:
|
||||
{
|
||||
return "Cannot finish event, it is already off.";
|
||||
}
|
||||
case STANDBY:
|
||||
{
|
||||
for (PlayerInstance player : _registeredPlayers)
|
||||
{
|
||||
removeAndResetPlayer(player);
|
||||
}
|
||||
|
||||
unspawnEventNpcs();
|
||||
// _npcs.clear();
|
||||
_registeredPlayers.clear();
|
||||
_teams.clear();
|
||||
_connectionLossData.clear();
|
||||
_teamsNumber = 0;
|
||||
_eventName = "";
|
||||
eventState = EventState.OFF;
|
||||
return "The event has been stopped at STANDBY mode, all players unregistered and all event npcs unspawned.";
|
||||
}
|
||||
case ON:
|
||||
{
|
||||
for (Set<PlayerInstance> teamList : _teams.values())
|
||||
{
|
||||
for (PlayerInstance player : teamList)
|
||||
{
|
||||
removeAndResetPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
eventState = EventState.OFF;
|
||||
AntiFeedManager.getInstance().clear(AntiFeedManager.TVT_ID);
|
||||
unspawnEventNpcs(); // Just in case
|
||||
// _npcs.clear();
|
||||
_registeredPlayers.clear();
|
||||
_teams.clear();
|
||||
_connectionLossData.clear();
|
||||
_teamsNumber = 0;
|
||||
_eventName = "";
|
||||
_npcId = 0;
|
||||
_eventCreator = "";
|
||||
_eventInfo = "";
|
||||
return "The event has been stopped, all players unregistered and all event npcs unspawned.";
|
||||
}
|
||||
}
|
||||
|
||||
return "The event has been successfully finished.";
|
||||
}
|
||||
|
||||
private static Map<PlayerInstance, Integer> sortByValue(Map<PlayerInstance, Integer> unsortMap)
|
||||
{
|
||||
final List<Entry<PlayerInstance, Integer>> list = new LinkedList<>(unsortMap.entrySet());
|
||||
list.sort(Comparator.comparing(Entry::getValue));
|
||||
|
||||
final Map<PlayerInstance, Integer> sortedMap = new LinkedHashMap<>();
|
||||
for (Entry<PlayerInstance, Integer> entry : list)
|
||||
{
|
||||
sortedMap.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
return sortedMap;
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.instancemanager.events;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEvent;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
|
||||
import org.l2jmobius.gameserver.model.quest.Event;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RabbitsManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
{
|
||||
protected RabbitsManager()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
protected void startEvent()
|
||||
{
|
||||
final Event event = (Event) QuestManager.getInstance().getQuest("Rabbits");
|
||||
if (event != null)
|
||||
{
|
||||
event.eventStart(null);
|
||||
}
|
||||
}
|
||||
|
||||
public static RabbitsManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final RabbitsManager INSTANCE = new RabbitsManager();
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.instancemanager.events;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEvent;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
|
||||
import org.l2jmobius.gameserver.model.quest.Event;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RaceManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
{
|
||||
protected RaceManager()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
protected void startEvent()
|
||||
{
|
||||
final Event event = (Event) QuestManager.getInstance().getQuest("Race");
|
||||
if (event != null)
|
||||
{
|
||||
event.eventStart(null);
|
||||
}
|
||||
}
|
||||
|
||||
public static RaceManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final RaceManager INSTANCE = new RaceManager();
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.l2jmobius.gameserver.instancemanager.events;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEvent;
|
||||
import org.l2jmobius.gameserver.model.eventengine.AbstractEventManager;
|
||||
import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
|
||||
import org.l2jmobius.gameserver.model.quest.Event;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class TeamVsTeamManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
{
|
||||
protected TeamVsTeamManager()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
protected void startEvent()
|
||||
{
|
||||
final Event event = (Event) QuestManager.getInstance().getQuest("TvT");
|
||||
if (event != null)
|
||||
{
|
||||
event.eventStart(null);
|
||||
}
|
||||
}
|
||||
|
||||
public static TeamVsTeamManager getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final TeamVsTeamManager INSTANCE = new TeamVsTeamManager();
|
||||
}
|
||||
}
|
||||
@@ -1022,7 +1022,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
return;
|
||||
}
|
||||
// Events.
|
||||
else if (getActingPlayer().isOnCustomEvent() && target.isPlayable() && (getActingPlayer().getTeam() == target.getActingPlayer().getTeam()))
|
||||
else if (getActingPlayer().isOnEvent() && target.isPlayable() && (getActingPlayer().getTeam() == target.getActingPlayer().getTeam()))
|
||||
{
|
||||
sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return;
|
||||
@@ -5046,15 +5046,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link PlayerInstance}
|
||||
* @return {@code true} if player is on event, {@code false} otherwise.
|
||||
*/
|
||||
public boolean isOnEvent()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link PlayerInstance}
|
||||
* @return the clan id of current character.
|
||||
|
||||
@@ -307,6 +307,11 @@ public abstract class Playable extends Creature
|
||||
|
||||
public abstract void restoreEffects();
|
||||
|
||||
public boolean isOnEvent()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayable()
|
||||
{
|
||||
|
||||
@@ -1131,4 +1131,10 @@ public abstract class Summon extends Playable
|
||||
{
|
||||
return super.isTargetable() && getTemplate().isTargetable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOnEvent()
|
||||
{
|
||||
return (_owner != null) && _owner.isOnEvent();
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user