Перейти к содержанию

Mr.Smith

Постоялец
  • Публикаций

    250
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1
  • Отзывы

    0%

Сообщения, опубликованные Mr.Smith


  1. Интересно почему людям так нравится ИТ?там двиг игры старый и графика не та уже...все дополнения для них сплошное уродство,а вы еще пытаетесь переделать что-то...

    Согласен с вами на все 100%, делать на ИТ уже не чего, все интерестное должно быть выше ИТ, я бы не прочь запилить хороший Хелбоунд, которого в интернете единицы, но увы что бы его раскрутить нужно много вкладивать $, а что косательно ИТ так лучше уже Фрею зделать или ХФ с дополнениями, было бы очень интерестно, я сам 3 года ИТ занимался, но я понял что уже с него спросу вообще нету, по этому решил делать ХФ, честно первые впечатления очень хорошие, нет проблем с кнопками в плане размеров, это меня всегда убивало на ИТ, то что невозможно зделать резиновую кнопку как на Kamael, по этому мой вам совет берите то что актуально, даже все знаменитые сервера перешли на ХФ, по этому не гонитесь за старинкой, которая уже просто как динозавры вымирает, а вы её пытаетесь напихать тем что ей уже не по душе, так же не думайте что мой выбор ХФ только из-за конопок просто это 1 из + тех хроник которые выше ИТ, если хорошо подойти к вопросу в плане классического сервера на данных хрониках то так же зделать не проблема как и на ИТ главное отнестись к этому с душой что бы и вам и игрокам было приятно играть на вашем сервере не важно какие хроники это не были бы.


  2. Он рабочий? это ты писал или просто тупо импорты поменял?

    Просто тупо поправил, а рабочий он или нет это вам тестить, могу поправить если он не будет работать на каком то этапе.

    У меня нету времени на то что бы его тестировать, я много кривых квестов подгонял под свою сборку, а именно дотовскую, только не ту что ZooTee пилил ибо я иму оттдал свою сборь, что бы он пелил её, т.к. у меня нету времени этим заниматся, скажите мне на каком этапе он глохнит я в свободное время вам допилю его, правдо только под L2Dot, под что то другое не буду делать.


  3. Cтавлю нпц на сборку l2dot . ебу мозга больше часа.

    Вот java

    Скрытый текст
    package custom.AugmentShop;

     

    import l2dot.gameserver.model.actor.instance.L2NpcInstance;

    import l2dot.gameserver.model.actor.instance.L2PcInstance;

    import l2dot.gameserver.model.quest.Quest;

    import l2dot.gameserver.model.quest.QuestState;

    import l2dot.gameserver.model.Inventory;

    import java.sql.Connection;

    import java.sql.PreparedStatement;

    import l2dot.L2DatabaseFactory;

    import java.util.logging.Level;

    import l2dot.gameserver.model.L2ItemInstance;

     

    /**

    *

    * @author adapted by Samar 2011 RUSSIA

    *

    */

    public class AugmentShop extends Quest

    {

    private final static int ITEM_ID = 57;

    private final static int ITEM_COUNT = 1000000;

    private final static String qn = "AugmentShop";

    private final static int NPC = 91000;

     

    public AugmentShop(int questId, String name, String descr)

    {

    super(questId, name, descr);

    addFirstTalkId(NPC);

    addStartNpc(NPC);

    addTalkId(NPC);

    }

     

    @Override

    public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player)

    {

    String htmltext = "";

     

    if (event.equalsIgnoreCase("active"))

    {

    htmltext = "active.htm";

    }

     

    else if (event.equalsIgnoreCase("passive"))

    {

    htmltext = "passive.htm";

    }

     

    else if (event.equalsIgnoreCase("chance"))

    {

    htmltext = "chance.htm";

    }

     

    else

    {

     

    updateAugment(player, Integer.parseInt(event.substring(0,5)), Integer.parseInt(event.substring(6,10)), Integer.parseInt(event.substring(11,13)));

    }

     

     

    return htmltext;

    }

     

    @Override

    public String onFirstTalk(L2NpcInstance npc, L2PcInstance player)

    {

    String htmltext = "";

    QuestState qs = player.getQuestState(qn);

    if (qs == null)

    qs = newQuestState(player);

    htmltext = "main.htm";

    return htmltext;

    }

     

    public static void main(String[] args)

    {

    new AugmentShop(-1, qn, "AugmentShop");

    }

     

     

    private static void updateAugment(L2PcInstance player, int attributes, int skill, int level)

    {

    L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);

    if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) == null)

     

    {

    player.sendMessage("You have to equip a weapon.");

    return;

    }

     

    if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND).isAugmented()

    )

    {

    player.sendMessage("The weapon is already augmented.");

    return;

    }

     

    if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) < ITEM_COUNT)

    {

    player.sendMessage("You dont have enough item.");

    return;

    }

     

    Connection con = null;

    try

    {

    player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true);

    con = L2DatabaseFactory.getInstance().getConnection();

    PreparedStatement statement = con.prepareStatement("REPLACE INTO augmentations VALUES(?,?,?,?)");

    statement.setInt(1, item.getObjectId());

     

    statement.setInt(2, attributes*65536+1);

    statement.setInt(3, skill);

    statement.setInt(4, level);

     

    statement.executeUpdate();

    player.sendMessage("Succesfully augmented. You have to relog now.");

    statement.close();

     

    }

    catch (Exception e)

    {

    _log.log(Level.SEVERE, "Could not augment item: "+item.getObjectId()+" ", e);

    }

    finally

    {

    try

    {

     

    /*L2DatabaseFactory.close(con);*/

    con.close();

    }

    catch (Exception e)

    {

    }

    }

    }

     

     

    }

     

    Вот ошибка

    Скрытый текст
    ----------

    1. ERROR in \AugmentShop.java (at line 10)

    import l2dot.L2DatabaseFactory;

    ^^^^^^^^^^^^^^^^^^^^^^^

    The import l2dot.L2DatabaseFactory cannot be resolved

    ----------

    2. ERROR in \AugmentShop.java (at line 107)

    con = L2DatabaseFactory.getInstance().getConnection();

    ^^^^^^^^^^^^^^^^^

    L2DatabaseFactory cannot be resolved

    ----------

    2 problems (2 errors)The import l2dot.L2DatabaseFactory cannot be resolved

    L2DatabaseFactory cannot be resolved

    Failed executing script: C:\New server\data\scripts\custom\AugmentShop\AugmentSh

    op.java. See AugmentShop.java.error.log for details.

    Помогите люди добрые.

    Дерзай:

     

    Скрытый текст

    package custom.AugmentShop;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.util.logging.Level;
    import l2dot.gameserver.database.L2DatabaseFactory;
    import l2dot.gameserver.model.Inventory;
    import l2dot.gameserver.model.L2ItemInstance;
    import l2dot.gameserver.model.actor.instance.L2NpcInstance;
    import l2dot.gameserver.model.actor.instance.L2PcInstance;
    import l2dot.gameserver.model.quest.Quest;
    import l2dot.gameserver.model.quest.QuestState;
    
    /**
    *
    * @author adapted by Samar 2011 RUSSIA
    * @author интеграция с L2Dot by <Mr.Smith>
    *
    */
    public class AugmentShop extends Quest {
    
    private final static String qn = "AugmentShop";
    
    private final static int ITEM_ID = 57;
    private final static int ITEM_COUNT = 1000000;
    private final static int NPC = 91000;
    
    public AugmentShop(int questId, String name, String descr) {
    	super(questId, name, descr);
    	addFirstTalkId(NPC);
    	addStartNpc(NPC);
    	addTalkId(NPC);
    }
    
    @Override
    public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player) {
    	String htmltext = "";
    
    	if (event.equalsIgnoreCase("active")) {
    		htmltext = "active.htm";
    	} else if (event.equalsIgnoreCase("passive")) {
    		htmltext = "passive.htm";
    	} else if (event.equalsIgnoreCase("chance")) {
    		htmltext = "chance.htm";
    	} else {
    
    		updateAugment(player, Integer.parseInt(event.substring(0, 5)), Integer.parseInt(event.substring(6, 10)), Integer.parseInt(event.substring(11, 13)));
    	}
    
    
    	return htmltext;
    }
    
    @Override
    public String onFirstTalk(L2NpcInstance npc, L2PcInstance player) {
    	String htmltext = "";
    	QuestState qs = player.getQuestState(qn);
    	if (qs == null) {
    		qs = newQuestState(player);
    	}
    	htmltext = "main.htm";
    	return htmltext;
    }
    
    private static void updateAugment(L2PcInstance player, int attributes, int skill, int level) {
    	L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
    	if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) == null) {
    		player.sendMessage("You have to equip a weapon.");
    		return;
    	}
    
    	if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND).isAugmented()) {
    		player.sendMessage("The weapon is already augmented.");
    		return;
    	}
    
    	if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) < ITEM_COUNT) {
    		player.sendMessage("You dont have enough item.");
    		return;
    	}
    
    	Connection con = null;
    	try {
    		player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true);
    		con = L2DatabaseFactory.getInstance().getConnection();
    		PreparedStatement statement = con.prepareStatement("REPLACE INTO augmentations VALUES(?,?,?,?)");
    		statement.setInt(1, item.getObjectId());
    
    		statement.setInt(2, attributes * 65536 + 1);
    		statement.setInt(3, skill);
    		statement.setInt(4, level);
    
    		statement.executeUpdate();
    		player.sendMessage("Succesfully augmented. You have to relog now.");
    		statement.close();
    
    	} catch (Exception e) {
    		_log.log(Level.SEVERE, "Could not augment item: " + item.getObjectId() + " ", e);
    	} finally {
    		try {
    
    			/*
    			 * L2DatabaseFactory.close(con);
    			 */
    			con.close();
    		} catch (Exception e) {
    		}
    	}
    }
    
    public static void main(String[] args) {
    	new AugmentShop(-1, qn, "AugmentShop");
    }
    }


  4. Обычно оно в других конфигах,а в таких я токо ип и базу вписываю.

    По этому его туда и вписали потому что он редактируется всегда, глаза просто нужно открыть и посмотреть, а не сразу лезть и декомпилить, при декомпиляции 30% кода не хватает если файл очень большой, а без знаний java вы его не восстановите.

     

    P.S: Модераторы тему Closed.


  5. Помогите скомплитить файл без исходников. Вылетает всего 2 ошибки

    Скайп: vovacool3

    Аська если нада пишите тут свою.

    Хочу убрать копирайты при входе в игру сборка l2dot, мб в конфигах есть, но не нашел

    C:\Users\Vova>javac D:\EnterWorld.java

    D:\EnterWorld.java:390: not a statement

    e;

    ^

    D:\EnterWorld.java:402: not a statement

    exception;

    ^

    2 errors

    Боже ж ты мой, найди конфиг config/network/game_server.ini, открой и найди такую конфигурацию:

    # Показывать версию сборки, офф сайт, и форум команды.

    CommandInfoMessage = True

    И отключи ее.


  6. Доброго времени суток.

    Ребят, подскажите пожалуйста, как сделать так что б в статистеке top pk/pvp не показывало Админов и ГМов?

    Если это сайт, проверку на access_level выставить.

    Если это на сервере, проверку на isGm() выставить.


  7. нормально

    исходники лионны стоят 2к вмз атам еще пилитьи пилить

    Больше 500$ они не стоят.

     

    80к рублей потом торг

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


  8. не помогло (

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

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

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

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


  9. Сборка 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;

    }

    }

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


  10. Имсходники как раз есть но в 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??

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

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


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

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

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

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


  12. Бафер с профилями теперь при выключении и перезагрузке сервера профили сохраняются в базу *

     

    как зделать такое для сборки скории

    1. Добавить файл CharSchemesTable.java, только если у вас его нету.

    2. CharSchemesTable.java корректируйте, и будет вам добро.

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