Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
L2Bufferistance.java l2rt 1.4.2.9
#1
Доброе утро товарищи знатоки, программисты ,прошу помощи в одном исходнике сборки l2rt 1.4.2.9. Ребят подскажите как реализовать такой момент: Бафер имеет 3 хтмл файла.В 1 находятся скилы которые мы можем набафать сразу, 2 других заточены под профиля созданные игроком. Вопрос как можно задействовать в коде выбор других хтмлок (в датапаке сам реализую допишу) тоесть в коде реализован всего лишь 1 хтмлка с выбором бафа а хотелось бы несколько. вот сам код:

Код:
package npc.model;

import java.util.regex.Pattern;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
import net.sf.l2j.gameserver.templates.L2NpcTemplate;
import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
import java.util.StringTokenizer;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.cache.HtmCache;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.L2Summon;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.L2GameClient;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.serverpackets.SystemMessage;
import net.sf.l2j.util.Rnd;

/**
* @descr L2Buffer
* @author Koten [RusTeam]
*/
public class L2BufferInstance extends L2NpcInstance
{
    private static final Pattern patterns = Pattern.compile("[a-zA-Z0-9]{1,8}"); // шаблон имени группы
    private static final int[][] groupStaticBuff = new int[][] // разрешенные баффы
    {
        //{ номер скилла, уровень скилла }
           
            {1068,3}, //Might
            {1086,2}, //Haste
            {1242,3}, //Death Whisper
            {1062,2}, //Berserker Spirit
            {4401,1}, //Empower
            {1040,3}, //Shield
            {1036,2}, //Magic Barrier
        
            {1243,6}, //Bless Shield
            {1268,4}, //Vampiric Rage
            {1078,6}, //Concentration
            {1045,6}, //Blessed Body
            {1077,3}, //Focus
            {1270,3}, //Guidance
            {1085,3}, //Acumen
        
            {1303,2}, //Wild Magic
            {1035,4}, //Mental Shield
            {1304,3}, //Advanced Block
            {1087,3}, //Agility
            {1259,4}, //Resist Shock
            {1204,2}, //Wind Walk
            {1048,6}, //Blessed Soul
            
            {275,1}, //Fury
            {274,1}, //Fire
            {272,1}, //Inspiration
            {271,1}, //Warrior
            {273,1}, //Mystic
            {365,1}, //Siren
            {276,1}, //Concentration
            {310,1}, //Vampire
            
            {264,1}, //Earth
            {268,1}, //Wind
            {269,1}, //Hunter
            {304,1}, //Vitality
            {349,1}, //Renewal
            {267,1}, //Warding
            {364,1}, //Champion

            {1413,1}, //Magnus Chant
            {1355,1}, //Pr. of Water
            {1357,1}, //Pr. of Wind
            {1356,1}, //Pr. of Fire
            {1363,1} //Chant of Victory
        
    };

    private static final int countGroup = 3; // максимальное количество групп
    private static final int priceBuff = 20000; // цена 1го баффа
    private static final int priceСancel = 20000; // цена канцела эффектов на персонаже (-1 отключить)
    private static final int priceHeal = 20000; // цена лечения персонажа (-1 отключить)
    private static final int buffTime =  3600; // 1 час
    private static final int maxCountBuffSelfGroup = 28; //максимальное количество баффов в своей группе

    public L2BufferInstance(int objectId, L2NpcTemplate template)
    {
        super(objectId, template);
    }
    
    @Override
    public void showChatWindow(L2PcInstance player, int val)
    {
        if (player == null || player.isDead())
        {
            return;
        }

        if (player.isCursedWeaponEquiped())
        {
            return;
        }

        showMain(player);
    }
    

    @Override
    public void onActionShift(L2GameClient client)
    {
        return;
    }

