Adapted sellbuffs command for HighFive.
This commit is contained in:
22
L2J_Mobius_CT_2.6_HighFive/dist/game/config/Custom/SellBuffs.ini
vendored
Normal file
22
L2J_Mobius_CT_2.6_HighFive/dist/game/config/Custom/SellBuffs.ini
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Sell Buffs configuration
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Command: .sellbuff or .sellbuffs
|
||||||
|
|
||||||
|
# Enable/Disable selling buffs
|
||||||
|
SellBuffEnable = False
|
||||||
|
|
||||||
|
# Multipler for mana cost of buffs
|
||||||
|
MpCostMultipler = 1
|
||||||
|
|
||||||
|
# Payment for Sell Buff System, can be changed to custom server coin
|
||||||
|
PaymentID = 57
|
||||||
|
|
||||||
|
# Minimal price of every buff
|
||||||
|
MinimalPrice = 100000
|
||||||
|
|
||||||
|
# Maximal price of every buff
|
||||||
|
MaximalPrice = 100000000
|
||||||
|
|
||||||
|
# Maximum count of buffs in sell list
|
||||||
|
MaxBuffs = 20
|
131
L2J_Mobius_CT_2.6_HighFive/dist/game/data/SellBuffData.xml
vendored
Normal file
131
L2J_Mobius_CT_2.6_HighFive/dist/game/data/SellBuffData.xml
vendored
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/SellBuffData.xsd">
|
||||||
|
<skill id="1232"/> <!-- Blazing Skin -->
|
||||||
|
<skill id="1003"/> <!-- Pa'agrian Gift -->
|
||||||
|
<skill id="1005"/> <!-- Blessings of Pa'agrio -->
|
||||||
|
<skill id="1250"/> <!-- Shield of Pa'agrio -->
|
||||||
|
<skill id="1008"/> <!-- The Glory of Pa'agrio -->
|
||||||
|
<skill id="1260"/> <!-- The Tact of Pa'agrio -->
|
||||||
|
<skill id="1004"/> <!-- The Wisdom of Pa'agrio -->
|
||||||
|
<skill id="1261"/> <!-- Rage of Pa'agrio -->
|
||||||
|
<skill id="1249"/> <!-- The Vision of Pa'agrio -->
|
||||||
|
<skill id="1563"/> <!-- Fury of Pa'agrio -->
|
||||||
|
<skill id="1282"/> <!-- Pa'agrian Haste -->
|
||||||
|
<skill id="1536"/> <!-- Combat of Pa'agrio -->
|
||||||
|
<skill id="1538"/> <!-- Condition of Pa'agrio -->
|
||||||
|
<skill id="1537"/> <!-- Critical of Pa'agrio -->
|
||||||
|
<skill id="1364"/> <!-- Eye of Pa'agrio -->
|
||||||
|
<skill id="1365"/> <!-- Soul of Pa'agrio -->
|
||||||
|
<skill id="1415"/> <!-- Pa'agrio's Emblem -->
|
||||||
|
<skill id="1416"/> <!-- Pa'agrio's Fist -->
|
||||||
|
<skill id="1414"/> <!-- Victory of Pa'agrio -->
|
||||||
|
<skill id="1006"/> <!-- Chant of Fire -->
|
||||||
|
<skill id="1009"/> <!-- Chant of Shielding -->
|
||||||
|
<skill id="1007"/> <!-- Chant of Battle -->
|
||||||
|
<skill id="1002"/> <!-- Flame Chant -->
|
||||||
|
<skill id="1252"/> <!-- Chant of Evasion -->
|
||||||
|
<skill id="1308"/> <!-- Chant of Predator -->
|
||||||
|
<skill id="1253"/> <!-- Chant of Rage -->
|
||||||
|
<skill id="1562"/> <!-- Chant of Berserker -->
|
||||||
|
<skill id="1309"/> <!-- Chant of Eagle -->
|
||||||
|
<skill id="1251"/> <!-- Chant of Fury -->
|
||||||
|
<skill id="1391"/> <!-- Earth Chant -->
|
||||||
|
<skill id="1390"/> <!-- War Chant -->
|
||||||
|
<skill id="1284"/> <!-- Chant of Revenge -->
|
||||||
|
<skill id="1535"/> <!-- Chant of Movement -->
|
||||||
|
<skill id="1310"/> <!-- Chant of Vampire -->
|
||||||
|
<skill id="1519"/> <!-- Chant of Blood Awakening -->
|
||||||
|
<skill id="1549"/> <!-- Chant of Elements -->
|
||||||
|
<skill id="1362"/> <!-- Chant of Spirit -->
|
||||||
|
<skill id="1363"/> <!-- Chant of Victory -->
|
||||||
|
<skill id="1413"/> <!-- Magnus' Chant -->
|
||||||
|
<skill id="1461"/> <!-- Chant of Protection -->
|
||||||
|
<skill id="1078"/> <!-- Concentration -->
|
||||||
|
<skill id="1068"/> <!-- Might -->
|
||||||
|
<skill id="1040"/> <!-- Shield -->
|
||||||
|
<skill id="1035"/> <!-- Mental Shield -->
|
||||||
|
<skill id="1043"/> <!-- Holy Weapon -->
|
||||||
|
<skill id="1243"/> <!-- Bless Shield -->
|
||||||
|
<skill id="1304"/> <!-- Advanced Block -->
|
||||||
|
<skill id="1259"/> <!-- Resist Shock -->
|
||||||
|
<skill id="1397"/> <!-- Clarity -->
|
||||||
|
<skill id="1504"/> <!-- Improved Movement -->
|
||||||
|
<skill id="1503"/> <!-- Improved Shield Defense -->
|
||||||
|
<skill id="1303"/> <!-- Wild Magic -->
|
||||||
|
<skill id="1393"/> <!-- Resist Dark -->
|
||||||
|
<skill id="1033"/> <!-- Resist Poison -->
|
||||||
|
<skill id="1044"/> <!-- Regeneration -->
|
||||||
|
<skill id="1257"/> <!-- Decrease Weight -->
|
||||||
|
<skill id="1087"/> <!-- Agility -->
|
||||||
|
<skill id="1204"/> <!-- Wind Walk -->
|
||||||
|
<skill id="1073"/> <!-- Kiss of Eva -->
|
||||||
|
<skill id="1354"/> <!-- Arcane Protection -->
|
||||||
|
<skill id="1353"/> <!-- Divine Protection -->
|
||||||
|
<skill id="1460"/> <!-- Mana Gain -->
|
||||||
|
<skill id="1355"/> <!-- Prophecy of Water -->
|
||||||
|
<skill id="1501"/> <!-- Improved Condition -->
|
||||||
|
<skill id="1499"/> <!-- Improved Combat -->
|
||||||
|
<skill id="1242"/> <!-- Death Whisper -->
|
||||||
|
<skill id="1045"/> <!-- Bless the Body -->
|
||||||
|
<skill id="1048"/> <!-- Bless the Soul -->
|
||||||
|
<skill id="1388"/> <!-- Greater Might -->
|
||||||
|
<skill id="1389"/> <!-- Greater Shield -->
|
||||||
|
<skill id="1392"/> <!-- Resist Holy -->
|
||||||
|
<skill id="1182"/> <!-- Resist Aqua -->
|
||||||
|
<skill id="1189"/> <!-- Resist Wind -->
|
||||||
|
<skill id="1548"/> <!-- Resist Earth -->
|
||||||
|
<skill id="1191"/> <!-- Resist Fire -->
|
||||||
|
<skill id="1036"/> <!-- Magic Barrier -->
|
||||||
|
<skill id="1077"/> <!-- Focus -->
|
||||||
|
<skill id="1086"/> <!-- Haste -->
|
||||||
|
<skill id="1062"/> <!-- Berserker Spirit -->
|
||||||
|
<skill id="1085"/> <!-- Acumen -->
|
||||||
|
<skill id="1240"/> <!-- Guidance -->
|
||||||
|
<skill id="1032"/> <!-- Invigor -->
|
||||||
|
<skill id="1352"/> <!-- Elemental Protection -->
|
||||||
|
<skill id="1542"/> <!-- Counter Critical -->
|
||||||
|
<skill id="1356"/> <!-- Prophecy of Fire -->
|
||||||
|
<skill id="828"/> <!-- Case Harden -->
|
||||||
|
<skill id="830"/> <!-- Embroider -->
|
||||||
|
<skill id="829"/> <!-- Hard Tanning -->
|
||||||
|
<skill id="827"/> <!-- Restring -->
|
||||||
|
<skill id="825"/> <!-- Sharp Edge -->
|
||||||
|
<skill id="826"/> <!-- Spike -->
|
||||||
|
<skill id="1238"/> <!-- Freezing Skin -->
|
||||||
|
<skill id="1059"/> <!-- Empower -->
|
||||||
|
<skill id="1268"/> <!-- Vampiric Rage -->
|
||||||
|
<skill id="1502"/> <!-- Improved Critical Attack -->
|
||||||
|
<skill id="1500"/> <!-- Improved Magic -->
|
||||||
|
<skill id="1357"/> <!-- Prophecy of Wind -->
|
||||||
|
<skill id="307"/> <!-- Dance of Aqua Guard -->
|
||||||
|
<skill id="309"/> <!-- Dance of Earth Guard -->
|
||||||
|
<skill id="311"/> <!-- Dance of Protection -->
|
||||||
|
<skill id="276"/> <!-- Dance of Concentration -->
|
||||||
|
<skill id="273"/> <!-- Dance of the Mystic -->
|
||||||
|
<skill id="274"/> <!-- Dance of Fire -->
|
||||||
|
<skill id="275"/> <!-- Dance of Fury -->
|
||||||
|
<skill id="272"/> <!-- Dance of Inspiration -->
|
||||||
|
<skill id="277"/> <!-- Dance of Light -->
|
||||||
|
<skill id="310"/> <!-- Dance of the Vampire -->
|
||||||
|
<skill id="271"/> <!-- Dance of the Warrior -->
|
||||||
|
<skill id="365"/> <!-- Dance of Siren -->
|
||||||
|
<skill id="530"/> <!-- Dance of Alignment -->
|
||||||
|
<skill id="915"/> <!-- Dance of Berserker -->
|
||||||
|
<skill id="264"/> <!-- Song of Earth -->
|
||||||
|
<skill id="306"/> <!-- Song of Flame Guard -->
|
||||||
|
<skill id="269"/> <!-- Song of Hunter -->
|
||||||
|
<skill id="270"/> <!-- Song of Invocation -->
|
||||||
|
<skill id="265"/> <!-- Song of Life -->
|
||||||
|
<skill id="308"/> <!-- Song of Storm Guard -->
|
||||||
|
<skill id="305"/> <!-- Song of Vengeance -->
|
||||||
|
<skill id="304"/> <!-- Song of Vitality -->
|
||||||
|
<skill id="267"/> <!-- Song of Warding -->
|
||||||
|
<skill id="266"/> <!-- Song of Water -->
|
||||||
|
<skill id="268"/> <!-- Song of Wind -->
|
||||||
|
<skill id="364"/> <!-- Song of Champion -->
|
||||||
|
<skill id="363"/> <!-- Song of Meditation -->
|
||||||
|
<skill id="349"/> <!-- Song of Renewal -->
|
||||||
|
<skill id="529"/> <!-- Song of Elemental -->
|
||||||
|
<skill id="914"/> <!-- Song of Purification -->
|
||||||
|
<skill id="764"/> <!-- Song of Wind Storm -->
|
||||||
|
</list>
|
9
L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/mods/SellBuffs/BuffBuyMenu.html
vendored
Normal file
9
L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/mods/SellBuffs/BuffBuyMenu.html
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<br>
|
||||||
|
%list%
|
||||||
|
<br>
|
||||||
|
</center>
|
||||||
|
</body>
|
||||||
|
</html>
|
10
L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/mods/SellBuffs/BuffChoice.html
vendored
Normal file
10
L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/mods/SellBuffs/BuffChoice.html
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<br>
|
||||||
|
%list%
|
||||||
|
<br>
|
||||||
|
<button action="bypass -h voice .sellbuff" value="Back" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Back_Down" fore="L2UI_CT1.OlympiadWnd_DF_Back">
|
||||||
|
</center>
|
||||||
|
</body>
|
||||||
|
</html>
|
25
L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/mods/SellBuffs/BuffMenu.html
vendored
Normal file
25
L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/mods/SellBuffs/BuffMenu.html
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<table border=0 cellpadding=0 cellspacing=0>
|
||||||
|
<tr><td width=256 height=185 background="L2UI_CT1.OlympiadWnd_DF_GrandTexture"></td></tr>
|
||||||
|
</table>
|
||||||
|
<table border=0 cellpadding=0 cellspacing=0 width=292 height=50>
|
||||||
|
<tr><td height=10></td></tr>
|
||||||
|
<tr>
|
||||||
|
<td><button action="bypass -h sellbuffadd" value="Add Buffs" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Apply_Down" fore="L2UI_CT1.OlympiadWnd_DF_Apply"></td>
|
||||||
|
<td><button action="bypass -h sellbuffedit" value="Edit Buffs" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Apply_Down" fore="L2UI_CT1.OlympiadWnd_DF_Apply"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br><br>
|
||||||
|
<table border=0 cellpadding=0 cellspacing=0 width=292 height=50>
|
||||||
|
<tr>
|
||||||
|
<td align=center>Title:</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center><edit var="title" width=120></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<button action="bypass -h sellbuffstart $title" value="Start Selling" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Watch_Down" fore="L2UI_CT1.OlympiadWnd_DF_Watch"></td>
|
||||||
|
</center>
|
||||||
|
</html>
|
14
L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/mods/SellBuffs/BuffMenu_already.html
vendored
Normal file
14
L2J_Mobius_CT_2.6_HighFive/dist/game/data/html/mods/SellBuffs/BuffMenu_already.html
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<table border=0 cellpadding=0 cellspacing=0>
|
||||||
|
<tr><td width=256 height=185 background="L2UI_CT1.OlympiadWnd_DF_GrandTexture"></td></tr>
|
||||||
|
</table>
|
||||||
|
<table border=0 cellpadding=0 cellspacing=0 width=292 height=50>
|
||||||
|
<tr>
|
||||||
|
<td align=center><button action="bypass -h sellbuffstop" value="Stop Selling" width=200 height=31 back="L2UI_CT1.OlympiadWnd_DF_Watch_Down" fore="L2UI_CT1.OlympiadWnd_DF_Watch"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
</body>
|
||||||
|
</html>
|
448
L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/custom/SellBuff/SellBuff.java
vendored
Normal file
448
L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/custom/SellBuff/SellBuff.java
vendored
Normal file
@@ -0,0 +1,448 @@
|
|||||||
|
/*
|
||||||
|
* 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 custom.SellBuff;
|
||||||
|
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import com.l2jmobius.Config;
|
||||||
|
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||||
|
import com.l2jmobius.gameserver.handler.BypassHandler;
|
||||||
|
import com.l2jmobius.gameserver.handler.IBypassHandler;
|
||||||
|
import com.l2jmobius.gameserver.handler.IVoicedCommandHandler;
|
||||||
|
import com.l2jmobius.gameserver.handler.VoicedCommandHandler;
|
||||||
|
import com.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
|
import com.l2jmobius.gameserver.model.L2World;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
|
import com.l2jmobius.gameserver.model.events.AbstractScript;
|
||||||
|
import com.l2jmobius.gameserver.model.holders.SellBuffHolder;
|
||||||
|
import com.l2jmobius.gameserver.model.items.L2Item;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sell Buffs voice command
|
||||||
|
* @author St3eT
|
||||||
|
*/
|
||||||
|
public class SellBuff implements IVoicedCommandHandler, IBypassHandler
|
||||||
|
{
|
||||||
|
private static final String[] VOICED_COMMANDS =
|
||||||
|
{
|
||||||
|
"sellbuff",
|
||||||
|
"sellbuffs",
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final String[] BYPASS_COMMANDS =
|
||||||
|
{
|
||||||
|
"sellbuffadd",
|
||||||
|
"sellbuffaddskill",
|
||||||
|
"sellbuffedit",
|
||||||
|
"sellbuffchangeprice",
|
||||||
|
"sellbuffremove",
|
||||||
|
"sellbuffbuymenu",
|
||||||
|
"sellbuffbuyskill",
|
||||||
|
"sellbuffstart",
|
||||||
|
"sellbuffstop",
|
||||||
|
};
|
||||||
|
|
||||||
|
private SellBuff()
|
||||||
|
{
|
||||||
|
if (Config.SELLBUFF_ENABLED)
|
||||||
|
{
|
||||||
|
BypassHandler.getInstance().registerHandler(this);
|
||||||
|
VoicedCommandHandler.getInstance().registerHandler(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
|
||||||
|
{
|
||||||
|
String cmd = "";
|
||||||
|
String params = "";
|
||||||
|
final StringTokenizer st = new StringTokenizer(command, " ");
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
cmd = st.nextToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
while (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
params += st.nextToken() + (st.hasMoreTokens() ? " " : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmd.isEmpty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return useBypass(cmd, activeChar, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
|
||||||
|
{
|
||||||
|
switch (command)
|
||||||
|
{
|
||||||
|
case "sellbuff":
|
||||||
|
case "sellbuffs":
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendSellMenu(activeChar);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean useBypass(String command, L2PcInstance activeChar, String params)
|
||||||
|
{
|
||||||
|
if (!Config.SELLBUFF_ENABLED)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (command)
|
||||||
|
{
|
||||||
|
case "sellbuffstart":
|
||||||
|
{
|
||||||
|
if (activeChar.isSellingBuffs() || (params == null) || params.isEmpty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (activeChar.getSellingBuffs().isEmpty())
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Your list of buffs is empty, please add some buffs first!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String title = "BUFF SELL: ";
|
||||||
|
final StringTokenizer st = new StringTokenizer(params, " ");
|
||||||
|
while (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
title += st.nextToken() + " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (title.length() > 40)
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Your title cannot exceed 29 characters in length. Please try again.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SellBuffsManager.getInstance().startSellBuffs(activeChar, title);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "sellbuffstop":
|
||||||
|
{
|
||||||
|
if (activeChar.isSellingBuffs())
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().stopSellBuffs(activeChar);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "sellbuffadd":
|
||||||
|
{
|
||||||
|
if (!activeChar.isSellingBuffs())
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
if ((params != null) && !params.isEmpty() && Util.isDigit(params))
|
||||||
|
{
|
||||||
|
index = Integer.parseInt(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
SellBuffsManager.getInstance().sendBuffChoiceMenu(activeChar, index);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "sellbuffedit":
|
||||||
|
{
|
||||||
|
if (!activeChar.isSellingBuffs())
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffEditMenu(activeChar);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "sellbuffchangeprice":
|
||||||
|
{
|
||||||
|
if (!activeChar.isSellingBuffs() && (params != null) && !params.isEmpty())
|
||||||
|
{
|
||||||
|
final StringTokenizer st = new StringTokenizer(params, " ");
|
||||||
|
|
||||||
|
int skillId = -1;
|
||||||
|
int price = -1;
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
skillId = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
price = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Too big price! Maximal price is " + Config.SELLBUFF_MAX_PRICE);
|
||||||
|
SellBuffsManager.getInstance().sendBuffEditMenu(activeChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((skillId == -1) || (price == -1))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Skill skillToChange = activeChar.getKnownSkill(skillId);
|
||||||
|
if (skillToChange == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final SellBuffHolder holder = activeChar.getSellingBuffs().stream().filter(h -> (h.getSkillId() == skillToChange.getId())).findFirst().orElse(null);
|
||||||
|
if ((holder != null))
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Price of " + activeChar.getKnownSkill(holder.getSkillId()).getName() + " has been changed to " + price + "!");
|
||||||
|
holder.setPrice(price);
|
||||||
|
SellBuffsManager.getInstance().sendBuffEditMenu(activeChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "sellbuffremove":
|
||||||
|
{
|
||||||
|
if (!activeChar.isSellingBuffs() && (params != null) && !params.isEmpty())
|
||||||
|
{
|
||||||
|
final StringTokenizer st = new StringTokenizer(params, " ");
|
||||||
|
|
||||||
|
int skillId = -1;
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
skillId = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((skillId == -1))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Skill skillToRemove = activeChar.getKnownSkill(skillId);
|
||||||
|
if (skillToRemove == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final SellBuffHolder holder = activeChar.getSellingBuffs().stream().filter(h -> (h.getSkillId() == skillToRemove.getId())).findFirst().orElse(null);
|
||||||
|
if ((holder != null) && activeChar.getSellingBuffs().remove(holder))
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Skill " + activeChar.getKnownSkill(holder.getSkillId()).getName() + " has been removed!");
|
||||||
|
SellBuffsManager.getInstance().sendBuffEditMenu(activeChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "sellbuffaddskill":
|
||||||
|
{
|
||||||
|
if (!activeChar.isSellingBuffs() && (params != null) && !params.isEmpty())
|
||||||
|
{
|
||||||
|
final StringTokenizer st = new StringTokenizer(params, " ");
|
||||||
|
|
||||||
|
int skillId = -1;
|
||||||
|
long price = -1;
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
skillId = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
price = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Too big price! Maximal price is " + Config.SELLBUFF_MIN_PRICE);
|
||||||
|
SellBuffsManager.getInstance().sendBuffEditMenu(activeChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((skillId == -1) || (price == -1))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Skill skillToAdd = activeChar.getKnownSkill(skillId);
|
||||||
|
if (skillToAdd == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (price < Config.SELLBUFF_MIN_PRICE)
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Too small price! Minimal price is " + Config.SELLBUFF_MIN_PRICE);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (price > Config.SELLBUFF_MAX_PRICE)
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Too big price! Maximal price is " + Config.SELLBUFF_MAX_PRICE);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (activeChar.getSellingBuffs().size() >= Config.SELLBUFF_MAX_BUFFS)
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("You already reached max count of buffs! Max buffs is: " + Config.SELLBUFF_MAX_BUFFS);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (!SellBuffsManager.getInstance().isInSellList(activeChar, skillToAdd))
|
||||||
|
{
|
||||||
|
activeChar.getSellingBuffs().add(new SellBuffHolder(skillToAdd.getId(), price));
|
||||||
|
activeChar.sendMessage(skillToAdd.getName() + " has been added!");
|
||||||
|
SellBuffsManager.getInstance().sendBuffChoiceMenu(activeChar, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "sellbuffbuymenu":
|
||||||
|
{
|
||||||
|
if ((params != null) && !params.isEmpty())
|
||||||
|
{
|
||||||
|
final StringTokenizer st = new StringTokenizer(params, " ");
|
||||||
|
|
||||||
|
int objId = -1;
|
||||||
|
int index = 0;
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
objId = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
index = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
final L2PcInstance seller = L2World.getInstance().getPlayer(objId);
|
||||||
|
if (seller != null)
|
||||||
|
{
|
||||||
|
if (!seller.isSellingBuffs() || !activeChar.isInsideRadius(seller, L2Npc.INTERACTION_DISTANCE, true, true))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(activeChar, seller, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "sellbuffbuyskill":
|
||||||
|
{
|
||||||
|
if ((params != null) && !params.isEmpty())
|
||||||
|
{
|
||||||
|
final StringTokenizer st = new StringTokenizer(params, " ");
|
||||||
|
int objId = -1;
|
||||||
|
int skillId = -1;
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
objId = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
skillId = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (st.hasMoreTokens())
|
||||||
|
{
|
||||||
|
index = Integer.parseInt(st.nextToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((skillId == -1) || (objId == -1))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final L2PcInstance seller = L2World.getInstance().getPlayer(objId);
|
||||||
|
if (seller == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Skill skillToBuy = seller.getKnownSkill(skillId);
|
||||||
|
if (!seller.isSellingBuffs() || !Util.checkIfInRange(L2Npc.INTERACTION_DISTANCE, activeChar, seller, true) || (skillToBuy == null))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (seller.getCurrentMp() < (skillToBuy.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER))
|
||||||
|
{
|
||||||
|
activeChar.sendMessage(seller.getName() + " has no enough mana for " + skillToBuy.getName() + "!");
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(activeChar, seller, index);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final SellBuffHolder holder = seller.getSellingBuffs().stream().filter(h -> (h.getSkillId() == skillToBuy.getId())).findFirst().orElse(null);
|
||||||
|
if (holder != null)
|
||||||
|
{
|
||||||
|
if (AbstractScript.getQuestItemsCount(activeChar, Config.SELLBUFF_PAYMENT_ID) >= holder.getPrice())
|
||||||
|
{
|
||||||
|
AbstractScript.takeItems(activeChar, Config.SELLBUFF_PAYMENT_ID, holder.getPrice());
|
||||||
|
AbstractScript.giveItems(seller, Config.SELLBUFF_PAYMENT_ID, holder.getPrice());
|
||||||
|
seller.reduceCurrentMp(skillToBuy.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER);
|
||||||
|
skillToBuy.activateSkill(seller, activeChar);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
final L2Item item = ItemTable.getInstance().getTemplate(Config.SELLBUFF_PAYMENT_ID);
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Not enough " + item.getName() + "!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
activeChar.sendMessage("Not enough items!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(activeChar, seller, index);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getVoicedCommandList()
|
||||||
|
{
|
||||||
|
return VOICED_COMMANDS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getBypassList()
|
||||||
|
{
|
||||||
|
return BYPASS_COMMANDS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
new SellBuff();
|
||||||
|
}
|
||||||
|
}
|
18
L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/SellBuffData.xsd
vendored
Normal file
18
L2J_Mobius_CT_2.6_HighFive/dist/game/data/xsd/SellBuffData.xsd
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<xs:element name="list">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="skill" maxOccurs="unbounded" minOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute name="id" type="xs:integer" use="required" />
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
@@ -121,6 +121,7 @@ public final class Config
|
|||||||
public static final String CUSTOM_PVP_ANNOUNCE_CONFIG_FILE = "./Config/Custom/PvpAnnounce.ini";
|
public static final String CUSTOM_PVP_ANNOUNCE_CONFIG_FILE = "./Config/Custom/PvpAnnounce.ini";
|
||||||
public static final String CUSTOM_RANDOM_SPAWNS_CONFIG_FILE = "./Config/Custom/RandomSpawns.ini";
|
public static final String CUSTOM_RANDOM_SPAWNS_CONFIG_FILE = "./Config/Custom/RandomSpawns.ini";
|
||||||
public static final String CUSTOM_SCREEN_WELCOME_MESSAGE_CONFIG_FILE = "./Config/Custom/ScreenWelcomeMessage.ini";
|
public static final String CUSTOM_SCREEN_WELCOME_MESSAGE_CONFIG_FILE = "./Config/Custom/ScreenWelcomeMessage.ini";
|
||||||
|
public static final String CUSTOM_SELL_BUFFS_CONFIG_FILE = "./config/Custom/SellBuffs.ini";
|
||||||
public static final String CUSTOM_SERVER_TIME_CONFIG_FILE = "./Config/Custom/ServerTime.ini";
|
public static final String CUSTOM_SERVER_TIME_CONFIG_FILE = "./Config/Custom/ServerTime.ini";
|
||||||
public static final String CUSTOM_STARTING_LOCATION_CONFIG_FILE = "./Config/Custom/StartingLocation.ini";
|
public static final String CUSTOM_STARTING_LOCATION_CONFIG_FILE = "./Config/Custom/StartingLocation.ini";
|
||||||
public static final String CUSTOM_TVT_CONFIG_FILE = "./Config/Custom/TeamVersusTeam.ini";
|
public static final String CUSTOM_TVT_CONFIG_FILE = "./Config/Custom/TeamVersusTeam.ini";
|
||||||
@@ -1197,6 +1198,7 @@ public final class Config
|
|||||||
public static int COMMUNITY_PREMIUM_PRICE_PER_DAY;
|
public static int COMMUNITY_PREMIUM_PRICE_PER_DAY;
|
||||||
public static List<Integer> COMMUNITY_AVAILABLE_BUFFS;
|
public static List<Integer> COMMUNITY_AVAILABLE_BUFFS;
|
||||||
public static Map<String, Location> COMMUNITY_AVAILABLE_TELEPORTS;
|
public static Map<String, Location> COMMUNITY_AVAILABLE_TELEPORTS;
|
||||||
|
public static boolean ENABLE_FIND_PVP;
|
||||||
public static boolean PREMIUM_SYSTEM_ENABLED;
|
public static boolean PREMIUM_SYSTEM_ENABLED;
|
||||||
public static float PREMIUM_RATE_XP;
|
public static float PREMIUM_RATE_XP;
|
||||||
public static float PREMIUM_RATE_SP;
|
public static float PREMIUM_RATE_SP;
|
||||||
@@ -1207,7 +1209,12 @@ public final class Config
|
|||||||
public static float PREMIUM_RATE_SPOIL_AMOUNT;
|
public static float PREMIUM_RATE_SPOIL_AMOUNT;
|
||||||
public static Map<Integer, Float> PREMIUM_RATE_DROP_CHANCE_BY_ID;
|
public static Map<Integer, Float> PREMIUM_RATE_DROP_CHANCE_BY_ID;
|
||||||
public static Map<Integer, Float> PREMIUM_RATE_DROP_AMOUNT_BY_ID;
|
public static Map<Integer, Float> PREMIUM_RATE_DROP_AMOUNT_BY_ID;
|
||||||
public static boolean ENABLE_FIND_PVP;
|
public static boolean SELLBUFF_ENABLED;
|
||||||
|
public static int SELLBUFF_MP_MULTIPLER;
|
||||||
|
public static int SELLBUFF_PAYMENT_ID;
|
||||||
|
public static long SELLBUFF_MIN_PRICE;
|
||||||
|
public static long SELLBUFF_MAX_PRICE;
|
||||||
|
public static int SELLBUFF_MAX_BUFFS;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class initializes all global variables for configuration.<br>
|
* This class initializes all global variables for configuration.<br>
|
||||||
@@ -2727,6 +2734,16 @@ public final class Config
|
|||||||
WELCOME_MESSAGE_TEXT = ScreenWelcomeMessage.getString("ScreenWelcomeMessageText", "Welcome to our server!");
|
WELCOME_MESSAGE_TEXT = ScreenWelcomeMessage.getString("ScreenWelcomeMessageText", "Welcome to our server!");
|
||||||
WELCOME_MESSAGE_TIME = ScreenWelcomeMessage.getInt("ScreenWelcomeMessageTime", 10) * 1000;
|
WELCOME_MESSAGE_TIME = ScreenWelcomeMessage.getInt("ScreenWelcomeMessageTime", 10) * 1000;
|
||||||
|
|
||||||
|
// Load SellBuffs config file (if exists)
|
||||||
|
final PropertiesParser SellBuffs = new PropertiesParser(CUSTOM_SELL_BUFFS_CONFIG_FILE);
|
||||||
|
|
||||||
|
SELLBUFF_ENABLED = SellBuffs.getBoolean("SellBuffEnable", false);
|
||||||
|
SELLBUFF_MP_MULTIPLER = SellBuffs.getInt("MpCostMultipler", 1);
|
||||||
|
SELLBUFF_PAYMENT_ID = SellBuffs.getInt("PaymentID", 57);
|
||||||
|
SELLBUFF_MIN_PRICE = SellBuffs.getLong("MinimalPrice", 100000);
|
||||||
|
SELLBUFF_MAX_PRICE = SellBuffs.getLong("MaximalPrice", 100000000);
|
||||||
|
SELLBUFF_MAX_BUFFS = SellBuffs.getInt("MaxBuffs", 15);
|
||||||
|
|
||||||
// Load ServerTime config file (if exists)
|
// Load ServerTime config file (if exists)
|
||||||
final PropertiesParser ServerTime = new PropertiesParser(CUSTOM_SERVER_TIME_CONFIG_FILE);
|
final PropertiesParser ServerTime = new PropertiesParser(CUSTOM_SERVER_TIME_CONFIG_FILE);
|
||||||
|
|
||||||
|
@@ -59,7 +59,6 @@ import com.l2jmobius.gameserver.data.xml.impl.HennaData;
|
|||||||
import com.l2jmobius.gameserver.data.xml.impl.HitConditionBonusData;
|
import com.l2jmobius.gameserver.data.xml.impl.HitConditionBonusData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.InitialEquipmentData;
|
import com.l2jmobius.gameserver.data.xml.impl.InitialEquipmentData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.InitialShortcutData;
|
import com.l2jmobius.gameserver.data.xml.impl.InitialShortcutData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.PrimeShopData;
|
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.KarmaData;
|
import com.l2jmobius.gameserver.data.xml.impl.KarmaData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.MultisellData;
|
import com.l2jmobius.gameserver.data.xml.impl.MultisellData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.NpcData;
|
import com.l2jmobius.gameserver.data.xml.impl.NpcData;
|
||||||
@@ -68,6 +67,7 @@ import com.l2jmobius.gameserver.data.xml.impl.PetDataTable;
|
|||||||
import com.l2jmobius.gameserver.data.xml.impl.PetSkillData;
|
import com.l2jmobius.gameserver.data.xml.impl.PetSkillData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.PlayerTemplateData;
|
import com.l2jmobius.gameserver.data.xml.impl.PlayerTemplateData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.PlayerXpPercentLostData;
|
import com.l2jmobius.gameserver.data.xml.impl.PlayerXpPercentLostData;
|
||||||
|
import com.l2jmobius.gameserver.data.xml.impl.PrimeShopData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.RecipeData;
|
import com.l2jmobius.gameserver.data.xml.impl.RecipeData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.SecondaryAuthData;
|
import com.l2jmobius.gameserver.data.xml.impl.SecondaryAuthData;
|
||||||
import com.l2jmobius.gameserver.data.xml.impl.SiegeScheduleData;
|
import com.l2jmobius.gameserver.data.xml.impl.SiegeScheduleData;
|
||||||
@@ -116,6 +116,7 @@ import com.l2jmobius.gameserver.instancemanager.PunishmentManager;
|
|||||||
import com.l2jmobius.gameserver.instancemanager.QuestManager;
|
import com.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.RaidBossPointsManager;
|
import com.l2jmobius.gameserver.instancemanager.RaidBossPointsManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager;
|
import com.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager;
|
||||||
|
import com.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.ServerRestartManager;
|
import com.l2jmobius.gameserver.instancemanager.ServerRestartManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.SiegeManager;
|
import com.l2jmobius.gameserver.instancemanager.SiegeManager;
|
||||||
import com.l2jmobius.gameserver.instancemanager.SoDManager;
|
import com.l2jmobius.gameserver.instancemanager.SoDManager;
|
||||||
@@ -281,6 +282,10 @@ public final class GameServer
|
|||||||
CursedWeaponsManager.getInstance();
|
CursedWeaponsManager.getInstance();
|
||||||
TransformData.getInstance();
|
TransformData.getInstance();
|
||||||
BotReportTable.getInstance();
|
BotReportTable.getInstance();
|
||||||
|
if (Config.SELLBUFF_ENABLED)
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
printSection("Scripts");
|
printSection("Scripts");
|
||||||
QuestManager.getInstance();
|
QuestManager.getInstance();
|
||||||
|
@@ -32,6 +32,7 @@ import com.l2jmobius.gameserver.model.L2ManufactureItem;
|
|||||||
import com.l2jmobius.gameserver.model.L2World;
|
import com.l2jmobius.gameserver.model.L2World;
|
||||||
import com.l2jmobius.gameserver.model.TradeItem;
|
import com.l2jmobius.gameserver.model.TradeItem;
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
|
import com.l2jmobius.gameserver.model.holders.SellBuffHolder;
|
||||||
import com.l2jmobius.gameserver.network.Disconnection;
|
import com.l2jmobius.gameserver.network.Disconnection;
|
||||||
import com.l2jmobius.gameserver.network.L2GameClient;
|
import com.l2jmobius.gameserver.network.L2GameClient;
|
||||||
|
|
||||||
@@ -73,7 +74,7 @@ public class OfflineTradersTable
|
|||||||
{
|
{
|
||||||
stm3.setInt(1, pc.getObjectId()); // Char Id
|
stm3.setInt(1, pc.getObjectId()); // Char Id
|
||||||
stm3.setLong(2, pc.getOfflineStartTime());
|
stm3.setLong(2, pc.getOfflineStartTime());
|
||||||
stm3.setInt(3, pc.getPrivateStoreType().getId()); // store type
|
stm3.setInt(3, pc.isSellingBuffs() ? PrivateStoreType.SELL_BUFFS.getId() : pc.getPrivateStoreType().getId()); // store type
|
||||||
String title = null;
|
String title = null;
|
||||||
|
|
||||||
switch (pc.getPrivateStoreType())
|
switch (pc.getPrivateStoreType())
|
||||||
@@ -104,6 +105,20 @@ public class OfflineTradersTable
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
title = pc.getSellList().getTitle();
|
title = pc.getSellList().getTitle();
|
||||||
|
if (pc.isSellingBuffs())
|
||||||
|
{
|
||||||
|
for (SellBuffHolder holder : pc.getSellingBuffs())
|
||||||
|
{
|
||||||
|
stm_items.setInt(1, pc.getObjectId());
|
||||||
|
stm_items.setInt(2, holder.getSkillId());
|
||||||
|
stm_items.setLong(3, 0);
|
||||||
|
stm_items.setLong(4, holder.getPrice());
|
||||||
|
stm_items.executeUpdate();
|
||||||
|
stm_items.clearParameters();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
for (TradeItem i : pc.getSellList().getItems())
|
for (TradeItem i : pc.getSellList().getItems())
|
||||||
{
|
{
|
||||||
stm_items.setInt(1, pc.getObjectId());
|
stm_items.setInt(1, pc.getObjectId());
|
||||||
@@ -113,6 +128,7 @@ public class OfflineTradersTable
|
|||||||
stm_items.executeUpdate();
|
stm_items.executeUpdate();
|
||||||
stm_items.clearParameters();
|
stm_items.clearParameters();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MANUFACTURE:
|
case MANUFACTURE:
|
||||||
@@ -175,7 +191,16 @@ public class OfflineTradersTable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final PrivateStoreType type = PrivateStoreType.findById(rs.getInt("type"));
|
final int typeId = rs.getInt("type");
|
||||||
|
boolean isSellBuff = false;
|
||||||
|
|
||||||
|
if (typeId == PrivateStoreType.SELL_BUFFS.getId())
|
||||||
|
{
|
||||||
|
isSellBuff = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
final PrivateStoreType type = isSellBuff ? PrivateStoreType.PACKAGE_SELL : PrivateStoreType.findById(typeId);
|
||||||
|
|
||||||
if (type == null)
|
if (type == null)
|
||||||
{
|
{
|
||||||
LOGGER.warning(getClass().getSimpleName() + ": PrivateStoreType with id " + rs.getInt("type") + " could not be found.");
|
LOGGER.warning(getClass().getSimpleName() + ": PrivateStoreType with id " + rs.getInt("type") + " could not be found.");
|
||||||
@@ -199,6 +224,12 @@ public class OfflineTradersTable
|
|||||||
client.setAccountName(player.getAccountNamePlayer());
|
client.setAccountName(player.getAccountNamePlayer());
|
||||||
player.setClient(client);
|
player.setClient(client);
|
||||||
player.setOfflineStartTime(time);
|
player.setOfflineStartTime(time);
|
||||||
|
|
||||||
|
if (isSellBuff)
|
||||||
|
{
|
||||||
|
player.setIsSellingBuffs(true);
|
||||||
|
}
|
||||||
|
|
||||||
player.spawnMe(player.getX(), player.getY(), player.getZ());
|
player.spawnMe(player.getX(), player.getY(), player.getZ());
|
||||||
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
|
LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
|
||||||
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
|
try (PreparedStatement stm_items = con.prepareStatement(LOAD_OFFLINE_ITEMS))
|
||||||
@@ -223,6 +254,15 @@ public class OfflineTradersTable
|
|||||||
}
|
}
|
||||||
case SELL:
|
case SELL:
|
||||||
case PACKAGE_SELL:
|
case PACKAGE_SELL:
|
||||||
|
{
|
||||||
|
if (player.isSellingBuffs())
|
||||||
|
{
|
||||||
|
while (items.next())
|
||||||
|
{
|
||||||
|
player.getSellingBuffs().add(new SellBuffHolder(items.getInt("item"), items.getLong("price")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
while (items.next())
|
while (items.next())
|
||||||
{
|
{
|
||||||
@@ -232,6 +272,7 @@ public class OfflineTradersTable
|
|||||||
// throw new NullPointerException();
|
// throw new NullPointerException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
player.getSellList().setTitle(rs.getString("title"));
|
player.getSellList().setTitle(rs.getString("title"));
|
||||||
player.getSellList().setPackaged(type == PrivateStoreType.PACKAGE_SELL);
|
player.getSellList().setPackaged(type == PrivateStoreType.PACKAGE_SELL);
|
||||||
break;
|
break;
|
||||||
@@ -339,6 +380,20 @@ public class OfflineTradersTable
|
|||||||
{
|
{
|
||||||
title = trader.getSellList().getTitle();
|
title = trader.getSellList().getTitle();
|
||||||
}
|
}
|
||||||
|
if (trader.isSellingBuffs())
|
||||||
|
{
|
||||||
|
for (SellBuffHolder holder : trader.getSellingBuffs())
|
||||||
|
{
|
||||||
|
stm3.setInt(1, trader.getObjectId());
|
||||||
|
stm3.setInt(2, holder.getSkillId());
|
||||||
|
stm3.setLong(3, 0);
|
||||||
|
stm3.setLong(4, holder.getPrice());
|
||||||
|
stm3.executeUpdate();
|
||||||
|
stm3.clearParameters();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
for (TradeItem i : trader.getSellList().getItems())
|
for (TradeItem i : trader.getSellList().getItems())
|
||||||
{
|
{
|
||||||
stm3.setInt(1, trader.getObjectId());
|
stm3.setInt(1, trader.getObjectId());
|
||||||
@@ -348,6 +403,7 @@ public class OfflineTradersTable
|
|||||||
stm3.executeUpdate();
|
stm3.executeUpdate();
|
||||||
stm3.clearParameters();
|
stm3.clearParameters();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MANUFACTURE:
|
case MANUFACTURE:
|
||||||
@@ -373,7 +429,7 @@ public class OfflineTradersTable
|
|||||||
{
|
{
|
||||||
stm4.setInt(1, trader.getObjectId()); // Char Id
|
stm4.setInt(1, trader.getObjectId()); // Char Id
|
||||||
stm4.setLong(2, trader.getOfflineStartTime());
|
stm4.setLong(2, trader.getOfflineStartTime());
|
||||||
stm4.setInt(3, trader.getPrivateStoreType().getId()); // store type
|
stm4.setInt(3, trader.isSellingBuffs() ? PrivateStoreType.SELL_BUFFS.getId() : trader.getPrivateStoreType().getId()); // store type
|
||||||
stm4.setString(4, title);
|
stm4.setString(4, title);
|
||||||
stm4.executeUpdate();
|
stm4.executeUpdate();
|
||||||
stm4.clearParameters();
|
stm4.clearParameters();
|
||||||
|
@@ -27,7 +27,8 @@ public enum PrivateStoreType
|
|||||||
BUY(3),
|
BUY(3),
|
||||||
BUY_MANAGE(4),
|
BUY_MANAGE(4),
|
||||||
MANUFACTURE(5),
|
MANUFACTURE(5),
|
||||||
PACKAGE_SELL(8);
|
PACKAGE_SELL(8),
|
||||||
|
SELL_BUFFS(9);
|
||||||
|
|
||||||
private int _id;
|
private int _id;
|
||||||
|
|
||||||
|
@@ -0,0 +1,454 @@
|
|||||||
|
/*
|
||||||
|
* 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.instancemanager;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
import com.l2jmobius.Config;
|
||||||
|
import com.l2jmobius.commons.util.IGameXmlReader;
|
||||||
|
import com.l2jmobius.gameserver.cache.HtmCache;
|
||||||
|
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||||
|
import com.l2jmobius.gameserver.datatables.SkillData;
|
||||||
|
import com.l2jmobius.gameserver.enums.PrivateStoreType;
|
||||||
|
import com.l2jmobius.gameserver.handler.CommunityBoardHandler;
|
||||||
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
|
import com.l2jmobius.gameserver.model.holders.SellBuffHolder;
|
||||||
|
import com.l2jmobius.gameserver.model.items.L2Item;
|
||||||
|
import com.l2jmobius.gameserver.model.olympiad.OlympiadManager;
|
||||||
|
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||||
|
import com.l2jmobius.gameserver.model.zone.ZoneId;
|
||||||
|
import com.l2jmobius.gameserver.network.serverpackets.ExPrivateStoreSetWholeMsg;
|
||||||
|
import com.l2jmobius.gameserver.util.HtmlUtil;
|
||||||
|
import com.l2jmobius.gameserver.util.Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sell Buffs Manager
|
||||||
|
* @author St3eT
|
||||||
|
*/
|
||||||
|
public final class SellBuffsManager implements IGameXmlReader
|
||||||
|
{
|
||||||
|
private static final Logger LOGGER = Logger.getLogger(SellBuffsManager.class.getName());
|
||||||
|
private static final List<Integer> ALLOWED_BUFFS = new ArrayList<>();
|
||||||
|
private static final String htmlFolder = "data/html/mods/SellBuffs/";
|
||||||
|
|
||||||
|
protected SellBuffsManager()
|
||||||
|
{
|
||||||
|
load();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void load()
|
||||||
|
{
|
||||||
|
if (Config.SELLBUFF_ENABLED)
|
||||||
|
{
|
||||||
|
ALLOWED_BUFFS.clear();
|
||||||
|
parseDatapackFile("data/SellBuffData.xml");
|
||||||
|
LOGGER.info(getClass().getSimpleName() + ": Loaded " + ALLOWED_BUFFS.size() + " allowed buffs.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void parseDocument(Document doc, File f)
|
||||||
|
{
|
||||||
|
final NodeList node = doc.getDocumentElement().getElementsByTagName("skill");
|
||||||
|
for (int i = 0; i < node.getLength(); ++i)
|
||||||
|
{
|
||||||
|
final Element elem = (Element) node.item(i);
|
||||||
|
final int skillId = Integer.parseInt(elem.getAttribute("id"));
|
||||||
|
|
||||||
|
if (!ALLOWED_BUFFS.contains(skillId))
|
||||||
|
{
|
||||||
|
ALLOWED_BUFFS.add(skillId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendSellMenu(L2PcInstance player)
|
||||||
|
{
|
||||||
|
final String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmlFolder + (player.isSellingBuffs() ? "BuffMenu_already.html" : "BuffMenu.html"));
|
||||||
|
CommunityBoardHandler.separateAndSend(html, player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendBuffChoiceMenu(L2PcInstance player, int index)
|
||||||
|
{
|
||||||
|
String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmlFolder + "BuffChoice.html");
|
||||||
|
html = html.replace("%list%", buildSkillMenu(player, index));
|
||||||
|
CommunityBoardHandler.separateAndSend(html, player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendBuffEditMenu(L2PcInstance player)
|
||||||
|
{
|
||||||
|
String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmlFolder + "BuffChoice.html");
|
||||||
|
html = html.replace("%list%", buildEditMenu(player));
|
||||||
|
CommunityBoardHandler.separateAndSend(html, player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendBuffMenu(L2PcInstance player, L2PcInstance seller, int index)
|
||||||
|
{
|
||||||
|
if (!seller.isSellingBuffs() || seller.getSellingBuffs().isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmlFolder + "BuffBuyMenu.html");
|
||||||
|
html = html.replace("%list%", buildBuffMenu(player, seller, index));
|
||||||
|
CommunityBoardHandler.separateAndSend(html, player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startSellBuffs(L2PcInstance player, String title)
|
||||||
|
{
|
||||||
|
player.sitDown();
|
||||||
|
player.setIsSellingBuffs(true);
|
||||||
|
player.setPrivateStoreType(PrivateStoreType.PACKAGE_SELL);
|
||||||
|
player.getSellList().setTitle(title);
|
||||||
|
player.getSellList().setPackaged(true);
|
||||||
|
player.broadcastUserInfo();
|
||||||
|
player.broadcastPacket(new ExPrivateStoreSetWholeMsg(player));
|
||||||
|
sendSellMenu(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stopSellBuffs(L2PcInstance player)
|
||||||
|
{
|
||||||
|
player.setIsSellingBuffs(false);
|
||||||
|
player.setPrivateStoreType(PrivateStoreType.NONE);
|
||||||
|
player.standUp();
|
||||||
|
player.broadcastUserInfo();
|
||||||
|
sendSellMenu(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildBuffMenu(L2PcInstance player, L2PcInstance seller, int index)
|
||||||
|
{
|
||||||
|
final int ceiling = index + 10;
|
||||||
|
int nextIndex = -1;
|
||||||
|
int previousIndex = -1;
|
||||||
|
int emptyFields = 0;
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
final List<SellBuffHolder> sellList = new ArrayList<>();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (SellBuffHolder holder : seller.getSellingBuffs())
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
if ((count > index) && (count <= ceiling))
|
||||||
|
{
|
||||||
|
sellList.add(holder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count > 10)
|
||||||
|
{
|
||||||
|
if (count > (index + 10))
|
||||||
|
{
|
||||||
|
nextIndex = index + 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index >= 10)
|
||||||
|
{
|
||||||
|
previousIndex = index - 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
emptyFields = ceiling - sellList.size();
|
||||||
|
|
||||||
|
sb.append("<br>");
|
||||||
|
sb.append(HtmlUtil.getMpGauge(250, (long) seller.getCurrentMp(), seller.getMaxMp(), false));
|
||||||
|
sb.append("<br>");
|
||||||
|
|
||||||
|
sb.append("<table border=0 cellpadding=0 cellspacing=0 background=\"L2UI_CH3.refinewnd_back_Pattern\">");
|
||||||
|
sb.append("<tr><td><br><br><br></td></tr>");
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td fixwidth=\"10\"></td>");
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Icon\" width=75 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Icon
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Name\" width=175 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Name
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Level\" width=85 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Leve
|
||||||
|
sb.append("<td> <button action=\"\" value=\"MP Cost\" width=100 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Price
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Price\" width=200 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Price
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Action\" width=100 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Action
|
||||||
|
sb.append("<td fixwidth=\"20\"></td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
|
||||||
|
for (SellBuffHolder holder : sellList)
|
||||||
|
{
|
||||||
|
final Skill skill = seller.getKnownSkill(holder.getSkillId());
|
||||||
|
if (skill == null)
|
||||||
|
{
|
||||||
|
emptyFields++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
final L2Item item = ItemTable.getInstance().getTemplate(Config.SELLBUFF_PAYMENT_ID);
|
||||||
|
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td fixwidth=\"20\"></td>");
|
||||||
|
sb.append("<td align=center><img src=\"" + skill.getIcon() + "\" width=\"32\" height=\"32\"></td>");
|
||||||
|
sb.append("<td align=left>" + skill.getName() + (skill.getLevel() > 100 ? "<font color=\"LEVEL\"> + " + (skill.getLevel() % 100) + "</font></td>" : "</td>"));
|
||||||
|
sb.append("<td align=center>" + ((skill.getLevel() > 100) ? SkillData.getInstance().getMaxLevel(skill.getId()) : skill.getLevel()) + "</td>");
|
||||||
|
sb.append("<td align=center> <font color=\"1E90FF\">" + (skill.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER) + "</font></td>");
|
||||||
|
sb.append("<td align=center> " + Util.formatAdena(holder.getPrice()) + " <font color=\"LEVEL\"> " + (item != null ? item.getName() : "") + "</font> </td>");
|
||||||
|
sb.append("<td align=center fixwidth=\"50\"><button value=\"Buy Buff\" action=\"bypass -h sellbuffbuyskill " + seller.getObjectId() + " " + skill.getId() + " " + index + "\" width=\"85\" height=\"26\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("<tr><td><br><br></td></tr>");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < emptyFields; i++)
|
||||||
|
{
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td fixwidth=\"20\"></td>");
|
||||||
|
sb.append("<td align=center></td>");
|
||||||
|
sb.append("<td align=left></td>");
|
||||||
|
sb.append("<td align=center></td>");
|
||||||
|
sb.append("<td align=center></font></td>");
|
||||||
|
sb.append("<td align=center></td>");
|
||||||
|
sb.append("<td align=center fixwidth=\"50\"></td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("<tr><td><br><br></td></tr>");
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append("</table>");
|
||||||
|
|
||||||
|
sb.append("<table width=\"250\" border=\"0\">");
|
||||||
|
sb.append("<tr>");
|
||||||
|
|
||||||
|
if (previousIndex > -1)
|
||||||
|
{
|
||||||
|
sb.append("<td align=left><button value=\"Previous Page\" action=\"bypass -h sellbuffbuymenu " + seller.getObjectId() + " " + previousIndex + "\" width=\"100\" height=\"30\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nextIndex > -1)
|
||||||
|
{
|
||||||
|
sb.append("<td align=right><button value=\"Next Page\" action=\"bypass -h sellbuffbuymenu " + seller.getObjectId() + " " + nextIndex + "\" width=\"100\" height=\"30\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
}
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("</table>");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildEditMenu(L2PcInstance player)
|
||||||
|
{
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.append("<table border=0 cellpadding=0 cellspacing=0 background=\"L2UI_CH3.refinewnd_back_Pattern\">");
|
||||||
|
sb.append("<tr><td><br><br><br></td></tr>");
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td fixwidth=\"10\"></td>");
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Icon\" width=75 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Icon
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Name\" width=150 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Name
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Level\" width=75 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Level
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Old Price\" width=100 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Old price
|
||||||
|
sb.append("<td> <button action=\"\" value=\"New Price\" width=125 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // New price
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Action\" width=125 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Change Price
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Remove\" width=85 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Remove Buff
|
||||||
|
sb.append("<td fixwidth=\"20\"></td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
|
||||||
|
if (player.getSellingBuffs().isEmpty())
|
||||||
|
{
|
||||||
|
sb.append("</table>");
|
||||||
|
sb.append("<br><br><br>");
|
||||||
|
sb.append("You don't have added any buffs yet!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (SellBuffHolder holder : player.getSellingBuffs())
|
||||||
|
{
|
||||||
|
final Skill skill = player.getKnownSkill(holder.getSkillId());
|
||||||
|
if (skill == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td fixwidth=\"20\"></td>");
|
||||||
|
sb.append("<td align=center><img src=\"" + skill.getIcon() + "\" width=\"32\" height=\"32\"></td>"); // Icon
|
||||||
|
sb.append("<td align=left>" + skill.getName() + (skill.getLevel() > 100 ? "<font color=\"LEVEL\"> + " + (skill.getLevel() % 100) + "</font></td>" : "</td>")); // Name + enchant
|
||||||
|
sb.append("<td align=center>" + ((skill.getLevel() > 100) ? SkillData.getInstance().getMaxLevel(skill.getId()) : skill.getLevel()) + "</td>"); // Level
|
||||||
|
sb.append("<td align=center> " + Util.formatAdena(holder.getPrice()) + " </td>"); // Price show
|
||||||
|
sb.append("<td align=center><edit var=\"price_" + skill.getId() + "\" width=120 type=\"number\"></td>"); // Price edit
|
||||||
|
sb.append("<td align=center><button value=\"Edit\" action=\"bypass -h sellbuffchangeprice " + skill.getId() + " $price_" + skill.getId() + "\" width=\"85\" height=\"26\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
sb.append("<td align=center><button value=\" X \" action=\"bypass -h sellbuffremove " + skill.getId() + "\" width=\"26\" height=\"26\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("<tr><td><br><br></td></tr>");
|
||||||
|
}
|
||||||
|
sb.append("</table>");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildSkillMenu(L2PcInstance player, int index)
|
||||||
|
{
|
||||||
|
final int ceiling = index + 10;
|
||||||
|
int nextIndex = -1;
|
||||||
|
int previousIndex = -1;
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
final List<Skill> skillList = new ArrayList<>();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (Skill skill : player.getAllSkills())
|
||||||
|
{
|
||||||
|
if (ALLOWED_BUFFS.contains(skill.getId()) && !isInSellList(player, skill))
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
|
||||||
|
if ((count > index) && (count <= ceiling))
|
||||||
|
{
|
||||||
|
skillList.add(skill);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count > 10)
|
||||||
|
{
|
||||||
|
if (count > (index + 10))
|
||||||
|
{
|
||||||
|
nextIndex = index + 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index >= 10)
|
||||||
|
{
|
||||||
|
previousIndex = index - 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append("<table border=0 cellpadding=0 cellspacing=0 background=\"L2UI_CH3.refinewnd_back_Pattern\">");
|
||||||
|
sb.append("<tr><td><br><br><br></td></tr>");
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td fixwidth=\"10\"></td>");
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Icon\" width=100 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Icon
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Name\" width=175 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Name
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Level\" width=150 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Leve
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Price\" width=150 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Price
|
||||||
|
sb.append("<td> <button action=\"\" value=\"Action\" width=125 height=23 back=\"L2UI_CT1.OlympiadWnd_DF_Watch_Down\" fore=\"L2UI_CT1.OlympiadWnd_DF_Watch\"> </td>"); // Action
|
||||||
|
sb.append("<td fixwidth=\"20\"></td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
|
||||||
|
if (skillList.isEmpty())
|
||||||
|
{
|
||||||
|
sb.append("</table>");
|
||||||
|
sb.append("<br><br><br>");
|
||||||
|
sb.append("At this moment you cant add any buffs!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (Skill skill : skillList)
|
||||||
|
{
|
||||||
|
sb.append("<tr>");
|
||||||
|
sb.append("<td fixwidth=\"20\"></td>");
|
||||||
|
sb.append("<td align=center><img src=\"" + skill.getIcon() + "\" width=\"32\" height=\"32\"></td>");
|
||||||
|
sb.append("<td align=left>" + skill.getName() + (skill.getLevel() > 100 ? "<font color=\"LEVEL\"> + " + (skill.getLevel() % 100) + "</font></td>" : "</td>"));
|
||||||
|
sb.append("<td align=center>" + ((skill.getLevel() > 100) ? SkillData.getInstance().getMaxLevel(skill.getId()) : skill.getLevel()) + "</td>");
|
||||||
|
sb.append("<td align=center><edit var=\"price_" + skill.getId() + "\" width=120 type=\"number\"></td>");
|
||||||
|
sb.append("<td align=center fixwidth=\"50\"><button value=\"Add Buff\" action=\"bypass -h sellbuffaddskill " + skill.getId() + " $price_" + skill.getId() + "\" width=\"85\" height=\"26\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("<tr><td><br><br></td></tr>");
|
||||||
|
}
|
||||||
|
sb.append("</table>");
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append("<table width=\"250\" border=\"0\">");
|
||||||
|
sb.append("<tr>");
|
||||||
|
|
||||||
|
if (previousIndex > -1)
|
||||||
|
{
|
||||||
|
sb.append("<td align=left><button value=\"Previous Page\" action=\"bypass -h sellbuffadd " + previousIndex + "\" width=\"100\" height=\"30\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nextIndex > -1)
|
||||||
|
{
|
||||||
|
sb.append("<td align=right><button value=\"Next Page\" action=\"bypass -h sellbuffadd " + nextIndex + "\" width=\"100\" height=\"30\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
|
||||||
|
}
|
||||||
|
sb.append("</tr>");
|
||||||
|
sb.append("</table>");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInSellList(L2PcInstance player, Skill skill)
|
||||||
|
{
|
||||||
|
return player.getSellingBuffs().stream().filter(h -> (h.getSkillId() == skill.getId())).findFirst().orElse(null) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canStartSellBuffs(L2PcInstance player)
|
||||||
|
{
|
||||||
|
if (player.isAlikeDead())
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs in fake death!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (player.isInOlympiadMode() || OlympiadManager.getInstance().isRegistered(player))
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs with Olympiad status!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (player.isOnEvent()) // custom event message
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs while registered in an event!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (player.isCursedWeaponEquipped() || (player.getKarma() > 0))
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs in Chaotic state!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (player.isInDuel())
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs in Duel state!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (player.isFishing())
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs while fishing.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (player.isMounted() || player.isFlyingMounted() || player.isFlying())
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs in Mounth state!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (player.isTransformed())
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs in Transform state!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (player.isInsideZone(ZoneId.NO_STORE) || !player.isInsideZone(ZoneId.PEACE) || player.isJailed())
|
||||||
|
{
|
||||||
|
player.sendMessage("You can't sell buffs here!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the single instance of {@code SellBuffsManager}.
|
||||||
|
* @return single instance of {@code SellBuffsManager}
|
||||||
|
*/
|
||||||
|
public static SellBuffsManager getInstance()
|
||||||
|
{
|
||||||
|
return SingletonHolder._instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class SingletonHolder
|
||||||
|
{
|
||||||
|
protected static final SellBuffsManager _instance = new SellBuffsManager();
|
||||||
|
}
|
||||||
|
}
|
@@ -211,6 +211,7 @@ import com.l2jmobius.gameserver.model.fishing.L2Fishing;
|
|||||||
import com.l2jmobius.gameserver.model.holders.AdditionalSkillHolder;
|
import com.l2jmobius.gameserver.model.holders.AdditionalSkillHolder;
|
||||||
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
import com.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||||
import com.l2jmobius.gameserver.model.holders.PlayerEventHolder;
|
import com.l2jmobius.gameserver.model.holders.PlayerEventHolder;
|
||||||
|
import com.l2jmobius.gameserver.model.holders.SellBuffHolder;
|
||||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||||
import com.l2jmobius.gameserver.model.holders.SkillUseHolder;
|
import com.l2jmobius.gameserver.model.holders.SkillUseHolder;
|
||||||
import com.l2jmobius.gameserver.model.interfaces.IEventListener;
|
import com.l2jmobius.gameserver.model.interfaces.IEventListener;
|
||||||
@@ -930,6 +931,29 @@ public final class L2PcInstance extends L2Playable
|
|||||||
|
|
||||||
private boolean _hasCharmOfCourage = false;
|
private boolean _hasCharmOfCourage = false;
|
||||||
|
|
||||||
|
// Selling buffs system
|
||||||
|
private boolean _isSellingBuffs = false;
|
||||||
|
private List<SellBuffHolder> _sellingBuffs = null;
|
||||||
|
|
||||||
|
public boolean isSellingBuffs()
|
||||||
|
{
|
||||||
|
return _isSellingBuffs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsSellingBuffs(boolean val)
|
||||||
|
{
|
||||||
|
_isSellingBuffs = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SellBuffHolder> getSellingBuffs()
|
||||||
|
{
|
||||||
|
if (_sellingBuffs == null)
|
||||||
|
{
|
||||||
|
_sellingBuffs = new ArrayList<>();
|
||||||
|
}
|
||||||
|
return _sellingBuffs;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new L2PcInstance and add it in the characters table of the database.<br>
|
* Create a new L2PcInstance and add it in the characters table of the database.<br>
|
||||||
* <B><U> Actions</U> :</B>
|
* <B><U> Actions</U> :</B>
|
||||||
|
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* 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.model.holders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple class for storing info for Selling Buffs system.
|
||||||
|
* @author St3eT
|
||||||
|
*/
|
||||||
|
public final class SellBuffHolder
|
||||||
|
{
|
||||||
|
private final int _skillId;
|
||||||
|
private long _price;
|
||||||
|
|
||||||
|
public SellBuffHolder(int skillId, long price)
|
||||||
|
{
|
||||||
|
_skillId = skillId;
|
||||||
|
_price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final int getSkillId()
|
||||||
|
{
|
||||||
|
return _skillId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void setPrice(int price)
|
||||||
|
{
|
||||||
|
_price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final long getPrice()
|
||||||
|
{
|
||||||
|
return _price;
|
||||||
|
}
|
||||||
|
}
|
@@ -271,7 +271,7 @@ public final class RequestActionUse implements IClientIncomingPacket
|
|||||||
}
|
}
|
||||||
case 37: // Dwarven Manufacture
|
case 37: // Dwarven Manufacture
|
||||||
{
|
{
|
||||||
if (activeChar.isAlikeDead())
|
if (activeChar.isAlikeDead() || activeChar.isSellingBuffs())
|
||||||
{
|
{
|
||||||
client.sendPacket(ActionFailed.STATIC_PACKET);
|
client.sendPacket(ActionFailed.STATIC_PACKET);
|
||||||
return;
|
return;
|
||||||
|
@@ -91,6 +91,11 @@ public final class RequestExEnchantSkill implements IClientIncomingPacket
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player.isSellingBuffs())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl);
|
final Skill skill = SkillData.getInstance().getSkill(_skillId, _skillLvl);
|
||||||
if (skill == null)
|
if (skill == null)
|
||||||
{
|
{
|
||||||
|
@@ -17,39 +17,44 @@
|
|||||||
package com.l2jmobius.gameserver.network.serverpackets;
|
package com.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.commons.network.PacketWriter;
|
import com.l2jmobius.commons.network.PacketWriter;
|
||||||
|
import com.l2jmobius.gameserver.instancemanager.SellBuffsManager;
|
||||||
import com.l2jmobius.gameserver.model.TradeItem;
|
import com.l2jmobius.gameserver.model.TradeItem;
|
||||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||||
import com.l2jmobius.gameserver.network.OutgoingPackets;
|
import com.l2jmobius.gameserver.network.OutgoingPackets;
|
||||||
|
|
||||||
public class PrivateStoreListSell extends AbstractItemPacket
|
public class PrivateStoreListSell extends AbstractItemPacket
|
||||||
{
|
{
|
||||||
private final int _objId;
|
private final L2PcInstance _player;
|
||||||
private final long _playerAdena;
|
private final L2PcInstance _seller;
|
||||||
private final boolean _packageSale;
|
|
||||||
private final TradeItem[] _items;
|
|
||||||
|
|
||||||
public PrivateStoreListSell(L2PcInstance player, L2PcInstance storePlayer)
|
public PrivateStoreListSell(L2PcInstance player, L2PcInstance seller)
|
||||||
{
|
{
|
||||||
_objId = storePlayer.getObjectId();
|
_player = player;
|
||||||
_playerAdena = player.getAdena();
|
_seller = seller;
|
||||||
_items = storePlayer.getSellList().getItems();
|
|
||||||
_packageSale = storePlayer.getSellList().isPackaged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean write(PacketWriter packet)
|
public boolean write(PacketWriter packet)
|
||||||
|
{
|
||||||
|
if (_seller.isSellingBuffs())
|
||||||
|
{
|
||||||
|
SellBuffsManager.getInstance().sendBuffMenu(_player, _seller, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
OutgoingPackets.PRIVATE_STORE_SELL_LIST.writeId(packet);
|
OutgoingPackets.PRIVATE_STORE_SELL_LIST.writeId(packet);
|
||||||
packet.writeD(_objId);
|
|
||||||
packet.writeD(_packageSale ? 1 : 0);
|
packet.writeD(_seller.getObjectId());
|
||||||
packet.writeQ(_playerAdena);
|
packet.writeD(_seller.getSellList().isPackaged() ? 1 : 0);
|
||||||
packet.writeD(_items.length);
|
packet.writeQ(_player.getAdena());
|
||||||
for (TradeItem item : _items)
|
packet.writeD(_seller.getSellList().getItems().length);
|
||||||
|
for (TradeItem item : _seller.getSellList().getItems())
|
||||||
{
|
{
|
||||||
writeItem(packet, item);
|
writeItem(packet, item);
|
||||||
packet.writeQ(item.getPrice());
|
packet.writeQ(item.getPrice());
|
||||||
packet.writeQ(item.getItem().getReferencePrice() * 2);
|
packet.writeQ(item.getItem().getReferencePrice() * 2);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,7 @@ public class PrivateStoreMsgSell implements IClientOutgoingPacket
|
|||||||
public PrivateStoreMsgSell(L2PcInstance player)
|
public PrivateStoreMsgSell(L2PcInstance player)
|
||||||
{
|
{
|
||||||
_objId = player.getObjectId();
|
_objId = player.getObjectId();
|
||||||
if (player.getSellList() != null)
|
if ((player.getSellList() != null) || player.isSellingBuffs())
|
||||||
{
|
{
|
||||||
_storeMsg = player.getSellList().getTitle();
|
_storeMsg = player.getSellList().getTitle();
|
||||||
}
|
}
|
||||||
|
@@ -31,3 +31,4 @@ What is done
|
|||||||
-New XML reader
|
-New XML reader
|
||||||
-Replaced MMOCore with Netty
|
-Replaced MMOCore with Netty
|
||||||
-Dropped SQL spawnlist
|
-Dropped SQL spawnlist
|
||||||
|
-Sell buffs command
|
||||||
|
Reference in New Issue
Block a user