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

AugmentShop

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

Всем привет. Не работает у всех AugmentShop за исключением 1 персонажа который был сделан первым и является админом. На нем все прекрасно работает вставляет любой скил в любую пушку, но остальным не ошибок не диалогов не показывает. Бывает что говорит "Выберите вещь, которую нужно улучшить." хотя чистая пуха одета.  Что тут не так?

package custom.AugmentShop;
 
import ru.catssoftware.L2DatabaseFactory;
import ru.catssoftware.gameserver.model.L2ItemInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.model.itemcontainer.Inventory;
import ru.catssoftware.gameserver.model.quest.Quest;
import ru.catssoftware.gameserver.model.quest.QuestState;
import java.sql.Connection;
import java.sql.PreparedStatement;
 

 
public class AugmentShop extends Quest
{
	
    private final static int ITEM_ID = 4037; /*id за продажу*/
    private final static int ITEM_COUNT = 15; /*Укажите цену*/
    private final static String qn = "AugmentShop";
    private final static int NPC = 53; /*Укжите npc id;*/
 
    public AugmentShop(int questId, String name, String descr)
    {
        super(questId, name, descr);
        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
        {
 
            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("Вы должны надеть оружие.");
            return;
        }
		
		if (item.isHeroItem())
		{
			player.sendMessage("Вы не можете вставить в геройское оружие Life Stone.");
			return;
		}
 
        if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND).isAugmented())
        {
            player.sendMessage("Для начала удалите Life Stone!");
            return;
        }
 
        if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) < ITEM_COUNT)
        {
            player.sendMessage("Грустно, но у вас нет Coin Of Luck. Или вам не хватает!");
            return;
        }
		
        Connection con = null;
        try
        {
            player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true);
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?,?,?)");
            statement.setInt(1, item.getObjectId());
 
            statement.setInt(2, attributes*65536+1);
            statement.setInt(3, skill);
            statement.setInt(4, level);
 
            statement.executeUpdate();
            player.sendMessage("Покупка прошла успешно. Вы должны перезайти теперь.");
            statement.close();
 
        }
        catch (Exception e)
        {
            _log.warn("Не могли дополнить пунктом: "+item.getObjectId()+" "+ e);
        }
        finally
        {
            try
            {
               
           /*L2DatabaseFactory.close(con);*/
                con.close();
            }
            catch (Exception e)
            {
            }
        }
    }
 
 
}

 

Изменено пользователем HolySaint

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


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

Сам скрипт логировали? Он вообще выполняется с теми персонажами, с которыми есть проблема?

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


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, zGosu сказал:

Сам скрипт логировали? Он вообще выполняется с теми персонажами, с которыми есть проблема?

Честно я не знаю как сделать что бы лог писался, но диалоги показывает все т.е выбор скила.

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


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

Эта функция у них выполняется? На каком моменте он останавливается?

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


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

Не могу сказать т.к не могу посмотреть. Как логирование включить?

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


Ссылка на сообщение
Поделиться на другие сайты
26 минут назад, HolySaint сказал:

Не могу сказать т.к не могу посмотреть. Как логирование включить?

LoggerFactory.getLogger(AugmentShop.class).info("ну это тип лог крч понял да?");

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


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, Falkland сказал:

LoggerFactory.getLogger(AugmentShop.class).info("ну это тип лог крч понял да?");

Прошу прощения за мою безграмотность, но куда это вставить?

 

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


Ссылка на сообщение
Поделиться на другие сайты
Только что, HolySaint сказал:

Прошу прощения за мою безграмотность, но куда это вставить?

 

Именно туда, откуда хочешь получить лог.

В твоем случае это просто строка, выполнение которой ты хочешь проверить. Так что можешь натыкать логи хоть по всему скрипту. Ну или хотя бы в начало метода 

updateAugment

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


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, Falkland сказал:

Именно туда, откуда хочешь получить лог.

В твоем случае это просто строка, выполнение которой ты хочешь проверить. Так что можешь натыкать логи хоть по всему скрипту. Ну или хотя бы в начало метода 


updateAugment

Аааааааааа ну почему нельзя сразу ткнуть носом как надо? Спарсил 10 страниц гугла так и не понял куда это воткнуть. При копи пасте ГС матерится ошибками! Просто помогите и покажите дальше я буду знать, и в следующий раз буду вопрос ставить корректнее т.к уже буду понимать что меня научили это делать!

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


Ссылка на сообщение
Поделиться на другие сайты
System.out.println("текст лога");

Если настолько всё плохо, то можешь выводить результат себе в чат:

player.sendMessage("Этап 1 пройден");

 

  • Like 1

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


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, zGosu сказал:

System.out.println("текст лога");

Если настолько всё плохо, то можешь выводить результат себе в чат:


player.sendMessage("Этап 1 пройден");

 

Так?

        else
        {
			System.out.println("текст лога");
            updateAugment(player, Integer.parseInt(event.substring(0,5)), Integer.parseInt(event.substring(6,10)), Integer.parseInt(event.substring(11,13)));
			System.out.println("текст лога");
		}

 

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


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, HolySaint сказал:

Так?


        else
        {
			System.out.println("текст лога");
            updateAugment(player, Integer.parseInt(event.substring(0,5)), Integer.parseInt(event.substring(6,10)), Integer.parseInt(event.substring(11,13)));
			System.out.println("текст лога");
		}

 

Нет. Внутри метода

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


Ссылка на сообщение
Поделиться на другие сайты
2 минуты назад, HolySaint сказал:

Так?


        else
        {
			System.out.println("текст лога");
            updateAugment(player, Integer.parseInt(event.substring(0,5)), Integer.parseInt(event.substring(6,10)), Integer.parseInt(event.substring(11,13)));
			System.out.println("текст лога");
		}

 

private static void updateAugment(L2PcInstance player, int attributes, int skill, int level)
    {
		System.out.println("начало updateAugment()");
        L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
        if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) == null)

 

Изменено пользователем Falkland
  • Upvote 1

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


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

