Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Fake Npc - Cambiar apariencia NPC

Iniciado por Swarlog, Ago 31, 2022, 07:57 PM

Tema anterior - Siguiente tema

Swarlog

El funcionamiento de este codigo trata en poner apariencias a un npc.

Ejemplo: raza orco, class titan, armadura vesper, arma infinity, hero etc. lo que se hace llamar Npc Fake.

CitarCORE
Index: /trunk/Core/java/com/l2jserver/gameserver/network/serverpackets/AbstractNpcInfo.java
===================================================================
--- /trunk/Core/java/com/l2jserver/gameserver/network/serverpackets/AbstractNpcInfo.java      (revision 443)
+++ /trunk/Core/java/com/l2jserver/gameserver/network/serverpackets/AbstractNpcInfo.java      (revision 444)
@@ -15,8 +15,12 @@
package com.l2jserver.gameserver.network.serverpackets;
 
+import java.text.DecimalFormat;
+
import com.l2jserver.Config;
+import com.l2jserver.gameserver.datatables.CharTemplateTable;
import com.l2jserver.gameserver.datatables.ClanTable;
import com.l2jserver.gameserver.instancemanager.TownManager;
import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.actor.FakePc;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
@@ -26,4 +30,5 @@
import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.templates.L2PcTemplate;
import com.l2jserver.gameserver.model.effects.AbnormalEffect;
 
