Example #1
0
        public static void updateStatsAttributes(Character chr, short[] attributes = null, short sp = -1)
        {
            if(attributes != null) {
                chr.setStr(attributes[0]);
                chr.setDex(attributes[1]);
                chr.setVit(attributes[2]);
                chr.setInt(attributes[3]);
                chr.setAgi(attributes[4]);
            }
            if(sp != -1) {
                chr.setStatPoints(sp);
            }

            CharacterFunctions.calculateCharacterStatistics(chr);

            OutPacket p = new OutPacket(32);
            p.WriteInt(32);
            p.WriteShort(0x04);
            p.WriteShort(0x1d);
            p.WriteInt(0x01);
            p.WriteInt(chr.getuID());
            p.WriteShort(0x01);
            p.WriteShort(chr.getStr()); // Strength
            p.WriteShort(chr.getDex()); // Dextery
            p.WriteShort(chr.getVit()); // Vitality
            p.WriteShort(chr.getInt()); // Intelligence
            p.WriteShort(chr.getAgi()); // Agility
            p.WriteShort(chr.getStatPoints()); // statusPoints
            p.WriteByte(0x40);
            p.WriteByte(0x2a);
            chr.getAccount().mClient.WriteRawPacket(p.ToArray());
        }
Example #2
0
        public static byte[] initCharPacket(Character chr)
        {
            OutPacket op = new OutPacket(653);
            op.WritePaddedString(chr.getName(), 17); // 0-16
            op.WriteRepeatedByte(0x30, 16); // 17-32
            op.WriteByte();
            op.WriteShort(chr.getFaction()); // 34-35
            op.WriteInt(chr.getFame()); // 36-39
            op.WriteShort(chr.getcClass() == 2 ? (byte)0x02 : (byte)0x01); // 40-41
            op.WriteShort(chr.getFace()); // 42-43
            op.WriteInt(1);
            op.WriteShort(chr.getcClass()); // 48-49
            op.WriteShort(157); // 50-51 ; 1 -> hide player nick above the head & toggles guild on [1] / off [0] | 157 for random 154 warrior [probably guildType or guildIcon!! (important!!)]
            op.WriteShort(2); // 52-53 ; 7 -> 137 monk // your guild pos master/member etc.
            op.WriteShort(chr.getLevel()); // 54-55
            op.WriteInt(chr.getCurHP()); // 56-59
            op.WriteInt(chr.getCurMP()); // 60-63 but wtf.. mana is short o.o
            op.WriteInt(chr.getMap()); // 64-67 let's guess.. a map?
            op.WriteFloat(chr.getPosition()[0]); // 68-71
            op.WriteFloat(chr.getPosition()[1]); // 72-75
            for(byte i = 0;i < 17;i++)
            {
                if(chr.getEquipment().getEquipments().ContainsKey(i))
                {
                    op.WriteByte();
                    op.WriteByte(chr.getEquipment().getEquipments()[i].getEnding() > 0 ? (byte)0xff : (byte)0);
                    op.WriteShort();
                    op.WriteInt(chr.getEquipment().getEquipments()[i].getItemID());
                    op.WriteInt(chr.getEquipment().getEquipments()[i].getEnding() > 0 ? (int)chr.getEquipment().getEquipments()[i].getEnding() / 1000 : 1);
                } else op.WriteZero(12);
            }

            op.Position = 465;
            op.WriteByte(70);

            op.Position = 314;
            for(byte i = 0;i < 16;i++)
            {
                /*if(character.getBuffs().getBuffs().ContainsKey(i)) {
                    op.WriteShort(character.getBuffs().getBuffs()[i].getBuffSlot());
                    op.WriteShort(character.getBuffs().getBuffs()[i].getBuffID());
                    op.WriteShort(character.getBuffs().getBuffs()[i].getBuffTime());
                    op.WriteShort(character.getBuffs().getBuffs()[i].getBuffValue());
                } else*/
                op.Skip(8);
            }

            op.Skip(16);

            op.WriteByte(0); // no explanation
            op.WriteByte(0); // no explanation
            op.WriteByte(/*character.getKao()*/);
            op.WriteByte(/*character.getPenance()*/);
            op.WriteByte(chr.getEffect());
            op.WriteByte(0); // no explanation
            op.WriteByte(FameNickNames.Instance.getFameNickID(chr.getFame()));
            op.WriteByte(chr.getVp()); // 465
            op.WriteByte((byte)chr.getAccount().gmLvl); // 466
            op.WriteByte(0); // no explanation
            op.WriteByte(0); // -> 1 -> tells the client that UI mutation effect should be toggled off | 468
            op.WriteByte((byte)(chr.getInvPages() - 3)); // inventory pages | 469
            op.WriteByte(0); // no explanation
            op.WriteByte(0); // no explanation
            op.WriteShort(0); /*weird PK thing*/ // 472 - 473 but in fact.. it has some date time etc.
            op.WriteLong(0); // 474 - 481

            op.Position = 560;
            op.WriteInt(1); // ok.. so this is kinda weird - last place where you've leveled / died with your character?
            op.WriteFloat(-2558); // unknown posX
            op.WriteFloat(8950); // unknown posY
            op.WriteByte(0); // no explanation
            op.WriteByte(0); // no explanation
            op.WriteByte(0); // no explanation
            op.WriteByte(0); // no explanation
            for(int i = 0;i < chr.getCStats().Length;i++) op.WriteShort(chr.getCStats()[i]); // 576-577 / 578-579 / 580-581 / 582-583 / 584-585
            op.WriteShort(chr.getCurSP());
            op.WriteInt();
            op.WriteInt();

            op.WriteLong();
            op.WriteShort(chr.getStatPoints());
            op.WriteShort(chr.getSkillPoints()); // 606-607
            op.Position = 648;
            op.WriteByte(Convert.ToByte(chr.getDeleteState()));
            return op.ToArray();
        }
Example #3
0
        public static void setCharacterLevel(Character chr, byte level)
        {
            OutPacket p = new OutPacket(40);
            p.WriteInt(40);
            p.WriteShort(0x05);
            p.WriteShort(0x20);
            p.WriteByte(0x01);
            p.WriteByte(0x39);
            p.WriteByte(0x07);
            p.WriteByte(0x08);
            p.WriteInt(chr.getuID());
            p.WriteShort(level);
            p.WriteShort(chr.getStatPoints());
            p.WriteInt(chr.getSkillPoints());
            p.WriteInt(chr.getMaxHP());
            p.WriteShort((short)chr.getMaxMP());
            p.WriteShort(chr.getMaxSP());
            chr.getAccount().mClient.WriteRawPacket(p.ToArray());

            chr.setLevel(level);
        }