Noticias:

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

Menú Principal

Cambio de Skin

Iniciado por Swarlog, Ago 31, 2022, 08:37 PM

Tema anterior - Siguiente tema

Swarlog

Npc para cambiar el skin de tu personaje, es decir, la apariencia del cuerpo de tu personaje.

CitarCORE

Index: java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java
===================================================================
--- java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java (revision 3)
+++ java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java (working copy)
@@ -51,6 +51,8 @@
  private int _y = 0;
  private int _z = 0;
  private int _accessLevel = 0;
+ private int _customClassSkin = -1;
+ private int _customRaceSkin = -1;
 
  public CharSelectInfoPackage(int objectId, String name)
  {
@@ -353,4 +355,24 @@
  {
  _z = z;
  }
+
+ public void setCustomClassSkin(int valor)
+ {
+ _customClassSkin = valor;
+ }
+
+ public void setCustomRaceSkin(int valor)
+ {
+ _customRaceSkin = valor;
+ }
+
+ public int getCustomClassSkin()
+ {
+ return _customClassSkin;
+ }
+
+ public int getCustomRaceSkin()
+ {
+ return _customRaceSkin;
+ }
 }
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2ChangeSkinManagerInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2ChangeSkinManagerInstance.java (revision 0)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2ChangeSkinManagerInstance.java (revision 0)
@@ -0,0 +1,143 @@
+/*
+ * 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.model.actor.instance;
+
+import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
+import net.sf.l2j.gameserver.model.base.ClassId;
+
+/**
+ * @author execanciani & Toxico
+ */
+public class L2ChangeSkinManagerInstance extends L2NpcInstance
+{
+ public enum Races
+ {
+ FIGHTER(net.sf.l2j.gameserver.model.base.Race.Human, ClassId.fighter),
+ MAGE(net.sf.l2j.gameserver.model.base.Race.Human, ClassId.mage),
+ ELVENFIGHTER(net.sf.l2j.gameserver.model.base.Race.Elf, ClassId.elvenFighter),
+ ELVENMAGE(net.sf.l2j.gameserver.model.base.Race.Elf, ClassId.elvenMage),
+ DARKFIGHTER(net.sf.l2j.gameserver.model.base.Race.DarkElf, ClassId.darkFighter),
+ DARKMAGE(net.sf.l2j.gameserver.model.base.Race.DarkElf, ClassId.darkMage),
+ ORCFIGHTER(net.sf.l2j.gameserver.model.base.Race.Orc, ClassId.orcFighter),
+ ORCMAGE(net.sf.l2j.gameserver.model.base.Race.Orc, ClassId.orcMage),
+ DWARVEN(net.sf.l2j.gameserver.model.base.Race.Dwarf, ClassId.dwarvenFighter);
+
+ private net.sf.l2j.gameserver.model.base.Race races;
+ private ClassId classId;
+
+ private Races(net.sf.l2j.gameserver.model.base.Race races, ClassId classid)
+ {
+ this.races = races;
+ this.classId = classid;
+ }
+
+ public int getRaceId()
+ {
+ return races.ordinal();
+ }
+
+ public int getClassId()
+ {
+ return classId.getId();
+ }
+ }
+
+
+ public L2ChangeSkinManagerInstance(int objectId, NpcTemplate template)
+ {
+ super(objectId, template);
+
+ }
+
+ @Override
+ public void onBypassFeedback(L2PcInstance player, String command)
+ {
+ Races races = null;
+ if (command.startsWith("HumanFighter"))
+ {
+ races = Races.FIGHTER;
+ }
+
+ else if (command.startsWith("HumanMage"))
+ {
+ races = Races.MAGE;
+ }
+
+ else if (command.startsWith("ElfFighter"))
+ {
+ races = Races.ELVENFIGHTER;
+ }
+
+ else if (command.startsWith("ElfMage"))
+ {
+ races = Races.ELVENMAGE;
+ }
+
+ else if (command.startsWith("DarkElfFighter"))
+ {
+ races = Races.DARKFIGHTER;
+ }
+
+ else if (command.startsWith("DarkElfMage"))
+ {
+ races = Races.DARKMAGE;
+ }
+
+ else if (command.startsWith("OrcFighter"))
+ {
+ races = Races.ORCFIGHTER;
+ }
+
+ else if (command.startsWith("OrcMage"))
+ {
+ races = Races.ORCMAGE;
+ }
+
+ else if (command.startsWith("Dwarven"))
+ {
+ races = Races.DWARVEN;
+
+ }
+ else if (command.startsWith("BackMainSkin"))
+ {
+ player.setCustomClassSkin(-1);
+ player.setCustomRaceSkin(-1);
+ }
+ setRaceCustomSkin(player, races);
+
+ player.broadcastCharInfo();
+ player.broadcastUserInfo();
+
+ }
+
+ @Override
+ public String getHtmlPath(int npcId, int val)
+ {
+ String filename = "";
+ if (val == 0)
+ filename = "" + npcId;
+ else
+ filename = npcId + "-" + val;
+
+ return "data/html/mods/ChangeSkin/" + filename + ".htm";
+ }
+
+ private static void setRaceCustomSkin(L2PcInstance player, Races valor)
+ {
+ if ((player == null) || (valor == null))
+ {
+ return;
+ }
+ player.setCustomRaceSkin(valor.getRaceId());
+ player.setCustomClassSkin(valor.getClassId());
+ }
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 3)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -313,8 +313,8 @@
  private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?";
 
  private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,obj_Id,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,nobless,power_grade,last_recom_date) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
- private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=? WHERE obj_id=?";
- private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level FROM characters WHERE obj_id=?";
+ private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?, custom_race_skin=?, custom_class_skin=? WHERE obj_id=?";
+ private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,custom_race_skin,custom_class_skin FROM characters WHERE obj_id=?";
 
  private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC";
  private static final String ADD_CHAR_SUBCLASS = "INSERT INTO character_subclasses (char_obj_id,class_id,exp,sp,level,class_index) VALUES (?,?,?,?,?,?)";
@@ -601,7 +601,10 @@
  private final SummonRequest _summonRequest = new SummonRequest();
 
  private final GatesRequest _gatesRequest = new GatesRequest();
-
+
+ private int _customClassSkin = -1;
+ private int _customRaceSkin = -1;
+
  protected class ShortBuffTask implements Runnable
  {
  @Override
@@ -611,6 +614,7 @@
  setShortBuffTaskSkillId(0);
  }
  }
+
 
  protected static class SummonRequest
  {
@@ -5581,6 +5585,9 @@
 
  CursedWeaponsManager.getInstance().checkPlayer(player);
 
+ player.setCustomRaceSkin(rset.getInt("custom_race_skin"));
+ player.setCustomClassSkin(rset.getInt("custom_class_skin"));
+
  player.setAllianceWithVarkaKetra(rset.getInt("varka_ketra_ally"));
 
  player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level"));
@@ -5922,7 +5929,9 @@
  statement.setLong(47, getClanCreateExpiryTime());
  statement.setString(48, getName());
  statement.setLong(49, getDeathPenaltyBuffLevel());
- statement.setInt(50, getObjectId());
+ statement.setInt(50, getCustomRaceSkin());
+ statement.setInt(51, getCustomClassSkin());
+ statement.setInt(52, getObjectId());
 
  statement.execute();
  statement.close();
@@ -10705,4 +10714,30 @@
  break;
  }
  }
+
+ public void setCustomClassSkin(int valor)
+ {
+ _customClassSkin = valor;
+ }
+
+ public void setCustomRaceSkin(int valor)
+ {
+ _customRaceSkin = valor;
+ }
+
+ public int getCustomClassSkin()
+ {
+ return _customClassSkin;
+ }
+
+ public int getCustomRaceSkin()
+ {
+ return _customRaceSkin;
+ }
+
+ public PcTemplate getCustomSkinTemplate()
+ {
+ return CharTemplateTable.getInstance().getTemplate(getCustomClassSkin());
+ }
+
 }
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java
===================================================================
--- java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java (revision 3)
+++ java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java (working copy)
@@ -68,13 +68,22 @@
  writeD(_heading);
  writeD(_activeChar.getObjectId());
  writeS(_activeChar.getName());
- writeD(_activeChar.getRace().ordinal());
+
+ if (_activeChar.getCustomRaceSkin() == -1)
+ writeD(_activeChar.getRace().ordinal());
+ else
+ writeD(_activeChar.getCustomRaceSkin());
+
  writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
 
- if (_activeChar.getClassIndex() == 0)
+ // if ((_activeChar.getClassIndex() == 0)
+ // {
+ if (_activeChar.getCustomClassSkin() == -1)
  writeD(_activeChar.getClassId().getId());
  else
- writeD(_activeChar.getBaseClass());
+ writeD(_activeChar.getCustomClassSkin());
+ // else
+ // writeD(_activeChar.getBaseClass());
 
  writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
  writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
@@ -140,8 +149,17 @@
  }
  else
  {
- writeF(_activeChar.getBaseTemplate().getCollisionRadius());
- writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ if (_activeChar.getCustomRaceSkin() == -1)
+ {
+ writeF(_activeChar.getBaseTemplate().getCollisionRadius());
+ writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ }
+ else
+ {
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionRadius());
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionHeight());
+ }
+
  }
 
  writeD(_activeChar.getAppearance().getHairStyle());
Index: java/net/sf/l2j/gameserver/network/serverpackets/CharSelectInfo.java
===================================================================
--- java/net/sf/l2j/gameserver/network/serverpackets/CharSelectInfo.java (revision 3)
+++ java/net/sf/l2j/gameserver/network/serverpackets/CharSelectInfo.java (working copy)
@@ -88,12 +88,16 @@
  writeD(0x00); // ??
 
  writeD(charInfoPackage.getSex());
- writeD(charInfoPackage.getRace());
+ if (charInfoPackage.getCustomRaceSkin() == -1)
+ writeD(charInfoPackage.getRace());
+ else
+ writeD(charInfoPackage.getCustomRaceSkin());
 
- if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
+ if ((charInfoPackage.getCustomClassSkin() == -1) && (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()))
  writeD(charInfoPackage.getClassId());
  else
- writeD(charInfoPackage.getBaseClassId());
+ // writeD(charInfoPackage.getBaseClassId());
+ writeD(charInfoPackage.getCustomClassSkin());
 
  writeD(0x01); // active ??
 
@@ -178,7 +182,7 @@
 
  try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  {
- PreparedStatement statement = con.prepareStatement("SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, accesslevel, online, char_slot, lastAccess, base_class FROM characters WHERE account_name=?");
+ PreparedStatement statement = con.prepareStatement("SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, accesslevel, online, char_slot, lastAccess, base_class,custom_race_skin,custom_class_skin FROM characters WHERE account_name=?");
  statement.setString(1, loginName);
  ResultSet charList = statement.executeQuery();
 
@@ -267,11 +271,17 @@
  charInfopackage.setSp(chardata.getInt("sp"));
  charInfopackage.setClanId(chardata.getInt("clanid"));
 
- charInfopackage.setRace(chardata.getInt("race"));
+ final int customRaceSkin = chardata.getInt("custom_race_skin");
+
+ if (customRaceSkin == -1)
+ charInfopackage.setRace(chardata.getInt("race"));
+ else
+ charInfopackage.setCustomRaceSkin(customRaceSkin);
 
+ final int customClassSkin = chardata.getInt("custom_class_skin");
  final int baseClassId = chardata.getInt("base_class");
  final int activeClassId = chardata.getInt("classid");
-
+
  charInfopackage.setX(chardata.getInt("x"));
  charInfopackage.setY(chardata.getInt("y"));
  charInfopackage.setZ(chardata.getInt("z"));
@@ -313,10 +323,17 @@
  /*
  * Check if the base class is set to zero and alse doesn't match with the current active class, otherwise send the base class ID. This prevents chars created before base class was introduced from being displayed incorrectly.
  */
- if (baseClassId == 0 && activeClassId > 0)
- charInfopackage.setBaseClassId(activeClassId);
+ if (customClassSkin == -1)
+ if (baseClassId == 0 && activeClassId > 0)
+ charInfopackage.setBaseClassId(activeClassId);
+ else
+ charInfopackage.setBaseClassId(baseClassId);
  else
- charInfopackage.setBaseClassId(baseClassId);
+ charInfopackage.setCustomClassSkin(customClassSkin);
+ // if (baseClassId == 0 && activeClassId > 0)
+ // charInfopackage.setBaseClassId(activeClassId);
+ // else
+ // charInfopackage.setBaseClassId(baseClassId);
 
  charInfopackage.setDeleteTimer(deletetime);
  charInfopackage.setLastAccess(chardata.getLong("lastAccess"));
Index: java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java
===================================================================
--- java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java (revision 3)
+++ java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java (working copy)
@@ -66,13 +66,21 @@
  }
  writeS(name);
 
