Jump to content

Ikeryn

Members
  • Posts

    95
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

About Ikeryn

Profile Information

  • Current Mood
    Busy
  • Gender
    Male
  • Country
    Spain

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Ikeryn's Achievements

Newbie

Newbie (1/16)

1

Reputation

2

Community Answers

  1. Welp... just solved it xD The code is fine (ugly, but fine), it only required sending this packet on every dressme action on RequestBypassToServer: player.sendPacket(new ExUserInfoEquipSlot(player)); It's working frawlessly now. Gonna clean it a little and share it soon! EDIT: Can close now!
  2. Hello maxcheaters! We are a small group of friends that are developing a closed roleplay community, and want to adapt some customs to our L2JMobius free pack (currently we are using Classic Zaken 2.1). We have currently adapted a Skin Manager and L2JDevs ModEngine, but we are having some problem with An4rchy's Dressme. So far, te code is "working". Panel works, get target appearance works, but only for other players. That's surely because our CharInfo implementation is ok, but the UserInfo is messed up. That's something that we can usually fix on our end but... We have realised that the UserInfo in L2JMobius is pretty different from the one present on aCIs or Frozen, and that the appareance of the player is controlled by ExUserInfoEquipSlot (I guess?). We have currently tried some approachs to solve this, none of them with success. This is our last try: /* * This file is part of the L2J Mobius project. * * 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 org.l2jmobius.gameserver.network.serverpackets; import org.l2jmobius.commons.network.PacketWriter; import org.l2jmobius.gameserver.enums.InventorySlot; import org.l2jmobius.gameserver.model.VariationInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.itemcontainer.PlayerInventory; import org.l2jmobius.gameserver.network.OutgoingPackets; /** * @author Sdw */ public class ExUserInfoEquipSlot extends AbstractMaskPacket<InventorySlot> { private final PlayerInstance _player; private final byte[] _masks = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }; public ExUserInfoEquipSlot(PlayerInstance player) { this(player, true); } public ExUserInfoEquipSlot(PlayerInstance player, boolean addAll) { _player = player; if (addAll) { addComponentType(InventorySlot.values()); } } @Override protected byte[] getMasks() { return _masks; } @Override public boolean write(PacketWriter packet) { OutgoingPackets.EX_USER_INFO_EQUIP_SLOT.writeId(packet); packet.writeD(_player.getObjectId()); packet.writeH(InventorySlot.values().length); packet.writeB(_masks); final PlayerInventory inventory = _player.getInventory(); for (InventorySlot slot : InventorySlot.values()) { if (containsMask(slot)) { if (!_player.isDressMeEnabled()) { final VariationInstance augment = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(inventory.getPaperdollObjectId(slot.getSlot())); packet.writeD(inventory.getPaperdollItemId(slot.getSlot())); packet.writeD(augment != null ? augment.getOption1Id() : 0); packet.writeD(augment != null ? augment.getOption2Id() : 0); packet.writeD(inventory.getPaperdollItemVisualId(slot.getSlot())); } else { switch (slot) { case RHAND: final VariationInstance augmentRHand = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollObjectId(slot.getSlot()) : (_player.getDressMeData().getWeapId() == 0 ? inventory.getPaperdollObjectId(slot.getSlot()) : _player.getDressMeData().getWeapId())); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemId(slot.getSlot()) : (_player.getDressMeData().getWeapId() == 0 ? inventory.getPaperdollItemId(slot.getSlot()) : _player.getDressMeData().getWeapId())); packet.writeD(augmentRHand != null ? augmentRHand.getOption1Id() : 0); packet.writeD(augmentRHand != null ? augmentRHand.getOption2Id() : 0); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemVisualId(slot.getSlot()) : (_player.getDressMeData().getWeapId() == 0 ? inventory.getPaperdollItemVisualId(slot.getSlot()) : _player.getDressMeData().getWeapId())); break; case GLOVES: final VariationInstance augmentGloves = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollObjectId(slot.getSlot()) : (_player.getDressMeData().getGlovesId() == 0 ? inventory.getPaperdollObjectId(slot.getSlot()) : _player.getDressMeData().getGlovesId())); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemId(slot.getSlot()) : (_player.getDressMeData().getGlovesId() == 0 ? inventory.getPaperdollItemId(slot.getSlot()) : _player.getDressMeData().getGlovesId())); packet.writeD(augmentGloves != null ? augmentGloves.getOption1Id() : 0); packet.writeD(augmentGloves != null ? augmentGloves.getOption2Id() : 0); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemVisualId(slot.getSlot()) : (_player.getDressMeData().getGlovesId() == 0 ? inventory.getPaperdollItemVisualId(slot.getSlot()) : _player.getDressMeData().getGlovesId())); break; case CHEST: final VariationInstance augmentChest = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollObjectId(slot.getSlot()) : (_player.getDressMeData().getChestId() == 0 ? inventory.getPaperdollObjectId(slot.getSlot()) : _player.getDressMeData().getChestId())); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemId(slot.getSlot()) : (_player.getDressMeData().getChestId() == 0 ? inventory.getPaperdollItemId(slot.getSlot()) : _player.getDressMeData().getChestId())); packet.writeD(augmentChest != null ? augmentChest.getOption1Id() : 0); packet.writeD(augmentChest != null ? augmentChest.getOption2Id() : 0); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemVisualId(slot.getSlot()) : (_player.getDressMeData().getChestId() == 0 ? inventory.getPaperdollItemVisualId(slot.getSlot()) : _player.getDressMeData().getChestId())); break; case LEGS: final VariationInstance augmentLegs = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollObjectId(slot.getSlot()) : (_player.getDressMeData().getLegsId() == 0 ? inventory.getPaperdollObjectId(slot.getSlot()) : _player.getDressMeData().getLegsId())); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemId(slot.getSlot()) : (_player.getDressMeData().getLegsId() == 0 ? inventory.getPaperdollItemId(slot.getSlot()) : _player.getDressMeData().getLegsId())); packet.writeD(augmentLegs != null ? augmentLegs.getOption1Id() : 0); packet.writeD(augmentLegs != null ? augmentLegs.getOption2Id() : 0); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemVisualId(slot.getSlot()) : (_player.getDressMeData().getLegsId() == 0 ? inventory.getPaperdollItemVisualId(slot.getSlot()) : _player.getDressMeData().getLegsId())); break; case FEET: final VariationInstance augmentFeet = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollObjectId(slot.getSlot()) : (_player.getDressMeData().getBootsId() == 0 ? inventory.getPaperdollObjectId(slot.getSlot()) : _player.getDressMeData().getBootsId())); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemId(slot.getSlot()) : (_player.getDressMeData().getBootsId() == 0 ? inventory.getPaperdollItemId(slot.getSlot()) : _player.getDressMeData().getBootsId())); packet.writeD(augmentFeet != null ? augmentFeet.getOption1Id() : 0); packet.writeD(augmentFeet != null ? augmentFeet.getOption2Id() : 0); packet.writeD(_player.getDressMeData() == null ? inventory.getPaperdollItemVisualId(slot.getSlot()) : (_player.getDressMeData().getBootsId() == 0 ? inventory.getPaperdollItemVisualId(slot.getSlot()) : _player.getDressMeData().getBootsId())); break; default: final VariationInstance augment = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(inventory.getPaperdollObjectId(slot.getSlot())); packet.writeD(inventory.getPaperdollItemId(slot.getSlot())); packet.writeD(augment != null ? augment.getOption1Id() : 0); packet.writeD(augment != null ? augment.getOption2Id() : 0); packet.writeD(inventory.getPaperdollItemVisualId(slot.getSlot())); break; } } } } return true; } } I know it can be wrote WAY better, but we are ourselves PHP devs, so pls understand :p These are the reference classes, so you can see the difference: https://bitbucket.org/MobiusDev/l2j_mobius/src/master/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/UserInfo.java https://bitbucket.org/MobiusDev/l2j_mobius/src/master/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java and https://gitlab.com/Tryskell/acis_public/-/blob/master/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java We are adapting An4rchy's dressme: Some help would be much appreciated. In exchange, we will release and share it with the community! Have a nice corona-day!
  3. The one from L2miko is fairly more uptated. https://github.com/L2Miko/L2FileEdit However, you will have some trouble opening some dats. I read in other post that you are fiddling around with the 2.9 classic client, so a bunch of pretty important files wont open at all. You will need this. It need some fixes related to file structure, but is the best that you can get for now (for free) https://mega.nz/#!u05DTY6a!eUKIUIeMfiH37ZCWRvCS4Ktx0fn75LzIKA_N5B9h4Hs
  4. Here you go! Just edit the IP in L2.ini and start testing. https://drive.google.com/open?id=1yeYwrQEIcmAz5Ha1R05c3QgntRPy9y0V PS: Full Fafurion client. If you need only the system I can upload it for you.
  5. Did you use lordofdest's L2Editor on a H5 client with Prelude maps? I didn't consider that to start messing around! Gj mate!
  6. I have tried increasing coolTime for Shield Stun from 300 to 800 even 3000, and it did nothing :/ hitTime of Shield Stun is the same either in client and server (XML 1200 hitTime; SKILLGRP 1.2 hitTime). It's very strange that Shield Strike works properly, and a bunch of other skills not.
  7. That could be a workaround, but then the character won't auto-attack again when the skill is casted. Is that a retail behaviour? Also, I found the place where the delay before next attack is calculated in Formulas.java (gameserver/model/stats), maybe some values need to be changed? /** * Calculate delay (in milliseconds) before next ATTACK * @param attacker * @param target * @param rate * @return */ public static final int calcPAtkSpd(L2Character attacker, L2Character target, double rate) { // measured Oct 2006 by Tank6585, formula by Sami // attack speed 312 equals 1500 ms delay... (or 300 + 40 ms delay?) if (rate < 2) { return 2700; } return (int) (470000 / rate); } public static double calcCastTime(L2Character character, Skill skill) { double skillAnimTime = skill.getHitTime(); if (!skill.isChanneling() || (skill.getChannelingSkillId() == 0)) { // Calculate the Casting Time of the "Non-Static" Skills (with caster PAtk/MAtkSpd). if (!skill.isStatic()) { final double speed = skill.isMagic() ? character.getMAtkSpd() : character.getPAtkSpd(); skillAnimTime = (skillAnimTime / speed) * 333; } // Calculate the Casting Time of Magic Skills (reduced in 40% if using SPS/BSPS) if (skill.isMagic() && (character.isChargedShot(ShotType.SPIRITSHOTS) || character.isChargedShot(ShotType.BLESSED_SPIRITSHOTS))) { skillAnimTime = (int) (skillAnimTime / 1.4); } if ((skillAnimTime < 500) && (skill.getHitTime() > 500)) { skillAnimTime = 500.0; } } return skillAnimTime; }
  8. Hi MxC! I have a very irritating problem with my test server, and I don't understand where this problem comes from. Some skills don't finish their cast animation, resulting in causing effect before it should. Here I post a video capturing the problem. The skill Shield Strike works properly, but Power Strike and Shield Stun don't. This problem also occurs with a lot of other skills that involves debuff or applying damage, all of them melee. I think it's related to Formulas.java or L2Character.java, but i'm not sure since I'm not a proper server developer. Also, I'm using the latest revision of l2jserver H5 master branch (https://bitbucket.org/l2jserver/l2j_server)
  9. You don't need to use l2encdec do decrypt the file generated from l2tool. Just open the converted UTX with UnrealED. Simple as that.
  10. If you are into adapting costumes and armor from newer chronicles to H5, maybe you already have taken a look to this usefull guide by big man bill http://www.maxcheaters.com/topic/212042-creating-costumes-for-interlude/ However, if you are adapting these cool costumes to H5, you will need the Male and Female Kamael gloves for copy its mesh properties and also fix the fist weapon position. Here i have uploaded some custom DummyGloves file that contains this crucial data, so you don't have to figure it out. Then you can follow big man bill's guide without problems. Download Also, let me point out that you will need to create a new material on top the existent ones in 3ds MAX due to H5 client behaviour. The first material group will always be untextered, even if you link it trough UT2004 UnrealED. But is ok, I got it working without mayor trouble. If you need some help, ask me and I will write a mine guide on how port costumes to H5. Cheers! ^-^
  11. Thanks for the offer demev, but i'm doing this as a hobby, so i don't want to spend money if its possible since I'm not going to make any money from a server project. Of course I know that your services have a price (I'm a huge fan of your work btw). I would gladly pay for your time if my project were a live server. I guess it's time to keep learning on my own. Thanks again!
  12. Hi MxC! Is there a way to edit open maps in DevMode and edit it with l2smr without closing the game or changing to another map? Im currently using "c_teleport return" to set a point in a map that im editing, then I change to the Entry test map with "open entry", change values in l2smr and then go back to the previous point set through "c_teleport return". Is a pretty quick way to do it, but when I open the Entry map the coordinates keep stuck and they don't change (you can see that at the end of the video, when I show the stats), and that sucks a lot because I need them to place new StaticMeshes with precision. You can see it in this video that I have shared to a friend. Any ideas? Im currently developing some scenarios for a Roleplay adventure with some friends (no live server), and I would love to do this quickier! Thanks in advance! ^-^
  13. Great work as always demev! Could you please tell me how can I implement the door data server side? I know something about client things and unreal stuff, but I found myself pretty lost when a server side problem appears :-[
  14. There's a lot of info. Use the search button. xdat_editor https://sites.google.com/site/l2clientmod/xdat_editor
×
×
  • Create New...