    @Override
    public void onBypassFeedback(L2PcInstance player, String command)
    {
        if(player == null)
            return;

        String cmd = command.split(" ")[0];
        if (cmd.equalsIgnoreCase("showset"))  // показать свою группу баффов
        {
            String buffsetname = command.split(" ")[1];
            showSet(player, buffsetname);
        }
        else if (cmd.equalsIgnoreCase("showpage"))  // показать страницу
        {
            String page = command.split(" ")[1];
            if(page.equalsIgnoreCase("main"))
                showMain(player);
            else if(page.contains("mygroup"))
            {
                String buffsetname = page.split(";")[1];
                showSet(player, buffsetname);
            }
            else
                showMain(player);
        }
        else if (cmd.equalsIgnoreCase("newbuffset")) // новый набор баффов
        {
            String buffsetname = command.split(" ")[1];
            
            if(!patterns.matcher(buffsetname).matches())
            {
                showMain(player);
                player.sendMessage("Внимание! Не правильное имя набора!");
                return;
            }            
            
            if(player.getVar("BuffSets") == null)
                player.setVar("BuffSets", "");
                        
            int c = player.getVar("BuffSets").split(";").length;
            if(c == countGroup)
            {
                showMain(player);
                player.sendMessage("Внимание! Превышено максимальное количество наборов!");
                return;
            }
            
            String name = "buffset"+Rnd.get(0, 10000);
            player.setVar("BuffSets", player.getVar("BuffSets")+name+";");            
            player.setVar(name, buffsetname + ";");            
            showSet(player, name);
        }    
        else if (cmd.equalsIgnoreCase("delbuffset"))  // удалить свою группу баффов
        {
            if(player.getVar("BuffSets") == null)
                player.setVar("BuffSets", "");
            
            if(player.getVar("BuffSets").split(";").length > 0)
            {
                String buffsetname = command.split(" ")[1];            
                player.setVar("BuffSets", player.getVar("BuffSets").replaceFirst((buffsetname+";"), ""));                
                player.unsetVar(buffsetname);
            }
            
            showMain(player);
        }
        else if (cmd.equalsIgnoreCase("buffset"))  // использовать свою группу баффов
        {
            String buffsetname = command.split(" ")[1];
            buffsetAllAndShowPage(player, buffsetname);
            showMain(player);
        }
        else if (cmd.equalsIgnoreCase("showbuffsetadd"))  // список баффов на добавление в свой набор
        {
            String buffsetname = command.split(" ")[1];
            String htm = HtmCache.getInstance().getHtm("data/html/NpcBuffer/mygroupedit.htm");
            NpcHtmlMessage page = new NpcHtmlMessage(getObjectId());            
            page.setHtml(htm);
            page.replace("%objectId%", String.valueOf(getObjectId()));
            page.replace("%setName%", buffsetname);
            player.sendPacket(page);
            player.sendPacket(ActionFailed.STATIC_PACKET);
        }
        else if (cmd.equalsIgnoreCase("buffsetadd"))  // добавить бафф свою группу баффов
        {
            String skillId = command.split(" ")[1].split(";")[0];
            String skillLvl = command.split(" ")[1].split(";")[1];
            String buffsetname = command.split(" ")[1].split(";")[2];
            
            if(player.getVar(buffsetname).split(";").length >= maxCountBuffSelfGroup + 1)
            {
                player.sendMessage("Внимание! Превышено максимальное количество слотов баффа!");
            }
            else
            {
                player.setVar(buffsetname, (player.getVar(buffsetname) + skillId + "," + skillLvl + ";"));
            }
            showSet(player, buffsetname);
        }
        else if (cmd.equalsIgnoreCase("buffsetdel"))  // удалить бафф со своей группы баффов
        {
            String skillId = command.split(" ")[1].split(";")[0];
            String skillLvl = command.split(" ")[1].split(";")[1];
            String buffsetname = command.split(" ")[1].split(";")[2];
            
            player.setVar(buffsetname, player.getVar(buffsetname).replaceFirst(skillId + "," + skillLvl + ";", ""));
            showSet(player, buffsetname);
        }        
        else if(cmd.equalsIgnoreCase("statbuff")) // бафф обычного скилла
        {
            String[] params = command.split(" ")[1].split(";");
            buffOne(player, params[0], params[1]);
            showMain(player);
        }
        else if (command.equalsIgnoreCase("cancel")) //снять все эффекты
        {
            if(priceСancel < 0)
                return;
            
            if (player.getAdena() < priceСancel)
            {
                player.sendPacket(new SystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA));
                return;
            }
            if (!checkConditions(player))
            {
                player.sendPacket(ActionFailed.STATIC_PACKET);
                return;
            }
            player.reduceAdena("L2Buffer", priceСancel, player, true);
            L2Summon summon = player.getPet();
            if (summon != null && summon == player.getTarget())
            {
               summon.stopAllEffects();
            }
            else
            {            
                player.stopAllEffects();
            }
        }
        else if (command.equalsIgnoreCase("heal")) //вылечить персонажа
        {
            if(priceHeal < 0)
                return;
            
            if (player.getAdena() < priceHeal)
            {
                player.sendPacket(new SystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA));
                return;
            }
            if (!checkConditions(player))
            {
                player.sendPacket(ActionFailed.STATIC_PACKET);
                return;
            }
            player.reduceAdena("L2Buffer", priceHeal, player, true);
            L2Summon summon = player.getPet();
            if (summon != null && summon == player.getTarget())
            {
               summon.setCurrentHpMp(summon.getMaxHp(), summon.getMaxMp());
            }
            else
            {            
                player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
            }
        }
    }
    
    //главная страница баффера
    public void showMain(L2PcInstance activeChar)
    {
        String htm = HtmCache.getInstance().getHtm("data/html/NpcBuffer/main.htm");
        NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
        html.setHtml(htm);
        html.replace("%objectId%", String.valueOf(getObjectId()));      
        
        StringBuilder sb = new StringBuilder();
        int c = activeChar.getVar("BuffSets") == null ? 0 : activeChar.getVar("BuffSets").split(";").length;
        if(c > 0)
        {
            sb.append("<table width=280>");
            for (String name : activeChar.getVar("BuffSets").split(";"))
            {
                if (activeChar.getVar(name) != null)
                {
                    String buffsetname = activeChar.getVar(name);
                    sb.append("<tr>");
                    sb.append("<td align=\"right\"><button value=\"Баффать\" action=\"bypass -h npc_").append(getObjectId()).append("_buffset ").append(name).append("\" width=\"60\" height=\"21\" back=\"L2UI_CH3.bigbutton_down\" fore=\"L2UI_CH3.bigbutton\"></td>");
                    sb.append("<td align=\"center\"><button value=\"").append(buffsetname.substring(0, buffsetname.indexOf(";"))).append("\" action=\"bypass -h npc_").append(getObjectId()).append("_showset ").append(name).append("\" width=\"80\" height=\"21\" back=\"L2UI_CH3.bigbutton_down\" fore=\"L2UI_CH3.bigbutton\"></td>");
                    sb.append("<td align=\"left\"><button value=\"Удалить\" action=\"bypass -h npc_").append(getObjectId()).append("_delbuffset ").append(name).append("\" width=\"60\" height=\"21\" back=\"L2UI_CH3.bigbutton_down\" fore=\"L2UI_CH3.bigbutton\"></td>");
                    sb.append("</tr>");
                }
            }
            sb.append("</table>");
        }
        
        html.replace("%mybuffsets%", sb.toString());
        activeChar.sendPacket(html);
        activeChar.sendPacket(ActionFailed.STATIC_PACKET);
    }

    @SuppressWarnings("SleepWhileHoldingLock")
    public void buffsetAllAndShowPage(L2PcInstance activeChar, String command)
    {
        StringTokenizer st = new StringTokenizer(activeChar.getVar(command), ";");

        if (activeChar.getAdena() < (priceBuff * (st.countTokens() - 1)))
        {
            activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA));
            return;
        }

        if (!checkConditions(activeChar))
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }

        activeChar.reduceAdena("L2Buffer", priceBuff * (st.countTokens() - 1), activeChar, true);

        st.nextToken();
        while(st.hasMoreTokens())
        {
            String[] skillst = st.nextToken().split(",");
            int skillId = Integer.valueOf(skillst[0]);
            int skillLvl = Integer.valueOf(skillst[1]);
            if (contains(skillId, skillLvl))
            {
                L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLvl);
                L2Summon summon = activeChar.getPet();
                if (summon != null && summon == activeChar.getTarget())
                {
                    skill.getEffects(activeChar, summon, buffTime);
                }
                else
                {
                    skill.getEffects(activeChar, activeChar, buffTime);
                }
                try
                {
                    Thread.sleep(100);
                }
                catch (InterruptedException ex)
                {
                }
            }
        }
        activeChar.updateEffectIcons();
        activeChar.refreshOverloaded();
        showSet(activeChar, command);
    }

    public void showSet(L2PcInstance activeChar, String command)
    {
        StringTokenizer st = new StringTokenizer(activeChar.getVar(command), ";");
        String htm = HtmCache.getInstance().getHtm("data/html/NpcBuffer/mygroupview.htm");
        NpcHtmlMessage page = new NpcHtmlMessage(getObjectId());            
        page.setHtml(htm);
        page.replace("%objectId%", String.valueOf(getObjectId()));
        page.replace("%groupName%", st.nextToken());
        page.replace("%setName%", command);

        StringBuilder sb = new StringBuilder();
        int i = 0;
        int m = 0;
        
        sb.append("<table width=\"280\"><tr>");

        while (st.hasMoreTokens())
        {
            String[] skillst = st.nextToken().split(",");
            int skillId = Integer.valueOf(skillst[0]);
            int skillLvl = Integer.valueOf(skillst[1]);
            if (!contains(skillId, skillLvl))
            {
                activeChar.setVar(command, activeChar.getVar(command).replaceFirst(skillId + "," + skillLvl + ";", ""));
                continue;
            }
            i++;
            m++;
            if (m == 2)
            {
                m = 0;
                sb.append("</tr><tr>");
            }
            L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLvl);
            if(skill != null)
                sb.append("<td width=\"140\"><a action=\"bypass -h npc_").append(getObjectId()).append("_buffsetdel ").append(skill.getId()).append(";").append(skill.getLevel()).append(";").append(command).append("\">").append(skill.getName()).append("</a></td>");
        }
        sb.append("</tr></table>");
        
        if (i == 0)
        {
            sb.append("<center>Добавить баффы можно нажав кнопку 'Добавить'</center>");
        }

        page.replace("%mybuffsets%", sb.toString());
        activeChar.sendPacket(page);
        activeChar.sendPacket(ActionFailed.STATIC_PACKET);
    }
    //бафф одиночного скилла
    public void buffOne(L2PcInstance activeChar, String skillId, String skillLvl)
    {

        if (activeChar.getAdena() < priceBuff)
        {
            activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA));
            return;
        }

        if (!checkConditions(activeChar))
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }

        try
        {
            int skill_id = Integer.valueOf(skillId);
            int lvl = Integer.valueOf(skillLvl);
            if (contains(skill_id, lvl))
            {
                activeChar.reduceAdena("L2Buffer", priceBuff, activeChar, true);
                L2Skill skill = SkillTable.getInstance().getInfo(skill_id, lvl);
                L2Summon summon = activeChar.getPet();
                if (summon != null && summon == activeChar.getTarget())
                {
                    skill.getEffects(activeChar, summon, buffTime);
                }
                else
                {
                    skill.getEffects(activeChar, activeChar, buffTime);
                }
            }
        }
        catch (Exception e)
        {
            activeChar.sendMessage("Не правильный скилл!");
        }
    }

    private boolean checkConditions(L2PcInstance player)
    {
        if (player.isDead() || player.isAlikeDead())
        {
            return false;
        }    
        return true;
    }

    private static boolean contains(int skillId, int lvl)
    {
       for(int[] grp : groupStaticBuff)
       {
           if(grp[0] == skillId && grp[1] == lvl)
               return true;
       }
       return false;
    }
    
    
    public static void main(String[] args)
    {

    }
}
Ответ
#2
Раз пишите..., что сами можете дописать, что стоит дописать команду?Smile
И на будущее... Старайтесь внятно излагать свои мысли, а то у вас каша в голове.