- writeD(_activeChar.getRace().ordinal());
+ if (_activeChar.getCustomRaceSkin() == -1)
+ writeD(_activeChar.getRace().ordinal());
+ else
+ writeD(_activeChar.getCustomRaceSkin());
+ // writeD(_activeChar.getRace().ordinal());
  writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
 
- if (_activeChar.getClassIndex() == 0)
+ // if ((_activeChar.getClassIndex() == 0)
+ // {
+ if (_activeChar.getCustomClassSkin() == -1)
  writeD(_activeChar.getClassId().getId());
  else
- writeD(_activeChar.getBaseClass());
+ writeD(_activeChar.getCustomClassSkin());
+ // else
+ // writeD(_activeChar.getBaseClass());
 
  writeD(_activeChar.getLevel());
  writeQ(_activeChar.getExp());
@@ -198,8 +206,17 @@
  }
  else
  {
- writeF(_activeChar.getBaseTemplate().getCollisionRadius());
- writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ if (_activeChar.getCustomRaceSkin() == -1)
+ {
+ writeF(_activeChar.getBaseTemplate().getCollisionRadius());
+ writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ }
+ else
+ {
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionRadius());
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionHeight());
+ }
+
  }
 
  writeD(_activeChar.getAppearance().getHairStyle());

CitarSQL

  `custom_race_skin` smallint(5) NOT NULL DEFAULT '0',
  `custom_class_skin` smallint(5) NOT NULL DEFAULT '0',

CitarHTML

data/html/mods/ChangeSkin/...

<html><body><center><button value="Human Fighter" action="bypass -h npc_%objectId%_HumanFighter" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Human Mage" action="bypass -h npc_%objectId%_HumanMage" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Elf Fighter" action="bypass -h npc_%objectId%_ElfFighter" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Elf Mage" action="bypass -h npc_%objectId%_ElfMage" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Dark Elf Fighter" action="bypass -h npc_%objectId%_DarkElfFighter" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Dark Elf Mage" action="bypass -h npc_%objectId%_DarkElfMage" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Orc Fighte" action="bypass -h npc_%objectId%_OrcFighter" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Orc Mage" action="bypass -h npc_%objectId%_OrcMage" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Dwarven" action="bypass -h npc_%objectId%_Dwarven" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
SI NO QUERES MAS TU CAMBIO DE SKIN<br1>
CON LA SIGUIENTE OPCION PUEDES<br1>
VOLVER A TENER TU CUERPO ANTERIOR<br1>
<button value="Back Main Skin" action="bypass -h npc_%objectId%_BackMainSkin" width=204 height=20 back="sek.cbui75" fore="sek.cbui76">
</center></body></html>

CitarNPC

<npc id="50009" idTemplate="30519" name="Change Skin Manager" title="L2JaCis">
<set name="level" val="70"/>
<set name="radius" val="7"/>
<set name="height" val="18"/>
<set name="rHand" val="0"/>
<set name="lHand" val="0"/>
<set name="type" val="L2ChangeSkinManager"/>
<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"/>
<skills>
<skill id="4045" level="1"/>
<skill id="4416" level="18"/>
</skills>
</npc>

Creditos: execanciani & Toxico

afidrk


Swarlog

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectatesirve en h5?


Si, solo tienes que adaptarlo.

afidrk

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectatesirve en h5?


Si, solo tienes que adaptarlo.


Gracias! No tengo idea como se hace pero investigaste! Si me anda te la chupo jajajaja SOS un genio!

Swarlog

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectatesirve en h5?


Si, solo tienes que adaptarlo.


Gracias! No tengo idea como se hace pero investigaste! Si me anda te la chupo jajajaja SOS un genio!

Ve probando y nos comentas que tal ^^