@@ -126,4 +131,148 @@
                protected void writeImpl()
                {
+          FakePc fpc = _npc.getFakePc();
+          if (fpc != null)
+          {
+              writeC(0x31);
+              writeD(_x);
+              writeD(_y);
+              writeD(_z);
+              writeD(0x00); // vehicle id
+              writeD(_npc.getObjectId());
+              writeS(fpc.name); // visible name
+              writeD(fpc.race);
+              writeD(fpc.sex);
+              writeD(fpc.clazz);
+           
+              writeD(fpc.pdUnder);
+              writeD(fpc.pdHead);
+              writeD(fpc.pdRHand);
+              writeD(fpc.pdLHand);
+              writeD(fpc.pdGloves);
+              writeD(fpc.pdChest);
+              writeD(fpc.pdLegs);
+              writeD(fpc.pdFeet);
+              writeD(fpc.pdBack);
+              writeD(fpc.pdLRHand);
+              writeD(fpc.pdHair);
+              writeD(fpc.pdHair2);
+              writeD(fpc.pdRBracelet);
+              writeD(fpc.pdLBracelet);
+              writeD(fpc.pdDeco1);
+              writeD(fpc.pdDeco2);
+              writeD(fpc.pdDeco3);
+              writeD(fpc.pdDeco4);
+              writeD(fpc.pdDeco5);
+              writeD(fpc.pdDeco6);
+              writeD(0x00); // belt
+           
+              writeD(fpc.pdUnderAug);
+              writeD(fpc.pdHeadAug);
+              writeD(fpc.pdRHandAug);
+              writeD(fpc.pdLHandAug);
+              writeD(fpc.pdGlovesAug);
+              writeD(fpc.pdChestAug);
+              writeD(fpc.pdLegsAug);
+              writeD(fpc.pdFeetAug);
+              writeD(fpc.pdBackAug);
+              writeD(fpc.pdLRHandAug);
+              writeD(fpc.pdHairAug);
+              writeD(fpc.pdHair2Aug);
+              writeD(fpc.pdRBraceletAug);
+              writeD(fpc.pdLBraceletAug);
+              writeD(fpc.pdDeco1Aug);
+              writeD(fpc.pdDeco2Aug);
+              writeD(fpc.pdDeco3Aug);
+              writeD(fpc.pdDeco4Aug);
+              writeD(fpc.pdDeco5Aug);
+              writeD(fpc.pdDeco6Aug);
+              writeD(0x00); // belt aug
+              writeD(0x00);
+              writeD(0x01);
+           
+              writeD(fpc.pvpFlag);
+              writeD(fpc.karma);
+           
+              writeD(_mAtkSpd);
+              writeD(_pAtkSpd);
+           
+              writeD(0x00);
+           
+              writeD(_runSpd);
+              writeD(_walkSpd);
+              writeD(_runSpd); // swim run speed
+              writeD(_walkSpd); // swim walk speed
+              writeD(_runSpd); // fly run speed
+              writeD(_walkSpd); // fly walk speed
+              writeD(_runSpd);
+              writeD(_walkSpd);
+              writeF(_npc.getMovementSpeedMultiplier()); // _activeChar.getProperMultiplier()
+              writeF(_npc.getAttackSpeedMultiplier()); // _activeChar.getAttackSpeedMultiplier()
+           
+              // TODO: add handling of mount collision
+              L2PcTemplate pctmpl = CharTemplateTable.getInstance().getTemplate(fpc.clazz);
+              writeF(fpc.sex == 0 ? pctmpl.getCollisionRadius() : pctmpl.getCollisionRadius());
+              writeF(fpc.sex == 0 ? pctmpl.getCollisionHeight() : pctmpl.getCollisionHeight());
+           
+              writeD(fpc.hairStyle);
+              writeD(fpc.hairColor);
+              writeD(fpc.face);
+              if (_npc instanceof L2MonsterInstance)
+                writeS(fpc.title + " - HP " + new DecimalFormat("#.##").format(100.0 *_npc.getCurrentHp() / _npc.getMaxVisibleHp()) + "%"); // visible title
+              else
+                writeS(fpc.title);
+           
+              writeD(0x00); // clan id
+              writeD(0x00); // clan crest id
+              writeD(0x00); // ally id
+              writeD(0x00); // ally crest id
+           
+              writeC(0x01); // standing = 1  sitting = 0
+              writeC(_npc.isRunning() ? 1 : 0); // running = 1  walking = 0
+              writeC(_npc.isInCombat() ? 1 : 0);
+              writeC(_npc.isAlikeDead() ? 1 : 0);
+           
+              writeC(fpc.invisible); // invisible = 1  visible =0
+           
+              writeC(fpc.mount); // 1 on strider  2 on wyvern  3 on Great Wolf  0 no mount
+              writeC(0x00); //  1 - sellshop
+              writeH(0x00); // cubic count
+              //for (int id : allCubics)
+              //    writeH(id);
+              writeC(0x00); // find party members
+              writeD(0x00); // abnormal effect
+              writeC(0x00); // isFlying() ? 2 : 0
+              writeH(0x00); //getRecomHave(): Blue value for name (0 = white, 255 = pure blue)
+              writeD(1000000); // getMountNpcId() + 1000000
+              writeD(fpc.clazz);
+              writeD(0x00); // ?
+              writeC(fpc.enchantEffect);
+              writeC(fpc.team); //team circle around feet 1= Blue, 2 = red
+              writeD(0x00); // getClanCrestLargeId()
+              writeC(0x00); // isNoble(): Symbol on char menu ctrl+I
+              writeC(fpc.hero); // Hero Aura
+              writeC(fpc.fishing); //0x01: Fishing Mode (Cant be undone by setting back to 0)
+              writeD(fpc.fishingX);
+              writeD(fpc.fishingY);
+              writeD(fpc.fishingZ);
+           
+              writeD(fpc.nameColor);
+              writeD(_heading);
+              writeD(0x00); // pledge class
+              writeD(0x00); // pledge type
+              writeD(fpc.titleColor);
+           
+              writeD(0x00); // cursed weapon level
+              writeD(0x00); // reputation score
+              writeD(0x00); // transformation id
+              writeD(0x00); // agathion id
+              writeD(0x01); // T2 ?
+              writeD(0x00); // special effect
+              /*writeD(0x00); // territory Id
+              writeD(0x00); // is Disguised
+              writeD(0x00); // territory Id*/
+          }
+          else
+          {
                        writeC(0x0c);
                        writeD(_npc.getObjectId());
@@ -183,4 +332,5 @@
                        writeD(_npc.getSpecialEffect());
                        writeD(_displayEffect);
+          }
                }
        }