Не пишет не чего и не где. Не в чат не в логи.

	private static void updateAugment(L2PcInstance player, int attributes, int skill, int level)
    {
        System.out.println("начало updateAugment()");
		player.sendMessage("Этап 1 пройден");

 

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


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, HolySaint сказал:

Не пишет не чего и не где. Не в чат не в логи.


	private static void updateAugment(L2PcInstance player, int attributes, int skill, int level)
    {
        System.out.println("начало updateAugment()");
		player.sendMessage("Этап 1 пройден");

 

Рестарт то сделал? И пробуй админом вставить лс сначала.

И желательно в каждый метод вставь сообщение.

Изменено пользователем Falkland

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


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

В обще понял как должно было быть, но вышло так что до updateAugment дело не доходит если пробовать с чистого твинка. А если все делать с админа с 1 чара на серве все как надо и этап 1 показывает в чат и ГС фиксирует все. Значит проблема еще где то начала всего этого.

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


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, HolySaint сказал:

Не пишет не чего и не где. Не в чат не в логи.


	private static void updateAugment(L2PcInstance player, int attributes, int skill, int level)
    {
        System.out.println("начало updateAugment()");
		player.sendMessage("Этап 1 пройден");

 

Сделай теперь так:

@Override
    public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player)
    {
        String htmltext = "";
 
 System.out.println("начало updateAugment()");
		player.sendMessage("Этап 1 пройден");

        if (event.equalsIgnoreCase("active"))
        {
            htmltext = "active.htm";
        }
 
        else if (event.equalsIgnoreCase("passive"))
        {
            htmltext = "passive.htm";
        }
 
 
        else
        {
 
 System.out.println("конец updateAugment()");
		player.sendMessage("Этап 2 пройден");

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

 

Изменено пользователем zGosu

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


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

Расставил так не до конца, но даже так не проходит не одного этапа чистым твинком! Админом 1-вым чаром как обычно до конца все идет.

package custom.AugmentShop;
 
import ru.catssoftware.L2DatabaseFactory;
import ru.catssoftware.gameserver.model.L2ItemInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.model.itemcontainer.Inventory;
import ru.catssoftware.gameserver.model.quest.Quest;
import ru.catssoftware.gameserver.model.quest.QuestState;
import java.sql.Connection;
import java.sql.PreparedStatement;
 

 
public class AugmentShop extends Quest
{
	
    private final static int ITEM_ID = 4037; /*id за продажу*/
    private final static int ITEM_COUNT = 40; /*Укажите цену*/
    private final static String qn = "AugmentShop";
    private final static int NPC = 53; /*Укжите npc id;*/
 
    public AugmentShop(int questId, String name, String descr)
    {
        super(questId, name, descr);
        addStartNpc(NPC);
        addTalkId(NPC);
    }
 
    @Override
    public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player)
    {
        String htmltext = "";
		player.sendMessage("Этап 1 пройден");
 
        if (event.equalsIgnoreCase("active"))
        {
            htmltext = "active.htm";
        }
 
        else if (event.equalsIgnoreCase("passive"))
        {
            htmltext = "passive.htm";
        }
 
 
        else
        {
		player.sendMessage("Этап 2 пройден");
            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 = "";
		player.sendMessage("Этап 3 пройден");
        QuestState qs = player.getQuestState(qn);
        if (qs == null)
            qs = newQuestState(player);
        htmltext = "main.htm";
		player.sendMessage("Этап 4 пройден");
        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)
    {
        player.sendMessage("Этап 5 пройден");
        L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
        if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) == null)
 
        {
			player.sendMessage("Этап 6 пройден");
            player.sendMessage("Вы должны надеть оружие.");
			player.sendMessage("Этап 7 пройден");
            return;
        }
		
		if (item.isHeroItem())
		{
			player.sendMessage("Этап 8 пройден");
			player.sendMessage("Вы не можете вставить в геройское оружие Life Stone.");
			player.sendMessage("Этап 9 пройден");
			return;
		}
 
        if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND).isAugmented())
        {
			player.sendMessage("Этап 10 пройден");
            player.sendMessage("Для начала удалите Life Stone!");
			player.sendMessage("Этап 11 пройден");
            return;
        }
 
        if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) < ITEM_COUNT)
        {
			player.sendMessage("Этап 12 пройден");
            player.sendMessage("Грустно, но у вас нет Coin Of Luck. Или вам не хватает!");
			player.sendMessage("Этап 13 пройден");
            return;
        }
		
        Connection con = null;
        try
        {
            player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true);
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?,?,?)");
            statement.setInt(1, item.getObjectId());
 
            statement.setInt(2, attributes*65536+1);
            statement.setInt(3, skill);
            statement.setInt(4, level);
 
            statement.executeUpdate();
            player.sendMessage("Покупка прошла успешно. Вы должны перезайти теперь.");
            statement.close();
 
        }
        catch (Exception e)
        {
            _log.warn("Не могли дополнить пунктом: "+item.getObjectId()+" "+ e);
        }
        finally
        {
            try
            {
               
           /*L2DatabaseFactory.close(con);*/
                con.close();
            }
            catch (Exception e)
            {
            }
        }
    }
 
 
}

 

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


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, HolySaint сказал:

Расставил так не до конца, но даже так не проходит не одного этапа чистым твинком! Админом 1-вым чаром как обычно до конца все идет.


package custom.AugmentShop;
 
import ru.catssoftware.L2DatabaseFactory;
import ru.catssoftware.gameserver.model.L2ItemInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.model.itemcontainer.Inventory;
import ru.catssoftware.gameserver.model.quest.Quest;
import ru.catssoftware.gameserver.model.quest.QuestState;
import java.sql.Connection;
import java.sql.PreparedStatement;
 

 
public class AugmentShop extends Quest
{
	
    private final static int ITEM_ID = 4037; /*id за продажу*/
    private final static int ITEM_COUNT = 40; /*Укажите цену*/
    private final static String qn = "AugmentShop";
    private final static int NPC = 53; /*Укжите npc id;*/
 
    public AugmentShop(int questId, String name, String descr)
    {
        super(questId, name, descr);
        addStartNpc(NPC);
        addTalkId(NPC);
    }
 
    @Override
    public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player)
    {
        String htmltext = "";
		player.sendMessage("Этап 1 пройден");
 
        if (event.equalsIgnoreCase("active"))
        {
            htmltext = "active.htm";
        }
 
        else if (event.equalsIgnoreCase("passive"))
        {
            htmltext = "passive.htm";
        }
 
 
        else
        {
		player.sendMessage("Этап 2 пройден");
            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 = "";
		player.sendMessage("Этап 3 пройден");
        QuestState qs = player.getQuestState(qn);
        if (qs == null)
            qs = newQuestState(player);
        htmltext = "main.htm";
		player.sendMessage("Этап 4 пройден");
        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)
    {
        player.sendMessage("Этап 5 пройден");
        L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
        if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) == null)
 
        {
			player.sendMessage("Этап 6 пройден");
            player.sendMessage("Вы должны надеть оружие.");
			player.sendMessage("Этап 7 пройден");
            return;
        }
		
		if (item.isHeroItem())
		{
			player.sendMessage("Этап 8 пройден");
			player.sendMessage("Вы не можете вставить в геройское оружие Life Stone.");
			player.sendMessage("Этап 9 пройден");
			return;
		}
 
        if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND).isAugmented())
        {
			player.sendMessage("Этап 10 пройден");
            player.sendMessage("Для начала удалите Life Stone!");
			player.sendMessage("Этап 11 пройден");
            return;
        }
 
        if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) < ITEM_COUNT)
        {
			player.sendMessage("Этап 12 пройден");
            player.sendMessage("Грустно, но у вас нет Coin Of Luck. Или вам не хватает!");
			player.sendMessage("Этап 13 пройден");
            return;
        }
		
        Connection con = null;
        try
        {
            player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true);
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?,?,?)");
            statement.setInt(1, item.getObjectId());
 
            statement.setInt(2, attributes*65536+1);
            statement.setInt(3, skill);
            statement.setInt(4, level);
 
            statement.executeUpdate();
            player.sendMessage("Покупка прошла успешно. Вы должны перезайти теперь.");
            statement.close();
 
        }
        catch (Exception e)
        {
            _log.warn("Не могли дополнить пунктом: "+item.getObjectId()+" "+ e);
        }
        finally
        {
            try
            {
               
           /*L2DatabaseFactory.close(con);*/
                con.close();
            }
            catch (Exception e)
            {
            }
        }
    }
 
 
}

 

1 админом? А со 2 что, не канает?)

Если канает, то где-то стоит проверка на права ГМа

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


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, zGosu сказал:

1 админом? А со 2 что, не канает?)

Если канает, то где-то стоит проверка на права ГМа

Не канает) Те же самые права на других админах и не канает.

Изменено пользователем HolySaint

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


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

Будут еще какие то идей? Я вот точно не понимаю почему так происходит?

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


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, HolySaint сказал:

Будут еще какие то идей? Я вот точно не понимаю почему так происходит?

Ни одна из htm не запускается, которая есть в скрипте?

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


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, zGosu сказал:

Ни одна из htm не запускается, которая есть в скрипте?

Исходя из этапов значит нет, но все таки запускаются каким то образом html с выбором этих скилов.

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


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, zGosu сказал:

Выбор скилов это main.htm?

И вот тут меня осенило... Когда я ставил этого NPC в скрипте была запись addFirstTalkId(NPC); и лежали файлы HTML рядом со скриптом, я не стал марочиться и ставить отдельного NPC удалил строчку  addFirstTalkId(NPC); посмотрел как происходят запросы на баипасс изменил NPC id в настройке, запустил гс, заспаунил, проверил все работает и забыл! А когда пошли игроки тут то оно и всплыло! Но почему?  Что решает строчка addFirstTalkId(NPC); ? ПОчему не принимает байпассы с ID с настроики? И если оставлять addFirstTalkId(NPC) она перебивает HTML гм шопа. Понаписал чего то...

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

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

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

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