остановка опыта в .menu

Раздел для новичков — любые вопросы на тему администратирования и создания серверов.
Whatever
Great Imperial Crusader
Аватара пользователя
Сообщения: 4669
Зарегистрирован: 19 апр 2008, 17:45

22 дек 2015, 10:26

Пример как сделать кликабельные кнопки для меню:

в HTML:

Код: Выделить всё

<button value="Вкл" action="bypass -h expgain on" width=55 height=15 back="sek.cbui94" fore="sek.cbui92">
<button value="Выкл" action="bypass -h expgain off" width=55 height=15 back="sek.cbui94" fore="sek.cbui92">

в network/clientpackets/RequestBypassToServer.java можно добавить где-то после

Код: Выделить всё

else if(_command.startsWith("manor_menu_select?"))
{
   L2Object object = activeChar.getTarget();
   if(object instanceof L2NpcInstance)
   {
      ((L2NpcInstance) object).onBypassFeedback(activeChar, _command);
   }
}

примерно такой код

Код: Выделить всё

else if(_command.startsWith("expgain"))
{
   StringTokenizer st = new StringTokenizer(_command, " ");
   String temp = st.nextToken(); // expgain
   String val = ""; // on/off
   try{
      val = st.nextToken();
   }
   catch(NoSuchElementException ns){}
   catch(Exception ex){}
   
   if(!val.isEmpty())
   {
      if(val.equalsIgnoreCase("on"))
      {
         activeChar.setExpOn(true);
      }
      else if(val.equalsIgnoreCase("off"))
      {
         activeChar.setExpOn(false);
      }
      
      // и показываем HTML меню вновь
      final String path = "data/html/menu.htm";
      String text = HtmCache.getInstance().getHtm(path);

      if(text != null && !text.isEmpty())
      {
         text = text.replace("%gainexp%", activeChar.getExpOn() ? "Выкл" : "Вкл");
      }
      else{
         text = "Отсутствует HTML по пути: " + path;
      }

      NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
      html.setHtml(text);
      player.sendPacket(html);
      html = null;
   }
}

Не забываем добавить импорты классов StringTokenizer, NpcHtmlMessage, и т.д.

DontTouchMe
No Grade Newbie
Сообщения: 12
Зарегистрирован: 20 дек 2015, 13:02

22 дек 2015, 11:18

WhatEver писал(а):Пример как сделать кликабельные кнопки для меню:

в HTML:

Код: Выделить всё

<button value="Вкл" action="bypass -h expgain on" width=55 height=15 back="sek.cbui94" fore="sek.cbui92">
<button value="Выкл" action="bypass -h expgain off" width=55 height=15 back="sek.cbui94" fore="sek.cbui92">

в network/clientpackets/RequestBypassToServer.java можно добавить где-то после

Код: Выделить всё

else if(_command.startsWith("manor_menu_select?"))
{
   L2Object object = activeChar.getTarget();
   if(object instanceof L2NpcInstance)
   {
      ((L2NpcInstance) object).onBypassFeedback(activeChar, _command);
   }
}

примерно такой код

Код: Выделить всё

else if(_command.startsWith("expgain"))
{
   StringTokenizer st = new StringTokenizer(_command, " ");
   String temp = st.nextToken(); // expgain
   String val = ""; // on/off
   try{
      val = st.nextToken();
   }
   catch(NoSuchElementException ns){}
   catch(Exception ex){}
   
   if(!val.isEmpty())
   {
      if(val.equalsIgnoreCase("on"))
      {
         activeChar.setExpOn(true);
      }
      else if(val.equalsIgnoreCase("off"))
      {
         activeChar.setExpOn(false);
      }
      
      // и показываем HTML меню вновь
      final String path = "data/html/menu.htm";
      String text = HtmCache.getInstance().getHtm(path);

      if(text != null && !text.isEmpty())
      {
         text = text.replace("%gainexp%", activeChar.getExpOn() ? "Выкл" : "Вкл");
      }
      else{
         text = "Отсутствует HTML по пути: " + path;
      }

      NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
      html.setHtml(text);
      player.sendPacket(html);
      html = null;
   }
}

