Closer 0 Опубликовано 5 февраля, 2014 Вообщем столкнулся с проблемой, есть баффер с профилями, создаю профиль всё кул(Профиль сохраняется в БД character_skill_save), выхожу из игры захожу в игру тоже всё нормально, делаю рестарт сервера захожу в БД профиль всё еще остался, и как только чар оказывается в игре профиль пропадает, как сделать чтоб он не пропадал? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
VREDNbIi 145 Опубликовано 5 февраля, 2014 Реализация убогая, вот и все на кой фиг каждый раз сохранять профили в базу данных? при высоком онлайне серверу от этого будет явно не по себе сохранять лучше при выключении только, и загружать при старте --- а по поводу вашей проблемы, нужны скрипты, смотреть где и что как реализовано и есть ли ошибки при входе чаром в игру? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Closer 0 Опубликовано 5 февраля, 2014 ошибок нету, у тебя аська есть? я бы показал через ТВ скрипты) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Closer 0 Опубликовано 5 февраля, 2014 /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html */ package com.l2jfrozen.gameserver.powerpak.Buffer; import java.util.ArrayList; import java.util.Map; import java.util.StringTokenizer; import javolution.text.TextBuilder; import javolution.util.FastList; import javolution.util.FastMap; import com.l2jfrozen.Config; import com.l2jfrozen.gameserver.cache.HtmCache; import com.l2jfrozen.gameserver.communitybbs.Manager.BaseBBSManager; import com.l2jfrozen.gameserver.datatables.BufferSkillsTable; import com.l2jfrozen.gameserver.datatables.CharSchemesTable; import com.l2jfrozen.gameserver.datatables.SkillTable; import com.l2jfrozen.gameserver.handler.IBBSHandler; import com.l2jfrozen.gameserver.handler.ICustomByPassHandler; import com.l2jfrozen.gameserver.handler.IVoicedCommandHandler; import com.l2jfrozen.gameserver.model.L2Character; import com.l2jfrozen.gameserver.model.L2Effect; import com.l2jfrozen.gameserver.model.L2Skill; import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance; import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance; import com.l2jfrozen.gameserver.model.entity.event.CTF; import com.l2jfrozen.gameserver.model.entity.event.DM; import com.l2jfrozen.gameserver.model.entity.event.TvT; import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad; import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jfrozen.gameserver.powerpak.PowerPakConfig; import com.l2jfrozen.gameserver.powerpak.Buffer.BuffTable.Buff; import com.l2jfrozen.gameserver.taskmanager.AttackStanceTaskManager; /** * @author Nick */ public class BuffHandler implements IVoicedCommandHandler, ICustomByPassHandler, IBBSHandler { private static final String PARENT_DIR = "data/html/buffer/"; private Map<Integer,ArrayList<Buff>> _buffs; private Map<Integer, String> _visitedPages; private ArrayList<Buff> getOwnBuffs(int objectId) { if(_buffs.get(objectId)==null) synchronized(_buffs) { _buffs.put(objectId,new ArrayList<Buff>()); } return _buffs.get(objectId); } public BuffHandler() { _buffs = new FastMap<Integer,ArrayList<Buff>>(); _visitedPages = new FastMap<Integer,String>(); } @Override public String[] getVoicedCommandList() { return new String[] {PowerPakConfig.BUFFER_COMMAND}; } private boolean checkAllowed(L2PcInstance activeChar) { String msg = null; if(activeChar.isSitting()) msg = "Вы не можете использователь бафер во время отдыха."; else if(activeChar.isCastingNow() || activeChar.isCastingPotionNow()) msg = "Вы не можете использователь бафер ,когда заняты."; else if(activeChar.isAlikeDead()) msg = "Вы не можете использователь бафер,когда мертвы."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("ALL")) msg = "Бафер невозможно использовать на данной территории."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("CURSED") && activeChar.isCursedWeaponEquiped()) msg = "Вы не можете использовать бафер с проклятым оружием."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("ATTACK") && AttackStanceTaskManager.getInstance().getAttackStanceTask(activeChar)) msg = "Вы не можете использовать бафер во время битвы."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("DUNGEON") && activeChar.isIn7sDungeon()) msg = "Бафер не работает в катакомбах и некрополисах."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("RB") && activeChar.isInsideZone(L2Character.ZONE_NOSUMMONFRIEND)) msg = "Бафер невозможно использовать на данной территории. "; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("PVP") && activeChar.isInsideZone(L2Character.ZONE_PVP)) msg = "Бафер не возможно использовать на данной территории."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("PEACE") && activeChar.isInsideZone(L2Character.ZONE_PEACE)) msg = "Бафер не возможно использовать на данной территории."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("SIEGE") && activeChar.isInsideZone(L2Character.ZONE_SIEGE)) msg = "Бафер не возможно использовать на данной территории."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("OLYMPIAD") && (activeChar.isInOlympiadMode() || activeChar.isInsideZone(L2Character.ZONE_OLY) || Olympiad.getInstance().isRegistered(activeChar) || Olympiad.getInstance().isRegisteredInComp(activeChar))) msg = "Бафер не возможно использовать во время олимпиады."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("EVENT") && (activeChar.isInFunEvent())) msg = "Бафер не возможно использовать на этом эвенте."; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("TVT") && activeChar._inEventTvT && TvT.is_started() ) msg = "Бафер не возможно использовать на эвенте TVT"; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("CTF") && activeChar._inEventCTF && CTF.is_started() ) msg = "Бафер не возможно использовать на эвенте CTF"; else if(PowerPakConfig.BUFFER_EXCLUDE_ON.contains("DM") && activeChar._inEventDM && DM.is_started() ) msg = "Бафер не возможно использовать на эвенте DM"; if(msg!=null) activeChar.sendMessage(msg); return msg==null; } @Override public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) { if(activeChar == null) return false; if(!checkAllowed(activeChar)) return false; if(command.compareTo(PowerPakConfig.BUFFER_COMMAND)==0) { NpcHtmlMessage htm = new NpcHtmlMessage(activeChar.getLastQuestNpcObject()); String text = HtmCache.getInstance().getHtm("data/html/default/"+PowerPakConfig.BUFFER_NPC+".htm"); htm.setHtml(text); activeChar.sendPacket(htm); } return false; } private static final String [] _BYPASSCMD = {"dobuff"}; @Override public String[] getByPassCommands() { return _BYPASSCMD; } @Override public void handleCommand(String command, L2PcInstance player, String parameters) { if(player==null) return; if(!checkAllowed(player)) return; L2NpcInstance buffer = null; if(!PowerPakConfig.BUFFER_USEBBS && !PowerPakConfig.BUFFER_USECOMMAND){ if(player.getTarget()!=null) if(player.getTarget() instanceof L2NpcInstance) { buffer = (L2NpcInstance)player.getTarget(); if(buffer.getTemplate().getNpcId()!=PowerPakConfig.BUFFER_NPC) buffer=null; } //Possible fix to Buffer - 1 if (buffer == null) return; //Possible fix to Buffer - 2 if (!player.isInsideRadius(buffer, L2NpcInstance.INTERACTION_DISTANCE, false, false)) return; }//if buffer is null means that buffer will be applied directly (voice and bbs) if(parameters.contains("Pet")){ if(player.getPet()==null){ return; } } StringTokenizer st = new StringTokenizer(parameters, " "); String currentCommand = st.nextToken(); if(parameters.compareTo("ClearBuffs")==0) { getOwnBuffs(player.getObjectId()).clear(); player.sendMessage("Buff set cleared"); } else if(parameters.compareTo("ClearPetBuffs")==0) { getOwnBuffs(player.getPet().getObjectId()).clear(); player.sendMessage("Pet Buff set cleared"); } else if(parameters.compareTo("RemoveAll")==0) { for(L2Effect e : player.getAllEffects()) { if(e.getEffectType()==L2Effect.EffectType.BUFF) player.removeEffect(e); } } else if(parameters.compareTo("RemovePetAll")==0) { for(L2Effect e : player.getPet().getAllEffects()) { if(e.getEffectType()==L2Effect.EffectType.BUFF) player.getPet().removeEffect(e); } } else if(parameters.startsWith("Chat")) { String chatIndex = parameters.substring(4).trim(); synchronized(_visitedPages) { _visitedPages.put(player.getObjectId(), chatIndex); } chatIndex = "-" + chatIndex; String text = HtmCache.getInstance().getHtm("data/html/buffer/buffer" + chatIndex + ".htm"); if(command.startsWith("bbsbuff")) { text = text.replace("-h custom_do", "bbs_bbs"); BaseBBSManager.separateAndSend(text, player); } else { NpcHtmlMessage htm = new NpcHtmlMessage(player.getLastQuestNpcObject()); htm.setHtml(text); player.sendPacket(htm); } } else if(parameters.startsWith("RestoreAll")) { if(player.getAdena()<PowerPakConfig.BUFFER_PRICE*3) { player.sendMessage("У вас не хватает адены."); return; } player.getStatus().setCurrentCp(player.getMaxCp()); player.getStatus().setCurrentMp(player.getMaxMp()); player.getStatus().setCurrentHp(player.getMaxHp()); player.reduceAdena("Buff", PowerPakConfig.BUFFER_PRICE*3, null, true); } else if(parameters.startsWith("RestorePetAll")) { if(player.getAdena()<PowerPakConfig.BUFFER_PRICE*3) { player.sendMessage("У вас не хватает адены."); return; } player.getPet().getStatus().setCurrentMp(player.getPet().getMaxMp()); player.getPet().getStatus().setCurrentHp(player.getPet().getMaxHp()); player.reduceAdena("Buff", PowerPakConfig.BUFFER_PRICE*3, null, true); } else if(parameters.startsWith("RestoreCP")) { if(player.getAdena()<PowerPakConfig.BUFFER_PRICE) { player.sendMessage("У вас не хватает адены."); return; } player.getStatus().setCurrentCp(player.getMaxCp()); player.reduceAdena("Buff", PowerPakConfig.BUFFER_PRICE, null, true); } else if(parameters.startsWith("RestoreMP")) { if(player.getAdena()<PowerPakConfig.BUFFER_PRICE) { player.sendMessage("У вас не хватает адены."); return; } player.getStatus().setCurrentMp(player.getMaxMp()); player.reduceAdena("Buff", PowerPakConfig.BUFFER_PRICE, null, true); } else if(parameters.startsWith("RestorePetMP")) { if(player.getAdena()<PowerPakConfig.BUFFER_PRICE) { player.sendMessage("У вас не хватает адены."); return; } player.getPet().getStatus().setCurrentMp(player.getPet().getMaxMp()); player.reduceAdena("Buff", PowerPakConfig.BUFFER_PRICE, null, true); } else if(parameters.startsWith("RestoreHP")) { if(player.getAdena()<PowerPakConfig.BUFFER_PRICE) { player.sendMessage("У вас не хватает адены."); return; } player.getStatus().setCurrentHp(player.getMaxHp()); player.reduceAdena("Buff", PowerPakConfig.BUFFER_PRICE, null, true); } else if(parameters.startsWith("RestorePetHP")) { if(player.getAdena()<PowerPakConfig.BUFFER_PRICE) { player.sendMessage("У вас не хватает адены."); return; } player.getPet().getStatus().setCurrentHp(player.getPet().getMaxHp()); player.reduceAdena("Buff", PowerPakConfig.BUFFER_PRICE, null, true); } else if(parameters.startsWith("MakeBuffs") || parameters.startsWith("RestoreBuffs")) { String buffName = parameters.substring(9).trim(); int totaladena = 0; ArrayList<Buff> buffs = null; if(parameters.startsWith("RestoreBuffs")) buffs = getOwnBuffs(player.getObjectId()); else buffs = BuffTable.getInstance().getBuffsForName(buffName); if(buffs!=null && buffs.size()==1) { if(!getOwnBuffs(player.getObjectId()).contains(buffs.get(0))) getOwnBuffs(player.getObjectId()).add(buffs.get(0)); } if(buffs==null || buffs.size()==0){ player.sendMessage("Ваш профиль бафов отсутствует."); return; } for(Buff buff: buffs) { L2Skill skill = SkillTable.getInstance().getInfo(buff._skillId, buff._skillLevel); if(skill!=null) { if(player.getLevel()>= buff._minLevel && player.getLevel()<=buff._maxLevel) { if(buff._price>0) { totaladena+=buff._price; if(player.getAdena()<totaladena) { player.sendMessage("У вас не хватает адены."); break; } } if(!buff._force && buffer!=null) { buffer.setBusy(true); buffer.setCurrentMp(buffer.getMaxMp()); buffer.setTarget(player); //buffer.doCast(skill); skill.getEffects(buffer, player,false,false,false); buffer.setBusy(false); } else skill.getEffects(player, player,false,false,false); } try { Thread.sleep(100); // Delay for the packet... } catch(InterruptedException e) { if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace(); } } } if(totaladena>0) player.reduceAdena("Buff", totaladena, null, true); if(_visitedPages.get(player.getObjectId())!=null) handleCommand(command,player,"Chat "+_visitedPages.get(player.getObjectId())); else useVoicedCommand(PowerPakConfig.BUFFER_COMMAND, player, ""); }else if(parameters.startsWith("MakePetBuffs") || parameters.startsWith("RestorePetBuffs")) { if(player.getPet()==null){ player.sendMessage("Не найден ваш слуга."); return; } String buffName = parameters.substring(12).trim(); int totaladena = 0; ArrayList<Buff> buffs = null; if(parameters.startsWith("RestorePetBuffs")) buffs = getOwnBuffs(player.getPet().getObjectId()); else buffs = BuffTable.getInstance().getBuffsForName(buffName); if(buffs!=null && buffs.size()==1) { if(!getOwnBuffs(player.getPet().getObjectId()).contains(buffs.get(0))){ getOwnBuffs(player.getPet().getObjectId()).add(buffs.get(0)); } } if(buffs==null || buffs.size()==0){ player.sendMessage("Профиль бафов вашего слуги отсутствует."); return; } for(Buff buff: buffs) { L2Skill skill = SkillTable.getInstance().getInfo(buff._skillId, buff._skillLevel); if(skill!=null) { if(player.getLevel()>= buff._minLevel && player.getLevel()<=buff._maxLevel) { if(buff._price>0) { totaladena+=buff._price; if(player.getAdena()<totaladena) { player.sendMessage("У вас не хватает адены."); break; } } if(!buff._force && buffer!=null) { buffer.setBusy(true); buffer.setCurrentMp(buffer.getMaxMp()); buffer.setTarget(player.getPet()); skill.getEffects(buffer, player.getPet(),false,false,false); //buffer.doCast(skill); buffer.setBusy(false); } else skill.getEffects(player, player.getPet(),false,false,false); } try { Thread.sleep(100); // Delay for the packet... } catch(InterruptedException e) { if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace(); } } } if(totaladena>0) player.reduceAdena("Buff", totaladena, null, true); if(_visitedPages.get(player.getObjectId())!=null) handleCommand(command,player,"Chat "+_visitedPages.get(player.getObjectId())); else useVoicedCommand(PowerPakConfig.BUFFER_COMMAND, player, ""); //SCHEMAS }else if (currentCommand.startsWith("menu")) { NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(PARENT_DIR + "menu.htm"); sendHtmlMessage(player, html); } // handles giving effects {support player, support pet, givebuffs} else if (currentCommand.startsWith("support")) { String targettype = st.nextToken(); showGiveBuffsWindow(player, targettype); } else if (currentCommand.startsWith("givebuffs")) { String targettype = st.nextToken(); String scheme_key = st.nextToken(); int cost = Integer.parseInt(st.nextToken()); if (cost == 0 || cost <= player.getInventory().getAdena()) { L2Character target = player; if (targettype.equalsIgnoreCase("pet")) target = player.getPet(); if (target != null) { for (L2Skill sk : CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key)) if(buffer!=null) { buffer.setBusy(true); buffer.setCurrentMp(buffer.getMaxMp()); buffer.setTarget(target); //buffer.doCast(skill); sk.getEffects(buffer, target,false,false,false); buffer.setBusy(false); } else sk.getEffects(target, target,false,false,false); //sk.getEffects(buffer, target); player.reduceAdena("NPC Buffer", cost, null, true); }else { player.sendMessage("Неправильная цель."); // go to main menu NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(PARENT_DIR + "menu.htm"); sendHtmlMessage(player, html); } } else { player.sendMessage("У вас не хватает адены."); showGiveBuffsWindow(player, targettype); } } // handles edit schemes {skillselect, skillunselect} else if (currentCommand.startsWith("editscheme")) { String skill_group = st.nextToken(); String scheme_key = null; try { scheme_key = st.nextToken(); } catch (Exception e) { if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace(); } showEditSchemeWindow(player, skill_group, scheme_key); } else if (currentCommand.startsWith("skill")) { String skill_group = st.nextToken(); String scheme_key = st.nextToken(); int skill_id = Integer.parseInt(st.nextToken()); int level = BufferSkillsTable.getInstance().getSkillLevelById(skill_id); if (currentCommand.startsWith("skillselect") && !scheme_key.equalsIgnoreCase("unselected")) { if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).size() < PowerPakConfig.NPCBUFFER_MAX_SKILLS) CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).add(SkillTable.getInstance().getInfo(skill_id, level)); else player.sendMessage("This scheme has reached maximun amount of buffs"); } else if (currentCommand.startsWith("skillunselect")) CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).remove(SkillTable.getInstance().getInfo(skill_id, level)); showEditSchemeWindow(player, skill_group, scheme_key); } // manage schemes {create, delete, clear} else if (currentCommand.startsWith("manageschemes")) showManageSchemeWindow(player); else if (currentCommand.startsWith("createscheme")) { if(!st.hasMoreTokens()){ player.sendMessage("Ошибка,неверное имя профиля."); showManageSchemeWindow(player); return; } String name = st.nextToken();; if (name.length() > 14) { player.sendMessage("Ошибка, название профиля должно содержать не более 14-ти символов."); showManageSchemeWindow(player); } else if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).size() == PowerPakConfig.NPCBUFFER_MAX_SCHEMES) { player.sendMessage("Ошибка, превышено число профилей."); showManageSchemeWindow(player); } else if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).containsKey(name)) { player.sendMessage("Ошибка, такой профиль уже создан."); showManageSchemeWindow(player); } else { if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null) CharSchemesTable.getInstance().getSchemesTable().put(player.getObjectId(), new FastMap<String, FastList<L2Skill>>(PowerPakConfig.NPCBUFFER_MAX_SCHEMES + 1)); CharSchemesTable.getInstance().setScheme(player.getObjectId(), name.trim(), new FastList<L2Skill>(PowerPakConfig.NPCBUFFER_MAX_SKILLS + 1)); showManageSchemeWindow(player); } } // handles deletion else if (currentCommand.startsWith("deletescheme")) { if(!st.hasMoreTokens()){ player.sendMessage("Ошибка,неверное имя профиля."); showManageSchemeWindow(player); return; } String name = st.nextToken(); if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).containsKey(name)) { CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).remove(name); showManageSchemeWindow(player); } } // handles cleanning else if (currentCommand.startsWith("clearscheme")) { if(!st.hasMoreTokens()){ player.sendMessage("Ошибка,неверное имя профиля."); showManageSchemeWindow(player); return; } String name = st.nextToken(); if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) != null && CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).containsKey(name)) { CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).get(name).clear(); showManageSchemeWindow(player); } } //predefined buffs else if (currentCommand.startsWith("fighterbuff") || currentCommand.startsWith("magebuff")) { ArrayList<L2Skill> skills_to_buff = new ArrayList<L2Skill>(); if(currentCommand.startsWith("magebuff")){ for(int skillId:PowerPakConfig.MAGE_SKILL_LIST.keySet()){ L2Skill skill = SkillTable.getInstance().getInfo(skillId, PowerPakConfig.MAGE_SKILL_LIST.get(skillId)); if(skill!=null) { skills_to_buff.add(skill); } } }else{ for(int skillId:PowerPakConfig.FIGHTER_SKILL_LIST.keySet()){ L2Skill skill = SkillTable.getInstance().getInfo(skillId, PowerPakConfig.FIGHTER_SKILL_LIST.get(skillId)); if(skill!=null) { skills_to_buff.add(skill); } } } String targettype = ""; if(st.hasMoreTokens()) targettype = st.nextToken(); int cost = 0; if(PowerPakConfig.BUFFER_PRICE>0) cost = PowerPakConfig.BUFFER_PRICE*skills_to_buff.size(); if (cost == 0 || cost <= player.getInventory().getAdena()) { L2Character target = player; if (targettype.equalsIgnoreCase("pet")) target = player.getPet(); if (target != null) { for (L2Skill sk : skills_to_buff) sk.getEffects(target, target,false,false,false); player.reduceAdena("NPC Buffer", cost, null, true); } else { player.sendMessage("Ошибка, не найден ваш слуга."); } } else { player.sendMessage("Не хватает адены."); } } } private static String [] _BBSCommand = {"bbsbuff"}; @Override public String[] getBBSCommands() { return _BBSCommand; } private void sendHtmlMessage(L2PcInstance player, NpcHtmlMessage html) { //html.replace("%objectId%", String.valueOf(getObjectId())); //html.replace("%npcId%", String.valueOf(getNpcId())); player.sendPacket(html); } /** * Sends an html packet to player with Give Buffs menu info for player and pet, depending on targettype parameter {player, pet} * * @param player * @param targettype */ private void showGiveBuffsWindow(L2PcInstance player, String targettype) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>Профиль " + targettype + "</title>"); tb.append("<body><br>"); FastMap<String, FastList<L2Skill>> map = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()); if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null || CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).isEmpty()) tb.append("У вас отсутствует профиль бафов, пожалуйста перейдите в раздел управления профилями и создайте свой профиль бафов."); else { int cost; tb.append("<table>"); for (FastMap.Entry<String, FastList<L2Skill>> e = map.head(), end = map.tail(); (e = e.getNext()) != end;) { cost = getFee(e.getValue()); tb.append("<tr><td width=\"90\"><a action=\"bypass -h custom_dobuff givebuffs " + targettype + " " + e.getKey() + " " + String.valueOf(cost) + "\">" + e.getKey() + "</a></td><td> Гонорар: " + String.valueOf(cost) + "</td></tr>"); } tb.append("</table>"); } tb.append("</body></html>"); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setHtml(tb.toString()); sendHtmlMessage(player, html); } /** * Sends an html packet to player with Manage scheme menu info. This allows player to create/delete/clear schemes * * @param player */ private void showManageSchemeWindow(L2PcInstance player) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>Управление профилями.</title>"); tb.append("<body><br>"); if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null || CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).isEmpty()) tb.append("<font color=\"LEVEL\">У вас отсутствуют профили бафов.</font><br>"); else { tb.append("<br><br><br><br>"); tb.append("<table>"); for (FastMap.Entry<String, FastList<L2Skill>> e = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).head(), end = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).tail(); (e = e.getNext()) != end;) { tb.append("<tr><td width=\"140\">" + e.getKey() + " (" + String.valueOf(CharSchemesTable.getInstance().getScheme(player.getObjectId(), e.getKey()).size()) + " skill(s))</td>"); tb.append("<td width=\"60\"><button value=\"Очистить\" action=\"bypass -h custom_dobuff clearscheme " + e.getKey() + "\" width=50 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"); tb.append("<td width=\"60\"><button value=\"Удалить\" action=\"bypass -h custom_dobuff deletescheme " + e.getKey() + "\" width=50 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); } } tb.append("<br><table width=240>"); tb.append("<tr><td><edit var=\"name\" width=120 height=15></td><td><button value=\"Создать\" action=\"bypass -h custom_dobuff createscheme $name\" width=50 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); tb.append("</table>"); tb.append("<br><font color=\"LEVEL\">Максимальное количество профилей - " + String.valueOf(PowerPakConfig.NPCBUFFER_MAX_SCHEMES) + "</font>"); tb.append("<br><br>"); tb.append("<a action=\"bypass -h custom_dobuff Chat 0\">Назад.</a>"); tb.append("</body></html>"); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setHtml(tb.toString()); sendHtmlMessage(player, html); } /** * This sends an html packet to player with Edit Scheme Menu info. This allows player to edit each created scheme (add/delete skills) * * @param player * @param skill_group * @param scheme_key */ private void showEditSchemeWindow(L2PcInstance player, String skill_group, String scheme_key) { NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(PARENT_DIR + "schememenu.htm"); html.replace("%typesframe%", getTypesFrame(scheme_key)); if (skill_group.equalsIgnoreCase("unselected")) { html.replace("%schemelistframe%", getPlayerSchemeListFrame(player, skill_group, scheme_key)); html.replace("%skilllistframe%", getGroupSkillListFrame(player, null, null)); html.replace("%myschemeframe%", getPlayerSkillListFrame(player, null, null)); } else { html.replace("%schemelistframe%", getPlayerSchemeListFrame(player, skill_group, scheme_key)); html.replace("%skilllistframe%", getGroupSkillListFrame(player, skill_group, scheme_key)); html.replace("%myschemeframe%", getPlayerSkillListFrame(player, skill_group, scheme_key)); } sendHtmlMessage(player, html); } /** * Returns a table with info about player's scheme list.<br> * If player scheme list is null, it returns a warning message */ private String getPlayerSchemeListFrame(L2PcInstance player, String skill_group, String scheme_key) { if (CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()) == null || CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).isEmpty()) return "<br> Пожалуйста создайте хотя бы один профиль бафов."; else { if (skill_group == null) skill_group = "def"; if (scheme_key == null) scheme_key = "def"; TextBuilder tb = new TextBuilder(); tb.append("<table>"); int count = 0; for (FastMap.Entry<String, FastList<L2Skill>> e = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).head(), end = CharSchemesTable.getInstance().getAllSchemes(player.getObjectId()).tail(); (e = e.getNext()) != end;) { if (count == 0) tb.append("<tr>"); tb.append("<td width=\"90\"><a action=\"bypass -h custom_dobuff editschemes " + skill_group + " " + e.getKey() + "\">" + e.getKey() + "</a></td>"); if (count == 3) { tb.append("</tr>"); count = 0; } count++; } if (!tb.toString().endsWith("</tr>")) tb.append("</tr>"); tb.append("</table>"); return tb.toString(); } } /** * @param player * @param skill_group * @param scheme_key * @return a table with info about skills stored in each skill_group */ private String getGroupSkillListFrame(L2PcInstance player, String skill_group, String scheme_key) { if (skill_group == null || skill_group == "unselected") return "Пожалуйста укажите группу бафов."; else if (scheme_key == null || scheme_key == "unselected") return "Пожалуйста укажите профиль бафов."; TextBuilder tb = new TextBuilder(); tb.append("<table>"); int count = 0; for (L2Skill sk : BufferSkillsTable.getInstance().getSkillsByType(skill_group)) { if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key) != null && !CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).isEmpty() && CharSchemesTable.getInstance().getSchemeContainsSkill(player.getObjectId(), scheme_key, sk.getId())) continue; if (count == 0) tb.append("<tr>"); tb.append("<td width=\"100\"><a action=\"bypass -h custom_dobuff skillselect " + skill_group + " " + scheme_key + " " + String.valueOf(sk.getId()) + "\">" + sk.getName() + " (" + String.valueOf(sk.getLevel()) + ")</a></td>"); if (count == 3) { tb.append("</tr>"); count = -1; } count++; } if (!tb.toString().endsWith("</tr>")) tb.append("</tr>"); tb.append("</table>"); return tb.toString(); } /** * @param player * @param skill_group * @param scheme_key * @return a table with info about selected skills */ private String getPlayerSkillListFrame(L2PcInstance player, String skill_group, String scheme_key) { if (skill_group == null || skill_group == "unselected") return "<br>Пожалуйста выберите группу бафов."; else if (scheme_key == null || scheme_key == "unselected") return "<br>Пожалуйста укажите группу бафов."; if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key) == null) return "Пожалуйста укажите профиль бафов."; if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).isEmpty()) return "Профиль пустой."; TextBuilder tb = new TextBuilder(); tb.append("Профиль: " + scheme_key + "<br>"); tb.append("<table>"); int count = 0; for (L2Skill sk : CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key)) { if (count == 0) tb.append("<tr>"); tb.append("<td><a action=\"bypass -h custom_dobuff skillunselect " + skill_group + " " + scheme_key + " " + String.valueOf(sk.getId()) + "\">" + sk.getName() + "</a></td>"); count++; if (count == 3) { tb.append("</tr>"); count = 0; } } if (!tb.toString().endsWith("<tr>")) tb.append("<tr>"); tb.append("</table>"); return tb.toString(); } /** * @param scheme_key * @return an string with skill_groups table. */ private String getTypesFrame(String scheme_key) { TextBuilder tb = new TextBuilder(); tb.append("<table>"); int count = 0; if (scheme_key == null) scheme_key = "unselected"; for (String s : BufferSkillsTable.getInstance().getSkillsTypeList()) { if (count == 0) tb.append("<tr>"); tb.append("<td width=\"90\"><a action=\"bypass -h custom_dobuff editscheme " + s + " " + scheme_key + "\">" + s + "</a></td>"); if (count == 2) { tb.append("</tr>"); count = -1; } count++; } if (!tb.toString().endsWith("</tr>")) tb.append("</tr>"); tb.append("</table>"); return tb.toString(); } /** * @param list * @return fee for all skills contained in list. */ private int getFee(FastList<L2Skill> list) { int fee = 0; if (PowerPakConfig.NPCBUFFER_STATIC_BUFF_COST >= 0) return list.size() * PowerPakConfig.NPCBUFFER_STATIC_BUFF_COST; else { for (L2Skill sk : list) fee += BufferSkillsTable.getInstance().getSkillFee(sk.getId()); return fee; } } } Вот скрипт, где тут строка которая скидывает мне профиль сохраненных бафоф при входе в игру?) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты