Noticias:

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

Menú Principal

Mensajes recientes

#1
Implementaciones / Item Clean PK
Último mensaje por dwight - Abr 09, 2024, 08:58 AM
Dejo mi aporte de un ItemHandler (Clean PK)

diff --git a/config/CustomItemHandler/ItemHandler.properties
new file mode 100644
index 0000000..0ff21e6
--- /dev/null
+++ b/config/CustomItemHandler/ItemHandler.properties
@@ -0,0 +1,11 @@
+#=============================================================
+#                 Item Clean Pk
+#=============================================================
+#Item Clean PK ID
+Clean Pk ItemID = 0
+
+# ID of the anime skill when using the item
+SkillIDCleanPk = 5000
+
+#Clean Pk skill animation time
+SkillEffectsTimeCleanPK = 5000
diff --git a/java/L2jServer/Config.java b/java/L2jServer/Config.java
index f2336bb..77b1b0b 100644
--- a/java/L2jServer/Config.java
+++ b/java/L2jServer/Config.java
@@ -835,6 +835,9 @@
    public static int CLAN_FULL_STATUS;
    public static int CLAN_QUANTIDADE_ITEMFULL;
    public static int ITEM_CLASS_ID;
+   public static int SEGUNDS_SKILL_ANIMATION_PK;
+   public static int SKILL_ID_PK;
+   public static int ITEM_PK_CLEANID;
    // ============================================================
    public static void loadItensCoin()
    {
@@ -846,6 +849,9 @@
          final InputStream is = new FileInputStream(new File(ITEM_HANDLER));
          item.load(is);
          is.close();
+         ITEM_PK_CLEANID = Integer.parseInt(item.getProperty("CleanPkItemID", "0"));
+         SKILL_ID_PK = Integer.parseInt(item.getProperty("SkillIDCleanPk", "0"));
+         SEGUNDS_SKILL_ANIMATION_PK = Integer.parseInt(item.getProperty("SkillEffectsTimeCleanPK", "0"));
          ITEM_CLASS_ID = Integer.parseInt(ItemHandler.getProperty("ItemCard", "0"));
          REWARD_ITEM_D = Integer.parseInt(ItemHandler.getProperty("ItemRewardGradeDCoinID", "0"));
          COIN_ITEM_LEVEL = Integer.parseInt(ItemHandler.getProperty("ItemLevelCoinID", "5557"));
diff --git a/java/L2jServer/gameserver/handler/ItemHandler.java b/java/L2jServer/gameserver/handler/ItemHandler.java
index 63c3b34..3c3027d 100644
--- a/java/L2jServer/gameserver/handler/ItemHandler.java
+++ b/java/L2jServer/gameserver/handler/ItemHandler.java
@@ -42,6 +42,7 @@
 import java/L2jServer.gameserver.handler.itemhandlers.ClanLevel;
 import java/L2jServer.gameserver.handler.itemhandlers.ClanReputation;
 import java/L2jServer.gameserver.handler.itemhandlers.ClassItem;
+import java/L2jServer.gameserver.handler.itemhandlers.CleanPk;
 import java/L2jServer.gameserver.handler.itemhandlers.CrystalCarol;
 import java/L2jServer.gameserver.handler.itemhandlers.Crystals;
 import java/L2jServer.gameserver.handler.itemhandlers.CustomPotions;
@@ -136,6 +137,7 @@
    private ItemHandler()
    {
       _datatable = new TreeMap<>();
+      registerItemHandler(new CleanPk());
       registerItemHandler(new Skin1());
       registerItemHandler(new Skin2());
       registerItemHandler(new Skin3());
diff --git a/java/L2jServer/gameserver/handler/itemhandlers/CleanPk.java b/java/L2jServer/gameserver/handler/itemhandlers/CleanPk.java
new file mode 100644
index 0000000..0c7f435
--- /dev/null
+++ b/java/L2jServer/gameserver/handler/itemhandlers/CleanPk.java
@@ -0,0 +1,67 @@
+package java/L2jServer.gameserver.handler.itemhandlers;
+
+import java/L2jServer.Config;
+import java/L2jServer.gameserver.handler.IItemHandler;
+import java/L2jServer.gameserver.model.L2Object;
+import java/L2jServer.gameserver.model.actor.instance.L2ItemInstance;
+import java/L2jServer.gameserver.model.actor.instance.L2PcInstance;
+import java/L2jServer.gameserver.model.actor.instance.L2PlayableInstance;
+import java/L2jServer.gameserver.network.serverpackets.MagicSkillUser;
+import java/L2jServer.gameserver.network.serverpackets.SetupGauge;
+import java/L2jServer.gameserver.thread.ThreadPoolManager;
+import java/L2jServer.gameserver.util.Broadcast;
+
+/**
+ *
+ * @author Dwight
+ *
+ */
+public class CleanPk implements IItemHandler
+{
+   @Override
+   public void useItem(final L2PlayableInstance playable, final L2ItemInstance item)
+   {      
+      
+      if (!(playable instanceof L2PcInstance))
+         return;
+      
+      L2PcInstance activeChar = (L2PcInstance)playable;
+      
+      if (activeChar.getPkKills() < 5)
+      {
+         activeChar.sendMessage("You do not have enough Pk kills for clean.");
+         return;
+      }
+      if (activeChar.isImmobileUntilAttacked())
+      {
+         activeChar.sendMessage("You do use Item Mod Animation.");
+         return;
+      }
+      ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
+      {
+         @Override
+         public void run()
+         {
+            playable.setIsImmobileUntilAttacked(false);
+            activeChar.setPkKills(0);
+            activeChar.sendMessage("You have successfully clean pks!");
+            activeChar.broadcastUserInfo();   
+         }
+      }, Config.SEGUNDS_SKILL_ANIMATION_PK);
+      final L2Object oldTarget = playable.getTarget();
+      playable.setTarget(playable);      
+      Broadcast.toSelfAndKnownPlayers(playable, new MagicSkillUser(playable, Config.SKILL_ID_PK, 1, Config.SEGUNDS_SKILL_ANIMATION_PK, 0));
+      playable.setTarget(oldTarget);
+      playable.sendPacket(new SetupGauge(0, Config.SEGUNDS_SKILL_ANIMATION_PK));   
+      playable.setIsImmobileUntilAttacked(true);
+   }
+   @Override
+   public int[] getItemIds()
+   {
+      return ITEM_IDS;
+   }
+   
+   private static final int ITEM_IDS[] = {
+      Config.ITEM_PK_CLEANID
+   };
+}
\ No newline at end of file
#2
Busco... / Interlude Project 2024
Último mensaje por dwight - Abr 09, 2024, 08:46 AM
Buenas tardes / noches a todos vengo a publicar mi proyecto en el que se trabajo durante mucho tiempo con un viejo colega y en esta ocasion vengo a postearlo buscando colaborador que tenga ganas de lanzarlo este proyecto conmigo, lamentablemente hubo varias veces que abandone el proyecto por falta de tiempo

Dejo mi discord : dwight9499

BASE: L2JAcis Interlude Upgrade Freya  (09/04/2024) L2Prominence..
The project is currently under development..

•Balance System - Balance PvP | Olympiad Class_x_Class
•Buffer Scheme
•Siege Date
•HWID Sytem
•Anti-Zerg Zone Limit

•Announce PVP/PK (ID Zone)

•Protection Anti-Bot
•Events:
•CTF
•DM
•Tournament
•TvT
•Random Box


•Voiced Commands Enabled:

•Next Events System (All Events in progress) + NPC Global Gatekeeper
•Password System
•Party System
•Buff System (.buff  / .cancel) - (AntiBuff) - (Auto Slot: Mage/Warrior)
•Trade System
•Message System
•Visual System (Skin Armors + Hairs)
•Color System (Title / Name)
•Vote Zone (Select Map PvP Event)
•Merchant System (All In One Shops)
•Banking System
•Potion System
•Raid Info
•Castle Manager
•Ranking (All Ranks Global)
•Menu (Full Interaction)

• Community Board Exclusive (Full Interaction)

•Summon System
•Agathion System + Bracelet
•New Summon Pet
•New Mountable (Fenrir and more)

•Upgrade Exclusive All Items

• Prominence Shop (Exclusive seasonal store)

•Ranking PvP Mensual + Reward (NPC)

•Panel Enchant Skill (Freya)

•Ranking Enchant (Weapons / Armors / Jewells) (NPC + Community)

•Teleport Clan (Spots / Farm / RaidBoss / Epic)

•Teleport Party (Spots / Farm / RaidBoss / Epic)

•Url Work 100% (Discord Server / FanPage Facebook / WebSite) (Community)

•Change Skin Race + (Kamael Unique) (NPC + Community)

•Reset All Class (NPC + Community)

•Daily Mission (Community)

•Daily Reward (Community)

•MailBox System + Incluide Items

•DressMe System (Armors + Hair + Cloacks) (Command + Community)


Update 16/03/2023

New Panel DressMe All Type(s)

Armor's / Weapon's / Shield's / Face's / Hair's / Cloak's + Restriction

Independent pages implemented and new surprises we are working on!!!

New Updates 31/08/2023

+ Combine Talisman System And more...

New Updates 17/10/2023

+ Clan Stronghold and More fixes!

+ New Updates 17/10/2023

Remove Buff Interface(Shift + Click) and more..!

New Update 04/11/2023

- Tournament League System : 1 vs 1 / 2 vs 2 / 3 vs 3 / 4 vs 4 / 5 vs 5 / 9 vs 9.
- Global Ranks for Tournament League

New Update 20/01/2024


+ Mod Teleport Special Effect

+ Personal usable items ( Belt / Talisman / Agathions Lbracelet  / Dolls

+Master Service with purchase history

+Antibot Zones

and more..!

This year we will launch the online project!



#3
Implementaciones / Re:Cambio de Skin
Último mensaje por dwight - Abr 09, 2024, 08:21 AM
Buenas..!!
un pequeño aporte de lo publicado con algunos retoques y mejoras

Index: java/L2jServer/gameserver/network/serverpackets/CharSelectInfo.java
===================================================================
--- java/L2jServer/gameserver/network/serverpackets/CharSelectInfo.java   
+++ java/L2jServer/gameserver/network/serverpackets/CharSelectInfo.java   (Working L2j)

+ private static int customClassSkin;

 charInfopackage.setClassId(activeClassId);
 
+   charInfopackage.setCustomClassSkin(customClassSkin);

-         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());
          }


-         final PreparedStatement statement = con.prepareStatement("SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, base_class FROM characters WHERE account_name=?");
+         final PreparedStatement statement = con.prepareStatement("SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, base_class, custom_race_skin, custom_class_skin FROM characters WHERE account_name=?");
    

-      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");

-      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);
       }
      
      

Index: java/L2jServer/Config/actor/instance/L2ChangeSkinManagerInstance.java
===================================================================
--- java/L2jServer/Config/actor/instance/L2ChangeSkinManagerInstance.java   
+++ java/L2jServer/Config/actor/instance/L2ChangeSkinManagerInstance.java   (Working L2j)

+ package L2jServer.gameserver.model.actor.instance;
+
+ import L2jServer.Config;
+ import L2jServer.gameserver.model.base.ClassId;
+ import L2jServer.gameserver.model.base.Race;
+ import L2jServer.gameserver.network.L2GameClient;
+ import L2jServer.gameserver.network.serverpackets.CharInfo;
+ import L2jServer.gameserver.network.serverpackets.CharSelectInfo;
+ import L2jServer.gameserver.network.serverpackets.RestartResponse;
+ import L2jServer.gameserver.templates.L2NpcTemplate;
+ import L2jServer.gameserver.thread.ThreadPoolManager;
+
+ public class L2ChangeSkinManagerInstance extends L2NpcInstance {
+   public enum Races {
+      FIGHTER(L2jServer.gameserver.model.base.Race.human, ClassId.fighter),
+      MAGE(L2jServer.gameserver.model.base.Race.human, ClassId.mage),
+      ELVENFIGHTER(L2jServer.gameserver.model.base.Race.elf, ClassId.elvenFighter),
+      ELVENMAGE(L2jServer.gameserver.model.base.Race.elf, ClassId.elvenMage),
+      DARKFIGHTER(L2jServer.gameserver.model.base.Race.darkelf, ClassId.darkFighter),
+      DARKMAGE(L2jServer.gameserver.model.base.Race.darkelf, ClassId.darkMage),
+      ORCFIGHTER(L2jServer.gameserver.model.base.Race.orc, ClassId.orcFighter),
+      ORCMAGE(L2jServer.gameserver.model.base.Race.orc, ClassId.orcMage),
+      DWARVEN(L2jServer.gameserver.model.base.Race.dwarf, ClassId.dwarvenFighter);
+
+     private Race races;
+     
+     private ClassId classId;
+     
+     Races(Race races, ClassId classid) {
+       this.races = races;
+       this.classId = classid;
+     }
+     
+     public int getRaceId() {
+       return this.races.ordinal();
+     }
+     
+     public int getClassId() {
+       return this.classId.getId();
+     }
+   }
+   
+   public L2ChangeSkinManagerInstance(int objectId, L2NpcTemplate template) {
+     super(objectId, template);
+   }
+   
+   public boolean reduceItem(L2PcInstance player, int itemId, int count) {
+     if (player.getInventory().getItemByItemId(itemId) == null || player.getInventory().getItemByItemId(itemId).getCount() < count)
+       return false;
+     return true;
+   }
+   
+   @Override
+ public void onBypassFeedback(L2PcInstance player, String command) {
+     Races races = null;
+     if (reduceItem(player, Config.ITEM_CHANGE_SKIN_ID, Config.ITEM_CHANGE_SKIN_COUNT)) {
+       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.broadcastPacket(new CharInfo(player));
+       player.broadcastUserInfo();
+       player.getInventory().destroyItemByItemId("change_skin", Config.ITEM_CHANGE_SKIN_ID, Config.ITEM_CHANGE_SKIN_COUNT, player, this);
+       player.sendMessage("Cambio realizado con exito!");
+     } else {
+       player.sendMessage("Cantidad incorrecta.");
+     }
+   }
+   
+   @Override
+ public String getHtmlPath(int npcId, int val) {
+     String filename = "";
+     if (val == 0) {
+       filename = "" + npcId;
+     } else {
+       filename = "" + npcId + "-" + npcId;
+     }
+     return "data/html/mods/ChangeSkin/" + filename + ".htm";
+   }
+   
+   private static void setRaceCustomSkin(final L2PcInstance player, Races valor) {
+     if (player == null || valor == null)
+       return;
+     player.setCustomRaceSkin(valor.getRaceId());
+     player.setCustomClassSkin(valor.getClassId());
+     ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
+           @Override
+       public void run() {
+             L2ChangeSkinManagerInstance.forcedResetClient(player);
+           }
+         },  50);
+   }
+   
+   static void forcedResetClient(L2PcInstance player) {
+     if (player == null)
+       return;
+     Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate();
+     L2GameClient client = player.getClient();
+     player.setClient((L2GameClient)null);
+     player.deleteMe();
+     client.setActiveChar(null);
+     client.setState(L2GameClient.GameClientState.AUTHED);
+     client.sendPacket(RestartResponse.valueOf(true));
+     CharSelectInfo cl = new CharSelectInfo(client.getAccountName(), (client.getSessionId()).playOkID1);
+     client.sendPacket(cl);
+     client.setCharSelection(cl.getCharInfo());
+   }
+ }

Index: java/L2jServer/Config.java
===================================================================
--- java/L2jServer/Config.java   
+++ java/L2jServer/Config.java   (Working L2j)

+// ===================================================================================================================================//
+   
+   public static int ITEM_CHANGE_SKIN_COUNT;
+   public static int ITEM_CHANGE_SKIN_ID;
+   
+// ============================================================

   
+         /** Change Skin Race **/
+         
+         ITEM_CHANGE_SKIN_ID = Integer.parseInt(ExtraSettings.getProperty("ItemChangeSkinId", "11001"));
+         ITEM_CHANGE_SKIN_COUNT = Integer.parseInt(ExtraSettings.getProperty("ItemChangeSkinCount", "10"));
+         
+         // ========================================================================================================================================== //
+         
   
Index: java/L2jServer/gameserver/network/serverpackets/UserInfo.java
===================================================================
--- java/L2jServer/gameserver/network/serverpackets/UserInfo.java   
+++ java/L2jServer/gameserver/network/serverpackets/UserInfo.java   (Working L2j)
@@ -109,16 +109,27 @@
       
       writeD(_activeChar.getObjectId());
       writeS(_activeChar.getName());
-      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)
-       {
-          writeD(_activeChar.getClassId().getId());
-       }
-       else
-       {
-         writeD(_activeChar.getBaseClass());
-       }

+      if (_activeChar.getCustomClassSkin() == -1)
+      {      
+         if (_activeChar.getClassIndex() == 0)
+         {
+            writeD(_activeChar.getClassId().getId());
+         }
+         else
+         {
+            writeD(_activeChar.getBaseClass());
+         }
+      }
+      else
+      {
+         writeD(_activeChar.getCustomClassSkin());
+      }
       
       writeD(_activeChar.getLevel());
@@ -243,8 +254,17 @@
       }
       else
       {
-         writeF(_activeChar.getBaseTemplate().collisionRadius);
-         writeF(_activeChar.getBaseTemplate().collisionHeight);
+         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/L2jServer/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/L2jServer/gameserver/model/actor/instance/L2PcInstance.java   
+++ java/L2jServer/gameserver/model/actor/instance/L2PcInstance.java   (Working L2j)
@@ -461,7 +461,7 @@
     * =?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs =?,wantspeace=?,base_class =?,onlinetime=?,in_jail=?,jail_timer=?,newbie=?,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=?,good=?,evil=?,gve_kills=? WHERE obj_id=?.
     */
-   private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,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=?,pc_point=?,name_color=?,title_color=?,aio=?,aio_end=? WHERE obj_id=?";
+   private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,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=?,pc_point=?,name_color=?,title_color=?,aio=?,aio_end=?,custom_race_skin=?,custom_class_skin=? WHERE obj_id=?";
    
    /**
     * SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier,
@@ -478,7 +478,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         */"newbie, 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,pc_point" + /*
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            * ,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            * banchat_time
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           */",name_color,title_color,first_log,aio,aio_end FROM characters WHERE obj_id=?";
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           */",name_color,title_color,first_log,aio,aio_end,custom_race_skin,custom_class_skin FROM characters WHERE obj_id=?";
    
    /** The Constant STATUS_DATA_GET. */
    private static final String STATUS_DATA_GET = "SELECT hero, noble, donator, hero_end_date FROM characters_custom_data WHERE obj_Id = ?";
@@ -10140,6 +10140,10 @@
             
             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"));
@@ -10627,8 +10631,11 @@
          statement.setInt(60, isAio() ? 1 : 0);
          statement.setLong(61, getAioEndTime());
          
-         statement.setInt(62, getObjectId());
          
+         statement.setInt(62, getCustomRaceSkin());
+         statement.setInt(63, getCustomClassSkin());
+         statement.setInt(64, getObjectId());
+         
          statement.execute();
          DatabaseUtils.close(statement);
          statement = null;
@@ -14519,6 +14526,32 @@
       sl = null;
    }
    
+   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 L2PcTemplate getCustomSkinTemplate()
+   {
+      return CharTemplateTable.getInstance().getTemplate(getCustomClassSkin());
+   }
+
+   
    /**
     * 1. Add the specified class ID as a subclass (up to the maximum number of <b>three</b>) for this character.<BR>
     * 2. This method no longer changes the active _classIndex of the player. This is only done by the calling of setActiveClass() method as that should be the only way to do so.
@@ -18934,7 +18967,9 @@
    // open/close gates
    @SuppressWarnings("synthetic-access")
    private final GatesRequest _gatesRequest = new GatesRequest();
-   
+   private int _customClassSkin = -1;
+   private int _customRaceSkin = -1;
+
    private static class GatesRequest
    {
       private L2DoorInstance _target = null;

      +ndex: java/L2jServer/gameserver/model/CharSelectInfoPackage.java
===================================================================
--- java/L2jServer/gameserver/model/CharSelectInfoPackage.java   (revision 1132)
+++ java/L2jServer/gameserver/model/CharSelectInfoPackage.java   (working copy)
@@ -50,6 +50,9 @@
    private int _karma = 0;
    private int _augmentationId = 0;
    private int _accessLevel;
+   private int _customClassSkin = -1;
+   private int _customRaceSkin = -1;
+
    
    /**
     * @param objectId
@@ -309,4 +312,24 @@
    {
       _accessLevel = accessLevel;
    }
+   public void setCustomClassSkin(int valor)
+   {
+      _customClassSkin = valor;
+   }
+
+   public void setCustomRaceSkin(int valor)
+   {
+      _customRaceSkin = valor;
+   }
+
+   public int getCustomClassSkin()
+   {
+      return _customClassSkin;
+   }
+
+   public int getCustomRaceSkin()
+   {
+      return _customRaceSkin;
+   }
+
 }
Index: java/L2jServer/gameserver/network/serverpackets/CharInfo.java
===================================================================
--- java/L2jServer/gameserver/network/serverpackets/CharInfo.java   (revision 1132)
+++ java/L2jServer/gameserver/network/serverpackets/CharInfo.java   (working copy)
@@ -218,16 +218,21 @@
          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)
-          {
-             writeD(_activeChar.getClassId().getId());
-          }
-          else
-          {
-            writeD(_activeChar.getBaseClass());
-          }


+         if (_activeChar.getCustomClassSkin() == -1)
+         {            
+            if (_activeChar.getClassIndex() == 0)
+            {
+               writeD(_activeChar.getClassId().getId());
+            }
+            else
+            {
+               writeD(_activeChar.getBaseClass());
+            }
+         }
+         else
+         {
+            writeD(_activeChar.getCustomClassSkin());
+         }
          
          writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
@@ -286,8 +291,18 @@
          writeD(_flyWalkSpd);
          writeF(_activeChar.getMovementSpeedMultiplier()); // _activeChar.getProperMultiplier()
          writeF(_activeChar.getAttackSpeedMultiplier()); // _activeChar.getAttackSpeedMultiplier()
-         writeF(_activeChar.getBaseTemplate().collisionRadius);
-         writeF(_activeChar.getBaseTemplate().collisionHeight);
+      
+         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());
          writeD(_activeChar.getAppearance().getHairColor());


#4
Datapacks / Re:Datapack High Five Full Cus...
Último mensaje por Swarlog - Ene 27, 2024, 06:57 PM
Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectatehola! perdón mi ignorancia... esto seria instalar el sunrise normal y al momento de instalar el datapack, en ves de instalar el que baje, instalo este?

Negativo, se trata de un pack completo. Algo obsoleto pero util para sacarle lo que te interese y adaptarlo a vuestro servidor.

No recomendado para server online.
#5
Datapacks / Re:Datapack High Five Full Cus...
Último mensaje por afidrk - Ene 15, 2024, 12:21 PM
hola! perdón mi ignorancia... esto seria instalar el sunrise normal y al momento de instalar el datapack, en ves de instalar el que baje, instalo este?
#6
Soporte & Ayuda / Re:Hola soy Enrique en Telegra...
Último mensaje por icKRav - Ene 14, 2024, 08:11 PM
hola, siento mucho lo que te ha pasado, pero cuanto pase algo a si lo primero es eliminar las sesiones abiertas desde la app del móvil, y tener verificaciones en dos pasos, no hubieras tenido esos problemas.

un saludo, animo y suerte.

Pd: se puede saber como pillaste el rasonmware?
#7
Datapacks / Re:Datapack High Five Full Cus...
Último mensaje por javierdc - Ene 06, 2024, 11:45 PM
seria idea
Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateDescarga el datapack: Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
Tabla Auction_House: 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
Password del archivo rar: u3games

El sourcer es basado en l2jsunrise pero esta mas mejorado.
Acepto criticas ya que eso te ayuda a mejorar, mas abajo pueden ver alguna información sobre el sourcer y algunas fotos que voy a ir subiendo.
LAS IMAGENES ESTAN A LA PUNTA BAJO DE ESTE POST.


OLYMPIADAS

- Anti DualBox mejorado.
- Anti feed mejorado.
- Sistema de registro mejorado.


TERRITORY WAR

- Al salir de la zona con bandera y morir mejorado.
- Limite maximo de banderas por castillos mejorado.


SIEGES

- Los sieges funcionan perfectamente.


ZONAS DE PVP

* Pvp Zone *
- Auto Flag.
- Auto res.
- Auto Spawn.
- Auto Heal.
- Auto Noble.
- Auto Reward.


* Chaotic Zone *
- Aclarar que esta zona esta pensada para que sea una zona de todos contra todos.

- Auto Flag.
- Auto res.
- Auto Spawn.
- Auto Heal.
- Auto Noble.
- Auto Reward.

- Restricción de chat.
- Restriccion de entrar a la zona en party
- Restriccion no poder dar party dentro de la zona.
- Restriccion de nombre todos con Chaotic Player.
- Restriccion de Titulo.
- No puedes saber quien es heroe dentro de la zona.
- Cambiar aspecto visual al revivir o entrar en la zona.
- No puedes visualizar si tienen clan o ally.
- Puedes atacar a miembros de tu clan o ally sin utilizar Ctrl.


COMMUNITY BOARD

|| Server Ranks Normal ||
- Top pvp.
- Top pk.
- Top Clan.
- Top Raid Boss.
- Top Online.
- Top Grand Boss.
- Server Stats.


|| Services ||
- Gatekeeper.
- GM Shop.
- Symbol Maker.
- Blackmith.
- Buffer Scheme.
- Exclusive GM shop.
- Wharehouse.


|| Rankings Museum Manager ||

Estos rankings pueden ser configurados para que se reinicien cada semana o cada mes o cada dia y con la posibilidad de que salga una estatua del ganador con su aspecto.

- Ranking de Xp.
- Ranking de Adena.
- Ranking play duration.
- Ranking de private Store.
- Ranking de Quest.

- Ranking Monster Killing.
- Ranking de Monster Kill Xp.
- Ranking de cantidad de mobs muertos.
- Ranking de Raids.

- Ranking de Pvp Victory Count.
- Ranking de Pk Victory Count.
- Ranking de Pvp Defeat Count.
- Ranking de Pk Defeat Count.

+ Subire mas partes de la community board en imagenes.


MINI EVENTS

* Single players Fight *
- 1 vs 1.
- 5 players FFA.
- 3 players FFA.

* Party Fight *
- 5 vs 5.
- 2 vs 2.
- 2 vs 2 vs 2.
- 5 vs 5 vs 5.
- 9 vs 9.

* Korean Style *
- 5 vs 5.
- 4 vs 4.
- 9 vs 9.
- 3 vs 3.

* Mini TvT *
- 10 vs 10.
- 20 vs 20.


MAIN EVENTS

- Team vs Team.
- Capture the Flag.
- Domination.
- Mass Domination.
- Deathmatch.
- Last Man Standing.
- TvT Advanced.
- Lucky Chest.
- Zombies.
- Mutant.
- Treasure Hunt.
- Treasure Hunt PvP.
- Hunting Grounds.
- Battllefields.


VOICED COMMANDS

.aioitem
.bank
.withdraw
.deposit
.ccp
.online
.ping
.getreward
.divorce
.engage
.gotolove

* DessMe *
.dressme
.getarmor
.getweapon
.getcloak
.getrandom
.seteffect
.backup
.rbackup


USER COMMANDS

/unstuck
/time
/partyinfo
/olympiadstat
/instancezone
/clanpenalty
/clanwarslist
/channelinfo
/channelleave
/channeldelete


ALGUNAS MEJORAS

//skillsbalancer
//updateskillsbalancer
//classbalancer
//updateclassbalancer

- Cancel Return.
- Auto pociones activadas como toggle skills.
- Auctioner en community board.
- community board clan mejorada.
- community board friend mejorada.
- community region mejorada.
- Estatuas con forma del player ganador en museum.
- Sistema de pc bang point mejorado.
- Sistema de Nevit Blessing funcional.
- Sistema de Prime Shop funcional.
- Reward increased level funcional.
- Todas las skills funcional con skillsbalancer.
- Todas las clases funcional con el classbalancer.
- Quest de seven signs funcional.
- Instances raidboss funcional.
- Quest de 7 raidboss funcional.

Esto es cuando pones el comando .ccp
- Exp On/Off.
- Efecto al encantar un arma On/Off.
- Auto activar Shoulshot On/Off.
- Trade On/Off.
- Block Buff On/Off.
- Disabled private store On/Off.


CONFIGURACIONES EXTRAS

- Cantidad de elemento recibido en arma o armadura con cada piedra.
- Mantener los Buffs de los pets o summons cuando mueran sin noble.
- Chat por cantidad de pvp.
- Chat por cantidad de level.
- Chat en modo muerto.
- Comando //customhero [dias] "Mas bien para eventos o heroes de donacion"
- Cambio de moneda en la private store buy/sell.
- Anuncio cuando logea un heroe.
- Anunciar a un lider de clan cuando logea.
- Anuncio cuando revive/respawnea un raid boss.
- Cambiar el color del nombre de un lider de clan.
- Cambiar el titulo de color de un lider de clan.
- Cambiar el maximo enchant de skills.
- Titulo de inicio.

- Leaderboard.
- PcCafePoints.
- Nevit Blessing.
- Prime Shop.
- Champion Mods.
- Color Name for pvp or PK.
- Color Title for PvP or PK.
- SecuritySystem.
- AntiBot Captcha.


ALGUNAS FOTOS DE ALGUNOS MODS DEL SERVIDOR.

Esta foto es una imagen de las estatuas del top pvp y top pk del ganador del ranking del museum manager que esta en el community board.



Esta foto es una imagen del spreekills mejorado, cada 5 pvp consecutivos aparece el mensaje en medio de la pantalla para todos los online y te aparece un efecto bastante bueno.



Este es el auctioner, con esto puedes poner cosas a vender o comprar cosas en la community board.




Esta es la pestaña region del community, con la posibilidad de saber cuantas tiendas hay qen cada ciudad, saber que venden en cada tienda y varias cosas mas.


Esta es la pestaña clan mejorada.




Este es el skillbalance, funcionando con todo tipo de skill, como por ejemplo con las skills que cancelan buff, puedes dejar el servidor a medida y no hace falta reiniciar el server.
Para usarlo solo debes poner //skillsbalancer y si ya hicistes un cambio y quieres que se actualice solo debes poner //updateskillsbalancer




Tambien tienes la posibilidad de hacer un balance en alguna skill que se aplique solo para olympiadas, es una buena manera de separar el balance del pvp al de olympiadas. Solo deben marcar la pestaña for olympiadas, poner la ID de la skill en el hueco y darle a add



Despues de poner add pues os va a salir esta pagina donde podran aplicar vuestro balance en la skill.




Este es el Classbalancer, con este mod puedes balancear clases vs clases como por ejemplo duelist vs Temple Knight o tambien puedes aplicar un balance general en una sola clase como por ejemplo Duelist vs all.







Estos son los Mini eventos. Configurables desde el panel de admin.








seria ideal tener el svn
#8
Votaciones y opiniones / Re:¿Cómo nos conocisteis?
Último mensaje por Swarlog - Dic 12, 2023, 07:37 PM
Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateBuscando Mods y Datapacks de aCis por internet me salisteis y la verdad que esto no me lo pierdo... no en todos lados encuentro un foro español de programación del L2 :P

Lamentablemente, casi todos se perdieron en el olvido... nosotros seguimos operativos desde el 2008, hasta que el cuerpo aguante  :)
#9
Votaciones y opiniones / Re:¿Cómo nos conocisteis?
Último mensaje por GaDeRaTuX - Dic 11, 2023, 07:54 PM
Buscando Mods y Datapacks de aCis por internet me salisteis y la verdad que esto no me lo pierdo... no en todos lados encuentro un foro español de programación del L2 :P
#10
Datapacks / Re:Datapack High Five Full Cus...
Último mensaje por javierdc - Nov 28, 2023, 01:02 AM
hola amigo tenes ese archivo sql ?

Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateQuería compartir un problema que me pasó al momento de iniciarlo pero ya lo solucione.
Tiraba muchos errores en la consola del gs me di cuanta que todos los errores que sucedían era por qué la tabla characters estaba mal , osea la tabla que tiene el pack en la descarga en este momento no funciona ya que no sé ingresa correctamente, la edite como correspondía y seguía sin funcionar no me la aceptaba,si bien podía loguear habian errores dentro del juego por ejemplo el personaje se borraba, el personaje aparecía como si lo hubiese borrado con el coldown para borrarse, tambien al loguear el personaje aparecía en un respawn aleatorio y cayendo en el aire y al caer moría  y si sobrevivía no podía salir del agua. Cómo lo solucione ya que no pude editando la carpeta, tome una character.sql de otro pack sunrise aleatorio que tenía lo ingresé a la db y se solucionaron todos los errores que aparecían en la consola