Перейти к содержанию
Авторизация  
AdminNight

Multisellchoose

Рекомендуемые сообщения

Что нада дописат по пути com.l2jserver.gameserver.network.clientpackets;- MultiSellChoose ,чтобы в Alt+B могли покупать обычные игроки ?(проблема в том что гмом могу купить вещи в Alt+B Гм-шопе.Перезахожу обычным игроком ,захожу в тот же Shop и оно там не чего не покупается.Я нажимаю купить оно вообще не реагирует )

Сразу говарю в Google нема ! Темы такие есть ответа на них нормально не нашел!

Копать надо в MultisellChoose это точно но что там дописать и где.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ты просветил)

Оно у меня реализовано все работает кроме гм шопа .

В комунити гм шопе могут покупать ток админы вот в чем прикол!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ты просветил)

Оно у меня реализовано все работает кроме гм шопа .

В комунити гм шопе могут покупать ток админы вот в чем прикол!

Нужно убрать проверку if (!player.isGm) из коммунити, и тогда будет вам щастье, если же нету исходников, тогда не как разве что прийдется декомпильнуть класс CommunityBoard.java, и убрать проверку, а потом впихнуть обратно, или перекомпелировать как отдельный .jar файл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имсходники как раз есть но в CommunityBoard.java

Не нашел такого(

вот моя комунка

i

Скрытый текст
mport com.l2jserver.Config;

import com.l2jserver.gameserver.communitybbs.Manager.BuffBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.ClanBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.ClassBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.PostBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.TeleportBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.TopBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.TopicBBSManager;

import com.l2jserver.gameserver.datatables.MultiSell;

import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

import com.l2jserver.gameserver.model.entity.TvTEvent;

import com.l2jserver.gameserver.network.L2GameClient;

import com.l2jserver.gameserver.network.SystemMessageId;

import com.l2jserver.gameserver.network.serverpackets.ShowBoard;

import com.l2jserver.gameserver.network.serverpackets.SystemMessage;

 

public class CommunityBoard

{

private CommunityBoard()

{

}

 

public static CommunityBoard getInstance()

{

return SingletonHolder._instance;

}

 

public void handleCommands(L2GameClient client, String command)

{

L2PcInstance activeChar = client.getActiveChar();

if (activeChar == null)

return;

if(activeChar.isDead() || activeChar.isAlikeDead() || activeChar.isCastingNow() || activeChar.isInCombat() || activeChar.isAttackingNow() || activeChar.isFlying() || activeChar.isInSiege() || activeChar.isCombatFlagEquipped())

{

 

}

if(activeChar.isInJail())

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u0442\u044E\u0440\u043C\u0435.");

return;

}

if(activeChar.isInDuel())

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0434\u0443\u0435\u043B\u0438.");

return;

}

if(activeChar.isInOlympiadMode())

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u041E\u043B\u0438\u043C\u043F\u0438\u0430\u0434\u044B.");

return;

}

if(activeChar.getPvpFlag() != 0 || activeChar.getKarma() > 0)

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C CommunityBoard \u0432 \u0442\u0430\u043A\u043E\u043C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0438.");

return;

}

if(TvTEvent.isStarted())

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F TVT \u0435\u0432\u0435\u043D\u0442\u0430.");

return;

}

if(activeChar.isInsideZone((byte)0))

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u0431\u043E\u0435\u0432\u043E\u0439 \u0437\u043E\u043D\u0435.");

return;

}

if(activeChar.isInsideZone((byte)2))

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u0437\u043E\u043D\u0435 \u043E\u0441\u0430\u0434\u044B.");

return;

}

 

switch (Config.COMMUNITY_TYPE)

{

default:

case 0: //disabled

activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CB_OFFLINE)

);

break;

case 1: // old

RegionBBSManager.getInstance().parsecmd(command, activeChar);

break;

case 2: // new

if (command.startsWith("_bbsclan"))