Index: /trunk/Core/java/com/l2jserver/gameserver/model/actor/status/AttackableStatus.java
===================================================================
--- /trunk/Core/java/com/l2jserver/gameserver/model/actor/status/AttackableStatus.java  (revision 443)
+++ /trunk/Core/java/com/l2jserver/gameserver/model/actor/status/AttackableStatus.java  (revision 444)
@@ -15,6 +15,10 @@
package com.l2jserver.gameserver.model.actor.status;
 
+import java.util.Collection;
+
import com.l2jserver.gameserver.model.actor.L2Attackable;
import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.AbstractNpcInfo;
 
public class AttackableStatus extends NpcStatus
@@ -54,5 +58,21 @@
        }
     
-      @Override
+  @Override
+  public void setCurrentHp(double newHp, boolean broadcastPacket)
+  {
+      super.setCurrentHp(newHp, broadcastPacket);
+     
+      if (getActiveChar().getFakePc() != null)
+      {
+          Collection<L2PcInstance> plrs = getActiveChar().getKnownList().getKnownPlayers().values();
+          for (L2PcInstance player : plrs)
+          {
+              if (player != null)
+                player.sendPacket(new AbstractNpcInfo.NpcInfo(getActiveChar(), player));
+          }
+      }
+  }
+
+  @Override
        public L2Attackable getActiveChar()
        {
Index: /trunk/Core/java/com/l2jserver/gameserver/model/actor/L2Npc.java
===================================================================
--- /trunk/Core/java/com/l2jserver/gameserver/model/actor/L2Npc.java    (revision 443)
+++ /trunk/Core/java/com/l2jserver/gameserver/model/actor/L2Npc.java    (revision 444)
@@ -27,4 +27,5 @@
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.cache.HtmCache;
+import com.l2jserver.gameserver.datatables.FakePcsTable;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.handler.BypassHandler;
@@ -148,5 +149,5 @@
        */
        private L2Character _summoner = null;
-   
+      private FakePc _fakePc = null;
        private final L2NpcAIData _staticAIData = getTemplate().getAIDataStatic();
     
@@ -542,5 +543,5 @@
                        return;
                }
-           
+                _fakePc = FakePcsTable.getInstance().getFakePc(template.getNpcId());
                // Set the name of the L2Character
                setName(template.getName());
@@ -1722,5 +1723,10 @@
                return _displayEffect;
        }
-   

