Jump to content

Search the Community

Showing results for tags 'NPC'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Lineage II Server Packs [Java]
  • Lineage II Server Packs [PTS]
  • Lineage II Server Scripts
  • Lineage II Client Scripts
  • Lineage II Items & Chars
  • Website Templates
  • DenArt Designs's Demo Updater

Forums

  • General Zone
    • Announcements and News
    • Newbies Introduce Urself
    • Maxcheaters Competitions & Events
    • Votes/Polls Area
    • Report Section
    • Downloads Section
  • Lineage II General Section
    • General Discussion [English]
    • Request Support [English]
  • Lineage II Hacks,Cheats and Bots
    • Hacks & Cheats [English]
    • Request Hacks & Cheats [English]
    • Botting [English]
    • Request Botting [English]
  • Lineage II Private Servers
    • L2Warage.com Classic X15 (Antharas) Opening: 2019-01-26
    • Private Servers
    • Buy Advertising Link #2
    • [Previews] L2 Private Servers
    • Clans and Alliances
  • Lineage II Marketplace
    • Marketplace [Items & Chars]
    • Marketplace [L2Packs & Files]
    • Marketplace [Powerlvl & Support]
  • Lineage II OFF Server Development
    • Server Development Discussion [L2OFF]
    • Request Server Development Help [L2OFF]
    • Server Shares & Files [L2OFF]
  • Lineage II Java Server Development
    • Server Development Discussion [L2J]
    • Request Server Development Help [L2J]
    • Server Shares & Files [L2J]
    • Private Projects [L2J]
  • Lineage II Client Development
    • Client Development Discussion
  • MMO Games
    • League of Legends
    • World Of Warcraft Area
    • Other Multiplayer Games
  • General Section
    • General Marketplace
    • Consoles/Mobiles/PDA Gaming Zone
    • Webmasters Zone
    • Hacking/Coding Zone
  • Graphics/GFX Zone
    • Graphics/GFX General Discussion
    • Graphics/GFX Showcase
    • Graphics/GFX Resources/Tools
  • VIP/SVIP/Donators Zone
    • VIPs/Donators Discussion
    • VIPs Lineage II
    • VIPs [GFX] Zone
    • VIPs Download Area
  • MaxCheaters Corner
    • Tech/World News
    • Off-Topics
    • Spam Topics
  • TEST's Topics
  • L2Classic Club's Just trying this thing out
  • Lineage 2 Revolution Club's Discussions
  • Lineage 2 Revolution Club's Tutorials
  • Lineage 2 Revolution Club's Request Help
  • DenArt Designs's Hello and welcome to my club!
  • DenArt Designs's News

Product Groups

  • Advertisements
  • Special Groups

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Found 18 results

  1. **Not Mine** Fafurion Grand Boss for Interlude (can be adapted for other chronicles aswell) System files only. Found on another forum Credits: ★BlackStar★ Link: [Hidden Content]
  2. Fast Preview: Download (3,17KB) :[Hidden Content] Credits: HappyLDE <npc id="9994" idTemplate="100912" name="Jolie" title=" Enchant Items"> <set name="level" val="70"/> <set name="radius" val="13"/> <set name="height" val="20"/> <set name="rHand" val="22"/> <set name="lHand" val="26"/> <set name="type" val="L2Npc"/> <set name="exp" val="0"/> <set name="sp" val="0"/> <set name="hp" val="2444.46819"/> <set name="mp" val="1345.8"/> <set name="hpRegen" val="7.5"/> <set name="mpRegen" val="2.7"/> <set name="pAtk" val="688.86373"/> <set name="pDef" val="295.91597"/> <set name="mAtk" val="470.40463"/> <set name="mDef" val="216.53847"/> <set name="crit" val="4"/> <set name="atkSpd" val="253"/> <set name="str" val="40"/> <set name="int" val="21"/> <set name="dex" val="30"/> <set name="wit" val="20"/> <set name="con" val="43"/> <set name="men" val="20"/> <set name="corpseTime" val="7"/> <set name="walkSpd" val="50"/> <set name="runSpd" val="120"/> <set name="dropHerbGroup" val="0"/> <set name="attackRange" val="40"/> <ai type="default" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" canMove="true" seedable="false"/> </npc>
  3. Hey guys i will re-share my npc's since my previous topic got locked. In this topic you will find : No.1 A freya npc pack with Gm Shop, Gatekeeper, Top PvP-Pk, Augmenter, Informer, Pk killer, Warehouse manager No.2 A H5 npc pack with Gm Shop, Gatekeeper, Top PvP-Pk, Augmenter, Warehouse manager No.3 A Buffer for Freya and H5 chronicle No.4 A Noblesse Manager for Freya chronicle No.5 A Color Manager for Freya chronicle No.6 A H5 npc pack with Color manager, Noblesse manager Ps. There are 2 posible passwords for rar files. Password No.1 is "NeverMore" . Password No.2 is "MaxCheaters" No.1 This is a pack which include Gm Shop, Gatekeeper, Top PvP-Pk, Augmenter, Informer, Pk killer and Warehouse manager. It will work proper for Freya chronicle. You can download it from here You can check some images of the npc's here No.2 This is a pack which include Gm Shop, Gatekeeper, Top PvP-Pk, Augmenter and Warehouse manager. It will work proper for H5 chronicle. You can download it from here You can check some images of the npc's here No.3 This is a Buffer for l2j servers. It will work proper for H5 and Freya chronicle. You can download it from here You can check some images of the npc here No.4 This is a Noblesse Manager for l2j servers. It will work proper for Freya chronicle. You can download it from here You can check some images of the npc here No.5 This is a Color Manager for l2j servers. It will work proper for Freya chronicle. You can download it from here You can check some images of the npc here No.6 This is a pack which include Color manager and Noblesse manager. It will work proper for H5 chronicle. You can download it from here You can check some images of the npc's here Well all this npc's are made by NeverMore (me). Report me any bug or problem. Have fun using them. THE END
  4. Hi everyone, I've been exporting hellbound monsters from Freya client to Interlude client, textures, meshes, sounds, the entire pack. But there is one monster that I belieave it isn't as easy as everything else. Im talking about the SandStorm. SandStorm monster is a Skeleton Pikeman with a SandStorm on top of him, and I don't know how to put a Sandstorm on top of him. This is Skeleton Pikemon. This is the SandStorm. Can someone help me? I've been working with UnrealEd 3.0 (it lets me import and create meshes and animations and simply copy paste them in the Lineage2 folder) Thanks in advance.
  5. Fast Preview: Download: [Hidden Content] Credits: TheVainglorious
  6. Fast Preview: Download: [Hidden Content] Credits: TheVainglorious
  7. GroundSpeed=120.00 DrawScale=0.38 CollisionRadius=10.00 CollisionHeight=23.00 download link: https://www.mediafire.com/file/fsnm6pfg7r26jz4/L2NPCs_Hera.rar
  8. So...a guy pmed me and asked for these npc's: Acis Redesigned Npc's I searched for those files and I was lucky enough. I found everything and I decided to upload them and share them with y'all. Newbie Services Buffer Welcome message, servernews. Admin Augment Skills Info Antibot Prevention System NPC's These were made exclusively for L2jNetwork , a project made by Baggos and others. Since you can find them in that project , there's no reason to not upload them. It's much easier to download all the npc's instead of searching them 1 by 1. Download
  9. Hello im sure that im in wrong topic , but please move it. Iam looking for a community board like l2neo.com zaken x15. for classic seven sings client. i want exactly the same if possible. is there any share or smth? , also i can pay
  10. Hello guys , I've been working on html designs lately and I've decided to post one here with you. I've created an Augmenter NPC [Acis] Download
  11. another custom manager, that shows status (alive or respawn estimating time) of any raidboss in da game. originally status is 'divided' onto two individual lists: private static final int[] RBOSSES = {25418,25434,25126}; private static int MBOSS = 25126;MBOSS main boss (one and only).RBOSSES list of additional bosses (as many as you want). preview: http://s1.postimg.org/dqli7zcf2/rbstatus_preview.jpg ps. credits to daffynash who spared some of you the tedious work by creating the patch. ### Eclipse Workspace Patch 1.0 #P aCis_datapack Index: data/xml/npcs/50000-50999.xml =================================================================== --- data/xml/npcs/50000-50999.xml (revision 6) +++ data/xml/npcs/50000-50999.xml (working copy) @@ -1,5 +1,38 @@ <?xml version="1.0" encoding="utf-8"?> <list> + <npc id="50001" idTemplate="25449" name="BOSS STATUS" title="L2EUPHORIA.COM"> + <set name="level" val="80"/> + <set name="radius" val="15"/> + <set name="height" val="28"/> + <set name="rHand" val="0"/> + <set name="lHand" val="0"/> + <set name="type" val="L2RaidBossStatus"/> + <set name="exp" val="0"/> + <set name="sp" val="0"/> + <set name="hp" val="5000"/> + <set name="mp" val="2500"/> + <set name="hpRegen" val="8"/> + <set name="mpRegen" val="8"/> + <set name="pAtk" val="100"/> + <set name="pDef" val="100"/> + <set name="mAtk" val="100"/> + <set name="mDef" val="100"/> + <set name="crit" val="4"/> + <set name="atkSpd" val="253"/> + <set name="str" val="40"/> + <set name="int" val="21"/> + <set name="dex" val="30"/> + <set name="wit" val="20"/> + <set name="con" val="43"/> + <set name="men" val="20"/> + <set name="corpseTime" val="7"/> + <set name="walkSpd" val="50"/> + <set name="runSpd" val="120"/> + <set name="dropHerbGroup" val="0"/> + <set name="attackRange" val="40"/> + <ai type="default" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" canMove="false" seedable="false"/> + </npc> + <npc id="50006" idTemplate="31228" name="Roy the Cat" title="Class Manager"> <set name="level" val="70"/> <set name="radius" val="9"/> Index: data/html/mods/RaidBossStatus/50001.htm =================================================================== --- data/html/mods/RaidBossStatus/50001.htm (revision 0) +++ data/html/mods/RaidBossStatus/50001.htm (working copy) @@ -0,0 +1,21 @@ +<html><title>BOSS STATUS</title><body> +<br><table width=300><tr><td align=center> +<img src="L2UI_CH3.herotower_deco" width=256 height=32> + +<br><br><br><br> +<font color=a2a0a2>ancient scrolls reveals truth of their return +<br1>defeat was merely delay ...</font> +</td></tr></table> + +<br> +<img src=L2UI.SquareGray width=300 height=1> +<table width=300 height=27 bgcolor="000000"> + <tr> + <td align=center width=300>%mboss%</td> + </tr> +</table> +<img src=L2UI.SquareGray width=300 height=1> + +<br> +<center>%bosslist%</center> +</body></html> \ No newline at end of file #P aCis_gameserver Index: java/net/sf/l2j/gameserver/instancemanager/RaidBossSpawnManager.java =================================================================== --- java/net/sf/l2j/gameserver/instancemanager/RaidBossSpawnManager.java (revision 9) +++ java/net/sf/l2j/gameserver/instancemanager/RaidBossSpawnManager.java (working copy) @@ -45,6 +45,7 @@ protected final static Map<Integer, L2RaidBossInstance> _bosses = new HashMap<>(); protected final static Map<Integer, L2Spawn> _spawns = new HashMap<>(); + protected final static Map<Integer, Long> _respawns = new HashMap<>(); protected final static Map<Integer, StatsSet> _storedInfo = new HashMap<>(); protected final static Map<Integer, ScheduledFuture<?>> _schedules = new HashMap<>(); @@ -142,6 +143,7 @@ _log.info("RaidBoss: " + raidboss.getName() + " has spawned."); _bosses.put(bossId, raidboss); + _respawns.put(bossId,0L); } _schedules.remove(bossId); @@ -148,6 +150,14 @@ } } + public long getRespawntime(int id) + { + if(_respawns.containsKey(id)) + return _respawns.get(id); + + return -1; + } + public void updateStatus(L2RaidBossInstance boss, boolean isBossDead) { if (!_storedInfo.containsKey(boss.getNpcId())) @@ -171,6 +181,7 @@ { _log.info("RaidBoss: " + boss.getName() + " - " + StringUtil.DATE_MM.format(respawnTime) + " (" + respawnDelay + "h)."); + _respawns.put(boss.getNpcId(), Calendar.getInstance().getTimeInMillis() + (respawnDelay * 3600000L)); _schedules.put(boss.getNpcId(), ThreadPoolManager.getInstance().scheduleGeneral(new spawnSchedule(boss.getNpcId()), respawnDelay * 3600000)); updateDb(); } @@ -179,6 +190,8 @@ { boss.setRaidStatus(StatusEnum.ALIVE); + _respawns.put(boss.getNpcId(), 0L); + info.set("currentHP", boss.getCurrentHp()); info.set("currentMP", boss.getCurrentMp()); info.set("respawnTime", 0L); @@ -226,11 +239,13 @@ info.set("respawnTime", 0L); _storedInfo.put(bossId, info); + _respawns.put(bossId, 0L); } } else { long spawnTime = respawnTime - Calendar.getInstance().getTimeInMillis(); + _respawns.put(bossId,respawnTime); _schedules.put(bossId, ThreadPoolManager.getInstance().scheduleGeneral(new spawnSchedule(bossId), spawnTime)); } @@ -272,6 +287,9 @@ SpawnTable.getInstance().deleteSpawn(spawnDat, false); _spawns.remove(bossId); + if (_respawns.containsKey(bossId)) + _respawns.remove(bossId); + if (_bosses.containsKey(bossId)) _bosses.remove(bossId); @@ -412,6 +430,7 @@ _schedules.clear(); } + _respawns.clear(); _storedInfo.clear(); _spawns.clear(); } Index: java/net/sf/l2j/gameserver/model/actor/instance/L2RaidBossStatusInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2RaidBossStatusInstance.java (revision 0) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2RaidBossStatusInstance.java (working copy) @@ -0,0 +1,126 @@ +/* + * 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 net.sf.l2j.gameserver.model.actor.instance; + +import java.util.Calendar; +import net.sf.l2j.gameserver.cache.HtmCache; +import net.sf.l2j.gameserver.datatables.NpcTable; +import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager; +import net.sf.l2j.gameserver.model.actor.template.NpcTemplate; +import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; + +public class L2RaidBossStatusInstance extends L2NpcInstance +{ + private static final int[] RBOSSES = {25418,25434,25126}; + private static int MBOSS = 25126; + + public L2RaidBossStatusInstance(int objectId, NpcTemplate template) + { + super(objectId, template); + } + + @Override + public void showChatWindow(L2PcInstance player) + { + generateFirstWindow(player); + } + + private void generateFirstWindow(L2PcInstance activeChar) + { + final StringBuilder sb = new StringBuilder(); + + for(int rboss : RBOSSES) + { + + long delay = RaidBossSpawnManager.getInstance().getRespawntime(rboss); + String name = NpcTable.getInstance().getTemplate(rboss).getName().toUpperCase(); + + if (delay==0) + { + sb.append("<font color=\"b09979\">"+name +" IS ALIVE!</font><br1>"); + } + else if (delay<0) + { + sb.append("<font color=\"FF0000\"> "+name +" IS DEAD.</font><br1>"); + } + else + { + delay = RaidBossSpawnManager.getInstance().getRespawntime(rboss) - Calendar.getInstance().getTimeInMillis(); + sb.append("<font color=\"b09979\">"+name+"</font> "+ConverTime(delay)+" <font color=\"b09979\">TO RESPAWN.</font><br1>"); + } + } + + long m_delay = RaidBossSpawnManager.getInstance().getRespawntime(MBOSS); + String m_name = NpcTable.getInstance().getTemplate(MBOSS).getName().toUpperCase(); + + String mainBossInfo =""; + + if (m_delay==0) + { + mainBossInfo = "WE SHOULD HAVE ACTED<br1><font color=\"b09979\">"+m_name+" IS ALIVE!</font><br1>"; + } + else if (m_delay<0) + { + mainBossInfo = "IT'S ALL OVER<br1><font color=\"FF0000\"> "+m_name+" IS DEAD.</font><br1>"; + } + else + { + m_delay = m_delay - Calendar.getInstance().getTimeInMillis(); + mainBossInfo = "<font color=\"b09979\">"+ConverTime(m_delay)+"</font><br1>UNTIL OBLIVION OPEN!"; + } + + NpcHtmlMessage html = new NpcHtmlMessage(1); + html.setFile(getHtmlPath(getNpcId(), 0)); + html.replace("%objectId%", getObjectId()); + html.replace("%bosslist%", sb.toString()); + html.replace("%mboss%", mainBossInfo); + activeChar.sendPacket(html); + } + + private static String ConverTime(long mseconds) + { + long remainder = mseconds; + + long hours = (long)Math.ceil((mseconds/(60*60*1000))); + remainder = mseconds - (hours*60*60*1000); + + long minutes = (long)Math.ceil((remainder / (60*1000))); + remainder = remainder -(minutes *(60*1000)); + + long seconds = (long)Math.ceil((remainder / 1000)); + + return hours+":"+minutes+":"+seconds; + } + + @Override + public String getHtmlPath(int npcId, int val) + { + String filename; + + if (val == 0) + filename = "data/html/mods/RaidBossStatus/" + npcId + ".htm"; + else + filename = "data/html/mods/RaidBossStatus/" + npcId + "-" + val + ".htm"; + + if (HtmCache.getInstance().isLoadable(filename)) + return filename; + + return "data/html/mods/RaidBossStatus/" + npcId + ".htm"; + } +} \ No newline at end of file
  12. Kalhspera. edw pera ine 1 donate manager. apo ton l2sayn to exw vgalei kai to dinw se esas. parakalw mhn krazete. :D Code: http://pastebin.com/tuWcQAXQ EDIT: 3exasa na valw to name sto Instance. valte L2DonateShopInstance (ADAPTED FOR L2JACIS http://pastebin.com/6d9P4wm1 ) by member l2jkain SCREENSHOTS Download: Gia na doulepsi to code prepei na valete auta ta arxia. Click Me Diavaste to ReadMe.txt To sql uparxi sto arxio. To Donate Coin exei id 1704 Ean vgalei kapoio provlima kalo einai na kanete 1 post se auto to topic gia na to checkarw. :) Doulevei sto l2jfrozen last rev. twra gia prohgoumena den 3erw. :D UPDATED** //augment command http://www.maxcheaters.com/topic/207755-l2jfrozen-augment-command/ CREDITS: fofas
  13. Someone is selling this here: http://maxcheaters.com/forum/index.php?topic=249861.0 You don't need to give 10 euros for this. Create a class in the instances with name L2PscDonateInstance and add this code inside it. Thank make the npc type to L2PscDonate and spawn the npc. /* * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>. */ package com.l2jfrozen.gameserver.model.actor.instance; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.Collection; import java.util.StringTokenizer; import com.l2jfrozen.gameserver.model.L2World; import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jfrozen.gameserver.templates.L2NpcTemplate; import javolution.text.TextBuilder; /** * @author Autos! 1-0 * */ public class L2PscDonateInstance extends L2FolkInstance { public L2PscDonateInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(final L2PcInstance player, String command) { if(player == null) { return; } if(command.startsWith("dlist")) { info(player); } if(command.startsWith("donate")) { StringTokenizer st = new StringTokenizer(command); st.nextToken(); String amount = null; int pin1 = 0; int pin2 = 0; int pin3 = 0; int pin4 = 0; String message = ""; try { amount = st.nextToken(); pin1 = Integer.parseInt(st.nextToken()); pin2 = Integer.parseInt(st.nextToken()); pin3 = Integer.parseInt(st.nextToken()); pin4 = Integer.parseInt(st.nextToken()); while(st.hasMoreTokens()) message = message + st.nextToken() + " "; String fname = "data/donates/"+player.getName()+".txt"; File file = new File(fname); boolean exist = file.createNewFile(); if(!exist) { player.sendMessage("You have already sent a donation , GMs must check it first"); return; } FileWriter fstream = new FileWriter(fname); BufferedWriter out = new BufferedWriter(fstream); out.write("Character Info: [Character: "+ player.getName() +"["+ player.getObjectId()+"] - Account: "+ player.getAccountName()+" - IP: "+player.getClient().getConnection().getInetAddress().getHostAddress()+"]\nMessage : donate "+ amount +" "+ message + " "+ pin1+ " "+ pin2+ " "+ pin3+ " "+ pin4); out.close(); player.sendMessage("Donation sent. GMs will check it soon. Thanks..."); Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers(); for (L2PcInstance gms : pls) { if(gms.isGM()) gms.sendMessage(player.getName() +" sent a donation."); } } catch(Exception e) { e.printStackTrace(); } } } @Override public void onAction(L2PcInstance player) { if (!canTarget(player)) { return; } showHtmlWindow(player); } private void showHtmlWindow(L2PcInstance activeChar) { TextBuilder tb = new TextBuilder(); NpcHtmlMessage html = new NpcHtmlMessage(1); tb.append("<html><head><title>Donation Manager</title></head><body><center><table width=\"250\" bgcolor=\"000000\"><tr><td align=center><font color=\"6fd3d1\">Easy Donation With Paysafe Card</font></td></tr></table>_______________________________________<br><br><table width=\"250\"><tr><td><font color=\"ddc16d\">Select Donation Amount:</font></td><td><combobox width=80 height=17 var=amount list=10-Euro;25-Euro;50-Euro;100-Euro;></td></tr></table><br><br><font color=\"ddc16d\">Paysafe Card Pin:</font><table width=\"250\"><tr><td><edit var=\"pin1\" width=50 height=12 type=number></td><td><edit var=\"pin2\" width=50 height=12 type=number></td><td><edit var=\"pin3\" width=50 height=12 type=number></td><td><edit var=\"pin4\" width=50 height=12 type=number></td></table><br><br><multiedit var=\"message\" width=240 height=40><br><br><button value=\"Donate!\" action=\"bypass -h npc_"+getObjectId()+"_donate $amount $pin1 $pin2 $pin3 $pin4 $message\" width=95 height=21 back=\"bigbutton_over\" fore=\"bigbutton\"><br><button value=\"Donation List\" action=\"bypass -h npc_"+getObjectId()+"_dlist\" width=95 height=21 back=\"bigbutton_over\" fore=\"bigbutton\"><br><font color=\"a1df64\">Created by KnipeX (if he says so, huh)</font></center></body></html>"); html.setHtml(tb.toString()); activeChar.sendPacket(html); } private void info(L2PcInstance activeChar) { TextBuilder tb = new TextBuilder(); NpcHtmlMessage html = new NpcHtmlMessage(1); tb.append("<html><head><title>Donation Manager</title></head><body><center>Info goes here</center></body></html>"); html.setHtml(tb.toString()); activeChar.sendPacket(html); } }
  14. Hi to all, 2019 Year on Eastern calendar is Year of the Pig. I want to share for people one nice NPC with interesting idea, with effects and with sounds for FREE. On NPC you can see animation of hat and reflection effect on pig. This addon is for Interlude and Hight Five chronicles, but if you want - you can edit npcgrp lines for another chronicles or you can write me in skype Support_La2-Pro and I will help you. If you need unique mods for christmas or New Year - you can write me in skype too. I can make for your project any cool mods and I can help in any client questions. In archieve you can find files for client and data for database. If you like this - make me a good post in topic, and make me one good point of reputation. Thanks. Addon is free for all. In you have any questions - write me and I will get you a response.
  15. Hello guys, nothing special but it's not shared here this code for IL and a lot of people don't know how to do it since i added it on my project yesterday i decided to share it here with you. Here is preview images: Go to net.sf.l2j.gameserver.model.actor.L2Npc.java find: @Override public void onActionShift(L2PcInstance player) { // Check if the L2PcInstance is a GM if (player.isGM()) { final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile("data/html/admin/npcinfo.htm"); html.replace("%class%", getClass().getSimpleName()); html.replace("%id%", getTemplate().getNpcId()); html.replace("%lvl%", getTemplate().getLevel()); html.replace("%name%", getTemplate().getName()); html.replace("%race%", getTemplate().getRace().toString()); html.replace("%tmplid%", getTemplate().getIdTemplate()); html.replace("%aggro%", (this instanceof L2Attackable) ? ((L2Attackable) this).getAggroRange() : 0); html.replace("%corpse%", getTemplate().getCorpseTime()); html.replace("%enchant%", getTemplate().getEnchantEffect()); html.replace("%hp%", (int) getCurrentHp()); html.replace("%hpmax%", getMaxHp()); html.replace("%mp%", (int) getCurrentMp()); html.replace("%mpmax%", getMaxMp()); html.replace("%patk%", getPAtk(null)); html.replace("%matk%", getMAtk(null, null)); html.replace("%pdef%", getPDef(null)); html.replace("%mdef%", getMDef(null, null)); html.replace("%accu%", getAccuracy()); html.replace("%evas%", getEvasionRate(null)); html.replace("%crit%", getCriticalHit(null, null)); html.replace("%rspd%", getRunSpeed()); html.replace("%aspd%", getPAtkSpd()); html.replace("%cspd%", getMAtkSpd()); html.replace("%str%", getSTR()); html.replace("%dex%", getDEX()); html.replace("%con%", getCON()); html.replace("%int%", getINT()); html.replace("%wit%", getWIT()); html.replace("%men%", getMEN()); html.replace("%loc%", getX() + " " + getY() + " " + getZ()); html.replace("%dist%", (int) Math.sqrt(player.getDistanceSq(this))); html.replace("%ele_fire%", getDefenseElementValue((byte) 2)); html.replace("%ele_water%", getDefenseElementValue((byte) 3)); html.replace("%ele_wind%", getDefenseElementValue((byte) 1)); html.replace("%ele_earth%", getDefenseElementValue((byte) 4)); html.replace("%ele_holy%", getDefenseElementValue((byte) 5)); html.replace("%ele_dark%", getDefenseElementValue((byte) 6)); if (getSpawn() != null) { html.replace("%spawn%", getSpawn().getLocx() + " " + getSpawn().getLocy() + " " + getSpawn().getLocz()); html.replace("%loc2d%", (int) Math.sqrt(getPlanDistanceSq(getSpawn().getLocx(), getSpawn().getLocy()))); html.replace("%loc3d%", (int) Math.sqrt(getDistanceSq(getSpawn().getLocx(), getSpawn().getLocy(), getSpawn().getLocz()))); html.replace("%resp%", getSpawn().getRespawnDelay() / 1000); html.replace("%rand_resp%", getSpawn().getRandomRespawnDelay()); } else { html.replace("%spawn%", "<font color=FF0000>null</font>"); html.replace("%loc2d%", "<font color=FF0000>--</font>"); html.replace("%loc3d%", "<font color=FF0000>--</font>"); html.replace("%resp%", "<font color=FF0000>--</font>"); html.replace("%rand_resp%", "<font color=FF0000>--</font>"); } if (hasAI()) { html.replace("%ai_intention%", "<font color=\"LEVEL\">Intention</font><table width=\"100%\"><tr><td><font color=\"LEVEL\">Intention:</font></td><td>" + getAI().getIntention().name() + "</td></tr>"); html.replace("%ai%", "<tr><td><font color=\"LEVEL\">AI:</font></td><td>" + getAI().getClass().getSimpleName() + "</td></tr></table><br>"); } else { html.replace("%ai_intention%", ""); html.replace("%ai%", ""); } html.replace("%ai_type%", getAiType().name()); html.replace("%ai_clan%", (getClans() != null) ? "<tr><td width=100><font color=\"LEVEL\">Clan:</font></td><td align=right width=170>" + Arrays.toString(getClans()) + " " + getClanRange() + "</td></tr>" + ((getIgnoredIds() != null) ? "<tr><td width=100><font color=\"LEVEL\">Ignored ids:</font></td><td align=right width=170>" + Arrays.toString(getIgnoredIds()) + "</td></tr>" : "") : ""); html.replace("%ai_move%", String.valueOf(canMove())); html.replace("%ai_seed%", String.valueOf(isSeedable())); html.replace("%ai_ssinfo%", _currentSsCount + "[" + getSsCount() + "] - " + getSsRate() + "%"); html.replace("%ai_spsinfo%", _currentSpsCount + "[" + getSpsCount() + "] - " + getSpsRate() + "%"); html.replace("%butt%", ((this instanceof L2MerchantInstance) ? "<button value=\"Shop\" action=\"bypass -h admin_show_shop " + getNpcId() + "\" width=65 height=19 back=\"L2UI_ch3.smallbutton2_over\" fore=\"L2UI_ch3.smallbutton2\">" : "")); player.sendPacket(html); player.sendPacket(ActionFailed.STATIC_PACKET); } Below add: else if (Config.ENABLE_SHIFT_CLICK_TO_NPCS) { final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile("data/html/mods/npcinfo.htm"); html.replace("%class%", getClass().getSimpleName()); html.replace("%id%", getTemplate().getNpcId()); html.replace("%lvl%", getTemplate().getLevel()); html.replace("%name%", getTemplate().getName()); html.replace("%race%", getTemplate().getRace().toString()); html.replace("%tmplid%", getTemplate().getIdTemplate()); html.replace("%aggro%", getTemplate().getAggroRange()); html.replace("%corpse%", StringUtil.getTimeStamp(getTemplate().getCorpseTime())); html.replace("%enchant%", getTemplate().getEnchantEffect()); html.replace("%hp%", (int) getCurrentHp()); html.replace("%hpmax%", getMaxHp()); html.replace("%mp%", (int) getCurrentMp()); html.replace("%mpmax%", getMaxMp()); html.replace("%patk%", getPAtk(null)); html.replace("%matk%", getMAtk(null, null)); html.replace("%pdef%", getPDef(null)); html.replace("%mdef%", getMDef(null, null)); html.replace("%accu%", getAccuracy()); html.replace("%evas%", getEvasionRate(null)); html.replace("%crit%", getCriticalHit(null, null)); html.replace("%rspd%", getWalkSpeed()); html.replace("%aspd%", getPAtkSpd()); html.replace("%cspd%", getMAtkSpd()); player.sendPacket(html); } Now the Configs public static boolean ENABLE_SHIFT_CLICK_TO_NPCS; ENABLE_SHIFT_CLICK_TO_NPCS = npcs.getProperty("EnableShiftClickToNpcs", false); # ============================================= # Shift + Click to NPC(s) # ============================================= # Enable showing NPC(s) info by Shift + Click # on NPC(s)? # Default: False EnableShiftClickToNpcs = True The voicedcommand Create new class called ShiftClickToNpc inside paste /* * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>. */ package net.sf.l2j.gameserver.handler.voicedcommandhandlers; import java.util.StringTokenizer; import net.sf.l2j.commons.lang.StringUtil; import net.sf.l2j.gameserver.datatables.ItemTable; import net.sf.l2j.gameserver.datatables.NpcTable; import net.sf.l2j.gameserver.handler.IVoicedCommandHandler; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.actor.template.NpcTemplate; import net.sf.l2j.gameserver.model.item.DropCategory; import net.sf.l2j.gameserver.model.item.DropData; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; /** * @author Designatix * */ public class ShiftClickToNpc implements IVoicedCommandHandler { private static final int PAGE_LIMIT = 20; private static String[] _voicedCommands = { "show_droplist" }; @Override public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) { final StringTokenizer st = new StringTokenizer(command, " "); st.nextToken(); if (command.startsWith("show_droplist")) { try { int npcId = Integer.parseInt(st.nextToken()); int page = (st.hasMoreTokens()) ? Integer.parseInt(st.nextToken()) : 1; showNpcDropList(activeChar, npcId, page); } catch (Exception e) { activeChar.sendMessage("Usage: .show_droplist <npc_id> [<page>]"); } } return true; } private static void showNpcDropList(L2PcInstance activeChar, int npcId, int page) { final NpcTemplate npcData = NpcTable.getInstance().getTemplate(npcId); if (npcData == null) { activeChar.sendMessage("Npc template is unknown for id: " + npcId + "."); return; } final StringBuilder sb = new StringBuilder(2000); StringUtil.append(sb, "<html><title>Show droplist page ", page, "</title><body><center><font color=\"LEVEL\">", npcData.getName(), " (", npcId, ")</font></center><br>"); if (!npcData.getDropData().isEmpty()) { sb.append("Drop type legend: <font color=\"3BB9FF\">Drop</font> | <font color=\"00ff00\">Sweep</font><br><table><tr><td width=25>cat.</td><td width=45>item</td><td width=45>drop count</td></tr>"); int myPage = 1; int i = 0; int shown = 0; boolean hasMore = false; for (DropCategory cat : npcData.getDropData()) { if (shown == PAGE_LIMIT) { hasMore = true; break; } for (DropData drop : cat.getAllDrops()) { if (myPage != page) { i++; if (i == PAGE_LIMIT) { myPage++; i = 0; } continue; } if (shown == PAGE_LIMIT) { hasMore = true; break; } StringUtil.append(sb, "<tr><td><font color=\"", ((cat.isSweep()) ? "00FF00" : "3BB9FF"), "\">", cat.getCategoryType(), "</td><td>", ItemTable.getInstance().getTemplate(drop.getItemId()).getName(), " (", drop.getMinDrop(), ", ", drop.getMaxDrop(), ")</td></tr>"); shown++; } } sb.append("</table><table width=\"100%\" bgcolor=666666><tr>"); if (page > 1) { StringUtil.append(sb, "<td width=120><a action=\"bypass -h voiced_show_droplist ", npcId, " ", page - 1, "\">Prev Page</a></td>"); if (!hasMore) StringUtil.append(sb, "<td width=100>Page ", page, "</td><td width=70></td></tr>"); } if (hasMore) { if (page <= 1) sb.append("<td width=120></td>"); StringUtil.append(sb, "<td width=100>Page ", page, "</td><td width=70><a action=\"bypass -h voiced_show_droplist ", npcId, " ", page + 1, "\">Next Page</a></td></tr>"); } sb.append("</table>"); } else sb.append("This NPC has no drops."); sb.append("</body></html>"); final NpcHtmlMessage html = new NpcHtmlMessage(0); html.setHtml(sb.toString()); activeChar.sendPacket(html); } @Override public String[] getVoicedCommandList() { return _voicedCommands; } } Import the voicedcommand on net.sf.l2j.gameserver.handler.VoicedCommandHandler.java import net.sf.l2j.gameserver.handler.voicedcommandhandlers.ShiftClickToNpc; if (Config.ENABLE_SHIFT_CLICK_TO_NPCS) { registerHandler(new ShiftClickToNpc()); } And now go to your dp > data/html/mods and create new file called npcinfo.htm and inside paste <html><title>NPC Info</title><body> <center> <table width="100%"> <tr> <td align=center> <button value="Show Droplist" action="bypass -h voiced_show_droplist %id%" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3"> </td> </tr> </table> <br><img src="L2UI.SquareWhite" width=260 height=1><br> <font color="LEVEL">General Informations</font> <table width="100%"> <tr><td><font color="LEVEL">Name:</font></td><td>%name%</td></tr> <tr><td><font color="LEVEL">Level:</font></td><td>%lvl%</td></tr> <tr><td><font color="LEVEL">Type:</font></td><td>%class%</td></tr> <tr><td><font color="LEVEL">Race:</font></td><td>%race%</td></tr> </table><br> <font color="LEVEL">Aggro Informations</font> <table width="100%"> <tr><td width=100><font color="LEVEL">Aggro:</font></td><td align=right width=170>%aggro%</td></tr> </table><br> <font color="LEVEL">Combat Informations</font> <table width="100%"> <tr><td><font color="LEVEL">HP:</font></td><td><font color=FF4040>%hp%/%hpmax%</font></td><td><font color="LEVEL">MP:</font></td><td><font color=6161FF>%mp%/%mpmax%</font></td></tr> <tr><td>P.Atk.</td><td>%patk%</td><td>M.Atk.</td><td>%matk%</td></tr> <tr><td>P.Def.</td><td>%pdef%</td><td>M.Def.</td><td>%mdef%</td></tr> <tr><td>Accuracy</td><td>%accu%</td><td>Evasion</td><td>%evas%</td></tr> <tr><td>Critical</td><td>%crit%</td><td>Speed</td><td>%rspd%</td></tr> <tr><td>Atk.Spd</td><td>%aspd%</td><td>Cast.Spd</td><td>%cspd%</td></tr> </table><br> <br><img src="L2UI.SquareWhite" width=260 height=1><br> </center> </body></html> Have Fun!
  16. Hello guys some days ago i was searching for npc's/mob's for a friend of mine i did found some and i'd like to share em with You guys xD i will still search from time to time so i will update this thread once in a while :) i hope you find this helpful ;) (i added credits. so... i hope this thread don't get deleted) :forever alone like a boss: Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Pic: Video: Download link: Here Credits: CymBals Pic: Video: Download link: Here Credits: CymBals Pic: Download link: Here Credits: CymBals Pic: Download link: Here Credits: CymBals Updated: 7/6/2014: Pic: Download link: Here Credits: TheVainglorious Pic: Download link: Here Credits: TheVainglorious Updated: 10/6/2014: Pic: Download link: Here Credits: WariinG (Perfect Team) Pic: Download link: Here Credits: WariinG (Perfect Team) Pic: Download link: Here Credits: WariinG (Perfect Team) Pic: Download link: Here Credits: WariinG (Perfect Team) Pic: Download link: Here Credits: Credits: WariinG (Perfect Team) i won't update anymore i reached the maximum picture capability ;) i hope i helped some ppl :forever alone like a boss:
  17. Index: dist/game/data/scripts.cfg =================================================================== --- dist/game/data/scripts.cfg (revision 10413) +++ dist/game/data/scripts.cfg (working copy) @@ -310,6 +310,7 @@ custom/ShadowWeapons/ShadowWeapons.java custom/NewbieCoupons/NewbieCoupons.java custom/RaidbossInfo/RaidbossInfo.java +custom/NpcBuffer/NpcBuffer.java custom/NpcLocationInfo/NpcLocationInfo.java custom/Validators/SubClassSkills.java Index: dist/game/data/scripts/custom/NpcBuffer/NpcBuffer.java =================================================================== --- dist/game/data/scripts/custom/NpcBuffer/NpcBuffer.java (revision 0) +++ dist/game/data/scripts/custom/NpcBuffer/NpcBuffer.java (working copy) @@ -0,0 +1,1970 @@ +/* + * Copyright (C) 2004-2014 L2J DataPack + * + * This file is part of L2J DataPack. + * + * L2J DataPack 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 3 of the License, or + * (at your option) any later version. + * + * L2J DataPack 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, see <http://www.gnu.org/licenses/>. + */ +package custom.NpcBuffer; + +import static com.l2jserver.gameserver.util.Util.formatAdena; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.l2jserver.Config; +import com.l2jserver.L2DatabaseFactory; +import com.l2jserver.gameserver.datatables.SkillData; +import com.l2jserver.gameserver.instancemanager.QuestManager; +import com.l2jserver.gameserver.model.actor.L2Npc; +import com.l2jserver.gameserver.model.actor.L2Summon; +import com.l2jserver.gameserver.model.actor.instance.L2CubicInstance; +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.actor.instance.L2PetInstance; +import com.l2jserver.gameserver.model.actor.instance.L2ServitorInstance; +import com.l2jserver.gameserver.model.actor.stat.PcStat; +import com.l2jserver.gameserver.model.actor.stat.SummonStat; +import com.l2jserver.gameserver.model.actor.status.PcStatus; +import com.l2jserver.gameserver.model.actor.status.SummonStatus; +import com.l2jserver.gameserver.model.effects.L2EffectType; +import com.l2jserver.gameserver.model.entity.TvTEvent; +import com.l2jserver.gameserver.model.olympiad.OlympiadManager; +import com.l2jserver.gameserver.model.quest.Quest; +import com.l2jserver.gameserver.model.quest.QuestState; +import com.l2jserver.gameserver.model.skills.Skill; +import com.l2jserver.gameserver.network.SystemMessageId; +import com.l2jserver.gameserver.network.serverpackets.ActionFailed; +import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse; +import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage; +import com.l2jserver.gameserver.network.serverpackets.SetSummonRemainTime; +import com.l2jserver.gameserver.network.serverpackets.SetupGauge; + +public class NpcBuffer extends Quest +{ + private static final boolean DEBUG = false; + + private static void print(Exception e) + { + _log.warning(">>>" + e.toString() + "<<<"); + if (DEBUG) + { + e.printStackTrace(); + } + } + + private static final String QUEST_LOADING_INFO = "Rin4a"; + private static final int NPC_ID = 12; + + private static final String TITLE_NAME = "Scheme Buffer"; + private static final boolean SCRIPT_RELOAD = false; + private static final boolean SMART_WINDOW = true; + private static final boolean ENABLE_BUFF_SECTION = true; + private static final boolean ENABLE_SCHEME_SYSTEM = true; + private static final boolean ENABLE_HEAL = true; + private static final boolean ENABLE_HEAL_IN_COMBAT = false; + private static final boolean ENABLE_BUFFS = true; + private static final boolean ENABLE_RESIST = true; + private static final boolean ENABLE_SONGS = true; + private static final boolean ENABLE_DANCES = true; + private static final boolean ENABLE_CHANTS = false; + private static final boolean ENABLE_OTHERS = false; + private static final boolean ENABLE_SPECIAL = false; + private static final boolean ENABLE_CUBIC = false; + private static final boolean ENABLE_BUFF_REMOVE = true; + private static final boolean ENABLE_BUFF_SET = true; + private static final boolean BUFF_WITH_KARMA = true; + private static final boolean FREE_BUFFS = false; + private static final boolean TIME_OUT = true; + private static final int TIME_OUT_TIME = 3; + private static final int MIN_LEVEL = 1; + private static final int BUFF_REMOVE_PRICE = 10000; + private static final int HEAL_PRICE = 10000; + private static final int BUFF_PRICE = 1000; + private static final int RESIST_PRICE = 1000; + private static final int SONG_PRICE = 1000; + private static final int DANCE_PRICE = 1000; + private static final int CHANT_PRICE = 1000; + private static final int OTHERS_PRICE = 1000; + private static final int SPECIAL_PRICE = 1000; + private static final int CUBIC_PRICE = 1000; + private static final int BUFF_SET_PRICE = 15000; + private static final int SCHEME_BUFF_PRICE = 20000; + private static final int SCHEMES_PER_PLAYER = 4; + private static final int CONSUMABLE_ID = 57; + private static final int MAX_SCHEME_BUFFS = Config.BUFFS_MAX_AMOUNT; + private static final int MAX_SCHEME_DANCES = Config.DANCES_MAX_AMOUNT; + + private static final String SET_FIGHTER = "Fighter"; + private static final String SET_MAGE = "Mage"; + private static final String SET_ALL = "All"; + private static final String SET_NONE = "None"; + + private String rebuildMainHtml(QuestState st) + { + String MAIN_HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32>"; + String MESSAGE = ""; + int td = 0; + String[] TRS = + { + "<tr><td height=25>", + "</td>", + "<td height=25>", + "</td></tr>" + }; + + final String bottonA, bottonB, bottonC; + if (st.getInt("Pet-On-Off") == 1) + { + bottonA = "Auto Buff Pet"; + bottonB = "Heal My Pet"; + bottonC = "Remove Pet Buffs"; + MAIN_HTML_MESSAGE += "<button value=\"Player Options\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " buffpet 0 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + else + { + bottonA = "Auto Buff"; + bottonB = "Heal"; + bottonC = "Remove Buffs"; + MAIN_HTML_MESSAGE += "<button value=\"Pet Options\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " buffpet 1 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + + if (ENABLE_BUFF_SECTION) + { + if (ENABLE_BUFFS) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"Buffs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_buffs 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + if (ENABLE_RESIST) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"Resist\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_resists 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + if (ENABLE_SONGS) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"Songs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_songs 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + if (ENABLE_DANCES) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"Dances\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_dances 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + if (ENABLE_CHANTS) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"Chants\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_chants 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + if (ENABLE_SPECIAL) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"Special\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_special 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + if (ENABLE_OTHERS) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"Others\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_others 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + } + + if (ENABLE_CUBIC) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"Cubics\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect view_cubic 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + + if (MESSAGE.length() > 0) + { + MAIN_HTML_MESSAGE += "<BR1><table width=100% border=0 cellspacing=0 cellpadding=1 bgcolor=444444><tr>" + "<td><font color=00FFFF>Buffs:</font></td><td align=right>...</td></tr></table>" + "<BR1><table cellspacing=0 cellpadding=0>" + MESSAGE + "</table>"; + MESSAGE = ""; + td = 0; + } + + if (ENABLE_BUFF_SET) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"" + bottonA + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " castBuffSet 0 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + + if (ENABLE_HEAL) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"" + bottonB + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " heal 0 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + + if (ENABLE_BUFF_REMOVE) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"" + bottonC + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " removeBuffs 0 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + + if (MESSAGE.length() > 0) + { + MAIN_HTML_MESSAGE += "<BR1><table width=100% border=0 cellspacing=0 cellpadding=1 bgcolor=444444><tr>" + "<td><font color=00FFFF>Preset:</font></td><td align=right><font color=LEVEL>" + formatAdena(BUFF_SET_PRICE) + "</font> adena</td></tr></table>" + "<BR1><table cellspacing=0 cellpadding=0>" + MESSAGE + "</table>"; + MESSAGE = ""; + td = 0; + } + + if (ENABLE_SCHEME_SYSTEM) + { + MAIN_HTML_MESSAGE += generateScheme(st); + } + + if (st.getPlayer().isGM()) + { + MAIN_HTML_MESSAGE += "<br><button value=\"GM Manage Buffs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect manage_buffs 0 0\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + MAIN_HTML_MESSAGE += "<br><font color=303030>" + TITLE_NAME + "</font>" + "</center></body></html>"; + return MAIN_HTML_MESSAGE; + } + + private String generateScheme(QuestState st) + { + List<String> schemeName = new ArrayList<>(); + List<String> schemeId = new ArrayList<>(); + String HTML = ""; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?"); + rss.setInt(1, st.getPlayer().getObjectId()); + ResultSet action = rss.executeQuery(); + while (action.next()) + { + schemeName.add(action.getString("scheme_name")); + schemeId.add(action.getString("id")); + } + } + catch (SQLException e) + { + print(e); + } + HTML += "<BR1><table width=100% border=0 cellspacing=0 cellpadding=1 bgcolor=444444><tr>" + "<td><font color=00FFFF>Scheme:</font></td><td align=right><font color=LEVEL>" + formatAdena(SCHEME_BUFF_PRICE) + "</font> adena</TD></TR></table>" + "<BR1><table cellspacing=0 cellpadding=0>"; + if (schemeName.size() > 0) + { + String MESSAGE = ""; + int td = 0; + String[] TRS = + { + "<tr><td>", + "</td>", + "<td>", + "</td></tr>" + }; + for (int i = 0; i < schemeName.size(); ++i) + { + if (td > 2) + { + td = 0; + } + MESSAGE += TRS[td] + "<button value=\"" + schemeName.get(i) + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " cast " + schemeId.get(i) + " x x\" width=130 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + TRS[td + 1]; + td += 2; + } + + if (MESSAGE.length() > 0) + { + HTML += "<table>" + MESSAGE + "</table>"; + } + } + + if (schemeName.size() < SCHEMES_PER_PLAYER) + { + HTML += "<BR1><table><tr><td><button value=\"Create\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " create_1 x x x\" width=85 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"; + } + else + { + HTML += "<BR1><table width=100><tr>"; + } + + if (schemeName.size() > 0) + { + HTML += "<td><button value=\"Edit\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_1 x x x\" width=85 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "<td><button value=\"Delete\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " delete_1 x x x\" width=85 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table>"; + } + else + { + HTML += "</tr></table>"; + } + return HTML; + } + + private String reloadPanel(QuestState st) + { + return "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>" + "<font color=303030>" + TITLE_NAME + "</font><br>" + "<img src=\"L2UI.SquareGray\" width=250 height=1><br>" + "<table width=260 border=0 bgcolor=444444>" + "<tr><td><br></td></tr>" + "<tr><td align=center><font color=FFFFFF>This option can be seen by GMs only and it<br1>allow to update any changes made in the<br1>script. You can disable this option in<br1>the settings section within the Script.<br><font color=LEVEL>Do you want to update the SCRIPT?</font></font></td></tr>" + "<tr><td></td></tr></table><br>" + "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>" + "<button value=\"Yes\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " reloadscript 1 0 0\" width=50 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<button value=\"No\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " reloadscript 0 0 0\" width=50 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "</center></body></html>"; + } + + private String getItemNameHtml(QuestState st, int itemval) + { + return "" + itemval + ";"; + } + + private int getBuffCount(String scheme) + { + int count = 0; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rss = con.prepareStatement("SELECT buff_class FROM npcbuffer_scheme_contents WHERE scheme_id=?"); + rss.setString(1, scheme); + ResultSet action = rss.executeQuery(); + while (action.next()) + { + ++count; + } + } + catch (SQLException e) + { + print(e); + } + return count; + } + + private String getBuffType(int id) + { + String val = "none"; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement act = con.prepareStatement("SELECT buffType FROM npcbuffer_buff_list WHERE buffId=? LIMIT 1"); + act.setInt(1, id); + ResultSet rs = act.executeQuery(); + if (rs.next()) + { + val = rs.getString("buffType"); + } + } + catch (SQLException e) + { + print(e); + } + return val; + } + + private boolean isEnabled(int id, int level) + { + boolean val = false; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement act = con.prepareStatement("SELECT canUse FROM npcbuffer_buff_list WHERE buffId=? AND buffLevel=? LIMIT 1"); + act.setInt(1, id); + act.setInt(2, level); + ResultSet rs = act.executeQuery(); + if (rs.next()) + { + if ("1".equals(rs.getString("canUse"))) + { + val = true; + } + } + } + catch (SQLException e) + { + print(e); + } + return val; + } + + private boolean isUsed(String scheme, int id, int level) + { + boolean used = false; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rss = con.prepareStatement("SELECT id FROM npcbuffer_scheme_contents WHERE scheme_id=? AND skill_id=? AND skill_level=? LIMIT 1"); + rss.setString(1, scheme); + rss.setInt(2, id); + rss.setInt(3, level); + ResultSet action = rss.executeQuery(); + if (action.next()) + { + used = true; + } + } + catch (SQLException e) + { + print(e); + } + return used; + } + + private int getClassBuff(String id) + { + int val = 0; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement getTipo = con.prepareStatement("SELECT buff_class FROM npcbuffer_buff_list WHERE buffId=?"); + getTipo.setString(1, id); + ResultSet gt = getTipo.executeQuery(); + if (gt.next()) + { + val = gt.getInt("buff_class"); + } + } + catch (SQLException e) + { + print(e); + } + return val; + } + + private String showText(QuestState st, String type, String text, boolean buttonEnabled, String buttonName, String location) + { + String MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"; + MESSAGE += "<font color=LEVEL>" + type + "</font><br>" + text + "<br>"; + if (buttonEnabled) + { + MESSAGE += "<button value=\"" + buttonName + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect " + location + " 0 0\" width=100 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + MESSAGE += "<font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + st.playSound("ItemSound3.sys_shortage"); + return MESSAGE; + } + + private String reloadConfig(QuestState st) + { + try + { + if (QuestManager.getInstance().reload(QUEST_LOADING_INFO)) + { + st.getPlayer().sendMessage("The script and settings have been reloaded successfully."); + } + else + { + st.getPlayer().sendMessage("Script Reloaded Failed. you edited something wrong! :P, fix it and restart the server"); + } + } + catch (Exception e) + { + st.getPlayer().sendMessage("Script Reloaded Failed. you edited something wrong! :P, fix it and restart the server"); + print(e); + } + return rebuildMainHtml(st); + } + + private NpcBuffer() + { + super(-1, NpcBuffer.class.getSimpleName(), "custom"); + addStartNpc(NPC_ID); + addFirstTalkId(NPC_ID); + addTalkId(NPC_ID); + } + + private boolean isPetBuff(QuestState st) + { + return st.getInt("Pet-On-Off") != 0; + } + + private String createScheme() + { + return "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>You MUST seprerate new words with a dot (.)<br><br>Scheme name: <edit var=\"name\" width=100><br><br>" + "<button value=\"Create Scheme\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " create $name no_name x x\" width=200 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><button value=\"Back\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + } + + private String deleteScheme(L2PcInstance player) + { + String HTML = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>Available schemes:<br><br>"; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?"); + rss.setInt(1, player.getObjectId()); + ResultSet action = rss.executeQuery(); + while (action.next()) + { + HTML += "<button value=\"" + action.getString("scheme_name") + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " delete_c " + action.getString("id") + " " + action.getString("scheme_name") + " x\" width=200 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + } + catch (SQLException e) + { + print(e); + } + HTML += "<br><button value=\"Back\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + return HTML; + } + + private String editScheme(L2PcInstance player) + { + String HTML = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>Select a scheme that you would like to manage:<br><br>"; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_list WHERE player_id=?"); + rss.setInt(1, player.getObjectId()); + ResultSet action = rss.executeQuery(); + while (action.next()) + { + String name = action.getString("scheme_name"); + String id = action.getString("id"); + HTML += "<button value=\"" + name + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_select " + id + " x x\" width=200 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + } + catch (SQLException e) + { + print(e); + } + HTML += "<br><button value=\"Back\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + return HTML; + } + + private String getOptionList(String scheme) + { + int bcount = getBuffCount(scheme); + String HTML = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>There are <font color=LEVEL>" + bcount + "</font> buffs in current scheme!<br><br>"; + if (bcount < (MAX_SCHEME_BUFFS + MAX_SCHEME_DANCES)) + { + HTML += "<button value=\"Add buffs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_1 " + scheme + " 1 x\" width=200 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (bcount > 0) + { + HTML += "<button value=\"Remove buffs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_2 " + scheme + " 1 x\" width=200 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + HTML += "<br><button value=\"Back\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_1 0 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<button value=\"Home\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + return HTML; + } + + private String buildHtml(String buffType) + { + String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><br>"; + + List<String> availableBuffs = new ArrayList<>(); + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement getList = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE buffType=\"" + buffType + "\" AND canUse=1 ORDER BY Buff_Class ASC, id"); + ResultSet rs = getList.executeQuery(); + while (rs.next()) + { + int bId = rs.getInt("buffId"); + int bLevel = rs.getInt("buffLevel"); + String bName = SkillData.getInstance().getSkill(bId, bLevel).getName(); + bName = bName.replace(" ", "+"); + availableBuffs.add(bName + "_" + bId + "_" + bLevel); + } + } + catch (SQLException e) + { + print(e); + } + + if (availableBuffs.size() == 0) + { + HTML_MESSAGE += "No buffs are available at this moment!"; + } + else + { + if (FREE_BUFFS) + { + HTML_MESSAGE += "All buffs are for <font color=LEVEL>free</font>!"; + } + else + { + int price = 0; + switch (buffType) + { + case "buff": + price = BUFF_PRICE; + break; + case "resist": + price = RESIST_PRICE; + break; + case "song": + price = SONG_PRICE; + break; + case "dance": + price = DANCE_PRICE; + break; + case "chant": + price = CHANT_PRICE; + break; + case "others": + price = OTHERS_PRICE; + break; + case "special": + price = SPECIAL_PRICE; + break; + case "cubic": + price = CUBIC_PRICE; + break; + default: + if (DEBUG) + { + throw new RuntimeException(); + } + } + HTML_MESSAGE += "All special buffs cost <font color=LEVEL>" + formatAdena(price) + "</font> adena!"; + } + HTML_MESSAGE += "<BR1><table>"; + for (String buff : availableBuffs) + { + buff = buff.replace("_", " "); + String[] buffSplit = buff.split(" "); + String name = buffSplit[0]; + int id = Integer.parseInt(buffSplit[1]); + int level = Integer.parseInt(buffSplit[2]); + name = name.replace("+", " "); + HTML_MESSAGE += "<tr><td>" + getSkillIconHtml(id, level) + "</td><td><button value=\"" + name + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " giveBuffs " + id + " " + level + " " + buffType + "\" width=190 height=32 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"; + } + HTML_MESSAGE += "</table>"; + } + + HTML_MESSAGE += "<br><button value=\"Back\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + return HTML_MESSAGE; + } + + private String generateQuery(int case1, int case2) + { + StringBuilder qry = new StringBuilder(); + if (ENABLE_BUFFS) + { + if (case1 < MAX_SCHEME_BUFFS) + { + qry.append(",\"buff\""); + } + } + if (ENABLE_RESIST) + { + if (case1 < MAX_SCHEME_BUFFS) + { + qry.append(",\"resist\""); + } + } + if (ENABLE_SONGS) + { + if (case2 < MAX_SCHEME_DANCES) + { + qry.append(",\"song\""); + } + } + if (ENABLE_DANCES) + { + if (case2 < MAX_SCHEME_DANCES) + { + qry.append(",\"dance\""); + } + } + if (ENABLE_CHANTS) + { + if (case1 < MAX_SCHEME_BUFFS) + { + qry.append(",\"chant\""); + } + } + if (ENABLE_OTHERS) + { + if (case1 < MAX_SCHEME_BUFFS) + { + qry.append(",\"others\""); + } + } + if (ENABLE_SPECIAL) + { + if (case1 < MAX_SCHEME_BUFFS) + { + qry.append(",\"special\""); + } + } + if (qry.length() > 0) + { + qry.deleteCharAt(0); + } + return qry.toString(); + } + + private String viewAllSchemeBuffs$getBuffCount(String scheme) + { + int count = 0; + int D_S_Count = 0; + int B_Count = 0; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rss = con.prepareStatement("SELECT buff_class FROM npcbuffer_scheme_contents WHERE scheme_id=?"); + rss.setString(1, scheme); + ResultSet action = rss.executeQuery(); + while (action.next()) + { + ++count; + int val = action.getInt("buff_class"); + if ((val == 1) || (val == 2)) + { + ++D_S_Count; + } + else + { + ++B_Count; + } + } + } + catch (SQLException e) + { + print(e); + } + String res = count + " " + B_Count + " " + D_S_Count; + return res; + } + + private String viewAllSchemeBuffs(String scheme, String page, String action) + { + List<String> buffList = new ArrayList<>(); + String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><br>"; + String[] eventSplit = viewAllSchemeBuffs$getBuffCount(scheme).split(" "); + int TOTAL_BUFF = Integer.parseInt(eventSplit[0]); + int BUFF_COUNT = Integer.parseInt(eventSplit[1]); + int DANCE_SONG = Integer.parseInt(eventSplit[2]); + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + if (action.equals("add")) + { + HTML_MESSAGE += "You can add <font color=LEVEL>" + (MAX_SCHEME_BUFFS - BUFF_COUNT) + "</font> Buffs and <font color=LEVEL>" + (MAX_SCHEME_DANCES - DANCE_SONG) + "</font> Dances more!"; + String QUERY = "SELECT * FROM npcbuffer_buff_list WHERE buffType IN (" + generateQuery(BUFF_COUNT, DANCE_SONG) + ") AND canUse=1 ORDER BY Buff_Class ASC, id"; + PreparedStatement getBuffCount = con.prepareStatement(QUERY); + ResultSet rss = getBuffCount.executeQuery(); + while (rss.next()) + { + String name = SkillData.getInstance().getSkill(rss.getInt("buffId"), rss.getInt("buffLevel")).getName(); + name = name.replace(" ", "+"); + buffList.add(name + "_" + rss.getInt("buffId") + "_" + rss.getInt("buffLevel")); + } + } + else if (action.equals("remove")) + { + HTML_MESSAGE += "You have <font color=LEVEL>" + BUFF_COUNT + "</font> Buffs and <font color=LEVEL>" + DANCE_SONG + "</font> Dances"; + String QUERY = "SELECT * FROM npcbuffer_scheme_contents WHERE scheme_id=? ORDER BY Buff_Class ASC, id"; + PreparedStatement getBuffCount = con.prepareStatement(QUERY); + getBuffCount.setString(1, scheme); + ResultSet rss = getBuffCount.executeQuery(); + while (rss.next()) + { + String name = SkillData.getInstance().getSkill(rss.getInt("skill_id"), rss.getInt("skill_level")).getName(); + name = name.replace(" ", "+"); + buffList.add(name + "_" + rss.getInt("skill_id") + "_" + rss.getInt("skill_level")); + } + } + else if (DEBUG) + { + throw new RuntimeException(); + } + } + catch (SQLException e) + { + print(e); + } + + HTML_MESSAGE += "<BR1><table border=0><tr>"; + final int buffsPerPage = 20; + final String width, pageName; + int pc = ((buffList.size() - 1) / buffsPerPage) + 1; + if (pc > 5) + { + width = "25"; + pageName = "P"; + } + else + { + width = "50"; + pageName = "Page "; + } + for (int ii = 1; ii <= pc; ++ii) + { + if (ii == Integer.parseInt(page)) + { + HTML_MESSAGE += "<td width=" + width + " align=center><font color=LEVEL>" + pageName + ii + "</font></td>"; + } + else if (action.equals("add")) + { + HTML_MESSAGE += "<td width=" + width + ">" + "<button value=\"" + pageName + ii + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_1 " + scheme + " " + ii + " x\" width=" + width + " height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"; + } + else if (action.equals("remove")) + { + HTML_MESSAGE += "<td width=" + width + ">" + "<button value=\"" + pageName + ii + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_2 " + scheme + " " + ii + " x\" width=" + width + " height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"; + } + else if (DEBUG) + { + throw new RuntimeException(); + } + } + HTML_MESSAGE += "</tr></table>"; + + int limit = buffsPerPage * Integer.parseInt(page); + int start = limit - buffsPerPage; + int end = Math.min(limit, buffList.size()); + int k = 0; + for (int i = start; i < end; ++i) + { + String value = buffList.get(i); + value = value.replace("_", " "); + String[] extr = value.split(" "); + String name = extr[0]; + name = name.replace("+", " "); + int id = Integer.parseInt(extr[1]); + int level = Integer.parseInt(extr[2]); + if (action.equals("add")) + { + if (!isUsed(scheme, id, level)) + { + if ((k % 2) != 0) + { + HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>"; + } + else + { + HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>"; + } + HTML_MESSAGE += "<tr><td width=35>" + getSkillIconHtml(id, level) + "</td><td fixwidth=170>" + name + "</td><td><button value=\"Add\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " add_buff " + scheme + "_" + id + "_" + level + " " + page + " " + TOTAL_BUFF + "\" width=65 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "</tr></table>"; + k += 1; + } + } + else if (action.equals("remove")) + { + if ((k % 2) != 0) + { + HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>"; + } + else + { + HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>"; + } + HTML_MESSAGE += "<tr><td width=35>" + getSkillIconHtml(id, level) + "</td><td fixwidth=170>" + name + "</td><td><button value=\"Remove\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " remove_buff " + scheme + "_" + id + "_" + level + " " + page + " " + TOTAL_BUFF + "\" width=65 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" + "</table>"; + k += 1; + } + } + HTML_MESSAGE += "<br><br><button value=\"Back\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " manage_scheme_select " + scheme + " x x\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<button value=\"Home\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + return HTML_MESSAGE; + } + + private String viewAllBuffTypes() + { + String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"; + HTML_MESSAGE += "<font color=LEVEL>[Buff management]</font><br>"; + if (ENABLE_BUFFS) + { + HTML_MESSAGE += "<button value=\"Buffs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list buff Buffs 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (ENABLE_RESIST) + { + HTML_MESSAGE += "<button value=\"Resist Buffs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list resist Resists 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (ENABLE_SONGS) + { + HTML_MESSAGE += "<button value=\"Songs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list song Songs 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (ENABLE_DANCES) + { + HTML_MESSAGE += "<button value=\"Dances\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list dance Dances 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (ENABLE_CHANTS) + { + HTML_MESSAGE += "<button value=\"Chants\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list chant Chants 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (ENABLE_SPECIAL) + { + HTML_MESSAGE += "<button value=\"Special Buffs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list special Special_Buffs 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (ENABLE_OTHERS) + { + HTML_MESSAGE += "<button value=\"Others Buffs\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list others Others_Buffs 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (ENABLE_CUBIC) + { + HTML_MESSAGE += "<button value=\"Cubics\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list cubic cubic_Buffs 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; + } + if (ENABLE_BUFF_SET) + { + HTML_MESSAGE += "<button value=\"Buff Sets\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list set Buff_Sets 1\" width=200 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><br>"; + } + HTML_MESSAGE += "<button value=\"Back\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + return HTML_MESSAGE; + } + + private String viewAllBuffs(String type, String typeName, String page) + { + List<String> buffList = new ArrayList<>(); + String HTML_MESSAGE = "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"; + typeName = typeName.replace("_", " "); + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + final PreparedStatement getBuffCount; + if (type.equals("set")) + { + getBuffCount = con.prepareStatement("SELECT * FROM npcbuffer_buff_list WHERE buffType IN (" + generateQuery(0, 0) + ") AND canUse=1"); + } + else + { + getBuffCount = con.prepareStatement("SELECT * FROM npcbuffer_buff_list WHERE buffType=?"); + getBuffCount.setString(1, type); + } + ResultSet rss = getBuffCount.executeQuery(); + while (rss.next()) + { + String name = SkillData.getInstance().getSkill(rss.getInt("buffId"), rss.getInt("buffLevel")).getName(); + name = name.replace(" ", "+"); + String usable = rss.getString("canUse"); + String forClass = rss.getString("forClass"); + String skill_id = rss.getString("buffId"); + String skill_level = rss.getString("buffLevel"); + buffList.add(name + "_" + forClass + "_" + page + "_" + usable + "_" + skill_id + "_" + skill_level); + } + } + catch (SQLException e) + { + print(e); + } + Collections.sort(buffList); + + HTML_MESSAGE += "<font color=LEVEL>[Buff management - " + typeName + " - Page " + page + "]</font><br><table border=0><tr>"; + final int buffsPerPage; + if (type.equals("set")) + { + buffsPerPage = 12; + } + else + { + buffsPerPage = 20; + } + final String width, pageName; + int pc = ((buffList.size() - 1) / buffsPerPage) + 1; + if (pc > 5) + { + width = "25"; + pageName = "P"; + } + else + { + width = "50"; + pageName = "Page "; + } + typeName = typeName.replace(" ", "_"); + for (int ii = 1; ii <= pc; ++ii) + { + if (ii == Integer.parseInt(page)) + { + HTML_MESSAGE += "<td width=" + width + " align=center><font color=LEVEL>" + pageName + ii + "</font></td>"; + } + else + { + HTML_MESSAGE += "<td width=" + width + "><button value=\"" + pageName + "" + ii + "\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " edit_buff_list " + type + " " + typeName + " " + ii + "\" width=" + width + " height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"; + } + } + HTML_MESSAGE += "</tr></table><br>"; + + int limit = buffsPerPage * Integer.parseInt(page); + int start = limit - buffsPerPage; + int end = Math.min(limit, buffList.size()); + for (int i = start; i < end; ++i) + { + String value = buffList.get(i); + value = value.replace("_", " "); + String[] extr = value.split(" "); + String name = extr[0]; + name = name.replace("+", " "); + int forClass = Integer.parseInt(extr[1]); + int usable = Integer.parseInt(extr[3]); + String skillPos = extr[4] + "_" + extr[5]; + if ((i % 2) != 0) + { + HTML_MESSAGE += "<BR1><table border=0 bgcolor=333333>"; + } + else + { + HTML_MESSAGE += "<BR1><table border=0 bgcolor=292929>"; + } + if (type.equals("set")) + { + String listOrder = null; + if (forClass == 0) + { + listOrder = "List=\"" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_ALL + ";" + SET_NONE + ";\""; + } + else if (forClass == 1) + { + listOrder = "List=\"" + SET_MAGE + ";" + SET_FIGHTER + ";" + SET_ALL + ";" + SET_NONE + ";\""; + } + else if (forClass == 2) + { + listOrder = "List=\"" + SET_ALL + ";" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_NONE + ";\""; + } + else if (forClass == 3) + { + listOrder = "List=\"" + SET_NONE + ";" + SET_FIGHTER + ";" + SET_MAGE + ";" + SET_ALL + ";\""; + } + HTML_MESSAGE += "<tr><td fixwidth=145>" + name + "</td><td width=70><combobox var=\"newSet" + i + "\" width=70 " + listOrder + "></td>" + "<td width=50><button value=\"Update\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " changeBuffSet " + skillPos + " $newSet" + i + " " + page + "\" width=50 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"; + } + else + { + HTML_MESSAGE += "<tr><td fixwidth=170>" + name + "</td><td width=80>"; + if (usable == 1) + { + HTML_MESSAGE += "<button value=\"Disable\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " editSelectedBuff " + skillPos + " 0-" + page + " " + type + "\" width=80 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"; + } + else if (usable == 0) + { + HTML_MESSAGE += "<button value=\"Enable\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " editSelectedBuff " + skillPos + " 1-" + page + " " + type + "\" width=80 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"; + } + } + HTML_MESSAGE += "</table>"; + } + HTML_MESSAGE += "<br><br><button value=\"Back\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect manage_buffs 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<button value=\"Home\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " redirect main 0 0\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + return HTML_MESSAGE; + } + + private void manageSelectedBuff(String buffPosId, String canUseBuff) + { + String[] bpid = buffPosId.split("_"); + String bId = bpid[0]; + String bLvl = bpid[1]; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement upd = con.prepareStatement("UPDATE npcbuffer_buff_list SET canUse=? WHERE buffId=? AND buffLevel=? LIMIT 1"); + upd.setString(1, canUseBuff); + upd.setString(2, bId); + upd.setString(3, bLvl); + upd.executeUpdate(); + upd.close(); + } + catch (SQLException e) + { + print(e); + } + } + + private String manageSelectedSet(String id, String newVal, String opt3) + { + String[] bpid = id.split("_"); + String bId = bpid[0]; + String bLvl = bpid[1]; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement upd = con.prepareStatement("UPDATE npcbuffer_buff_list SET forClass=? WHERE buffId=? AND bufflevel=?"); + upd.setString(1, newVal); + upd.setString(2, bId); + upd.setString(3, bLvl); + upd.executeUpdate(); + upd.close(); + } + catch (SQLException e) + { + print(e); + } + return viewAllBuffs("set", "Buff Sets", opt3); + } + + private void addTimeout(QuestState st, int gaugeColor, int amount, int offset) + { + int endtime = (int) ((System.currentTimeMillis() + (amount * 1000)) / 1000); + st.set("blockUntilTime", String.valueOf(endtime)); + st.getPlayer().sendPacket(new SetupGauge(gaugeColor, (amount * 1000) + offset)); + } + + private void heal(L2PcInstance player, boolean isPet) + { + L2Summon target = player.getSummon(); + if (!isPet) + { + PcStatus pcStatus = player.getStatus(); + PcStat pcStat = player.getStat(); + pcStatus.setCurrentHp(pcStat.getMaxHp()); + pcStatus.setCurrentMp(pcStat.getMaxMp()); + pcStatus.setCurrentCp(pcStat.getMaxCp()); + } + else if (target != null) + { + SummonStatus petStatus = target.getStatus(); + SummonStat petStat = target.getStat(); + petStatus.setCurrentHp(petStat.getMaxHp()); + petStatus.setCurrentMp(petStat.getMaxMp()); + if (target instanceof L2PetInstance) + { + L2PetInstance pet = (L2PetInstance) target; + pet.setCurrentFed(pet.getMaxFed()); + player.sendPacket(new SetSummonRemainTime(pet.getMaxFed(), pet.getCurrentFed())); + } + else if (target instanceof L2ServitorInstance) + { + L2ServitorInstance summon = (L2ServitorInstance) target; + // FIXME: summon.setLifeTimeRemaining(summon.getLifeTimeRemaining() - summon.getLifeTime()); + summon.setLifeTimeRemaining(summon.getLifeTimeRemaining() + summon.getLifeTime()); + player.sendPacket(new SetSummonRemainTime(summon.getLifeTime(), summon.getLifeTimeRemaining())); + } + else if (DEBUG) + { + throw new RuntimeException(); + } + } + } + + @Override + public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) + { + if (DEBUG) + { + System.out.println(getScriptName() + "#onAdvEvent('" + event + "'," + (npc == null ? "NULL" : npc.getId() + npc.getName()) + "," + (player == null ? "NULL" : player.getName()) + ")"); + } + QuestState st = player.getQuestState(QUEST_LOADING_INFO); + String[] eventSplit = event.split(" ", 4); + if (eventSplit.length != 4) + { + player.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN); + return null; + } + String eventParam0 = eventSplit[0]; + String eventParam1 = eventSplit[1]; + String eventParam2 = eventSplit[2]; + String eventParam3 = eventSplit[3]; + + switch (eventParam0) + { + case "reloadscript": + if (eventParam1.equals("1")) + { + return reloadConfig(st); + } + if (eventParam1.equals("0")) + { + return rebuildMainHtml(st); + } + if (DEBUG) + { + throw new RuntimeException(); + } + + case "redirect": + switch (eventParam1) + { + case "main": + return rebuildMainHtml(st); + case "manage_buffs": + return viewAllBuffTypes(); + case "view_buffs": + return buildHtml("buff"); + case "view_resists": + return buildHtml("resist"); + case "view_songs": + return buildHtml("song"); + case "view_dances": + return buildHtml("dance"); + case "view_chants": + return buildHtml("chant"); + case "view_others": + return buildHtml("others"); + case "view_special": + return buildHtml("special"); + case "view_cubic": + return buildHtml("cubic"); + default: + if (DEBUG) + { + throw new RuntimeException(); + } + } + + case "buffpet": + if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime")) + { + st.set("Pet-On-Off", eventParam1); + if (TIME_OUT) + { + addTimeout(st, 3, TIME_OUT_TIME / 2, 600); + } + } + return rebuildMainHtml(st); + + case "create": + { + String param = eventParam1.replaceAll("[ !" + "\"" + "#$%&'()*+,/:;<=>?@" + "\\[" + "\\\\" + "\\]" + "\\^" + "`{|}~]", ""); + if ((param.length() == 0) || param.equals("no_name")) + { + player.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN); + return showText(st, "Info", "Please, enter the scheme name!", true, "Return", "main"); + } + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement ins = con.prepareStatement("INSERT INTO npcbuffer_scheme_list (player_id,scheme_name) VALUES (?,?)"); + ins.setInt(1, player.getObjectId()); + ins.setString(2, param); + ins.executeUpdate(); + ins.close(); + } + catch (SQLException e) + { + print(e); + } + return rebuildMainHtml(st); + } + + case "delete": + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rem; + rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_list WHERE id=? LIMIT 1"); + rem.setString(1, eventParam1); + rem.executeUpdate(); + rem.close(); + rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_contents WHERE scheme_id=?"); + rem.setString(1, eventParam1); + rem.executeUpdate(); + rem.close(); + } + catch (SQLException e) + { + print(e); + } + return rebuildMainHtml(st); + + case "delete_c": + return "<html><head><title>" + TITLE_NAME + "</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>Do you really want to delete '" + eventParam2 + "' scheme?<br><br>" + "<button value=\"Yes\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " delete " + eventParam1 + " x x\" width=50 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<button value=\"No\" action=\"bypass -h Quest " + QUEST_LOADING_INFO + " delete_1 x x x\" width=50 height=25 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">" + "<br><font color=303030>" + TITLE_NAME + "</font></center></body></html>"; + + case "create_1": + return createScheme(); + case "edit_1": + return editScheme(player); + case "delete_1": + return deleteScheme(player); + case "manage_scheme_1": + return viewAllSchemeBuffs(eventParam1, eventParam2, "add"); + case "manage_scheme_2": + return viewAllSchemeBuffs(eventParam1, eventParam2, "remove"); + case "manage_scheme_select": + return getOptionList(eventParam1); + + case "remove_buff": + { + String[] split = eventParam1.split("_"); + String scheme = split[0]; + String skill = split[1]; + String level = split[2]; + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rem = con.prepareStatement("DELETE FROM npcbuffer_scheme_contents WHERE scheme_id=? AND skill_id=? AND skill_level=? LIMIT 1"); + rem.setString(1, scheme); + rem.setString(2, skill); + rem.setString(3, level); + rem.executeUpdate(); + } + catch (SQLException e) + { + print(e); + } + int temp = Integer.parseInt(eventParam3) - 1; + final String HTML; + if (temp <= 0) + { + HTML = getOptionList(scheme); + } + else + { + HTML = viewAllSchemeBuffs(scheme, eventParam2, "remove"); + } + return HTML; + } + + case "add_buff": + { + String[] split = eventParam1.split("_"); + String scheme = split[0]; + String skill = split[1]; + String level = split[2]; + int idbuffclass = getClassBuff(skill); + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement ins = con.prepareStatement("INSERT INTO npcbuffer_scheme_contents (scheme_id,skill_id,skill_level,buff_class) VALUES (?,?,?,?)"); + ins.setString(1, scheme); + ins.setString(2, skill); + ins.setString(3, level); + ins.setInt(4, idbuffclass); + ins.executeUpdate(); + ins.close(); + } + catch (SQLException e) + { + print(e); + } + int temp = Integer.parseInt(eventParam3) + 1; + final String HTML; + if (temp >= (MAX_SCHEME_BUFFS + MAX_SCHEME_DANCES)) + { + HTML = getOptionList(scheme); + } + else + { + HTML = viewAllSchemeBuffs(scheme, eventParam2, "add"); + } + return HTML; + } + + case "edit_buff_list": + return viewAllBuffs(eventParam1, eventParam2, eventParam3); + + case "changeBuffSet": + if (eventParam2.equals(SET_FIGHTER)) + { + eventParam2 = "0"; + } + else if (eventParam2.equals(SET_MAGE)) + { + eventParam2 = "1"; + } + else if (eventParam2.equals(SET_ALL)) + { + eventParam2 = "2"; + } + else if (eventParam2.equals(SET_NONE)) + { + eventParam2 = "3"; + } + else if (DEBUG) + { + throw new RuntimeException(); + } + return manageSelectedSet(eventParam1, eventParam2, eventParam3); + + case "editSelectedBuff": + { + eventParam2 = eventParam2.replace("-", " "); + String[] split = eventParam2.split(" "); + String action = split[0]; + String page = split[1]; + manageSelectedBuff(eventParam1, action); + final String typeName; + switch (eventParam3) + { + case "buff": + typeName = "Buffs"; + break; + case "resist": + typeName = "Resists"; + break; + case "song": + typeName = "Songs"; + break; + case "dance": + typeName = "Dances"; + break; + case "chant": + typeName = "Chants"; + break; + case "others": + typeName = "Others_Buffs"; + break; + case "special": + typeName = "Special_Buffs"; + break; + case "cubic": + typeName = "Cubics"; + break; + default: + throw new RuntimeException(); + } + return viewAllBuffs(eventParam3, typeName, page); + } + + case "viewSelectedConfig": + throw new RuntimeException(); + + case "changeConfig": + throw new RuntimeException(); + + case "heal": + if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime")) + { + if (player.isInCombat() && !ENABLE_HEAL_IN_COMBAT) + { + return showText(st, "Info", "You can't use the heal function while in combat.", false, "Return", "main"); + } + + if (st.getQuestItemsCount(CONSUMABLE_ID) < HEAL_PRICE) + { + return showText(st, "Sorry", "You don't have the enough items:<br>You need: <font color=LEVEL>" + HEAL_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0"); + } + final boolean getSummonbuff = isPetBuff(st); + if (getSummonbuff) + { + if (player.getSummon() != null) + { + heal(player, getSummonbuff); + } + else + { + return showText(st, "Info", "You can't use the Pet's options.<br>Summon your pet first!", false, "Return", "main"); + } + } + else + { + heal(player, getSummonbuff); + } + st.takeItems(CONSUMABLE_ID, HEAL_PRICE); + if (TIME_OUT) + { + addTimeout(st, 1, TIME_OUT_TIME / 2, 600); + } + } + return SMART_WINDOW ? null : rebuildMainHtml(st); + + case "removeBuffs": + if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime")) + { + if (st.getQuestItemsCount(CONSUMABLE_ID) < BUFF_REMOVE_PRICE) + { + return showText(st, "Sorry", "You don't have the enough items:<br>You need: <font color=LEVEL>" + BUFF_REMOVE_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0"); + } + final boolean getSummonbuff = isPetBuff(st); + if (getSummonbuff) + { + if (player.getSummon() != null) + { + player.getSummon().stopAllEffects(); + } + else + { + return showText(st, "Info", "You can't use the Pet's options.<br>Summon your pet first!", false, "Return", "main"); + } + } + else + { + player.stopAllEffects(); + if (player.getCubics() != null) + { + for (L2CubicInstance cubic : player.getCubics().values()) + { + cubic.stopAction(); + player.getCubics().remove(cubic); + } + } + } + st.takeItems(CONSUMABLE_ID, BUFF_REMOVE_PRICE); + if (TIME_OUT) + { + addTimeout(st, 2, TIME_OUT_TIME / 2, 600); + } + } + return SMART_WINDOW ? null : rebuildMainHtml(st); + + case "cast": + if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime")) + { + List<Integer> buffs = new ArrayList<>(); + List<Integer> levels = new ArrayList<>(); + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement rss = con.prepareStatement("SELECT * FROM npcbuffer_scheme_contents WHERE scheme_id=? ORDER BY id"); + rss.setString(1, eventParam1); + ResultSet action = rss.executeQuery(); + while (action.next()) + { + int id = Integer.parseInt(action.getString("skill_id")); + int level = Integer.parseInt(action.getString("skill_level")); + switch (getBuffType(id)) + { + case "buff": + if (ENABLE_BUFFS) + { + if (isEnabled(id, level)) + { + buffs.add(id); + levels.add(level); + } + } + break; + case "resist": + if (ENABLE_RESIST) + { + if (isEnabled(id, level)) + { + buffs.add(id); + levels.add(level); + } + } + break; + case "song": + if (ENABLE_SONGS) + { + if (isEnabled(id, level)) + { + buffs.add(id); + levels.add(level); + } + } + break; + case "dance": + if (ENABLE_DANCES) + { + if (isEnabled(id, level)) + { + buffs.add(id); + levels.add(level); + } + } + break; + case "chant": + if (ENABLE_CHANTS) + { + if (isEnabled(id, level)) + { + buffs.add(id); + levels.add(level); + } + } + break; + case "others": + if (ENABLE_OTHERS) + { + if (isEnabled(id, level)) + { + buffs.add(id); + levels.add(level); + } + } + break; + case "special": + if (ENABLE_SPECIAL) + { + if (isEnabled(id, level)) + { + buffs.add(id); + levels.add(level); + } + } + break; + default: + if (DEBUG) + { + throw new RuntimeException(); + } + } + } + } + catch (SQLException e) + { + print(e); + } + + if (buffs.size() == 0) + { + return viewAllSchemeBuffs(eventParam1, "1", "add"); + } + if (!FREE_BUFFS) + { + if (st.getQuestItemsCount(CONSUMABLE_ID) < SCHEME_BUFF_PRICE) + { + return showText(st, "Sorry", "You don't have the enough items:<br>You need: <font color=LEVEL>" + SCHEME_BUFF_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0"); + } + } + + final boolean getSummonbuff = isPetBuff(st); + for (int i = 0; i < buffs.size(); ++i) + { + if (!getSummonbuff) + { + npc.broadcastPacket(new MagicSkillUse(npc, player, buffs.get(i), 1, 1, 1)); + SkillData.getInstance().getSkill(buffs.get(i), levels.get(i)).applyEffects(player, player); + } + else + { + if (player.getSummon() != null) + { + npc.broadcastPacket(new MagicSkillUse(npc, player.getSummon(), buffs.get(i), 1, 1, 1)); + SkillData.getInstance().getSkill(buffs.get(i), levels.get(i)).applyEffects(player.getSummon(), player.getSummon()); + } + else + { + return showText(st, "Info", "You can't use the Pet's options.<br>Summon your pet first!", false, "Return", "main"); + } + } + } + st.takeItems(CONSUMABLE_ID, SCHEME_BUFF_PRICE); + if (TIME_OUT) + { + addTimeout(st, 3, TIME_OUT_TIME, 600); + } + } + return SMART_WINDOW ? null : rebuildMainHtml(st); + + case "giveBuffs": + { + final int cost; + switch (eventParam3) + { + case "buff": + cost = BUFF_PRICE; + break; + case "resist": + cost = RESIST_PRICE; + break; + case "song": + cost = SONG_PRICE; + break; + case "dance": + cost = DANCE_PRICE; + break; + case "chant": + cost = CHANT_PRICE; + break; + case "others": + cost = OTHERS_PRICE; + break; + case "special": + cost = SPECIAL_PRICE; + break; + case "cubic": + cost = CUBIC_PRICE; + break; + default: + throw new RuntimeException(); + } + + if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime")) + { + if (!FREE_BUFFS) + { + if (st.getQuestItemsCount(CONSUMABLE_ID) < cost) + { + return showText(st, "Sorry", "You don't have the enough items:<br>You need: <font color=LEVEL>" + cost + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0"); + } + } + Skill skill = SkillData.getInstance().getSkill(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)); + if (skill.hasEffectType(L2EffectType.SUMMON)) + { + if (st.getQuestItemsCount(skill.getItemConsumeId()) < skill.getItemConsume()) + { + return showText(st, "Sorry", "You don't have the enough items:<br>You need: <font color=LEVEL>" + skill.getItemConsume() + " " + getItemNameHtml(st, skill.getItemConsumeId()) + "!", false, "0", "0"); + } + } + final boolean getSummonbuff = isPetBuff(st); + if (!getSummonbuff) + { + if (eventParam3.equals("cubic")) + { + if (player.getCubics() != null) + { + for (L2CubicInstance cubic : player.getCubics().values()) + { + cubic.stopAction(); + player.getCubics().remove(cubic); + } + } + npc.broadcastPacket(new MagicSkillUse(npc, player, Integer.parseInt(eventParam1), 1, 1, 1)); + player.useMagic(SkillData.getInstance().getSkill(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)), false, false); + } + else + { + npc.broadcastPacket(new MagicSkillUse(npc, player, Integer.parseInt(eventParam1), 1, 1, 1)); + SkillData.getInstance().getSkill(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)).applyEffects(player, player); + } + } + else + { + if (eventParam3.equals("cubic")) + { + if (player.getCubics() != null) + { + for (L2CubicInstance cubic : player.getCubics().values()) + { + cubic.stopAction(); + player.getCubics().remove(cubic); + } + } + npc.broadcastPacket(new MagicSkillUse(npc, player, Integer.parseInt(eventParam1), 1, 1, 1)); + player.useMagic(SkillData.getInstance().getSkill(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)), false, false); + } + else + { + if (player.getSummon() != null) + { + npc.broadcastPacket(new MagicSkillUse(npc, player.getSummon(), Integer.parseInt(eventParam1), 1, 1, 1)); + SkillData.getInstance().getSkill(Integer.parseInt(eventParam1), Integer.parseInt(eventParam2)).applyEffects(player.getSummon(), player.getSummon()); + } + else + { + return showText(st, "Info", "You can't use the Pet's options.<br>Summon your pet first!", false, "Return", "main"); + } + } + } + st.takeItems(CONSUMABLE_ID, cost); + if (TIME_OUT) + { + addTimeout(st, 3, TIME_OUT_TIME / 10, 600); + } + } + return SMART_WINDOW ? null : buildHtml(eventParam3); + } + + case "castBuffSet": + if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime")) + { + if (!FREE_BUFFS) + { + if (st.getQuestItemsCount(CONSUMABLE_ID) < BUFF_SET_PRICE) + { + return showText(st, "Sorry", "You don't have the enough items:<br>You need: <font color=LEVEL>" + BUFF_SET_PRICE + " " + getItemNameHtml(st, CONSUMABLE_ID) + "!", false, "0", "0"); + } + } + List<int[]> buff_sets = new ArrayList<>(); + final int player_class; + if (player.isMageClass()) + { + player_class = 1; + } + else + { + player_class = 0; + } + final boolean getSummonbuff = isPetBuff(st); + if (!getSummonbuff) + { + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement getSimilarNameCount = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE forClass IN (?,?) ORDER BY id ASC"); + getSimilarNameCount.setInt(1, player_class); + getSimilarNameCount.setString(2, "2"); + ResultSet rss = getSimilarNameCount.executeQuery(); + while (rss.next()) + { + int id = rss.getInt("buffId"); + int lvl = rss.getInt("buffLevel"); + buff_sets.add(new int[] + { + id, + lvl + }); + } + } + catch (SQLException e) + { + print(e); + } + for (int[] i : buff_sets) + { + npc.broadcastPacket(new MagicSkillUse(npc, player, i[0], 1, 1, 1)); + SkillData.getInstance().getSkill(i[0], i[1]).applyEffects(player, player); + } + } + else + { + if (player.getSummon() != null) + { + try (Connection con = L2DatabaseFactory.getInstance().getConnection()) + { + PreparedStatement getSimilarNameCount = con.prepareStatement("SELECT buffId,buffLevel FROM npcbuffer_buff_list WHERE forClass IN (?,?) ORDER BY id ASC"); + getSimilarNameCount.setString(1, "0"); + getSimilarNameCount.setString(2, "2"); + ResultSet rss = getSimilarNameCount.executeQuery(); + while (rss.next()) + { + int id = rss.getInt("buffId"); + int lvl = rss.getInt("buffLevel"); + buff_sets.add(new int[] + { + id, + lvl + }); + } + } + catch (SQLException e) + { + print(e); + } + for (int[] i : buff_sets) + { + npc.broadcastPacket(new MagicSkillUse(npc, player.getSummon(), i[0], 1, 1, 1)); + SkillData.getInstance().getSkill(i[0], i[1]).applyEffects(player.getSummon(), player.getSummon()); + } + } + else + { + return showText(st, "Info", "You can't use the Pet's options.<br>Summon your pet first!", false, "Return", "main"); + } + } + st.takeItems(CONSUMABLE_ID, BUFF_SET_PRICE); + if (TIME_OUT) + { + addTimeout(st, 3, TIME_OUT_TIME, 600); + } + } + return SMART_WINDOW ? null : rebuildMainHtml(st); + + } + return rebuildMainHtml(st); + } + + @SuppressWarnings("unused") + @Override + public String onFirstTalk(L2Npc npc, L2PcInstance player) + { + QuestState st = player.getQuestState(QUEST_LOADING_INFO); + if (st == null) + { + st = newQuestState(player); + } + if (player.isGM()) + { + if (SCRIPT_RELOAD) + { + return reloadPanel(st); + } + return rebuildMainHtml(st); + } + else if ((int) (System.currentTimeMillis() / 1000) > st.getInt("blockUntilTime")) + { + return showText(st, "Sorry", "You have to wait a while!<br>if you wish to use my services!", false, "Return", "main"); + } + if (!BUFF_WITH_KARMA && (player.getKarma() > 0)) + { + return showText(st, "Info", "You have too much <font color=FF0000>karma!</font><br>Come back,<br>when you don't have any karma!", false, "Return", "main"); + } + else if (OlympiadManager.getInstance().isRegistered(player)) + { + return showText(st, "Info", "You can not buff while you are in <font color=FF0000>Olympiad!</font><br>Come back,<br>when you are out of the Olympiad.", false, "Return", "main"); + } + else if (TvTEvent.isPlayerParticipant(player.getObjectId())) + { + return showText(st, "Info", "You can not buff while you are in <font color=\"FF0000\">TvT!</font><br>Come back,<br>when you are out of TvT!", false, "Return", "main"); + } + else if (player.getLevel() < MIN_LEVEL) + { + return showText(st, "Info", "Your level is too low!<br>You have to be at least level <font color=LEVEL>" + MIN_LEVEL + "</font>,<br>to use my services!", false, "Return", "main"); + } + else if (player.getPvpFlag() > 0) + { + return showText(st, "Info", "You can't buff while you are <font color=800080>flagged!</font><br>Wait some time and try again!", false, "Return", "main"); + } + else if (player.isInCombat()) + { + return showText(st, "Info", "You can't buff while you are attacking!<br>Stop your fight and try again!", false, "Return", "main"); + } + else + { + return rebuildMainHtml(st); + } + } + + @Override + public boolean showResult(L2PcInstance player, String res) + { + if (SMART_WINDOW) + { + if ((player != null) && (res != null) && res.startsWith("<html>")) + { + final NpcHtmlMessage npcReply = new NpcHtmlMessage(); + npcReply.setHtml(res); + player.sendPacket(npcReply); + player.sendPacket(ActionFailed.STATIC_PACKET); + return false; + } + } + return super.showResult(player, res); + } + + private String getSkillIconHtml(int id, int level) + { + String iconNumber = getSkillIconNumber(id, level); + return "<button action=\"bypass -h Quest " + QUEST_LOADING_INFO + " description " + id + " " + level + " x\" width=32 height=32 back=\"Icon.skill" + iconNumber + "\" fore=\"Icon.skill" + iconNumber + "\">"; + } + + private String getSkillIconNumber(int id, int level) + { + String formato; + if (id == 4) + { + formato = "0004"; + } + else if ((id > 9) && (id < 100)) + { + formato = "00" + id; + } + else if ((id > 99) && (id < 1000)) + { + formato = "0" + id; + } + else if (id == 1517) + { + formato = "1536"; + } + else if (id == 1518) + { + formato = "1537"; + } + else if (id == 1547) + { + formato = "0065"; + } + else if (id == 2076) + { + formato = "0195"; + } + else if ((id > 4550) && (id < 4555)) + { + formato = "5739"; + } + else if ((id > 4698) && (id < 4701)) + { + formato = "1331"; + } + else if ((id > 4701) && (id < 4704)) + { + formato = "1332"; + } + else if (id == 6049) + { + formato = "0094"; + } + else + { + formato = String.valueOf(id); + } + return formato; + } + + static public void main(String[] args) + { + new NpcBuffer(); + } +} \ No newline at end of file Index: dist/game/data/stats/npcs/custom/custom.xml =================================================================== --- dist/game/data/stats/npcs/custom/custom.xml (revision 10413) +++ dist/game/data/stats/npcs/custom/custom.xml (working copy) @@ -58,4 +58,10 @@ <height normal="22.25" /> </collision> </npc> + <npc id="12" displayId="32226" name="Rin4a" usingServerSideName="true" title="NPC Buffer" usingServerSideTitle="true" type="L2NpcBuffer"> + <collision> + <radius normal="11" /> + <height normal="22.25" /> + </collision> + </npc> </list> \ No newline at end of file Index: dist/sql/game/scheme_npcbuffer.sql =================================================================== --- dist/sql/game/scheme_npcbuffer.sql (revision 0) +++ dist/sql/game/scheme_npcbuffer.sql (working copy) @@ -0,0 +1,182 @@ +DROP TABLE IF EXISTS `npcbuffer_buff_list`; +DROP TABLE IF EXISTS `npcbuffer_scheme_contents`; +DROP TABLE IF EXISTS `npcbuffer_scheme_list`; + +CREATE TABLE `npcbuffer_buff_list` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `buff_class` int(2) DEFAULT NULL, + `buffType` varchar(10) DEFAULT NULL, + `buffId` int(5) DEFAULT '0', + `buffLevel` int(5) DEFAULT NULL, + `forClass` tinyint(1) DEFAULT NULL, + `canUse` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) AUTO_INCREMENT=136; +CREATE TABLE `npcbuffer_scheme_contents` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `scheme_id` int(11) DEFAULT NULL, + `skill_id` int(8) DEFAULT NULL, + `skill_level` int(4) DEFAULT NULL, + `buff_class` int(2) DEFAULT NULL, + PRIMARY KEY (`id`) +) AUTO_INCREMENT=30; +CREATE TABLE `npcbuffer_scheme_list` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `player_id` varchar(40) DEFAULT NULL, + `scheme_name` varchar(36) DEFAULT NULL, + `mod_accepted` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) AUTO_INCREMENT=7; + +INSERT INTO `npcbuffer_buff_list` VALUES ('1', '0', 'buff', '1036', '2', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('2', '0', 'buff', '1040', '3', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('3', '0', 'buff', '1043', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('4', '0', 'buff', '1044', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('5', '0', 'buff', '1045', '6', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('6', '0', 'buff', '1047', '4', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('7', '0', 'buff', '1048', '6', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('8', '0', 'buff', '1059', '3', '1', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('9', '0', 'buff', '1068', '3', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('10', '0', 'buff', '1077', '3', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('11', '0', 'buff', '1085', '3', '1', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('12', '0', 'buff', '1086', '2', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('13', '0', 'buff', '1087', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('14', '0', 'buff', '1204', '2', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('15', '0', 'buff', '1240', '3', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('16', '0', 'buff', '1242', '3', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('17', '0', 'buff', '1243', '6', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('18', '0', 'buff', '1257', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('19', '0', 'buff', '1268', '4', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('20', '0', 'buff', '1303', '2', '1', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('21', '0', 'buff', '1304', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('22', '0', 'buff', '1307', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('23', '0', 'buff', '1311', '6', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('24', '0', 'buff', '1397', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('25', '0', 'buff', '1460', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('26', '0', 'buff', '1232', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('27', '0', 'buff', '1238', '3', '3', '0'); +INSERT INTO `npcbuffer_buff_list` VALUES ('28', '0', 'special', '1323', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('29', '0', 'special', '1388', '3', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('30', '0', 'special', '1389', '3', '1', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('31', '1', 'song', '264', '1', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('32', '1', 'song', '265', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('33', '1', 'song', '266', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('34', '1', 'song', '267', '1', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('35', '1', 'song', '268', '1', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('36', '1', 'song', '269', '1', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('37', '1', 'song', '270', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('38', '1', 'song', '304', '1', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('39', '1', 'song', '305', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('40', '1', 'song', '306', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('41', '1', 'song', '308', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('42', '1', 'song', '349', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('43', '1', 'song', '363', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('44', '1', 'song', '364', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('45', '1', 'song', '529', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('46', '1', 'song', '764', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('47', '1', 'song', '914', '1', '3', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('48', '2', 'dance', '271', '1', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('49', '2', 'dance', '272', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('50', '2', 'dance', '273', '1', '1', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('51', '2', 'dance', '274', '1', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('52', '2', 'dance', '275', '1', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('53', '2', 'dance', '276', '1', '1', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('54', '2', 'dance', '277', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('55', '2', 'dance', '307', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('56', '2', 'dance', '309', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('57', '2', 'dance', '310', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('58', '2', 'dance', '311', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('59', '2', 'dance', '365', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('60', '2', 'dance', '366', '1', '3', '0'); +INSERT INTO `npcbuffer_buff_list` VALUES ('61', '2', 'dance', '530', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('62', '2', 'dance', '765', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('63', '2', 'dance', '915', '1', '3', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('64', '3', 'resist', '1461', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('65', '3', 'chant', '1002', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('66', '3', 'chant', '1006', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('67', '3', 'chant', '1007', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('68', '3', 'chant', '1009', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('69', '3', 'chant', '1251', '2', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('70', '3', 'chant', '1252', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('71', '3', 'chant', '1253', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('72', '3', 'chant', '1284', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('73', '3', 'chant', '1308', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('74', '3', 'chant', '1309', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('75', '3', 'chant', '1310', '4', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('76', '3', 'chant', '1362', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('77', '3', 'special', '1499', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('78', '3', 'special', '1500', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('79', '3', 'special', '1501', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('80', '3', 'special', '1502', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('81', '3', 'special', '1503', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('82', '3', 'special', '1504', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('83', '3', 'special', '1519', '1', '3', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('84', '4', 'others', '825', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('85', '4', 'others', '826', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('86', '4', 'others', '827', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('87', '4', 'others', '828', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('88', '4', 'others', '829', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('89', '4', 'others', '830', '1', '3', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('90', '5', 'others', '834', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('91', '5', 'others', '1442', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('92', '5', 'others', '1443', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('93', '5', 'others', '1444', '1', '3', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('94', '6', 'cubic', '67', '7', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('95', '6', 'cubic', '10', '8', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('96', '6', 'cubic', '22', '7', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('97', '6', 'cubic', '33', '8', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('98', '6', 'cubic', '278', '6', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('99', '6', 'cubic', '449', '4', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('100', '6', 'cubic', '1279', '9', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('101', '6', 'cubic', '1280', '9', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('102', '6', 'cubic', '1281', '9', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('103', '6', 'cubic', '1328', '8', '3', '0'); +INSERT INTO `npcbuffer_buff_list` VALUES ('104', '6', 'cubic', '1329', '9', '3', '0'); +INSERT INTO `npcbuffer_buff_list` VALUES ('105', '6', 'cubic', '1330', '8', '3', '0'); +INSERT INTO `npcbuffer_buff_list` VALUES ('106', '6', 'cubic', '779', '1', '3', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('107', '7', 'special', '1062', '2', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('108', '7', 'special', '1355', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('109', '7', 'special', '1356', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('110', '7', 'special', '1357', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('111', '7', 'special', '1363', '1', '0', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('112', '7', 'special', '1413', '1', '1', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('114', '7', 'special', '1457', '1', '3', '0'); +INSERT INTO `npcbuffer_buff_list` VALUES ('115', '7', 'special', '4699', '13', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('116', '7', 'special', '4700', '13', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('117', '7', 'special', '4702', '13', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('118', '7', 'special', '4703', '13', '3', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('119', '8', 'resist', '1032', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('120', '8', 'resist', '1033', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('121', '8', 'resist', '1035', '4', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('122', '8', 'resist', '1078', '6', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('123', '8', 'resist', '1182', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('124', '8', 'resist', '1189', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('125', '8', 'resist', '1191', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('126', '8', 'resist', '1259', '4', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('127', '8', 'resist', '1352', '1', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('128', '8', 'resist', '1353', '1', '2', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('129', '8', 'resist', '1354', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('130', '8', 'resist', '1392', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('131', '8', 'resist', '1393', '3', '3', '1'); + +INSERT INTO `npcbuffer_buff_list` VALUES ('132', '8', 'overlord', '1003', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('133', '8', 'overlord', '1004', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('134', '8', 'overlord', '1005', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('135', '8', 'overlord', '1008', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('136', '8', 'overlord', '1249', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('137', '8', 'overlord', '1250', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('138', '8', 'overlord', '1260', '3', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('139', '8', 'overlord', '1261', '2', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('140', '8', 'overlord', '1282', '2', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('141', '8', 'overlord', '1364', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('142', '8', 'overlord', '1365', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('143', '8', 'overlord', '1415', '1', '3', '1'); +INSERT INTO `npcbuffer_buff_list` VALUES ('144', '8', 'overlord', '1416', '1', '3', '1'); \ No newline at end of file
×