{

ClanBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbsmemo"))

{

TopicBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbstopics"))

{

TopicBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbsposts"))

{

PostBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbstop"))

{

TopBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbshome"))

{

TopBBSManager.getInstance().parsecmd(command, activeChar);

}

else if(command.startsWith("_bbsclass"))

{

ClassBBSManager.getInstance().parsecmd(command, activeChar);

break;

}

else if (command.startsWith("_bbs_buff"))

{

BuffBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbsteleport;"))

{

TeleportBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbsmultisell;"))

{

if(activeChar.isDead() || activeChar.isAlikeDead() || TvTEvent.isStarted() || activeChar.isInSiege() || activeChar.isCastingNow() || activeChar.isInCombat() || activeChar.isAttackingNow() || activeChar.isInOlympiadMode() || activeChar.isInJail() || activeChar.isFlying() || activeChar.getKarma() > 0 || activeChar.isInDuel()){

activeChar.sendMessage("В данных условиях использовать Шоп запрещено");

return;

}

StringTokenizer st = new StringTokenizer(command, ";");

st.nextToken();

TopBBSManager.getInstance().parsecmd("_bbstop;" + st.nextToken(), activeChar);

int multisell = Integer.parseInt(st.nextToken());

MultiSell.getInstance().separateAndSend(multisell, activeChar, null, false);

}

else if (command.startsWith("_bbsloc"))

{

RegionBBSManager.getInstance().parsecmd(command, activeChar);

}

else

{

ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + command

+ " is not implemented yet</center><br><br></body></html>", "101");

activeChar.sendPacket(sb);

activeChar.sendPacket(new ShowBoard(null, "102"));

activeChar.sendPacket(new ShowBoard(null, "103"));

}

break;

}

}

 

/**

* @param client

* @param url

* @param arg1

* @param arg2

* @param arg3

* @param arg4

* @param arg5

*/

public void handleWriteCommands(L2GameClient client, String url, String arg1, String arg2, String arg3, String arg4, String arg5)

{

L2PcInstance activeChar = client.getActiveChar();

if (activeChar == null)

return;

 

switch (Config.COMMUNITY_TYPE)

{

case 2:

if (url.equals("Topic"))

{

TopicBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

}

else if (url.equals("Post"))

{

PostBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

}

else if (url.equals("Region"))

{

RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

}

else if (url.equals("Notice"))

{

ClanBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

}

else

{

ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + url

+ " is not implemented yet</center><br><br></body></html>", "101");

activeChar.sendPacket(sb);

activeChar.sendPacket(new ShowBoard(null, "102"));

activeChar.sendPacket(new ShowBoard(null, "103"));

}

break;

case 1:

RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

break;

default:

case 0:

ShowBoard sb = new ShowBoard("<html><body><br><br><center>The Community board is currently disabled</center><br><br></body></html>", "101");

activeChar.sendPacket(sb);

activeChar.sendPacket(new ShowBoard(null, "102"));

activeChar.sendPacket(new ShowBoard(null, "103"));

break;

}

}

 

@SuppressWarnings("synthetic-access")

private static class SingletonHolder

{

protected static final CommunityBoard _instance = new CommunityBoard();

}

}

Убрать проверку в фаиле CommunityBoard.java или в MultiSellChoose.java??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Имсходники как раз есть но в CommunityBoard.java

Не нашел такого(

вот моя комунка

i

Скрытый текст
mport com.l2jserver.Config;

import com.l2jserver.gameserver.communitybbs.Manager.BuffBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.ClanBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.ClassBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.PostBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.TeleportBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.TopBBSManager;

import com.l2jserver.gameserver.communitybbs.Manager.TopicBBSManager;

import com.l2jserver.gameserver.datatables.MultiSell;

import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

import com.l2jserver.gameserver.model.entity.TvTEvent;

import com.l2jserver.gameserver.network.L2GameClient;

import com.l2jserver.gameserver.network.SystemMessageId;

import com.l2jserver.gameserver.network.serverpackets.ShowBoard;

import com.l2jserver.gameserver.network.serverpackets.SystemMessage;

 

public class CommunityBoard

{

private CommunityBoard()

{

}

 

public static CommunityBoard getInstance()

{

return SingletonHolder._instance;

}

 

public void handleCommands(L2GameClient client, String command)

{

L2PcInstance activeChar = client.getActiveChar();

if (activeChar == null)

return;

if(activeChar.isDead() || activeChar.isAlikeDead() || activeChar.isCastingNow() || activeChar.isInCombat() || activeChar.isAttackingNow() || activeChar.isFlying() || activeChar.isInSiege() || activeChar.isCombatFlagEquipped())

{

 

}

if(activeChar.isInJail())

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u0442\u044E\u0440\u043C\u0435.");

return;

}

if(activeChar.isInDuel())

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0434\u0443\u0435\u043B\u0438.");

return;

}

if(activeChar.isInOlympiadMode())

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u041E\u043B\u0438\u043C\u043F\u0438\u0430\u0434\u044B.");

return;

}

if(activeChar.getPvpFlag() != 0 || activeChar.getKarma() > 0)

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C CommunityBoard \u0432 \u0442\u0430\u043A\u043E\u043C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0438.");

return;

}

if(TvTEvent.isStarted())

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u043E \u0432\u0440\u0435\u043C\u044F TVT \u0435\u0432\u0435\u043D\u0442\u0430.");

return;

}

if(activeChar.isInsideZone((byte)0))

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u0431\u043E\u0435\u0432\u043E\u0439 \u0437\u043E\u043D\u0435.");

return;

}

if(activeChar.isInsideZone((byte)2))

{

activeChar.sendMessage("\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432 \u0437\u043E\u043D\u0435 \u043E\u0441\u0430\u0434\u044B.");

return;

}

 

switch (Config.COMMUNITY_TYPE)

{

default:

case 0: //disabled

activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CB_OFFLINE)

);

break;

case 1: // old

RegionBBSManager.getInstance().parsecmd(command, activeChar);

break;

case 2: // new

if (command.startsWith("_bbsclan"))

{

ClanBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbsmemo"))

{

TopicBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbstopics"))

{

TopicBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbsposts"))

{

PostBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbstop"))

{

TopBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbshome"))

{

TopBBSManager.getInstance().parsecmd(command, activeChar);

}

else if(command.startsWith("_bbsclass"))

{

ClassBBSManager.getInstance().parsecmd(command, activeChar);

break;

}

else if (command.startsWith("_bbs_buff"))

{

BuffBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbsteleport;"))

{

TeleportBBSManager.getInstance().parsecmd(command, activeChar);

}

else if (command.startsWith("_bbsmultisell;"))

{

if(activeChar.isDead() || activeChar.isAlikeDead() || TvTEvent.isStarted() || activeChar.isInSiege() || activeChar.isCastingNow() || activeChar.isInCombat() || activeChar.isAttackingNow() || activeChar.isInOlympiadMode() || activeChar.isInJail() || activeChar.isFlying() || activeChar.getKarma() > 0 || activeChar.isInDuel()){

activeChar.sendMessage("В данных условиях использовать Шоп запрещено");

return;

}

StringTokenizer st = new StringTokenizer(command, ";");

st.nextToken();

TopBBSManager.getInstance().parsecmd("_bbstop;" + st.nextToken(), activeChar);

int multisell = Integer.parseInt(st.nextToken());

MultiSell.getInstance().separateAndSend(multisell, activeChar, null, false);

}

else if (command.startsWith("_bbsloc"))

{

RegionBBSManager.getInstance().parsecmd(command, activeChar);

}

else

{

ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + command

+ " is not implemented yet</center><br><br></body></html>", "101");

activeChar.sendPacket(sb);

activeChar.sendPacket(new ShowBoard(null, "102"));

activeChar.sendPacket(new ShowBoard(null, "103"));

}

break;

}

}

 

/**

* @param client

* @param url

* @param arg1

* @param arg2

* @param arg3

* @param arg4

* @param arg5

*/

public void handleWriteCommands(L2GameClient client, String url, String arg1, String arg2, String arg3, String arg4, String arg5)

{

L2PcInstance activeChar = client.getActiveChar();

if (activeChar == null)

return;

 

switch (Config.COMMUNITY_TYPE)

{

case 2:

if (url.equals("Topic"))

{

TopicBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

}

else if (url.equals("Post"))

{

PostBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

}

else if (url.equals("Region"))

{

RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

}

else if (url.equals("Notice"))

{

ClanBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

}

else

{

ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + url

+ " is not implemented yet</center><br><br></body></html>", "101");

activeChar.sendPacket(sb);

activeChar.sendPacket(new ShowBoard(null, "102"));

activeChar.sendPacket(new ShowBoard(null, "103"));

}

break;

case 1:

RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);

break;

default:

case 0:

ShowBoard sb = new ShowBoard("<html><body><br><br><center>The Community board is currently disabled</center><br><br></body></html>", "101");

activeChar.sendPacket(sb);

activeChar.sendPacket(new ShowBoard(null, "102"));

activeChar.sendPacket(new ShowBoard(null, "103"));

break;

}

}

 

@SuppressWarnings("synthetic-access")

private static class SingletonHolder

{

protected static final CommunityBoard _instance = new CommunityBoard();

}

}

Убрать проверку в фаиле CommunityBoard.java или в MultiSellChoose.java??

Попробуйте ее там найти, только не спешите, покажите мне его здесь исходник..

Ах да, и скажите хроники, и ревизию сборки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сборка L2jServer High Five

L2J_DataPack_BETA -Revision 8271

L2J_Server_BETA-Revision 4835

Файл MultiSellChoose вот

Скрытый текст
package com.l2jserver.gameserver.network.clientpackets;

 

import java.util.ArrayList;

import java.util.logging.Logger;

 

import javolution.util.FastList;

 

import com.l2jserver.Config;

import com.l2jserver.gameserver.datatables.MultiSell;

import com.l2jserver.gameserver.model.Elementals;

import com.l2jserver.gameserver.model.L2Augmentation;

import com.l2jserver.gameserver.model.L2ItemInstance;

import com.l2jserver.gameserver.model.actor.L2Npc;

import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

import com.l2jserver.gameserver.model.itemcontainer.PcInventory;

import com.l2jserver.gameserver.model.multisell.Entry;

import com.l2jserver.gameserver.model.multisell.Ingredient;

import com.l2jserver.gameserver.model.multisell.PreparedListContainer;

import com.l2jserver.gameserver.network.SystemMessageId;

import com.l2jserver.gameserver.network.serverpackets.ItemList;

import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;

import com.l2jserver.gameserver.network.serverpackets.SystemMessage;

 

/**

* The Class MultiSellChoose.

*/

public class MultiSellChoose extends L2GameClientPacket

{

private static final String _C__B0_MULTISELLCHOOSE = "[C] B0 MultiSellChoose";

private static Logger _log = Logger.getLogger(MultiSellChoose.class.getName());

private int _listId;

private int _entryId;

private long _amount;

/*@SuppressWarnings("unused")

private int _unk1;

@SuppressWarnings("unused")

private int _unk2;

@SuppressWarnings("unused")

private int _unk3;

@SuppressWarnings("unused")

private int _unk7;

@SuppressWarnings("unused")

private int _unk4;

@SuppressWarnings("unused")

private int _unk5;

@SuppressWarnings("unused")

private int _unk6;

@SuppressWarnings("unused")

private int _unk8;

@SuppressWarnings("unused")

private int _unk9;

@SuppressWarnings("unused")

private int _unk10;

@SuppressWarnings("unused")

private int _unk11;*/

 

@Override

protected void readImpl()

{

_listId = readD();

_entryId = readD();

_amount = readQ();

/*_unk1 = readH();

_unk2 = readD();

_unk3 = readD();

_unk4 = readH(); // elemental attributes

_unk5 = readH(); // elemental attributes

_unk6 = readH(); // elemental attributes

_unk7 = readH(); // elemental attributes

_unk8 = readH(); // elemental attributes

_unk9 = readH(); // elemental attributes

_unk10 = readH(); // elemental attributes

_unk11 = readH(); // elemental attributes*/

}

 

@Override

public void runImpl()

{

final L2PcInstance player = getClient().getActiveChar();

if (player == null)

return;

 

if (!getClient().getFloodProtectors().getMultiSell().tryPerformAction("multisell choose"))

{

player.setMultiSell(null);

return;

}

 

if (_amount < 1 || _amount > 5000)

{

player.setMultiSell(null);

return;

}

 

PreparedListContainer list = player.getMultiSell();

if (list == null || list.getListId() != _listId)

{

player.setMultiSell(null);

return;

}

 

L2Npc target = player.getLastFolkNPC();

if (!player.isGM() && (target == null

|| !list.checkNpcObjectId(target.getObjectId())

|| !target.canInteract(player)))

{

player.setMultiSell(null);

return;

}

 

for (Entry entry : list.getEntries())

{

if (entry.getEntryId() == _entryId)

{

if (!entry.isStackable() && _amount > 1)

{

_log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell, id:" + _listId + ":" + _entryId);

player.setMultiSell(null);

return;

}

 

final PcInventory inv = player.getInventory();

 

int slots = 0;

int weight = 0;

for (Ingredient e : entry.getProducts())

{

if (e.getItemId() < 0) // special

continue;

 

if (!e.isStackable())

slots += e.getItemCount() * _amount;

else if (player.getInventory().getItemByItemId(e.getItemId()) == null)

slots++;

weight += e.getItemCount() * _amount * e.getWeight();

}

 

if (!inv.validateWeight(weight))

{

player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.WEIGHT_LIMIT_EX

CEEDED));

return;

}

 

if (!inv.validateCapacity(slots))

{

player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SLOTS_FULL));

return;

}

 

ArrayList<Ingredient> ingredientsList = new ArrayList<Ingredient>(entry.getIngredients().size());

// Generate a list of distinct ingredients and counts in order to check if the correct item-counts

// are possessed by the player

boolean newIng;

for (Ingredient e : entry.getIngredients())

{

newIng = true;

// at this point, the template has already been modified so that enchantments are properly included

// whenever they need to be applied. Uniqueness of items is thus judged by item id AND enchantment level

for (int i = ingredientsList.size(); --i >= 0;)

{

Ingredient ex = ingredientsList.get(i);

// if the item was already added in the list, merely increment the count

// this happens if 1 list entry has the same ingredient twice (example 2 swords = 1 dual)

if ((ex.getItemId() == e.getItemId()) && (ex.getEnchantLevel() == e.getEnchantLevel()))

{

if (ex.getItemCount() + e.getItemCount() > Integer.MAX_VALUE)

{

player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EXCEED

ED_QUANTITY_THAT_CAN_BE_INPUTTED));

return;

}

// two same ingredients, merge into one and replace old

final Ingredient ing = ex.clone();

ing.setItemCount(ex.getItemCount() + e.getItemCount());

ingredientsList.set(i, ing);

newIng = false;

break;

}

}

if (newIng)

{

// if it's a new ingredient, just store its info directly (item id, count, enchantment)

ingredientsList.add(e);

}

}

 

// now check if the player has sufficient items in the inventory to cover the ingredients' expences

for (Ingredient e : ingredientsList)

{

if (e.getItemCount() * _amount > Integer.MAX_VALUE)

{

player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EXCEED

ED_QUANTITY_THAT_CAN_BE_INPUTTED));

return;

}

if (e.getItemId() < 0)

{

if (!MultiSell.checkSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player))

return;

}

else

{

// if this is not a list that maintains enchantment, check the count of all items that have the given id.

// otherwise, check only the count of items with exactly the needed enchantment level

final long required = ((Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount());

if (inv.getInventoryItemCount(e.getItemId(), list.getMaintainEnchantment() ? e.getEnchantLevel() : -1, false) < required)

{

SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S2_UNIT_OF_THE_ITEM_S1_REQUIRED);

sm.addItemName(e.getTemplate());

sm.addNumber((int)required);

player.sendPacket(sm);

return;

}

}

}

 

FastList<L2Augmentation> augmentation = FastList.newInstance();

Elementals[] elemental = null;

/** All ok, remove items and add final product */

 

try

{

for (Ingredient e : entry.getIngredients())

{

if (e.getItemId() < 0)

{

if (!MultiSell.getSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player))

return;

}

else

{

L2ItemInstance itemToTake = inv.getItemByItemId(e.getItemId()); // initialize and initial guess for the item to take.

if (itemToTake == null)

{ //this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory!

_log.severe("Character: " + player.getName() + " is trying to cheat in multisell, id:" + _listId + ":" + _entryId);

player.setMultiSell(null);

return;

}

 

/*if (itemToTake.isEquipped())

{ //this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory!

_log.severe("Character: " + player.getName() + " is trying to cheat in multisell, exchanging equipped item, merchatnt id:" + merchant.getNpcId());

player.setMultiSell(null);

return;

}*/

 

if (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient())

{

// if it's a stackable item, just reduce the amount from the first (only) instance that is found in the inventory

if (itemToTake.isStackable())

{

if (!player.destroyItem("Multisell", itemToTake.getObjectId(), (e.getItemCount() * _amount), player.getTarget(), true))

{

player.setMultiSell(null);

return;

}

}

else

{

// for non-stackable items, one of two scenaria are possible:

// a) list maintains enchantment: get the instances that exactly match the requested enchantment level

// :) list does not maintain enchantment: get the instances with the LOWEST enchantment level

 

// a) if enchantment is maintained, then get a list of items that exactly match this enchantment

if (list.getMaintainEnchantment())

{

// loop through this list and remove (one by one) each item until the required amount is taken.

L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), e.getEnchantLevel(), false);

for (int i = 0; i < (e.getItemCount() * _amount); i++)

{

if (inventoryContents.isAugmented())

augmentation.add(inventoryContents.getAugmentation());

if(inventoryContents.getElementals() != null)

elemental = inventoryContents.getElementals();

if (!player.destroyItem("Multisell", inventoryContents.getObjectId(), 1, player.getTarget(), true))

{

player.setMultiSell(null);

return;

}

}

}

else

// :db: enchantment is not maintained. Get the instances with the LOWEST enchantment level

{

/* NOTE: There are 2 ways to achieve the above goal.

* 1) Get all items that have the correct itemId, loop through them until the lowest enchantment

* level is found. Repeat all this for the next item until proper count of items is reached.

* 2) Get all items that have the correct itemId, sort them once based on enchantment level,

* and get the range of items that is necessary.

* Method 1 is faster for a small number of items to be exchanged.

* Method 2 is faster for large amounts.

*

* EXPLANATION:

* Worst case scenario for algorithm 1 will make it run in a number of cycles given by:

* m*(2n-m+1)/2 where m is the number of items to be exchanged and n is the total

* number of inventory items that have a matching id.

* With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle

* for case b (just grab the m first items) or in linear time for case a (find the beginning of items

* with correct enchantment, index x, and take all items from x to x+m).

* Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 >

* (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) + log(n/n*n) =

* nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n)

* So for m < log(n) then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n)

*

* IDEALLY:

* In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n

* if ( (2<<(e.getItemCount() * _amount)) < inventoryContents.length )

* // do Algorithm 1, no sorting

* else

* // do Algorithm 2, sorting

*

* CURRENT IMPLEMENTATION:

* In general, it is going to be very rare for a person to do a massive exchange of non-stackable items

* For this reason, we assume that algorithm 1 will always suffice and we keep things simple.

* If, in the future, it becomes necessary that we optimize, the above discussion should make it clear

* what optimization exactly is necessary (based on the comments under "IDEALLY").

*/

 

// choice 1. Small number of items exchanged. No sorting.

for (int i = 1; i <= (e.getItemCount() * _amount); i++)

{

L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), false);

 

itemToTake = inventoryContents[0];

// get item with the LOWEST enchantment level from the inventory...

// +0 is lowest by default...

if (itemToTake.getEnchantLevel() > 0)

{

for (L2ItemInstance item : inventoryContents)

{

if (item.getEnchantLevel() < itemToTake.getEnchantLevel())

{

itemToTake = item;

// nothing will have enchantment less than 0. If a zero-enchanted

// item is found, just take it

if (itemToTake.getEnchantLevel() == 0)

break;

}

}

}

if (!player.destroyItem("Multisell", itemToTake.getObjectId(), 1, player.getTarget(), true))

{

player.setMultiSell(null);

return;

}

}

}

}

}

}

}

 

// Generate the appropriate items

for (Ingredient e : entry.getProducts())

{

if (e.getItemId() < 0)

{

MultiSell.addSpecialProduct(e.getItemId(), e.getItemCount() * _amount, player);

}

else

{

if (e.isStackable())

inv.addItem("Multisell", e.getItemId(), e.getItemCount() * _amount, player, player.getTarget());

else

{

L2ItemInstance product = null;

for (int i = 0; i < (e.getItemCount() * _amount); i++)

{

product = inv.addItem("Multisell", e.getItemId(), 1, player, player.getTarget());

if (list.getMaintainEnchantment())

{

if (i < augmentation.size())

product.setAugmentation(new L2Augmentation(augmentation.get(i).getAugmentationId(), augmentation.get(i).getSkill()));

if (elemental != null)

for (Elementals elm : elemental)

product.setElementAttr(elm.getElement(), elm.getValue());

product.setEnchantLevel(e.getEnchantLevel());

product.updateDatabase();

}

}

}

// msg part

SystemMessage sm;

 

if (e.getItemCount() * _amount > 1)

{

sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S);

sm.addItemName(e.getItemId());

sm.addItemNumber(e.getItemCount() * _amount);

player.sendPacket(sm);

sm = null;

}

else

{

if (list.getMaintainEnchantment() && e.getEnchantLevel() > 0)

{

sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2);

sm.addItemNumber(e.getEnchantLevel());

sm.addItemName(e.getItemId());

}

else

{

sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);

sm.addItemName(e.getItemId());

}

