L2Bufferistance.java l2rt 1.4.2.9 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.
Описание темы:Прошу помощи.

Ответ
Опции темы
Непрочитано 23.12.2014, 03:15   #1
Новичок

Автор темы (Топик Стартер) L2Bufferistance.java l2rt 1.4.2.9

Доброе утро товарищи знатоки, программисты ,прошу помощи в одном исходнике сборки 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)
	{

	}
}

Последний раз редактировалось Auri; 23.12.2014 в 04:03. Причина: Добавлено сообщение
chev вне форума Ответить с цитированием
Непрочитано 27.01.2015, 14:46   #2
Пользователь

По умолчанию Re: L2Bufferistance.java l2rt 1.4.2.9

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

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

Посмотрите как листаются html'ки у баффера и сделайте подобную схему.
jimi вне форума Ответить с цитированием
Непрочитано 27.01.2015, 15:32   #3
Аватар для Donatte
Герой

По умолчанию Re: L2Bufferistance.java l2rt 1.4.2.9

Цитата:
Сообщение от jimi Посмотреть сообщение
Посмотрите как листаются html'ки у баффера и сделайте подобную схему.
Также как и у остальных, через "Chat 1,2,3 ...". Чем L2BufferInstance отличается от остальных НПЦ инстансов?

Я вот только одного непойму. Зачем давать советы некрофилу? RT дохлая сборка уже как 4 года. По качеству она не далеко ушла от фрозенов. Соответственно, до вас никто и не помогал человеку по этой причине.
__________________
Родился, живу и когда-нибудь умру.
Donatte вне форума Ответить с цитированием
Непрочитано 27.01.2015, 16:49   #4
Пользователь

По умолчанию Re: L2Bufferistance.java l2rt 1.4.2.9

К сожалению, я не знаю сборок. Я скажу прямо, я свой написал. Но! Я смотрел логику по l2jfozen.
Это для меня не совсем важно было, какая дохлая, а какая нет, у них принцип тот - же, абсолютно у любой сборки, только писаны они все от звезды, по этому я не задавался подобными вопросами. Все, что мне требовалось я смотрел у "них", а писал по своему - это пожалуй все, что мне требовалось.

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


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите адаптировать код Sql по l2Rt Evangelion=) Lineage II 6 31.08.2010 15:37
[Продам] Исходники L2RT 2.1.5 (l2rt.net) Felixx Рынок / Marketplace 8 30.10.2009 06:45
Ява сервер от команды L2RT Gracia Final (CT2.3) ревизия 2.0.6 _NEO_PK Lineage II 5 09.09.2009 18:20
Ява сервер от команды L2RT (Gracia Final) ревизия 2.0.1 Zone-Game Lineage II 1 31.07.2009 18:12
НПС, красящий ник игрока. Переделка от L2RT Gameserver V1.4 Rus. Работа со скриптами 0 18.02.2009 10:28


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 10:41. Часовой пояс GMT +3.

Вверх