+  public FakePc getFakePc()
+  {
+      return _fakePc;
+  }
+
        public int getColorEffect()
        {
Index: /trunk/Core/java/com/l2jserver/gameserver/model/actor/FakePc.java
===================================================================
--- /trunk/Core/java/com/l2jserver/gameserver/model/actor/FakePc.java  (revision 444)
+++ /trunk/Core/java/com/l2jserver/gameserver/model/actor/FakePc.java  (revision 444)
@@ -0,0 +1,81 @@
+/*
+ * 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.l2jserver.gameserver.model.actor;
+
+public class FakePc
+{
+  public int race;
+  public int sex;
+  public int clazz;
+  public String title;
+  public int titleColor;
+  public String name;
+  public int nameColor;
+  public int hairStyle;
+  public int hairColor;
+  public int face;
+  public byte mount;
+  public byte team;
+  public byte hero;
+  public int pdUnder;
+  public int pdUnderAug;
+  public int pdHead;
+  public int pdHeadAug;
+  public int pdRHand;
+  public int pdRHandAug;
+  public int pdLHand;
+  public int pdLHandAug;
+  public int pdGloves;
+  public int pdGlovesAug;
+  public int pdChest;
+  public int pdChestAug;
+  public int pdLegs;
+  public int pdLegsAug;
+  public int pdFeet;
+  public int pdFeetAug;
+  public int pdBack;
+  public int pdBackAug;
+  public int pdLRHand;
+  public int pdLRHandAug;
+  public int pdHair;
+  public int pdHairAug;
+  public int pdHair2;
+  public int pdHair2Aug;
+  public int pdRBracelet;
+  public int pdRBraceletAug;
+  public int pdLBracelet;
+  public int pdLBraceletAug;
+  public int pdDeco1;
+  public int pdDeco1Aug;
+  public int pdDeco2;
+  public int pdDeco2Aug;
+  public int pdDeco3;
+  public int pdDeco3Aug;
+  public int pdDeco4;
+  public int pdDeco4Aug;
+  public int pdDeco5;
+  public int pdDeco5Aug;
+  public int pdDeco6;
+  public int pdDeco6Aug;
+  public int enchantEffect;
+  public int pvpFlag;
+  public int karma;
+  public byte fishing;
+  public int fishingX;
+  public int fishingY;
+  public int fishingZ;
+  public byte invisible;
+}
Index: /trunk/Core/java/com/l2jserver/gameserver/datatables/FakePcsTable.java
===================================================================
--- /trunk/Core/java/com/l2jserver/gameserver/datatables/FakePcsTable.java      (revision 444)
+++ /trunk/Core/java/com/l2jserver/gameserver/datatables/FakePcsTable.java      (revision 444)
@@ -0,0 +1,159 @@
+/*
+ * 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.l2jserver.gameserver.datatables;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javolution.util.FastMap;
+
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.model.actor.FakePc;
+
+public class FakePcsTable
+{
+  /** The logger<br> */
+  private static Logger _log = Logger.getLogger(FakePcsTable.class.getName());
+
+  private FastMap<Integer, FakePc> _fakePcs = new FastMap<Integer, FakePc>();
+
+  private FakePcsTable()
+  {
+      loadData();
+  }
+
+  private void loadData()
+  {
+      _fakePcs.clear();
+   
+      Connection con = null;
+   
+      try
+      {
+        con = L2DatabaseFactory.getInstance().getConnection();
+     
+        PreparedStatement stmt = con.prepareStatement("SELECT * FROM `fake_pcs`");
+        ResultSet rset = stmt.executeQuery();
+     
+        FakePc fpc = null;
+     
+        while (rset.next())
+        {
+            fpc = new FakePc();
+         
+            int npcId = rset.getInt("npc_id");
+            fpc.race = rset.getInt("race");
+            fpc.sex = rset.getInt("sex");
+            fpc.clazz = rset.getInt("class");
+            fpc.title = rset.getString("title");
+            fpc.titleColor = Integer.decode("0x" + rset.getString("title_color"));
+            fpc.name = rset.getString("name");
+            fpc.nameColor = Integer.decode("0x" + rset.getString("name_color"));
+            fpc.hairStyle = rset.getInt("hair_style");
+            fpc.hairColor = rset.getInt("hair_color");
+            fpc.face = rset.getInt("face");
+            fpc.mount = rset.getByte("mount");
+            fpc.team = rset.getByte("team");
+            fpc.hero = rset.getByte("hero");
+            fpc.pdUnder = rset.getInt("pd_under");
+            fpc.pdUnderAug = rset.getInt("pd_under_aug");
+            fpc.pdHead = rset.getInt("pd_head");
+            fpc.pdHeadAug = rset.getInt("pd_head_aug");
+            fpc.pdRHand = rset.getInt("pd_rhand");
+            fpc.pdRHandAug = rset.getInt("pd_rhand_aug");
+            fpc.pdLHand = rset.getInt("pd_lhand");
+            fpc.pdLHandAug = rset.getInt("pd_lhand_aug");
+            fpc.pdGloves = rset.getInt("pd_gloves");
+            fpc.pdGlovesAug = rset.getInt("pd_gloves_aug");
+            fpc.pdChest = rset.getInt("pd_chest");
+            fpc.pdChestAug = rset.getInt("pd_chest_aug");
+            fpc.pdLegs = rset.getInt("pd_legs");
+            fpc.pdLegsAug = rset.getInt("pd_legs_aug");
+            fpc.pdFeet = rset.getInt("pd_feet");
+            fpc.pdFeetAug = rset.getInt("pd_feet_aug");
+            fpc.pdBack = rset.getInt("pd_back");
+            fpc.pdBackAug = rset.getInt("pd_back_aug");
+            fpc.pdLRHand = rset.getInt("pd_lrhand");
+            fpc.pdLRHandAug = rset.getInt("pd_lrhand_aug");
+            fpc.pdHair = rset.getInt("pd_hair");
+            fpc.pdHairAug = rset.getInt("pd_hair_aug");
+            fpc.pdHair2 = rset.getInt("pd_hair2");
+            fpc.pdHair2Aug = rset.getInt("pd_hair2_aug");
+            fpc.pdRBracelet = rset.getInt("pd_rbracelet");
+            fpc.pdRBraceletAug = rset.getInt("pd_rbracelet_aug");
+            fpc.pdLBracelet = rset.getInt("pd_lbracelet");
+            fpc.pdLBraceletAug = rset.getInt("pd_lbracelet_aug");
+            fpc.pdDeco1 = rset.getInt("pd_deco1");
+            fpc.pdDeco1Aug = rset.getInt("pd_deco1_aug");
+            fpc.pdDeco2 = rset.getInt("pd_deco2");
+            fpc.pdDeco2Aug = rset.getInt("pd_deco2_aug");
+            fpc.pdDeco3 = rset.getInt("pd_deco3");
+            fpc.pdDeco3Aug = rset.getInt("pd_deco3_aug");
+            fpc.pdDeco4 = rset.getInt("pd_deco4");
+            fpc.pdDeco4Aug = rset.getInt("pd_deco4_aug");
+            fpc.pdDeco5 = rset.getInt("pd_deco5");
+            fpc.pdDeco5Aug = rset.getInt("pd_deco5_aug");
+            fpc.pdDeco6 = rset.getInt("pd_deco6");
+            fpc.pdDeco6Aug = rset.getInt("pd_deco6_aug");
+            fpc.enchantEffect = rset.getInt("enchant_effect");
+            fpc.pvpFlag = rset.getInt("pvp_flag");
+            fpc.karma = rset.getInt("karma");
+            fpc.fishing = rset.getByte("fishing");
+            fpc.fishingX = rset.getInt("fishing_x");
+            fpc.fishingY = rset.getInt("fishing_y");
+            fpc.fishingZ = rset.getInt("fishing_z");
+            fpc.invisible = rset.getByte("invisible");
+            _fakePcs.put(npcId, fpc);
+        }
+     
+        rset.close();
+        stmt.close();
+      }
+      catch (SQLException e)
+      {
+        _log.log(Level.SEVERE, "Error while creating fake pc table: " + e.getMessage(), e);
+      }
+      finally
+      {
+        L2DatabaseFactory.close(con);
+      }
+  }
+
+  public void reloadData()
+  {
+      loadData();
+  }
+
+  public FakePc getFakePc(int npcId)
+  {
+      return _fakePcs.get(npcId);
+  }
+
+  public static FakePcsTable getInstance()
+  {
+      return SingletonHolder._instance;
+  }
+
+  @SuppressWarnings("synthetic-access")
+  private static class SingletonHolder
+  {
+      protected static final FakePcsTable _instance = new FakePcsTable();
+  }
+}
 
CitarDATAPACK
Index: /trunk/Data/dist/game/data/scripts/handlers/admincommandhandlers/AdminAdmin.java
===================================================================
--- /trunk/Data/dist/game/data/scripts/handlers/admincommandhandlers/AdminAdmin.java    (revision 339)
+++ /trunk/Data/dist/game/data/scripts/handlers/admincommandhandlers/AdminAdmin.java    (revision 340)
@@ -25,4 +25,5 @@
import com.l2jserver.gameserver.datatables.AdminTable;
import com.l2jserver.gameserver.datatables.DoorTable;
+import com.l2jserver.gameserver.datatables.FakePcsTable;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.datatables.MultiSell;
@@ -306,4 +307,9 @@
                                        activeChar.sendMessage("All Doors have been reloaded");
                                }
+                              else if (type.startsWith("fakenpc"))
+                              {
+                                      FakePcsTable.getInstance().reloadData();
+                                      activeChar.sendMessage("All Fake NPC have been reloaded");
+                              }
                                activeChar.sendMessage("WARNING: There are several known issues regarding this feature. Reloading server data during runtime is STRONGLY NOT RECOMMENDED for live servers, just for developing environments.");
                        }
 
CitarSQL
Index: /trunk/Data/dist/sql/Custom  sql  for server/fake_pcs/fake_pcs.sql
===================================================================
--- /trunk/Data/dist/sql/Custom  sql  for server/fake_pcs/fake_pcs.sql  (revision 340)
+++ /trunk/Data/dist/sql/Custom  sql  for server/fake_pcs/fake_pcs.sql  (revision 340)
@@ -0,0 +1,75 @@
+SET FOREIGN_KEY_CHECKS=0;
+-- ----------------------------
+-- Table structure for `fake_pcs`
+-- ----------------------------
DROP TABLE IF EXISTS `fake_pcs`;
CREATE TABLE `fake_pcs` (
  `npc_id` int(11) NOT NULL,
  `race` int(11) NOT NULL DEFAULT '0',
  `sex` int(11) NOT NULL DEFAULT '0',
  `class` int(11) NOT NULL DEFAULT '0',
  `title` varchar(255) NOT NULL,
  `title_color` int(11) NOT NULL DEFAULT '0',
  `name` varchar(255) NOT NULL,
  `name_color` int(11) NOT NULL DEFAULT '0',
  `hair_style` int(11) NOT NULL DEFAULT '0',
  `hair_color` int(11) NOT NULL DEFAULT '0',
  `face` int(11) NOT NULL DEFAULT '0',
  `mount` tinyint(4) NOT NULL DEFAULT '0',
  `team` tinyint(4) NOT NULL DEFAULT '0',
  `hero` tinyint(4) NOT NULL DEFAULT '0',
  `pd_under` int(11) NOT NULL DEFAULT '0',
  `pd_under_aug` int(11) NOT NULL DEFAULT '0',
  `pd_head` int(11) NOT NULL DEFAULT '0',
  `pd_head_aug` int(11) NOT NULL DEFAULT '0',
  `pd_rhand` int(11) NOT NULL DEFAULT '0',
  `pd_rhand_aug` int(11) NOT NULL DEFAULT '0',
  `pd_lhand` int(11) NOT NULL DEFAULT '0',
  `pd_lhand_aug` int(11) NOT NULL DEFAULT '0',
  `pd_gloves` int(11) NOT NULL DEFAULT '0',
  `pd_gloves_aug` int(11) NOT NULL DEFAULT '0',
  `pd_chest` int(11) NOT NULL DEFAULT '0',
  `pd_chest_aug` int(11) NOT NULL DEFAULT '0',
  `pd_legs` int(11) NOT NULL DEFAULT '0',
  `pd_legs_aug` int(11) NOT NULL DEFAULT '0',
  `pd_feet` int(11) NOT NULL DEFAULT '0',
  `pd_feet_aug` int(11) NOT NULL DEFAULT '0',
  `pd_back` int(11) NOT NULL DEFAULT '0',
  `pd_back_aug` int(11) NOT NULL DEFAULT '0',
  `pd_lrhand` int(11) NOT NULL DEFAULT '0',
  `pd_lrhand_aug` int(11) NOT NULL DEFAULT '0',
  `pd_hair` int(11) NOT NULL DEFAULT '0',
  `pd_hair_aug` int(11) NOT NULL DEFAULT '0',
  `pd_hair2` int(11) NOT NULL DEFAULT '0',
  `pd_hair2_aug` int(11) NOT NULL DEFAULT '0',
  `pd_rbracelet` int(11) NOT NULL DEFAULT '0',
  `pd_rbracelet_aug` int(11) NOT NULL DEFAULT '0',
  `pd_lbracelet` int(11) NOT NULL DEFAULT '0',
  `pd_lbracelet_aug` int(11) NOT NULL DEFAULT '0',
  `pd_deco1` int(11) NOT NULL DEFAULT '0',
  `pd_deco1_aug` int(11) NOT NULL DEFAULT '0',
  `pd_deco2` int(11) NOT NULL DEFAULT '0',
  `pd_deco2_aug` int(11) NOT NULL DEFAULT '0',
  `pd_deco3` int(11) NOT NULL DEFAULT '0',
  `pd_deco3_aug` int(11) NOT NULL DEFAULT '0',
  `pd_deco4` int(11) NOT NULL DEFAULT '0',
  `pd_deco4_aug` int(11) NOT NULL DEFAULT '0',
  `pd_deco5` int(11) NOT NULL DEFAULT '0',
  `pd_deco5_aug` int(11) NOT NULL DEFAULT '0',
  `pd_deco6` int(11) NOT NULL DEFAULT '0',
  `pd_deco6_aug` int(11) NOT NULL DEFAULT '0',
  `enchant_effect` tinyint(4) NOT NULL DEFAULT '0',
  `pvp_flag` int(11) NOT NULL DEFAULT '0',
  `karma` int(11) NOT NULL DEFAULT '0',
  `fishing` tinyint(4) NOT NULL DEFAULT '0',
  `fishing_x` int(11) NOT NULL DEFAULT '0',
  `fishing_y` int(11) NOT NULL DEFAULT '0',
  `fishing_z` int(11) NOT NULL DEFAULT '0',
  `invisible` tinyint(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`npc_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
+-- ----------------------------
+-- Records of fake_pcs
+-- ----------------------------
INSERT INTO `fake_pcs` VALUES ('9023', '0', '0', '88', '--', '64672', 'Flash', '64672', '0', '0', '0','0', '0', '0', '0', '0', '0', '0', '16015', '0', '0', '0', '43102', '0', '43100', '0', '43101', '0','43103', '0', '21716', '0', '0', '0', '40023', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0','0', '0', '0', '0', '0', '0', '0', '0', '30', '0', '0', '0', '0', '0', '0', '0');
Index: /trunk/Data/dist/sql/Custom  sql  for server/fake_pcs/fake_pcs_Npc edit.sql
===================================================================
--- /trunk/Data/dist/sql/Custom  sql  for server/fake_pcs/fake_pcs_Npc edit.sql (revision 340)
+++ /trunk/Data/dist/sql/Custom  sql  for server/fake_pcs/fake_pcs_Npc edit.sql (revision 340)
@@ -0,0 +1,2 @@
INSERT INTO custom_npc VALUES ('9023', '32365', 'Finish', '1', 'Event Manager', '1','LineageNPC2.TP_game_staff', '5.00', '12.50', '70', 'male', 'L2Monster', '40', '2444.000000000000000','1225.000000000000000', '0.000000000000000', '0.000000000000000', '40', '43', '30', '21', '20', '20','0', '0', '1086.00000', '471.00000', '749.00000', '313.00000', '230', '1', '333', '0', '0', '0','68.00000', '109.00000', '0', '0');
INSERT INTO custom_npcaidata VALUES ('9023', '7', '15', '0', '0', '1', '1', '1', '0', '0', '0', '0','0', '0', '0', '0', '0', '0', null, '0', null, '0', '0', 'fighter');