Старайтесь показывать как можно больше информации о всей возникшей ситуации, так будет шанс получить ответ от более опытных человечков.

Посмотрите как листаются html'ки у баффера и сделайте подобную схему.Smile
Ответ
#3
jimi Написал:Посмотрите как листаются html'ки у баффера и сделайте подобную схему.Smile

Также как и у остальных, через "Chat 1,2,3 ...". Чем L2BufferInstance отличается от остальных НПЦ инстансов?

Я вот только одного непойму. Зачем давать советы некрофилу? RT дохлая сборка уже как 4 года. По качеству она не далеко ушла от фрозенов. Соответственно, до вас никто и не помогал человеку по этой причине.
Родился, живу и когда-нибудь умру.
Ответ
#4
К сожалению, я не знаю сборок. Я скажу прямо, я свой написал. Но! Я смотрел логику по l2jfozen.
Это для меня не совсем важно было, какая дохлая, а какая нет, у них принцип тот - же, абсолютно у любой сборки, только писаны они все от звезды, по этому я не задавался подобными вопросами. Все, что мне требовалось я смотрел у "них", а писал по своему - это пожалуй все, что мне требовалось. Smile

И тут в 1000 раз больше файлов, чем у меня.
Открыл и убился, называется. Так и вышло.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  java прогер Light87 0 1,923 01-18-2021, 12:15 AM
Последний пост: Light87
  Помогите переписать скрипт с Python на Java Virrilis3 0 1,479 03-29-2018, 10:55 PM
Последний пост: Virrilis3
  Ищу исполнителя [Java] Abstragetic 3 2,142 02-05-2017, 03:01 AM
Последний пост: Deazer
  альт+G java HiredKiller 10 3,435 12-15-2015, 09:40 AM
Последний пост: HiredKiller
  Servise Manager Lucera 2 Java 8. DiName 8 2,707 12-07-2015, 07:43 AM
Последний пост: Deazer
  Дюп через Kamaloka.java dantest 7 2,328 09-14-2015, 09:01 PM
Последний пост: dantest
  GameServer.java dantest 10 3,111 09-11-2015, 07:23 PM
Последний пост: Zeratyl
  время для java Valent 7 2,231 08-15-2015, 10:13 PM
Последний пост: Bacek
  Ошибки в GS. Exception in thread "AISTPool-8" java.lang.StackOverflowError vokforever 3 2,141 07-27-2015, 05:52 PM
Последний пост: n3k0nation
  Java 8 Laguerro 10 3,921 03-21-2015, 03:26 PM
Последний пост: Klay

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)