• Unfortunately, we have experienced significant hard drive damage that requires urgent maintenance and rebuilding. The forum will be a state of read only until we install our new drives and rebuild all the configurations needed. Please follow our Facebook page for updates, we will be back up shortly! (The forum could go offline at any given time due to the nature of the failed drives whilst awaiting the upgrades.) When you see an Incapsula error, you know we are in the process of migration.

[v62] 1st person ring effect ~everyone can see it~

Newbie Spellweaver
Joined
Jan 9, 2011
Messages
35
Reaction score
10
I know nobody want this ...:thumbdown:
but still release ~ :p:

Code:
MaplePacketCreator.java

Code:
getCharInfo
PHP:
public static MaplePacket getCharInfo(MapleCharacter chr) {
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();

        mplew.writeShort(SendPacketOpcode.WARP_TO_MAP.getValue()); // 0x49

        mplew.writeInt(chr.getClient().getChannel() - 1);
        mplew.write(1);
        mplew.write(1);
        mplew.writeShort(0);
        mplew.writeInt(new Random().nextInt()); // seed the maplestory rng with a random number <3

        mplew.write(HexTool.getByteArrayFromHexString("F8 17 D7 13 CD C5 AD 78"));


        addCharWarp(mplew, chr);
        addQuestInfo(mplew, chr);
        MapleInventory iv = chr.getInventory(MapleInventoryType.EQUIPPED);
        List<Item> equippedCash = new ArrayList<Item>(iv.list().size());
        for (IItem item : iv.list())
            if (item.getPosition() <= -100)
                equippedCash.add((Item) item);
        List<MapleRing> rings = new ArrayList<MapleRing>();
        for (Item item : equippedCash)
            if (((IEquip) item).getRingId() > -1)
                rings.add(MapleRing.loadFromDb(((IEquip) item).getRingId()));
        iv = chr.getInventory(MapleInventoryType.EQUIP);
        for (IItem item : iv.list())
            if (((IEquip) item).getRingId() > -1)
                rings.add(MapleRing.loadFromDb(((IEquip) item).getRingId()));
        Collections.sort(rings);
        boolean FR_last = false;
        for (MapleRing ring : rings) {
            if (ring.getItemId() >= 1112800 && ring.getItemId() <= 1112810 && rings.indexOf(ring) == 0){
                mplew.writeShort(0);
            }
            mplew.writeShort(0);
            mplew.writeShort(1);
            mplew.writeInt(ring.getPartnerChrId());
            mplew.writeAsciiString(StringUtil.getRightPaddedStr(ring.getPartnerName(), '\0', 13));
            mplew.writeInt(ring.getRingId());
            mplew.writeInt(0);
            mplew.writeInt(ring.getPartnerRingId());
            if (ring.getItemId() >= 1112800 && ring.getItemId() <= 1112810) {
                FR_last = true;
                mplew.writeInt(0);
                mplew.writeInt(ring.getItemId());
                mplew.writeShort(0);
            } else {
                if (rings.size() > 1) {
                    mplew.writeShort(0);
                }
                FR_last = false;
            }
        }
        if (!FR_last) {
            //mplew.writeLong(0);
            mplew.writeLong(0);
        }
      for (int x = 0; x < 15; ++x) {
      mplew.write(CHAR_INFO_MAGIC);
    }
        mplew.writeInt(0);
        mplew.writeLong(getTime(System.currentTimeMillis()));
        return mplew.getPacket();
    }