player.sendPacket(sm);

sm = null;

}

}

}

player.sendPacket(new ItemList(player, false));

 

StatusUpdate su = new StatusUpdate(player);

su.addAttribute(StatusUpdate.CUR_LOAD, player.getCurrentLoad());

player.sendPacket(su);

su = null;

}

finally

{

FastList.recycle(augmentation);

}

 

// finally, give the tax to the castle...

if (entry.getTaxAmount() > 0)

target.getCastle().addToTreasury(entry.getTaxAmount() * _amount);

 

break;

}

}

}

 

@Override

public String getType()

{

return _C__B0_MULTISELLCHOOSE;

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Сборка L2jServer High Five

L2J_DataPack_BETA -Revision 8271

L2J_Server_BETA-Revision 4835

Файл MultiSellChoose вот

Скрытый текст
package com.l2jserver.gameserver.network.clientpackets;

 

import java.util.ArrayList;

import java.util.logging.Logger;

 

import javolution.util.FastList;

 

import com.l2jserver.Config;

import com.l2jserver.gameserver.datatables.MultiSell;

import com.l2jserver.gameserver.model.Elementals;

import com.l2jserver.gameserver.model.L2Augmentation;

import com.l2jserver.gameserver.model.L2ItemInstance;

import com.l2jserver.gameserver.model.actor.L2Npc;

import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

import com.l2jserver.gameserver.model.itemcontainer.PcInventory;

import com.l2jserver.gameserver.model.multisell.Entry;

import com.l2jserver.gameserver.model.multisell.Ingredient;

import com.l2jserver.gameserver.model.multisell.PreparedListContainer;

import com.l2jserver.gameserver.network.SystemMessageId;

import com.l2jserver.gameserver.network.serverpackets.ItemList;

import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;

import com.l2jserver.gameserver.network.serverpackets.SystemMessage;

 

/**

* The Class MultiSellChoose.

*/

public class MultiSellChoose extends L2GameClientPacket

{

private static final String _C__B0_MULTISELLCHOOSE = "[C] B0 MultiSellChoose";

private static Logger _log = Logger.getLogger(MultiSellChoose.class.getName());

private int _listId;

private int _entryId;

private long _amount;

/*@SuppressWarnings("unused")

private int _unk1;

@SuppressWarnings("unused")

private int _unk2;

@SuppressWarnings("unused")

private int _unk3;

@SuppressWarnings("unused")

private int _unk7;

@SuppressWarnings("unused")

private int _unk4;

@SuppressWarnings("unused")

private int _unk5;

@SuppressWarnings("unused")

private int _unk6;

@SuppressWarnings("unused")

private int _unk8;

@SuppressWarnings("unused")

private int _unk9;

@SuppressWarnings("unused")

private int _unk10;

@SuppressWarnings("unused")

private int _unk11;*/

 

@Override

protected void readImpl()

{

_listId = readD();

_entryId = readD();

_amount = readQ();

/*_unk1 = readH();

_unk2 = readD();

_unk3 = readD();

_unk4 = readH(); // elemental attributes

_unk5 = readH(); // elemental attributes

_unk6 = readH(); // elemental attributes

_unk7 = readH(); // elemental attributes

_unk8 = readH(); // elemental attributes

_unk9 = readH(); // elemental attributes

_unk10 = readH(); // elemental attributes

_unk11 = readH(); // elemental attributes*/

}

 

@Override

public void runImpl()

{

final L2PcInstance player = getClient().getActiveChar();

if (player == null)

return;

 

if (!getClient().getFloodProtectors().getMultiSell().tryPerformAction("multisell choose"))

{

player.setMultiSell(null);

return;

}

 

if (_amount < 1 || _amount > 5000)

{

player.setMultiSell(null);

return;

}

 

PreparedListContainer list = player.getMultiSell();

if (list == null || list.getListId() != _listId)

{

player.setMultiSell(null);

return;

}

 

L2Npc target = player.getLastFolkNPC();

if (!player.isGM() && ( Вот эту часть удалите, и попробуйте, должно все работать, но не факт.target == null

|| !list.checkNpcObjectId(target.getObjectId())

|| !target.canInteract(player)))

{

player.setMultiSell(null);

return;

}

 

for (Entry entry : list.getEntries())

{

if (entry.getEntryId() == _entryId)

{

if (!entry.isStackable() && _amount > 1)

{

_log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell, id:" + _listId + ":" + _entryId);

player.setMultiSell(null);

return;

}

 

final PcInventory inv = player.getInventory();

 

int slots = 0;

int weight = 0;

for (Ingredient e : entry.getProducts())

{

if (e.getItemId() < 0) // special

continue;

 

if (!e.isStackable())

slots += e.getItemCount() * _amount;

else if (player.getInventory().getItemByItemId(e.getItemId()) == null)

slots++;

weight += e.getItemCount() * _amount * e.getWeight();

}

 

if (!inv.validateWeight(weight))

{

player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.WEIGHT_LIMIT_EX

CEEDED));

return;

}

 

if (!inv.validateCapacity(slots))

{

player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SLOTS_FULL));

return;

}

 

ArrayList<Ingredient> ingredientsList = new ArrayList<Ingredient>(entry.getIngredients().size());

// Generate a list of distinct ingredients and counts in order to check if the correct item-counts

// are possessed by the player

boolean newIng;

for (Ingredient e : entry.getIngredients())

{

newIng = true;

// at this point, the template has already been modified so that enchantments are properly included

// whenever they need to be applied. Uniqueness of items is thus judged by item id AND enchantment level

for (int i = ingredientsList.size(); --i >= 0;)

{

Ingredient ex = ingredientsList.get(i);

// if the item was already added in the list, merely increment the count

// this happens if 1 list entry has the same ingredient twice (example 2 swords = 1 dual)

if ((ex.getItemId() == e.getItemId()) && (ex.getEnchantLevel() == e.getEnchantLevel()))

{

if (ex.getItemCount() + e.getItemCount() > Integer.MAX_VALUE)

{

player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EXCEED

ED_QUANTITY_THAT_CAN_BE_INPUTTED));

return;

}

// two same ingredients, merge into one and replace old

final Ingredient ing = ex.clone();

ing.setItemCount(ex.getItemCount() + e.getItemCount());

ingredientsList.set(i, ing);

newIng = false;

break;

}

}

if (newIng)

{

// if it's a new ingredient, just store its info directly (item id, count, enchantment)

ingredientsList.add(e);

}

}

 

// now check if the player has sufficient items in the inventory to cover the ingredients' expences

for (Ingredient e : ingredientsList)

{

if (e.getItemCount() * _amount > Integer.MAX_VALUE)

{

player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EXCEED

ED_QUANTITY_THAT_CAN_BE_INPUTTED));

return;

}

if (e.getItemId() < 0)

{

if (!MultiSell.checkSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player))

return;

}

else

{

// if this is not a list that maintains enchantment, check the count of all items that have the given id.

// otherwise, check only the count of items with exactly the needed enchantment level

final long required = ((Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount());

if (inv.getInventoryItemCount(e.getItemId(), list.getMaintainEnchantment() ? e.getEnchantLevel() : -1, false) < required)

{

SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S2_UNIT_OF_THE_ITEM_S1_REQUIRED);

sm.addItemName(e.getTemplate());

sm.addNumber((int)required);

player.sendPacket(sm);

return;

}

}

}

 

FastList<L2Augmentation> augmentation = FastList.newInstance();

Elementals[] elemental = null;

/** All ok, remove items and add final product */

 

try

{

for (Ingredient e : entry.getIngredients())

{

if (e.getItemId() < 0)

{

if (!MultiSell.getSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player))

return;

}

else

{

L2ItemInstance itemToTake = inv.getItemByItemId(e.getItemId()); // initialize and initial guess for the item to take.

if (itemToTake == null)

{ //this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory!

_log.severe("Character: " + player.getName() + " is trying to cheat in multisell, id:" + _listId + ":" + _entryId);

player.setMultiSell(null);

return;

}

 

/*if (itemToTake.isEquipped())

{ //this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory!

_log.severe("Character: " + player.getName() + " is trying to cheat in multisell, exchanging equipped item, merchatnt id:" + merchant.getNpcId());

player.setMultiSell(null);

return;

}*/

 

if (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient())

{

// if it's a stackable item, just reduce the amount from the first (only) instance that is found in the inventory

if (itemToTake.isStackable())

{

if (!player.destroyItem("Multisell", itemToTake.getObjectId(), (e.getItemCount() * _amount), player.getTarget(), true))

{

player.setMultiSell(null);

return;

}

}

else

{

// for non-stackable items, one of two scenaria are possible:

// a) list maintains enchantment: get the instances that exactly match the requested enchantment level

// :) list does not maintain enchantment: get the instances with the LOWEST enchantment level

 

// a) if enchantment is maintained, then get a list of items that exactly match this enchantment

if (list.getMaintainEnchantment())

{

// loop through this list and remove (one by one) each item until the required amount is taken.

L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), e.getEnchantLevel(), false);

for (int i = 0; i < (e.getItemCount() * _amount); i++)

{

if (inventoryContents.isAugmented())

augmentation.add(inventoryContents.getAugmentation());

if(inventoryContents.getElementals() != null)

elemental = inventoryContents.getElementals();

if (!player.destroyItem("Multisell", inventoryContents.getObjectId(), 1, player.getTarget(), true))

{

player.setMultiSell(null);

return;

}

}

}

else

// :db: enchantment is not maintained. Get the instances with the LOWEST enchantment level

{

/* NOTE: There are 2 ways to achieve the above goal.

* 1) Get all items that have the correct itemId, loop through them until the lowest enchantment

* level is found. Repeat all this for the next item until proper count of items is reached.

* 2) Get all items that have the correct itemId, sort them once based on enchantment level,

* and get the range of items that is necessary.

* Method 1 is faster for a small number of items to be exchanged.

* Method 2 is faster for large amounts.

*

* EXPLANATION:

* Worst case scenario for algorithm 1 will make it run in a number of cycles given by:

* m*(2n-m+1)/2 where m is the number of items to be exchanged and n is the total

* number of inventory items that have a matching id.

* With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle

* for case b (just grab the m first items) or in linear time for case a (find the beginning of items

* with correct enchantment, index x, and take all items from x to x+m).

* Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 >

* (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) + log(n/n*n) =

* nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n)

* So for m < log(n) then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n)

*

* IDEALLY:

* In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n

* if ( (2<<(e.getItemCount() * _amount)) < inventoryContents.length )

* // do Algorithm 1, no sorting

* else

* // do Algorithm 2, sorting

*

* CURRENT IMPLEMENTATION:

* In general, it is going to be very rare for a person to do a massive exchange of non-stackable items

* For this reason, we assume that algorithm 1 will always suffice and we keep things simple.

* If, in the future, it becomes necessary that we optimize, the above discussion should make it clear

* what optimization exactly is necessary (based on the comments under "IDEALLY").

*/

 

// choice 1. Small number of items exchanged. No sorting.

for (int i = 1; i <= (e.getItemCount() * _amount); i++)

{

L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), false);

 

itemToTake = inventoryContents[0];

// get item with the LOWEST enchantment level from the inventory...

// +0 is lowest by default...

if (itemToTake.getEnchantLevel() > 0)

{

for (L2ItemInstance item : inventoryContents)

{

if (item.getEnchantLevel() < itemToTake.getEnchantLevel())

{

itemToTake = item;

// nothing will have enchantment less than 0. If a zero-enchanted

// item is found, just take it

if (itemToTake.getEnchantLevel() == 0)

break;

}

}

}

if (!player.destroyItem("Multisell", itemToTake.getObjectId(), 1, player.getTarget(), true))

{

player.setMultiSell(null);

return;

}

}

}

}

}

}

}

 

