Partial sync L2jUnity free release Feb 16th 2015.
This commit is contained in:
80
L2J_Mobius_Test/dist/game/config/MentorCoins.xml
vendored
80
L2J_Mobius_Test/dist/game/config/MentorCoins.xml
vendored
@@ -1,44 +1,44 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/MentorCoins.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../data/xsd/MentorCoins.xsd">
|
||||||
<mentee level="10" coins="1" />
|
<mentee level="10" coins="2" />
|
||||||
<mentee level="20" coins="25" />
|
<mentee level="20" coins="25" />
|
||||||
<mentee level="30" coins="30" />
|
<mentee level="30" coins="45" />
|
||||||
<mentee level="40" coins="63" />
|
<mentee level="40" coins="109" />
|
||||||
<mentee level="50" coins="68" />
|
<mentee level="50" coins="175" />
|
||||||
<mentee level="51" coins="16" />
|
<mentee level="51" coins="179" />
|
||||||
<mentee level="52" coins="7" />
|
<mentee level="52" coins="199" />
|
||||||
<mentee level="53" coins="9" />
|
<mentee level="53" coins="221" />
|
||||||
<mentee level="54" coins="11" />
|
<mentee level="54" coins="243" />
|
||||||
<mentee level="55" coins="13" />
|
<mentee level="55" coins="266" />
|
||||||
<mentee level="56" coins="16" />
|
<mentee level="56" coins="290" />
|
||||||
<mentee level="57" coins="19" />
|
<mentee level="57" coins="315" />
|
||||||
<mentee level="58" coins="23" />
|
<mentee level="58" coins="341" />
|
||||||
<mentee level="59" coins="29" />
|
<mentee level="59" coins="367" />
|
||||||
<mentee level="60" coins="37" />
|
<mentee level="60" coins="395" />
|
||||||
<mentee level="61" coins="51" />
|
<mentee level="61" coins="424" />
|
||||||
<mentee level="62" coins="20" />
|
<mentee level="62" coins="432" />
|
||||||
<mentee level="63" coins="24" />
|
<mentee level="63" coins="461" />
|
||||||
<mentee level="64" coins="30" />
|
<mentee level="64" coins="445" />
|
||||||
<mentee level="65" coins="36" />
|
<mentee level="65" coins="473" />
|
||||||
<mentee level="66" coins="44" />
|
<mentee level="66" coins="488" />
|
||||||
<mentee level="67" coins="55" />
|
<mentee level="67" coins="516" />
|
||||||
<mentee level="68" coins="67" />
|
<mentee level="68" coins="544" />
|
||||||
<mentee level="69" coins="84" />
|
<mentee level="69" coins="573" />
|
||||||
<mentee level="70" coins="107" />
|
<mentee level="70" coins="602" />
|
||||||
<mentee level="71" coins="120" />
|
<mentee level="71" coins="561" />
|
||||||
<mentee level="72" coins="92" />
|
<mentee level="72" coins="589" />
|
||||||
<mentee level="73" coins="114" />
|
<mentee level="73" coins="618" />
|
||||||
<mentee level="74" coins="139" />
|
<mentee level="74" coins="647" />
|
||||||
<mentee level="75" coins="172" />
|
<mentee level="75" coins="676" />
|
||||||
<mentee level="76" coins="213" />
|
<mentee level="76" coins="689" />
|
||||||
<mentee level="77" coins="629" />
|
<mentee level="77" coins="488" />
|
||||||
<mentee level="78" coins="322" />
|
<mentee level="78" coins="514" />
|
||||||
<mentee level="79" coins="413" />
|
<mentee level="79" coins="542" />
|
||||||
<mentee level="80" coins="491" />
|
<mentee level="80" coins="576" />
|
||||||
<mentee level="81" coins="663" />
|
<mentee level="81" coins="726" />
|
||||||
<mentee level="82" coins="746" />
|
<mentee level="82" coins="759" />
|
||||||
<mentee level="83" coins="850" />
|
<mentee level="83" coins="793" />
|
||||||
<mentee level="84" coins="987" />
|
<mentee level="84" coins="829" />
|
||||||
<mentee level="85" coins="1149" />
|
<mentee level="85" coins="963" />
|
||||||
<mentee level="86" coins="2015" />
|
<mentee level="86" coins="1" />
|
||||||
</list>
|
</list>
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
<td align=center><button action="bypass -h admin_move_to 183409 114824 -8020" value="Antharas (99)" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
<td align=center><button action="bypass -h admin_move_to 183409 114824 -8020" value="Antharas (99)" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center><button action="bypass -h admin_move_to 16323 213139 -9359" value="Beleth (99)" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
<td align=center><button action="bypass -h admin_move_to -17559 245951 -836" value="Beleth (99)" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||||
<td align=center><button action="bypass -h admin_move_to 213896 -115436 -1644" value="Valakas (99)" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
<td align=center><button action="bypass -h admin_move_to 213896 -115436 -1644" value="Valakas (99)" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@@ -137,8 +137,8 @@ public final class Antharas extends AbstractNpcAI
|
|||||||
addKillId(ANTHARAS, TERASQUE, BEHEMOTH);
|
addKillId(ANTHARAS, TERASQUE, BEHEMOTH);
|
||||||
|
|
||||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANTHARAS);
|
final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANTHARAS);
|
||||||
final int curr_hp = info.getInt("currentHP");
|
final double curr_hp = info.getDouble("currentHP");
|
||||||
final int curr_mp = info.getInt("currentMP");
|
final double curr_mp = info.getDouble("currentMP");
|
||||||
final int loc_x = info.getInt("loc_x");
|
final int loc_x = info.getInt("loc_x");
|
||||||
final int loc_y = info.getInt("loc_y");
|
final int loc_y = info.getInt("loc_y");
|
||||||
final int loc_z = info.getInt("loc_z");
|
final int loc_z = info.getInt("loc_z");
|
||||||
|
@@ -110,8 +110,8 @@ public final class Baium extends AbstractNpcAI
|
|||||||
addSpellFinishedId(BAIUM);
|
addSpellFinishedId(BAIUM);
|
||||||
|
|
||||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(BAIUM);
|
final StatsSet info = GrandBossManager.getInstance().getStatsSet(BAIUM);
|
||||||
final int curr_hp = info.getInt("currentHP");
|
final double curr_hp = info.getDouble("currentHP");
|
||||||
final int curr_mp = info.getInt("currentMP");
|
final double curr_mp = info.getDouble("currentMP");
|
||||||
final int loc_x = info.getInt("loc_x");
|
final int loc_x = info.getInt("loc_x");
|
||||||
final int loc_y = info.getInt("loc_y");
|
final int loc_y = info.getInt("loc_y");
|
||||||
final int loc_z = info.getInt("loc_z");
|
final int loc_z = info.getInt("loc_z");
|
||||||
|
@@ -88,8 +88,8 @@ public final class Core extends AbstractNpcAI
|
|||||||
final int loc_y = info.getInt("loc_y");
|
final int loc_y = info.getInt("loc_y");
|
||||||
final int loc_z = info.getInt("loc_z");
|
final int loc_z = info.getInt("loc_z");
|
||||||
final int heading = info.getInt("heading");
|
final int heading = info.getInt("heading");
|
||||||
final int hp = info.getInt("currentHP");
|
final double hp = info.getDouble("currentHP");
|
||||||
final int mp = info.getInt("currentMP");
|
final double mp = info.getDouble("currentMP");
|
||||||
final L2GrandBossInstance core = (L2GrandBossInstance) addSpawn(CORE, loc_x, loc_y, loc_z, heading, false, 0);
|
final L2GrandBossInstance core = (L2GrandBossInstance) addSpawn(CORE, loc_x, loc_y, loc_z, heading, false, 0);
|
||||||
core.setCurrentHpMp(hp, mp);
|
core.setCurrentHpMp(hp, mp);
|
||||||
spawnBoss(core);
|
spawnBoss(core);
|
||||||
|
@@ -127,8 +127,8 @@ public final class Orfen extends AbstractNpcAI
|
|||||||
final int loc_y = info.getInt("loc_y");
|
final int loc_y = info.getInt("loc_y");
|
||||||
final int loc_z = info.getInt("loc_z");
|
final int loc_z = info.getInt("loc_z");
|
||||||
final int heading = info.getInt("heading");
|
final int heading = info.getInt("heading");
|
||||||
final int hp = info.getInt("currentHP");
|
double hp = info.getDouble("currentHP");
|
||||||
final int mp = info.getInt("currentMP");
|
double mp = info.getDouble("currentMP");
|
||||||
final L2GrandBossInstance orfen = (L2GrandBossInstance) addSpawn(ORFEN, loc_x, loc_y, loc_z, heading, false, 0);
|
final L2GrandBossInstance orfen = (L2GrandBossInstance) addSpawn(ORFEN, loc_x, loc_y, loc_z, heading, false, 0);
|
||||||
orfen.setCurrentHpMp(hp, mp);
|
orfen.setCurrentHpMp(hp, mp);
|
||||||
spawnBoss(orfen);
|
spawnBoss(orfen);
|
||||||
|
@@ -118,8 +118,8 @@ public final class QueenAnt extends AbstractNpcAI
|
|||||||
final int loc_y = QUEEN_Y;
|
final int loc_y = QUEEN_Y;
|
||||||
final int loc_z = QUEEN_Z;
|
final int loc_z = QUEEN_Z;
|
||||||
final int heading = info.getInt("heading");
|
final int heading = info.getInt("heading");
|
||||||
final int hp = info.getInt("currentHP");
|
double hp = info.getDouble("currentHP");
|
||||||
final int mp = info.getInt("currentMP");
|
double mp = info.getDouble("currentMP");
|
||||||
final L2GrandBossInstance queen = (L2GrandBossInstance) addSpawn(QUEEN, loc_x, loc_y, loc_z, heading, false, 0);
|
final L2GrandBossInstance queen = (L2GrandBossInstance) addSpawn(QUEEN, loc_x, loc_y, loc_z, heading, false, 0);
|
||||||
queen.setCurrentHpMp(hp, mp);
|
queen.setCurrentHpMp(hp, mp);
|
||||||
spawnBoss(queen);
|
spawnBoss(queen);
|
||||||
|
@@ -152,8 +152,8 @@ public final class Valakas extends AbstractNpcAI
|
|||||||
final int loc_y = info.getInt("loc_y");
|
final int loc_y = info.getInt("loc_y");
|
||||||
final int loc_z = info.getInt("loc_z");
|
final int loc_z = info.getInt("loc_z");
|
||||||
final int heading = info.getInt("heading");
|
final int heading = info.getInt("heading");
|
||||||
final int hp = info.getInt("currentHP");
|
final double hp = info.getDouble("currentHP");
|
||||||
final int mp = info.getInt("currentMP");
|
final double mp = info.getDouble("currentMP");
|
||||||
|
|
||||||
final L2Npc valakas = addSpawn(VALAKAS, loc_x, loc_y, loc_z, heading, false, 0);
|
final L2Npc valakas = addSpawn(VALAKAS, loc_x, loc_y, loc_z, heading, false, 0);
|
||||||
GrandBossManager.getInstance().addBoss((L2GrandBossInstance) valakas);
|
GrandBossManager.getInstance().addBoss((L2GrandBossInstance) valakas);
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
<html><body>Arena Manager:<br>
|
<html><body>Arena Manager:<br>
|
||||||
Way to go! Hooray! Hooray!!!<br>
|
Way to go! Hooray! Hooray!!!<br>
|
||||||
(Be careful! CP/HP will not get recovered inside the fence.)<br><br>
|
(Be careful! CP/HP will not get recovered inside the fence.)<br><br>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager CPrecovery">CP Recovery : 1,000 Adena</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager CPrecovery">CP Recovery: 1,000 Adena</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager HPrecovery">HP Recovery : 1,000 Adena</Button><br>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager HPrecovery">HP Recovery: 1,000 Adena</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager Buff">Buff for Battle Ground : 2,000 Adena</Button><br>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager Buff">Buff for Battle Ground: 2,000 Adena</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_DepositP">Private Warehouse: Deposit an item.</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_DepositP">Private Warehouse: Deposit an item.</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_WithdrawP">Private Warehouse: Withdraw an item.</Button><br>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_WithdrawP">Private Warehouse: Withdraw an item.</Button>
|
||||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||||
</body></html>
|
</body></html>
|
@@ -1,9 +1,10 @@
|
|||||||
<html><body>Arena Director:<br>
|
<html><body>Arena Director:<br>
|
||||||
Play the game according to the rules! The loser should be silent! What? Unfair? Then, why don't you hold your tongue and give it another try!<br><br>
|
Play the game according to the rules! The loser should be silent!<br>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager CPrecovery">CP Recovery : 1,000 Adena</Button>
|
What? Unfair? Then, why don't you hold your tongue and give it another try!<br><br>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager HPrecovery">HP Recovery : 1,000 Adena</Button><br>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager CPrecovery">CP Recovery: 1,000 Adena</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager Buff">Buff for Battle Ground : 2,000 Adena</Button><br>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager HPrecovery">HP Recovery: 1,000 Adena</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ArenaManager Buff">Buff for Arena: 2,000 Adena</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_DepositP">Private Warehouse: Deposit an item.</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_DepositP">Private Warehouse: Deposit an item.</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_WithdrawP">Private Warehouse: Withdraw an item.</Button><br>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_WithdrawP">Private Warehouse: Withdraw an item.</Button>
|
||||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||||
</body></html>
|
</body></html>
|
@@ -20,6 +20,7 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
@@ -61,6 +62,8 @@ import ai.AbstractNpcAI;
|
|||||||
*/
|
*/
|
||||||
public final class MentorGuide extends AbstractNpcAI implements IXmlReader
|
public final class MentorGuide extends AbstractNpcAI implements IXmlReader
|
||||||
{
|
{
|
||||||
|
private static final Logger LOGGER = Logger.getLogger(MentorGuide.class.getName());
|
||||||
|
|
||||||
// NPCs
|
// NPCs
|
||||||
private static final int MENTOR_GUIDE = 33587;
|
private static final int MENTOR_GUIDE = 33587;
|
||||||
|
|
||||||
|
@@ -66,6 +66,7 @@ public final class Raina extends AbstractNpcAI
|
|||||||
private static final int RAINA = 33491;
|
private static final int RAINA = 33491;
|
||||||
// Items
|
// Items
|
||||||
private static final int SUBCLASS_CERTIFICATE = 30433;
|
private static final int SUBCLASS_CERTIFICATE = 30433;
|
||||||
|
private static final int CHAOS_POMANDER = 37375;
|
||||||
private static final int ABELIUS_POWER = 32264;
|
private static final int ABELIUS_POWER = 32264;
|
||||||
private static final int SAPYROS_POWER = 32265;
|
private static final int SAPYROS_POWER = 32265;
|
||||||
private static final int ASHAGEN_POWER = 32266;
|
private static final int ASHAGEN_POWER = 32266;
|
||||||
@@ -593,6 +594,7 @@ public final class Raina extends AbstractNpcAI
|
|||||||
player.sendPacket(new AcquireSkillList(player));
|
player.sendPacket(new AcquireSkillList(player));
|
||||||
player.sendSkillList();
|
player.sendSkillList();
|
||||||
addPowerItem(player);
|
addPowerItem(player);
|
||||||
|
giveItems(player, CHAOS_POMANDER, 2);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
<html><body>Subclass/Dual Class Master Raina:<br><br>
|
<html><body>Subclass/Dual Class Master Raina:<br>
|
||||||
So, into which class would you like to Reawaken?<br>
|
Which class would you like as your Dual Class?<br1>
|
||||||
Remember that if you proceed, you will go back to <font color="LEVEL">Lv. 85, and all your skills will be reset.</font><br>
|
<font color="LEVEL">(A Level 85 Dual Class will be added, and the 3rd transfer skills provided will be based on Human class.)</font><br>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_SIGEL_GROUP">"I will change to the Knight class."</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_SIGEL_GROUP">"I want choose a the Sigel Knight class."</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_TYRR_GROUP">"I will change to the Warrior class."</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_TYRR_GROUP">"I want choose a the Tyrr Warrior class."</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_OTHELL_GROUP">"I will change to the Rogue class."</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_OTHELL_GROUP">"I want choose a the Othell Rogue class."</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_YUL_GROUP">"I will change to the Archer class."</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_YUL_GROUP">"I want choose a the Yul Archer class."</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_FEOH_GROUP">"I will change to the Wizard class."</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_FEOH_GROUP">"I want choose a the Feoh Wizard class."</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_ISS_GROUP">"I will change to the Enchanter class."</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_ISS_GROUP">"I want choose a the Iss Enchanter class."</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_WYNN_GROUP">"I will change to the Summoner class."</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_WYNN_GROUP">"I want choose a the Wynn Summoner class."</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_AEORE_GROUP">"I will change to the Healer class."</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina addDualClass_AEORE_GROUP">"I want choose a the Aeore Healer class."</Button>
|
||||||
</body></html>
|
</body></html>
|
@@ -29,7 +29,7 @@ public class L2DoorInstanceActionShift implements IActionShiftHandler
|
|||||||
@Override
|
@Override
|
||||||
public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
|
public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
|
||||||
{
|
{
|
||||||
if (activeChar.getAccessLevel().isGm())
|
if (activeChar.isGM())
|
||||||
{
|
{
|
||||||
activeChar.setTarget(target);
|
activeChar.setTarget(target);
|
||||||
final L2DoorInstance door = (L2DoorInstance) target;
|
final L2DoorInstance door = (L2DoorInstance) target;
|
||||||
|
@@ -22,16 +22,16 @@ import com.l2jmobius.gameserver.model.L2Object;
|
|||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
|
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class L2ItemInstanceActionShift implements IActionShiftHandler
|
public class L2ItemInstanceActionShift implements IActionShiftHandler
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
|
public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
|
||||||
{
|
{
|
||||||
if (activeChar.getAccessLevel().isGm())
|
if (activeChar.isGM())
|
||||||
{
|
{
|
||||||
activeChar.sendPacket(new NpcHtmlMessage(StringUtil.concat("<html><body><center><font color=\"LEVEL\">Item Info</font></center><br><table border=0>", "<tr><td>Object ID: </td><td>", String.valueOf(target.getObjectId()), "</td></tr><tr><td>Item ID: </td><td>", String.valueOf(target.getId()), "</td></tr><tr><td>Owner ID: </td><td>", String.valueOf(((L2ItemInstance) target).getOwnerId()), "</td></tr><tr><td>Location: </td><td>", String.valueOf(((L2ItemInstance) target).getLocation()), "</td></tr><tr><td><br></td></tr><tr><td>Class: </td><td>", target.getClass().getSimpleName(), "</td></tr></table></body></html>")));
|
final NpcHtmlMessage html = new NpcHtmlMessage("<html><body><center><font color=\"LEVEL\">Item Info</font></center><br><table border=0><tr><td>Object ID: </td><td>" + target.getObjectId() + "</td></tr><tr><td>Item ID: </td><td>" + target.getId() + "</td></tr><tr><td>Owner ID: </td><td>" + ((L2ItemInstance) target).getOwnerId() + "</td></tr><tr><td>Location: </td><td>" + ((L2ItemInstance) target).getLocation() + "</td></tr><tr><td><br></td></tr><tr><td>Class: </td><td>" + target.getClass().getSimpleName() + "</td></tr></table></body></html>");
|
||||||
|
activeChar.sendPacket(html);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -57,7 +57,7 @@ public class L2NpcActionShift implements IActionShiftHandler
|
|||||||
public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
|
public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
|
||||||
{
|
{
|
||||||
// Check if the L2PcInstance is a GM
|
// Check if the L2PcInstance is a GM
|
||||||
if (activeChar.getAccessLevel().isGm())
|
if (activeChar.isGM())
|
||||||
{
|
{
|
||||||
// Set the target of the L2PcInstance activeChar
|
// Set the target of the L2PcInstance activeChar
|
||||||
activeChar.setTarget(target);
|
activeChar.setTarget(target);
|
||||||
|
@@ -23,18 +23,19 @@ import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
|||||||
import com.l2jmobius.gameserver.model.actor.instance.L2StaticObjectInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2StaticObjectInstance;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.StaticObject;
|
import com.l2jmobius.gameserver.network.serverpackets.StaticObject;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class L2StaticObjectInstanceActionShift implements IActionShiftHandler
|
public class L2StaticObjectInstanceActionShift implements IActionShiftHandler
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
|
public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
|
||||||
{
|
{
|
||||||
if (activeChar.getAccessLevel().isGm())
|
if (activeChar.isGM())
|
||||||
{
|
{
|
||||||
activeChar.setTarget(target);
|
activeChar.setTarget(target);
|
||||||
activeChar.sendPacket(new StaticObject((L2StaticObjectInstance) target));
|
activeChar.sendPacket(new StaticObject((L2StaticObjectInstance) target));
|
||||||
activeChar.sendPacket(new NpcHtmlMessage(StringUtil.concat("<html><body><center><font color=\"LEVEL\">Static Object Info</font></center><br><table border=0><tr><td>Coords X,Y,Z: </td><td>", String.valueOf(target.getX()), ", ", String.valueOf(target.getY()), ", ", String.valueOf(target.getZ()), "</td></tr><tr><td>Object ID: </td><td>", String.valueOf(target.getObjectId()), "</td></tr><tr><td>Static Object ID: </td><td>", String.valueOf(target.getId()), "</td></tr><tr><td>Mesh Index: </td><td>", String.valueOf(((L2StaticObjectInstance) target).getMeshIndex()), "</td></tr><tr><td><br></td></tr><tr><td>Class: </td><td>", target.getClass().getSimpleName(), "</td></tr></table></body></html>")));
|
|
||||||
|
final NpcHtmlMessage html = new NpcHtmlMessage("<html><body><center><font color=\"LEVEL\">Static Object Info</font></center><br><table border=0><tr><td>Coords X,Y,Z: </td><td>" + target.getX() + ", " + target.getY() + ", " + target.getZ() + "</td></tr><tr><td>Object ID: </td><td>" + target.getObjectId() + "</td></tr><tr><td>Static Object ID: </td><td>" + target.getId() + "</td></tr><tr><td>Mesh Index: </td><td>" + ((L2StaticObjectInstance) target).getMeshIndex() + "</td></tr><tr><td><br></td></tr><tr><td>Class: </td><td>" + target.getClass().getSimpleName() + "</td></tr></table></body></html>");
|
||||||
|
activeChar.sendPacket(html);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -36,7 +36,6 @@ import com.l2jmobius.gameserver.network.SystemMessageId;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime;
|
import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime;
|
||||||
import com.l2jmobius.gameserver.util.GMAudit;
|
import com.l2jmobius.gameserver.util.GMAudit;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class AdminBuffs implements IAdminCommandHandler
|
public class AdminBuffs implements IAdminCommandHandler
|
||||||
{
|
{
|
||||||
@@ -252,9 +251,13 @@ public class AdminBuffs implements IAdminCommandHandler
|
|||||||
max++;
|
max++;
|
||||||
}
|
}
|
||||||
|
|
||||||
final StringBuilder html = StringUtil.startAppend(500 + (effects.size() * 200), "<html><table width=\"100%\"><tr><td width=45><button value=\"Main\" action=\"bypass -h admin_admin\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center><font color=\"LEVEL\">Effects of ", target.getName(), "</font></td><td width=45><button value=\"Back\" action=\"bypass -h admin_current_player\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><table width=\"100%\"><tr><td width=200>Skill</td><td width=30>Rem. Time</td><td width=70>Action</td></tr>");
|
final StringBuilder html = new StringBuilder(500 + (effects.size() * 200));
|
||||||
final int start = (page - 1) * PAGE_LIMIT;
|
html.append("<html><table width=\"100%\"><tr><td width=45><button value=\"Main\" action=\"bypass -h admin_admin\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center><font color=\"LEVEL\">Effects of ");
|
||||||
final int end = Math.min(((page - 1) * PAGE_LIMIT) + PAGE_LIMIT, effects.size());
|
html.append(target.getName());
|
||||||
|
html.append("</font></td><td width=45><button value=\"Back\" action=\"bypass -h admin_current_player\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><table width=\"100%\"><tr><td width=200>Skill</td><td width=30>Rem. Time</td><td width=70>Action</td></tr>");
|
||||||
|
|
||||||
|
int start = ((page - 1) * PAGE_LIMIT);
|
||||||
|
int end = Math.min(((page - 1) * PAGE_LIMIT) + PAGE_LIMIT, effects.size());
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (BuffInfo info : effects)
|
for (BuffInfo info : effects)
|
||||||
{
|
{
|
||||||
@@ -263,7 +266,22 @@ public class AdminBuffs implements IAdminCommandHandler
|
|||||||
final Skill skill = info.getSkill();
|
final Skill skill = info.getSkill();
|
||||||
for (AbstractEffect effect : info.getEffects())
|
for (AbstractEffect effect : info.getEffects())
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<tr><td>", (!info.isInUse() ? FONT_RED1 : "") + skill.getName(), " Lv ", String.valueOf(skill.getLevel()), " (", effect.getClass().getSimpleName(), ")" + (!info.isInUse() ? FONT_RED2 : ""), "</td><td>", skill.isToggle() ? "T (" + info.getTickCount(effect) + ")" : skill.isPassive() ? "P" : info.getTime() + "s", "</td><td><button value=\"X\" action=\"bypass -h admin_stopbuff ", Integer.toString(target.getObjectId()), " ", String.valueOf(skill.getId()), "\" width=30 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
html.append("<tr><td>");
|
||||||
|
html.append(!info.isInUse() ? FONT_RED1 : "");
|
||||||
|
html.append(skill.getName());
|
||||||
|
html.append(" Lv ");
|
||||||
|
html.append(skill.getLevel());
|
||||||
|
html.append(" (");
|
||||||
|
html.append(effect.getClass().getSimpleName());
|
||||||
|
html.append(")");
|
||||||
|
html.append(!info.isInUse() ? FONT_RED2 : "");
|
||||||
|
html.append("</td><td>");
|
||||||
|
html.append(skill.isToggle() ? "T (" + info.getTickCount(effect) + ")" : skill.isPassive() ? "P" : info.getTime() + "s");
|
||||||
|
html.append("</td><td><button value=\"X\" action=\"bypass -h admin_stopbuff ");
|
||||||
|
html.append(target.getObjectId());
|
||||||
|
html.append(" ");
|
||||||
|
html.append(skill.getId());
|
||||||
|
html.append("\" width=30 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
@@ -294,17 +312,29 @@ public class AdminBuffs implements IAdminCommandHandler
|
|||||||
html.append("</tr></table>");
|
html.append("</tr></table>");
|
||||||
|
|
||||||
// Buttons
|
// Buttons
|
||||||
StringUtil.append(html, "<br><center><button value=\"Refresh\" action=\"bypass -h admin_getbuffs", passive ? "_ps " : " ", target.getName(), "\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
|
html.append("<br><center><button value=\"Refresh\" action=\"bypass -h admin_getbuffs");
|
||||||
StringUtil.append(html, "<button value=\"Remove All\" action=\"bypass -h admin_stopallbuffs ", Integer.toString(target.getObjectId()), "\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><br>");
|
html.append(passive ? "_ps " : " ");
|
||||||
|
html.append(target.getName());
|
||||||
|
html.append("\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
|
||||||
|
html.append("<button value=\"Remove All\" action=\"bypass -h admin_stopallbuffs ");
|
||||||
|
html.append(target.getObjectId());
|
||||||
|
html.append("\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><br>");
|
||||||
// Legend
|
// Legend
|
||||||
if (!passive)
|
if (!passive)
|
||||||
{
|
{
|
||||||
StringUtil.append(html, FONT_RED1, "Inactive buffs: ", String.valueOf(target.getEffectList().getHiddenBuffsCount()), FONT_RED2, "<br>");
|
html.append(FONT_RED1);
|
||||||
|
html.append("Inactive buffs: ");
|
||||||
|
html.append(target.getEffectList().getHiddenBuffsCount());
|
||||||
|
html.append(FONT_RED2);
|
||||||
|
html.append("<br>");
|
||||||
}
|
}
|
||||||
StringUtil.append(html, "Total", passive ? " passive" : "", " buff count: ", String.valueOf(effects.size()));
|
html.append("Total");
|
||||||
|
html.append(passive ? " passive" : "");
|
||||||
|
html.append(" buff count: ");
|
||||||
|
html.append(effects.size());
|
||||||
if ((target.getEffectList().getAllBlockedBuffSlots() != null) && !target.getEffectList().getAllBlockedBuffSlots().isEmpty())
|
if ((target.getEffectList().getAllBlockedBuffSlots() != null) && !target.getEffectList().getAllBlockedBuffSlots().isEmpty())
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<br>Blocked buff slots: ");
|
html.append("<br>Blocked buff slots: ");
|
||||||
String slots = "";
|
String slots = "";
|
||||||
for (AbnormalType slot : target.getEffectList().getAllBlockedBuffSlots())
|
for (AbnormalType slot : target.getEffectList().getAllBlockedBuffSlots())
|
||||||
{
|
{
|
||||||
@@ -313,10 +343,10 @@ public class AdminBuffs implements IAdminCommandHandler
|
|||||||
|
|
||||||
if (!slots.isEmpty() && (slots.length() > 3))
|
if (!slots.isEmpty() && (slots.length() > 3))
|
||||||
{
|
{
|
||||||
StringUtil.append(html, slots.substring(0, slots.length() - 2));
|
html.append(slots.substring(0, slots.length() - 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StringUtil.append(html, "</html>");
|
html.append("</html>");
|
||||||
// Send the packet
|
// Send the packet
|
||||||
activeChar.sendPacket(new NpcHtmlMessage(html.toString()));
|
activeChar.sendPacket(new NpcHtmlMessage(html.toString()));
|
||||||
|
|
||||||
|
@@ -31,7 +31,6 @@ import com.l2jmobius.gameserver.model.zone.type.L2ClanHallZone;
|
|||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.util.Util;
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles Clan Hall commands.
|
* This class handles Clan Hall commands.
|
||||||
@@ -195,7 +194,11 @@ public class AdminClanHall implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
if (hall != null)
|
if (hall != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(cList, "<td fixwidth=90><a action=\"bypass -h admin_chsiege_siegablehall ", String.valueOf(hall.getId()), "\">", hall.getName(), "</a></td>");
|
cList.append("<td fixwidth=90><a action=\"bypass -h admin_chsiege_siegablehall ");
|
||||||
|
cList.append(hall.getId());
|
||||||
|
cList.append("\">");
|
||||||
|
cList.append(hall.getName());
|
||||||
|
cList.append("</a></td>");
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (i > 1)
|
if (i > 1)
|
||||||
@@ -211,7 +214,11 @@ public class AdminClanHall implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
if (clanhall != null)
|
if (clanhall != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(cList, "<td fixwidth=134><a action=\"bypass -h admin_clanhall ", String.valueOf(clanhall.getId()), "\">", clanhall.getName(), "</a></td>");
|
cList.append("<td fixwidth=134><a action=\"bypass -h admin_clanhall ");
|
||||||
|
cList.append(clanhall.getId());
|
||||||
|
cList.append("\">");
|
||||||
|
cList.append(clanhall.getName());
|
||||||
|
cList.append("</a></td>");
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (i > 1)
|
if (i > 1)
|
||||||
@@ -227,7 +234,11 @@ public class AdminClanHall implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
if (clanhall != null)
|
if (clanhall != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(cList, "<td fixwidth=134><a action=\"bypass -h admin_clanhall ", String.valueOf(clanhall.getId()), "\">", clanhall.getName(), "</a></td>");
|
cList.append("<td fixwidth=134><a action=\"bypass -h admin_clanhall ");
|
||||||
|
cList.append(clanhall.getId());
|
||||||
|
cList.append("\">");
|
||||||
|
cList.append(clanhall.getName());
|
||||||
|
cList.append("</a></td>");
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (i > 1)
|
if (i > 1)
|
||||||
|
@@ -26,7 +26,6 @@ import com.l2jmobius.gameserver.model.L2Object;
|
|||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles following admin commands: - cw_info = displays cursed weapon status - cw_remove = removes a cursed weapon from the world, item id or name must be provided - cw_add = adds a cursed weapon into the world, item id or name must be provided. Target will be the weilder - cw_goto =
|
* This class handles following admin commands: - cw_info = displays cursed weapon status - cw_remove = removes a cursed weapon from the world, item id or name must be provided - cw_add = adds a cursed weapon into the world, item id or name must be provided. Target will be the weilder - cw_goto =
|
||||||
@@ -95,20 +94,51 @@ public class AdminCursedWeapons implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
itemId = cw.getItemId();
|
itemId = cw.getItemId();
|
||||||
|
|
||||||
StringUtil.append(replyMSG, "<table width=270><tr><td>Name:</td><td>", cw.getName(), "</td></tr>");
|
replyMSG.append("<table width=270><tr><td>Name:</td><td>");
|
||||||
|
replyMSG.append(cw.getName());
|
||||||
|
replyMSG.append("</td></tr>");
|
||||||
|
|
||||||
if (cw.isActivated())
|
if (cw.isActivated())
|
||||||
{
|
{
|
||||||
final L2PcInstance pl = cw.getPlayer();
|
L2PcInstance pl = cw.getPlayer();
|
||||||
StringUtil.append(replyMSG, "<tr><td>Weilder:</td><td>", pl == null ? "null" : pl.getName(), "</td></tr><tr><td>Karma:</td><td>", String.valueOf(cw.getPlayerKarma()), "</td></tr><tr><td>Kills:</td><td>", String.valueOf(cw.getPlayerPkKills()), "/", String.valueOf(cw.getNbKills()), "</td></tr><tr><td>Time remaining:</td><td>", String.valueOf(cw.getTimeLeft() / 60000), " min.</td></tr><tr><td><button value=\"Remove\" action=\"bypass -h admin_cw_remove ", String.valueOf(itemId), "\" width=73 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><button value=\"Go\" action=\"bypass -h admin_cw_goto ", String.valueOf(itemId), "\" width=73 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
replyMSG.append("<tr><td>Weilder:</td><td>");
|
||||||
|
replyMSG.append(pl == null ? "null" : pl.getName());
|
||||||
|
replyMSG.append("</td></tr>");
|
||||||
|
replyMSG.append("<tr><td>Karma:</td><td>");
|
||||||
|
replyMSG.append(cw.getPlayerKarma());
|
||||||
|
replyMSG.append("</td></tr>");
|
||||||
|
replyMSG.append("<tr><td>Kills:</td><td>");
|
||||||
|
replyMSG.append(cw.getPlayerPkKills());
|
||||||
|
replyMSG.append("/");
|
||||||
|
replyMSG.append(cw.getNbKills());
|
||||||
|
replyMSG.append("</td></tr><tr><td>Time remaining:</td><td>");
|
||||||
|
replyMSG.append(cw.getTimeLeft() / 60000);
|
||||||
|
replyMSG.append(" min.</td></tr>");
|
||||||
|
replyMSG.append("<tr><td><button value=\"Remove\" action=\"bypass -h admin_cw_remove ");
|
||||||
|
replyMSG.append(itemId);
|
||||||
|
replyMSG.append("\" width=73 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
replyMSG.append("<td><button value=\"Go\" action=\"bypass -h admin_cw_goto ");
|
||||||
|
replyMSG.append(itemId);
|
||||||
|
replyMSG.append("\" width=73 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||||
}
|
}
|
||||||
else if (cw.isDropped())
|
else if (cw.isDropped())
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<tr><td>Position:</td><td>Lying on the ground</td></tr><tr><td>Time remaining:</td><td>", String.valueOf(cw.getTimeLeft() / 60000), " min.</td></tr><tr><td>Kills:</td><td>", String.valueOf(cw.getNbKills()), "</td></tr><tr><td><button value=\"Remove\" action=\"bypass -h admin_cw_remove ", String.valueOf(itemId), "\" width=73 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><button value=\"Go\" action=\"bypass -h admin_cw_goto ", String.valueOf(itemId), "\" width=73 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
replyMSG.append("<tr><td>Position:</td><td>Lying on the ground</td></tr><tr><td>Time remaining:</td><td>");
|
||||||
|
replyMSG.append(cw.getTimeLeft() / 60000);
|
||||||
|
replyMSG.append(" min.</td></tr><tr><td>Kills:</td><td>");
|
||||||
|
replyMSG.append(cw.getNbKills());
|
||||||
|
replyMSG.append("</td></tr><tr><td><button value=\"Remove\" action=\"bypass -h admin_cw_remove ");
|
||||||
|
replyMSG.append(itemId);
|
||||||
|
replyMSG.append("\" width=73 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
replyMSG.append("<td><button value=\"Go\" action=\"bypass -h admin_cw_goto ");
|
||||||
|
replyMSG.append(itemId);
|
||||||
|
replyMSG.append("\" width=73 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<tr><td>Position:</td><td>Doesn't exist.</td></tr><tr><td><button value=\"Give to Target\" action=\"bypass -h admin_cw_add ", String.valueOf(itemId), "\" width=130 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td></td></tr>");
|
replyMSG.append("<tr><td>Position:</td><td>Doesn't exist.</td></tr><tr><td><button value=\"Give to Target\" action=\"bypass -h admin_cw_add ");
|
||||||
|
replyMSG.append(itemId);
|
||||||
|
replyMSG.append("\" width=130 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td></td></tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
replyMSG.append("</table><br>");
|
replyMSG.append("</table><br>");
|
||||||
|
@@ -24,6 +24,7 @@ import java.util.Comparator;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.StringJoiner;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@@ -59,7 +60,6 @@ import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
|
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
|
||||||
import com.l2jmobius.gameserver.util.HtmlUtil;
|
import com.l2jmobius.gameserver.util.HtmlUtil;
|
||||||
import com.l2jmobius.gameserver.util.Util;
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EditChar admin command implementation.
|
* EditChar admin command implementation.
|
||||||
@@ -1087,7 +1087,15 @@ public class AdminEditChar implements IAdminCommandHandler
|
|||||||
if (name.toLowerCase().contains(CharacterToFind.toLowerCase()))
|
if (name.toLowerCase().contains(CharacterToFind.toLowerCase()))
|
||||||
{
|
{
|
||||||
CharactersFound = CharactersFound + 1;
|
CharactersFound = CharactersFound + 1;
|
||||||
StringUtil.append(replyMSG, "<tr><td width=80><a action=\"bypass -h admin_character_info ", name, "\">", name, "</a></td><td width=110>", ClassListData.getInstance().getClass(player.getClassId()).getClientCode(), "</td><td width=40>", String.valueOf(player.getLevel()), "</td></tr>");
|
replyMSG.append("<tr><td width=80><a action=\"bypass -h admin_character_info ");
|
||||||
|
replyMSG.append(name);
|
||||||
|
replyMSG.append("\">");
|
||||||
|
replyMSG.append(name);
|
||||||
|
replyMSG.append("</a></td><td width=110>");
|
||||||
|
replyMSG.append(ClassListData.getInstance().getClass(player.getClassId()).getClientCode());
|
||||||
|
replyMSG.append("</td><td width=40>");
|
||||||
|
replyMSG.append(player.getLevel());
|
||||||
|
replyMSG.append("</td></tr>");
|
||||||
}
|
}
|
||||||
if (CharactersFound > 20)
|
if (CharactersFound > 20)
|
||||||
{
|
{
|
||||||
@@ -1176,7 +1184,15 @@ public class AdminEditChar implements IAdminCommandHandler
|
|||||||
|
|
||||||
name = player.getName();
|
name = player.getName();
|
||||||
CharactersFound = CharactersFound + 1;
|
CharactersFound = CharactersFound + 1;
|
||||||
StringUtil.append(replyMSG, "<tr><td width=80><a action=\"bypass -h admin_character_info ", name, "\">", name, "</a></td><td width=110>", ClassListData.getInstance().getClass(player.getClassId()).getClientCode(), "</td><td width=40>", String.valueOf(player.getLevel()), "</td></tr>");
|
replyMSG.append("<tr><td width=80><a action=\"bypass -h admin_character_info ");
|
||||||
|
replyMSG.append(name);
|
||||||
|
replyMSG.append("\">");
|
||||||
|
replyMSG.append(name);
|
||||||
|
replyMSG.append("</a></td><td width=110>");
|
||||||
|
replyMSG.append(ClassListData.getInstance().getClass(player.getClassId()).getClientCode());
|
||||||
|
replyMSG.append("</td><td width=40>");
|
||||||
|
replyMSG.append(player.getLevel());
|
||||||
|
replyMSG.append("</td></tr>");
|
||||||
|
|
||||||
if (CharactersFound > 20)
|
if (CharactersFound > 20)
|
||||||
{
|
{
|
||||||
@@ -1224,8 +1240,8 @@ public class AdminEditChar implements IAdminCommandHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
final Map<Integer, String> chars = player.getAccountChars();
|
final Map<Integer, String> chars = player.getAccountChars();
|
||||||
final StringBuilder replyMSG = new StringBuilder(chars.size() * 20);
|
final StringJoiner replyMSG = new StringJoiner("<br1>");
|
||||||
chars.values().stream().forEachOrdered(name -> StringUtil.append(replyMSG, name, "<br1>"));
|
chars.values().stream().forEachOrdered(replyMSG::add);
|
||||||
|
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
adminReply.setFile(activeChar.getHtmlPrefix(), "html/admin/accountinfo.htm");
|
adminReply.setFile(activeChar.getHtmlPrefix(), "html/admin/accountinfo.htm");
|
||||||
@@ -1281,7 +1297,7 @@ public class AdminEditChar implements IAdminCommandHandler
|
|||||||
final StringBuilder results = new StringBuilder();
|
final StringBuilder results = new StringBuilder();
|
||||||
for (String dualboxIP : keys)
|
for (String dualboxIP : keys)
|
||||||
{
|
{
|
||||||
StringUtil.append(results, "<a action=\"bypass -h admin_find_ip " + dualboxIP + "\">" + dualboxIP + " (" + dualboxIPs.get(dualboxIP) + ")</a><br1>");
|
results.append("<a action=\"bypass -h admin_find_ip " + dualboxIP + "\">" + dualboxIP + " (" + dualboxIPs.get(dualboxIP) + ")</a><br1>");
|
||||||
}
|
}
|
||||||
|
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
@@ -1333,7 +1349,7 @@ public class AdminEditChar implements IAdminCommandHandler
|
|||||||
final StringBuilder results = new StringBuilder();
|
final StringBuilder results = new StringBuilder();
|
||||||
for (IpPack dualboxIP : keys)
|
for (IpPack dualboxIP : keys)
|
||||||
{
|
{
|
||||||
StringUtil.append(results, "<a action=\"bypass -h admin_find_ip " + dualboxIP.ip + "\">" + dualboxIP.ip + " (" + dualboxIPs.get(dualboxIP) + ")</a><br1>");
|
results.append("<a action=\"bypass -h admin_find_ip " + dualboxIP.ip + "\">" + dualboxIP.ip + " (" + dualboxIPs.get(dualboxIP) + ")</a><br1>");
|
||||||
}
|
}
|
||||||
|
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
|
@@ -38,7 +38,6 @@ import com.l2jmobius.gameserver.network.serverpackets.PlaySound;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
|
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
|
||||||
import com.l2jmobius.gameserver.util.Broadcast;
|
import com.l2jmobius.gameserver.util.Broadcast;
|
||||||
import com.l2jmobius.util.Rnd;
|
import com.l2jmobius.util.Rnd;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles following admin commands: - admin = shows menu
|
* This class handles following admin commands: - admin = shows menu
|
||||||
@@ -221,7 +220,7 @@ public class AdminEventEngine implements IAdminCommandHandler
|
|||||||
|
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
|
|
||||||
final String replyMSG = StringUtil.concat("<html><title>[ L2J EVENT ENGINE ]</title><body><br>", "<center>The event <font color=\"LEVEL\">", L2Event._eventName, "</font> has been announced, now you can type //event_panel to see the event panel control</center><br>", "</body></html>");
|
final String replyMSG = "<html><title>[ L2J EVENT ENGINE ]</title><body><br><center>The event <font color=\"LEVEL\">" + L2Event._eventName + "</font> has been announced, now you can type //event_panel to see the event panel control</center><br></body></html>";
|
||||||
adminReply.setHtml(replyMSG);
|
adminReply.setHtml(replyMSG);
|
||||||
activeChar.sendPacket(adminReply);
|
activeChar.sendPacket(adminReply);
|
||||||
}
|
}
|
||||||
@@ -452,7 +451,15 @@ public class AdminEventEngine implements IAdminCommandHandler
|
|||||||
result.append("<table>");
|
result.append("<table>");
|
||||||
for (String fileName : files)
|
for (String fileName : files)
|
||||||
{
|
{
|
||||||
StringUtil.append(result, "<tr><td align=center>", fileName, " </td></tr><tr><td><table cellspacing=0><tr><td><button value=\"Select Event\" action=\"bypass -h admin_event_set ", fileName, "\" 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 ", fileName, "\" 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 ", fileName, "\" 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("<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>");
|
result.append("</table>");
|
||||||
@@ -464,7 +471,7 @@ public class AdminEventEngine implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
|
|
||||||
final String replyMSG = StringUtil.concat("<html><title>[ 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>");
|
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);
|
adminReply.setHtml(replyMSG);
|
||||||
activeChar.sendPacket(adminReply);
|
activeChar.sendPacket(adminReply);
|
||||||
}
|
}
|
||||||
@@ -473,7 +480,8 @@ public class AdminEventEngine implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
|
|
||||||
final StringBuilder replyMSG = StringUtil.startAppend(500, "<html><title>[ L2J EVENT ENGINE ]</title><body><br><br><center><font color=LEVEL>Event name:</font><br>");
|
final StringBuilder replyMSG = new StringBuilder(512);
|
||||||
|
replyMSG.append("<html><title>[ EVENT ENGINE ]</title><body><br><br><center><font color=LEVEL>Event name:</font><br>");
|
||||||
|
|
||||||
if (tempName.isEmpty())
|
if (tempName.isEmpty())
|
||||||
{
|
{
|
||||||
|
@@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
|||||||
import com.l2jmobius.gameserver.model.quest.Event;
|
import com.l2jmobius.gameserver.model.quest.Event;
|
||||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class AdminEvents implements IAdminCommandHandler
|
public class AdminEvents implements IAdminCommandHandler
|
||||||
{
|
{
|
||||||
@@ -156,7 +155,7 @@ public class AdminEvents implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
if (event instanceof Event)
|
if (event instanceof Event)
|
||||||
{
|
{
|
||||||
StringUtil.append(cList, "<font color=\"LEVEL\">" + event.getName() + ":</font><br1>", "<table width=270><tr>", "<td><button value=\"Start\" action=\"bypass -h admin_event_start_menu " + event.getName() + "\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>", "<td><button value=\"Stop\" action=\"bypass -h admin_event_stop_menu " + event.getName() + "\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>", "<td><button value=\"Menu\" action=\"bypass -h admin_event_bypass " + event.getName() + "\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>", "</tr></table><br>");
|
cList.append("<font color=\"LEVEL\">" + event.getName() + ":</font><br1><table width=270><tr><td><button value=\"Start\" action=\"bypass -h admin_event_start_menu " + event.getName() + "\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><button value=\"Stop\" action=\"bypass -h admin_event_stop_menu " + event.getName() + "\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
html.replace("%LIST%", cList.toString());
|
html.replace("%LIST%", cList.toString());
|
||||||
|
@@ -28,7 +28,6 @@ import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
|
|||||||
import com.l2jmobius.gameserver.model.stats.Formulas;
|
import com.l2jmobius.gameserver.model.stats.Formulas;
|
||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles following admin commands: - gm = turns gm mode on/off
|
* This class handles following admin commands: - gm = turns gm mode on/off
|
||||||
@@ -115,16 +114,17 @@ public class AdminFightCalculator implements IAdminCommandHandler
|
|||||||
|
|
||||||
if ((npc1 != null) && (npc2 != null))
|
if ((npc1 != null) && (npc2 != null))
|
||||||
{
|
{
|
||||||
replyMSG = StringUtil.concat("<html><title>Selected mobs to fight</title><body><table><tr><td>First</td><td>Second</td></tr><tr><td>level ", String.valueOf(lvl1), "</td><td>level ", String.valueOf(lvl2), "</td></tr><tr><td>id ", String.valueOf(npc1.getId()), "</td><td>id ", String.valueOf(npc2.getId()), "</td></tr><tr><td>", npc1.getName(), "</td><td>", npc2.getName(), "</td></tr></table><center><br><br><br><button value=\"OK\" action=\"bypass -h admin_fight_calculator_show ", String.valueOf(npc1.getId()), " ", String.valueOf(npc2.getId()), "\" width=100 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>");
|
replyMSG = "<html><title>Selected mobs to fight</title><body><table><tr><td>First</td><td>Second</td></tr><tr><td>level " + lvl1 + "</td><td>level " + lvl2 + "</td></tr><tr><td>id " + npc1.getId() + "</td><td>id " + npc2.getId() + "</td></tr><tr><td>" + npc1.getName() + "</td><td>" + npc2.getName() + "</td></tr></table><center><br><br><br><button value=\"OK\" action=\"bypass -h admin_fight_calculator_show " + npc1.getId() + " " + npc2.getId() + "\" width=100 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>";
|
||||||
}
|
}
|
||||||
else if ((lvl1 != 0) && (npc1 == null))
|
else if ((lvl1 != 0) && (npc1 == null))
|
||||||
{
|
{
|
||||||
final List<L2NpcTemplate> npcs = NpcData.getInstance().getAllOfLevel(lvl1);
|
final List<L2NpcTemplate> npcs = NpcData.getInstance().getAllOfLevel(lvl1);
|
||||||
final StringBuilder sb = StringUtil.startAppend(50 + (npcs.size() * 200), "<html><title>Select first mob to fight</title><body><table>");
|
final StringBuilder sb = new StringBuilder(50 + (npcs.size() * 200));
|
||||||
|
sb.append("<html><title>Select first mob to fight</title><body><table>");
|
||||||
|
|
||||||
for (L2NpcTemplate n : npcs)
|
for (L2NpcTemplate n : npcs)
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, "<tr><td><a action=\"bypass -h admin_fight_calculator lvl1 ", String.valueOf(lvl1), " lvl2 ", String.valueOf(lvl2), " mid1 ", String.valueOf(n.getId()), " mid2 ", String.valueOf(mid2), "\">", n.getName(), "</a></td></tr>");
|
sb.append("<tr><td><a action=\"bypass -h admin_fight_calculator lvl1 " + lvl1 + " lvl2 " + lvl2 + " mid1 " + n.getId() + " mid2 " + mid2 + "\">" + n.getName() + "</a></td></tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.append("</table></body></html>");
|
sb.append("</table></body></html>");
|
||||||
@@ -133,11 +133,12 @@ public class AdminFightCalculator implements IAdminCommandHandler
|
|||||||
else if ((lvl2 != 0) && (npc2 == null))
|
else if ((lvl2 != 0) && (npc2 == null))
|
||||||
{
|
{
|
||||||
final List<L2NpcTemplate> npcs = NpcData.getInstance().getAllOfLevel(lvl2);
|
final List<L2NpcTemplate> npcs = NpcData.getInstance().getAllOfLevel(lvl2);
|
||||||
final StringBuilder sb = StringUtil.startAppend(50 + (npcs.size() * 200), "<html><title>Select second mob to fight</title><body><table>");
|
final StringBuilder sb = new StringBuilder(50 + (npcs.size() * 200));
|
||||||
|
sb.append("<html><title>Select second mob to fight</title><body><table>");
|
||||||
|
|
||||||
for (L2NpcTemplate n : npcs)
|
for (L2NpcTemplate n : npcs)
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, "<tr><td><a action=\"bypass -h admin_fight_calculator lvl1 ", String.valueOf(lvl1), " lvl2 ", String.valueOf(lvl2), " mid1 ", String.valueOf(mid1), " mid2 ", String.valueOf(n.getId()), "\">", n.getName(), "</a></td></tr>");
|
sb.append("<tr><td><a action=\"bypass -h admin_fight_calculator lvl1 " + lvl1 + " lvl2 " + lvl2 + " mid1 " + mid1 + " mid2 " + n.getId() + "\">" + n.getName() + "</a></td></tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.append("</table></body></html>");
|
sb.append("</table></body></html>");
|
||||||
@@ -291,7 +292,8 @@ public class AdminFightCalculator implements IAdminCommandHandler
|
|||||||
|
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
|
|
||||||
final StringBuilder replyMSG = StringUtil.startAppend(1000, "<html><title>Selected mobs to fight</title><body><table>");
|
final StringBuilder replyMSG = new StringBuilder(1000);
|
||||||
|
replyMSG.append("<html><title>Selected mobs to fight</title><body><table>");
|
||||||
|
|
||||||
if (params.length() == 0)
|
if (params.length() == 0)
|
||||||
{
|
{
|
||||||
@@ -299,14 +301,14 @@ public class AdminFightCalculator implements IAdminCommandHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<tr><td width=140>Parameter</td><td width=70>", ((L2NpcTemplate) npc1.getTemplate()).getName(), "</td><td width=70>", ((L2NpcTemplate) npc2.getTemplate()).getName(), "</td></tr>");
|
replyMSG.append("<tr><td width=140>Parameter</td><td width=70>" + ((L2NpcTemplate) npc1.getTemplate()).getName() + "</td><td width=70>" + ((L2NpcTemplate) npc2.getTemplate()).getName() + "</td></tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(replyMSG, "<tr><td>miss</td><td>", String.valueOf(miss1), "%</td><td>", String.valueOf(miss2), "%</td></tr><tr><td>shld</td><td>", String.valueOf(shld2), "%</td><td>", String.valueOf(shld1), "%</td></tr><tr><td>crit</td><td>", String.valueOf(crit1), "%</td><td>", String.valueOf(crit2), "%</td></tr><tr><td>pAtk / pDef</td><td>", String.valueOf((int) patk1), " / ", String.valueOf((int) pdef1), "</td><td>", String.valueOf((int) patk2), " / ", String.valueOf((int) pdef2), "</td></tr><tr><td>made hits</td><td>", String.valueOf(sAtk1), "</td><td>", String.valueOf(sAtk2), "</td></tr><tr><td>dmg per hit</td><td>", String.valueOf((int) dmg1), "</td><td>", String.valueOf((int) dmg2), "</td></tr><tr><td>got dmg</td><td>", String.valueOf(tdmg2), "</td><td>", String.valueOf(tdmg1), "</td></tr><tr><td>got regen</td><td>", String.valueOf(hp1), "</td><td>", String.valueOf(hp2), "</td></tr><tr><td>had HP</td><td>", String.valueOf((int) maxHp1), "</td><td>", String.valueOf((int) maxHp2), "</td></tr><tr><td>die</td>");
|
replyMSG.append("<tr><td>miss</td><td>" + miss1 + "%</td><td>" + miss2 + "%</td></tr><tr><td>shld</td><td>" + shld2 + "%</td><td>" + shld1 + "%</td></tr><tr><td>crit</td><td>" + crit1 + "%</td><td>" + crit2 + "%</td></tr><tr><td>pAtk / pDef</td><td>" + (int) patk1 + " / " + (int) pdef1 + "</td><td>" + (int) patk2 + " / " + (int) pdef2 + "</td></tr><tr><td>made hits</td><td>" + sAtk1 + "</td><td>" + sAtk2 + "</td></tr><tr><td>dmg per hit</td><td>" + (int) dmg1 + "</td><td>" + (int) dmg2 + "</td></tr><tr><td>got dmg</td><td>" + tdmg2 + "</td><td>" + tdmg1 + "</td></tr><tr><td>got regen</td><td>" + hp1 + "</td><td>" + hp2 + "</td></tr><tr><td>had HP</td><td>" + (int) maxHp1 + "</td><td>" + (int) maxHp2 + "</td></tr><tr><td>die</td>");
|
||||||
|
|
||||||
if ((tdmg2 - hp1) > 1)
|
if ((tdmg2 - hp1) > 1)
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<td>", String.valueOf((int) ((100 * maxHp1) / (tdmg2 - hp1))), " sec</td>");
|
replyMSG.append("<td>" + ((int) ((100 * maxHp1) / (tdmg2 - hp1))) + " sec</td>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -315,7 +317,7 @@ public class AdminFightCalculator implements IAdminCommandHandler
|
|||||||
|
|
||||||
if ((tdmg1 - hp2) > 1)
|
if ((tdmg1 - hp2) > 1)
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<td>", String.valueOf((int) ((100 * maxHp2) / (tdmg1 - hp2))), " sec</td>");
|
replyMSG.append("<td>" + ((int) ((100 * maxHp2) / (tdmg1 - hp2))) + " sec</td>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -330,7 +332,7 @@ public class AdminFightCalculator implements IAdminCommandHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<button value=\"Retry\" action=\"bypass -h admin_fight_calculator_show ", String.valueOf(((L2NpcTemplate) npc1.getTemplate()).getId()), " ", String.valueOf(((L2NpcTemplate) npc2.getTemplate()).getId()), "\" width=100 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
|
replyMSG.append("<button value=\"Retry\" action=\"bypass -h admin_fight_calculator_show " + ((L2NpcTemplate) npc1.getTemplate()).getId() + " " + ((L2NpcTemplate) npc2.getTemplate()).getId() + "\" width=100 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
|
||||||
}
|
}
|
||||||
|
|
||||||
replyMSG.append("</center></body></html>");
|
replyMSG.append("</center></body></html>");
|
||||||
|
@@ -27,7 +27,6 @@ import com.l2jmobius.gameserver.model.entity.Fort;
|
|||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles all siege commands: Todo: change the class name, and neaten it up
|
* This class handles all siege commands: Todo: change the class name, and neaten it up
|
||||||
@@ -156,7 +155,7 @@ public class AdminFortSiege implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
if (fort != null)
|
if (fort != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(cList, "<td fixwidth=90><a action=\"bypass -h admin_fortsiege ", String.valueOf(fort.getResidenceId()), "\">", fort.getName(), " id: ", String.valueOf(fort.getResidenceId()), "</a></td>");
|
cList.append("<td fixwidth=90><a action=\"bypass -h admin_fortsiege " + fort.getResidenceId() + "\">" + fort.getName() + " id: " + fort.getResidenceId() + "</a></td>");
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.L2World;
|
|||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.util.GMAudit;
|
import com.l2jmobius.gameserver.util.GMAudit;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class AdminInstanceZone implements IAdminCommandHandler
|
public class AdminInstanceZone implements IAdminCommandHandler
|
||||||
{
|
{
|
||||||
@@ -118,7 +117,8 @@ public class AdminInstanceZone implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
final Map<Integer, Long> instanceTimes = InstanceManager.getInstance().getAllInstanceTimes(player.getObjectId());
|
final Map<Integer, Long> instanceTimes = InstanceManager.getInstance().getAllInstanceTimes(player.getObjectId());
|
||||||
|
|
||||||
final StringBuilder html = StringUtil.startAppend(500 + (instanceTimes.size() * 200), "<html><center><table width=260><tr><td width=40><button value=\"Main\" action=\"bypass -h admin_admin\" width=40 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center>Character Instances</center></td><td width=40><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><font color=\"LEVEL\">Instances for ", player.getName(), "</font><center><br><table><tr><td width=150>Name</td><td width=50>Time</td><td width=70>Action</td></tr>");
|
final StringBuilder html = new StringBuilder(500 + (instanceTimes.size() * 200));
|
||||||
|
html.append("<html><center><table width=260><tr><td width=40><button value=\"Main\" action=\"bypass -h admin_admin\" width=40 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center>Character Instances</center></td><td width=40><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><font color=\"LEVEL\">Instances for " + player.getName() + "</font><center><br><table><tr><td width=150>Name</td><td width=50>Time</td><td width=70>Action</td></tr>");
|
||||||
|
|
||||||
for (int id : instanceTimes.keySet())
|
for (int id : instanceTimes.keySet())
|
||||||
{
|
{
|
||||||
@@ -131,10 +131,10 @@ public class AdminInstanceZone implements IAdminCommandHandler
|
|||||||
minutes = (int) ((remainingTime % 3600) / 60);
|
minutes = (int) ((remainingTime % 3600) / 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(html, "<tr><td>", InstanceManager.getInstance().getInstanceIdName(id), "</td><td>", String.valueOf(hours), ":", String.valueOf(minutes), "</td><td><button value=\"Clear\" action=\"bypass -h admin_instancezone_clear ", player.getName(), " ", String.valueOf(id), "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
html.append("<tr><td>" + InstanceManager.getInstance().getInstanceIdName(id) + "</td><td>" + hours + ":" + minutes + "</td><td><button value=\"Clear\" action=\"bypass -h admin_instancezone_clear " + player.getName() + " " + id + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(html, "</table></html>");
|
html.append("</table></html>");
|
||||||
|
|
||||||
final NpcHtmlMessage ms = new NpcHtmlMessage();
|
final NpcHtmlMessage ms = new NpcHtmlMessage();
|
||||||
ms.setHtml(html.toString());
|
ms.setHtml(html.toString());
|
||||||
|
@@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
|||||||
import com.l2jmobius.gameserver.model.entity.Castle;
|
import com.l2jmobius.gameserver.model.entity.Castle;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.util.Util;
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author malyelfik
|
* @author malyelfik
|
||||||
@@ -42,10 +41,10 @@ public final class AdminManor implements IAdminCommandHandler
|
|||||||
final StringBuilder sb = new StringBuilder(3400);
|
final StringBuilder sb = new StringBuilder(3400);
|
||||||
for (Castle c : CastleManager.getInstance().getCastles())
|
for (Castle c : CastleManager.getInstance().getCastles())
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, "<tr><td>Name:</td><td><font color=008000>" + c.getName() + "</font></td></tr>");
|
sb.append("<tr><td>Name:</td><td><font color=008000>" + c.getName() + "</font></td></tr>");
|
||||||
StringUtil.append(sb, "<tr><td>Current period cost:</td><td><font color=FF9900>", Util.formatAdena(manor.getManorCost(c.getResidenceId(), false)), " Adena</font></td></tr>");
|
sb.append("<tr><td>Current period cost:</td><td><font color=FF9900>" + Util.formatAdena(manor.getManorCost(c.getResidenceId(), false)) + " Adena</font></td></tr>");
|
||||||
StringUtil.append(sb, "<tr><td>Next period cost:</td><td><font color=FF9900>", Util.formatAdena(manor.getManorCost(c.getResidenceId(), true)), " Adena</font></td></tr>");
|
sb.append("<tr><td>Next period cost:</td><td><font color=FF9900>" + Util.formatAdena(manor.getManorCost(c.getResidenceId(), true)) + " Adena</font></td></tr>");
|
||||||
StringUtil.append(sb, "<tr><td><font color=808080>--------------------------</font></td><td><font color=808080>--------------------------</font></td></tr>");
|
sb.append("<tr><td><font color=808080>--------------------------</font></td><td><font color=808080>--------------------------</font></td></tr>");
|
||||||
}
|
}
|
||||||
msg.replace("%castleInfo%", sb.toString());
|
msg.replace("%castleInfo%", sb.toString());
|
||||||
activeChar.sendPacket(msg);
|
activeChar.sendPacket(msg);
|
||||||
|
@@ -36,7 +36,6 @@ import com.l2jmobius.gameserver.network.serverpackets.AcquireSkillList;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.PledgeSkillList;
|
import com.l2jmobius.gameserver.network.serverpackets.PledgeSkillList;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles following admin commands:
|
* This class handles following admin commands:
|
||||||
@@ -302,21 +301,28 @@ public class AdminSkill implements IAdminCommandHandler
|
|||||||
page = maxPages;
|
page = maxPages;
|
||||||
}
|
}
|
||||||
|
|
||||||
final int skillsStart = maxSkillsPerPage * page;
|
int skillsStart = maxSkillsPerPage * page;
|
||||||
final int skillsEnd = (skills.length - skillsStart) > maxSkillsPerPage ? skillsStart + maxSkillsPerPage : skills.length;
|
int skillsEnd = skills.length;
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
if ((skillsEnd - skillsStart) > maxSkillsPerPage)
|
||||||
final StringBuilder replyMSG = StringUtil.startAppend(500 + (maxPages * 50) + (((skillsEnd - skillsStart) + 1) * 50), "<html><body><table width=260><tr><td width=40><button value=\"Main\" action=\"bypass -h admin_admin\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center>Character Selection Menu</center></td><td width=40><button value=\"Back\" action=\"bypass -h admin_show_skills\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><br><center>Editing <font color=\"LEVEL\">", player.getName(), "</font></center><br><table width=270><tr><td>Lv: ", String.valueOf(player.getLevel()), " ", ClassListData.getInstance().getClass(player.getClassId()).getClientCode(), "</td></tr></table><br><table width=270><tr><td>Note: Dont forget that modifying players skills can</td></tr><tr><td>ruin the game...</td></tr></table><br><center>Click on the skill you wish to remove:</center><br><center><table width=270><tr>");
|
{
|
||||||
|
skillsEnd = skillsStart + maxSkillsPerPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage(0, 1);
|
||||||
|
final StringBuilder replyMSG = new StringBuilder(500 + (maxPages * 50) + (((skillsEnd - skillsStart) + 1) * 50));
|
||||||
|
replyMSG.append("<html><body><table width=260><tr><td width=40><button value=\"Main\" action=\"bypass -h admin_admin\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center>Character Selection Menu</center></td><td width=40><button value=\"Back\" action=\"bypass -h admin_show_skills\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><br><center>Editing <font color=\"LEVEL\">" + player.getName() + "</font></center><br><table width=270><tr><td>Lv: " + player.getLevel() + " " + ClassListData.getInstance().getClass(player.getClassId()).getClientCode() + "</td></tr></table><br><table width=270><tr><td>Note: Dont forget that modifying players skills can</td></tr><tr><td>ruin the game...</td></tr></table><br><center>Click on the skill you wish to remove:</center><br><center><table width=270><tr>");
|
||||||
|
|
||||||
for (int x = 0; x < maxPages; x++)
|
for (int x = 0; x < maxPages; x++)
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<td><a action=\"bypass -h admin_remove_skills ", String.valueOf(x), "\">Page ", String.valueOf(x + 1), "</a></td>");
|
int pagenr = x + 1;
|
||||||
|
replyMSG.append("<td><a action=\"bypass -h admin_remove_skills " + x + "\">Page " + pagenr + "</a></td>");
|
||||||
}
|
}
|
||||||
|
|
||||||
replyMSG.append("</tr></table></center><br><table width=270><tr><td width=80>Name:</td><td width=60>Level:</td><td width=40>Id:</td></tr>");
|
replyMSG.append("</tr></table></center><br><table width=270><tr><td width=80>Name:</td><td width=60>Level:</td><td width=40>Id:</td></tr>");
|
||||||
|
|
||||||
for (int i = skillsStart; i < skillsEnd; i++)
|
for (int i = skillsStart; i < skillsEnd; i++)
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<tr><td width=80><a action=\"bypass -h admin_remove_skill ", String.valueOf(skills[i].getId()), "\">", skills[i].getName(), "</a></td><td width=60>", String.valueOf(skills[i].getLevel()), "</td><td width=40>", String.valueOf(skills[i].getId()), "</td></tr>");
|
replyMSG.append("<tr><td width=80><a action=\"bypass -h admin_remove_skill " + skills[i].getId() + "\">" + skills[i].getName() + "</a></td><td width=60>" + skills[i].getLevel() + "</td><td width=40>" + skills[i].getId() + "</td></tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
replyMSG.append("</table><br><center><table>Remove skill by ID :<tr><td>Id: </td><td><edit var=\"id_to_remove\" width=110></td></tr></table></center><center><button value=\"Remove skill\" action=\"bypass -h admin_remove_skill $id_to_remove\" width=110 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center><br><center><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>");
|
replyMSG.append("</table><br><center><table>Remove skill by ID :<tr><td>Id: </td><td><edit var=\"id_to_remove\" width=110></td></tr></table></center><center><button value=\"Remove skill\" action=\"bypass -h admin_remove_skill $id_to_remove\" width=110 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center><br><center><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>");
|
||||||
|
@@ -44,7 +44,6 @@ import com.l2jmobius.gameserver.network.SystemMessageId;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.gameserver.util.Broadcast;
|
import com.l2jmobius.gameserver.util.Broadcast;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles following admin commands: - show_spawns = shows menu - spawn_index lvl = shows menu for monsters with respective level - spawn_monster id = spawns monster id on target
|
* This class handles following admin commands: - show_spawns = shows menu - spawn_index lvl = shows menu for monsters with respective level - spawn_monster id = spawns monster id on target
|
||||||
@@ -169,7 +168,8 @@ public class AdminSpawn implements IAdminCommandHandler
|
|||||||
final int instance = Integer.parseInt(st.nextToken());
|
final int instance = Integer.parseInt(st.nextToken());
|
||||||
if (instance >= 300000)
|
if (instance >= 300000)
|
||||||
{
|
{
|
||||||
final StringBuilder html = StringUtil.startAppend(500 + 1000, "<html><table width=\"100%\"><tr><td width=45><button value=\"Main\" action=\"bypass -h admin_admin\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center>", "<font color=\"LEVEL\">Spawns for " + String.valueOf(instance) + "</font>", "</td><td width=45><button value=\"Back\" action=\"bypass -h admin_current_player\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br>", "<table width=\"100%\"><tr><td width=200>NpcName</td><td width=70>Action</td></tr>");
|
final StringBuilder html = new StringBuilder(1500);
|
||||||
|
html.append("<html><table width=\"100%\"><tr><td width=45><button value=\"Main\" action=\"bypass -h admin_admin\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center><font color=\"LEVEL\">Spawns for " + instance + "</font></td><td width=45><button value=\"Back\" action=\"bypass -h admin_current_player\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><table width=\"100%\"><tr><td width=200>NpcName</td><td width=70>Action</td></tr>");
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
int skiped = 0;
|
int skiped = 0;
|
||||||
final Instance inst = InstanceManager.getInstance().getInstance(instance);
|
final Instance inst = InstanceManager.getInstance().getInstance(instance);
|
||||||
@@ -182,7 +182,7 @@ public class AdminSpawn implements IAdminCommandHandler
|
|||||||
// Only 50 because of client html limitation
|
// Only 50 because of client html limitation
|
||||||
if (counter < 50)
|
if (counter < 50)
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<tr><td>" + npc.getName() + "</td><td>", "<a action=\"bypass -h admin_move_to " + npc.getX() + " " + npc.getY() + " " + npc.getZ() + "\">Go</a>", "</td></tr>");
|
html.append("<tr><td>" + npc.getName() + "</td><td><a action=\"bypass -h admin_move_to " + npc.getX() + " " + npc.getY() + " " + npc.getZ() + "\">Go</a></td></tr>");
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -191,7 +191,7 @@ public class AdminSpawn implements IAdminCommandHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StringUtil.append(html, "<tr><td>Skipped:</td><td>" + String.valueOf(skiped) + "</td></tr></table></body></html>");
|
html.append("<tr><td>Skipped:</td><td>" + skiped + "</td></tr></table></body></html>");
|
||||||
final NpcHtmlMessage ms = new NpcHtmlMessage();
|
final NpcHtmlMessage ms = new NpcHtmlMessage();
|
||||||
ms.setHtml(html.toString());
|
ms.setHtml(html.toString());
|
||||||
activeChar.sendPacket(ms);
|
activeChar.sendPacket(ms);
|
||||||
@@ -466,13 +466,14 @@ public class AdminSpawn implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
final List<L2NpcTemplate> mobs = NpcData.getInstance().getAllMonstersOfLevel(level);
|
final List<L2NpcTemplate> mobs = NpcData.getInstance().getAllMonstersOfLevel(level);
|
||||||
final int mobsCount = mobs.size();
|
final int mobsCount = mobs.size();
|
||||||
final StringBuilder tb = StringUtil.startAppend(500 + (mobsCount * 80), "<html><title>Spawn Monster:</title><body><p> Level : ", Integer.toString(level), "<br>Total Npc's : ", Integer.toString(mobsCount), "<br>");
|
final StringBuilder tb = new StringBuilder(500 + (mobsCount * 80));
|
||||||
|
tb.append("<html><title>Spawn Monster:</title><body><p> Level : " + level + "<br>Total Npc's : " + mobsCount + "<br>");
|
||||||
|
|
||||||
// Loop
|
// Loop
|
||||||
int i = from;
|
int i = from;
|
||||||
for (int j = 0; (i < mobsCount) && (j < 50); i++, j++)
|
for (int j = 0; (i < mobsCount) && (j < 50); i++, j++)
|
||||||
{
|
{
|
||||||
StringUtil.append(tb, "<a action=\"bypass -h admin_spawn_monster ", Integer.toString(mobs.get(i).getId()), "\">", mobs.get(i).getName(), "</a><br1>");
|
tb.append("<a action=\"bypass -h admin_spawn_monster " + mobs.get(i).getId() + "\">" + mobs.get(i).getName() + "</a><br1>");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == mobsCount)
|
if (i == mobsCount)
|
||||||
@@ -481,7 +482,7 @@ public class AdminSpawn implements IAdminCommandHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(tb, "<br><center><button value=\"Next\" action=\"bypass -h admin_spawn_index ", Integer.toString(level), " ", Integer.toString(i), "\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><button value=\"Back\" action=\"bypass -h admin_show_spawns\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>");
|
tb.append("<br><center><button value=\"Next\" action=\"bypass -h admin_spawn_index " + level + " " + i + "\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><button value=\"Back\" action=\"bypass -h admin_show_spawns\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>");
|
||||||
}
|
}
|
||||||
|
|
||||||
activeChar.sendPacket(new NpcHtmlMessage(tb.toString()));
|
activeChar.sendPacket(new NpcHtmlMessage(tb.toString()));
|
||||||
@@ -491,13 +492,14 @@ public class AdminSpawn implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
final List<L2NpcTemplate> mobs = NpcData.getInstance().getAllNpcStartingWith(starting);
|
final List<L2NpcTemplate> mobs = NpcData.getInstance().getAllNpcStartingWith(starting);
|
||||||
final int mobsCount = mobs.size();
|
final int mobsCount = mobs.size();
|
||||||
final StringBuilder tb = StringUtil.startAppend(500 + (mobsCount * 80), "<html><title>Spawn Monster:</title><body><p> There are ", Integer.toString(mobsCount), " Npcs whose name starts with ", starting, ":<br>");
|
final StringBuilder tb = new StringBuilder(500 + (mobsCount * 80));
|
||||||
|
tb.append("<html><title>Spawn Monster:</title><body><p> There are " + mobsCount + " Npcs whose name starts with " + starting + ":<br>");
|
||||||
|
|
||||||
// Loop
|
// Loop
|
||||||
int i = from;
|
int i = from;
|
||||||
for (int j = 0; (i < mobsCount) && (j < 50); i++, j++)
|
for (int j = 0; (i < mobsCount) && (j < 50); i++, j++)
|
||||||
{
|
{
|
||||||
StringUtil.append(tb, "<a action=\"bypass -h admin_spawn_monster ", Integer.toString(mobs.get(i).getId()), "\">", mobs.get(i).getName(), "</a><br1>");
|
tb.append("<a action=\"bypass -h admin_spawn_monster " + mobs.get(i).getId() + "\">" + mobs.get(i).getName() + "</a><br1>");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == mobsCount)
|
if (i == mobsCount)
|
||||||
@@ -506,7 +508,7 @@ public class AdminSpawn implements IAdminCommandHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(tb, "<br><center><button value=\"Next\" action=\"bypass -h admin_npc_index ", starting, " ", Integer.toString(i), "\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><button value=\"Back\" action=\"bypass -h admin_show_npcs\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>");
|
tb.append("<br><center><button value=\"Next\" action=\"bypass -h admin_npc_index " + starting + " " + i + "\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><button value=\"Back\" action=\"bypass -h admin_show_npcs\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>");
|
||||||
}
|
}
|
||||||
|
|
||||||
activeChar.sendPacket(new NpcHtmlMessage(tb.toString()));
|
activeChar.sendPacket(new NpcHtmlMessage(tb.toString()));
|
||||||
|
@@ -40,7 +40,6 @@ import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
|||||||
import com.l2jmobius.gameserver.model.actor.instance.L2RaidBossInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2RaidBossInstance;
|
||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class handles following admin commands: - show_moves - show_teleport - teleport_to_character - move_to - teleport_character
|
* This class handles following admin commands: - show_moves - show_teleport - teleport_to_character - move_to - teleport_character
|
||||||
@@ -401,7 +400,7 @@ public class AdminTeleport implements IAdminCommandHandler
|
|||||||
}
|
}
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
|
|
||||||
final String replyMSG = StringUtil.concat("<html><title>Teleport Character</title><body>The character you will teleport is ", player.getName(), ".<br>Co-ordinate x<edit var=\"char_cord_x\" width=110>Co-ordinate y<edit var=\"char_cord_y\" width=110>Co-ordinate z<edit var=\"char_cord_z\" width=110><button value=\"Teleport\" action=\"bypass -h admin_teleport_character $char_cord_x $char_cord_y $char_cord_z\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><button value=\"Teleport near you\" action=\"bypass -h admin_teleport_character ", String.valueOf(activeChar.getX()), " ", String.valueOf(activeChar.getY()), " ", String.valueOf(activeChar.getZ()), "\" width=115 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><center><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>");
|
final String replyMSG = "<html><title>Teleport Character</title><body>The character you will teleport is " + player.getName() + ".<br>Co-ordinate x<edit var=\"char_cord_x\" width=110>Co-ordinate y<edit var=\"char_cord_y\" width=110>Co-ordinate z<edit var=\"char_cord_z\" width=110><button value=\"Teleport\" action=\"bypass -h admin_teleport_character $char_cord_x $char_cord_y $char_cord_z\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><button value=\"Teleport near you\" action=\"bypass -h admin_teleport_character " + activeChar.getX() + " " + activeChar.getY() + " " + activeChar.getZ() + "\" width=115 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><center><button value=\"Back\" action=\"bypass -h admin_current_player\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></body></html>";
|
||||||
adminReply.setHtml(replyMSG);
|
adminReply.setHtml(replyMSG);
|
||||||
activeChar.sendPacket(adminReply);
|
activeChar.sendPacket(adminReply);
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,6 @@ import com.l2jmobius.gameserver.model.zone.L2ZoneType;
|
|||||||
import com.l2jmobius.gameserver.model.zone.ZoneId;
|
import com.l2jmobius.gameserver.model.zone.ZoneId;
|
||||||
import com.l2jmobius.gameserver.model.zone.type.NpcSpawnTerritory;
|
import com.l2jmobius.gameserver.model.zone.type.NpcSpawnTerritory;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Small typo fix by Zoey76 24/02/2011
|
* Small typo fix by Zoey76 24/02/2011
|
||||||
@@ -138,22 +137,26 @@ public class AdminZone implements IAdminCommandHandler
|
|||||||
{
|
{
|
||||||
if (zone.getName() != null)
|
if (zone.getName() != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(zones, zone.getName() + "<br1>");
|
zones.append(zone.getName());
|
||||||
|
zones.append("<br1>");
|
||||||
if (zone.getId() < 300000)
|
if (zone.getId() < 300000)
|
||||||
{
|
{
|
||||||
StringUtil.append(zones, "(", String.valueOf(zone.getId()), ")");
|
zones.append("(");
|
||||||
|
zones.append(zone.getId());
|
||||||
|
zones.append(")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(zones, String.valueOf(zone.getId()));
|
zones.append(zone.getId());
|
||||||
}
|
}
|
||||||
StringUtil.append(zones, " ");
|
zones.append(" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (NpcSpawnTerritory territory : ZoneManager.getInstance().getSpawnTerritories(activeChar))
|
for (NpcSpawnTerritory territory : ZoneManager.getInstance().getSpawnTerritories(activeChar))
|
||||||
{
|
{
|
||||||
StringUtil.append(zones, territory.getName() + "<br1>");
|
zones.append(territory.getName());
|
||||||
|
zones.append("<br1>");
|
||||||
}
|
}
|
||||||
adminReply.replace("%ZLIST%", zones.toString());
|
adminReply.replace("%ZLIST%", zones.toString());
|
||||||
activeChar.sendPacket(adminReply);
|
activeChar.sendPacket(adminReply);
|
||||||
|
@@ -32,7 +32,6 @@ import com.l2jmobius.gameserver.model.quest.QuestState;
|
|||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
import com.l2jmobius.gameserver.network.serverpackets.ActionFailed;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class QuestLink implements IBypassHandler
|
public class QuestLink implements IBypassHandler
|
||||||
{
|
{
|
||||||
@@ -82,11 +81,12 @@ public class QuestLink implements IBypassHandler
|
|||||||
*/
|
*/
|
||||||
private static void showQuestChooseWindow(L2PcInstance player, L2Npc npc, Collection<Quest> quests)
|
private static void showQuestChooseWindow(L2PcInstance player, L2Npc npc, Collection<Quest> quests)
|
||||||
{
|
{
|
||||||
final StringBuilder sb = StringUtil.startAppend(150, "<html><body>");
|
final StringBuilder sb = new StringBuilder(128);
|
||||||
final StringBuilder qStarted = StringUtil.startAppend(150, "");
|
final StringBuilder qStarted = new StringBuilder(128);
|
||||||
final StringBuilder qCanStart = StringUtil.startAppend(150, "");
|
final StringBuilder qCanStart = new StringBuilder(128);
|
||||||
final StringBuilder qCannotstart = StringUtil.startAppend(150, "");
|
final StringBuilder qCannotstart = new StringBuilder(128);
|
||||||
final StringBuilder qComplete = StringUtil.startAppend(150, "");
|
final StringBuilder qComplete = new StringBuilder(128);
|
||||||
|
sb.append("<html><body>");
|
||||||
String state = "";
|
String state = "";
|
||||||
String color = "";
|
String color = "";
|
||||||
|
|
||||||
@@ -129,29 +129,29 @@ public class QuestLink implements IBypassHandler
|
|||||||
{
|
{
|
||||||
case "ffdd66": // started
|
case "ffdd66": // started
|
||||||
{
|
{
|
||||||
StringUtil.append(qStarted, "<font color=\"" + color + "\">");
|
qStarted.append("<font color=\"" + color + "\">");
|
||||||
StringUtil.append(qStarted, "<button icon=\"quest\" align=\"left\" action=\"bypass -h npc_", String.valueOf(npc.getObjectId()), "_Quest ", quest.getName(), "\">");
|
qStarted.append("<button icon=\"quest\" align=\"left\" action=\"bypass -h npc_" + String.valueOf(npc.getObjectId()) + "_Quest " + quest.getName() + "\">");
|
||||||
appendToText(quest, qStarted, state);
|
appendToText(quest, qStarted, state);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "bbaa88": // can start
|
case "bbaa88": // can start
|
||||||
{
|
{
|
||||||
StringUtil.append(qCanStart, "<font color=\"" + color + "\">");
|
qCanStart.append("<font color=\"" + color + "\">");
|
||||||
StringUtil.append(qCanStart, "<button icon=\"quest\" align=\"left\" action=\"bypass -h npc_", String.valueOf(npc.getObjectId()), "_Quest ", quest.getName(), "\">");
|
qCanStart.append("<button icon=\"quest\" align=\"left\" action=\"bypass -h npc_" + String.valueOf(npc.getObjectId()) + "_Quest " + quest.getName() + "\">");
|
||||||
appendToText(quest, qCanStart, state);
|
appendToText(quest, qCanStart, state);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "a62f31": // cannot start
|
case "a62f31": // cannot start
|
||||||
{
|
{
|
||||||
StringUtil.append(qCannotstart, "<font color=\"" + color + "\">");
|
qCannotstart.append("<font color=\"" + color + "\">");
|
||||||
StringUtil.append(qCannotstart, "<button icon=\"quest\" align=\"left\" action=\"bypass -h npc_", String.valueOf(npc.getObjectId()), "_Quest ", quest.getName(), "\">");
|
qCannotstart.append("<button icon=\"quest\" align=\"left\" action=\"bypass -h npc_" + String.valueOf(npc.getObjectId()) + "_Quest " + quest.getName() + "\">");
|
||||||
appendToText(quest, qCannotstart, state);
|
appendToText(quest, qCannotstart, state);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "787878": // complete
|
case "787878": // complete
|
||||||
{
|
{
|
||||||
StringUtil.append(qComplete, "<font color=\"" + color + "\">");
|
qComplete.append("<font color=\"" + color + "\">");
|
||||||
StringUtil.append(qComplete, "<button icon=\"quest\" align=\"left\" action=\"bypass -h npc_", String.valueOf(npc.getObjectId()), "_Quest ", quest.getName(), "\">");
|
qComplete.append("<button icon=\"quest\" align=\"left\" action=\"bypass -h npc_" + String.valueOf(npc.getObjectId()) + "_Quest " + quest.getName() + "\">");
|
||||||
appendToText(quest, qComplete, state);
|
appendToText(quest, qComplete, state);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -171,11 +171,11 @@ public class QuestLink implements IBypassHandler
|
|||||||
{
|
{
|
||||||
if (quest.isCustomQuest())
|
if (quest.isCustomQuest())
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, quest.getDescr(), state);
|
sb.append(quest.getDescr() + state);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, "<fstring>", String.valueOf(quest.getNpcStringId()), state, "</fstring>");
|
sb.append("<fstring>" + String.valueOf(quest.getNpcStringId()) + state + "</fstring>");
|
||||||
}
|
}
|
||||||
sb.append("</button></font>");
|
sb.append("</button></font>");
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
package handlers.communityboard;
|
package handlers.communityboard;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
|
import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
|
||||||
import com.l2jmobius.gameserver.handler.CommunityBoardHandler;
|
import com.l2jmobius.gameserver.handler.CommunityBoardHandler;
|
||||||
import com.l2jmobius.gameserver.handler.IWriteBoardHandler;
|
import com.l2jmobius.gameserver.handler.IWriteBoardHandler;
|
||||||
@@ -23,7 +26,6 @@ import com.l2jmobius.gameserver.model.L2Clan;
|
|||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.util.Util;
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clan board.
|
* Clan board.
|
||||||
@@ -147,32 +149,35 @@ public class ClanBoard implements IWriteBoardHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final StringBuilder html = StringUtil.startAppend(2000, "<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsclan_clanlist\"> CLAN COMMUNITY </a> > <a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), "\"> &$802; </a></td></tr></table>");
|
final StringBuilder html = new StringBuilder(2048);
|
||||||
|
html.append("<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsclan_clanlist\"> CLAN COMMUNITY </a> > <a action=\"bypass _bbsclan_clanhome;");
|
||||||
|
html.append(clanId);
|
||||||
|
html.append("\"> &$802; </a></td></tr></table>");
|
||||||
if (activeChar.isClanLeader())
|
if (activeChar.isClanLeader())
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<br><br><center><table width=610 border=0 cellspacing=0 cellpadding=0><tr><td fixwidth=610><font color=\"AAAAAA\">The Clan Notice function allows the clan leader to send messages through a pop-up window to clan members at login.</font> </td></tr><tr><td height=20></td></tr>");
|
html.append("<br><br><center><table width=610 border=0 cellspacing=0 cellpadding=0><tr><td fixwidth=610><font color=\"AAAAAA\">The Clan Notice function allows the clan leader to send messages through a pop-up window to clan members at login.</font> </td></tr><tr><td height=20></td></tr>");
|
||||||
|
|
||||||
if (activeChar.getClan().isNoticeEnabled())
|
if (activeChar.getClan().isNoticeEnabled())
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<tr><td fixwidth=610> Clan Notice Function: on / <a action=\"bypass _bbsclan_clannotice_disable\">off</a>");
|
html.append("<tr><td fixwidth=610> Clan Notice Function: on / <a action=\"bypass _bbsclan_clannotice_disable\">off</a>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<tr><td fixwidth=610> Clan Notice Function: <a action=\"bypass _bbsclan_clannotice_enable\">on</a> / off");
|
html.append("<tr><td fixwidth=610> Clan Notice Function: <a action=\"bypass _bbsclan_clannotice_enable\">on</a> / off");
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(html, "</td></tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\"><br> <br><table width=610 border=0 cellspacing=2 cellpadding=0><tr><td>Edit Notice: </td></tr><tr><td height=5></td></tr><tr><td><MultiEdit var =\"Content\" width=610 height=100></td></tr></table><br><table width=610 border=0 cellspacing=0 cellpadding=0><tr><td height=5></td></tr><tr><td align=center FIXWIDTH=65><button value=\"&$140;\" action=\"Write Notice Set _ Content Content Content\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td><td align=center FIXWIDTH=45></td><td align=center FIXWIDTH=500></td></tr></table></center></body></html>");
|
html.append("</td></tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\"><br> <br><table width=610 border=0 cellspacing=2 cellpadding=0><tr><td>Edit Notice: </td></tr><tr><td height=5></td></tr><tr><td><MultiEdit var =\"Content\" width=610 height=100></td></tr></table><br><table width=610 border=0 cellspacing=0 cellpadding=0><tr><td height=5></td></tr><tr><td align=center FIXWIDTH=65><button value=\"&$140;\" action=\"Write Notice Set _ Content Content Content\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td><td align=center FIXWIDTH=45></td><td align=center FIXWIDTH=500></td></tr></table></center></body></html>");
|
||||||
|
|
||||||
Util.sendCBHtml(activeChar, html.toString(), activeChar.getClan().getNotice());
|
Util.sendCBHtml(activeChar, html.toString(), activeChar.getClan().getNotice());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=0><tr><td>You are not your clan's leader, and therefore cannot change the clan notice</td></tr></table>");
|
html.append("<img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=0><tr><td>You are not your clan's leader, and therefore cannot change the clan notice</td></tr></table>");
|
||||||
if (activeChar.getClan().isNoticeEnabled())
|
if (activeChar.getClan().isNoticeEnabled())
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<table border=0 cellspacing=0 cellpadding=0><tr><td>The current clan notice:</td></tr><tr><td fixwidth=5></td><td FIXWIDTH=600 align=left>" + activeChar.getClan().getNotice() + "</td><td fixqqwidth=5></td></tr></table>");
|
html.append("<table border=0 cellspacing=0 cellpadding=0><tr><td>The current clan notice:</td></tr><tr><td fixwidth=5></td><td FIXWIDTH=600 align=left>" + activeChar.getClan().getNotice() + "</td><td fixqqwidth=5></td></tr></table>");
|
||||||
}
|
}
|
||||||
StringUtil.append(html, "</center></body></html>");
|
html.append("</center></body></html>");
|
||||||
CommunityBoardHandler.separateAndSend(html.toString(), activeChar);
|
CommunityBoardHandler.separateAndSend(html.toString(), activeChar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -187,7 +192,10 @@ public class ClanBoard implements IWriteBoardHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
// header
|
// header
|
||||||
final StringBuilder html = StringUtil.startAppend(2000, "<html><body><br><br><center><br1><br1><table border=0 cellspacing=0 cellpadding=0><tr><td FIXWIDTH=15> </td><td width=610 height=30 align=left><a action=\"bypass _bbsclan_clanlist\"> CLAN COMMUNITY </a></td></tr></table><table border=0 cellspacing=0 cellpadding=0 width=610 bgcolor=434343><tr><td height=10></td></tr><tr><td fixWIDTH=5></td><td fixWIDTH=600><a action=\"bypass _bbsclan_clanhome;", String.valueOf((activeChar.getClan() != null) ? activeChar.getClan().getId() : 0), "\">[GO TO MY CLAN]</a> </td><td fixWIDTH=5></td></tr><tr><td height=10></td></tr></table><br><table border=0 cellspacing=0 cellpadding=2 bgcolor=5A5A5A width=610><tr><td FIXWIDTH=5></td><td FIXWIDTH=200 align=center>CLAN NAME</td><td FIXWIDTH=200 align=center>CLAN LEADER</td><td FIXWIDTH=100 align=center>CLAN LEVEL</td><td FIXWIDTH=100 align=center>CLAN MEMBERS</td><td FIXWIDTH=5></td></tr></table><img src=\"L2UI.Squareblank\" width=\"1\" height=\"5\">");
|
final StringBuilder html = new StringBuilder(2048);
|
||||||
|
html.append("<html><body><br><br><center><br1><br1><table border=0 cellspacing=0 cellpadding=0><tr><td FIXWIDTH=15> </td><td width=610 height=30 align=left><a action=\"bypass _bbsclan_clanlist\"> CLAN COMMUNITY </a></td></tr></table><table border=0 cellspacing=0 cellpadding=0 width=610 bgcolor=434343><tr><td height=10></td></tr><tr><td fixWIDTH=5></td><td fixWIDTH=600><a action=\"bypass _bbsclan_clanhome;");
|
||||||
|
html.append(activeChar.getClan() != null ? activeChar.getClan().getId() : 0);
|
||||||
|
html.append("\">[GO TO MY CLAN]</a> </td><td fixWIDTH=5></td></tr><tr><td height=10></td></tr></table><br><table border=0 cellspacing=0 cellpadding=2 bgcolor=5A5A5A width=610><tr><td FIXWIDTH=5></td><td FIXWIDTH=200 align=center>CLAN NAME</td><td FIXWIDTH=200 align=center>CLAN LEADER</td><td FIXWIDTH=100 align=center>CLAN LEVEL</td><td FIXWIDTH=100 align=center>CLAN MEMBERS</td><td FIXWIDTH=5></td></tr></table><img src=\"L2UI.Squareblank\" width=\"1\" height=\"5\">");
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (L2Clan cl : ClanTable.getInstance().getClans())
|
for (L2Clan cl : ClanTable.getInstance().getClans())
|
||||||
@@ -199,7 +207,17 @@ public class ClanBoard implements IWriteBoardHandler
|
|||||||
|
|
||||||
if (i++ >= ((index - 1) * 7))
|
if (i++ >= ((index - 1) * 7))
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<img src=\"L2UI.SquareBlank\" width=\"610\" height=\"3\"><table border=0 cellspacing=0 cellpadding=0 width=610><tr> <td FIXWIDTH=5></td><td FIXWIDTH=200 align=center><a action=\"bypass _bbsclan_clanhome;", String.valueOf(cl.getId()), "\">", cl.getName(), "</a></td><td FIXWIDTH=200 align=center>", cl.getLeaderName(), "</td><td FIXWIDTH=100 align=center>", String.valueOf(cl.getLevel()), "</td><td FIXWIDTH=100 align=center>", String.valueOf(cl.getMembersCount()), "</td><td FIXWIDTH=5></td></tr><tr><td height=5></td></tr></table><img src=\"L2UI.SquareBlank\" width=\"610\" height=\"3\"><img src=\"L2UI.SquareGray\" width=\"610\" height=\"1\">");
|
html.append("<img src=\"L2UI.SquareBlank\" width=\"610\" height=\"3\"><table border=0 cellspacing=0 cellpadding=0 width=610><tr> <td FIXWIDTH=5></td><td FIXWIDTH=200 align=center><a action=\"bypass _bbsclan_clanhome;");
|
||||||
|
html.append(cl.getId());
|
||||||
|
html.append("\">");
|
||||||
|
html.append(cl.getName());
|
||||||
|
html.append("</a></td><td FIXWIDTH=200 align=center>");
|
||||||
|
html.append(cl.getLeaderName());
|
||||||
|
html.append("</td><td FIXWIDTH=100 align=center>");
|
||||||
|
html.append(cl.getLevel());
|
||||||
|
html.append("</td><td FIXWIDTH=100 align=center>");
|
||||||
|
html.append(cl.getMembersCount());
|
||||||
|
html.append("</td><td FIXWIDTH=5></td></tr><tr><td height=5></td></tr></table><img src=\"L2UI.SquareBlank\" width=\"610\" height=\"3\"><img src=\"L2UI.SquareGray\" width=\"610\" height=\"1\">");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,7 +229,9 @@ public class ClanBoard implements IWriteBoardHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<td><button action=\"_bbsclan_clanlist;", String.valueOf(index - 1), "\" back=\"l2ui_ch3.prev1_down\" fore=\"l2ui_ch3.prev1\" width=16 height=16 ></td>");
|
html.append("<td><button action=\"_bbsclan_clanlist;");
|
||||||
|
html.append(index - 1);
|
||||||
|
html.append("\" back=\"l2ui_ch3.prev1_down\" fore=\"l2ui_ch3.prev1\" width=16 height=16 ></td>");
|
||||||
}
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
@@ -224,11 +244,17 @@ public class ClanBoard implements IWriteBoardHandler
|
|||||||
{
|
{
|
||||||
if (i == index)
|
if (i == index)
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<td> ", String.valueOf(i), " </td>");
|
html.append("<td> ");
|
||||||
|
html.append(i);
|
||||||
|
html.append(" </td>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<td><a action=\"bypass _bbsclan_clanlist;", String.valueOf(i), "\"> ", String.valueOf(i), " </a></td>");
|
html.append("<td><a action=\"bypass _bbsclan_clanlist;");
|
||||||
|
html.append(i);
|
||||||
|
html.append("\"> ");
|
||||||
|
html.append(i);
|
||||||
|
html.append(" </a></td>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (index == nbp)
|
if (index == nbp)
|
||||||
@@ -237,7 +263,9 @@ public class ClanBoard implements IWriteBoardHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<td><button action=\"bypass _bbsclan_clanlist;", String.valueOf(index + 1), "\" back=\"l2ui_ch3.next1_down\" fore=\"l2ui_ch3.next1\" width=16 height=16 ></td>");
|
html.append("<td><button action=\"bypass _bbsclan_clanlist;");
|
||||||
|
html.append(index + 1);
|
||||||
|
html.append("\" back=\"l2ui_ch3.next1_down\" fore=\"l2ui_ch3.next1\" width=16 height=16 ></td>");
|
||||||
}
|
}
|
||||||
html.append("</tr></table><table border=0 cellspacing=0 cellpadding=0><tr><td width=610><img src=\"sek.cbui141\" width=\"610\" height=\"1\"></td></tr></table><table border=0><tr><td><combobox width=65 var=keyword list=\"Name;Ruler\"></td><td><edit var = \"Search\" width=130 height=11 length=\"16\"></td>" +
|
html.append("</tr></table><table border=0 cellspacing=0 cellpadding=0><tr><td width=610><img src=\"sek.cbui141\" width=\"610\" height=\"1\"></td></tr></table><table border=0><tr><td><combobox width=65 var=keyword list=\"Name;Ruler\"></td><td><edit var = \"Search\" width=130 height=11 length=\"16\"></td>" +
|
||||||
// TODO: search (Write in BBS)
|
// TODO: search (Write in BBS)
|
||||||
@@ -262,7 +290,7 @@ public class ClanBoard implements IWriteBoardHandler
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final String html = StringUtil.concat("<html><body><center><br><br><br1><br1><table border=0 cellspacing=0 cellpadding=0><tr><td FIXWIDTH=15> </td><td width=610 height=30 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsclan_clanlist\"> CLAN COMMUNITY </a> > <a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), "\"> &$802; </a></td></tr></table><table border=0 cellspacing=0 cellpadding=0 width=610 bgcolor=434343><tr><td height=10></td></tr><tr><td fixWIDTH=5></td><td fixwidth=600><a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), ";announce\">[CLAN ANNOUNCEMENT]</a> <a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), ";cbb\">[CLAN BULLETIN BOARD]</a><a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), ";cmail\">[CLAN MAIL]</a> <a action=\"bypass _bbsclan_clannotice_edit;", String.valueOf(clanId), ";cnotice\">[CLAN NOTICE]</a> </td><td fixWIDTH=5></td></tr><tr><td height=10></td></tr></table><table border=0 cellspacing=0 cellpadding=0 width=610><tr><td height=10></td></tr><tr><td fixWIDTH=5></td><td fixwidth=290 valign=top></td><td fixWIDTH=5></td><td fixWIDTH=5 align=center valign=top><img src=\"l2ui.squaregray\" width=2 height=128></td><td fixWIDTH=5></td><td fixwidth=295><table border=0 cellspacing=0 cellpadding=0 width=295><tr><td fixWIDTH=100 align=left>CLAN NAME</td><td fixWIDTH=195 align=left>", cl.getName(), "</td></tr><tr><td height=7></td></tr><tr><td fixWIDTH=100 align=left>CLAN LEVEL</td><td fixWIDTH=195 align=left height=16>", String.valueOf(cl.getLevel()), "</td></tr><tr><td height=7></td></tr><tr><td fixWIDTH=100 align=left>CLAN MEMBERS</td><td fixWIDTH=195 align=left height=16>", String.valueOf(cl.getMembersCount()), "</td></tr><tr><td height=7></td></tr><tr><td fixWIDTH=100 align=left>CLAN LEADER</td><td fixWIDTH=195 align=left height=16>", cl.getLeaderName(), "</td></tr><tr><td height=7></td></tr>" +
|
final String html = Arrays.asList("<html><body><center><br><br><br1><br1><table border=0 cellspacing=0 cellpadding=0><tr><td FIXWIDTH=15> </td><td width=610 height=30 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsclan_clanlist\"> CLAN COMMUNITY </a> > <a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), "\"> &$802; </a></td></tr></table><table border=0 cellspacing=0 cellpadding=0 width=610 bgcolor=434343><tr><td height=10></td></tr><tr><td fixWIDTH=5></td><td fixwidth=600><a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), ";announce\">[CLAN ANNOUNCEMENT]</a> <a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), ";cbb\">[CLAN BULLETIN BOARD]</a><a action=\"bypass _bbsclan_clanhome;", String.valueOf(clanId), ";cmail\">[CLAN MAIL]</a> <a action=\"bypass _bbsclan_clannotice_edit;", String.valueOf(clanId), ";cnotice\">[CLAN NOTICE]</a> </td><td fixWIDTH=5></td></tr><tr><td height=10></td></tr></table><table border=0 cellspacing=0 cellpadding=0 width=610><tr><td height=10></td></tr><tr><td fixWIDTH=5></td><td fixwidth=290 valign=top></td><td fixWIDTH=5></td><td fixWIDTH=5 align=center valign=top><img src=\"l2ui.squaregray\" width=2 height=128></td><td fixWIDTH=5></td><td fixwidth=295><table border=0 cellspacing=0 cellpadding=0 width=295><tr><td fixWIDTH=100 align=left>CLAN NAME</td><td fixWIDTH=195 align=left>", cl.getName(), "</td></tr><tr><td height=7></td></tr><tr><td fixWIDTH=100 align=left>CLAN LEVEL</td><td fixWIDTH=195 align=left height=16>", String.valueOf(cl.getLevel()), "</td></tr><tr><td height=7></td></tr><tr><td fixWIDTH=100 align=left>CLAN MEMBERS</td><td fixWIDTH=195 align=left height=16>", String.valueOf(cl.getMembersCount()), "</td></tr><tr><td height=7></td></tr><tr><td fixWIDTH=100 align=left>CLAN LEADER</td><td fixWIDTH=195 align=left height=16>", cl.getLeaderName(), "</td></tr><tr><td height=7></td></tr>" +
|
||||||
// ADMINISTRATOR ??
|
// ADMINISTRATOR ??
|
||||||
/*
|
/*
|
||||||
* html.append("<tr>"); html.append("<td fixWIDTH=100 align=left>ADMINISTRATOR</td>"); html.append("<td fixWIDTH=195 align=left height=16>"+cl.getLeaderName()+"</td>"); html.append("</tr>");
|
* html.append("<tr>"); html.append("<td fixWIDTH=100 align=left>ADMINISTRATOR</td>"); html.append("<td fixWIDTH=195 align=left height=16>"+cl.getLeaderName()+"</td>"); html.append("</tr>");
|
||||||
@@ -270,7 +298,7 @@ public class ClanBoard implements IWriteBoardHandler
|
|||||||
"<tr><td height=7></td></tr><tr><td fixWIDTH=100 align=left>ALLIANCE</td><td fixWIDTH=195 align=left height=16>", (cl.getAllyName() != null) ? cl.getAllyName() : "", "</td></tr></table></td><td fixWIDTH=5></td></tr><tr><td height=10></td></tr></table>" +
|
"<tr><td height=7></td></tr><tr><td fixWIDTH=100 align=left>ALLIANCE</td><td fixWIDTH=195 align=left height=16>", (cl.getAllyName() != null) ? cl.getAllyName() : "", "</td></tr></table></td><td fixWIDTH=5></td></tr><tr><td height=10></td></tr></table>" +
|
||||||
// TODO: the BB for clan :)
|
// TODO: the BB for clan :)
|
||||||
// html.append("<table border=0 cellspacing=0 cellpadding=0 width=610 bgcolor=333333>");
|
// html.append("<table border=0 cellspacing=0 cellpadding=0 width=610 bgcolor=333333>");
|
||||||
"<img src=\"L2UI.squareblank\" width=\"1\" height=\"5\"><img src=\"L2UI.squaregray\" width=\"610\" height=\"1\"><br></center><br> <br></body></html>");
|
"<img src=\"L2UI.squareblank\" width=\"1\" height=\"5\"><img src=\"L2UI.squaregray\" width=\"610\" height=\"1\"><br></center><br> <br></body></html>").stream().collect(Collectors.joining());
|
||||||
CommunityBoardHandler.separateAndSend(html, activeChar);
|
CommunityBoardHandler.separateAndSend(html, activeChar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,6 @@ import java.text.SimpleDateFormat;
|
|||||||
import com.l2jmobius.gameserver.handler.IUserCommandHandler;
|
import com.l2jmobius.gameserver.handler.IUserCommandHandler;
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clan Penalty user command.
|
* Clan Penalty user command.
|
||||||
@@ -43,24 +42,31 @@ public class ClanPenalty implements IUserCommandHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean penalty = false;
|
boolean penalty = false;
|
||||||
final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
final StringBuilder htmlContent = StringUtil.startAppend(500, "<html><body><center><table width=270 border=0 bgcolor=111111><tr><td width=170>Penalty</td><td width=100 align=center>Expiration Date</td></tr></table><table width=270 border=0><tr>");
|
final StringBuilder htmlContent = new StringBuilder(500);
|
||||||
|
htmlContent.append("<html><body><center><table width=270 border=0 bgcolor=111111><tr><td width=170>Penalty</td><td width=100 align=center>Expiration Date</td></tr></table><table width=270 border=0><tr>");
|
||||||
|
|
||||||
if (activeChar.getClanJoinExpiryTime() > System.currentTimeMillis())
|
if (activeChar.getClanJoinExpiryTime() > System.currentTimeMillis())
|
||||||
{
|
{
|
||||||
StringUtil.append(htmlContent, "<td width=170>Unable to join a clan.</td><td width=100 align=center>", format.format(activeChar.getClanJoinExpiryTime()), "</td>");
|
htmlContent.append("<td width=170>Unable to join a clan.</td><td width=100 align=center>");
|
||||||
|
htmlContent.append(format.format(activeChar.getClanJoinExpiryTime()));
|
||||||
|
htmlContent.append("</td>");
|
||||||
penalty = true;
|
penalty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeChar.getClanCreateExpiryTime() > System.currentTimeMillis())
|
if (activeChar.getClanCreateExpiryTime() > System.currentTimeMillis())
|
||||||
{
|
{
|
||||||
StringUtil.append(htmlContent, "<td width=170>Unable to create a clan.</td><td width=100 align=center>", format.format(activeChar.getClanCreateExpiryTime()), "</td>");
|
htmlContent.append("<td width=170>Unable to create a clan.</td><td width=100 align=center>");
|
||||||
|
htmlContent.append(format.format(activeChar.getClanCreateExpiryTime()));
|
||||||
|
htmlContent.append("</td>");
|
||||||
penalty = true;
|
penalty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((activeChar.getClan() != null) && (activeChar.getClan().getCharPenaltyExpiryTime() > System.currentTimeMillis()))
|
if ((activeChar.getClan() != null) && (activeChar.getClan().getCharPenaltyExpiryTime() > System.currentTimeMillis()))
|
||||||
{
|
{
|
||||||
StringUtil.append(htmlContent, "<td width=170>Unable to invite a clan member.</td><td width=100 align=center>", format.format(activeChar.getClan().getCharPenaltyExpiryTime()), "</td>");
|
htmlContent.append("<td width=170>Unable to invite a clan member.</td><td width=100 align=center>");
|
||||||
|
htmlContent.append(format.format(activeChar.getClan().getCharPenaltyExpiryTime()));
|
||||||
|
htmlContent.append("</td>");
|
||||||
penalty = true;
|
penalty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,7 +22,6 @@ import com.l2jmobius.Config;
|
|||||||
import com.l2jmobius.gameserver.handler.IVoicedCommandHandler;
|
import com.l2jmobius.gameserver.handler.IVoicedCommandHandler;
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class Lang implements IVoicedCommandHandler
|
public class Lang implements IVoicedCommandHandler
|
||||||
{
|
{
|
||||||
@@ -42,10 +41,10 @@ public class Lang implements IVoicedCommandHandler
|
|||||||
final NpcHtmlMessage msg = new NpcHtmlMessage();
|
final NpcHtmlMessage msg = new NpcHtmlMessage();
|
||||||
if (params == null)
|
if (params == null)
|
||||||
{
|
{
|
||||||
final StringBuilder html = StringUtil.startAppend(100);
|
final StringBuilder html = new StringBuilder(100);
|
||||||
for (String lang : Config.L2JMOD_MULTILANG_ALLOWED)
|
for (String lang : Config.L2JMOD_MULTILANG_ALLOWED)
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<button value=\"", lang.toUpperCase(), "\" action=\"bypass -h voice .lang ", lang, "\" width=60 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><br>");
|
html.append("<button value=\"" + lang.toUpperCase() + "\" action=\"bypass -h voice .lang " + lang + "\" width=60 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><br>");
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.setFile(activeChar.getHtmlPrefix(), "html/mods/Lang/LanguageSelect.htm");
|
msg.setFile(activeChar.getHtmlPrefix(), "html/mods/Lang/LanguageSelect.htm");
|
||||||
|
@@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.entity.L2Event;
|
|||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Zoey76.
|
* @author Zoey76.
|
||||||
@@ -65,10 +64,11 @@ public class StatsVCmd implements IVoicedCommandHandler
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final StringBuilder replyMSG = StringUtil.startAppend(300 + (pc.getEventStatus().getKills().size() * 50), "<html><body><center><font color=\"LEVEL\">[ L2J EVENT ENGINE ]</font></center><br><br>Statistics for player <font color=\"LEVEL\">", pc.getName(), "</font><br>Total kills <font color=\"FF0000\">", String.valueOf(pc.getEventStatus().getKills().size()), "</font><br><br>Detailed list: <br>");
|
final StringBuilder replyMSG = new StringBuilder(300 + (pc.getEventStatus().getKills().size() * 50));
|
||||||
|
replyMSG.append("<html><body><center><font color=\"LEVEL\">[ L2J EVENT ENGINE ]</font></center><br><br>Statistics for player <font color=\"LEVEL\">" + pc.getName() + "</font><br>Total kills <font color=\"FF0000\">" + pc.getEventStatus().getKills().size() + "</font><br><br>Detailed list: <br>");
|
||||||
for (L2PcInstance plr : pc.getEventStatus().getKills())
|
for (L2PcInstance plr : pc.getEventStatus().getKills())
|
||||||
{
|
{
|
||||||
StringUtil.append(replyMSG, "<font color=\"FF0000\">", plr.getName(), "</font><br>");
|
replyMSG.append("<font color=\"FF0000\">" + plr.getName() + "</font><br>");
|
||||||
}
|
}
|
||||||
replyMSG.append("</body></html>");
|
replyMSG.append("</body></html>");
|
||||||
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
final NpcHtmlMessage adminReply = new NpcHtmlMessage();
|
||||||
|
@@ -52,6 +52,11 @@ public abstract class AbstractInstance extends AbstractNpcAI
|
|||||||
super(name, "instances");
|
super(name, "instances");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void enterInstance(L2PcInstance player, String template, int templateId)
|
||||||
|
{
|
||||||
|
enterInstance(player, new InstanceWorld(), template, templateId);
|
||||||
|
}
|
||||||
|
|
||||||
protected void enterInstance(L2PcInstance player, InstanceWorld instance, String template, int templateId)
|
protected void enterInstance(L2PcInstance player, InstanceWorld instance, String template, int templateId)
|
||||||
{
|
{
|
||||||
final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
|
final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
|
||||||
|
@@ -44,10 +44,6 @@ public final class ElcadiasTent extends AbstractInstance
|
|||||||
// Misc
|
// Misc
|
||||||
private static final int TEMPLATE_ID = 158;
|
private static final int TEMPLATE_ID = 158;
|
||||||
|
|
||||||
class ETWorld extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public ElcadiasTent()
|
public ElcadiasTent()
|
||||||
{
|
{
|
||||||
super(ElcadiasTent.class.getSimpleName());
|
super(ElcadiasTent.class.getSimpleName());
|
||||||
@@ -71,7 +67,7 @@ public final class ElcadiasTent extends AbstractInstance
|
|||||||
|| ((ForbiddenBook != null) && ForbiddenBook.isCompleted() && (Monastery == null)) //
|
|| ((ForbiddenBook != null) && ForbiddenBook.isCompleted() && (Monastery == null)) //
|
||||||
|| ((PowerOfSeal != null) && PowerOfSeal.isStarted()))
|
|| ((PowerOfSeal != null) && PowerOfSeal.isStarted()))
|
||||||
{
|
{
|
||||||
enterInstance(talker, new ETWorld(), "ElcadiasTent.xml", TEMPLATE_ID);
|
enterInstance(talker, "ElcadiasTent.xml", TEMPLATE_ID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -43,10 +43,6 @@ public final class FaeronTrainingGrounds1 extends AbstractInstance
|
|||||||
// Misc
|
// Misc
|
||||||
private static final int TEMPLATE_ID = 251;
|
private static final int TEMPLATE_ID = 251;
|
||||||
|
|
||||||
class FTGWorld extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||||
{
|
{
|
||||||
@@ -58,7 +54,7 @@ public final class FaeronTrainingGrounds1 extends AbstractInstance
|
|||||||
|
|
||||||
if (event.equals("enter_instance"))
|
if (event.equals("enter_instance"))
|
||||||
{
|
{
|
||||||
enterInstance(player, new FTGWorld(), "FaeronTrainingGrounds1.xml", TEMPLATE_ID);
|
enterInstance(player, "FaeronTrainingGrounds1.xml", TEMPLATE_ID);
|
||||||
}
|
}
|
||||||
else if (event.equals("exit_instance"))
|
else if (event.equals("exit_instance"))
|
||||||
{
|
{
|
||||||
|
@@ -43,10 +43,6 @@ public final class FaeronTrainingGrounds2 extends AbstractInstance
|
|||||||
// Misc
|
// Misc
|
||||||
private static final int TEMPLATE_ID = 252;
|
private static final int TEMPLATE_ID = 252;
|
||||||
|
|
||||||
class FTGWorld extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||||
{
|
{
|
||||||
@@ -58,7 +54,7 @@ public final class FaeronTrainingGrounds2 extends AbstractInstance
|
|||||||
|
|
||||||
if (event.equals("enter_instance"))
|
if (event.equals("enter_instance"))
|
||||||
{
|
{
|
||||||
enterInstance(player, new FTGWorld(), "FaeronTrainingGrounds2.xml", TEMPLATE_ID);
|
enterInstance(player, "FaeronTrainingGrounds2.xml", TEMPLATE_ID);
|
||||||
}
|
}
|
||||||
else if (event.equals("exit_instance"))
|
else if (event.equals("exit_instance"))
|
||||||
{
|
{
|
||||||
|
@@ -16,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package instances.HarnakUndergroundRuins;
|
package instances.HarnakUndergroundRuins;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
@@ -45,6 +44,21 @@ import instances.AbstractInstance;
|
|||||||
*/
|
*/
|
||||||
public final class HarnakUndergroundRuins extends AbstractInstance
|
public final class HarnakUndergroundRuins extends AbstractInstance
|
||||||
{
|
{
|
||||||
|
protected class HuRWorld extends InstanceWorld
|
||||||
|
{
|
||||||
|
protected int wave = 0;
|
||||||
|
protected int currentNpc = 0;
|
||||||
|
protected int waveNpcId = 0;
|
||||||
|
protected int maximalDefenseCounter = 0;
|
||||||
|
protected int timerCount = 0;
|
||||||
|
protected int enabledSeal = 0;
|
||||||
|
protected Set<L2Npc> spawnedNpc = ConcurrentHashMap.newKeySet();
|
||||||
|
protected boolean openingPlayed = false;
|
||||||
|
protected boolean harnakMessage1 = false;
|
||||||
|
protected boolean harnakMessage2 = false;
|
||||||
|
protected boolean harnakMessage3 = false;
|
||||||
|
}
|
||||||
|
|
||||||
// NPCs
|
// NPCs
|
||||||
private static final int HADEL = 33344;
|
private static final int HADEL = 33344;
|
||||||
private static final int KRAKIA_BATHUS = 27437;
|
private static final int KRAKIA_BATHUS = 27437;
|
||||||
@@ -83,21 +97,6 @@ public final class HarnakUndergroundRuins extends AbstractInstance
|
|||||||
private static final int DOOR_ONE = 16240100;
|
private static final int DOOR_ONE = 16240100;
|
||||||
private static final int DOOR_TWO = 16240102;
|
private static final int DOOR_TWO = 16240102;
|
||||||
|
|
||||||
class HuRWorld extends InstanceWorld
|
|
||||||
{
|
|
||||||
int wave = 0;
|
|
||||||
int currentNpc = 0;
|
|
||||||
int waveNpcId = 0;
|
|
||||||
int maximalDefenseCounter = 0;
|
|
||||||
int timerCount = 0;
|
|
||||||
int enabledSeal = 0;
|
|
||||||
final Set<L2Npc> spawnedNpc = Collections.newSetFromMap(new ConcurrentHashMap<L2Npc, Boolean>());
|
|
||||||
boolean openingPlayed = false;
|
|
||||||
boolean harnakMessage1 = false;
|
|
||||||
boolean harnakMessage2 = false;
|
|
||||||
boolean harnakMessage3 = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HarnakUndergroundRuins()
|
public HarnakUndergroundRuins()
|
||||||
{
|
{
|
||||||
super(HarnakUndergroundRuins.class.getSimpleName());
|
super(HarnakUndergroundRuins.class.getSimpleName());
|
||||||
|
@@ -39,10 +39,6 @@ public final class HideoutOfTheDawn extends AbstractInstance
|
|||||||
// Misc
|
// Misc
|
||||||
private static final int TEMPLATE_ID = 113;
|
private static final int TEMPLATE_ID = 113;
|
||||||
|
|
||||||
class HotDWorld extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public HideoutOfTheDawn()
|
public HideoutOfTheDawn()
|
||||||
{
|
{
|
||||||
super(HideoutOfTheDawn.class.getSimpleName());
|
super(HideoutOfTheDawn.class.getSimpleName());
|
||||||
@@ -57,7 +53,7 @@ public final class HideoutOfTheDawn extends AbstractInstance
|
|||||||
{
|
{
|
||||||
case WOOD:
|
case WOOD:
|
||||||
{
|
{
|
||||||
enterInstance(talker, new HotDWorld(), "HideoutOfTheDawn.xml", TEMPLATE_ID);
|
enterInstance(talker, "HideoutOfTheDawn.xml", TEMPLATE_ID);
|
||||||
return "32593-01.htm";
|
return "32593-01.htm";
|
||||||
}
|
}
|
||||||
case JAINA:
|
case JAINA:
|
||||||
|
@@ -38,10 +38,6 @@ public final class JiniaGuildHideout1 extends AbstractInstance
|
|||||||
// Misc
|
// Misc
|
||||||
private static final int TEMPLATE_ID = 140;
|
private static final int TEMPLATE_ID = 140;
|
||||||
|
|
||||||
class JGH1World extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public JiniaGuildHideout1()
|
public JiniaGuildHideout1()
|
||||||
{
|
{
|
||||||
super(JiniaGuildHideout1.class.getSimpleName());
|
super(JiniaGuildHideout1.class.getSimpleName());
|
||||||
@@ -55,7 +51,7 @@ public final class JiniaGuildHideout1 extends AbstractInstance
|
|||||||
final QuestState qs = talker.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName());
|
final QuestState qs = talker.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName());
|
||||||
if ((qs != null) && qs.isCond(1))
|
if ((qs != null) && qs.isCond(1))
|
||||||
{
|
{
|
||||||
enterInstance(talker, new JGH1World(), "JiniaGuildHideout1.xml", TEMPLATE_ID);
|
enterInstance(talker, "JiniaGuildHideout1.xml", TEMPLATE_ID);
|
||||||
qs.setCond(2, true);
|
qs.setCond(2, true);
|
||||||
}
|
}
|
||||||
return super.onTalk(npc, talker);
|
return super.onTalk(npc, talker);
|
||||||
|
@@ -38,10 +38,6 @@ public final class JiniaGuildHideout2 extends AbstractInstance
|
|||||||
// Misc
|
// Misc
|
||||||
private static final int TEMPLATE_ID = 141;
|
private static final int TEMPLATE_ID = 141;
|
||||||
|
|
||||||
class JGH2World extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public JiniaGuildHideout2()
|
public JiniaGuildHideout2()
|
||||||
{
|
{
|
||||||
super(JiniaGuildHideout2.class.getSimpleName());
|
super(JiniaGuildHideout2.class.getSimpleName());
|
||||||
@@ -55,7 +51,7 @@ public final class JiniaGuildHideout2 extends AbstractInstance
|
|||||||
final QuestState qs = talker.getQuestState(Q10285_MeetingSirra.class.getSimpleName());
|
final QuestState qs = talker.getQuestState(Q10285_MeetingSirra.class.getSimpleName());
|
||||||
if ((qs != null) && qs.isMemoState(1))
|
if ((qs != null) && qs.isMemoState(1))
|
||||||
{
|
{
|
||||||
enterInstance(talker, new JGH2World(), "JiniaGuildHideout2.xml", TEMPLATE_ID);
|
enterInstance(talker, "JiniaGuildHideout2.xml", TEMPLATE_ID);
|
||||||
qs.setCond(2, true);
|
qs.setCond(2, true);
|
||||||
}
|
}
|
||||||
return super.onTalk(npc, talker);
|
return super.onTalk(npc, talker);
|
||||||
|
@@ -38,10 +38,6 @@ public final class JiniaGuildHideout3 extends AbstractInstance
|
|||||||
// Misc
|
// Misc
|
||||||
private static final int TEMPLATE_ID = 145;
|
private static final int TEMPLATE_ID = 145;
|
||||||
|
|
||||||
class JGH3World extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public JiniaGuildHideout3()
|
public JiniaGuildHideout3()
|
||||||
{
|
{
|
||||||
super(JiniaGuildHideout3.class.getSimpleName());
|
super(JiniaGuildHideout3.class.getSimpleName());
|
||||||
@@ -55,7 +51,7 @@ public final class JiniaGuildHideout3 extends AbstractInstance
|
|||||||
final QuestState qs = talker.getQuestState(Q10286_ReunionWithSirra.class.getSimpleName());
|
final QuestState qs = talker.getQuestState(Q10286_ReunionWithSirra.class.getSimpleName());
|
||||||
if ((qs != null) && qs.isMemoState(1))
|
if ((qs != null) && qs.isMemoState(1))
|
||||||
{
|
{
|
||||||
enterInstance(talker, new JGH3World(), "JiniaGuildHideout3.xml", TEMPLATE_ID);
|
enterInstance(talker, "JiniaGuildHideout3.xml", TEMPLATE_ID);
|
||||||
qs.setCond(2, true);
|
qs.setCond(2, true);
|
||||||
}
|
}
|
||||||
return super.onTalk(npc, talker);
|
return super.onTalk(npc, talker);
|
||||||
|
@@ -38,10 +38,6 @@ public final class JiniaGuildHideout4 extends AbstractInstance
|
|||||||
// Misc
|
// Misc
|
||||||
private static final int TEMPLATE_ID = 146;
|
private static final int TEMPLATE_ID = 146;
|
||||||
|
|
||||||
class JGH4World extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public JiniaGuildHideout4()
|
public JiniaGuildHideout4()
|
||||||
{
|
{
|
||||||
super(JiniaGuildHideout4.class.getSimpleName());
|
super(JiniaGuildHideout4.class.getSimpleName());
|
||||||
@@ -55,7 +51,7 @@ public final class JiniaGuildHideout4 extends AbstractInstance
|
|||||||
final QuestState qs = talker.getQuestState(Q10287_StoryOfThoseLeft.class.getSimpleName());
|
final QuestState qs = talker.getQuestState(Q10287_StoryOfThoseLeft.class.getSimpleName());
|
||||||
if ((qs != null) && qs.isMemoState(1))
|
if ((qs != null) && qs.isMemoState(1))
|
||||||
{
|
{
|
||||||
enterInstance(talker, new JGH4World(), "JiniaGuildHideout4.xml", TEMPLATE_ID);
|
enterInstance(talker, "JiniaGuildHideout4.xml", TEMPLATE_ID);
|
||||||
qs.setCond(2, true);
|
qs.setCond(2, true);
|
||||||
}
|
}
|
||||||
return super.onTalk(npc, talker);
|
return super.onTalk(npc, talker);
|
||||||
|
@@ -51,10 +51,6 @@ public final class PailakaSongOfIceAndFire extends AbstractInstance
|
|||||||
private static final int TEMPLATE_ID = 43;
|
private static final int TEMPLATE_ID = 43;
|
||||||
private static final int ZONE = 20108;
|
private static final int ZONE = 20108;
|
||||||
|
|
||||||
class PSoIWorld extends InstanceWorld
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public PailakaSongOfIceAndFire()
|
public PailakaSongOfIceAndFire()
|
||||||
{
|
{
|
||||||
super(PailakaSongOfIceAndFire.class.getSimpleName());
|
super(PailakaSongOfIceAndFire.class.getSimpleName());
|
||||||
@@ -84,7 +80,7 @@ public final class PailakaSongOfIceAndFire extends AbstractInstance
|
|||||||
{
|
{
|
||||||
case "enter":
|
case "enter":
|
||||||
{
|
{
|
||||||
enterInstance(player, new PSoIWorld(), "PailakaSongOfIceAndFire.xml", TEMPLATE_ID);
|
enterInstance(player, "PailakaSongOfIceAndFire.xml", TEMPLATE_ID);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "GARGOS_LAUGH":
|
case "GARGOS_LAUGH":
|
||||||
|
@@ -2,5 +2,5 @@
|
|||||||
What do you know about Pailaka? The Ivory Tower discovered it shortly after Kamaloka.<br>
|
What do you know about Pailaka? The Ivory Tower discovered it shortly after Kamaloka.<br>
|
||||||
Apparently, it's a kind of "pocket reality" created by Kamaloka's energy acting on places that are filled with a high degree of chaos: old battlefields or the sites of powerful magical experiments, for example.<br>
|
Apparently, it's a kind of "pocket reality" created by Kamaloka's energy acting on places that are filled with a high degree of chaos: old battlefields or the sites of powerful magical experiments, for example.<br>
|
||||||
Although Pailaka is not part of our reality, what happens there can affect our world...<br>
|
Although Pailaka is not part of our reality, what happens there can affect our world...<br>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 32497-02.htm">Keep listening.</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 32497-02.htm">"Ah... Please go on."</Button>
|
||||||
</body></html>
|
</body></html>
|
@@ -1,9 +1,8 @@
|
|||||||
<html><body>Inspector Adler:<br>
|
<html><body>Inspector Adler:<br>
|
||||||
We inspectors were sent by the Ivory Tower to find more about that place.<br>
|
The Ivory Tower sent our inspection team to find out what we could about the place.<br>
|
||||||
We followed the flow of mana and traced the energy of Kamaloka to find likely spots.<br>
|
We followed the flow of mana, tracing the energy of Kamaloka to find likely spots to look.<br>
|
||||||
At present, Pailaka has not affected our reality, but who knows what may happen in time? It may even impact next year's harvest.<br>
|
So far, it seems that Pailaka has not affected our reality, but who knows what may happen as time goes by? It might even impact next year's harvest!<br>
|
||||||
We discovered Pailaka in the Forgotten Temple close to here. If you are willing, I would like you to enter Pailaka and restore order. Will you do it?<br>
|
We found Pailaka, it's in the Forgotten Temple, very close to here. If you are willing, I'd like you to enter Pailaka and restore order. Can I trust you to do so?<br>
|
||||||
<font color="LEVEL">(You will be rewarded for your efforts. Vitality points will be granted to you immediately upon completing the quest. If you receive the reward while your Vitality Level is high, though, you may notice a slight reduction.)</font><br>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 32497-03.htm">"Absolutely."</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 32497-03.htm">Say yes.</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 32497-04.htm">Quest</Button>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 32497-04.htm">Say no.</Button>
|
|
||||||
</body></html>
|
</body></html>
|
@@ -1,3 +1,3 @@
|
|||||||
<html><body>Inspector Adler:<br>
|
<html><body>Investigator Adler:<br>
|
||||||
It is time for you to use the Scroll of Escape I gave you.
|
It is time for you to use the Scroll of Escape I gave you.
|
||||||
</body></html>
|
</body></html>
|
@@ -1,6 +1,17 @@
|
|||||||
<html><body>Inspector Adler:<br>
|
<html><body>Inspector Adler:<br>
|
||||||
The Spirite's power is flowing smoothly. You have certainly justfield my trust in you!<br>
|
It seems I chose wisely when I asked you to take on this task. The power levels here are stabilizing. <br>
|
||||||
Thanks to you, we are rapidy restoring stability. Of course, that means the dimensional portal that connects your world to ours is also quickly closing.<br>
|
Thanks to you, the connection between our world and this other dimension is fading!<br>
|
||||||
Hurry and take my hand! That sword belongs to this dimension, so you'd best leave it behind. Ah, I can see you'd rather keep it -- but such a powerful item may desrupt travel between dimensions!<br>
|
Here, take my hand! And leave that sword behind! It belongs to this dimension and will block us from returning! You can have one of these fine weapons to replace it. Choose whichever you'd like, but hurry!<br>
|
||||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 32510-02.htm">Take his hand.</Button>
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 226">Cursed Dagger</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 160">Battle Axe</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 72">StormBringer</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 232">Dark Elven Dagger</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 192">Crystal Staff</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 194">Heavy Doom Axe</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 263">Chakram</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 193">Stick of Faith</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 173">Skull Graver</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 281">Crystallized Ice Bow</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 298">Orcish Glaive</Button>
|
||||||
|
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00128_PailakaSongOfIceAndFire 71">Flamberge</Button>
|
||||||
</body></html>
|
</body></html>
|
@@ -1,3 +1,3 @@
|
|||||||
<html><body>Inspector Adler:<br>
|
<html><body>Investigator Adler:<br>
|
||||||
Please accept this Scroll of Escape. Its power will allow you to safely return to your world.
|
A fine choice. Use it well. Also, take this Scroll of Escape. It should take you back to where you came from.
|
||||||
</body></html>
|
</body></html>
|
@@ -21,7 +21,6 @@ import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
|||||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.model.entity.Instance;
|
import com.l2jmobius.gameserver.model.entity.Instance;
|
||||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
|
||||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||||
import com.l2jmobius.gameserver.model.quest.State;
|
import com.l2jmobius.gameserver.model.quest.State;
|
||||||
@@ -59,17 +58,10 @@ public final class Q00128_PailakaSongOfIceAndFire extends Quest
|
|||||||
private static final int HEAL_POTION = 13033;
|
private static final int HEAL_POTION = 13033;
|
||||||
private static final int FIRE_ENHANCER = 13040;
|
private static final int FIRE_ENHANCER = 13040;
|
||||||
private static final int WATER_ENHANCER = 13041;
|
private static final int WATER_ENHANCER = 13041;
|
||||||
private static final int[] REWARDS =
|
private static final int SCROLL_OF_ESCAPE = 736;
|
||||||
{
|
|
||||||
13294, // Pailaka Ring
|
|
||||||
13293, // Pailaka Earring
|
|
||||||
736, // Scroll of Escape
|
|
||||||
};
|
|
||||||
// Skills
|
|
||||||
private static SkillHolder VITALITY_REPLENISHING = new SkillHolder(5774, 1);
|
|
||||||
// Misc
|
// Misc
|
||||||
private static final int MIN_LEVEL = 36;
|
private static final int MIN_LEVEL = 49;
|
||||||
private static final int MAX_LEVEL = 42;
|
private static final int MAX_LEVEL = 55;
|
||||||
private static final int EXIT_TIME = 5;
|
private static final int EXIT_TIME = 5;
|
||||||
|
|
||||||
public Q00128_PailakaSongOfIceAndFire()
|
public Q00128_PailakaSongOfIceAndFire()
|
||||||
@@ -78,6 +70,8 @@ public final class Q00128_PailakaSongOfIceAndFire extends Quest
|
|||||||
addStartNpc(ADLER1);
|
addStartNpc(ADLER1);
|
||||||
addTalkId(ADLER1, ADLER2, SINAI, INSPECTOR);
|
addTalkId(ADLER1, ADLER2, SINAI, INSPECTOR);
|
||||||
addKillId(HILLAS, PAPION, KINSUS, GARGOS, ADIANTUM);
|
addKillId(HILLAS, PAPION, KINSUS, GARGOS, ADIANTUM);
|
||||||
|
addCondMinLevel(MIN_LEVEL, "32497-05.htm");
|
||||||
|
addCondMaxLevel(MAX_LEVEL, "32497-06.htm");
|
||||||
registerQuestItems(SWORD, ENH_SWORD1, ENH_SWORD2, BOOK1, BOOK2, BOOK3, BOOK4, BOOK5, BOOK6, BOOK7, WATER_ESSENCE, FIRE_ESSENCE, SHIELD_POTION, HEAL_POTION, FIRE_ENHANCER, WATER_ENHANCER);
|
registerQuestItems(SWORD, ENH_SWORD1, ENH_SWORD2, BOOK1, BOOK2, BOOK3, BOOK4, BOOK5, BOOK6, BOOK7, WATER_ESSENCE, FIRE_ESSENCE, SHIELD_POTION, HEAL_POTION, FIRE_ENHANCER, WATER_ENHANCER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,25 +146,28 @@ public final class Q00128_PailakaSongOfIceAndFire extends Quest
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "32510-02.htm":
|
case "226": // Cursed Dagger
|
||||||
|
case "160": // Battle Axe
|
||||||
|
case "72": // StormBringer
|
||||||
|
case "232": // Dark Elven Dagger
|
||||||
|
case "192": // Crystal Staff
|
||||||
|
case "194": // Heavy Doom Axe
|
||||||
|
case "263": // Chakram
|
||||||
|
case "193": // Stick of Faith
|
||||||
|
case "173": // Skill Graver
|
||||||
|
case "281": // Crystallized Ice Bow
|
||||||
|
case "298": // Orcish Glaive
|
||||||
|
case "71": // Flamberge
|
||||||
{
|
{
|
||||||
qs.exitQuest(false, true);
|
|
||||||
|
|
||||||
final Instance inst = InstanceManager.getInstance().getInstance(npc.getInstanceId());
|
final Instance inst = InstanceManager.getInstance().getInstance(npc.getInstanceId());
|
||||||
inst.setDuration(EXIT_TIME * 60000);
|
inst.setDuration(EXIT_TIME * 60000);
|
||||||
inst.setEmptyDestroyTime(0);
|
inst.setEmptyDestroyTime(0);
|
||||||
|
qs.exitQuest(false, true);
|
||||||
if (inst.containsPlayer(player.getObjectId()))
|
giveAdena(player, 187200, true);
|
||||||
{
|
addExpAndSp(player, 1860000, 446);
|
||||||
npc.setTarget(player);
|
giveItems(player, SCROLL_OF_ESCAPE, 1);
|
||||||
npc.doCast(VITALITY_REPLENISHING.getSkill());
|
giveItems(player, Integer.parseInt(event), 1);
|
||||||
addExpAndSp(player, 810000, 50000);
|
htmltext = "32510-2.htm";
|
||||||
for (int id : REWARDS)
|
|
||||||
{
|
|
||||||
giveItems(player, id, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
htmltext = event;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -195,18 +192,7 @@ public final class Q00128_PailakaSongOfIceAndFire extends Quest
|
|||||||
{
|
{
|
||||||
case State.CREATED:
|
case State.CREATED:
|
||||||
{
|
{
|
||||||
if (player.getLevel() < MIN_LEVEL)
|
htmltext = "32497-01.htm";
|
||||||
{
|
|
||||||
htmltext = "32497-05.htm";
|
|
||||||
}
|
|
||||||
else if (player.getLevel() > MAX_LEVEL)
|
|
||||||
{
|
|
||||||
htmltext = "32497-06.htm";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
htmltext = "32497-01.htm";
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case State.STARTED:
|
case State.STARTED:
|
||||||
|
@@ -21,7 +21,6 @@ import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
|||||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.model.entity.Instance;
|
import com.l2jmobius.gameserver.model.entity.Instance;
|
||||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
|
||||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||||
import com.l2jmobius.gameserver.model.quest.State;
|
import com.l2jmobius.gameserver.model.quest.State;
|
||||||
@@ -54,8 +53,6 @@ public final class Q00129_PailakaDevilsLegacy extends Quest
|
|||||||
private static final int PAILAKA_KEY = 13150; // Pailaka All-Purpose Key
|
private static final int PAILAKA_KEY = 13150; // Pailaka All-Purpose Key
|
||||||
private static final int BRACELET = 13295; // Pailaka Bracelet
|
private static final int BRACELET = 13295; // Pailaka Bracelet
|
||||||
private static final int ESCAPE = 736; // Scroll of Escape
|
private static final int ESCAPE = 736; // Scroll of Escape
|
||||||
// Skills
|
|
||||||
private static final SkillHolder VITALITY_REPLENISHING = new SkillHolder(5774, 2); // Pailaka Reward Vitality Replenishing
|
|
||||||
// Misc
|
// Misc
|
||||||
private static final int MIN_LEVEL = 61;
|
private static final int MIN_LEVEL = 61;
|
||||||
private static final int MAX_LEVEL = 67;
|
private static final int MAX_LEVEL = 67;
|
||||||
@@ -225,7 +222,6 @@ public final class Q00129_PailakaDevilsLegacy extends Quest
|
|||||||
{
|
{
|
||||||
htmltext = "32508-00.htm";
|
htmltext = "32508-00.htm";
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ADVENTURER2:
|
case ADVENTURER2:
|
||||||
@@ -242,9 +238,8 @@ public final class Q00129_PailakaDevilsLegacy extends Quest
|
|||||||
inst.setEmptyDestroyTime(0);
|
inst.setEmptyDestroyTime(0);
|
||||||
if (inst.containsPlayer(player.getObjectId()))
|
if (inst.containsPlayer(player.getObjectId()))
|
||||||
{
|
{
|
||||||
npc.setTarget(player);
|
addExpAndSp(player, 4010000, 962);
|
||||||
npc.doCast(VITALITY_REPLENISHING.getSkill());
|
giveAdena(player, 411500, true);
|
||||||
addExpAndSp(player, 10800000, 950000);
|
|
||||||
rewardItems(player, BRACELET, 1);
|
rewardItems(player, BRACELET, 1);
|
||||||
rewardItems(player, ESCAPE, 1);
|
rewardItems(player, ESCAPE, 1);
|
||||||
}
|
}
|
||||||
|
@@ -1755,14 +1755,24 @@
|
|||||||
<set name="isDebuff" val="true" />
|
<set name="isDebuff" val="true" />
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10060" levels="1" name="Aggression Attack">
|
<skill id="10060" levels="1" name="Aggression Attack">
|
||||||
|
<!-- Provokes. -->
|
||||||
|
<set name="abnormalLvl" val="1" />
|
||||||
|
<set name="abnormalTime" val="3" />
|
||||||
|
<set name="abnormalType" val="TARGET_LOCK" />
|
||||||
|
<set name="castRange" val="600" />
|
||||||
|
<set name="coolTime" val="200" />
|
||||||
|
<set name="effectPoint" val="-3928" />
|
||||||
|
<set name="effectRange" val="1100" />
|
||||||
|
<set name="hitTime" val="700" />
|
||||||
<set name="icon" val="icon.skill0086" />
|
<set name="icon" val="icon.skill0086" />
|
||||||
<set name="operateType" val="A2" />
|
|
||||||
<set name="targetType" val="ONE" />
|
|
||||||
<set name="isDebuff" val="true" />
|
<set name="isDebuff" val="true" />
|
||||||
<set name="abnormalTime" val="2" />
|
<set name="magicLvl" val="85" />
|
||||||
<set name="effectPoint" val="-500" />
|
<set name="reuseDelay" val="6000" />
|
||||||
|
<set name="operateType" val="A2" />
|
||||||
|
<set name="reuseDelay" val="6000" />
|
||||||
|
<set name="staticReuse" val="true" />
|
||||||
<set name="isMagic" val="4" />
|
<set name="isMagic" val="4" />
|
||||||
<set name="trait" val="DERANGEMENT" />
|
<set name="targetType" val="ONE" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="TargetMe" />
|
<effect name="TargetMe" />
|
||||||
<effect name="GetAgro" />
|
<effect name="GetAgro" />
|
||||||
@@ -2363,35 +2373,32 @@
|
|||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10090" levels="4" name="Provoking Shackle">
|
<skill id="10090" levels="4" name="Provoking Shackle">
|
||||||
|
<!-- Provokes nearby enemies and inflicts Hold for 9 sec. -->
|
||||||
<table name="#mpConsume"> 59 61 63 65 </table>
|
<table name="#mpConsume"> 59 61 63 65 </table>
|
||||||
<table name="#magicLvl"> 85 90 95 99 </table>
|
<table name="#magicLvl"> 85 90 95 99 </table>
|
||||||
<set name="abnormalLvl" val="1" />
|
<table name="#abnormalLvl"> 1 2 3 4 </table>
|
||||||
|
<set name="abnormalLvl" val="#abnormalLvl" />
|
||||||
<set name="abnormalTime" val="9" />
|
<set name="abnormalTime" val="9" />
|
||||||
<set name="abnormalType" val="ROOT_PHYSICALLY" />
|
<set name="abnormalType" val="ROOT_PHYSICALLY" />
|
||||||
<set name="abnormalVisualEffect" val="ROOT" />
|
<set name="activateRate" val="80" />
|
||||||
<set name="activateRate" val="50" />
|
<set name="basicProperty" val="CON" />
|
||||||
<set name="affectLimit" val="10-10" />
|
|
||||||
<set name="affectRange" val="100" />
|
|
||||||
<set name="basicProperty" val="MEN" />
|
|
||||||
<set name="castRange" val="600" />
|
|
||||||
<set name="effectPoint" val="-100" /> <!-- Need verify -->
|
|
||||||
<set name="effectRange" val="1100" />
|
|
||||||
<set name="coolTime" val="470" />
|
<set name="coolTime" val="470" />
|
||||||
<set name="hitTime" val="1000" />
|
<set name="effectRange" val="200" />
|
||||||
<set name="icon" val="icon.skill10090new" />
|
|
||||||
<set name="isDebuff" val="true" />
|
<set name="isDebuff" val="true" />
|
||||||
<set name="lvlBonusRate" val="2" />
|
<set name="hitTime" val="1000" />
|
||||||
|
<set name="operateType" val="A2" />
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="mpConsume" val="#mpConsume" />
|
<set name="mpConsume" val="#mpConsume" />
|
||||||
<set name="operateType" val="A2" />
|
|
||||||
<set name="reuseDelay" val="60000" />
|
<set name="reuseDelay" val="60000" />
|
||||||
<set name="rideState" val="NONE" />
|
|
||||||
<set name="targetType" val="AURA" />
|
<set name="targetType" val="AURA" />
|
||||||
|
<set name="icon" val="icon.skill10090new" />
|
||||||
<set name="trait" val="HOLD" />
|
<set name="trait" val="HOLD" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Root" />
|
|
||||||
<effect name="TargetMe" />
|
<effect name="TargetMe" />
|
||||||
<effect name="GetAgro" />
|
<effect name="Root" />
|
||||||
|
<effect name="DefenceTrait">
|
||||||
|
<param HOLD="100" />
|
||||||
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10091" levels="1" name="Templar's Will">
|
<skill id="10091" levels="1" name="Templar's Will">
|
||||||
|
@@ -1,36 +1,48 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
|
||||||
<skill id="10244" levels="3" name="True Vanguard">
|
<skill id="10244" levels="3" name="True Vanguard">
|
||||||
|
<!-- Damage inflicted on monsters + 50%, and M. Skill MP Consumption + 30%. -->
|
||||||
<table name="#magicLvl"> 85 90 95 </table>
|
<table name="#magicLvl"> 85 90 95 </table>
|
||||||
<table name="#power"> 1.5 1.55 1.6 </table>
|
<table name="#pve"> 1.5 1.55 1.6 </table>
|
||||||
<set name="icon" val="icon.skill0810" />
|
<set name="icon" val="icon.skill0810" />
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="operateType" val="T" />
|
<set name="operateType" val="T" />
|
||||||
<set name="rideState" val="NONE" />
|
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<mul stat="pvePhysDmg" val="#power" />
|
<mul stat="physicalMpConsumeRate" val="1.3" />
|
||||||
<mul stat="pvpPhysSkillsDmg" val="#power" />
|
<mul stat="pvePhysDmg" val="#pve" />
|
||||||
<mul stat="magicalMpConsumeRate" val="1.3" />
|
<mul stat="pvePhysSkillsDmg" val="#pve" />
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10245" levels="1" name="Wizard - Individual Passive">
|
<skill id="10245" levels="1" name="Wizard - Individual Passive">
|
||||||
<!-- AUTO GENERATED SKILL -->
|
<set name="magicLvl" val="85" />
|
||||||
<set name="icon" val="icon.skill0217" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.skill0217" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
|
<for>
|
||||||
|
<effect name="Buff">
|
||||||
|
<mul stat="runSpd" val="1.3" />
|
||||||
|
</effect>
|
||||||
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10246" levels="1" name="Wizard - Individual">
|
<skill id="10246" levels="1" name="Wizard - Individual">
|
||||||
<!-- AUTO GENERATED SKILL -->
|
<!-- TODO: Abno Type -->
|
||||||
<!-- Atk. Spd. + 30% for 5 seconds. -->
|
<!-- Atk. Spd. + 30% for 5 seconds. -->
|
||||||
|
<set name="abnormalLvl" val="1" />
|
||||||
|
<set name="abnormalTime" val="5" />
|
||||||
<set name="icon" val="icon.skill1543" />
|
<set name="icon" val="icon.skill1543" />
|
||||||
<set name="operateType" val="A2" />
|
<set name="operateType" val="A2" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<set name="hitTime" val="500" />
|
<set name="hitTime" val="500" />
|
||||||
<set name="reuseDelay" val="5000" />
|
<set name="reuseDelay" val="5000" />
|
||||||
<set name="isMagic" val="4" />
|
<set name="isMagic" val="4" />
|
||||||
|
<for>
|
||||||
|
<effect name="Buff">
|
||||||
|
<mul stat="pAtkSpd" val="1.3" />
|
||||||
|
</effect>
|
||||||
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10247" levels="1" name="Knight - Individual Passive">
|
<skill id="10247" levels="1" name="Knight - Individual Passive">
|
||||||
<!-- AUTO GENERATED SKILL -->
|
<!-- AUTO GENERATED SKILL -->
|
||||||
@@ -39,14 +51,21 @@
|
|||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10248" levels="1" name="Knight - Individual">
|
<skill id="10248" levels="1" name="Knight - Individual">
|
||||||
<!-- AUTO GENERATED SKILL -->
|
<!-- TODO: Abno Type -->
|
||||||
<!-- Atk. Spd. + 30% for 5 seconds. -->
|
<!-- Atk. Spd. + 30% for 5 seconds. -->
|
||||||
|
<set name="abnormalLvl" val="1" />
|
||||||
|
<set name="abnormalTime" val="5" />
|
||||||
<set name="icon" val="icon.skill1543" />
|
<set name="icon" val="icon.skill1543" />
|
||||||
<set name="operateType" val="A2" />
|
<set name="operateType" val="A2" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<set name="hitTime" val="500" />
|
<set name="hitTime" val="500" />
|
||||||
<set name="reuseDelay" val="6000" />
|
<set name="reuseDelay" val="6000" />
|
||||||
<set name="isMagic" val="4" />
|
<set name="isMagic" val="4" />
|
||||||
|
<for>
|
||||||
|
<effect name="Buff">
|
||||||
|
<mul stat="pAtkSpd" val="1.3" />
|
||||||
|
</effect>
|
||||||
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10249" levels="1" name="Heavy Hit">
|
<skill id="10249" levels="1" name="Heavy Hit">
|
||||||
<!-- AUTO GENERATED SKILL -->
|
<!-- AUTO GENERATED SKILL -->
|
||||||
@@ -600,107 +619,103 @@
|
|||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10265" levels="11" name="Eruption" enchantGroup1="11" enchantGroup2="11" enchantGroup3="11">
|
<skill id="10265" levels="8" name="Eruption" enchantGroup1="10" enchantGroup2="10" enchantGroup3="10" enchantGroup4="10" enchantGroup5="10" enchantGroup6="10" enchantGroup7="10" enchantGroup8="10">
|
||||||
<!-- Source: https://l2wiki.com/Eruption_-_Tyrr_Doombringer -->
|
<!-- TODO: Power is decreased by 10% when equipped with a sword/blunt/fist weapon and increased by 50% when equipped with a spear. -->
|
||||||
|
<!-- Attacks nearby enemies with 11557 Power added to P. Atk., Stuns them for 2 seconds and remove their target. Power is decreased by 10% when equipped with a sword/blunt/fist weapon and increased by 50% when equipped with a spear. Requires a sword, blunt, spear, fist, dual blunt weapon, or dualsword weapon to be equipped. Over-hit. Critical. -->
|
||||||
|
<table name="#effectPoints"> -169 -170 -171 -172 -173 -174 -175 -176 </table> <!-- Guessed -->
|
||||||
|
<table name="#abnormalLvl"> 1 2 3 4 5 6 7 8 </table>
|
||||||
|
<table name="#mpConsumes"> 122 124 129 133 137 142 146 151 </table>
|
||||||
<table name="#enchelementPower"> 30 33 36 40 43 46 50 53 56 60 </table>
|
<table name="#enchelementPower"> 30 33 36 40 43 46 50 53 56 60 </table>
|
||||||
<table name="#enchPower"> 17545 17945 18344 18743 19142 19542 19941 20340 20739 21139 21545 27945 28344 28743 29142 29542 29941 30340 30739 31139 </table>
|
<table name="#enchPower"> 17545 17945 18344 18743 19142 19542 19941 20340 20739 21139 </table>
|
||||||
<table name="#ench1MpConsume"> 144 138 132 126 120 114 108 102 96 90 </table>
|
<table name="#ench1MpConsume"> 144 138 132 126 120 114 108 102 96 90 </table>
|
||||||
<table name="#magicLvl"> 85 86 88 90 92 94 96 98 101 103 105 </table>
|
<table name="#magicLvl"> 85 86 88 90 92 94 96 98 </table>
|
||||||
<table name="#enchMagicLvl"> 98 98 98 98 98 99 99 99 99 99 </table>
|
<table name="#power"> 11557 11956 12754 13533 14351 15155 15948 16747 </table>
|
||||||
<table name="#power"> 11557 11956 12754 13533 14351 15155 15948 16747 17896 18622 19348 </table>
|
<table name="#activationRate"> 30 32 34 36 38 40 42 44 </table>
|
||||||
<table name="#powerDebuff"> 30 32 34 36 38 40 42 44 46 48 50 </table>
|
<set name="abnormalLvl" val="#abnormalLvl" />
|
||||||
<table name="#mpConsume"> 122 124 129 133 137 142 146 151 156 161 166 </table>
|
|
||||||
<table name="#ench9Reuse"> 4900 4800 4700 4600 4500 4400 4300 4200 4100 4000 </table> <!-- Need verify -->
|
|
||||||
<table name="#abnormalLvls"> 1 2 3 4 5 6 7 8 9 10 11 </table>
|
|
||||||
<table name="#ench2ActivateRates"> 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 </table>
|
|
||||||
<table name="#enchpDef"> 0.95 0.94 0.93 0.92 0.91 0.9 0.89 0.88 0.87 0.86 0.85 0.84 0.84 0.83 0.83 0.82 0.82 0.81 0.81 0.8 </table>
|
|
||||||
<set name="mpConsume" val="#mpConsume" />
|
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
|
||||||
<set name="power" val="#power" />
|
|
||||||
<set name="targetType" val="AURA" />
|
|
||||||
<set name="hitTime" val="1390" />
|
|
||||||
<set name="coolTime" val="200" />
|
|
||||||
<set name="castRange" val="200" />
|
|
||||||
<set name="reuseDelay" val="5000" />
|
|
||||||
<set name="abnormalLvl" val="#abnormalLvls" />
|
|
||||||
<set name="abnormalTime" val="2" />
|
<set name="abnormalTime" val="2" />
|
||||||
<set name="abnormalType" val="STUN" />
|
<set name="abnormalType" val="STUN" />
|
||||||
<set name="abnormalVisualEffect" val="STUN" />
|
<set name="affectLimit" val="6-12" />
|
||||||
<set name="fanRange" val="0,0,80,150" />
|
<set name="affectRange" val="200" />
|
||||||
<set name="affectLimit" val="5-12" />
|
<set name="activateRate" val="#activationRate" />
|
||||||
<set name="affectRange" val="150" />
|
<set name="baseCritRate" val="15" />
|
||||||
<set name="overHit" val="true" />
|
<set name="effectPoint" val="#effectPoints" />
|
||||||
<set name="trait" val="SHOCK" />
|
<set name="icon" val="icon.skill10265" />
|
||||||
<set name="baseCritRate" val="7" />
|
<set name="lvlBonusRate" val="1" />
|
||||||
<set name="operateType" val="A2" />
|
|
||||||
<set name="effectRange" val="600" />
|
|
||||||
<set name="effectPoint" val="-100" /> <!-- Need verify -->
|
|
||||||
<set name="isDebuff" val="true" />
|
|
||||||
<enchant1 name="power" val="#enchPower" />
|
|
||||||
<enchant1 name="magicLvl" val="105" />
|
|
||||||
<enchant2 name="magicLvl" val="105" />
|
|
||||||
<enchant2 name="activateRate" val="#ench2ActivateRates" />
|
|
||||||
<enchant3 name="magicLvl" val="105" />
|
|
||||||
<enchant3for>
|
|
||||||
<effect name="Debuff">
|
|
||||||
<mul stat="pDef" val="#enchpDef" />
|
|
||||||
</effect>
|
|
||||||
</enchant3for>
|
|
||||||
<cond msgId="113" addName="1">
|
|
||||||
<using kind="SWORD, BLUNT, DUAL, DUALFIST, POLE, DUALBLUNT" />
|
|
||||||
</cond>
|
|
||||||
<for>
|
|
||||||
<effect name="PhysicalAttack" />
|
|
||||||
<effect name="RandomizeHate">
|
|
||||||
<param power="#powerDebuff" />
|
|
||||||
</effect>
|
|
||||||
<effect name="TargetCancel">
|
|
||||||
<param power="#powerDebuff" />
|
|
||||||
</effect>
|
|
||||||
<effect name="Stun">
|
|
||||||
<param power="#powerDebuff" />
|
|
||||||
</effect>
|
|
||||||
</for>
|
|
||||||
</skill>
|
|
||||||
<skill id="10266" levels="11" name="Giant Punch" enchantGroup1="11" enchantGroup2="11">
|
|
||||||
<!-- Source: https://l2wiki.com/Giant_Punch_-_Tyrr_Titan -->
|
|
||||||
<table name="#ench1MpConsume"> 91 87 83 79 76 72 68 64 60 57 </table>
|
|
||||||
<table name="#ench2Chance"> 61 62 63 64 65 66 67 68 69 70 </table>
|
|
||||||
<table name="#magicLvl"> 85 87 88 91 93 95 97 99 101 103 105 </table>
|
|
||||||
<table name="#ench4Hex"> 0.99 0.98 0.97 0.96 0.95 0.94 0.93 0.92 0.91 0.90 </table>
|
|
||||||
<table name="#ench3Attack"> 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 </table> <!-- Need verify -->
|
|
||||||
<table name="#mpConsume"> 76 79 81 84 87 90 92 95 98 101 104 </table>
|
|
||||||
<table name="#ench9Reuse"> 119000 118000 117000 116000 115000 114000 113000 112000 111000 110000 </table> <!-- Need verify -->
|
|
||||||
<table name="#ench2ActivateRates"> 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 </table>
|
|
||||||
<table name="#enchpDef"> 0.95 0.94 0.93 0.92 0.91 0.9 0.89 0.88 0.87 0.86 0.85 0.84 0.84 0.83 0.83 0.82 0.82 0.81 0.81 0.8 </table>
|
|
||||||
<set name="mpConsume" val="#mpConsume" />
|
|
||||||
<set name="element" val="3" />
|
|
||||||
<set name="abnormalTime" val="5" />
|
|
||||||
<set name="abnormalType" val="KNOCK_DOWN" />
|
|
||||||
<set name="abnormalVisualEffect" val="KNOCK_DOWN" />
|
|
||||||
<set name="fanRange" val="0,0,80,150" />
|
|
||||||
<set name="affectLimit" val="5-12" />
|
|
||||||
<set name="affectRange" val="150" />
|
|
||||||
<set name="hitTime" val="1000" />
|
|
||||||
<set name="coolTime" val="300" />
|
|
||||||
<set name="reuseDelay" val="120000" />
|
|
||||||
<set name="effectPoint" val="-100" /> <!-- Need verify -->
|
|
||||||
<set name="flyRadius" val="55" />
|
|
||||||
<set name="trait" val="KNOCKDOWN" />
|
|
||||||
<set name="isDebuff" val="true" />
|
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
|
||||||
<set name="operateType" val="A2" />
|
<set name="operateType" val="A2" />
|
||||||
<set name="targetType" val="AURA" />
|
<set name="targetType" val="AURA" />
|
||||||
<enchant1 name="magicLvl" val="105" />
|
<set name="mpConsume" val="#mpConsumes" />
|
||||||
<enchant1 name="activateRate" val="#ench2ActivateRates" />
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<enchant2 name="magicLvl" val="105" />
|
<set name="power" val="#power" />
|
||||||
<enchant2for>
|
<set name="basicProperty" val="CON" />
|
||||||
<effect name="Debuff">
|
<set name="castRange" val="40" />
|
||||||
<mul stat="pDef" val="#enchpDef" />
|
<set name="hitTime" val="1390" />
|
||||||
</effect>
|
<set name="coolTime" val="200" />
|
||||||
</enchant2for>
|
<set name="reuseDelay" val="5000" />
|
||||||
|
<set name="isDebuff" val="true" />
|
||||||
|
<set name="rideState" val="NONE" />
|
||||||
|
<set name="trait" val="SHOCK" />
|
||||||
|
<enchant1 name="mpConsume" val="#ench1MpConsume" />
|
||||||
|
<enchant1 name="power" val="#enchPower" />
|
||||||
|
<enchant2 name="pvpPower" val="#enchPower" />
|
||||||
|
<enchant3 name="element" val="0" />
|
||||||
|
<enchant3 name="elementPower" val="#enchelementPower" />
|
||||||
|
<enchant3 name="power" val="#enchPower" />
|
||||||
|
<enchant4 name="element" val="1" />
|
||||||
|
<enchant4 name="elementPower" val="#enchelementPower" />
|
||||||
|
<enchant4 name="power" val="#enchPower" />
|
||||||
|
<enchant5 name="element" val="2" />
|
||||||
|
<enchant5 name="elementPower" val="#enchelementPower" />
|
||||||
|
<enchant5 name="power" val="#enchPower" />
|
||||||
|
<enchant6 name="element" val="3" />
|
||||||
|
<enchant6 name="elementPower" val="#enchelementPower" />
|
||||||
|
<enchant6 name="power" val="#enchPower" />
|
||||||
|
<enchant7 name="element" val="4" />
|
||||||
|
<enchant7 name="elementPower" val="#enchelementPower" />
|
||||||
|
<enchant7 name="power" val="#enchPower" />
|
||||||
|
<enchant8 name="element" val="5" />
|
||||||
|
<enchant8 name="elementPower" val="#enchelementPower" />
|
||||||
|
<enchant8 name="power" val="#enchPower" />
|
||||||
<cond msgId="113" addName="1">
|
<cond msgId="113" addName="1">
|
||||||
<using kind="SWORD, BLUNT, DUAL, DUALFIST, POLE, DUALBLUNT" />
|
<using kind="POLE, SWORD, BLUNT, DUAL, DUALFIST, DUALBLUNT" />
|
||||||
|
</cond>
|
||||||
|
<for>
|
||||||
|
<effect name="PhysicalAttack" />
|
||||||
|
<effect name="Stun" />
|
||||||
|
</for>
|
||||||
|
</skill>
|
||||||
|
<skill id="10266" levels="8" name="Giant Punch" enchantGroup1="10" enchantGroup2="10" enchantGroup3="10" enchantGroup4="10">
|
||||||
|
<!-- Strikes down at the ground with a fist to Knock Down nearby enemies for 5 sec. Requires a sword, blunt, spear, fist, dual blunt weapon, or dualsword weapon to be equipped. -->
|
||||||
|
<table name="#abnormalLvl"> 1 2 3 4 5 6 7 8 </table>
|
||||||
|
<table name="#ench1MpConsume"> 91 87 83 79 76 72 68 64 60 57 </table>
|
||||||
|
<table name="#ench2ActivateRates"> 61 62 63 64 65 66 67 68 69 70 </table>
|
||||||
|
<table name="#magicLvl"> 85 87 88 91 93 95 97 99 </table>
|
||||||
|
<table name="#ench4Hex"> 0.99 0.98 0.97 0.96 0.95 0.94 0.93 0.92 0.91 0.90 </table>
|
||||||
|
<table name="#ench3Power"> 3800 3900 4000 4100 4200 4300 4400 4500 4600 4700 </table>
|
||||||
|
<table name="#mpConsumes"> 76 79 81 84 87 90 92 95 </table>
|
||||||
|
<set name="abnormalLvl" val="#abnormalLvl" />
|
||||||
|
<set name="abnormalTime" val="2" />
|
||||||
|
<set name="abnormalType" val="KNOCK_DOWN" />
|
||||||
|
<set name="affectLimit" val="6-12" />
|
||||||
|
<set name="affectRange" val="200" />
|
||||||
|
<set name="activateRate" val="50" />
|
||||||
|
<set name="element" val="3" />
|
||||||
|
<set name="elementPower" val="30" />
|
||||||
|
<set name="icon" val="icon.skill10266" />
|
||||||
|
<set name="basicProperty" val="CON" />
|
||||||
|
<set name="operateType" val="A2" />
|
||||||
|
<set name="targetType" val="AURA" />
|
||||||
|
<set name="mpConsume" val="#mpConsumes" />
|
||||||
|
<set name="hitTime" val="1000" />
|
||||||
|
<set name="coolTime" val="300" />
|
||||||
|
<set name="reuseDelay" val="60000" />
|
||||||
|
<set name="isDebuff" val="true" />
|
||||||
|
<set name="trait" val="KNOCKDOWN" />
|
||||||
|
<set name="rideState" val="NONE" />
|
||||||
|
<enchant1 name="mpConsume" val="#ench1MpConsume" />
|
||||||
|
<enchant2 name="activateRate" val="#ench2ActivateRates" />
|
||||||
|
<enchant3 name="power" val="#ench3Power" />
|
||||||
|
<cond msgId="113" addName="1">
|
||||||
|
<using kind="POLE, SWORD, BLUNT, DUAL, DUALFIST, DUALBLUNT" />
|
||||||
</cond>
|
</cond>
|
||||||
<for>
|
<for>
|
||||||
<effect name="KnockDown">
|
<effect name="KnockDown">
|
||||||
@@ -708,15 +723,17 @@
|
|||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
<enchant3for>
|
<enchant3for>
|
||||||
<effect name="PhysicalAttack" />
|
|
||||||
<effect name="KnockDown">
|
<effect name="KnockDown">
|
||||||
<param speed="700" distance="50" />
|
<param speed="700" distance="50" />
|
||||||
</effect>
|
</effect>
|
||||||
|
<effect name="PhysicalAttack" />
|
||||||
</enchant3for>
|
</enchant3for>
|
||||||
<enchant4for>
|
<enchant4for>
|
||||||
<effect name="KnockDown">
|
<effect name="KnockDown">
|
||||||
<param speed="700" distance="50" />
|
<param speed="700" distance="50" />
|
||||||
<mul stat="pDef" val="#ench4Hex" />
|
</effect>
|
||||||
|
<effect name="Debuff">
|
||||||
|
<mul stat="pDef" val="#ench4Hex" />
|
||||||
</effect>
|
</effect>
|
||||||
</enchant4for>
|
</enchant4for>
|
||||||
</skill>
|
</skill>
|
||||||
@@ -1874,12 +1891,16 @@
|
|||||||
</enchant1for>
|
</enchant1for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10298" levels="1" name="Power Revival">
|
<skill id="10298" levels="1" name="Power Revival">
|
||||||
<set name="magicLvl" val="86" />
|
<!-- Recovers all of your HP. -->
|
||||||
|
<set name="effectPoint" val="562" />
|
||||||
|
<set name="icon" val="icon.skill10298" />
|
||||||
<set name="operateType" val="A1" />
|
<set name="operateType" val="A1" />
|
||||||
|
<set name="magicLvl" val="86" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<set name="hitTime" val="1500" />
|
|
||||||
<set name="reuseDelay" val="600000" />
|
|
||||||
<set name="mpConsume" val="38" />
|
<set name="mpConsume" val="38" />
|
||||||
|
<set name="hitTime" val="200" />
|
||||||
|
<set name="reuseDelay" val="600000" />
|
||||||
|
<set name="rideState" val="NONE" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="HealPercent">
|
<effect name="HealPercent">
|
||||||
<param power="100" />
|
<param power="100" />
|
||||||
|
@@ -76,30 +76,36 @@
|
|||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10303" levels="4" name="Superior Combat Master">
|
<skill id="10303" levels="4" name="Superior Combat Master">
|
||||||
<table name="#rate"> 1.02 1.03 1.04 1.05 </table>
|
<!-- Max CP/ HP + 2%. -->
|
||||||
|
<table name="#max"> 1.02 1.03 1.04 1.05 </table>
|
||||||
|
<table name="#magicLvl"> 85 90 95 99 </table>
|
||||||
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="icon" val="icon.skill0430" />
|
<set name="icon" val="icon.skill0430" />
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<effect name="Buff">
|
<for>
|
||||||
<mul stat="maxHp" val="#rate" />
|
<effect name="Buff">
|
||||||
<mul stat="maxCp" val="#rate" />
|
<mul stat="maxHp" val="#max" />
|
||||||
</effect>
|
<mul stat="maxCp" val="#max" />
|
||||||
|
</effect>
|
||||||
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10304" levels="4" name="Superior Dual Sword Mastery">
|
<skill id="10304" levels="4" name="Superior Dual Sword Mastery">
|
||||||
|
<!-- When a dualsword or dual blunt is equipped, P. Atk. + 2% and additional + 709. -->
|
||||||
|
<table name="#pAtkMul"> 1.02 1.03 1.04 1.05 </table>
|
||||||
|
<table name="#pAtkAdd"> 709 828 982 1190 </table>
|
||||||
<table name="#magicLvl"> 85 90 95 99 </table>
|
<table name="#magicLvl"> 85 90 95 99 </table>
|
||||||
<table name="#pAtk"> 1.02 1.03 1.04 1.05 </table>
|
|
||||||
<table name="#pAtkAdd"> 709 825 982 1190 </table>
|
|
||||||
<set name="icon" val="icon.skill11835" />
|
<set name="icon" val="icon.skill11835" />
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<mul stat="pAtk" val="#pAtk">
|
<mul stat="pAtk" val="#pAtkMul">
|
||||||
<using kind="DUAL" />
|
<using kind="DUAL, DUALBLUNT" />
|
||||||
</mul>
|
</mul>
|
||||||
<add stat="pAtk" val="#pAtkAdd">
|
<add stat="pAtk" val="#pAtkMul">
|
||||||
<using kind="DUAL" />
|
<using kind="DUAL, DUALBLUNT" />
|
||||||
</add>
|
</add>
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
@@ -334,31 +340,36 @@
|
|||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10315" levels="2" name="Superior Polearm Mastery">
|
<skill id="10315" levels="2" name="Superior Polearm Mastery">
|
||||||
<table name="#pAtk"> 1.02 1.03 </table>
|
<!-- When a spear is equipped, P. Atk. + 2 % and additional P. Atk. + 583. -->
|
||||||
|
<table name="#magicLvl"> 85 90 </table>
|
||||||
<table name="#pAtkAdd"> 583 678 </table>
|
<table name="#pAtkAdd"> 583 678 </table>
|
||||||
<table name="#magicLvl"> 90 90 </table>
|
<table name="#pAtkMul"> 1.02 1.03 </table>
|
||||||
<set name="icon" val="icon.skill11836" />
|
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
|
<set name="icon" val="icon.skill11836" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<mul stat="pAtk" val="#pAtk">
|
<mul stat="pAtk" val="#pAtkMul">
|
||||||
<using kind="POLE" />
|
<using kind="POLE" />
|
||||||
</mul>
|
</mul>
|
||||||
|
<add stat="pAtk" val="#pAtkAdd">
|
||||||
|
<using kind="POLE" />
|
||||||
|
</add>
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="10316" levels="4" name="Bloodthirst">
|
<skill id="10316" levels="4" name="Bloodthirst">
|
||||||
<table name="#pAtk"> 1.05 1.06 1.07 1.08 </table>
|
<!-- PvP P. Atk. + 5%. -->
|
||||||
<table name="#magicLvl"> 85 90 95 99 </table>
|
<table name="#magicLvl"> 85 90 95 99 </table>
|
||||||
<set name="icon" val="icon.skill0193" />
|
<table name="#pvpPhysDmg"> 1.05 1.06 1.07 1.08 </table>
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
|
<set name="icon" val="icon.skill0193" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<mul stat="pvpPhysDmg" val="#pAtk" />
|
<mul stat="pvpPhysDmg" val="#pvpPhysDmg" />
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
|
@@ -1055,11 +1055,23 @@
|
|||||||
<set name="isMagic" val="4" />
|
<set name="isMagic" val="4" />
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="11352" levels="4" name="Arcane Ability">
|
<skill id="11352" levels="4" name="Arcane Ability">
|
||||||
<!-- AUTO GENERATED SKILL -->
|
|
||||||
<!-- Atk. Spd., P. Def. + 3%, and PvP Damage - 3%. -->
|
<!-- Atk. Spd., P. Def. + 3%, and PvP Damage - 3%. -->
|
||||||
|
<table name="#magicLvl"> 85 90 95 99 </table> <!-- TODO: get proper values -->
|
||||||
|
<table name="#rateUp"> 1.03 1.05 1.07 1.1 </table>
|
||||||
|
<table name="#rateDown"> 0.97 0.95 0.93 0.9 </table>
|
||||||
<set name="icon" val="icon.skill11277" />
|
<set name="icon" val="icon.skill11277" />
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
|
<for>
|
||||||
|
<effect name="Buff">
|
||||||
|
<mul stat="pAtkSpd" val="#rateUp" />
|
||||||
|
<mul stat="pDef" val="#rateUp" />
|
||||||
|
<mul stat="pvpPhysDef" val="#rateDown" />
|
||||||
|
<mul stat="pvpMagicalDef" val="#rateDown" />
|
||||||
|
<mul stat="pvpPhysSkillsDef" val="#rateDown" />
|
||||||
|
</effect>
|
||||||
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="11353" levels="7" name="Elemental Rage">
|
<skill id="11353" levels="7" name="Elemental Rage">
|
||||||
<!-- Source: https://l2wiki.com/Elemental_Rage_-_Wynn_Elemental_Master -->
|
<!-- Source: https://l2wiki.com/Elemental_Rage_-_Wynn_Elemental_Master -->
|
||||||
|
@@ -117,30 +117,67 @@
|
|||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="11754" levels="5" name="Fairy of Life" enchantGroup1="10" enchantGroup2="10">
|
<skill id="11754" levels="5" name="Fairy of Life" enchantGroup1="10">
|
||||||
|
<!-- Summons a fairy that follows and periodically heals the selected party member for 60 seconds. Has a chance of recovering HP when attacked. -->
|
||||||
|
<table name="#mpConsume"> 34 37 38 42 44 </table>
|
||||||
|
<table name="#mpInitialConsume"> 9 9 10 10 11 </table>
|
||||||
<table name="#magicLvl"> 85 88 91 94 97 </table>
|
<table name="#magicLvl"> 85 88 91 94 97 </table>
|
||||||
<table name="#mpConsume"> 43 46 48 52 55 </table>
|
<table name="#effectLvl"> 1 2 3 4 5 </table>
|
||||||
<table name="#ench2Time"> 66 72 78 84 90 96 102 108 114 120 </table>
|
<table name="#abnormalLvl"> 2 3 4 5 6 </table>
|
||||||
<set name="icon" val="icon.skill11754" />
|
<table name="#ench1triggeredLevel"> 101 102 103 104 105 106 107 108 109 110 </table>
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
<table name="#ench2abnormalTime"> 66 72 78 84 90 96 104 110 116 120 </table>
|
||||||
<set name="operateType" val="A1" />
|
<table name="#ench2summonTotalLifeTime"> 660 720 780 840 900 960 1040 1100 1160 1200 </table>
|
||||||
<set name="mpConsume" val="#mpConsume" />
|
<set name="abnormalTime" val="60" />
|
||||||
<set name="effectRange" val="600" />
|
<set name="abnormalLvl" val="#abnormalLvl" />
|
||||||
<set name="hitTime" val="2200" />
|
<set name="hitTime" val="2200" />
|
||||||
<set name="coolTime" val="300" />
|
<set name="coolTime" val="300" />
|
||||||
|
<set name="castRange" val="600" />
|
||||||
<set name="reuseDelay" val="15000" />
|
<set name="reuseDelay" val="15000" />
|
||||||
<set name="isMagic" val="1" />
|
<set name="mpConsume" val="#mpConsume" />
|
||||||
|
<set name="mpInitialConsume" val="#mpInitialConsume" />
|
||||||
|
<set name="isMagic" val="2" />
|
||||||
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
|
<set name="operateType" val="A2" />
|
||||||
|
<set name="icon" val="icon.skill11754" />
|
||||||
<set name="targetType" val="PARTY_MEMBER" />
|
<set name="targetType" val="PARTY_MEMBER" />
|
||||||
<enchant1 name="magicLvl" val="99" />
|
<enchant2 name="abnormalTime" val="#ench2abnormalTime" />
|
||||||
<enchant2 name="magicLvl" val="99" />
|
|
||||||
<for>
|
<for>
|
||||||
|
<effect name="TriggerSkillByDamage">
|
||||||
|
<param attackerType="L2Playable" minAttackerLevel="1" maxAttackerLevel="100" />
|
||||||
|
<param minDamage="1" />
|
||||||
|
<param chance="5" />
|
||||||
|
<param skillId="11807" skillLevel="#effectLvl" />
|
||||||
|
<param targetType="SELF" />
|
||||||
|
</effect>
|
||||||
<effect name="SummonCubic">
|
<effect name="SummonCubic">
|
||||||
<param cubicId="17" cubicDelay="10" cubicDuration="60" cubicMaxCount="30" />
|
<param cubicId="17" cubicDelay="5" cubicDuration="60" cubicMaxCount="20" cubicSkillChance="0" />
|
||||||
|
<param cubicSkill1Chance="33" />
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
<enchant2for>
|
<enchant1for>
|
||||||
|
<effect name="TriggerSkillByDamage">
|
||||||
|
<param attackerType="L2Playable" minAttackerLevel="1" maxAttackerLevel="100" />
|
||||||
|
<param minDamage="1" />
|
||||||
|
<param chance="5" />
|
||||||
|
<param skillId="11807" skillLevel="#ench1triggeredLevel" />
|
||||||
|
<param targetType="SELF" />
|
||||||
|
</effect>
|
||||||
<effect name="SummonCubic">
|
<effect name="SummonCubic">
|
||||||
<param cubicId="17" cubicDelay="10" cubicDuration="60" cubicMaxCount="30" /> <!-- TODO: Fix duration -->
|
<param cubicId="17" cubicDelay="5" cubicDuration="60" cubicMaxCount="20" cubicSkillChance="0" />
|
||||||
|
<param cubicSkill1Chance="33" />
|
||||||
|
</effect>
|
||||||
|
</enchant1for>
|
||||||
|
<enchant2for>
|
||||||
|
<effect name="TriggerSkillByDamage">
|
||||||
|
<param attackerType="L2Playable" minAttackerLevel="1" maxAttackerLevel="100" />
|
||||||
|
<param minDamage="1" />
|
||||||
|
<param chance="5" />
|
||||||
|
<param skillId="11807" skillLevel="5" />
|
||||||
|
<param targetType="SELF" />
|
||||||
|
</effect>
|
||||||
|
<effect name="SummonCubic">
|
||||||
|
<param cubicId="17" cubicDelay="5" cubicDuration="60" cubicMaxCount="20" cubicSkillChance="0" /> <!-- cubicDuration="#ench2summonTotalLifeTime" -->
|
||||||
|
<param cubicSkill1Chance="33" />
|
||||||
</effect>
|
</effect>
|
||||||
</enchant2for>
|
</enchant2for>
|
||||||
</skill>
|
</skill>
|
||||||
|
@@ -1171,31 +1171,29 @@
|
|||||||
<skill id="13061" levels="1" name="Special Ability: Long Blow">
|
<skill id="13061" levels="1" name="Special Ability: Long Blow">
|
||||||
<!-- Increases bow/crossbow range. Inflicts additional damage during PvP. -->
|
<!-- Increases bow/crossbow range. Inflicts additional damage during PvP. -->
|
||||||
<set name="icon" val="icon.skill0113" />
|
<set name="icon" val="icon.skill0113" />
|
||||||
<set name="magicLvl" val="85" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="magicLvl" val="85" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="pAtkRange" val="50">
|
<add stat="pAtkRange" val="50" />
|
||||||
<!--<mul stat="pvpPhysDmg" val="1.05" />
|
<mul stat="pvpPhysDmg" val="1.05" />
|
||||||
<mul stat="pvpPhysSkillsDmg" val="1.05" />
|
<mul stat="pvpPhysSkillsDmg" val="1.05" />
|
||||||
<mul stat="pvpMagicalDmg" val="1.05" />-->
|
<mul stat="pvpMagicalDmg" val="1.05" />
|
||||||
<using kind="BOW" />
|
|
||||||
</add>
|
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13062" levels="5" name="Special Ability: Damage Up">
|
<skill id="13062" levels="5" name="Special Ability: Damage Up">
|
||||||
|
<!-- Increases P. Atk. Inflicts additional damage during PvP. -->
|
||||||
|
<table name="#pAtk"> 288 332 377 415 600 </table>
|
||||||
<table name="#magicLvl"> 85 85 95 99 99 </table>
|
<table name="#magicLvl"> 85 85 95 99 99 </table>
|
||||||
<table name="#Atk">288 332 377 415 457</table>
|
|
||||||
<set name="icon" val="icon.skill1068" />
|
<set name="icon" val="icon.skill1068" />
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="pAtk" val="#Atk" />
|
<add stat="pAtk" val="#pAtk" />
|
||||||
<add stat="mAtk" val="#Atk" />
|
|
||||||
<mul stat="pvpPhysDmg" val="1.05" />
|
<mul stat="pvpPhysDmg" val="1.05" />
|
||||||
<mul stat="pvpPhysSkillsDmg" val="1.05" />
|
<mul stat="pvpPhysSkillsDmg" val="1.05" />
|
||||||
<mul stat="pvpMagicalDmg" val="1.05" />
|
<mul stat="pvpMagicalDmg" val="1.05" />
|
||||||
@@ -1205,294 +1203,251 @@
|
|||||||
<skill id="13063" levels="1" name="Cloak Slot Activation (R-grade)">
|
<skill id="13063" levels="1" name="Cloak Slot Activation (R-grade)">
|
||||||
<!-- Opens a cloak slot. -->
|
<!-- Opens a cloak slot. -->
|
||||||
<set name="icon" val="icon.vesper_cloack_i00" />
|
<set name="icon" val="icon.vesper_cloack_i00" />
|
||||||
<set name="magicLvl" val="85" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="magicLvl" val="85" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="EnableCloak" />
|
<effect name="EnableCloak" />
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13064" levels="4" name="Set Effect - Immortal Heavy Armor 2 Piece (Defense Type)">
|
<skill id="13064" levels="4" name="Immortal Heavy Armor 2 Piece (Defense Type)">
|
||||||
<!-- CON + 1 and HP + 463. -->
|
<table name="#defCritRate"> 1.0 0.967 0.967 0.967 </table>
|
||||||
<!-- CON + 1 and HP + 463. Chance of receiving a critical attack - 3.3%. Stun Resistance + 5. -->
|
<table name="#stunRes"> 0 5 5 5 </table>
|
||||||
<!-- CON + 1 and HP + 463. Chance of receiving a critical attack - 3.3%. Stun Resistance + 5. M. Def. + 38. -->
|
|
||||||
<!-- CON + 1 and HP + 463. Chance of receiving a critical attack - 3.3%. Stun Resistance + 5. M. Def. + 38. P. Def. + 7% and additional + 77. Resistance to 4 attributes + 10. -->
|
|
||||||
<table name="#defCritRate"> 1 1.033 1.033 1.033 </table>
|
|
||||||
<table name="#Trait"> 0 5 5 5 </table>
|
|
||||||
<table name="#mDef"> 0 0 38 38 </table>
|
<table name="#mDef"> 0 0 38 38 </table>
|
||||||
|
<table name="#pDef"> 0 0 0 77 </table>
|
||||||
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
||||||
<table name="#pDefAdd"> 0 0 0 77 </table>
|
<table name="#elements"> 0 0 0 10 </table>
|
||||||
<table name="#resist"> 0 0 0 10 </table>
|
|
||||||
<set name="icon" val="icon.armor_t501_u_i00" />
|
|
||||||
<set name="magicLvl" val="85" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.armor_t501_u_i00" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="CON" val="1" />
|
<add stat="CON" val="1" />
|
||||||
<add stat="maxHp" val="463" />
|
<add stat="maxHp" val="463" />
|
||||||
<mul stat="defCritRate" val="#defCritRate" />
|
|
||||||
<add stat="mDef" val="#mDef" />
|
<add stat="mDef" val="#mDef" />
|
||||||
|
<add stat="pDef" val="#pDef" />
|
||||||
|
<add stat="fireRes" val="#elements" />
|
||||||
|
<add stat="waterRes" val="#elements" />
|
||||||
|
<add stat="windRes" val="#elements" />
|
||||||
|
<add stat="earthRes" val="#elements" />
|
||||||
|
<mul stat="defCritRate" val="#defCritRate" />
|
||||||
<mul stat="pDef" val="#pDefMul" />
|
<mul stat="pDef" val="#pDefMul" />
|
||||||
<add stat="pDef" val="#pDefAdd" />
|
|
||||||
<add stat="fireRes" val="#resist" />
|
|
||||||
<add stat="waterRes" val="#resist" />
|
|
||||||
<add stat="windRes" val="#resist" />
|
|
||||||
<add stat="earthRes" val="#resist" />
|
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="DefenceTrait">
|
<effect name="DefenceTrait">
|
||||||
<param SHOCK="#Trait" />
|
<param SHOCK="#stunRes" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="EnableCloak" />
|
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13065" levels="4" name="Set Effect - Immortal Heavy Armor 2 Piece (Attack Type)">
|
<skill id="13065" levels="4" name="Immortal Heavy Armor 2 Piece (Attack Type)">
|
||||||
<!-- STR + 1 -->
|
|
||||||
<!-- STR + 1, Critical damage + 209, Hold Resistance + 5. -->
|
|
||||||
<!-- STR + 1, Critical damage + 209, Hold Resistance + 5, HP + 463. -->
|
|
||||||
<!-- STR + 1, Critical damage + 209, Hold Resistance + 5. P. Atk. + 155, P. Def. + 7%. HP + 463, resistance to 4 attributes + 10. -->
|
|
||||||
<table name="#cAtkAdd"> 0 209 209 209 </table>
|
|
||||||
<table name="#Trait"> 0 5 5 5 </table>
|
|
||||||
<table name="#maxHp"> 0 0 463 463 </table>
|
<table name="#maxHp"> 0 0 463 463 </table>
|
||||||
<table name="#pAtk"> 0 0 0 155 </table>
|
<table name="#holdRes"> 0 5 5 5 </table>
|
||||||
<table name="#pDef"> 1 1 1 1.07 </table>
|
<table name="#pAtk"> 0 0 0 115 </table>
|
||||||
<table name="#resist"> 0 0 0 10 </table>
|
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
||||||
<set name="icon" val="icon.armor_t501_u_i00" />
|
<table name="#critDmgAdd"> 0 209 209 209 </table>
|
||||||
<set name="magicLvl" val="85" />
|
<table name="#elements"> 0 0 0 10 </table>
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.armor_t501_u_i00" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="STR" val="1" />
|
<add stat="STR" val="1" />
|
||||||
<add stat="critDmgAdd" val="#cAtkAdd" />
|
|
||||||
<add stat="maxHp" val="#maxHp" />
|
<add stat="maxHp" val="#maxHp" />
|
||||||
<add stat="pAtk" val="#pAtk" />
|
<add stat="pAtk" val="#pAtk" />
|
||||||
<mul stat="pDef" val="#pDef" />
|
<add stat="fireRes" val="#elements" />
|
||||||
<add stat="fireRes" val="#resist" />
|
<add stat="waterRes" val="#elements" />
|
||||||
<add stat="waterRes" val="#resist" />
|
<add stat="windRes" val="#elements" />
|
||||||
<add stat="windRes" val="#resist" />
|
<add stat="earthRes" val="#elements" />
|
||||||
<add stat="earthRes" val="#resist" />
|
<add stat="critDmgAdd" val="#critDmgAdd" />
|
||||||
|
<mul stat="pDef" val="#pDefMul" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="DefenceTrait">
|
<effect name="DefenceTrait">
|
||||||
<param HOLD="#Trait" />
|
<param HOLD="#holdRes" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="EnableCloak" />
|
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13066" levels="4" name="Set Effect - Twilight Heavy Armor 2 Piece (Defense Type)">
|
<skill id="13066" levels="4" name="Twilight Heavy Armor 2 Piece (Defense Type)">
|
||||||
<!-- CON + 2, STR -1, HP + 487. -->
|
<table name="#defCritRate"> 1.0 0.967 0.967 0.967 </table>
|
||||||
<!-- CON + 2, STR -1, HP + 487. MP + 202, Stun Resistance + 7. -->
|
<table name="#stunRes"> 0 7 7 7 </table>
|
||||||
<!-- CON + 2, STR -1, HP + 487. MP + 202, Stun Resistance + 7. M. Def. + 44. -->
|
|
||||||
<!-- CON + 2, STR -1, HP + 487. MP + 202, Stun Resistance + 7. M. Def. + 44. P. Def. + 7% and additional + 87, resistance to 4 attributes + 10. -->
|
|
||||||
<table name="#maxMp"> 0 202 202 202 </table>
|
<table name="#maxMp"> 0 202 202 202 </table>
|
||||||
<table name="#Trait"> 0 7 7 7 </table>
|
|
||||||
<table name="#mDef"> 0 0 44 44 </table>
|
<table name="#mDef"> 0 0 44 44 </table>
|
||||||
|
<table name="#pDef"> 0 0 0 87 </table>
|
||||||
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
||||||
<table name="#pDefAdd"> 0 0 0 87 </table>
|
<table name="#elements"> 0 0 0 10 </table>
|
||||||
<table name="#resist"> 0 0 0 10 </table>
|
|
||||||
<set name="icon" val="icon.armor_t601_u_i00" />
|
|
||||||
<set name="magicLvl" val="85" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.armor_t601_u_i00" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="CON" val="2" />
|
<add stat="CON" val="2" />
|
||||||
<sub stat="STR" val="1" />
|
<add stat="STR" val="-1" />
|
||||||
<add stat="maxHp" val="487" />
|
<add stat="maxHp" val="487" />
|
||||||
<add stat="maxMp" val="#maxMp" />
|
<add stat="maxMp" val="#maxMp" />
|
||||||
<add stat="mDef" val="#mDef" />
|
<add stat="mDef" val="#mDef" />
|
||||||
|
<add stat="pDef" val="#pDef" />
|
||||||
|
<add stat="fireRes" val="#elements" />
|
||||||
|
<add stat="waterRes" val="#elements" />
|
||||||
|
<add stat="windRes" val="#elements" />
|
||||||
|
<add stat="earthRes" val="#elements" />
|
||||||
|
<mul stat="defCritRate" val="#defCritRate" />
|
||||||
<mul stat="pDef" val="#pDefMul" />
|
<mul stat="pDef" val="#pDefMul" />
|
||||||
<add stat="pDef" val="#pDefAdd" />
|
|
||||||
<add stat="fireRes" val="#resist" />
|
|
||||||
<add stat="waterRes" val="#resist" />
|
|
||||||
<add stat="windRes" val="#resist" />
|
|
||||||
<add stat="earthRes" val="#resist" />
|
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="DefenceTrait">
|
<effect name="DefenceTrait">
|
||||||
<param SHOCK="#Trait" />
|
<param SHOCK="#stunRes" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="EnableCloak" />
|
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13067" levels="4" name="Set Effect - Twilight Heavy Armor 2 Piece (Attack Type)">
|
<skill id="13067" levels="4" name="Twilight Heavy Armor 2 Piece (Attack Type)">
|
||||||
<!-- STR + 2, CON -1 -->
|
<table name="#maxHp"> 0 0 463 463 </table>
|
||||||
<!-- STR + 2, CON -1, Critical damage + 242, Hold Resistance + 7. -->
|
<table name="#holdRes"> 0 7 7 7 </table>
|
||||||
<!-- STR + 2, CON -1, Critical damage + 242, Hold Resistance + 7. MP - 4% upon skill use. -->
|
|
||||||
<!-- STR + 2, CON -1, Critical damage + 242, Hold Resistance + 7. P. Atk. + 180, P. Def. + 7%, MP - 4% upon skill use. Resistance to 4 attributes + 10. -->
|
|
||||||
<table name="#cAtkAdd"> 0 242 242 242 </table>
|
|
||||||
<table name="#Trait"> 0 7 7 7 </table>
|
|
||||||
<table name="#mpConsumeRate"> 1 1 0.96 0.96 </table>
|
|
||||||
<table name="#pAtk"> 0 0 0 180 </table>
|
<table name="#pAtk"> 0 0 0 180 </table>
|
||||||
<table name="#pDef"> 1 1 1 1.07 </table>
|
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
||||||
<table name="#resist"> 0 0 0 10 </table>
|
<table name="#critDmgAdd"> 0 242 242 242 </table>
|
||||||
<set name="icon" val="icon.armor_t601_u_i00" />
|
<table name="#elements"> 0 0 0 10 </table>
|
||||||
<set name="magicLvl" val="85" />
|
<table name="#mpConsum"> 1 1 1.04 1.04 </table>
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.armor_t601_u_i00" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="STR" val="2" />
|
<add stat="STR" val="2" />
|
||||||
<sub stat="CON" val="1" />
|
<add stat="CON" val="-1" />
|
||||||
<add stat="critDmgAdd" val="#cAtkAdd" />
|
<add stat="maxHp" val="#maxHp" />
|
||||||
<mul stat="physicalMpConsumeRate" val="#mpConsumeRate" />
|
|
||||||
<mul stat="magicalMpConsumeRate" val="#mpConsumeRate" />
|
|
||||||
<mul stat="danceMpConsumeRate" val="#mpConsumeRate" />
|
|
||||||
<add stat="pAtk" val="#pAtk" />
|
<add stat="pAtk" val="#pAtk" />
|
||||||
<mul stat="pDef" val="#pDef" />
|
<add stat="fireRes" val="#elements" />
|
||||||
<add stat="fireRes" val="#resist" />
|
<add stat="waterRes" val="#elements" />
|
||||||
<add stat="waterRes" val="#resist" />
|
<add stat="windRes" val="#elements" />
|
||||||
<add stat="windRes" val="#resist" />
|
<add stat="earthRes" val="#elements" />
|
||||||
<add stat="earthRes" val="#resist" />
|
<add stat="critDmgAdd" val="#critDmgAdd" />
|
||||||
|
<mul stat="pDef" val="#pDefMul" />
|
||||||
|
<mul stat="physicalMpConsumeRate" val="#mpConsum" />
|
||||||
|
<mul stat="magicalMpConsumeRate" val="#mpConsum" />
|
||||||
|
<mul stat="danceMpConsumeRate" val="#mpConsum" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="DefenceTrait">
|
<effect name="DefenceTrait">
|
||||||
<param HOLD="#Trait" />
|
<param HOLD="#holdRes" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="EnableCloak" />
|
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13068" levels="4" name="Set Effect - Seraph Heavy Armor 2 Piece (Defense Type)">
|
<skill id="13068" levels="4" name="Seraph Heavy Armor 2 Piece (Defense Type)">
|
||||||
<!-- CON + 3, STR -2, HP + 511. -->
|
<table name="#defCritRate"> 1.0 0.967 0.967 0.967 </table>
|
||||||
<!-- CON + 3, STR -2, HP + 511. Chance of receiving a critical attack - 3.3%. Stun Resistance + 10. -->
|
<table name="#stunRes"> 0 10 10 10 </table>
|
||||||
<!-- CON + 3, STR -2, HP + 511. Chance of receiving a critical attack - 3.3%. Damage upon critical attack - 281. Stun Resistance + 10. M. Def. + 50. -->
|
<table name="#defCritDamageAdd"> 0 0 281 281 </table>
|
||||||
<!-- CON + 3, STR -2, HP + 511. Chance of receiving a critical attack - 3.3%. Stun Resistance + 10. Damage upon critical attack - 281. M. Def. + 50. P. Def. + 7% and additional + 96. Resistance to 4 attributes + 15. -->
|
|
||||||
<table name="#defCritRate"> 1 1.033 1.033 1.033 </table>
|
|
||||||
<table name="#Trait"> 0 10 10 10 </table>
|
|
||||||
<table name="#defCritDamage"> 0 0 281 281 </table>
|
|
||||||
<table name="#mDef"> 0 0 50 50 </table>
|
<table name="#mDef"> 0 0 50 50 </table>
|
||||||
|
<table name="#pDef"> 0 0 0 96 </table>
|
||||||
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
||||||
<table name="#pDefAdd"> 0 0 0 96 </table>
|
<table name="#elements"> 0 0 0 15 </table>
|
||||||
<table name="#resist"> 0 0 0 15 </table>
|
|
||||||
<set name="icon" val="icon.armor_t401_u_i00" />
|
|
||||||
<set name="magicLvl" val="95" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.armor_t401_u_i00" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="CON" val="3" />
|
<add stat="CON" val="3" />
|
||||||
<sub stat="STR" val="2" />
|
<add stat="STR" val="-2" />
|
||||||
<add stat="maxHp" val="511" />
|
<add stat="maxHp" val="511" />
|
||||||
<mul stat="defCritRate" val="#defCritRate" />
|
|
||||||
<add stat="defCritDamage" val="#defCritDamage" />
|
|
||||||
<add stat="mDef" val="#mDef" />
|
<add stat="mDef" val="#mDef" />
|
||||||
|
<add stat="pDef" val="#pDef" />
|
||||||
|
<add stat="fireRes" val="#elements" />
|
||||||
|
<add stat="waterRes" val="#elements" />
|
||||||
|
<add stat="windRes" val="#elements" />
|
||||||
|
<add stat="earthRes" val="#elements" />
|
||||||
|
<add stat="defCritDamageAdd" val="#defCritDamageAdd" />
|
||||||
|
<mul stat="defCritRate" val="#defCritRate" />
|
||||||
<mul stat="pDef" val="#pDefMul" />
|
<mul stat="pDef" val="#pDefMul" />
|
||||||
<add stat="pDef" val="#pDefAdd" />
|
|
||||||
<add stat="fireRes" val="#resist" />
|
|
||||||
<add stat="waterRes" val="#resist" />
|
|
||||||
<add stat="windRes" val="#resist" />
|
|
||||||
<add stat="earthRes" val="#resist" />
|
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="DefenceTrait">
|
<effect name="DefenceTrait">
|
||||||
<param SHOCK="#Trait" />
|
<param SHOCK="#stunRes" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="EnableCloak" />
|
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13069" levels="4" name="Set Effect - Seraph Heavy Armor 2 Piece (Attack Type)">
|
<skill id="13069" levels="4" name="Seraph Heavy Armor 2 Piece (Attack Type)">
|
||||||
<!-- STR + 3, CON -2 -->
|
<table name="#maxHp"> 0 0 511 511 </table>
|
||||||
<!-- STR + 3, CON -2, Critical damage + 281, Hold Resistance + 10. -->
|
<table name="#holdRes"> 0 10 10 10 </table>
|
||||||
<!-- STR + 3, CON -2, Critical damage + 281, Hold Resistance + 10. HP + 511. Skill Power + 6%. -->
|
|
||||||
<!-- STR + 3, CON -2, Critical damage + 281, Hold Resistance + 10. P. Atk. + 214, P. Def. + 7%, HP + 511. Skill Power+ 6%. Resistance to 4 attributes + 15. -->
|
|
||||||
<table name="#cAtkAdd"> 0 281 281 281 </table>
|
|
||||||
<table name="#Trait"> 0 10 10 10 </table>
|
|
||||||
<table name="#maxHp"> 0 10 10 10 </table>
|
|
||||||
<table name="#physicalSkillPower"> 0 0 1.06 1.06 </table>
|
|
||||||
<table name="#pAtk"> 0 0 0 214 </table>
|
<table name="#pAtk"> 0 0 0 214 </table>
|
||||||
<table name="#pDef"> 1 1 1 1.07 </table>
|
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
||||||
<table name="#resist"> 0 0 0 15 </table>
|
<table name="#critDmgAdd"> 0 242 242 242 </table>
|
||||||
<set name="icon" val="icon.armor_t401_u_i00" />
|
<table name="#elements"> 0 0 0 15 </table>
|
||||||
<set name="magicLvl" val="95" />
|
<table name="#skillPower"> 1 1 1.06 1.06 </table>
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.armor_t401_u_i00" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="STR" val="3" />
|
<add stat="STR" val="3" />
|
||||||
<sub stat="CON" val="2" />
|
<add stat="CON" val="-2" />
|
||||||
<add stat="critDmgAdd" val="#cAtkAdd" />
|
|
||||||
<add stat="maxHp" val="#maxHp" />
|
<add stat="maxHp" val="#maxHp" />
|
||||||
<mul stat="physicalSkillPower" val="#physicalSkillPower" />
|
|
||||||
<add stat="pAtk" val="#pAtk" />
|
<add stat="pAtk" val="#pAtk" />
|
||||||
<mul stat="pDef" val="#pDef" />
|
<add stat="fireRes" val="#elements" />
|
||||||
<add stat="fireRes" val="#resist" />
|
<add stat="waterRes" val="#elements" />
|
||||||
<add stat="waterRes" val="#resist" />
|
<add stat="windRes" val="#elements" />
|
||||||
<add stat="windRes" val="#resist" />
|
<add stat="earthRes" val="#elements" />
|
||||||
<add stat="earthRes" val="#resist" />
|
<add stat="critDmgAdd" val="#critDmgAdd" />
|
||||||
|
<mul stat="pDef" val="#pDefMul" />
|
||||||
|
<mul stat="physicalSkillPower" val="#skillPower" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="DefenceTrait">
|
<effect name="DefenceTrait">
|
||||||
<param HOLD="#Trait" />
|
<param HOLD="#holdRes" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="EnableCloak" />
|
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13070" levels="4" name="Set Effect - Eternal Heavy Armor 2 Piece (Defense Type)">
|
<skill id="13070" levels="4" name="Eternal Heavy Armor 2 Piece (Defense Type)">
|
||||||
<!-- CON + 3, STR -1, HP + 521. -->
|
<table name="#defCritRate"> 1.0 0.967 0.967 0.967 </table>
|
||||||
<!-- CON + 3, STR -1, HP + 521. Chance of receiving a critical attack - 3.3%. Stun Resistance + 10. -->
|
<table name="#stunRes"> 0 10 10 10 </table>
|
||||||
<!-- CON + 3, STR -1, HP + 521. Chance of receiving a critical attack - 3.3%. Received heal amount + 108. Stun Resistance + 10. M. Def. + 54. -->
|
<table name="#healEffect"> 0 0 108 108 </table>
|
||||||
<!-- CON + 3, STR -1, HP + 521. Chance of receiving a critical attack - 3.3%. Received heal amount + 108. Stun Resistance + 10. M. Def. + 54. P. Def. + 7% and additional + 103. Resistance to 4 attributes + 15. -->
|
|
||||||
<table name="#defCritRate"> 1 1.033 1.033 1.033 </table>
|
|
||||||
<table name="#Trait"> 0 10 10 10 </table>
|
|
||||||
<table name="#mDef"> 0 0 54 54 </table>
|
<table name="#mDef"> 0 0 54 54 </table>
|
||||||
|
<table name="#pDef"> 0 0 0 103 </table>
|
||||||
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
||||||
<table name="#pDefAdd"> 0 0 0 103 </table>
|
<table name="#elements"> 0 0 0 15 </table>
|
||||||
<table name="#resist"> 0 0 0 15 </table>
|
|
||||||
<set name="icon" val="icon.armor_t701_u_i00" />
|
|
||||||
<set name="magicLvl" val="99" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.armor_t701_u_i00" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="CON" val="3" />
|
<add stat="CON" val="3" />
|
||||||
<sub stat="STR" val="1" />
|
<add stat="STR" val="-1" />
|
||||||
<add stat="maxHp" val="521" />
|
<add stat="maxHp" val="521" />
|
||||||
<mul stat="defCritRate" val="#defCritRate" />
|
|
||||||
<!-- TODO: add stat received heal amount -->
|
|
||||||
<add stat="mDef" val="#mDef" />
|
<add stat="mDef" val="#mDef" />
|
||||||
|
<add stat="pDef" val="#pDef" />
|
||||||
|
<add stat="fireRes" val="#elements" />
|
||||||
|
<add stat="waterRes" val="#elements" />
|
||||||
|
<add stat="windRes" val="#elements" />
|
||||||
|
<add stat="earthRes" val="#elements" />
|
||||||
|
<add stat="healEffect" val="#healEffect" />
|
||||||
|
<mul stat="defCritRate" val="#defCritRate" />
|
||||||
<mul stat="pDef" val="#pDefMul" />
|
<mul stat="pDef" val="#pDefMul" />
|
||||||
<add stat="pDef" val="#pDefAdd" />
|
|
||||||
<add stat="fireRes" val="#resist" />
|
|
||||||
<add stat="waterRes" val="#resist" />
|
|
||||||
<add stat="windRes" val="#resist" />
|
|
||||||
<add stat="earthRes" val="#resist" />
|
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="DefenceTrait">
|
<effect name="DefenceTrait">
|
||||||
<param SHOCK="#Trait" />
|
<param SHOCK="#stunRes" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="EnableCloak" />
|
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13071" levels="4" name="Set Effect - Eternal Heavy Armor 2 Piece (Attack Type)">
|
<skill id="13071" levels="4" name="Eternal Heavy Armor 2 Piece (Attack Type)">
|
||||||
<!-- STR + 3, CON -1 -->
|
|
||||||
<!-- STR + 3, CON -1, Critical damage + 298, Hold Resistance + 10. -->
|
|
||||||
<!-- STR + 3, CON -1, Critical damage + 298, Hold Resistance + 10. HP + 521. Absorbs 2% of inflicted damage as HP. -->
|
|
||||||
<!-- STR + 3, CON -1, Critical damage + 298, Hold Resistance + 10. P. Atk. + 246, P. Def. + 7%, HP + 521. Absorbs 2% of inflicted damage as HP with a certain probability. Resistance to 4 attributes + 15. -->
|
|
||||||
<table name="#cAtkAdd"> 0 298 298 298 </table>
|
|
||||||
<table name="#Trait"> 0 10 10 10 </table>
|
|
||||||
<table name="#maxHp"> 0 0 521 521 </table>
|
<table name="#maxHp"> 0 0 521 521 </table>
|
||||||
<table name="#absorbDam"> 1 1 1.02 1.02 </table>
|
<table name="#holdRes"> 0 10 10 10 </table>
|
||||||
<table name="#pAtk"> 0 0 0 246 </table>
|
<table name="#pAtk"> 0 0 0 246 </table>
|
||||||
<table name="#pDef"> 1 1 1 1.07 </table>
|
<table name="#pDefMul"> 1 1 1 1.07 </table>
|
||||||
<table name="#resist"> 0 0 0 15 </table>
|
<table name="#critDmgAdd"> 0 298 298 298 </table>
|
||||||
<set name="icon" val="icon.armor_t701_u_i00" />
|
<table name="#elements"> 0 0 0 15 </table>
|
||||||
<set name="magicLvl" val="99" />
|
<table name="#absorbDam"> 1 1 1.02 1.02 </table>
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="icon" val="icon.armor_t701_u_i00" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="STR" val="3" />
|
<add stat="STR" val="3" />
|
||||||
<sub stat="CON" val="1" />
|
<add stat="CON" val="-1" />
|
||||||
<add stat="critDmgAdd" val="#cAtkAdd" />
|
|
||||||
<add stat="maxHp" val="#maxHp" />
|
<add stat="maxHp" val="#maxHp" />
|
||||||
<mul stat="absorbDam" val="#absorbDam" />
|
|
||||||
<add stat="pAtk" val="#pAtk" />
|
<add stat="pAtk" val="#pAtk" />
|
||||||
<add stat="pDef" val="#pDef" />
|
<add stat="fireRes" val="#elements" />
|
||||||
<add stat="fireRes" val="#resist" />
|
<add stat="waterRes" val="#elements" />
|
||||||
<add stat="waterRes" val="#resist" />
|
<add stat="windRes" val="#elements" />
|
||||||
<add stat="windRes" val="#resist" />
|
<add stat="earthRes" val="#elements" />
|
||||||
<add stat="earthRes" val="#resist" />
|
<add stat="critDmgAdd" val="#critDmgAdd" />
|
||||||
|
<mul stat="pDef" val="#pDefMul" />
|
||||||
|
<mul stat="absorbDam" val="#absorbDam" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="DefenceTrait">
|
<effect name="DefenceTrait">
|
||||||
<param HOLD="#Trait" />
|
<param HOLD="#holdRes" />
|
||||||
</effect>
|
</effect>
|
||||||
<effect name="EnableCloak" />
|
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="13072" levels="4" name="Set Effect - R99 Rare Heavy Armor 2 Piece (Defense Type)">
|
<skill id="13072" levels="4" name="Set Effect - R99 Rare Heavy Armor 2 Piece (Defense Type)">
|
||||||
|
@@ -653,14 +653,16 @@
|
|||||||
<!-- LeveL 1: INT + 2. -->
|
<!-- LeveL 1: INT + 2. -->
|
||||||
<!-- LeveL 1: INT + 4. -->
|
<!-- LeveL 1: INT + 4. -->
|
||||||
<!-- LeveL 1: INT + 16. -->
|
<!-- LeveL 1: INT + 16. -->
|
||||||
<table name="#magicLevel"> 40 76 85 </table>
|
<table name="#INT"> 2 4 16 </table>
|
||||||
<table name="#tableINT"> 2 4 16 </table>
|
<table name="#magicLvl"> 40 76 85 </table>
|
||||||
<set name="icon" val="icon.skill11253" />
|
<set name="icon" val="icon.skill11253" />
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="INT" val="#tableINT" />
|
<add stat="INT" val="#INT" />
|
||||||
|
<add stat="skillCritical" val="4" /> <!-- INT -->
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
|
@@ -2,11 +2,11 @@
|
|||||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
|
||||||
<skill id="30400" levels="2" name="Divine Wind">
|
<skill id="30400" levels="2" name="Divine Wind">
|
||||||
<!-- Wind/Holy Resistance + 10. -->
|
<!-- Wind/Holy Resistance + 10. -->
|
||||||
<table name="#magicLvl"> 1 85 </table>
|
<table name="#res"> 10 20</table>
|
||||||
<table name="#res"> 10 20 </table>
|
<table name="#magicLvl"> 85 85 </table>
|
||||||
<set name="icon" val="icon.skill30400" />
|
<set name="icon" val="icon.skill30400" />
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
@@ -17,32 +17,33 @@
|
|||||||
</skill>
|
</skill>
|
||||||
<skill id="30401" levels="2" name="Tenacity">
|
<skill id="30401" levels="2" name="Tenacity">
|
||||||
<!-- Max. HP + 1%, Speed + 4. -->
|
<!-- Max. HP + 1%, Speed + 4. -->
|
||||||
<table name="#magicLvl"> 1 85 </table>
|
|
||||||
<table name="#maxHp"> 1.01 1.02 </table>
|
<table name="#maxHp"> 1.01 1.02 </table>
|
||||||
<table name="#spd"> 4 7 </table>
|
<table name="#runSpd"> 4 7 </table>
|
||||||
<set name="icon" val="icon.skill30401" />
|
<table name="#magicLvl"> 85 85 </table>
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
|
<set name="icon" val="icon.skill30401" />
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<mul stat="maxHp" val="#maxHp" />
|
<mul stat="maxHp" val="#maxHp" />
|
||||||
<add stat="runSpd" val="#spd" />
|
<add stat="runSpd" val="#runSpd" />
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="30402" levels="2" name="Efficacy">
|
<skill id="30402" levels="2" name="Efficacy">
|
||||||
<!-- MP Consumption - 1%. -->
|
<!-- MP Consumption - 1%. -->
|
||||||
<table name="#magicLvl"> 1 85 </table>
|
<table name="#consumeRate"> 0.99 0.98 </table>
|
||||||
<table name="#mpConsumeRate"> 0.99 0.98 </table>
|
<table name="#magicLvl"> 85 85 </table>
|
||||||
<set name="icon" val="icon.skill30402" />
|
<set name="icon" val="icon.skill30402" />
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<table name="#magicLvl"> 85 85 </table>
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<mul stat="physicalMpConsumeRate" val="#mpConsumeRate" />
|
<mul stat="magicalMpConsumeRate" val="#consumeRate" />
|
||||||
<mul stat="magicalMpConsumeRate" val="#mpConsumeRate" />
|
<mul stat="physicalMpConsumeRate" val="#consumeRate" />
|
||||||
|
<mul stat="danceMpConsumeRate" val="#consumeRate" />
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
|
@@ -1072,15 +1072,17 @@
|
|||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
<skill id="30545" levels="3" name="Eminent Ability">
|
<skill id="30545" levels="3" name="Eminent Ability">
|
||||||
|
<!-- STR + 2. -->
|
||||||
|
<table name="#STR"> 2 4 14 </table>
|
||||||
<table name="#magicLvl"> 40 76 85 </table>
|
<table name="#magicLvl"> 40 76 85 </table>
|
||||||
<table name="#base">2 4 14</table>
|
|
||||||
<set name="icon" val="icon.skill0430" />
|
<set name="icon" val="icon.skill0430" />
|
||||||
<set name="magicLvl" val="#magicLvl" />
|
|
||||||
<set name="operateType" val="P" />
|
<set name="operateType" val="P" />
|
||||||
|
<set name="magicLvl" val="#magicLvl" />
|
||||||
<set name="targetType" val="SELF" />
|
<set name="targetType" val="SELF" />
|
||||||
<for>
|
<for>
|
||||||
<effect name="Buff">
|
<effect name="Buff">
|
||||||
<add stat="STR" val="#base" />
|
<add stat="STR" val="#STR" />
|
||||||
|
<add stat="skillCritical" val="1" /> <!-- STR -->
|
||||||
</effect>
|
</effect>
|
||||||
</for>
|
</for>
|
||||||
</skill>
|
</skill>
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<Male>
|
<Male>
|
||||||
<common>
|
<common>
|
||||||
<base range="20" attackSpeed="300" attackType="SWORD" critRate="5" mAtk="5" pAtk="5" randomDamage="10" />
|
<base range="20" attackSpeed="300" attackType="SWORD" critRate="5" mAtk="5" pAtk="5" randomDamage="10" />
|
||||||
<collision radius="31" height="20" />
|
<collision radius="30" height="29" />
|
||||||
<moving walk="50" run="115" waterWalk="50" waterRun="50" flyWalk="0" flyRun="0" unknownWalk="0" unknownRun="0" />
|
<moving walk="50" run="115" waterWalk="50" waterRun="50" flyWalk="0" flyRun="0" unknownWalk="0" unknownRun="0" />
|
||||||
</common>
|
</common>
|
||||||
<actions>0 1 3 4 5 6 7 8 9 11 10 15 16 17 18 19 21 22 23 28 32 36 37 39 40 41 42 43 44 45 46 47 48 50 52 53 54 55 56 57 61 63 64 65 70 1000 1001 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098</actions>
|
<actions>0 1 3 4 5 6 7 8 9 11 10 15 16 17 18 19 21 22 23 28 32 36 37 39 40 41 42 43 44 45 46 47 48 50 52 53 54 55 56 57 61 63 64 65 70 1000 1001 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098</actions>
|
||||||
|
@@ -65,7 +65,6 @@ import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
|||||||
import com.l2jmobius.gameserver.util.FloodProtectorConfig;
|
import com.l2jmobius.gameserver.util.FloodProtectorConfig;
|
||||||
import com.l2jmobius.gameserver.util.Util;
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
import com.l2jmobius.util.PropertiesParser;
|
import com.l2jmobius.util.PropertiesParser;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
import com.l2jmobius.util.data.xml.IXmlReader;
|
import com.l2jmobius.util.data.xml.IXmlReader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1425,7 +1424,7 @@ public final class Config
|
|||||||
final String[] skillSplit = skill.split(",");
|
final String[] skillSplit = skill.split(",");
|
||||||
if (skillSplit.length != 2)
|
if (skillSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("[SkillDurationList]: invalid config property -> SkillDurationList \"", skill, "\""));
|
_log.warning("[SkillDurationList]: invalid config property -> SkillDurationList \"" + skill + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1437,7 +1436,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!skill.isEmpty())
|
if (!skill.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("[SkillDurationList]: invalid config property -> SkillList \"", skillSplit[0], "\"", skillSplit[1]));
|
_log.warning("[SkillDurationList]: invalid config property -> SkillList \"" + skillSplit[0] + "\"" + skillSplit[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1454,7 +1453,7 @@ public final class Config
|
|||||||
final String[] skillSplit = skill.split(",");
|
final String[] skillSplit = skill.split(",");
|
||||||
if (skillSplit.length != 2)
|
if (skillSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("[SkillReuseList]: invalid config property -> SkillReuseList \"", skill, "\""));
|
_log.warning("[SkillReuseList]: invalid config property -> SkillReuseList \"" + skill + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1466,7 +1465,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!skill.isEmpty())
|
if (!skill.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("[SkillReuseList]: invalid config property -> SkillList \"", skillSplit[0], "\"", skillSplit[1]));
|
_log.warning("[SkillReuseList]: invalid config property -> SkillList \"" + skillSplit[0] + "\"" + skillSplit[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2064,7 +2063,7 @@ public final class Config
|
|||||||
final String[] propSplit = prop.split(",");
|
final String[] propSplit = prop.split(",");
|
||||||
if (propSplit.length != 2)
|
if (propSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("[CustomMinionsRespawnTime]: invalid config property -> CustomMinionsRespawnTime \"", prop, "\""));
|
_log.warning("[CustomMinionsRespawnTime]: invalid config property -> CustomMinionsRespawnTime \"" + prop + "\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
@@ -2075,7 +2074,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!prop.isEmpty())
|
if (!prop.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("[CustomMinionsRespawnTime]: invalid config property -> CustomMinionsRespawnTime \"", propSplit[0], "\"", propSplit[1]));
|
_log.warning("[CustomMinionsRespawnTime]: invalid config property -> CustomMinionsRespawnTime \"" + propSplit[0] + "\"" + propSplit[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2160,7 +2159,7 @@ public final class Config
|
|||||||
final String[] itemSplit = item.split(",");
|
final String[] itemSplit = item.split(",");
|
||||||
if (itemSplit.length != 2)
|
if (itemSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Config.load(): invalid config property -> RateDropItemsById \"", item, "\""));
|
_log.warning("Config.load(): invalid config property -> RateDropItemsById \"" + item + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2172,7 +2171,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!item.isEmpty())
|
if (!item.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Config.load(): invalid config property -> RateDropItemsById \"", item, "\""));
|
_log.warning("Config.load(): invalid config property -> RateDropItemsById \"" + item + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2188,7 +2187,7 @@ public final class Config
|
|||||||
final String[] itemSplit = item.split(",");
|
final String[] itemSplit = item.split(",");
|
||||||
if (itemSplit.length != 2)
|
if (itemSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Config.load(): invalid config property -> RateDropItemsById \"", item, "\""));
|
_log.warning("Config.load(): invalid config property -> RateDropItemsById \"" + item + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2200,7 +2199,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!item.isEmpty())
|
if (!item.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Config.load(): invalid config property -> RateDropItemsById \"", item, "\""));
|
_log.warning("Config.load(): invalid config property -> RateDropItemsById \"" + item + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2336,7 +2335,7 @@ public final class Config
|
|||||||
final String[] rewardSplit = reward.split(",");
|
final String[] rewardSplit = reward.split(",");
|
||||||
if (rewardSplit.length != 2)
|
if (rewardSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTEventReward \"", reward, "\""));
|
_log.warning("TvTEventEngine[Config.load()]: invalid config property -> TvTEventReward \"" + reward + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2352,7 +2351,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!reward.isEmpty())
|
if (!reward.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTEventReward \"", reward, "\""));
|
_log.warning("TvTEventEngine[Config.load()]: invalid config property -> TvTEventReward \"" + reward + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2374,7 +2373,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!door.isEmpty())
|
if (!door.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTDoorsToOpen \"", door, "\""));
|
_log.warning("TvTEventEngine[Config.load()]: invalid config property -> TvTDoorsToOpen \"" + door + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2390,7 +2389,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!door.isEmpty())
|
if (!door.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTDoorsToClose \"", door, "\""));
|
_log.warning("TvTEventEngine[Config.load()]: invalid config property -> TvTDoorsToClose \"" + door + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2404,7 +2403,7 @@ public final class Config
|
|||||||
final String[] skillSplit = skill.split(",");
|
final String[] skillSplit = skill.split(",");
|
||||||
if (skillSplit.length != 2)
|
if (skillSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTEventFighterBuffs \"", skill, "\""));
|
_log.warning("TvTEventEngine[Config.load()]: invalid config property -> TvTEventFighterBuffs \"" + skill + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2416,7 +2415,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!skill.isEmpty())
|
if (!skill.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTEventFighterBuffs \"", skill, "\""));
|
_log.warning("TvTEventEngine[Config.load()]: invalid config property -> TvTEventFighterBuffs \"" + skill + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2432,7 +2431,7 @@ public final class Config
|
|||||||
final String[] skillSplit = skill.split(",");
|
final String[] skillSplit = skill.split(",");
|
||||||
if (skillSplit.length != 2)
|
if (skillSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTEventMageBuffs \"", skill, "\""));
|
_log.warning("TvTEventEngine[Config.load()]: invalid config property -> TvTEventMageBuffs \"" + skill + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2444,7 +2443,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!skill.isEmpty())
|
if (!skill.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("TvTEventEngine[Config.load()]: invalid config property -> TvTEventMageBuffs \"", skill, "\""));
|
_log.warning("TvTEventEngine[Config.load()]: invalid config property -> TvTEventMageBuffs \"" + skill + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2533,7 +2532,7 @@ public final class Config
|
|||||||
final String[] entrySplit = entry.split(",");
|
final String[] entrySplit = entry.split(",");
|
||||||
if (entrySplit.length != 2)
|
if (entrySplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("DualboxCheck[Config.load()]: invalid config property -> DualboxCheckWhitelist \"", entry, "\""));
|
_log.warning("DualboxCheck[Config.load()]: invalid config property -> DualboxCheckWhitelist \"" + entry + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2545,11 +2544,11 @@ public final class Config
|
|||||||
}
|
}
|
||||||
catch (UnknownHostException e)
|
catch (UnknownHostException e)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("DualboxCheck[Config.load()]: invalid address -> DualboxCheckWhitelist \"", entrySplit[0], "\""));
|
_log.warning("DualboxCheck[Config.load()]: invalid address -> DualboxCheckWhitelist \"" + entrySplit[0] + "\"");
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("DualboxCheck[Config.load()]: invalid number -> DualboxCheckWhitelist \"", entrySplit[1], "\""));
|
_log.warning("DualboxCheck[Config.load()]: invalid number -> DualboxCheckWhitelist \"" + entrySplit[1] + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2634,7 +2633,7 @@ public final class Config
|
|||||||
String[] itemSplit = item.split(",");
|
String[] itemSplit = item.split(",");
|
||||||
if (itemSplit.length != 2)
|
if (itemSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Config.load(): invalid config property -> PremiumRateDropChanceByItemId \"", item, "\""));
|
_log.warning("Config.load(): invalid config property -> PremiumRateDropChanceByItemId \"" + item + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2646,7 +2645,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!item.isEmpty())
|
if (!item.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Config.load(): invalid config property -> PremiumRateDropChanceByItemId \"", item, "\""));
|
_log.warning("Config.load(): invalid config property -> PremiumRateDropChanceByItemId \"" + item + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2661,7 +2660,7 @@ public final class Config
|
|||||||
String[] itemSplit = item.split(",");
|
String[] itemSplit = item.split(",");
|
||||||
if (itemSplit.length != 2)
|
if (itemSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Config.load(): invalid config property -> PremiumRateDropAmountByItemId \"", item, "\""));
|
_log.warning("Config.load(): invalid config property -> PremiumRateDropAmountByItemId \"" + item + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2673,7 +2672,7 @@ public final class Config
|
|||||||
{
|
{
|
||||||
if (!item.isEmpty())
|
if (!item.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Config.load(): invalid config property -> PremiumRateDropAmountByItemId \"", item, "\""));
|
_log.warning("Config.load(): invalid config property -> PremiumRateDropAmountByItemId \"" + item + "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3008,7 +3007,7 @@ public final class Config
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Failed to save hex id to ", fileName, " File."));
|
_log.warning("Failed to save hex id to " + fileName + " File.");
|
||||||
_log.warning("Config: " + e.getMessage());
|
_log.warning("Config: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3046,11 +3045,11 @@ public final class Config
|
|||||||
*/
|
*/
|
||||||
private static void loadFloodProtectorConfig(PropertiesParser properties, FloodProtectorConfig config, String configString, int defaultInterval)
|
private static void loadFloodProtectorConfig(PropertiesParser properties, FloodProtectorConfig config, String configString, int defaultInterval)
|
||||||
{
|
{
|
||||||
config.FLOOD_PROTECTION_INTERVAL = properties.getInt(StringUtil.concat("FloodProtector", configString, "Interval"), defaultInterval);
|
config.FLOOD_PROTECTION_INTERVAL = properties.getInt("FloodProtector" + configString + "Interval", defaultInterval);
|
||||||
config.LOG_FLOODING = properties.getBoolean(StringUtil.concat("FloodProtector", configString, "LogFlooding"), false);
|
config.LOG_FLOODING = properties.getBoolean("FloodProtector" + configString + "LogFlooding", false);
|
||||||
config.PUNISHMENT_LIMIT = properties.getInt(StringUtil.concat("FloodProtector", configString, "PunishmentLimit"), 0);
|
config.PUNISHMENT_LIMIT = properties.getInt("FloodProtector" + configString + "PunishmentLimit", 0);
|
||||||
config.PUNISHMENT_TYPE = properties.getString(StringUtil.concat("FloodProtector", configString, "PunishmentType"), "none");
|
config.PUNISHMENT_TYPE = properties.getString("FloodProtector" + configString + "PunishmentType", "none");
|
||||||
config.PUNISHMENT_TIME = properties.getInt(StringUtil.concat("FloodProtector", configString, "PunishmentTime"), 0) * 60000;
|
config.PUNISHMENT_TIME = properties.getInt("FloodProtector" + configString + "PunishmentTime", 0) * 60000;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getServerTypeId(String[] serverTypes)
|
public static int getServerTypeId(String[] serverTypes)
|
||||||
@@ -3234,7 +3233,7 @@ public final class Config
|
|||||||
valueSplit = value.split(",");
|
valueSplit = value.split(",");
|
||||||
if (valueSplit.length != 2)
|
if (valueSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("parseItemsList[Config.load()]: invalid entry -> \"", valueSplit[0], "\", should be itemId,itemNumber. Skipping to the next entry in the list."));
|
_log.warning("parseItemsList[Config.load()]: invalid entry -> \"" + valueSplit[0] + "\", should be itemId,itemNumber. Skipping to the next entry in the list.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3245,7 +3244,7 @@ public final class Config
|
|||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("parseItemsList[Config.load()]: invalid itemId -> \"", valueSplit[0], "\", value must be an integer. Skipping to the next entry in the list."));
|
_log.warning("parseItemsList[Config.load()]: invalid itemId -> \"" + valueSplit[0] + "\", value must be an integer. Skipping to the next entry in the list.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
@@ -3254,7 +3253,7 @@ public final class Config
|
|||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("parseItemsList[Config.load()]: invalid item number -> \"", valueSplit[1], "\", value must be an integer. Skipping to the next entry in the list."));
|
_log.warning("parseItemsList[Config.load()]: invalid item number -> \"" + valueSplit[1] + "\", value must be an integer. Skipping to the next entry in the list.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
result[i++] = tmp;
|
result[i++] = tmp;
|
||||||
|
@@ -30,7 +30,6 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
import com.l2jmobius.Config;
|
import com.l2jmobius.Config;
|
||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -694,7 +693,7 @@ public class ThreadPoolManager
|
|||||||
final int count = ptf.getGroup().activeCount();
|
final int count = ptf.getGroup().activeCount();
|
||||||
final Thread[] threads = new Thread[count + 2];
|
final Thread[] threads = new Thread[count + 2];
|
||||||
ptf.getGroup().enumerate(threads);
|
ptf.getGroup().enumerate(threads);
|
||||||
StringUtil.append(sb, "General Packet Thread Pool:" + Config.EOL + "Tasks in the queue: ", String.valueOf(_generalPacketsThreadPool.getQueue().size()), Config.EOL + "Showing threads stack trace:" + Config.EOL + "There should be ", String.valueOf(count), " Threads" + Config.EOL);
|
sb.append("General Packet Thread Pool:" + Config.EOL + "Tasks in the queue: " + _generalPacketsThreadPool.getQueue().size() + Config.EOL + "Showing threads stack trace:" + Config.EOL + "There should be " + count + " Threads" + Config.EOL);
|
||||||
for (Thread t : threads)
|
for (Thread t : threads)
|
||||||
{
|
{
|
||||||
if (t == null)
|
if (t == null)
|
||||||
@@ -702,10 +701,12 @@ public class ThreadPoolManager
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(sb, t.getName(), Config.EOL);
|
sb.append(t.getName());
|
||||||
|
sb.append(Config.EOL);
|
||||||
for (StackTraceElement ste : t.getStackTrace())
|
for (StackTraceElement ste : t.getStackTrace())
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, ste.toString(), Config.EOL);
|
sb.append(ste);
|
||||||
|
sb.append(Config.EOL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -726,7 +727,7 @@ public class ThreadPoolManager
|
|||||||
final int count = ptf.getGroup().activeCount();
|
final int count = ptf.getGroup().activeCount();
|
||||||
final Thread[] threads = new Thread[count + 2];
|
final Thread[] threads = new Thread[count + 2];
|
||||||
ptf.getGroup().enumerate(threads);
|
ptf.getGroup().enumerate(threads);
|
||||||
StringUtil.append(sb, "I/O Packet Thread Pool:" + Config.EOL + "Tasks in the queue: ", String.valueOf(_ioPacketsThreadPool.getQueue().size()), Config.EOL + "Showing threads stack trace:" + Config.EOL + "There should be ", String.valueOf(count), " Threads" + Config.EOL);
|
sb.append("I/O Packet Thread Pool:" + Config.EOL + "Tasks in the queue: " + _ioPacketsThreadPool.getQueue().size() + Config.EOL + "Showing threads stack trace:" + Config.EOL + "There should be " + count + " Threads" + Config.EOL);
|
||||||
|
|
||||||
for (Thread t : threads)
|
for (Thread t : threads)
|
||||||
{
|
{
|
||||||
@@ -735,11 +736,12 @@ public class ThreadPoolManager
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(sb, t.getName(), Config.EOL);
|
sb.append(t.getName());
|
||||||
|
sb.append(Config.EOL);
|
||||||
for (StackTraceElement ste : t.getStackTrace())
|
for (StackTraceElement ste : t.getStackTrace())
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, ste.toString(), Config.EOL);
|
sb.append(ste);
|
||||||
|
sb.append(Config.EOL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -760,7 +762,7 @@ public class ThreadPoolManager
|
|||||||
final int count = ptf.getGroup().activeCount();
|
final int count = ptf.getGroup().activeCount();
|
||||||
final Thread[] threads = new Thread[count + 2];
|
final Thread[] threads = new Thread[count + 2];
|
||||||
ptf.getGroup().enumerate(threads);
|
ptf.getGroup().enumerate(threads);
|
||||||
StringUtil.append(sb, "General Thread Pool:" + Config.EOL + "Tasks in the queue: ", String.valueOf(_generalThreadPool.getQueue().size()), Config.EOL + "Showing threads stack trace:" + Config.EOL + "There should be ", String.valueOf(count), " Threads" + Config.EOL);
|
sb.append("General Thread Pool:" + Config.EOL + "Tasks in the queue: " + _generalThreadPool.getQueue().size() + Config.EOL + "Showing threads stack trace:" + Config.EOL + "There should be " + +count + " Threads" + Config.EOL);
|
||||||
|
|
||||||
for (Thread t : threads)
|
for (Thread t : threads)
|
||||||
{
|
{
|
||||||
@@ -769,11 +771,12 @@ public class ThreadPoolManager
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(sb, t.getName(), Config.EOL);
|
sb.append(t.getName());
|
||||||
|
sb.append(Config.EOL);
|
||||||
for (StackTraceElement ste : t.getStackTrace())
|
for (StackTraceElement ste : t.getStackTrace())
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, ste.toString(), Config.EOL);
|
sb.append(ste);
|
||||||
|
sb.append(Config.EOL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,6 @@ import com.l2jmobius.gameserver.communitybbs.BB.Post;
|
|||||||
import com.l2jmobius.gameserver.communitybbs.BB.Topic;
|
import com.l2jmobius.gameserver.communitybbs.BB.Topic;
|
||||||
import com.l2jmobius.gameserver.handler.CommunityBoardHandler;
|
import com.l2jmobius.gameserver.handler.CommunityBoardHandler;
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class PostBBSManager extends BaseBBSManager
|
public class PostBBSManager extends BaseBBSManager
|
||||||
{
|
{
|
||||||
@@ -126,15 +125,23 @@ public class PostBBSManager extends BaseBBSManager
|
|||||||
|
|
||||||
private void showHtmlEditPost(Topic topic, L2PcInstance activeChar, Forum forum, Post p)
|
private void showHtmlEditPost(Topic topic, L2PcInstance activeChar, Forum forum, Post p)
|
||||||
{
|
{
|
||||||
final String html = StringUtil.concat("<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsmemo\">", forum.getName(), " Form</a></td></tr></table><img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=0><tr><td width=610><img src=\"sek.cbui355\" width=\"610\" height=\"1\"><br1><img src=\"sek.cbui355\" width=\"610\" height=\"1\"></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=20></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29>&$413;</td><td FIXWIDTH=540>", topic.getName(), "</td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29 valign=top>&$427;</td><td align=center FIXWIDTH=540><MultiEdit var =\"Content\" width=535 height=313></td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29> </td><td align=center FIXWIDTH=70><button value=\"&$140;\" action=\"Write Post ", String.valueOf(forum.getID()), ";", String.valueOf(topic.getID()), ";0 _ Content Content Content\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td><td align=center FIXWIDTH=70><button value = \"&$141;\" action=\"bypass _bbsmemo\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\"> </td><td align=center FIXWIDTH=400> </td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr></table></center></body></html>");
|
final String html = "<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsmemo\">" + forum.getName() + " Form</a></td></tr></table><img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=0><tr><td width=610><img src=\"sek.cbui355\" width=\"610\" height=\"1\"><br1><img src=\"sek.cbui355\" width=\"610\" height=\"1\"></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=20></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29>&$413;</td><td FIXWIDTH=540>" + topic.getName() + "</td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29 valign=top>&$427;</td><td align=center FIXWIDTH=540><MultiEdit var =\"Content\" width=535 height=313></td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29> </td><td align=center FIXWIDTH=70><button value=\"&$140;\" action=\"Write Post " + forum.getID() + ";" + topic.getID() + ";0 _ Content Content Content\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td><td align=center FIXWIDTH=70><button value = \"&$141;\" action=\"bypass _bbsmemo\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\"> </td><td align=center FIXWIDTH=400> </td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr></table></center></body></html>";
|
||||||
send1001(html, activeChar);
|
send1001(html, activeChar);
|
||||||
send1002(activeChar, p.getCPost(0).postTxt, topic.getName(), DateFormat.getInstance().format(new Date(topic.getDate())));
|
send1002(activeChar, p.getCPost(0).postTxt, topic.getName(), DateFormat.getInstance().format(new Date(topic.getDate())));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showMemoPost(Topic topic, L2PcInstance activeChar, Forum forum)
|
private void showMemoPost(Topic topic, L2PcInstance activeChar, Forum forum)
|
||||||
{
|
{
|
||||||
final Post p = getGPosttByTopic(topic);
|
//
|
||||||
CommunityBoardHandler.separateAndSend(StringUtil.concat("<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsmemo\">Memo Form</a></td></tr></table><img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=0 bgcolor=333333><tr><td height=10></td></tr><tr><td fixWIDTH=55 align=right valign=top>&$413; : </td><td fixWIDTH=380 valign=top>", topic.getName(), "</td><td fixwidth=5></td><td fixwidth=50></td><td fixWIDTH=120></td></tr><tr><td height=10></td></tr><tr><td align=right><font color=\"AAAAAA\" >&$417; : </font></td><td><font color=\"AAAAAA\">", topic.getOwnerName() + "</font></td><td></td><td><font color=\"AAAAAA\">&$418; :</font></td><td><font color=\"AAAAAA\">", DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()).format(p.getCPost(0).postDate), "</font></td></tr><tr><td height=10></td></tr></table><br><table border=0 cellspacing=0 cellpadding=0><tr><td fixwidth=5></td><td FIXWIDTH=600 align=left>", p.getCPost(0).postTxt.replace(">", ">").replace("<", "<"), "</td><td fixqqwidth=5></td></tr></table><br><img src=\"L2UI.squareblank\" width=\"1\" height=\"5\"><img src=\"L2UI.squaregray\" width=\"610\" height=\"1\"><img src=\"L2UI.squareblank\" width=\"1\" height=\"5\"><table border=0 cellspacing=0 cellpadding=0 FIXWIDTH=610><tr><td width=50><button value=\"&$422;\" action=\"bypass _bbsmemo\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\"></td><td width=560 align=right><table border=0 cellspacing=0><tr><td FIXWIDTH=300></td><td><button value = \"&$424;\" action=\"bypass _bbsposts;edit;", String.valueOf(forum.getID()), ";", String.valueOf(topic.getID()), ";0\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td> <td><button value = \"&$425;\" action=\"bypass _bbstopics;del;", String.valueOf(forum.getID()), ";", String.valueOf(topic.getID()), "\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td> <td><button value = \"&$421;\" action=\"bypass _bbstopics;crea;", String.valueOf(forum.getID()), "\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td> </tr></table></td></tr></table><br><br><br></center></body></html>"), activeChar);
|
Post p = getGPosttByTopic(topic);
|
||||||
|
Locale locale = Locale.getDefault();
|
||||||
|
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, locale);
|
||||||
|
|
||||||
|
String mes = p.getCPost(0).postTxt.replace(">", ">");
|
||||||
|
mes = mes.replace("<", "<");
|
||||||
|
|
||||||
|
final String html = "<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsmemo\">Memo Form</a></td></tr></table><img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=0 bgcolor=333333><tr><td height=10></td></tr><tr><td fixWIDTH=55 align=right valign=top>&$413; : </td><td fixWIDTH=380 valign=top>" + topic.getName() + "</td><td fixwidth=5></td><td fixwidth=50></td><td fixWIDTH=120></td></tr><tr><td height=10></td></tr><tr><td align=right><font color=\"AAAAAA\" >&$417; : </font></td><td><font color=\"AAAAAA\">" + topic.getOwnerName() + "</font></td><td></td><td><font color=\"AAAAAA\">&$418; :</font></td><td><font color=\"AAAAAA\">" + dateFormat.format(p.getCPost(0).postDate) + "</font></td></tr><tr><td height=10></td></tr></table><br><table border=0 cellspacing=0 cellpadding=0><tr><td fixwidth=5></td><td FIXWIDTH=600 align=left>" + mes + "</td><td fixqqwidth=5></td></tr></table><br><img src=\"L2UI.squareblank\" width=\"1\" height=\"5\"><img src=\"L2UI.squaregray\" width=\"610\" height=\"1\"><img src=\"L2UI.squareblank\" width=\"1\" height=\"5\"><table border=0 cellspacing=0 cellpadding=0 FIXWIDTH=610><tr><td width=50><button value=\"&$422;\" action=\"bypass _bbsmemo\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\"></td><td width=560 align=right><table border=0 cellspacing=0><tr><td FIXWIDTH=300></td><td><button value = \"&$424;\" action=\"bypass _bbsposts;edit;" + forum.getID() + ";" + topic.getID() + ";0\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td> <td><button value = \"&$425;\" action=\"bypass _bbstopics;del;" + forum.getID() + ";" + topic.getID() + "\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td> <td><button value = \"&$421;\" action=\"bypass _bbstopics;crea;" + forum.getID() + "\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td> </tr></table></td></tr></table><br><br><br></center></body></html>";
|
||||||
|
CommunityBoardHandler.separateAndSend(html, activeChar);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -31,7 +31,6 @@ import com.l2jmobius.gameserver.communitybbs.BB.Topic;
|
|||||||
import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
|
import com.l2jmobius.gameserver.data.sql.impl.ClanTable;
|
||||||
import com.l2jmobius.gameserver.handler.CommunityBoardHandler;
|
import com.l2jmobius.gameserver.handler.CommunityBoardHandler;
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class TopicBBSManager extends BaseBBSManager
|
public class TopicBBSManager extends BaseBBSManager
|
||||||
{
|
{
|
||||||
@@ -211,7 +210,7 @@ public class TopicBBSManager extends BaseBBSManager
|
|||||||
|
|
||||||
private void showMemoNewTopics(Forum forum, L2PcInstance activeChar)
|
private void showMemoNewTopics(Forum forum, L2PcInstance activeChar)
|
||||||
{
|
{
|
||||||
final String html = StringUtil.concat("<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsmemo\">Memo Form</a></td></tr></table><img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=0><tr><td width=610><img src=\"sek.cbui355\" width=\"610\" height=\"1\"><br1><img src=\"sek.cbui355\" width=\"610\" height=\"1\"></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=20></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29>&$413;</td><td FIXWIDTH=540><edit var = \"Title\" width=540 height=13></td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29 valign=top>&$427;</td><td align=center FIXWIDTH=540><MultiEdit var =\"Content\" width=535 height=313></td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29> </td><td align=center FIXWIDTH=70><button value=\"&$140;\" action=\"Write Topic crea ", String.valueOf(forum.getID()), " Title Content Title\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td><td align=center FIXWIDTH=70><button value = \"&$141;\" action=\"bypass _bbsmemo\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\"> </td><td align=center FIXWIDTH=400> </td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr></table></center></body></html>");
|
final String html = "<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsmemo\">Memo Form</a></td></tr></table><img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=0><tr><td width=610><img src=\"sek.cbui355\" width=\"610\" height=\"1\"><br1><img src=\"sek.cbui355\" width=\"610\" height=\"1\"></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=20></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29>&$413;</td><td FIXWIDTH=540><edit var = \"Title\" width=540 height=13></td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29 valign=top>&$427;</td><td align=center FIXWIDTH=540><MultiEdit var =\"Content\" width=535 height=313></td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr></table><table fixwidth=610 border=0 cellspacing=0 cellpadding=0><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=1></td><td align=center FIXWIDTH=60 height=29> </td><td align=center FIXWIDTH=70><button value=\"&$140;\" action=\"Write Topic crea " + forum.getID() + " Title Content Title\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td><td align=center FIXWIDTH=70><button value = \"&$141;\" action=\"bypass _bbsmemo\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\"> </td><td align=center FIXWIDTH=400> </td><td><img src=\"l2ui.mini_logo\" width=5 height=1></td></tr></table></center></body></html>";
|
||||||
send1001(html, activeChar);
|
send1001(html, activeChar);
|
||||||
send1002(activeChar);
|
send1002(activeChar);
|
||||||
}
|
}
|
||||||
@@ -235,7 +234,8 @@ public class TopicBBSManager extends BaseBBSManager
|
|||||||
private void showMemoTopics(Forum forum, L2PcInstance activeChar, int index)
|
private void showMemoTopics(Forum forum, L2PcInstance activeChar, int index)
|
||||||
{
|
{
|
||||||
forum.vload();
|
forum.vload();
|
||||||
final StringBuilder html = StringUtil.startAppend(2000, "<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsmemo\">Memo Form</a></td></tr></table><img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=2 bgcolor=888888 width=610><tr><td FIXWIDTH=5></td><td FIXWIDTH=415 align=center>&$413;</td><td FIXWIDTH=120 align=center></td><td FIXWIDTH=70 align=center>&$418;</td></tr></table>");
|
final StringBuilder html = new StringBuilder(2000);
|
||||||
|
html.append("<html><body><br><br><table border=0 width=610><tr><td width=10></td><td width=600 align=left><a action=\"bypass _bbshome\">HOME</a> > <a action=\"bypass _bbsmemo\">Memo Form</a></td></tr></table><img src=\"L2UI.squareblank\" width=\"1\" height=\"10\"><center><table border=0 cellspacing=0 cellpadding=2 bgcolor=888888 width=610><tr><td FIXWIDTH=5></td><td FIXWIDTH=415 align=center>&$413;</td><td FIXWIDTH=120 align=center></td><td FIXWIDTH=70 align=center>&$418;</td></tr></table>");
|
||||||
final DateFormat dateFormat = DateFormat.getInstance();
|
final DateFormat dateFormat = DateFormat.getInstance();
|
||||||
|
|
||||||
for (int i = 0, j = getMaxID(forum) + 1; i < (12 * index); j--)
|
for (int i = 0, j = getMaxID(forum) + 1; i < (12 * index); j--)
|
||||||
@@ -244,10 +244,13 @@ public class TopicBBSManager extends BaseBBSManager
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
final Topic t = forum.getTopic(j);
|
Topic t = forum.getTopic(j);
|
||||||
if ((t != null) && (i++ >= (12 * (index - 1))))
|
if (t != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<table border=0 cellspacing=0 cellpadding=5 WIDTH=610><tr><td FIXWIDTH=5></td><td FIXWIDTH=415><a action=\"bypass _bbsposts;read;", String.valueOf(forum.getID()), ";", String.valueOf(t.getID()), "\">", t.getName(), "</a></td><td FIXWIDTH=120 align=center></td><td FIXWIDTH=70 align=center>", dateFormat.format(new Date(t.getDate())), "</td></tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">");
|
if (i++ >= (12 * (index - 1)))
|
||||||
|
{
|
||||||
|
html.append("<table border=0 cellspacing=0 cellpadding=5 WIDTH=610><tr><td FIXWIDTH=5></td><td FIXWIDTH=415><a action=\"bypass _bbsposts;read;" + forum.getID() + ";" + t.getID() + "\">" + t.getName() + "</a></td><td FIXWIDTH=120 align=center></td><td FIXWIDTH=70 align=center>" + dateFormat.format(new Date(t.getDate())) + "</td></tr></table><img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +262,7 @@ public class TopicBBSManager extends BaseBBSManager
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<td><button action=\"bypass _bbstopics;read;", String.valueOf(forum.getID()), ";", String.valueOf(index - 1), "\" back=\"l2ui_ch3.prev1_down\" fore=\"l2ui_ch3.prev1\" width=16 height=16 ></td>");
|
html.append("<td><button action=\"bypass _bbstopics;read;" + forum.getID() + ";" + (index - 1) + "\" back=\"l2ui_ch3.prev1_down\" fore=\"l2ui_ch3.prev1\" width=16 height=16 ></td>");
|
||||||
}
|
}
|
||||||
|
|
||||||
int nbp = forum.getTopicSize() / 8;
|
int nbp = forum.getTopicSize() / 8;
|
||||||
@@ -271,11 +274,11 @@ public class TopicBBSManager extends BaseBBSManager
|
|||||||
{
|
{
|
||||||
if (i == index)
|
if (i == index)
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<td> ", String.valueOf(i), " </td>");
|
html.append("<td> " + i + " </td>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<td><a action=\"bypass _bbstopics;read;", String.valueOf(forum.getID()), ";", String.valueOf(i), "\"> ", String.valueOf(i), " </a></td>");
|
html.append("<td><a action=\"bypass _bbstopics;read;" + forum.getID() + ";" + i + "\"> " + i + " </a></td>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (index == nbp)
|
if (index == nbp)
|
||||||
@@ -284,10 +287,10 @@ public class TopicBBSManager extends BaseBBSManager
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(html, "<td><button action=\"bypass _bbstopics;read;", String.valueOf(forum.getID()), ";", String.valueOf(index + 1), "\" back=\"l2ui_ch3.next1_down\" fore=\"l2ui_ch3.next1\" width=16 height=16 ></td>");
|
html.append("<td><button action=\"bypass _bbstopics;read;" + forum.getID() + ";" + (index + 1) + "\" back=\"l2ui_ch3.next1_down\" fore=\"l2ui_ch3.next1\" width=16 height=16 ></td>");
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(html, "</tr></table> </td> <td align=right><button value = \"&$421;\" action=\"bypass _bbstopics;crea;", String.valueOf(forum.getID()), "\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr> <td></td><td align=center><table border=0><tr><td></td><td><edit var = \"Search\" width=130 height=11></td><td><button value=\"&$420;\" action=\"Write 5 -2 0 Search _ _\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\"> </td> </tr></table> </td></tr></table><br><br><br></center></body></html>");
|
html.append("</tr></table> </td> <td align=right><button value = \"&$421;\" action=\"bypass _bbstopics;crea;" + forum.getID() + "\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td></tr><tr><td><img src=\"l2ui.mini_logo\" width=5 height=10></td></tr><tr> <td></td><td align=center><table border=0><tr><td></td><td><edit var = \"Search\" width=130 height=11></td><td><button value=\"&$420;\" action=\"Write 5 -2 0 Search _ _\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\"> </td> </tr></table> </td></tr></table><br><br><br></center></body></html>");
|
||||||
CommunityBoardHandler.separateAndSend(html.toString(), activeChar);
|
CommunityBoardHandler.separateAndSend(html.toString(), activeChar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -96,7 +96,7 @@ public class NpcData implements IXmlReader
|
|||||||
if ("npc".equalsIgnoreCase(listNode.getNodeName()))
|
if ("npc".equalsIgnoreCase(listNode.getNodeName()))
|
||||||
{
|
{
|
||||||
NamedNodeMap attrs = listNode.getAttributes();
|
NamedNodeMap attrs = listNode.getAttributes();
|
||||||
final StatsSet set = new StatsSet();
|
final StatsSet set = new StatsSet(new HashMap<>());
|
||||||
final int npcId = parseInteger(attrs, "id");
|
final int npcId = parseInteger(attrs, "id");
|
||||||
Map<String, Object> parameters = null;
|
Map<String, Object> parameters = null;
|
||||||
Map<Integer, Skill> skills = null;
|
Map<Integer, Skill> skills = null;
|
||||||
|
@@ -88,13 +88,9 @@ public final class GrandBossManager implements IStorable
|
|||||||
info.set("loc_z", rs.getInt("loc_z"));
|
info.set("loc_z", rs.getInt("loc_z"));
|
||||||
info.set("heading", rs.getInt("heading"));
|
info.set("heading", rs.getInt("heading"));
|
||||||
info.set("respawn_time", rs.getLong("respawn_time"));
|
info.set("respawn_time", rs.getLong("respawn_time"));
|
||||||
final double HP = rs.getDouble("currentHP"); // jython doesn't recognize doubles
|
info.set("currentHP", rs.getDouble("currentHP"));
|
||||||
final int true_HP = (int) HP; // so use java's ability to type cast
|
info.set("currentMP", rs.getDouble("currentMP"));
|
||||||
info.set("currentHP", true_HP); // to convert double to int
|
int status = rs.getInt("status");
|
||||||
final double MP = rs.getDouble("currentMP");
|
|
||||||
final int true_MP = (int) MP;
|
|
||||||
info.set("currentMP", true_MP);
|
|
||||||
final int status = rs.getInt("status");
|
|
||||||
_bossStatus.put(bossId, status);
|
_bossStatus.put(bossId, status);
|
||||||
_storedInfo.put(bossId, info);
|
_storedInfo.put(bossId, info);
|
||||||
_log.info(getClass().getSimpleName() + ": " + NpcData.getInstance().getTemplate(bossId).getName() + "(" + bossId + ") status is " + status + ".");
|
_log.info(getClass().getSimpleName() + ": " + NpcData.getInstance().getTemplate(bossId).getName() + "(" + bossId + ") status is " + status + ".");
|
||||||
|
@@ -32,7 +32,6 @@ import com.l2jmobius.gameserver.network.SystemMessageId;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Petition Manager
|
* Petition Manager
|
||||||
@@ -352,7 +351,8 @@ public final class PetitionManager
|
|||||||
|
|
||||||
public void sendPendingPetitionList(L2PcInstance activeChar)
|
public void sendPendingPetitionList(L2PcInstance activeChar)
|
||||||
{
|
{
|
||||||
final StringBuilder htmlContent = StringUtil.startAppend(600 + (getPendingPetitionCount() * 300), "<html><body><center><table width=270><tr><td width=45><button value=\"Main\" action=\"bypass -h admin_admin\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center>Petition Menu</center></td><td width=45><button value=\"Back\" action=\"bypass -h admin_admin7\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><table width=\"270\"><tr><td><table width=\"270\"><tr><td><button value=\"Reset\" action=\"bypass -h admin_reset_petitions\" width=\"80\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td align=right><button value=\"Refresh\" action=\"bypass -h admin_view_petitions\" width=\"80\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br></td></tr>");
|
final StringBuilder htmlContent = new StringBuilder(600 + (getPendingPetitionCount() * 300));
|
||||||
|
htmlContent.append("<html><body><center><table width=270><tr><td width=45><button value=\"Main\" action=\"bypass -h admin_admin\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center>Petition Menu</center></td><td width=45><button value=\"Back\" action=\"bypass -h admin_admin7\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><table width=\"270\"><tr><td><table width=\"270\"><tr><td><button value=\"Reset\" action=\"bypass -h admin_reset_petitions\" width=\"80\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td align=right><button value=\"Refresh\" action=\"bypass -h admin_view_petitions\" width=\"80\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br></td></tr>");
|
||||||
|
|
||||||
final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
||||||
|
|
||||||
@@ -374,18 +374,18 @@ public final class PetitionManager
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(htmlContent, "<tr><td width=\"270\"><table width=\"270\" cellpadding=\"2\" bgcolor=", color ? "131210" : "444444", "><tr><td width=\"130\">", dateFormat.format(new Date(currPetition.getSubmitTime())));
|
htmlContent.append("<tr><td width=\"270\"><table width=\"270\" cellpadding=\"2\" bgcolor=" + (color ? "131210" : "444444") + "><tr><td width=\"130\">" + dateFormat.format(new Date(currPetition.getSubmitTime())));
|
||||||
StringUtil.append(htmlContent, "</td><td width=\"140\" align=right><font color=\"", currPetition.getPetitioner().isOnline() ? "00FF00" : "999999", "\">", currPetition.getPetitioner().getName(), "</font></td></tr>");
|
htmlContent.append("</td><td width=\"140\" align=right><font color=\"" + (currPetition.getPetitioner().isOnline() ? "00FF00" : "999999") + "\">" + currPetition.getPetitioner().getName() + "</font></td></tr>");
|
||||||
StringUtil.append(htmlContent, "<tr><td width=\"130\">");
|
htmlContent.append("<tr><td width=\"130\">");
|
||||||
if (currPetition.getState() != PetitionState.IN_PROCESS)
|
if (currPetition.getState() != PetitionState.IN_PROCESS)
|
||||||
{
|
{
|
||||||
StringUtil.append(htmlContent, "<table width=\"130\" cellpadding=\"2\"><tr><td><button value=\"View\" action=\"bypass -h admin_view_petition ", String.valueOf(currPetition.getId()), "\" width=\"50\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><button value=\"Reject\" action=\"bypass -h admin_reject_petition ", String.valueOf(currPetition.getId()), "\" width=\"50\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table>");
|
htmlContent.append("<table width=\"130\" cellpadding=\"2\"><tr><td><button value=\"View\" action=\"bypass -h admin_view_petition " + currPetition.getId() + "\" width=\"50\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td><button value=\"Reject\" action=\"bypass -h admin_reject_petition " + currPetition.getId() + "\" width=\"50\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
htmlContent.append("<font color=\"" + (currPetition.getResponder().isOnline() ? "00FF00" : "999999") + "\">" + currPetition.getResponder().getName() + "</font>");
|
htmlContent.append("<font color=\"" + (currPetition.getResponder().isOnline() ? "00FF00" : "999999") + "\">" + currPetition.getResponder().getName() + "</font>");
|
||||||
}
|
}
|
||||||
StringUtil.append(htmlContent, "</td>", currPetition.getTypeAsString(), "<td width=\"140\" align=right>", currPetition.getTypeAsString(), "</td></tr></table></td></tr>");
|
htmlContent.append("</td>" + currPetition.getTypeAsString() + "<td width=\"140\" align=right>" + currPetition.getTypeAsString() + "</td></tr></table></td></tr>");
|
||||||
color = !color;
|
color = !color;
|
||||||
petcount++;
|
petcount++;
|
||||||
if (petcount > 10)
|
if (petcount > 10)
|
||||||
|
@@ -36,7 +36,6 @@ import com.l2jmobius.gameserver.enums.ShortcutType;
|
|||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.model.interfaces.IRestorable;
|
import com.l2jmobius.gameserver.model.interfaces.IRestorable;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SendMacroList;
|
import com.l2jmobius.gameserver.network.serverpackets.SendMacroList;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class MacroList implements IRestorable
|
public class MacroList implements IRestorable
|
||||||
{
|
{
|
||||||
@@ -136,10 +135,10 @@ public class MacroList implements IRestorable
|
|||||||
final StringBuilder sb = new StringBuilder(300);
|
final StringBuilder sb = new StringBuilder(300);
|
||||||
for (MacroCmd cmd : macro.getCommands())
|
for (MacroCmd cmd : macro.getCommands())
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, String.valueOf(cmd.getType().ordinal()), ",", String.valueOf(cmd.getD1()), ",", String.valueOf(cmd.getD2()));
|
sb.append(cmd.getType().ordinal() + "," + cmd.getD1() + "," + cmd.getD2());
|
||||||
if ((cmd.getCmd() != null) && (cmd.getCmd().length() > 0))
|
if ((cmd.getCmd() != null) && (cmd.getCmd().length() > 0))
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, ",", cmd.getCmd());
|
sb.append("," + cmd.getCmd());
|
||||||
}
|
}
|
||||||
sb.append(';');
|
sb.append(';');
|
||||||
}
|
}
|
||||||
|
@@ -34,7 +34,6 @@ import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.TutorialCloseHtml;
|
import com.l2jmobius.gameserver.network.serverpackets.TutorialCloseHtml;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.TutorialShowQuestionMark;
|
import com.l2jmobius.gameserver.network.serverpackets.TutorialShowQuestionMark;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
|
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class ...
|
* This class ...
|
||||||
@@ -295,7 +294,7 @@ public final class L2ClassMasterInstance extends L2MerchantInstance
|
|||||||
}
|
}
|
||||||
if (validateClassId(currentClassId, cid) && (cid.level() == level))
|
if (validateClassId(currentClassId, cid) && (cid.level() == level))
|
||||||
{
|
{
|
||||||
StringUtil.append(menu, "<a action=\"bypass -h npc_%objectId%_change_class ", String.valueOf(cid.getId()), "\">", ClassListData.getInstance().getClass(cid).getClientCode(), "</a><br>");
|
menu.append("<a action=\"bypass -h npc_%objectId%_change_class " + cid.getId() + "\">" + ClassListData.getInstance().getClass(cid).getClientCode() + "</a><br>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,7 +345,7 @@ public final class L2ClassMasterInstance extends L2MerchantInstance
|
|||||||
}
|
}
|
||||||
if (validateClassId(currentClassId, cid))
|
if (validateClassId(currentClassId, cid))
|
||||||
{
|
{
|
||||||
StringUtil.append(menu, "<a action=\"bypass -h AlternateClassMaster ", String.valueOf(cid.getId()), "\">", ClassListData.getInstance().getClass(cid).getEscapedClientCode(), "</a><br>");
|
menu.append("<a action=\"link CO" + cid.getId() + "\">" + ClassListData.getInstance().getClass(cid).getEscapedClientCode() + "</a><br>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -32,7 +32,6 @@ import com.l2jmobius.gameserver.network.SystemMessageId;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.ExAcquirableSkillListByClass;
|
import com.l2jmobius.gameserver.network.serverpackets.ExAcquirableSkillListByClass;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class L2NpcInstance extends L2Npc
|
public class L2NpcInstance extends L2Npc
|
||||||
{
|
{
|
||||||
@@ -112,7 +111,7 @@ public class L2NpcInstance extends L2Npc
|
|||||||
if (((L2NpcInstance) npc).getClassesToTeach().isEmpty())
|
if (((L2NpcInstance) npc).getClassesToTeach().isEmpty())
|
||||||
{
|
{
|
||||||
final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
|
final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
|
||||||
final String sb = StringUtil.concat("<html><body>I cannot teach you. My class list is empty.<br>Ask admin to fix it. Need add my npcid and classes to skill_learn.sql.<br>NpcId:", String.valueOf(npcId), ", Your classId:", String.valueOf(player.getClassId().getId()), "</body></html>");
|
final String sb = "<html><body>I cannot teach you. My class list is empty.<br>Ask admin to fix it. Need add my npcid and classes to skill_learn.sql.<br>NpcId:" + npcId + ", Your classId:" + player.getClassId().getId() + "</body></html>";
|
||||||
html.setHtml(sb);
|
html.setHtml(sb);
|
||||||
player.sendPacket(html);
|
player.sendPacket(html);
|
||||||
return;
|
return;
|
||||||
|
@@ -287,6 +287,7 @@ import com.l2jmobius.gameserver.network.serverpackets.ExSubjobInfo;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.ExUseSharedGroupItem;
|
import com.l2jmobius.gameserver.network.serverpackets.ExUseSharedGroupItem;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
|
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic;
|
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic;
|
||||||
|
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoFishing;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight;
|
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType;
|
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.GameGuardQuery;
|
import com.l2jmobius.gameserver.network.serverpackets.GameGuardQuery;
|
||||||
@@ -303,6 +304,7 @@ import com.l2jmobius.gameserver.network.serverpackets.ObservationMode;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.ObservationReturn;
|
import com.l2jmobius.gameserver.network.serverpackets.ObservationReturn;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.PartySmallWindowUpdate;
|
import com.l2jmobius.gameserver.network.serverpackets.PartySmallWindowUpdate;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.PetInventoryUpdate;
|
import com.l2jmobius.gameserver.network.serverpackets.PetInventoryUpdate;
|
||||||
|
import com.l2jmobius.gameserver.network.serverpackets.PlaySound;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListDelete;
|
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListDelete;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
|
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.PrivateStoreListBuy;
|
import com.l2jmobius.gameserver.network.serverpackets.PrivateStoreListBuy;
|
||||||
@@ -11832,7 +11834,7 @@ public final class L2PcInstance extends L2Playable
|
|||||||
_fishx = _x;
|
_fishx = _x;
|
||||||
_fishy = _y;
|
_fishy = _y;
|
||||||
_fishz = _z;
|
_fishz = _z;
|
||||||
// broadcastUserInfo();
|
|
||||||
// Starts fishing
|
// Starts fishing
|
||||||
final int lvl = getRandomFishLvl();
|
final int lvl = getRandomFishLvl();
|
||||||
final int grade = getRandomFishGrade();
|
final int grade = getRandomFishGrade();
|
||||||
@@ -11852,9 +11854,9 @@ public final class L2PcInstance extends L2Playable
|
|||||||
{
|
{
|
||||||
_fish.setFishGroup(-1);
|
_fish.setFishGroup(-1);
|
||||||
}
|
}
|
||||||
// sendMessage("Hook x,y: " + _x + "," + _y + " - Water Z, Player Z:" + _z + ", " + getZ()); // debug line, uncoment to show coordinates used in fishing.
|
|
||||||
broadcastPacket(new ExFishingStart(this, _fish.getFishGroup(), _x, _y, _z, _lure.isNightLure()));
|
broadcastPacket(new ExFishingStart(this, _fish.getFishGroup(), _x, _y, _z, _lure.isNightLure()));
|
||||||
// sendPacket(new PlaySound(1, "SF_P_01", 0, 0, 0, 0, 0));
|
sendPacket(new ExUserInfoFishing(this));
|
||||||
|
sendPacket(new PlaySound(1, "SF_P_01", 0, 0, 0, 0, 0));
|
||||||
startLookingForFishTask();
|
startLookingForFishTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -54,7 +54,6 @@ import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
|
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hero entity.
|
* Hero entity.
|
||||||
@@ -464,19 +463,19 @@ public class Hero
|
|||||||
{
|
{
|
||||||
breakat = i;
|
breakat = i;
|
||||||
final StatsSet diaryEntry = list.get(i);
|
final StatsSet diaryEntry = list.get(i);
|
||||||
StringUtil.append(fList, "<tr><td>");
|
fList.append("<tr><td>");
|
||||||
if (color)
|
if (color)
|
||||||
{
|
{
|
||||||
StringUtil.append(fList, "<table width=270 bgcolor=\"131210\">");
|
fList.append("<table width=270 bgcolor=\"131210\">");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(fList, "<table width=270>");
|
fList.append("<table width=270>");
|
||||||
}
|
}
|
||||||
StringUtil.append(fList, "<tr><td width=270><font color=\"LEVEL\">" + diaryEntry.getString("date") + ":xx</font></td></tr>");
|
fList.append("<tr><td width=270><font color=\"LEVEL\">" + diaryEntry.getString("date") + ":xx</font></td></tr>");
|
||||||
StringUtil.append(fList, "<tr><td width=270>" + diaryEntry.getString("action") + "</td></tr>");
|
fList.append("<tr><td width=270>" + diaryEntry.getString("action") + "</td></tr>");
|
||||||
StringUtil.append(fList, "<tr><td> </td></tr></table>");
|
fList.append("<tr><td> </td></tr></table>");
|
||||||
StringUtil.append(fList, "</td></tr>");
|
fList.append("</td></tr>");
|
||||||
color = !color;
|
color = !color;
|
||||||
counter++;
|
counter++;
|
||||||
if (counter >= perpage)
|
if (counter >= perpage)
|
||||||
@@ -552,19 +551,19 @@ public class Hero
|
|||||||
{
|
{
|
||||||
breakat = i;
|
breakat = i;
|
||||||
final StatsSet fight = heroFights.get(i);
|
final StatsSet fight = heroFights.get(i);
|
||||||
StringUtil.append(fList, "<tr><td>");
|
fList.append("<tr><td>");
|
||||||
if (color)
|
if (color)
|
||||||
{
|
{
|
||||||
StringUtil.append(fList, "<table width=270 bgcolor=\"131210\">");
|
fList.append("<table width=270 bgcolor=\"131210\">");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StringUtil.append(fList, "<table width=270>");
|
fList.append("<table width=270>");
|
||||||
}
|
}
|
||||||
StringUtil.append(fList, "<tr><td width=220><font color=\"LEVEL\">" + fight.getString("start") + "</font> " + fight.getString("result") + "</td><td width=50 align=right>" + (fight.getInt("classed") > 0 ? "<font color=\"FFFF99\">cls</font>" : "<font color=\"999999\">non-cls<font>") + "</td></tr>");
|
fList.append("<tr><td width=220><font color=\"LEVEL\">" + fight.getString("start") + "</font> " + fight.getString("result") + "</td><td width=50 align=right>" + (fight.getInt("classed") > 0 ? "<font color=\"FFFF99\">cls</font>" : "<font color=\"999999\">non-cls<font>") + "</td></tr>");
|
||||||
StringUtil.append(fList, "<tr><td width=220>vs " + fight.getString("oponent") + " (" + fight.getString("oponentclass") + ")</td><td width=50 align=right>(" + fight.getString("time") + ")</td></tr>");
|
fList.append("<tr><td width=220>vs " + fight.getString("oponent") + " (" + fight.getString("oponentclass") + ")</td><td width=50 align=right>(" + fight.getString("time") + ")</td></tr>");
|
||||||
StringUtil.append(fList, "<tr><td colspan=2> </td></tr></table>");
|
fList.append("<tr><td colspan=2> </td></tr></table>");
|
||||||
StringUtil.append(fList, "</td></tr>");
|
fList.append("</td></tr>");
|
||||||
color = !color;
|
color = !color;
|
||||||
counter++;
|
counter++;
|
||||||
if (counter >= perpage)
|
if (counter >= perpage)
|
||||||
|
@@ -52,7 +52,7 @@ public class Message
|
|||||||
private String _receiverName = null;
|
private String _receiverName = null;
|
||||||
private final String _subject, _content;
|
private final String _subject, _content;
|
||||||
private boolean _unread, _returned;
|
private boolean _unread, _returned;
|
||||||
private MailType _messageType = MailType.REGULAR;
|
private final MailType _messageType;
|
||||||
private boolean _deletedBySender;
|
private boolean _deletedBySender;
|
||||||
private boolean _deletedByReceiver;
|
private boolean _deletedByReceiver;
|
||||||
private final long _reqAdena;
|
private final long _reqAdena;
|
||||||
@@ -112,6 +112,7 @@ public class Message
|
|||||||
_deletedBySender = false;
|
_deletedBySender = false;
|
||||||
_deletedByReceiver = false;
|
_deletedByReceiver = false;
|
||||||
_reqAdena = reqAdena;
|
_reqAdena = reqAdena;
|
||||||
|
_messageType = MailType.REGULAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -55,7 +55,6 @@ import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.util.Rnd;
|
import com.l2jmobius.util.Rnd;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author HorridoJoho
|
* @author HorridoJoho
|
||||||
@@ -540,7 +539,7 @@ public class TvTEvent
|
|||||||
return "-";
|
return "-";
|
||||||
}
|
}
|
||||||
|
|
||||||
return StringUtil.concat(String.valueOf(itemNum), " ", ItemTable.getInstance().getTemplate(itemId).getName());
|
return itemNum + " " + ItemTable.getInstance().getTemplate(itemId).getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -43,7 +43,7 @@ import com.l2jmobius.gameserver.model.items.type.WeaponType;
|
|||||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoEquipSlot;
|
import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoEquipSlot;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime;
|
import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime;
|
||||||
import com.l2jmobius.util.StringUtil;
|
import com.l2jmobius.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class manages inventory
|
* This class manages inventory
|
||||||
@@ -1678,7 +1678,7 @@ public abstract class Inventory extends ItemContainer
|
|||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
_log.info("Unhandled slot type: " + slot);
|
_log.info("Unhandled slot type: " + slot);
|
||||||
_log.info(StringUtil.getTraceString(Thread.currentThread().getStackTrace()));
|
_log.info(Util.getTraceString(Thread.currentThread().getStackTrace()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pdollSlot < 0)
|
if (pdollSlot < 0)
|
||||||
|
@@ -20,7 +20,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
|
|||||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||||
import com.l2jmobius.gameserver.model.items.type.ArmorType;
|
import com.l2jmobius.gameserver.model.items.type.ArmorType;
|
||||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is dedicated to the management of armors.
|
* This class is dedicated to the management of armors.
|
||||||
@@ -86,7 +85,7 @@ public final class L2Armor extends L2Item
|
|||||||
catch (Exception nfe)
|
catch (Exception nfe)
|
||||||
{
|
{
|
||||||
// Incorrect syntax, don't add new skill
|
// Incorrect syntax, don't add new skill
|
||||||
_log.info(StringUtil.concat("> Couldnt parse ", skill, " in armor enchant skills! item ", toString()));
|
_log.info("> Couldnt parse " + skill + " in armor enchant skills! item " + this);
|
||||||
}
|
}
|
||||||
if ((id > 0) && (level > 0))
|
if ((id > 0) && (level > 0))
|
||||||
{
|
{
|
||||||
|
@@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.L2ExtractableProduct;
|
|||||||
import com.l2jmobius.gameserver.model.StatsSet;
|
import com.l2jmobius.gameserver.model.StatsSet;
|
||||||
import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||||
import com.l2jmobius.gameserver.model.items.type.EtcItemType;
|
import com.l2jmobius.gameserver.model.items.type.EtcItemType;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is dedicated to the management of EtcItem.
|
* This class is dedicated to the management of EtcItem.
|
||||||
@@ -96,7 +95,7 @@ public final class L2EtcItem extends L2Item
|
|||||||
final String[] data = part.split(",");
|
final String[] data = part.split(",");
|
||||||
if ((data.length != 4) && (data.length != 6))
|
if ((data.length != 4) && (data.length != 6))
|
||||||
{
|
{
|
||||||
_log.info(StringUtil.concat("> Couldnt parse ", part, " in capsuled_items! item ", toString()));
|
_log.info("> Couldnt parse " + part + " in capsuled_items! item " + this);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final int itemId = Integer.parseInt(data[0]);
|
final int itemId = Integer.parseInt(data[0]);
|
||||||
@@ -104,7 +103,7 @@ public final class L2EtcItem extends L2Item
|
|||||||
final int max = Integer.parseInt(data[2]);
|
final int max = Integer.parseInt(data[2]);
|
||||||
if (max < min)
|
if (max < min)
|
||||||
{
|
{
|
||||||
_log.info(StringUtil.concat("> Max amount < Min amount in ", part, ", item ", toString()));
|
_log.info("> Max amount < Min amount in " + part + ", item " + this);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final double chance = Double.parseDouble(data[3]);
|
final double chance = Double.parseDouble(data[3]);
|
||||||
@@ -116,7 +115,7 @@ public final class L2EtcItem extends L2Item
|
|||||||
maxEnchant = Integer.parseInt(data[5]);
|
maxEnchant = Integer.parseInt(data[5]);
|
||||||
if (maxEnchant < minEnchant)
|
if (maxEnchant < minEnchant)
|
||||||
{
|
{
|
||||||
_log.info(StringUtil.concat("> Max enchant < Min enchant in ", part, ", item ", toString()));
|
_log.info("> Max enchant < Min enchant in " + part + ", item " + this);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -48,7 +48,6 @@ import com.l2jmobius.gameserver.model.stats.functions.AbstractFunction;
|
|||||||
import com.l2jmobius.gameserver.model.stats.functions.FuncTemplate;
|
import com.l2jmobius.gameserver.model.stats.functions.FuncTemplate;
|
||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class contains all informations concerning the item (weapon, armor, etc).<BR>
|
* This class contains all informations concerning the item (weapon, armor, etc).<BR>
|
||||||
@@ -66,7 +65,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
|
|||||||
public static final int TYPE1_WEAPON_RING_EARRING_NECKLACE = 0;
|
public static final int TYPE1_WEAPON_RING_EARRING_NECKLACE = 0;
|
||||||
public static final int TYPE1_SHIELD_ARMOR = 1;
|
public static final int TYPE1_SHIELD_ARMOR = 1;
|
||||||
public static final int TYPE1_ITEM_QUESTITEM_ADENA = 4;
|
public static final int TYPE1_ITEM_QUESTITEM_ADENA = 4;
|
||||||
|
|
||||||
public static final int TYPE2_WEAPON = 0;
|
public static final int TYPE2_WEAPON = 0;
|
||||||
public static final int TYPE2_SHIELD_ARMOR = 1;
|
public static final int TYPE2_SHIELD_ARMOR = 1;
|
||||||
public static final int TYPE2_ACCESSORY = 2;
|
public static final int TYPE2_ACCESSORY = 2;
|
||||||
@@ -112,43 +111,43 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
|
|||||||
|
|
||||||
public static final int SLOT_MULTI_ALLWEAPON = SLOT_LR_HAND | SLOT_R_HAND;
|
public static final int SLOT_MULTI_ALLWEAPON = SLOT_LR_HAND | SLOT_R_HAND;
|
||||||
|
|
||||||
private int _itemId;
|
private int _itemId;
|
||||||
private int _displayId;
|
private int _displayId;
|
||||||
private String _name;
|
private String _name;
|
||||||
private String _additionalName;
|
private String _additionalName;
|
||||||
private String _icon;
|
private String _icon;
|
||||||
private int _weight;
|
private int _weight;
|
||||||
private boolean _stackable;
|
private boolean _stackable;
|
||||||
private MaterialType _materialType;
|
private MaterialType _materialType;
|
||||||
private CrystalType _crystalType;
|
private CrystalType _crystalType;
|
||||||
private int _equipReuseDelay;
|
private int _equipReuseDelay;
|
||||||
private int _duration;
|
private int _duration;
|
||||||
private int _time;
|
private int _time;
|
||||||
private int _autoDestroyTime;
|
private int _autoDestroyTime;
|
||||||
private int _bodyPart;
|
private int _bodyPart;
|
||||||
private int _referencePrice;
|
private int _referencePrice;
|
||||||
private int _crystalCount;
|
private int _crystalCount;
|
||||||
private boolean _sellable;
|
private boolean _sellable;
|
||||||
private boolean _dropable;
|
private boolean _dropable;
|
||||||
private boolean _destroyable;
|
private boolean _destroyable;
|
||||||
private boolean _tradeable;
|
private boolean _tradeable;
|
||||||
private boolean _depositable;
|
private boolean _depositable;
|
||||||
private boolean _auctionable;
|
private boolean _auctionable;
|
||||||
private int _enchantable;
|
private int _enchantable;
|
||||||
private boolean _elementable;
|
private boolean _elementable;
|
||||||
private boolean _questItem;
|
private boolean _questItem;
|
||||||
private boolean _freightable;
|
private boolean _freightable;
|
||||||
private boolean _allow_self_resurrection;
|
private boolean _allow_self_resurrection;
|
||||||
private boolean _is_oly_restricted;
|
private boolean _is_oly_restricted;
|
||||||
private boolean _for_npc;
|
private boolean _for_npc;
|
||||||
private boolean _common;
|
private boolean _common;
|
||||||
private boolean _heroItem;
|
private boolean _heroItem;
|
||||||
private boolean _pvpItem;
|
private boolean _pvpItem;
|
||||||
private boolean _immediate_effect;
|
private boolean _immediate_effect;
|
||||||
private boolean _ex_immediate_effect;
|
private boolean _ex_immediate_effect;
|
||||||
private int _defaultEnchantLevel;
|
private int _defaultEnchantLevel;
|
||||||
private ActionType _defaultAction;
|
private ActionType _defaultAction;
|
||||||
private boolean _isBlessedItem;
|
private boolean _isBlessedItem;
|
||||||
|
|
||||||
protected int _type1; // needed for item list (inventory)
|
protected int _type1; // needed for item list (inventory)
|
||||||
protected int _type2; // different lists for armor, weapon, etc
|
protected int _type2; // different lists for armor, weapon, etc
|
||||||
@@ -159,13 +158,13 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
|
|||||||
private SkillHolder _unequipSkill = null;
|
private SkillHolder _unequipSkill = null;
|
||||||
private SkillHolder _equipSkill = null;
|
private SkillHolder _equipSkill = null;
|
||||||
|
|
||||||
private int _useSkillDisTime;
|
private int _useSkillDisTime;
|
||||||
private int _reuseDelay;
|
private int _reuseDelay;
|
||||||
private int _sharedReuseGroup;
|
private int _sharedReuseGroup;
|
||||||
|
|
||||||
private CommissionItemType _commissionItemType;
|
private CommissionItemType _commissionItemType;
|
||||||
private int _compoundItem;
|
private int _compoundItem;
|
||||||
private float _compoundChance;
|
private float _compoundChance;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor of the L2Item that fill class variables.<BR>
|
* Constructor of the L2Item that fill class variables.<BR>
|
||||||
@@ -240,13 +239,13 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
|
|||||||
|
|
||||||
if (id == 0)
|
if (id == 0)
|
||||||
{
|
{
|
||||||
_log.info(StringUtil.concat("Ignoring item_skill(", element, ") for item ", toString(), ". Skill id is 0!"));
|
_log.info("Ignoring item_skill(" + element + ") for item " + this + ". Skill id is 0!");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level == 0)
|
if (level == 0)
|
||||||
{
|
{
|
||||||
_log.info(StringUtil.concat("Ignoring item_skill(", element, ") for item ", toString(), ". Skill level is 0!"));
|
_log.info("Ignoring item_skill(" + element + ") for item " + this + ". Skill level is 0!");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +254,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat("Failed to parse item_skill(", element, ") for item ", toString(), "! Format: SkillId0-SkillLevel0[;SkillIdN-SkillLevelN]"));
|
_log.warning("Failed to parse item_skill(" + element + ") for item " + this + "! Format: SkillId0-SkillLevel0[;SkillIdN-SkillLevelN]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,7 +283,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
|
|||||||
catch (Exception nfe)
|
catch (Exception nfe)
|
||||||
{
|
{
|
||||||
// Incorrect syntax, don't add new skill
|
// Incorrect syntax, don't add new skill
|
||||||
_log.info(StringUtil.concat("Couldnt parse ", skills, " in weapon unequip skills! item ", toString()));
|
_log.info("Couldnt parse " + skills + " in weapon unequip skills! item " + this);
|
||||||
}
|
}
|
||||||
if ((id > 0) && (level > 0))
|
if ((id > 0) && (level > 0))
|
||||||
{
|
{
|
||||||
@@ -309,7 +308,7 @@ public abstract class L2Item extends ListenersContainer implements IIdentifiable
|
|||||||
catch (Exception nfe)
|
catch (Exception nfe)
|
||||||
{
|
{
|
||||||
// Incorrect syntax, don't add new skill
|
// Incorrect syntax, don't add new skill
|
||||||
_log.info(StringUtil.concat("Couldnt parse ", skills, " in item equip skill! item ", toString()));
|
_log.info("Couldnt parse " + skills + " in item equip skill! item " + this);
|
||||||
}
|
}
|
||||||
if ((id > 0) && (level > 0))
|
if ((id > 0) && (level > 0))
|
||||||
{
|
{
|
||||||
|
@@ -33,26 +33,25 @@ import com.l2jmobius.gameserver.model.stats.Formulas;
|
|||||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.gameserver.util.Util;
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is dedicated to the management of weapons.
|
* This class is dedicated to the management of weapons.
|
||||||
*/
|
*/
|
||||||
public final class L2Weapon extends L2Item
|
public final class L2Weapon extends L2Item
|
||||||
{
|
{
|
||||||
private WeaponType _type;
|
private WeaponType _type;
|
||||||
private boolean _isMagicWeapon;
|
private boolean _isMagicWeapon;
|
||||||
private int _rndDam;
|
private int _rndDam;
|
||||||
private int _soulShotCount;
|
private int _soulShotCount;
|
||||||
private int _spiritShotCount;
|
private int _spiritShotCount;
|
||||||
private int _mpConsume;
|
private int _mpConsume;
|
||||||
private int _baseAttackRange;
|
private int _baseAttackRange;
|
||||||
private int _baseAttackAngle;
|
private int _baseAttackAngle;
|
||||||
/**
|
/**
|
||||||
* Skill that activates when item is enchanted +4 (for duals).
|
* Skill that activates when item is enchanted +4 (for duals).
|
||||||
*/
|
*/
|
||||||
private SkillHolder _enchant4Skill = null;
|
private SkillHolder _enchant4Skill = null;
|
||||||
private int _changeWeaponId;
|
private int _changeWeaponId;
|
||||||
|
|
||||||
// Attached skills for Special Abilities
|
// Attached skills for Special Abilities
|
||||||
private SkillHolder _skillsOnMagic;
|
private SkillHolder _skillsOnMagic;
|
||||||
@@ -60,15 +59,15 @@ public final class L2Weapon extends L2Item
|
|||||||
private SkillHolder _skillsOnCrit;
|
private SkillHolder _skillsOnCrit;
|
||||||
private Condition _skillsOnCritCondition = null;
|
private Condition _skillsOnCritCondition = null;
|
||||||
|
|
||||||
private int _reducedSoulshot;
|
private int _reducedSoulshot;
|
||||||
private int _reducedSoulshotChance;
|
private int _reducedSoulshotChance;
|
||||||
|
|
||||||
private int _reducedMpConsume;
|
private int _reducedMpConsume;
|
||||||
private int _reducedMpConsumeChance;
|
private int _reducedMpConsumeChance;
|
||||||
|
|
||||||
private boolean _isForceEquip;
|
private boolean _isForceEquip;
|
||||||
private boolean _isAttackWeapon;
|
private boolean _isAttackWeapon;
|
||||||
private boolean _useWeaponSkillsOnly;
|
private boolean _useWeaponSkillsOnly;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for Weapon.
|
* Constructor for Weapon.
|
||||||
@@ -120,7 +119,7 @@ public final class L2Weapon extends L2Item
|
|||||||
catch (Exception nfe)
|
catch (Exception nfe)
|
||||||
{
|
{
|
||||||
// Incorrect syntax, dont add new skill
|
// Incorrect syntax, dont add new skill
|
||||||
_log.info(StringUtil.concat("> Couldnt parse ", skill, " in weapon enchant skills! item ", toString()));
|
_log.info("> Couldnt parse " + skill + " in weapon enchant skills! item " + this);
|
||||||
}
|
}
|
||||||
if ((id > 0) && (level > 0))
|
if ((id > 0) && (level > 0))
|
||||||
{
|
{
|
||||||
@@ -146,7 +145,7 @@ public final class L2Weapon extends L2Item
|
|||||||
catch (Exception nfe)
|
catch (Exception nfe)
|
||||||
{
|
{
|
||||||
// Incorrect syntax, don't add new skill
|
// Incorrect syntax, don't add new skill
|
||||||
_log.info(StringUtil.concat("> Couldnt parse ", skill, " in weapon onmagic skills! item ", toString()));
|
_log.info("> Couldnt parse " + skill + " in weapon onmagic skills! item " + this);
|
||||||
}
|
}
|
||||||
if ((id > 0) && (level > 0) && (chance > 0))
|
if ((id > 0) && (level > 0) && (chance > 0))
|
||||||
{
|
{
|
||||||
@@ -173,7 +172,7 @@ public final class L2Weapon extends L2Item
|
|||||||
catch (Exception nfe)
|
catch (Exception nfe)
|
||||||
{
|
{
|
||||||
// Incorrect syntax, don't add new skill
|
// Incorrect syntax, don't add new skill
|
||||||
_log.info(StringUtil.concat("> Couldnt parse ", skill, " in weapon oncrit skills! item ", toString()));
|
_log.info("> Couldnt parse " + skill + " in weapon oncrit skills! item " + this);
|
||||||
}
|
}
|
||||||
if ((id > 0) && (level > 0) && (chance > 0))
|
if ((id > 0) && (level > 0) && (chance > 0))
|
||||||
{
|
{
|
||||||
|
@@ -533,7 +533,11 @@ public final class QuestState
|
|||||||
*/
|
*/
|
||||||
public int getCond()
|
public int getCond()
|
||||||
{
|
{
|
||||||
return isStarted() ? getInt("cond") : 0;
|
if (isStarted())
|
||||||
|
{
|
||||||
|
return getInt("cond");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -583,7 +587,11 @@ public final class QuestState
|
|||||||
*/
|
*/
|
||||||
public int getMemoState()
|
public int getMemoState()
|
||||||
{
|
{
|
||||||
return isStarted() ? getInt("memoState") : 0;
|
if (isStarted())
|
||||||
|
{
|
||||||
|
return getInt("memoState");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMemoState(int memoState)
|
public boolean isMemoState(int memoState)
|
||||||
@@ -598,7 +606,11 @@ public final class QuestState
|
|||||||
*/
|
*/
|
||||||
public int getMemoStateEx(int slot)
|
public int getMemoStateEx(int slot)
|
||||||
{
|
{
|
||||||
return isStarted() ? getInt("memoStateEx" + slot) : 0;
|
if (isStarted())
|
||||||
|
{
|
||||||
|
return getInt("memoStateEx" + slot);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -375,6 +375,8 @@ public enum AbnormalType
|
|||||||
ELEMENTAL_RESISTANCE_ISS,
|
ELEMENTAL_RESISTANCE_ISS,
|
||||||
HOLY_ATTACK_RESISTANCE_ISS,
|
HOLY_ATTACK_RESISTANCE_ISS,
|
||||||
MENTAL_ATTACK_RESISTANCE_ISS,
|
MENTAL_ATTACK_RESISTANCE_ISS,
|
||||||
|
CRIPPLING_ATTACK,
|
||||||
|
SHADOW_BLADE,
|
||||||
SIGEL_AURA,
|
SIGEL_AURA,
|
||||||
FEOH_STANCE,
|
FEOH_STANCE,
|
||||||
YUL_STANCE,
|
YUL_STANCE,
|
||||||
|
@@ -31,7 +31,6 @@ import com.l2jmobius.gameserver.model.zone.TaskZoneSettings;
|
|||||||
import com.l2jmobius.gameserver.model.zone.ZoneId;
|
import com.l2jmobius.gameserver.model.zone.ZoneId;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.EtcStatusUpdate;
|
import com.l2jmobius.gameserver.network.serverpackets.EtcStatusUpdate;
|
||||||
import com.l2jmobius.util.Rnd;
|
import com.l2jmobius.util.Rnd;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* another type of damage zone with skills
|
* another type of damage zone with skills
|
||||||
@@ -96,7 +95,7 @@ public class L2EffectZone extends L2ZoneType
|
|||||||
final String[] skillSplit = skill.split("-");
|
final String[] skillSplit = skill.split("-");
|
||||||
if (skillSplit.length != 2)
|
if (skillSplit.length != 2)
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat(getClass().getSimpleName() + ": invalid config property -> skillsIdLvl \"", skill, "\""));
|
_log.warning(getClass().getSimpleName() + ": invalid config property -> skillsIdLvl \"" + skill + "\"");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -108,7 +107,7 @@ public class L2EffectZone extends L2ZoneType
|
|||||||
{
|
{
|
||||||
if (!skill.isEmpty())
|
if (!skill.isEmpty())
|
||||||
{
|
{
|
||||||
_log.warning(StringUtil.concat(getClass().getSimpleName() + ": invalid config property -> skillsIdLvl \"", skillSplit[0], "\"", skillSplit[1]));
|
_log.warning(getClass().getSimpleName() + ": invalid config property -> skillsIdLvl \"" + skillSplit[0] + "\"" + skillSplit[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,7 @@ import com.l2jmobius.gameserver.model.zone.L2ZoneType;
|
|||||||
import com.l2jmobius.gameserver.model.zone.ZoneId;
|
import com.l2jmobius.gameserver.model.zone.ZoneId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A scripted zone... Creation of such a zone should require somekind of jython script reference which can handle onEnter() / onExit()
|
* A scripted zone... Creation of such a zone should require somekind of script reference which can handle onEnter() / onExit()
|
||||||
* @author durgus
|
* @author durgus
|
||||||
*/
|
*/
|
||||||
public class L2ScriptZone extends L2ZoneType
|
public class L2ScriptZone extends L2ZoneType
|
||||||
|
@@ -38,7 +38,6 @@ import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight;
|
|||||||
import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ItemList;
|
import com.l2jmobius.gameserver.network.serverpackets.ItemList;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Migi, DS
|
* @author Migi, DS
|
||||||
@@ -316,7 +315,7 @@ public final class RequestSendPost extends L2GameClientPacket
|
|||||||
}
|
}
|
||||||
|
|
||||||
final StringBuilder recv = new StringBuilder(32);
|
final StringBuilder recv = new StringBuilder(32);
|
||||||
StringUtil.append(recv, msg.getReceiverName(), "[", String.valueOf(msg.getReceiverId()), "]");
|
recv.append(msg.getReceiverName() + "[" + msg.getReceiverId() + "]");
|
||||||
final String receiver = recv.toString();
|
final String receiver = recv.toString();
|
||||||
|
|
||||||
// Proceed to the transfer
|
// Proceed to the transfer
|
||||||
|
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sdw
|
||||||
|
*/
|
||||||
|
public class ExUserInfoFishing extends L2GameServerPacket
|
||||||
|
{
|
||||||
|
private final L2PcInstance _activeChar;
|
||||||
|
|
||||||
|
public ExUserInfoFishing(L2PcInstance activeChar)
|
||||||
|
{
|
||||||
|
_activeChar = activeChar;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0xFE);
|
||||||
|
writeH(0x159);
|
||||||
|
writeD(_activeChar.getObjectId());
|
||||||
|
writeC(_activeChar.isFishing() ? 1 : 0);
|
||||||
|
writeD(_activeChar.getFishx());
|
||||||
|
writeD(_activeChar.getFishy());
|
||||||
|
writeD(_activeChar.getFishz());
|
||||||
|
}
|
||||||
|
}
|
@@ -18,8 +18,6 @@ package com.l2jmobius.gameserver.network.serverpackets;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
public class ShowBoard extends L2GameServerPacket
|
public class ShowBoard extends L2GameServerPacket
|
||||||
{
|
{
|
||||||
private final String _content;
|
private final String _content;
|
||||||
@@ -41,7 +39,7 @@ public class ShowBoard extends L2GameServerPacket
|
|||||||
|
|
||||||
public ShowBoard(List<String> arg)
|
public ShowBoard(List<String> arg)
|
||||||
{
|
{
|
||||||
final StringBuilder builder = new StringBuilder(5 + StringUtil.getLength(arg) + arg.size()).append("1002\u0008");
|
StringBuilder builder = new StringBuilder(256).append("1002\u0008");
|
||||||
for (String str : arg)
|
for (String str : arg)
|
||||||
{
|
{
|
||||||
builder.append(str).append("\u0008");
|
builder.append(str).append("\u0008");
|
||||||
|
@@ -31,7 +31,6 @@ import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
|
|||||||
import com.l2jmobius.gameserver.pathfinding.AbstractNode;
|
import com.l2jmobius.gameserver.pathfinding.AbstractNode;
|
||||||
import com.l2jmobius.gameserver.pathfinding.AbstractNodeLoc;
|
import com.l2jmobius.gameserver.pathfinding.AbstractNodeLoc;
|
||||||
import com.l2jmobius.gameserver.pathfinding.PathFinding;
|
import com.l2jmobius.gameserver.pathfinding.PathFinding;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Sami, DS Credits to Diamond
|
* @author Sami, DS Credits to Diamond
|
||||||
@@ -359,16 +358,32 @@ public class CellPathFinding extends PathFinding
|
|||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
final StringBuilder stat = new StringBuilder(100);
|
final StringBuilder sb = new StringBuilder(100);
|
||||||
StringUtil.append(stat, String.valueOf(mapSize), "x", String.valueOf(mapSize), " num:", String.valueOf(bufs.size()), "/", String.valueOf(count), " uses:", String.valueOf(uses), "/", String.valueOf(playableUses));
|
sb.append(mapSize);
|
||||||
|
sb.append("x");
|
||||||
|
sb.append(mapSize);
|
||||||
|
sb.append(" num:");
|
||||||
|
sb.append(bufs.size());
|
||||||
|
sb.append("/");
|
||||||
|
sb.append(count);
|
||||||
|
sb.append(" uses:");
|
||||||
|
sb.append(uses);
|
||||||
|
sb.append("/");
|
||||||
|
sb.append(playableUses);
|
||||||
if (uses > 0)
|
if (uses > 0)
|
||||||
{
|
{
|
||||||
StringUtil.append(stat, " total/avg(ms):", String.valueOf(elapsed), "/", String.format("%1.2f", (double) elapsed / uses));
|
sb.append(" total/avg(ms):");
|
||||||
|
sb.append(elapsed);
|
||||||
|
sb.append("/");
|
||||||
|
sb.append(String.format("%1.2f", (double) elapsed / uses));
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(stat, " ovf:", String.valueOf(overflows), "/", String.valueOf(playableOverflows));
|
sb.append(" ovf:");
|
||||||
|
sb.append(overflows);
|
||||||
|
sb.append("/");
|
||||||
|
sb.append(playableOverflows);
|
||||||
|
|
||||||
return stat.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,14 +396,28 @@ public class CellPathFinding extends PathFinding
|
|||||||
result[i] = _allBuffers[i].toString();
|
result[i] = _allBuffers[i].toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
final StringBuilder stat = new StringBuilder(100);
|
final StringBuilder sb = new StringBuilder(128);
|
||||||
StringUtil.append(stat, "LOS postfilter uses:", String.valueOf(_postFilterUses), "/", String.valueOf(_postFilterPlayableUses));
|
sb.append("LOS postfilter uses:");
|
||||||
|
sb.append(_postFilterUses);
|
||||||
|
sb.append("/");
|
||||||
|
sb.append(_postFilterPlayableUses);
|
||||||
if (_postFilterUses > 0)
|
if (_postFilterUses > 0)
|
||||||
{
|
{
|
||||||
StringUtil.append(stat, " total/avg(ms):", String.valueOf(_postFilterElapsed), "/", String.format("%1.2f", (double) _postFilterElapsed / _postFilterUses), " passes total/avg:", String.valueOf(_postFilterPasses), "/", String.format("%1.1f", (double) _postFilterPasses / _postFilterUses), Config.EOL);
|
sb.append(" total/avg(ms):");
|
||||||
|
sb.append(_postFilterElapsed);
|
||||||
|
sb.append("/");
|
||||||
|
sb.append(String.format("%1.2f", (double) _postFilterElapsed / _postFilterUses));
|
||||||
|
sb.append(" passes total/avg:");
|
||||||
|
sb.append(_postFilterPasses);
|
||||||
|
sb.append("/");
|
||||||
|
sb.append(String.format("%1.1f", (double) _postFilterPasses / _postFilterUses));
|
||||||
|
sb.append(Config.EOL);
|
||||||
}
|
}
|
||||||
StringUtil.append(stat, "Pathfind success/fail:", String.valueOf(_findSuccess), "/", String.valueOf(_findFails));
|
sb.append("Pathfind success/fail:");
|
||||||
result[result.length - 1] = stat.toString();
|
sb.append(_findSuccess);
|
||||||
|
sb.append("/");
|
||||||
|
sb.append(_findFails);
|
||||||
|
result[result.length - 1] = sb.toString();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@@ -46,7 +46,7 @@ public final class JavaExecutionContext extends AbstractExecutionContext<JavaScr
|
|||||||
super(engine);
|
super(engine);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean addOptionIfNotNull(final LinkedList<String> list, final String nullChecked, final String before)
|
private boolean addOptionIfNotNull(List<String> list, String nullChecked, String before)
|
||||||
{
|
{
|
||||||
if (nullChecked == null)
|
if (nullChecked == null)
|
||||||
{
|
{
|
||||||
@@ -93,15 +93,14 @@ public final class JavaExecutionContext extends AbstractExecutionContext<JavaScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<Path, Throwable> executeScripts(final Iterable<Path> sourcePaths) throws Exception
|
public Map<Path, Throwable> executeScripts(Iterable<Path> sourcePaths) throws Exception
|
||||||
{
|
{
|
||||||
final DiagnosticCollector<JavaFileObject> fileManagerDiagnostics = new DiagnosticCollector<>();
|
final DiagnosticCollector<JavaFileObject> fileManagerDiagnostics = new DiagnosticCollector<>();
|
||||||
final DiagnosticCollector<JavaFileObject> compilationDiagnostics = new DiagnosticCollector<>();
|
final DiagnosticCollector<JavaFileObject> compilationDiagnostics = new DiagnosticCollector<>();
|
||||||
|
|
||||||
try (final ScriptingFileManager fileManager = new ScriptingFileManager(getScriptingEngine().getCompiler().getStandardFileManager(fileManagerDiagnostics, null, StandardCharsets.UTF_8)))
|
try (final ScriptingFileManager fileManager = new ScriptingFileManager(getScriptingEngine().getCompiler().getStandardFileManager(fileManagerDiagnostics, null, StandardCharsets.UTF_8)))
|
||||||
{
|
{
|
||||||
final LinkedList<String> options = new LinkedList<>();
|
final List<String> options = new LinkedList<>();
|
||||||
|
|
||||||
addOptionIfNotNull(options, getProperty("source"), "-source");
|
addOptionIfNotNull(options, getProperty("source"), "-source");
|
||||||
addOptionIfNotNull(options, getProperty("sourcepath"), "-sourcepath");
|
addOptionIfNotNull(options, getProperty("sourcepath"), "-sourcepath");
|
||||||
if (!addOptionIfNotNull(options, getProperty("cp"), "-cp") && !addOptionIfNotNull(options, getProperty("classpath"), "-classpath"))
|
if (!addOptionIfNotNull(options, getProperty("cp"), "-cp") && !addOptionIfNotNull(options, getProperty("classpath"), "-classpath"))
|
||||||
@@ -172,11 +171,11 @@ public final class JavaExecutionContext extends AbstractExecutionContext<JavaScr
|
|||||||
|
|
||||||
final Map<Path, Throwable> executionFailures = new LinkedHashMap<>();
|
final Map<Path, Throwable> executionFailures = new LinkedHashMap<>();
|
||||||
final Iterable<ScriptingOutputFileObject> compiledClasses = fileManager.getCompiledClasses();
|
final Iterable<ScriptingOutputFileObject> compiledClasses = fileManager.getCompiledClasses();
|
||||||
for (final Path sourcePath : sourcePaths)
|
for (Path sourcePath : sourcePaths)
|
||||||
{
|
{
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
|
|
||||||
for (final ScriptingOutputFileObject compiledClass : compiledClasses)
|
for (ScriptingOutputFileObject compiledClass : compiledClasses)
|
||||||
{
|
{
|
||||||
Path compiledSourcePath = compiledClass.getSourcePath();
|
Path compiledSourcePath = compiledClass.getSourcePath();
|
||||||
// sourePath can be relative, so we have to use endsWith
|
// sourePath can be relative, so we have to use endsWith
|
||||||
@@ -223,7 +222,7 @@ public final class JavaExecutionContext extends AbstractExecutionContext<JavaScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Entry<Path, Throwable> executeScript(final Path sourcePath) throws Exception
|
public Entry<Path, Throwable> executeScript(Path sourcePath) throws Exception
|
||||||
{
|
{
|
||||||
final Map<Path, Throwable> executionFailures = executeScripts(Arrays.asList(sourcePath));
|
final Map<Path, Throwable> executionFailures = executeScripts(Arrays.asList(sourcePath));
|
||||||
if (!executionFailures.isEmpty())
|
if (!executionFailures.isEmpty())
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.l2jmobius.gameserver.util;
|
package com.l2jmobius.gameserver.util;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@@ -27,7 +28,6 @@ import com.l2jmobius.gameserver.model.punishment.PunishmentAffect;
|
|||||||
import com.l2jmobius.gameserver.model.punishment.PunishmentTask;
|
import com.l2jmobius.gameserver.model.punishment.PunishmentTask;
|
||||||
import com.l2jmobius.gameserver.model.punishment.PunishmentType;
|
import com.l2jmobius.gameserver.model.punishment.PunishmentType;
|
||||||
import com.l2jmobius.gameserver.network.L2GameClient;
|
import com.l2jmobius.gameserver.network.L2GameClient;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flood protector implementation.
|
* Flood protector implementation.
|
||||||
@@ -189,7 +189,9 @@ public final class FloodProtectorAction
|
|||||||
|
|
||||||
private void log(String... lines)
|
private void log(String... lines)
|
||||||
{
|
{
|
||||||
final StringBuilder output = StringUtil.startAppend(100, _config.FLOOD_PROTECTOR_TYPE, ": ");
|
final StringBuilder output = new StringBuilder(100);
|
||||||
|
output.append(_config.FLOOD_PROTECTOR_TYPE);
|
||||||
|
output.append(": ");
|
||||||
String address = null;
|
String address = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -208,8 +210,10 @@ public final class FloodProtectorAction
|
|||||||
{
|
{
|
||||||
if (_client.getActiveChar() != null)
|
if (_client.getActiveChar() != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(output, _client.getActiveChar().getName());
|
output.append(_client.getActiveChar().getName());
|
||||||
StringUtil.append(output, "(", String.valueOf(_client.getActiveChar().getObjectId()), ") ");
|
output.append("(");
|
||||||
|
output.append(_client.getActiveChar().getObjectId());
|
||||||
|
output.append(") ");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -217,7 +221,8 @@ public final class FloodProtectorAction
|
|||||||
{
|
{
|
||||||
if (_client.getAccountName() != null)
|
if (_client.getAccountName() != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(output, _client.getAccountName(), " ");
|
output.append(_client.getAccountName());
|
||||||
|
output.append(" ");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -225,7 +230,7 @@ public final class FloodProtectorAction
|
|||||||
{
|
{
|
||||||
if (address != null)
|
if (address != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(output, address);
|
output.append(address);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -235,7 +240,8 @@ public final class FloodProtectorAction
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StringUtil.append(output, lines);
|
Arrays.stream(lines).forEach(output::append);
|
||||||
|
|
||||||
_log.warning(output.toString());
|
_log.warning(output.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -21,7 +21,6 @@ import java.util.Collection;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import com.l2jmobius.gameserver.model.PageResult;
|
import com.l2jmobius.gameserver.model.PageResult;
|
||||||
import com.l2jmobius.util.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class containing useful methods for constructing HTML
|
* A class containing useful methods for constructing HTML
|
||||||
@@ -163,20 +162,62 @@ public class HtmlUtil
|
|||||||
{
|
{
|
||||||
current = Math.min(current, max);
|
current = Math.min(current, max);
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
StringUtil.append(sb, "<table width=", String.valueOf(width), " cellpadding=0 cellspacing=0><tr><td background=\"" + backgroundImage + "\">");
|
sb.append("<table width=");
|
||||||
StringUtil.append(sb, "<img src=\"" + image + "\" width=", String.valueOf((long) (((double) current / max) * width)), " height=", String.valueOf(imageHeight), ">");
|
sb.append(width);
|
||||||
StringUtil.append(sb, "</td></tr><tr><td align=center><table cellpadding=0 cellspacing=", String.valueOf(top), "><tr><td>");
|
sb.append(" cellpadding=0 cellspacing=0>");
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td background=\"");
|
||||||
|
sb.append(backgroundImage);
|
||||||
|
sb.append("\">");
|
||||||
|
sb.append("<img src=\"");
|
||||||
|
sb.append(image);
|
||||||
|
sb.append("\" width=");
|
||||||
|
sb.append((long) (((double) current / max) * width));
|
||||||
|
sb.append(" height=");
|
||||||
|
sb.append(imageHeight);
|
||||||
|
sb.append(">");
|
||||||
|
sb.append("</td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td align=center>");
|
||||||
|
sb.append("<table cellpadding=0 cellspacing=");
|
||||||
|
sb.append(top);
|
||||||
|
sb.append(">");
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td>");
|
||||||
if (displayAsPercentage)
|
if (displayAsPercentage)
|
||||||
{
|
{
|
||||||
StringUtil.append(sb, "<table cellpadding=0 cellspacing=2><tr><td>", String.format("%.2f%%", ((double) current / max) * 100), "</td></tr></table>");
|
sb.append("<table cellpadding=0 cellspacing=2>");
|
||||||
|
sb.append("<tr><td>");
|
||||||
|
sb.append(String.format("%.2f%%", ((double) current / max) * 100));
|
||||||
|
sb.append("</td></tr>");
|
||||||
|
sb.append("</table>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final String tdWidth = String.valueOf((width - 10) / 2);
|
int tdWidth = (width - 10) / 2;
|
||||||
StringUtil.append(sb, "<table cellpadding=0 cellspacing=0><tr><td width=" + tdWidth + " align=right>", String.valueOf(current), "</td>");
|
sb.append("<table cellpadding=0 cellspacing=0>");
|
||||||
StringUtil.append(sb, "<td width=10 align=center>/</td><td width=" + tdWidth + ">", String.valueOf(max), "</td></tr></table>");
|
sb.append("<tr>");
|
||||||
|
sb.append("<td width=");
|
||||||
|
sb.append(tdWidth);
|
||||||
|
sb.append(" align=right>");
|
||||||
|
sb.append(current);
|
||||||
|
sb.append("</td>");
|
||||||
|
sb.append("<td width=10 align=center>/</td>");
|
||||||
|
sb.append("<td width=");
|
||||||
|
sb.append(tdWidth);
|
||||||
|
sb.append(">");
|
||||||
|
sb.append(max);
|
||||||
|
sb.append("</td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("</table>");
|
||||||
}
|
}
|
||||||
StringUtil.append(sb, "</td></tr></table></td></tr></table>");
|
sb.append("</td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("</table>");
|
||||||
|
sb.append("</td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("</table>");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.l2jmobius.log.formatter;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.logging.Formatter;
|
||||||
|
import java.util.logging.LogRecord;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nos
|
||||||
|
*/
|
||||||
|
public abstract class AbstractFormatter extends Formatter
|
||||||
|
{
|
||||||
|
private final DateFormat _dateFormat = new SimpleDateFormat("dd/MM HH:mm:ss");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String format(LogRecord record)
|
||||||
|
{
|
||||||
|
final StringBuilder sb = new StringBuilder(32);
|
||||||
|
sb.append("[");
|
||||||
|
sb.append(_dateFormat.format(new Date(record.getMillis())));
|
||||||
|
sb.append("] ");
|
||||||
|
sb.append(record.getMessage());
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
@@ -1,114 +1,105 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the L2J Mobius project.
|
* This file is part of the L2J Mobius project.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.l2jmobius.log.formatter;
|
package com.l2jmobius.log.formatter;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.util.logging.LogRecord;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.logging.Formatter;
|
import com.l2jmobius.Config;
|
||||||
import java.util.logging.LogRecord;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
|
import com.l2jmobius.gameserver.network.L2GameClient;
|
||||||
import com.l2jmobius.Config;
|
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
public class AccountingFormatter extends AbstractFormatter
|
||||||
import com.l2jmobius.gameserver.network.L2GameClient;
|
{
|
||||||
import com.l2jmobius.util.StringUtil;
|
@Override
|
||||||
|
public String format(LogRecord record)
|
||||||
public class AccountingFormatter extends Formatter
|
{
|
||||||
{
|
final Object[] params = record.getParameters();
|
||||||
private final SimpleDateFormat dateFmt = new SimpleDateFormat("dd MMM H:mm:ss");
|
final StringBuilder output = new StringBuilder(32 + record.getMessage().length() + (params != null ? 10 * params.length : 0));
|
||||||
|
output.append(super.format(record));
|
||||||
@Override
|
|
||||||
public String format(LogRecord record)
|
if (params != null)
|
||||||
{
|
{
|
||||||
final Object[] params = record.getParameters();
|
for (Object p : params)
|
||||||
final StringBuilder output = StringUtil.startAppend(30 + record.getMessage().length() + (params == null ? 0 : params.length * 10), "[", dateFmt.format(new Date(record.getMillis())), "] ", record.getMessage());
|
{
|
||||||
|
if (p == null)
|
||||||
if (params != null)
|
{
|
||||||
{
|
continue;
|
||||||
for (Object p : params)
|
}
|
||||||
{
|
|
||||||
if (p == null)
|
output.append(", ");
|
||||||
{
|
|
||||||
continue;
|
if (p instanceof L2GameClient)
|
||||||
}
|
{
|
||||||
|
final L2GameClient client = (L2GameClient) p;
|
||||||
StringUtil.append(output, ", ");
|
String address = null;
|
||||||
|
try
|
||||||
if (p instanceof L2GameClient)
|
{
|
||||||
{
|
if (!client.isDetached())
|
||||||
final L2GameClient client = (L2GameClient) p;
|
{
|
||||||
String address = null;
|
address = client.getConnection().getInetAddress().getHostAddress();
|
||||||
try
|
}
|
||||||
{
|
}
|
||||||
if (!client.isDetached())
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
address = client.getConnection().getInetAddress().getHostAddress();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (Exception e)
|
switch (client.getState())
|
||||||
{
|
{
|
||||||
}
|
case IN_GAME:
|
||||||
|
if (client.getActiveChar() != null)
|
||||||
switch (client.getState())
|
{
|
||||||
{
|
output.append(client.getActiveChar().getName());
|
||||||
case IN_GAME:
|
output.append("(");
|
||||||
{
|
output.append(client.getActiveChar().getObjectId());
|
||||||
if (client.getActiveChar() != null)
|
output.append(") ");
|
||||||
{
|
}
|
||||||
StringUtil.append(output, client.getActiveChar().getName());
|
case AUTHED:
|
||||||
StringUtil.append(output, "(", String.valueOf(client.getActiveChar().getObjectId()), ") ");
|
if (client.getAccountName() != null)
|
||||||
}
|
{
|
||||||
break;
|
output.append(client.getAccountName());
|
||||||
}
|
output.append(" ");
|
||||||
case AUTHED:
|
}
|
||||||
{
|
case CONNECTED:
|
||||||
if (client.getAccountName() != null)
|
if (address != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(output, client.getAccountName(), " ");
|
output.append(address);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
default:
|
||||||
case CONNECTED:
|
throw new IllegalStateException("Missing state on switch");
|
||||||
{
|
}
|
||||||
if (address != null)
|
}
|
||||||
{
|
else if (p instanceof L2PcInstance)
|
||||||
StringUtil.append(output, address);
|
{
|
||||||
}
|
L2PcInstance player = (L2PcInstance) p;
|
||||||
break;
|
output.append(player.getName());
|
||||||
}
|
output.append("(");
|
||||||
default:
|
output.append(player.getObjectId());
|
||||||
{
|
output.append(")");
|
||||||
throw new IllegalStateException("Missing state on switch");
|
}
|
||||||
}
|
else
|
||||||
}
|
{
|
||||||
}
|
output.append(p);
|
||||||
else if (p instanceof L2PcInstance)
|
}
|
||||||
{
|
}
|
||||||
final L2PcInstance player = (L2PcInstance) p;
|
}
|
||||||
StringUtil.append(output, player.getName());
|
|
||||||
StringUtil.append(output, "(", String.valueOf(player.getObjectId()), ")");
|
output.append(Config.EOL);
|
||||||
}
|
return output.toString();
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
StringUtil.append(output, p.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
output.append(Config.EOL);
|
|
||||||
return output.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -1,55 +1,51 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the L2J Mobius project.
|
* This file is part of the L2J Mobius project.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.l2jmobius.log.formatter;
|
package com.l2jmobius.log.formatter;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.util.logging.LogRecord;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.logging.Formatter;
|
import com.l2jmobius.Config;
|
||||||
import java.util.logging.LogRecord;
|
|
||||||
|
/**
|
||||||
import com.l2jmobius.Config;
|
* @author zabbix
|
||||||
import com.l2jmobius.util.StringUtil;
|
*/
|
||||||
|
public class AuditFormatter extends AbstractFormatter
|
||||||
/**
|
{
|
||||||
* @author zabbix
|
@Override
|
||||||
*/
|
public String format(LogRecord record)
|
||||||
public class AuditFormatter extends Formatter
|
{
|
||||||
{
|
final Object[] params = record.getParameters();
|
||||||
private final SimpleDateFormat dateFmt = new SimpleDateFormat("dd MMM H:mm:ss");
|
final StringBuilder output = new StringBuilder(32 + record.getMessage().length() + (params != null ? 10 * params.length : 0));
|
||||||
|
output.append(super.format(record));
|
||||||
@Override
|
|
||||||
public String format(LogRecord record)
|
if (params != null)
|
||||||
{
|
{
|
||||||
final Object[] params = record.getParameters();
|
for (Object p : params)
|
||||||
final StringBuilder output = StringUtil.startAppend(30 + record.getMessage().length() + (params == null ? 0 : params.length * 10), "[", dateFmt.format(new Date(record.getMillis())), "] ", record.getMessage());
|
{
|
||||||
|
if (p == null)
|
||||||
if (params != null)
|
{
|
||||||
{
|
continue;
|
||||||
for (Object p : params)
|
}
|
||||||
{
|
output.append(", ");
|
||||||
if (p == null)
|
output.append(p);
|
||||||
{
|
}
|
||||||
continue;
|
}
|
||||||
}
|
output.append(Config.EOL);
|
||||||
StringUtil.append(output, ", ", p.toString());
|
|
||||||
}
|
return output.toString();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
output.append(Config.EOL);
|
|
||||||
return output.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -1,49 +1,46 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the L2J Mobius project.
|
* This file is part of the L2J Mobius project.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.l2jmobius.log.formatter;
|
package com.l2jmobius.log.formatter;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.util.logging.LogRecord;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.logging.Formatter;
|
import com.l2jmobius.Config;
|
||||||
import java.util.logging.LogRecord;
|
|
||||||
|
public class ChatLogFormatter extends AbstractFormatter
|
||||||
import com.l2jmobius.Config;
|
{
|
||||||
import com.l2jmobius.util.StringUtil;
|
@Override
|
||||||
|
public String format(LogRecord record)
|
||||||
public class ChatLogFormatter extends Formatter
|
{
|
||||||
{
|
Object[] params = record.getParameters();
|
||||||
private final SimpleDateFormat dateFmt = new SimpleDateFormat("dd MMM H:mm:ss");
|
final StringBuilder output = new StringBuilder(32 + record.getMessage().length() + (params != null ? 10 * params.length : 0));
|
||||||
|
output.append(super.format(record));
|
||||||
@Override
|
|
||||||
public String format(LogRecord record)
|
if (params != null)
|
||||||
{
|
{
|
||||||
final Object[] params = record.getParameters();
|
for (Object p : params)
|
||||||
final StringBuilder output = StringUtil.startAppend(30 + record.getMessage().length() + (params != null ? 10 * params.length : 0), "[", dateFmt.format(new Date(record.getMillis())), "] ");
|
{
|
||||||
|
output.append(p);
|
||||||
if (params != null)
|
output.append(" ");
|
||||||
{
|
}
|
||||||
for (Object p : params)
|
}
|
||||||
{
|
|
||||||
StringUtil.append(output, String.valueOf(p), " ");
|
output.append(record.getMessage());
|
||||||
}
|
output.append(Config.EOL);
|
||||||
}
|
|
||||||
|
return output.toString();
|
||||||
StringUtil.append(output, record.getMessage(), Config.EOL);
|
}
|
||||||
|
}
|
||||||
return output.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -1,50 +1,46 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the L2J Mobius project.
|
* This file is part of the L2J Mobius project.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.l2jmobius.log.formatter;
|
package com.l2jmobius.log.formatter;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.util.logging.LogRecord;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.logging.Formatter;
|
import com.l2jmobius.Config;
|
||||||
import java.util.logging.LogRecord;
|
import com.l2jmobius.util.Util;
|
||||||
|
|
||||||
import com.l2jmobius.Config;
|
public class ConsoleLogFormatter extends AbstractFormatter
|
||||||
import com.l2jmobius.util.StringUtil;
|
{
|
||||||
import com.l2jmobius.util.Util;
|
@Override
|
||||||
|
public String format(LogRecord record)
|
||||||
public class ConsoleLogFormatter extends Formatter
|
{
|
||||||
{
|
final StringBuilder output = new StringBuilder(128);
|
||||||
private final SimpleDateFormat dateFmt = new SimpleDateFormat("dd/MM HH:mm:ss");
|
output.append(super.format(record));
|
||||||
|
output.append(Config.EOL);
|
||||||
@Override
|
|
||||||
public String format(LogRecord record)
|
if (record.getThrown() != null)
|
||||||
{
|
{
|
||||||
final StringBuilder output = new StringBuilder(500);
|
try
|
||||||
StringUtil.append(output, "[", dateFmt.format(new Date(record.getMillis())), "] " + record.getMessage(), Config.EOL);
|
{
|
||||||
|
output.append(Util.getStackTrace(record.getThrown()));
|
||||||
if (record.getThrown() != null)
|
output.append(Config.EOL);
|
||||||
{
|
}
|
||||||
try
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
StringUtil.append(output, Util.getStackTrace(record.getThrown()), Config.EOL);
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
return output.toString();
|
||||||
{
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return output.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -1,84 +1,89 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the L2J Mobius project.
|
* This file is part of the L2J Mobius project.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.l2jmobius.log.formatter;
|
package com.l2jmobius.log.formatter;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.util.logging.LogRecord;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.logging.Formatter;
|
import com.l2jmobius.Config;
|
||||||
import java.util.logging.LogRecord;
|
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
import com.l2jmobius.Config;
|
import com.l2jmobius.gameserver.model.actor.L2Summon;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
import com.l2jmobius.gameserver.model.actor.L2Summon;
|
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
public class DamageFormatter extends AbstractFormatter
|
||||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
{
|
||||||
import com.l2jmobius.util.StringUtil;
|
@Override
|
||||||
|
public String format(LogRecord record)
|
||||||
public class DamageFormatter extends Formatter
|
{
|
||||||
{
|
final Object[] params = record.getParameters();
|
||||||
private final SimpleDateFormat dateFmt = new SimpleDateFormat("yy.MM.dd H:mm:ss");
|
final StringBuilder output = new StringBuilder(32 + record.getMessage().length() + (params != null ? 10 * params.length : 0));
|
||||||
|
output.append(super.format(record));
|
||||||
@Override
|
|
||||||
public String format(LogRecord record)
|
if (params != null)
|
||||||
{
|
{
|
||||||
final Object[] params = record.getParameters();
|
for (Object p : params)
|
||||||
final StringBuilder output = StringUtil.startAppend(30 + record.getMessage().length() + (params == null ? 0 : params.length * 10), "[", dateFmt.format(new Date(record.getMillis())), "] '---': ", record.getMessage());
|
{
|
||||||
|
if (p == null)
|
||||||
if (params != null)
|
{
|
||||||
{
|
continue;
|
||||||
for (Object p : params)
|
}
|
||||||
{
|
|
||||||
if (p == null)
|
if (p instanceof L2Character)
|
||||||
{
|
{
|
||||||
continue;
|
final L2Character creature = (L2Character) p;
|
||||||
}
|
if ((p instanceof L2Attackable) && ((L2Attackable) p).isRaid())
|
||||||
|
{
|
||||||
if (p instanceof L2Character)
|
output.append("RaidBoss ");
|
||||||
{
|
}
|
||||||
if ((p instanceof L2Attackable) && ((L2Attackable) p).isRaid())
|
|
||||||
{
|
output.append(creature.getName());
|
||||||
StringUtil.append(output, "RaidBoss ");
|
output.append("(");
|
||||||
}
|
output.append(creature.getObjectId());
|
||||||
|
output.append(") ");
|
||||||
StringUtil.append(output, ((L2Character) p).getName(), "(", String.valueOf(((L2Character) p).getObjectId()), ") ");
|
output.append(creature.getLevel());
|
||||||
StringUtil.append(output, String.valueOf(((L2Character) p).getLevel()), " lvl");
|
output.append(" lvl");
|
||||||
|
|
||||||
if (p instanceof L2Summon)
|
if (p instanceof L2Summon)
|
||||||
{
|
{
|
||||||
final L2PcInstance owner = ((L2Summon) p).getOwner();
|
L2PcInstance owner = ((L2Summon) p).getOwner();
|
||||||
if (owner != null)
|
if (owner != null)
|
||||||
{
|
{
|
||||||
StringUtil.append(output, " Owner:", owner.getName(), "(", String.valueOf(owner.getObjectId()), ")");
|
output.append(" Owner:");
|
||||||
}
|
output.append(owner.getName());
|
||||||
}
|
output.append("(");
|
||||||
}
|
output.append(owner.getObjectId());
|
||||||
else if (p instanceof Skill)
|
output.append(")");
|
||||||
{
|
}
|
||||||
StringUtil.append(output, " with skill ", ((Skill) p).getName(), "(", String.valueOf(((Skill) p).getId()), ")");
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (p instanceof Skill)
|
||||||
{
|
{
|
||||||
StringUtil.append(output, p.toString());
|
output.append(" with skill ");
|
||||||
}
|
output.append(p);
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
output.append(Config.EOL);
|
output.append(p);
|
||||||
return output.toString();
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
output.append(Config.EOL);
|
||||||
|
return output.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user