Не забываем добавить импорты классов StringTokenizer, NpcHtmlMessage, и т.д.

NpcHtmlMessage есть импорт а вот не могу найти StringTokenizer и http://prntscr.com/9h4q1m

Whatever
Great Imperial Crusader
Аватара пользователя
Сообщения: 4669
Зарегистрирован: 19 апр 2008, 17:45

22 дек 2015, 11:39

Код: Выделить всё

// в самый верх добавляем

import java.util.StringTokenizer;
import java.util.NoSuchElementException;

import com.l2jfrozen.gameserver.cache.HtmCache;

// ...

else if(_command.startsWith("expgain"))
{
   StringTokenizer st = new StringTokenizer(_command, " ");
   String temp = st.nextToken(); // expgain
   String val = ""; // on/off
   try{
      val = st.nextToken();
   }
   catch(NoSuchElementException ns){}
   catch(Exception ex){}
   
   if(!val.isEmpty())
   {
      if(val.equalsIgnoreCase("on"))
      {
         activeChar.setExpOn(true);
      }
      else if(val.equalsIgnoreCase("off"))
      {
         activeChar.setExpOn(false);
      }
     
      // и показываем HTML меню вновь
      final String path = "data/html/menu.htm";
      String text = HtmCache.getInstance().getHtm(path);

      if(text != null && !text.isEmpty())
      {
         text = text.replace("%gainexp%", activeChar.getExpOn() ? "Выкл" : "Вкл");
      }
      else{
         text = "Отсутствует HTML по пути: " + path;
      }

      NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
      html.setHtml(text);
      activeChar.sendPacket(html);
      html = null;
   }
}

DontTouchMe
No Grade Newbie
Сообщения: 12
Зарегистрирован: 20 дек 2015, 13:02

22 дек 2015, 11:48

WhatEver писал(а):

Код: Выделить всё

// в самый верх добавляем

import java.util.StringTokenizer;
import java.util.NoSuchElementException;

import com.l2jfrozen.gameserver.cache.HtmCache;

// ...

else if(_command.startsWith("expgain"))
{
   StringTokenizer st = new StringTokenizer(_command, " ");
   String temp = st.nextToken(); // expgain
   String val = ""; // on/off
   try{
      val = st.nextToken();
   }
   catch(NoSuchElementException ns){}
   catch(Exception ex){}
   
   if(!val.isEmpty())
   {
      if(val.equalsIgnoreCase("on"))
      {
         activeChar.setExpOn(true);
      }
      else if(val.equalsIgnoreCase("off"))
      {
         activeChar.setExpOn(false);
      }
     
      // и показываем HTML меню вновь
      final String path = "data/html/menu.htm";
      String text = HtmCache.getInstance().getHtm(path);

      if(text != null && !text.isEmpty())
      {
         text = text.replace("%gainexp%", activeChar.getExpOn() ? "Выкл" : "Вкл");
      }
      else{
         text = "Отсутствует HTML по пути: " + path;
      }

      NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
      html.setHtml(text);
      activeChar.sendPacket(html);
      html = null;
   }
}

норм компилит щас затестю спс тебе (как все ето выучит имено в сфере л2 ? )

DontTouchMe
No Grade Newbie
Сообщения: 12
Зарегистрирован: 20 дек 2015, 13:02

22 дек 2015, 12:28

все вроди зделал как ты сказал закомпилило норм стало так http://prntscr.com/9h5kfe но значения так как было выкл так и есть и окно серовно закрывается http://prntscr.com/9h5l3h

Whatever
Great Imperial Crusader
Аватара пользователя
Сообщения: 4669
Зарегистрирован: 19 апр 2008, 17:45

22 дек 2015, 12:43

Такие вещи не проверяются визуально, вешай логгеры и смотри что пишет GameServer (доходит ли байпасс и т.д.)

Пример:

Код: Выделить всё

import java.util.logging.Logger;

// ...

// внутрь класса RequestBypassToServer
protected static final Logger _log = Logger.getLogger(RequestBypassToServer.class.getName());

// ...

else if(_command.startsWith("expgain"))
{
   _log.info("bypass: " + _command);
   StringTokenizer st = new StringTokenizer(_command, " ");
   String temp = st.nextToken(); // expgain
   String val = ""; // on/off
   try{
      val = st.nextToken();
   }
   catch(NoSuchElementException ns){}
   catch(Exception ex){}
   
   if(!val.isEmpty())
   {
      if(val.equalsIgnoreCase("on"))
      {
         activeChar.setExpOn(true);
         _log.info(activeChar.getName() + " enabled exp");
      }
      else if(val.equalsIgnoreCase("off"))
      {
         activeChar.setExpOn(false);
         _log.info(activeChar.getName() + " disabled exp");
      }
     
      // и показываем HTML меню вновь
      final String path = "data/html/menu.htm";
      String text = HtmCache.getInstance().getHtm(path);

      if(text != null && !text.isEmpty())
      {
         text = text.replace("%gainexp%", activeChar.getExpOn() ? "Выкл" : "Вкл");
      }
      else{
         text = "Отсутствует HTML по пути: " + path;
      }

      NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
      html.setHtml(text);
      activeChar.sendPacket(html);
      _log.info(activeChar.getName() + " send menu html");
      html = null;
   }
}

Whatever
Great Imperial Crusader
Аватара пользователя
Сообщения: 4669
Зарегистрирован: 19 апр 2008, 17:45

22 дек 2015, 12:46

DontTouchMe писал(а):как все это выучить именно в сфере л2 ?

Никак. Не бывает л2-программистов.
Либо учить все от начала и до конца и становиться хотя бы бывалым программистом (скриптером), либо забыть об этом навсегда.

DontTouchMe
No Grade Newbie
Сообщения: 12
Зарегистрирован: 20 дек 2015, 13:02

22 дек 2015, 14:14

WhatEver писал(а):Такие вещи не проверяются визуально, вешай логгеры и смотри что пишет GameServer (доходит ли байпасс и т.д.)

Пример:

Код: Выделить всё

import java.util.logging.Logger;

// ...

// внутрь класса RequestBypassToServer
protected static final Logger _log = Logger.getLogger(RequestBypassToServer.class.getName());

// ...

else if(_command.startsWith("expgain"))
{
   _log.info("bypass: " + _command);
   StringTokenizer st = new StringTokenizer(_command, " ");
   String temp = st.nextToken(); // expgain
   String val = ""; // on/off
   try{
      val = st.nextToken();
   }
   catch(NoSuchElementException ns){}
   catch(Exception ex){}
   
   if(!val.isEmpty())
   {
      if(val.equalsIgnoreCase("on"))
      {
         activeChar.setExpOn(true);
         _log.info(activeChar.getName() + " enabled exp");
      }
      else if(val.equalsIgnoreCase("off"))
      {
         activeChar.setExpOn(false);
         _log.info(activeChar.getName() + " disabled exp");
      }
     
      // и показываем HTML меню вновь
      final String path = "data/html/menu.htm";
      String text = HtmCache.getInstance().getHtm(path);

      if(text != null && !text.isEmpty())
      {
         text = text.replace("%gainexp%", activeChar.getExpOn() ? "Выкл" : "Вкл");
      }
      else{
         text = "Отсутствует HTML по пути: " + path;
      }

      NpcHtmlMessage html = new NpcHtmlMessage(activeChar.getObjectId());
      html.setHtml(text);
      activeChar.sendPacket(html);
      _log.info(activeChar.getName() + " send menu html");
      html = null;
   }
}

Непонимаю куда засунуть выше написаный текст

Whatever
Great Imperial Crusader
Аватара пользователя
Сообщения: 4669
Зарегистрирован: 19 апр 2008, 17:45

22 дек 2015, 15:04

Без понимания таких простых вещей, вы не сможете самостоятельно сделать то что вы хотите


Вернуться в «Академия: форум для вопросов»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость