[Help] Mirror Image Skill

Junior Spellweaver
Joined
Feb 11, 2010
Messages
197
Reaction score
6
The DBs Mirror Image skill (like shadow partner but for DBs) DCs the whole map except the player that uses the skill..
(The skill works and all but dcs..)
I don't wanna disable this skill since its really important.
Bat error:
Code:
Got client error.. All: 25 00 01 00 26 00 00 00 25 00 98 D6 B9 D6 E5 00 53 75 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 46 00 00 00 00 0
0 00
Now: 01 00 26 00 00 00 25 00 98 D6 B9 D6 E5 00 53 75 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 04 46 00 00 00 00 00 00
Got client error.. All: 25 00 01 00 26 00 00 00 25 00 46 8F 67 8F E5 00 53 75 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 46 00 00 00 00 0
0 00
Now: 01 00 26 00 00 00 25 00 46 8F 67 8F E5 00 53 75 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 04 46 00 00 00 00 00 00

Any advices for me?
 
Last edited:
Ahh right I've seen that when I use shadow partner on SuperGM job I get a packet error. What do I need to do, and were is it? MapleMap?
Thanks for your reply.
 
Last edited:
Upvote 0
I can't find Mirror Image there:
PHP:
public static MaplePacket spawnPlayerMapobject(MapleCharacter chr) {
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
        mplew.writeShort(SendOpcode.SPAWN_PLAYER.getValue());

        mplew.writeInt(chr.getId());
        mplew.write(chr.getLevel()); //v83
        mplew.writeMapleAsciiString(chr.getName());
        mplew.writeShort(0);
        if (chr.getGuildId() < 1) { // for now
            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.write(3); // v97
        mplew.writeInt(0);
        mplew.writeShort(0);
        mplew.write(0xF8);

        if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
            mplew.writeInt(2);
        } else {
            mplew.writeInt(0);
        }
        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());
        }
        if (chr.getBuffedValue(MapleBuffStat.ENERGY_CHARGE) != null) {
        buffmask |= MapleBuffStat.ENERGY_CHARGE.getValue();
        buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.ENERGY_CHARGE).intValue());
        }//FIX THIS^*/
        mplew.writeInt((int) ((buffmask >> 32) & 0xffffffffL));
        if (buffvalue != null) {
            //    if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { //TEST
            //      mplew.writeShort(buffvalue);
            //    } else {
            mplew.write(buffvalue.byteValue());
            //    }
        }
        mplew.writeInt((int) (buffmask & 0xffffffffL));
        int CHAR_MAGIC_SPAWN = Randomizer.nextInt(5000000);
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);//v74
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeShort(0);
        mplew.write(0);
        if (chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING) != null && chr.getMount() != null) {
            mplew.writeInt(chr.getMount().getItemId());
            mplew.writeInt(chr.getMount().getSkillId()); // TODO: mechanic support :o
        } else {
            mplew.writeLong(0);
        }
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeLong(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeInt(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeShort(0);
        mplew.write(0);
        mplew.writeShort(chr.getJob().getId());
        addCharLook(mplew, chr, false); // 31 old; 28 b4 writePos
        mplew.writeLong(0);
        mplew.writeInt(0);
        mplew.writeInt(0);
        mplew.writeInt(0); // item effect
        mplew.writeInt(chr.getChair()); // chair
        mplew.writePos(chr.getPosition());
        mplew.write(chr.getStance());
        mplew.writeShort(0); // fh?
        mplew.writeShort(0);
        if (chr.getMount() == null) {
            mplew.writeInt(1); // mob level
            mplew.writeLong(0); // mob exp + tiredness
        } else {
            mplew.writeInt(chr.getMount().getLevel());
            mplew.writeInt(chr.getMount().getExp());
            mplew.writeInt(chr.getMount().getTiredness());
        }
        mplew.write(0); // announce box, our method is hackish
        if (chr.getChalkboard() != null) {
            mplew.write(1);
            mplew.writeMapleAsciiString(chr.getChalkboard());
        } else {
            mplew.write(0);
        }
        addRingLook(mplew, chr, true);
        addRingLook(mplew, chr, false);
        addMarriageRingLook(mplew, chr);
        mplew.writeShort(0);
        mplew.writeInt(0);
        return mplew.getPacket();
    }

Then should I add this:
PHP:
if (chr.getBuffedValue(MapleBuffStat.MIRROR_IMAGE) != null) {
            buffmask |= MapleBuffStat.MIRROR_IMAGE.getValue();
        }

To be like this:
PHP:
public static MaplePacket spawnPlayerMapobject(MapleCharacter chr) {
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
        mplew.writeShort(SendOpcode.SPAWN_PLAYER.getValue());

        mplew.writeInt(chr.getId());
        mplew.write(chr.getLevel()); //v83
        mplew.writeMapleAsciiString(chr.getName());
        mplew.writeShort(0);
        if (chr.getGuildId() < 1) { // for now
            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.write(3); // v97
        mplew.writeInt(0);
        mplew.writeShort(0);
        mplew.write(0xF8);

        if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
            mplew.writeInt(2);
        } else {
            mplew.writeInt(0);
        }
        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.MIRROR_IMAGE) != null) {
            buffmask |= MapleBuffStat.MIRROR_IMAGE.getValue();
        }
        /*   if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
        buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.MORPH).intValue());
        }
        if (chr.getBuffedValue(MapleBuffStat.ENERGY_CHARGE) != null) {
        buffmask |= MapleBuffStat.ENERGY_CHARGE.getValue();
        buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.ENERGY_CHARGE).intValue());
        }//FIX THIS^*/
        mplew.writeInt((int) ((buffmask >> 32) & 0xffffffffL));
        if (buffvalue != null) {
            //    if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) { //TEST
            //      mplew.writeShort(buffvalue);
            //    } else {
            mplew.write(buffvalue.byteValue());
            //    }
        }
        mplew.writeInt((int) (buffmask & 0xffffffffL));
        int CHAR_MAGIC_SPAWN = Randomizer.nextInt(5000000);
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);//v74
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeShort(0);
        mplew.write(0);
        if (chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING) != null && chr.getMount() != null) {
            mplew.writeInt(chr.getMount().getItemId());
            mplew.writeInt(chr.getMount().getSkillId()); // TODO: mechanic support :o
        } else {
            mplew.writeLong(0);
        }
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeLong(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeInt(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeShort(0);
        mplew.write(0);
        mplew.writeShort(chr.getJob().getId());
        addCharLook(mplew, chr, false); // 31 old; 28 b4 writePos
        mplew.writeLong(0);
        mplew.writeInt(0);
        mplew.writeInt(0);
        mplew.writeInt(0); // item effect
        mplew.writeInt(chr.getChair()); // chair
        mplew.writePos(chr.getPosition());
        mplew.write(chr.getStance());
        mplew.writeShort(0); // fh?
        mplew.writeShort(0);
        if (chr.getMount() == null) {
            mplew.writeInt(1); // mob level
            mplew.writeLong(0); // mob exp + tiredness
        } else {
            mplew.writeInt(chr.getMount().getLevel());
            mplew.writeInt(chr.getMount().getExp());
            mplew.writeInt(chr.getMount().getTiredness());
        }
        mplew.write(0); // announce box, our method is hackish
        if (chr.getChalkboard() != null) {
            mplew.write(1);
            mplew.writeMapleAsciiString(chr.getChalkboard());
        } else {
            mplew.write(0);
        }
        addRingLook(mplew, chr, true);
        addRingLook(mplew, chr, false);
        addMarriageRingLook(mplew, chr);
        mplew.writeShort(0);
        mplew.writeInt(0);
        return mplew.getPacket();
    }

Or...?
 
Upvote 0
Ok thanks, I'll give it a shot :)
but, should I leave what I added there or delete it?

Edit: I tried tons of different places. guesses they all have to be before the SHADOWPARTNER..

Discovered: There are lower places where I can stand in henesys, some1 gets in, sees my eyes hair and skin and dcs (only him) and in the higher places we both dc no matter who is in the map first without seeing each other.

New Discovery:
Theres this:
PHP:
        mplew.writeShort(chr.getJob().getId());
        mplew.writeInt((int) (buffmask & 0xffffffffL));
        int CHAR_MAGIC_SPAWN = Randomizer.nextInt(5000000);
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);//v74
        mplew.writeLong(0);
        mplew.writeShort(0);
        mplew.write(0);
        mplew.writeInt(CHAR_MAGIC_SPAWN);
        mplew.writeShort(0);
        mplew.write(0);

When I put:
PHP:
mplew.writeShort(chr.getJob().getId());

Below:
PHP:
mplew.writeInt((int) (buffmask & 0xffffffffL));

2 Players can see each other but when using Mirror Image the map dcs.

But when I put:
PHP:
mplew.writeShort(chr.getJob().getId());

ABOVE:
PHP:
mplew.writeInt((int) (buffmask & 0xffffffffL));

When 2 players get in the same map they both dc without seeing each other!

I don't think that the job thing is the problem since when I use shadow partner as a job that is not Night Lord, only I get dced and the giant packet error. When you use Mirror Image, the whole map DCs except of you.
 
Last edited:
Upvote 0
Back