// Generate the appropriate items

for (Ingredient e : entry.getProducts())

{

if (e.getItemId() < 0)

{

MultiSell.addSpecialProduct(e.getItemId(), e.getItemCount() * _amount, player);

}

else

{

if (e.isStackable())

inv.addItem("Multisell", e.getItemId(), e.getItemCount() * _amount, player, player.getTarget());

else

{

L2ItemInstance product = null;

for (int i = 0; i < (e.getItemCount() * _amount); i++)

{

product = inv.addItem("Multisell", e.getItemId(), 1, player, player.getTarget());

if (list.getMaintainEnchantment())

{

if (i < augmentation.size())

product.setAugmentation(new L2Augmentation(augmentation.get(i).getAugmentationId(), augmentation.get(i).getSkill()));

if (elemental != null)

for (Elementals elm : elemental)

product.setElementAttr(elm.getElement(), elm.getValue());

product.setEnchantLevel(e.getEnchantLevel());

product.updateDatabase();

}

}

}

// msg part

SystemMessage sm;

 

if (e.getItemCount() * _amount > 1)

{

sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S);

sm.addItemName(e.getItemId());

sm.addItemNumber(e.getItemCount() * _amount);

player.sendPacket(sm);

sm = null;

}

else

{

if (list.getMaintainEnchantment() && e.getEnchantLevel() > 0)

{

sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2);

sm.addItemNumber(e.getEnchantLevel());

sm.addItemName(e.getItemId());

}

else

{

sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);

sm.addItemName(e.getItemId());

}

player.sendPacket(sm);

sm = null;

}

}

}

player.sendPacket(new ItemList(player, false));

 

StatusUpdate su = new StatusUpdate(player);

su.addAttribute(StatusUpdate.CUR_LOAD, player.getCurrentLoad());

player.sendPacket(su);

su = null;

}

finally

{

FastList.recycle(augmentation);

}

 

// finally, give the tax to the castle...

if (entry.getTaxAmount() > 0)

target.getCastle().addToTreasury(entry.getTaxAmount() * _amount);

 

break;

}

}

}

 

@Override

public String getType()

{

return _C__B0_MULTISELLCHOOSE;

}

}

В коде красным выделено что нужно удалить, и не забудьте ядро перекомпилировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не помогло (

Удалил то что ты отметил красным.

Захожу в игру нажимаю купить ,не че не происходит вообще.

(скомпилить исходники не забыл!)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
не помогло (

Удалил то что ты отметил красным.

Захожу в игру нажимаю купить ,не че не происходит вообще.

(скомпилить исходники не забыл!)

Тогда скорее всего, что где то стоит проверка выведеная на конфиг, и она включена, ищите в конфигах, больше ее не где не может, быть, я как слепой с вами общаюсь, не рук не чего вообще, вообщем поищите конфиг, и если не получится что либо решить с данной проблемой, напишите мне завтро в ЛС после обеда, и я через TW уберу эту проверку, а то так можно годать сколько угодно пожалуй, спокойной, и удачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто может помочь с Community гм-шопом через TW ?

не могу разобратся, как сделать чтобы обычным игроком можно было покупать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

<strong class='bbc'>Автоматическое сообщение</strong><br /><br /><br />Эта тема была перемещена из "Форум для новичков" в "Решенные проблемы".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...