Code:
addItemInfo
PHP:
private static void addItemInfo(MaplePacketLittleEndianWriter mplew, IItem item, boolean zeroPosition, boolean leaveOut) {
        MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
        boolean ring = false;
        IEquip equip = null;
        if (item.getType() == IItem.EQUIP) {
            equip = (IEquip) item;
            if (equip.getRingId() > -1)
                ring = true;
        }
        byte pos = item.getPosition();
        boolean masking = false;
        boolean equipped = false;
        if (zeroPosition) {
            if (!leaveOut)
                mplew.write(0);
        } else if (pos <= (byte) -1) {
            //pos *= -1;
            pos = (byte)(pos * -1);
             if ((pos > 100) || (pos == -128) || (ring)) {
                masking = true;
                mplew.write(0);
                mplew.write(pos - 100);
            } else
                mplew.write(pos);
            equipped = true;
        } else
            mplew.write(item.getPosition());
        if (item.getPetId() > -1)
            mplew.write(3);
        else
            mplew.write(item.getType());
        mplew.writeInt(item.getItemId());
        if (ring) {
            mplew.write(1);
            mplew.writeInt(equip.getRingId());
            mplew.writeInt(0);
        }
        if (item.getPetId() > -1) {
            MaplePet pet = MaplePet.loadFromDb(item.getItemId(), item.getPosition(), item.getPetId());
            String petname = pet.getName();
            mplew.write(1);
            mplew.writeInt(item.getPetId());
            mplew.writeInt(0);
            mplew.write(0);
            mplew.write(ITEM_MAGIC);
            mplew.write(HexTool.getByteArrayFromHexString("BB 46 E6 17 02"));
            if (petname.length() > 13)
                petname = petname.substring(0, 13);
            mplew.writeAsciiString(petname);
            for (int i = petname.length(); i < 13; i++)
                mplew.write(0);
            mplew.write(pet.getLevel());
            mplew.writeShort(pet.getCloseness());
            mplew.write(pet.getFullness());
            mplew.writeLong(getKoreanTimestamp((long) (System.currentTimeMillis() * 1.2)));
            mplew.writeInt(0);
            return;
        }
        if (masking && !ring) {
            mplew.write(HexTool.getByteArrayFromHexString("01 41 B4 38 00 00 00 00 00 80 20 6F"));
            addExpirationTime(mplew, 0, false);
        } else if (ring)
            mplew.writeLong(getKoreanTimestamp((long) (System.currentTimeMillis() * 1.2)));
        else {
            mplew.writeShort(0);
            mplew.write(ITEM_MAGIC);
            addExpirationTime(mplew, 0, false);
        }
        if (item.getType() == IItem.EQUIP) {
            mplew.write(equip.getUpgradeSlots());
            mplew.write(equip.getLevel());
            mplew.writeShort(equip.getStr()); // str
            mplew.writeShort(equip.getDex()); // dex
            mplew.writeShort(equip.getInt()); // int
            mplew.writeShort(equip.getLuk()); // luk
            mplew.writeShort(equip.getHp()); // hp
            mplew.writeShort(equip.getMp()); // mp
            mplew.writeShort(equip.getWatk()); // watk
            mplew.writeShort(equip.getMatk()); // matk
            mplew.writeShort(equip.getWdef()); // wdef
            mplew.writeShort(equip.getMdef()); // mdef
            mplew.writeShort(equip.getAcc()); // accuracy
            mplew.writeShort(equip.getAvoid()); // avoid
            mplew.writeShort(equip.getHands()); // h
            mplew.writeShort(equip.getSpeed()); // speed
            mplew.writeShort(equip.getJump()); // jump
            mplew.writeMapleAsciiString(equip.getOwner());
            // 0 normal; 1 locked
            mplew.write(equip.getLocked());
            if (ring && !equipped)
                mplew.write(0);
            if (!masking && !ring) {
                mplew.write(0);
                mplew.writeLong(0); // values of these don't seem to matter at all
            }
        } else {
            mplew.writeShort(item.getQuantity());
            mplew.writeMapleAsciiString(item.getOwner());
            mplew.writeShort(0); // this seems to end the item entry
            // but only if its not a THROWING STAR :))9 O.O!
            if (ii.isThrowingStar(item.getItemId()) || ii.isBullet(item.getItemId()))
                mplew.write(HexTool.getByteArrayFromHexString("02 00 00 00 54 00 00 34"));
        }
    }

Code:
spawnPlayerMapobject
PHP:
public static MaplePacket spawnPlayerMapobject(MapleCharacter chr) {
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();

        mplew.writeShort(SendPacketOpcode.SPAWN_PLAYER.getValue());
        mplew.writeInt(chr.getId());
        mplew.writeMapleAsciiString(chr.getName());
        if (chr.getGuildId() <= 0) {
            mplew.writeMapleAsciiString("");
            mplew.write(new byte[6]);
        } else {
            MapleGuildSummary gs = chr.getClient().getChannelServer().getGuildSummary(chr.getGuildId());

            if (gs != null) {
                mplew.writeMapleAsciiString(gs.getName() + "");
                mplew.writeShort(gs.getLogoBG());
                mplew.write(gs.getLogoBGColor());
                mplew.writeShort(gs.getLogo());
                mplew.write(gs.getLogoColor());
            } else {
                mplew.writeMapleAsciiString("");
                mplew.write(new byte[6]);
            }
        }
        mplew.writeInt(0);
        mplew.writeInt(1);
        if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
            mplew.write(2);
        } else {
            mplew.write(0);
        }
        mplew.writeShort(0);
        mplew.write(0xF8);
        long buffmask = 0;
        Integer buffvalue = null;
        if (chr.getBuffedValue(MapleBuffStat.DARKSIGHT) != null && !chr.isHidden()) {
            buffmask |= MapleBuffStat.DARKSIGHT.getValue();
        }
        if (chr.getBuffedValue(MapleBuffStat.COMBO) != null) {
            buffmask |= MapleBuffStat.COMBO.getValue();
            buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.COMBO).intValue());
        }
        if (chr.getBuffedValue(MapleBuffStat.SHADOWPARTNER) != null) {
            buffmask |= MapleBuffStat.SHADOWPARTNER.getValue();
        }
        if (chr.getBuffedValue(MapleBuffStat.SOULARROW) != null) {
            buffmask |= MapleBuffStat.SOULARROW.getValue();
        }
        if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
            buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.MORPH).intValue());
        }
        mplew.writeInt((int) ((buffmask >> 32) & 0xffffffff));
        if (buffvalue != null) {
            if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
                mplew.writeShort(buffvalue);
            } else {
                mplew.write(buffvalue.byteValue());
            }
        }
        mplew.writeInt((int) (buffmask & 0xffffffff));
        int CHAR_MAGIC_SPAWN = new Random().nextInt();
        mplew.writeInt(0);
        mplew.writeShort(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeShort(0);
        MapleMount mount = chr.getMount();
        boolean showMount = false;
        if (chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING) != null) {
            if (mount != null) {
                if (mount.isActive()) {
                    if (chr.getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -19) != null) {
                        mplew.writeInt(mount.getItemId());
                        mplew.writeInt(mount.getSkillId());
                        mplew.writeInt(0x2D4DFC2A);
                        showMount = true;
                    }
                } else {
                    mplew.writeInt(1932000);
                    mplew.writeInt(5221006);
                    mplew.writeInt(0x2D4DFC2A);
                    showMount = true;
                }
            }
        }
        if (!showMount) {
            mplew.writeInt(0);
            mplew.writeInt(0);
            mplew.writeInt(CHAR_MAGIC_SPAWN);
        }
        mplew.writeLong(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeInt(0);
        mplew.writeShort(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeInt(0);
        mplew.write(0x40);
        mplew.write(1);
        addCharLook(mplew, chr, false);
        mplew.writeInt(0);
        mplew.writeInt(chr.getItemEffect());
        mplew.writeInt(chr.getChair());
        mplew.writeShort(chr.getPosition().x);
        mplew.writeShort(chr.getPosition().y);
        mplew.write(chr.getStance());
        mplew.writeInt(0);
        mplew.writeInt(1);
        mplew.writeLong(0);
        IPlayerInteractionManager ipim = chr.getInteraction();
        if (ipim != null && ipim.isOwner(chr)) {
            if (ipim.getShopType() == 2 || ipim.getShopType() == 3 || ipim.getShopType() == 4) {
                addAnnounceBox(mplew, ipim);
            }
        }
        mplew.write(0); // hmmmmm..
        if (chr.getChalkboard() != null) {
            mplew.write(1);
            mplew.writeMapleAsciiString(chr.getChalkboard());
        } else {
            mplew.write(0);
        }
        MapleInventory iv = chr.getInventory(MapleInventoryType.EQUIPPED);
        Collection<IItem> equippedC = iv.list();
        List<Item> equipped = new ArrayList<Item>(equippedC.size());
        for (IItem item : equippedC) {
            equipped.add((Item) item);
        }
        Collections.sort(equipped);
        List<MapleRing> rings = new ArrayList<MapleRing>();
        for (Item item : equipped) {
            if (((IEquip) item).getRingId() > -1) {
                rings.add(MapleRing.loadFromDb(((IEquip) item).getRingId()));
            }
        }
        Collections.sort(rings);
                if (rings.size() > 0) {
            mplew.write(0);
            for (MapleRing ring : rings)
                if (ring != null) {
                    mplew.write(1);
                    mplew.writeInt(ring.getRingId());
                    mplew.writeInt(0);
                    mplew.writeInt(ring.getPartnerRingId());
                    mplew.writeInt(0);
                    mplew.writeInt(ring.getItemId());
                }
            mplew.writeShort(0);
        } else
            mplew.writeInt(0);
        return mplew.getPacket();
    }

Code:
updateCharLook
PHP:
public static MaplePacket updateCharLook(MapleCharacter chr) {
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
        mplew.writeShort(SendPacketOpcode.UPDATE_CHAR_LOOK.getValue());
        mplew.writeInt(chr.getId());
        mplew.write(1);
        addCharLook(mplew, chr, false);
        MapleInventory iv = chr.getInventory(MapleInventoryType.EQUIPPED);
        Collection<IItem> equippedC = iv.list();
        List<Item> equipped = new ArrayList<Item>(equippedC.size());
        for (IItem item : equippedC) {
            equipped.add((Item) item);
        }
        Collections.sort(equipped);
        List<MapleRing> rings = new ArrayList<MapleRing>();
        for (Item item : equipped) {
            if (((IEquip) item).getRingId() > -1) {
                rings.add(MapleRing.loadFromDb(((IEquip) item).getRingId()));
            }
        }
        Collections.sort(rings);
        if (rings.size() > 0) {
            for (MapleRing ring : rings) {
                mplew.write(1);
                mplew.writeInt(ring.getRingId());
                mplew.writeInt(0);
                mplew.writeInt(ring.getPartnerRingId());
                mplew.writeInt(0);
                mplew.writeInt(ring.getItemId());
            }
        } else {
            mplew.write(0);
        }
        mplew.writeShort(0);

        return mplew.getPacket();
    }

=========================================

have been test on XiuzSource V62 :cool:

this waste me a half of my winter vacation:glare:

enjoy~:lol:
=========================================
credit to all XiuzSource's / Xotic's coders :thumbup:

press Like if you like it lol :lol:
 
Last edited:
may web.very maple.pls.
Loyal Member
Joined
Aug 12, 2009
Messages
1,810
Reaction score
606
Re: [v62] 1st ring effect ~everyone can see it~

so basically you just leeched this off XiuzSource?
 
Newbie Spellweaver
Joined
Jan 9, 2011
Messages
35
Reaction score
10
Re: [v62] 1st ring effect ~everyone can see it~

so basically you just leeched this off XiuzSource?

nope, XiuzSource only have 3rd person ring effect
this is 1st person ring effect, and I tested in XiuzSource

works successfully
 
Last edited:
Legendary Battlemage
Loyal Member
Joined
Dec 13, 2010
Messages
649
Reaction score
140
Re: [v62] 1st ring effect ~everyone can see it~

What the hell is this for? Im sorry I dont understand the title "First Ring". Lmao.

Im guessing its first person ring effects? And yeah Xiuz and other sources have this, sorry.
 
may web.very maple.pls.
Loyal Member
Joined
Aug 12, 2009
Messages
1,810
Reaction score
606
Re: [v62] 1st ring effect ~everyone can see it~

What the hell is this for? Im sorry I dont understand the title "First Ring". Lmao.

Im guessing its first person ring effects? And yeah Xiuz and other sources have this, sorry.
Guess you would know huh :]

anyways if this hasn't been released then seems like a decent release for those XiuzSource users
 
Legendary Battlemage
Loyal Member
Joined
Dec 13, 2010
Messages
649
Reaction score
140
Re: [v62] 1st ring effect ~everyone can see it~

Guess you would know huh :]

anyways if this hasn't been released then seems like a decent release for those XiuzSource users



Guess I would know what? Every source that I've ever seen/had access to has 3rd person ring effect. :?:
 
Newbie Spellweaver
Joined
Jan 9, 2011
Messages
35
Reaction score
10
most V62 source
only have 3rd person ring effect.((expect Thepack II have the 1st person

and this is 1st person ring effect release ~~((not leech it from Thepack II
 
Junior Spellweaver
Joined
Oct 31, 2008
Messages
149
Reaction score
45
Re: [v62] 1st ring effect ~everyone can see it~

Guess I would know what? Every source that I've ever seen/had access to has 3rd person ring effect. :?:

Except MoopleDev. >:l
 
Newbie Spellweaver
Joined
Jan 9, 2011
Messages
35
Reaction score
10
Re: [v62] 1st ring effect ~everyone can see it~

Except MoopleDev. >:l

MoopleDev is V83 source...
 
may web.very maple.pls.
Loyal Member
Joined
Aug 12, 2009
Messages
1,810
Reaction score
606
Mind pointing out what you've done to see o_O..?
 
Newbie Spellweaver
Joined
Jan 9, 2011
Messages
35
Reaction score
10
Mind pointing out what you've done to see o_O..?

ok, this thread can change V62 source from [3rd person ring effect] to [1st person ring effect]

that's all

got it?
 
Last edited:
may web.very maple.pls.
Loyal Member
Joined
Aug 12, 2009
Messages
1,810
Reaction score
606
I know what it does..but I wanna know what you changed in the code..
 
Legendary Battlemage
Loyal Member
Joined
Dec 13, 2010
Messages
649
Reaction score
140
LOL Akira, still ignoring my post eh?
 
Newbie Spellweaver
Joined
Jan 9, 2011
Messages
35
Reaction score
10
Re: [v62] 1st ring effect ~everyone can see it~

Well yeah...Who the hell uses v62 anymore? o-o

lol, so I said nobody want this anymore but still release~
 
Newbie Spellweaver
Joined
Nov 27, 2009
Messages
94
Reaction score
58
XiuzSource already had full ring effects, the only thing wrong iirc was that you could only have 1 ring at a time (probably bad coding logic, but this was from over a year ago).

To get 3rd person ring effects you have to add ring structure bytes to spawnPlayerMapobject and updateCharLook (sPMo shows the effect, uCL shows it when they equip a ring or stops it when they unequip one)
To get 1st person working, you have to add the ring structure bytes to getCharInfo.
 
Custom Title Activated
Loyal Member
Joined
Aug 21, 2009
Messages
1,149
Reaction score
598
Actually, first person ring effect showing up was made on Xotic (By MrMysterious / MrXotic / Beng), XiuzSource is based off Xotic. And yes, this have been public since... well, since Xotic was released.
 
Newbie Spellweaver
Joined
Jan 9, 2011
Messages
35
Reaction score
10
ok, but this is just my experience
I tried XiuzSource from the library
and I tried the ring effect ... failed. only have 3rd person

but after I use what I released , it can show 1st + 3rd person effect (( everybody can see that
 
Joined
Nov 27, 2009
Messages
442
Reaction score
230
The updateCharLook is pretty bad, but I guess the Xotic Developers know that now :D

edit:
so is spawnPlayerMapobject
 
Last edited:
Back
Top