Esempio n. 1
0
 public void appendToCharacters(Character character)
 {
     if(this.characters.Count() >= 5) return;
     for(byte i = 0;i < 5;i++)
     {
         if(!characters.ContainsKey(i))
         {
             characters.Add((byte)i, character);
             return;
         }
     }
 }
Esempio n. 2
0
        public static void loadCargo(Character chr)
        {
            Cargo cargo = chr.getCargo();

            using(var con = new MySqlConnection(MasterServer.Instance.SqlConnection.mConnectionString))
            using(var cmd = con.CreateCommand())
            {
                con.Open();
                cmd.CommandText = "SELECT * FROM chars_inv WHERE charID=" + chr.getuID();
                using(var reader = cmd.ExecuteReader())
                {
                    reader.Read();

                    if(!reader.HasRows)
                    {
                        return;
                    }
                    else
                    {
                        List<int> seqhash = new List<int>();

                        int val = 0;
                        long ending;
                        short amount;
                        Item it;
                        for(int i = 0;i < 240;i++)
                        {
                            val = reader.GetInt32(i * 4 + 1);
                            amount = reader.GetInt16(i * 4 + 3);
                            it = null;
                            if(val != 0 && amount != 0)
                            {
                                it = new Item(val, amount);
                            }
                            val = reader.GetInt32(i * 4 + 2);
                            ending = reader.GetInt64(i * 4 + 4);
                            seqhash.Add(val);
                            if(it != null)
                            {
                                cargo.putIntoCargo(val % 100, val / 100, it);
                            }
                        }

                        cargo.saveCargo();
                        cargo.setSeqSaved(seqhash);
                    }
                }
            }
        }
Esempio n. 3
0
        public static void releaseHealPacket(Character chr, int hpParam = 1000, short mpParam = 1000, short spParam = 1000)
        {
            if(hpParam > chr.getMaxHP())
            {
                hpParam = chr.getMaxHP();
                chr.setCurHP(chr.getMaxHP());
            }
            else
            {
                chr.setCurHP(hpParam);
            }

            if(mpParam > chr.getMaxMP())
            {
                mpParam = chr.getMaxMP();
                chr.setCurMP(chr.getMaxMP());
            }
            else
            {
                chr.setCurMP(mpParam);
            }

            if(spParam > chr.getMaxSP())
            {
                spParam = chr.getMaxSP();
                chr.setCurSP(chr.getMaxSP());
            }
            else
            {
                chr.setCurSP(spParam);
            }

            OutPacket p = new OutPacket(32);
            p.WriteInt(32);
            p.WriteShort(0x05);
            p.WriteShort(0x35);
            p.WriteInt(1158393864);
            p.WriteInt(chr.getuID());
            p.WriteInt(131076);
            p.WriteInt();
            p.WriteInt(hpParam);
            p.WriteShort(mpParam);
            p.WriteShort(spParam);
            chr.getAccount().mClient.WriteRawPacket(p.ToArray());
        }
Esempio n. 4
0
 public static void releaseGeneralQuestPacket(Character chr, byte karma = 0x0, byte penance = 0x0, int fame = 0x0, long exp = 0x0, long money = 0x0, byte guildPos = 0x0, byte faction = 0x0)
 {
     OutPacket op = new OutPacket(64);
     op.WriteInt(64);
     op.WriteShort(0x05);
     op.WriteShort(0x3b);
     op.WriteInt(715218689);
     op.WriteInt(chr.getuID());
     op.WriteByte(0x0); // karma
     op.WriteByte(0x0); // penance
     op.WriteShort(); // ?
     op.WriteByte(FameNickNames.Instance.getFameNickID(fame != 0x0 ? fame : chr.getFame()) > 0 ? (byte)1 : (byte)0); // appear player name above the head
     op.WriteByte(FameNickNames.Instance.getFameNickID(fame != 0x0 ? fame : chr.getFame())); // fame nickname
     op.WriteByte(chr.getAccount().gmLvl > 0 ? (byte)1 : (byte)0); // blue nickname??
     op.WriteByte(4); // ?
     op.WriteByte(4); // ?
     op.WriteByte(4); // ?
     op.WriteByte(4); // ?
     op.WriteByte(4); // ?
     op.WriteInt(fame != 0x0 ? fame : chr.getFame()); // fame
     op.WriteReversedLong(exp != 0x0 ? exp : chr.getExp()); // exp
     op.WriteLong(money != 0x0 ? money : chr.getCoin()); // money
     op.WriteByte(guildPos != 0x0 ? guildPos : (byte)0x0); // Guild Pos | TODO
     op.WriteByte(faction != 0x0 ? faction : chr.getFaction()); // Faction
     op.WriteByte(2); // 0 - gives an yellow message (?) | 1 - hides inventory
     Console.WriteLine(BitConverter.ToString(op.ToArray()));
     chr.getAccount().mClient.WriteRawPacket(op.ToArray());
 }
Esempio n. 5
0
        public static byte[] getUpgradePacket(Character chr, Item newItem, byte newItemIndex, int newItemHash)
        {
            byte x, y, suc;
            if(newItemHash != -1)
            {
                x = (byte)(newItemHash % 100);
                y = (byte)(newItemHash / 100);
                suc = 1;
            }
            else
            {
                x = (byte)0xFF;
                y = (byte)0xFF;
                suc = 0;
            }

            OutPacket op = new OutPacket(36);
            op.WriteInt(36);
            op.WriteShort(0x04);
            op.WriteShort(0x32);
            op.WriteInt(0x01);
            op.WriteInt(chr.getuID());
            op.WriteShort(suc);
            op.WriteByte();
            op.WriteByte(newItemIndex);
            op.WriteInt(134612548);
            op.WriteShort();
            op.WriteByte(y);
            op.WriteByte(x);
            op.WriteInt(newItem.getItemID());
            op.WriteInt(newItem.getQuantity());
            return op.ToArray();
        }
Esempio n. 6
0
 public static byte[] getInventoryDeletePacket(Character chr, byte invIndex, byte amount)
 {
     OutPacket op = new OutPacket(20);
     op.WriteInt(20);
     op.WriteShort(0x04);
     op.WriteShort(0x15);
     op.WriteInt();
     op.WriteInt(chr.getuID());
     op.WriteShort(0x01);
     op.WriteByte(amount);
     op.WriteByte(invIndex);
     return op.ToArray();
 }
Esempio n. 7
0
 public static byte[] getTurboPacket(Character chr, int skillID, bool activate)
 {
     OutPacket op = new OutPacket(28);
     op.WriteInt(28);
     op.WriteShort(5);
     op.WriteShort(0x34);
     op.WriteInt(activate ? 135632385 : 134521345);
     op.WriteInt(chr.getuID());
     op.WriteInt(activate ? -1089535999 : 135528449);
     op.WriteInt(skillID);
     op.WriteInt(activate ? 303818 : 913099);
     return op.ToArray();
 }
Esempio n. 8
0
 public static byte[] getMediPacket(Character chr, int skillID, byte activationID)
 {
     OutPacket op = new OutPacket(28);
     op.WriteInt(28);
     op.WriteShort(5);
     op.WriteShort(0x34);
     op.WriteInt(134521345);
     op.WriteInt(chr.getuID());
     op.WriteInt(135528449);
     op.WriteInt(skillID);
     op.WriteByte(activationID);
     op.WriteShort(3566);
     return op.ToArray();
 }
Esempio n. 9
0
        public static byte[] createGuildResponse(Character chr, byte managementType, byte managementArg = 0, string guildName = null)
        {
            OutPacket op = new OutPacket(88); // 32 & 56
            op.WriteInt		(32);
            op.WriteShort	(4);
            op.WriteShort	(97);
            op.WriteInt		(1);
            op.WriteInt		(chr.getuID()); // 12-15
            op.Skip			(16); // 16-31

            op.WriteInt		(56);
            op.WriteShort	(4);
            op.WriteShort	(61);
            op.WriteInt		(1);
            op.WriteInt		(chr.getuID());
            op.WriteShort	(1);
            op.WriteByte	(managementType);
            op.WriteByte	(managementArg);
            op.WritePaddedString(guildName ?? "", 20);
            op.WriteInt		(chr.getFame());
            op.WriteInt		(/* 344 ?? */);
            op.WriteLong	(chr.getCoin());
            return op.ToArray();
        }
Esempio n. 10
0
        public static byte[] getIncomingMessagePacket(Message msg, Character chr)
        {
            string message = msg.getMessage();
            int messageLength = message.Length;

            OutPacket op = new OutPacket(messageLength + 91);
            op.WriteInt		();
            op.WriteShort	(1);
            op.WriteShort	(20);
            op.WriteInt		(358585);
            op.WritePaddedString(msg.getDateTimeString(), 20);
            op.WriteInt		(12);
            op.WriteInt		(4);
            op.WriteLong	(4479951538479293);
            op.WritePaddedString(chr.getName(), 17);
            op.WritePaddedString("BrightMH", 17);
            op.WriteShort	(2080);
            op.WriteInt		(messageLength);
            op.WriteString	(message);
            return op.ToArray();
        }
Esempio n. 11
0
        public static byte[] extCharPacket(Character chr)
        {
            byte[] cedata = new byte[616];
            short length = (short)cedata.Length;
            byte[] lengthbytes = BitTools.shortToByteArray(length);
            byte[] chID = BitTools.intToByteArray(chr.getuID());
            byte[] chName = Encoding.ASCII.GetBytes(chr.getName());
            byte[] xCoords = BitTools.floatToByteArray(chr.getPosition()[0]);
            byte[] yCoords = BitTools.floatToByteArray(chr.getPosition()[1]);

            cedata[0] = lengthbytes[0];
            cedata[1] = lengthbytes[1];
            cedata[4] = (byte)0x05;
            cedata[6] = (byte)0x01;
            cedata[8] = (byte)0x01;

            for(int i = 0;i < 4;i++) {
                cedata[i + 12] = chID[i]; //character ID
                cedata[i + 88] = xCoords[i]; //location x
                cedata[i + 92] = yCoords[i]; //location y
            }

            for(int i = 0;i < chName.Length;i++) {
                cedata[i + 20] = chName[i]; //characters Name
            }

            for(int i = 0;i < 16;i++) {
                cedata[37 + i] = (byte)0x30; //character packets have 16 times 30(0 in ASCII) in row. Mysteries of CRS.
            }

            if(chr.getcClass() == 2) {
                cedata[60] = (byte)0x02; //gender byte
                cedata[68] = (byte)0x02; //class byte
            }
            else {
                cedata[60] = (byte)0x01; //gender byte
                cedata[68] = (byte)chr.getcClass(); //class byte
            }

            cedata[54] = (byte)chr.getFaction(); //faction

            cedata[62] = (byte)chr.getFace();  //face

            cedata[74] = (byte)chr.getLevel();   //level

            //equip
            byte[] bytes;
            for(byte i = 0;i < 17;i++) {
                if(chr.getEquipment().getEquipments().ContainsKey(i)) {
                    bytes = BitTools.intToByteArray(chr.getEquipment().getEquipments()[i].getItemID());
                    for(int j = 0;j < 4;j++) {
                        cedata[100 + i * 12 + j] = bytes[j];
                    }
                }
            }

            //if(ch.getPt() != null && receiver.getPt() != null && ch.getPt().getPartyDuel() != null && ch.getPt().getPartyDuel() == receiver.getPt().getPartyDuel() && ch.isInPtDuel() && receiver.isInPtDuel()) cedata[480] = (byte)2;          //fakekao
            //else cedata[480] = (byte)ch.getKao();      //kao

            cedata[482] = (byte)chr.getEffect();   //size

            cedata[484] = (byte)FameNickNames.Instance.getFameNickID(chr.getFame()); //Fame title

            if(chr.getAccount().gmLvl > 0)
                cedata[486] = (byte)0x01; // gm name

            cedata[610] = (byte)0x50;
            cedata[611] = (byte)0x2a;

            return cedata;
        }
Esempio n. 12
0
 public static byte[] vanCharPacket(Character chr)
 {
     OutPacket vanCharData = new OutPacket(20);
     vanCharData.WriteInt(20);
     vanCharData.WriteInt((byte)0x05);
     vanCharData.WriteByte((byte)0x01);
     vanCharData.WriteByte((byte)0x10);
     vanCharData.WriteByte((byte)0xa0);
     vanCharData.WriteByte((byte)0x36);
     vanCharData.WriteInt(chr.getuID());
     vanCharData.WriteByte();
     vanCharData.WriteByte((byte)0xee);
     vanCharData.WriteByte((byte)0x5f);
     vanCharData.WriteByte((byte)0xbf);
     return vanCharData.ToArray();
 }
Esempio n. 13
0
        public static byte[] openVendorFrame(Character chr, Dictionary<int, ItemVendor> itemsMap, Dictionary<int, Point> coords, int other, int vendorId)
        {
            byte[] chid = BitTools.intToByteArray(chr.getuID());

            byte[] venOpen = new byte[1304];
            byte[] cdatalength = BitTools.intToByteArray(venOpen.Length);

            venOpen[0] = (byte)cdatalength[0];
            venOpen[1] = (byte)cdatalength[1];

            venOpen[4] = (byte)0x04;
            venOpen[6] = (byte)0x38;

            venOpen[8] = (byte)0x01;
            //venOpen[9] = (byte)0x31;

            for(int x=0;x<4;x++) {
                venOpen[12+x] = chid[x];
            }

            venOpen[16] = (byte)0x01;

            venOpen[20] = (byte)other;
            venOpen[21] = (byte)vendorId;
            int i = 0;
            foreach(KeyValuePair<int, ItemVendor> index in itemsMap)
            {
                foreach(KeyValuePair<int, Point> index1 in coords)
                {
                    if(index.Key == index1.Key)
                    {
                        byte[] itemId = BitTools.intToByteArray(index.Value.getItemFrame().getItemID());
                        byte[] price = BitTools.longToByteArray(index.Value.getPrice());

                        //coords
                        venOpen[26+i] = (byte)index1.Value.X;
                        venOpen[27+i] = (byte)index1.Value.Y;
                        //item ID
                        for(int j=0;j<4;j++) {
                            venOpen[28+i+j] = itemId[j];
                        }
                        //Amount
                        venOpen[32 + i] = (byte)index.Value.getQuantity();

                        Console.WriteLine("item " + index.Key + " has price " + index.Value.getPrice() + " \n");

                        //Price packets are 8 bytes long
                        for(int j=0;j<price.Length;j++) {
                            venOpen[792+j+ (i/12)*8] = price[j];
                        }
                        break;
                    }
                }
                i+=12; //size of one item packet
            }
            return venOpen;
        }
Esempio n. 14
0
        public static byte[] getVendorListPacket(Character chr)
        {
            List<Character> vendorList = WMap.Instance.getVendingList();
            int vendorSize = vendorList.Count() * 36;
            byte[] chid = BitTools.intToByteArray(chr.getuID());
            byte[] vendorlist = new byte[vendorSize + 14];
            byte[] size = BitTools.intToByteArray(vendorlist.Length);

            for(int i = 0;i < 4;i++)
            {
                vendorlist[i] = size[i];
                vendorlist[9 + i] = chid[i];
            }

            vendorlist[4] = (byte)0x04;
            vendorlist[6] = (byte)0x4a;
            vendorlist[8] = (byte)0x01;

            vendorlist[13] = (byte)0x01;

            if(vendorList.Count() > 0)
            {
                for(int i = 0;i < vendorList.Count();i++)
                {
                    Character ch = vendorList[i];
                    byte[] bCh = BitTools.intToByteArray(ch.getuID());
                    byte[] vendorname = BitTools.stringToByteArray(ch.getVending().getShopName());
                    //36 is length of shop
                    for(int j = 0;j < 4;j++)
                    {
                        vendorlist[14 + i * 36 + j] = bCh[j];
                    }

                    for(int j = 0;j < vendorname.Length;j++)
                    {
                        vendorlist[18 + i * 36 + j] = vendorname[j];
                    }
                    vendorlist[49 + i * 36] = (byte)0x08;
                }
            }

            return vendorlist;
        }
Esempio n. 15
0
 public static byte[] getFameVendingPacket(Character chr)
 {
     OutPacket op = new OutPacket(32);
     op.WriteInt		(32);
     op.WriteShort	(0x05);
     op.WriteShort	(0x43);
     op.WriteInt		(137560065);
     op.WriteInt		(chr.getuID());
     op.WriteInt		();
     op.WriteByte	(FameNickNames.Instance.getFameNickID(chr.getFame()));
     op.WriteByte	(chr.getVp());
     op.WriteInt		(chr.getAccount().gmLvl);
     op.WriteByte	(0x02);
     op.WriteByte	(0x03);
     op.WriteInt		(chr.getFame());
     return op.ToArray();
 }
Esempio n. 16
0
 public static byte[] getCastSkillPacket(Character chr, int targets, int skillID, byte activationID)
 {
     OutPacket op = new OutPacket(28 + targets * 24);
     op.WriteInt(28 + targets * 24);
     op.WriteShort(5);
     op.WriteShort(0x34);
     op.WriteInt(1);
     op.WriteInt(chr.getuID());
     op.WriteInt(1);
     op.WriteInt(skillID);
     op.WriteByte(activationID);
     op.WriteByte(7);
     op.WriteByte();
     op.WriteByte((byte)targets);
     return op.ToArray();
 }
Esempio n. 17
0
 public static byte[] getLearnSkillPacket(Character chr, int skillIdInt, int skillNumberInt)
 {
     OutPacket op = new OutPacket(32);
     op.WriteInt(32);
     op.WriteShort(0x04);
     op.WriteShort(0x29);
     op.WriteInt(0x01);
     op.WriteInt(chr.getuID());
     op.WriteShort(0x01);
     op.WriteByte(0x06);
     op.WriteByte(0x08);
     op.WriteInt(skillNumberInt);
     op.WriteInt(skillIdInt);
     op.WriteShort(chr.getSkillPoints());
     op.WriteByte(0x5f);
     op.WriteByte(0x08);
     return op.ToArray();
 }
Esempio n. 18
0
 public static byte[] extCharGuild(Character chr)
 {
     OutPacket op = new OutPacket(40);
     op.WriteInt		(40);
     op.WriteShort	(5);
     op.WriteShort	(65);
     op.WriteInt		(1);
     op.WriteInt		(chr.getuID());
     op.WriteByte	(chr.getGuild().guildType);
     op.WritePaddedString(chr.getGuild().guildName, 17);
     op.WriteShort	(chr.getGuild().guildIcon);
     return op.ToArray();
 }
Esempio n. 19
0
        public static byte[] getSkillEffectOnCharPacket(Character chr)
        {
            byte[] cid = BitTools.intToByteArray(chr.getuID());
            byte[] skillpckt = new byte[44];

            skillpckt[0] = (byte)skillpckt.Length;
            skillpckt[4] = (byte)0x05;
            skillpckt[6] = (byte)0x1F;
            skillpckt[8] = (byte)0x01;
            skillpckt[9] = (byte)0x99;
            skillpckt[10] = (byte)0x0F;
            skillpckt[11] = (byte)0xBF;

            //CharID
            for(int i = 0;i < 4;i++)
            {
                skillpckt[12 + i] = cid[i];
            }

            skillpckt[16] = (byte)0x0E;

            //Effid
            skillpckt[20] = (byte)0x00;  //e.g.32
            skillpckt[21] = (byte)0x00;

            //Effduration
            skillpckt[22] = (byte)0x00; //e.g.6e
            skillpckt[23] = (byte)0x00;

            //Effvalue
            skillpckt[24] = (byte)0x00; //e.g.21
            skillpckt[25] = (byte)0x00;

            skillpckt[26] = (byte)0x01;
            skillpckt[28] = (byte)0x87;
            skillpckt[29] = (byte)0x01;
            skillpckt[32] = (byte)0x87;
            skillpckt[33] = (byte)0x01;
            skillpckt[36] = (byte)0x45;
            skillpckt[37] = (byte)0x01;
            skillpckt[38] = (byte)0x45;
            skillpckt[39] = (byte)0x01;
            skillpckt[40] = (byte)0xF2;
            skillpckt[42] = (byte)0xF2;
            return skillpckt;
        }
Esempio n. 20
0
 public static byte[] quitGuildForExternals(Character chr)
 {
     OutPacket op = new OutPacket(40);
     op.WriteInt		(40);
     op.WriteShort	(0x05);
     op.WriteShort	(0x41);
     op.WriteInt		(1);
     op.WriteInt		(chr.getuID());
     return op.ToArray();
 }
Esempio n. 21
0
 public static byte[] chatRelay(Character chr, byte messageType, string message)
 {
     OutPacket p = new OutPacket(message.Length + 44);
     p.WriteInt(message.Length + 44);
     p.WriteShort(0x05);
     p.WriteShort(0x07);
     p.WriteInt(0x01);
     p.WriteInt(chr.getuID());
     p.WriteZero(1);
     p.WriteByte(0x01);
     p.WriteShort(messageType);
     p.WritePaddedString(chr.getName(), 20);
     p.WriteInt(message.Length);
     p.WriteString(message);
     return p.ToArray();
 }
Esempio n. 22
0
        public static byte[] quitGuildForInternal(Character chr)
        {
            /* This packet shows teh laziness of koreanz, they use one f*****g shit probably for everything - 3 packets just in one case ;
             * to show teh playa, that he has a guild or na ;
             * that he lives / joinz guild etc ;
             * oh lulz at u koreanz, I'd not like to work on Karma too ;
             * I already see on my eyez how much0 CRSpace team was butthurted to work on this shit XD*/

            OutPacket op = new OutPacket(1748);
            op.WriteInt		(32);
            op.WriteShort	(4);
            op.WriteShort	(97);
            op.WriteInt		(1);
            op.WriteInt		(chr.getuID()); // 12-15
            op.Skip			(16); // 16-31

            op.WriteInt		(72); // yeah - new packet & f**k rzaah 32-35
            op.WriteShort	(4);  // 36 - 37
            op.WriteShort	(63); // 38 - 39
            op.WriteInt		(1); // 40 - 43
            op.WriteInt		(chr.getuID()); // 44 - 47
            op.WriteInt		(1); // 48 - 51
            op.WriteInt		(chr.getuID()); // 52 - 55
            op.WriteInt		(3487029); // 555 - but wut for? // 56 - 59
            op.Skip			(12); // 60 - 71
            op.WriteInt		(135570688); // lukz f4mili4r <: // 72 - 75
            op.WriteInt		(chr.getuID()); // 76 - 79
            op.WriteInt		(3487029); // 555 - n again, wut for???? // 80 - 83
            op.Skip			(12); // 84 - 95
            op.WriteInt		(781505280); // damn koreanz, trying to stop us by their hash identificator shit! but we g0n4 fight to da last sold13r!! // 96 - 99
            op.WriteInt		(); // first skipped integer? :0 wutwut // 100 - 103

            op.WriteInt		(32); // another p4ck3t ; n yeah, it was already here ^ // 104 - 107
            op.WriteShort	(4); // 108 - 109
            op.WriteShort	(97); // 110 - 111
            op.WriteInt		(1); // 112 - 115
            op.WriteInt		(chr.getuID()); // 116 - 119
            op.Skip			(16); // 120 - 135

            op.WriteInt		(1612); // 4nd y34h, gi4nt sh1t upc0min qq & nother pckt & another dick in rzaah's ass // 136 - 139
            op.WriteShort	(4); // 140 - 141
            op.WriteShort	(65); // 142 - 143
            op.WriteInt		(1); // 144 - 147
            op.WriteInt		(chr.getuID()); // 148 - 152
            return op.ToArray();
        }
Esempio n. 23
0
 public static byte[] getPickItemPacket(Character chr, Item item, int amount, int uidInt, byte line, byte row, byte stuff)
 {
     OutPacket op = new OutPacket(40);
     op.WriteInt(40);
     op.WriteShort(0x04);
     op.WriteShort(0x0F);
     op.WriteInt(134519809);
     op.WriteInt(chr.getuID());
     op.WriteShort(0x01);
     op.WriteInt(208335);
     op.WriteShort();
     op.WriteByte(line);
     op.WriteByte(row);
     op.WriteShort(stuff);
     op.WriteShort((short)uidInt);
     op.WriteByte(row);
     op.WriteByte(stuff);
     op.WriteInt(item.getItemID());
     op.WriteInt(amount > 0 ? amount : 1);
     return op.ToArray();
 }
Esempio n. 24
0
        public static byte[] refreshGuild(Character chr)
        {
            Guild guild = chr.getGuild();

            OutPacket op = new OutPacket(1644);
            op.WriteInt		(32);
            op.WriteShort	(4);
            op.WriteShort	(97);
            op.WriteInt		(1);
            op.WriteInt		(chr.getuID());
            op.Skip			(16);

            op.WriteInt		(1612);
            op.WriteShort	(4);
            op.WriteShort	(65);
            op.WriteInt		(1);
            op.WriteInt		(chr.getuID());
            op.WriteShort	(1);
            op.WritePaddedString(guild.guildName, 18);
            op.WriteShort	(guild.guildIcon);
            op.WriteShort	(guild.guildType);
            op.WriteInt		((guild.guildFame / 100) + (guild.guildGold / 10));
            op.WriteInt		(guild.guildFame);
            op.WriteLong	(guild.guildGold);
            op.WriteInt		(guild.guildHat);

            for(int i = 0;i < 50;i++)
            {
                op.WriteInt(guild.guildMembers.ElementAt(i) == null ? 0 : guild.guildMembers.ElementAt(i).getuID());
            } // 60 - 259

            for(int i = 0;i < 50;i++)
            {
                op.WriteByte(guild.guildMembers.ElementAt(i) == null ? (byte)0 : guild.guildMembers.ElementAt(i).getGuildRank());
            } // 260 - 309

            for(int i = 0;i < 50;i++)
            {
                if(guild.guildMembers.ElementAt(i) == null)
                {
                    op.Skip(17);
                    continue;
                }
                if(guild.guildMembers.ElementAt(i).getOnlineCharacter() == null)
                {
                    op.Skip(17);
                    continue;
                }
                Character tmp = guild.guildMembers.ElementAt(i).getOnlineCharacter();
                op.WritePaddedString(tmp.getName(), 17);
            } // 310 - 1159

            for(int i = 0;i < 50;i++)
            {
                if(guild.guildMembers.ElementAt(i) == null)
                {
                    op.Skip(1);
                    continue;
                }
                if(guild.guildMembers.ElementAt(i).getOnlineCharacter() == null)
                {
                    op.Skip(1);
                    continue;
                }
                Character tmp = guild.guildMembers.ElementAt(i).getOnlineCharacter();
                op.WriteByte(tmp.getcClass());
            }
            return op.ToArray();
        }
Esempio n. 25
0
 public static byte[] playerIsntConnected(Character chr)
 {
     OutPacket p = new OutPacket(48);
     p.WriteInt(48);
     p.WriteShort(0x05);
     p.WriteShort(0x07);
     p.WriteInt(0x01);
     p.WriteInt(chr.getuID());
     p.WriteZero(2);
     p.WriteShort(0x01);
     p.WriteZero(20);
     p.WriteInt(0x04);
     p.WriteByte(0x34);
     p.WriteByte(0x33);
     p.WriteByte(0x34);
     p.WriteByte(0x33);
     return p.ToArray();
 }
Esempio n. 26
0
 public static byte[] removeDroppedItemForCharacter(Character chr, int uID)
 {
     OutPacket op = new OutPacket(20);
     op.WriteInt(20);
     op.WriteShort(0x05);
     op.WriteShort(0x0f);
     op.WriteInt(0x01);
     op.WriteInt(chr.getuID());
     op.WriteInt(uID);
     return op.ToArray();
 }
Esempio n. 27
0
 public static byte[] getExtEquipPacket(Character chr, byte slot, int itemID)
 {
     OutPacket op = new OutPacket(24);
     op.WriteInt(24);
     op.WriteShort(0x05);
     op.WriteShort(0x0c);
     op.WriteInt(0x01);
     op.WriteInt(chr.getuID());
     op.WriteInt(itemID);
     op.WriteByte(slot);
     op.WriteByte(0x9e);
     op.WriteByte(0x0f);
     op.WriteByte(0xbf);
     return op.ToArray();
 }
Esempio n. 28
0
        public static void HandleMovement(Character chr, byte[] tx, byte[] ty, byte mMode)
        {
            if(chr == null) {
                Logger.LogCheat(Logger.HackTypes.NullActive, chr.getAccount().mClient, "Wrong target has been selected by moving packet");
                chr.getAccount().mClient.Close();
                return;
            }

            Area lastArea = chr.getArea();
            Boolean nullify = false;
            if(lastArea == null)
                nullify = true;

            Area newArea = WMap.Instance.getGrid(chr.getMap()).getAreaByRound(chr.getPosition()[0], chr.getPosition()[1]);

            if(newArea == null)
            {
                CharacterFunctions.warpToNearestTown(chr);
                return;
            }

            if(!nullify) {
                if(lastArea != newArea) {
                    lastArea.removeCharacter(chr);
                    newArea.addCharacter(chr);
                    chr.setArea(newArea);
                }
            }
            else if(nullify) {
                newArea.addCharacter(chr);
                chr.setArea(newArea);
            }

            OutPacket p = new OutPacket(56);
            p.WriteInt(56);
            p.WriteShort(0x04);
            p.WriteShort(0x0d);
            p.WriteInt	();
            p.WriteInt	(chr.getuID());
            p.WriteFloat(chr.getPosition()[0]);
            p.WriteFloat(chr.getPosition()[1]);
            p.WriteBytes(tx); //2nd set
            p.WriteBytes(ty);
            p.WriteInt	(newArea.getaID());
            p.WriteShort();
            p.WriteByte	((byte)0x80);
            p.WriteByte	((byte)0x3f);
            p.WriteByte	(mMode);
            p.WriteByte	((byte)0x03);
            p.WriteByte	((byte)0x05);
            p.WriteByte	((byte)0x08);
            p.WriteInt	(chr.getCurHP());
            p.WriteShort(chr.getCurMP());
            p.WriteShort(chr.getCurSP());
            p.WriteInt(newArea.getRegionID());
            chr.getAccount().mClient.WriteRawPacket(p.ToArray());

            OutPacket externalMovement = new OutPacket(48);
            externalMovement.WriteInt(48);
            externalMovement.WriteShort(0x05);
            externalMovement.WriteShort(0x0d);
            externalMovement.WriteInt((newArea != lastArea) ? (0x01) : (-1084232447));
            externalMovement.WriteInt(chr.getuID());
            externalMovement.WriteInt(1078117293);
            externalMovement.WriteFloat(chr.getPosition()[0]);
            externalMovement.WriteFloat(chr.getPosition()[1]);
            externalMovement.WriteBytes(tx);
            externalMovement.WriteBytes(ty);
            externalMovement.WriteShort(mMode); // who knows? | 36
            externalMovement.WriteShort((short)newArea.getaID());
            externalMovement.WriteShort();
            externalMovement.WriteByte(0x80);
            externalMovement.WriteByte(0x3f);
            externalMovement.WriteInt((newArea != lastArea) ? (0x05) : (0x03));

            WMap.Instance.getGrid(chr.getMap()).sendTo3x3AreaMovement(chr, newArea, externalMovement.ToArray());

            bool areaTriggered = false;
            for(int i = 0;i < 3;i++)
            {
                for(int u = 0;u < 3;u++)
                {
                    Area nearCentral = WMap.Instance.getGrid(chr.getMap()).getArea(new int[] { newArea.getAreaPosition()[0] - 1 + i, newArea.getAreaPosition()[1] - 1 + u });
                    if(nearCentral == null) continue;
                    if(nearCentral.getAreaTriggers().Count() == 0) continue;
                    {
                        foreach(AreaTrigger areaTrigger in nearCentral.getAreaTriggers())
                        {
                            if((WMap.distance(chr.getPosition()[0], chr.getPosition()[1], areaTrigger.getFromPosition()[0], areaTrigger.getFromPosition()[1]) > 35)) continue;
                            if(!CharacterFunctions.isCharacterWearingItem(chr, areaTrigger.getRequiredItem())) continue;
                            try
                            {
                                areaTriggered = true;
                                CharacterFunctions.setPlayerPosition(chr, areaTrigger.getToPosition()[0], areaTrigger.getToPosition()[1], areaTrigger.gettMap());
                            }
                            catch(Exception e)
                            {
                                Console.WriteLine(e);
                            }
                        }
                    }
                }
            }
            if(!areaTriggered) chr.setPosition(new float[] { (float)BitTools.byteArrayToFloat(tx), (float)BitTools.byteArrayToFloat(ty) });
        }
Esempio n. 29
0
        // Holy Grail ftw
        public static void useItem(Character chr, Item item, byte usingIndex, InPacket p)
        {
            MartialClient c = chr.getAccount().mClient;
            ItemData itemData = ItemDataCache.Instance.getItemData(item.getItemID());
            Boolean shouldDecrease = false;
            string determined = null;
            int determiner = 0;
            if(itemData.getIsStackable()) shouldDecrease = true;
            else
            {
                if(itemData.getTimeToExpire() == 0)
                    shouldDecrease = true;
            }

            // well.. we don't care if it's handled by server.. let's just remove them & f**k haterz! qq
            if(shouldDecrease)
                if(!chr.getInventory().decrementItem(usingIndex))
                {
                    Console.WriteLine("something went wrong with decrement..");
                    return;
                }

            switch(itemData.getCategory())
            {
                case 1001: // healingz
                {
                    if(itemData.getHealHP() > 0 || itemData.getHealMana() > 0 || itemData.getHealStamina() > 0)
                        StaticPackets.releaseHealPacket(chr, (int)(chr.getCurHP() + itemData.getHealHP()), (short)(chr.getCurMP() + itemData.getHealMana()), (short)(chr.getCurSP() + itemData.getHealStamina()));
                    break;
                }
                case 1002: // skillz o.o
                {
                    StaticPackets.sendSystemMessageToClient(chr.getAccount().mClient, 1, "If you'd like to learn any skill, go to skills list and press CTRL+LMB.");
                    break;
                }
                case 1003: // teleport
                {
                    if(chr.getMap() == itemData.getTeleportMap() || chr.getMap() != itemData.getTeleportMap() && itemData.getSpecialEffect() != 0)
                        CharacterFunctions.setPlayerPosition(chr, itemData.getTeleportX(), itemData.getTeleportY(), (short)itemData.getTeleportMap());
                    break;
                }
                case 1007: // reset skills
                {
                    chr.getSkills().resetAll();
                    chr.getSkillBar().getSkillBar().Clear();
                    break;
                }
                case 1011: // effect potions
                {
                    chr.setEffect((byte)itemData.getSpecialEffect());
                    break;
                }
                case 1012: // tae potion
                {
                    break;
                }
                case 1013: // faction change
                {
                    if(chr.getFaction() == 0)
                        return;

                    chr.setFaction(chr.getFaction() == 1 ? (byte)2 : (byte)1);
                    break;
                }
                case 1015: // chuk amulet
                {
                    determiner = BitConverter.ToInt32(p.ReadBytes(4), 0);
                    if(determiner == 0) return;
                    ItemData determinedItem = ItemDataCache.Instance.getItemData(determiner);
                    if(determinedItem == null || determinedItem.getCategory() != 1003 || (determiner < 212100146 && determiner > 212100164 && determiner != 212100185 && determiner != 212100187))
                    {
                        Console.WriteLine("I CAN'T TURN 10 INTO 20 CHICKENZ");
                        return;
                    }
                    CharacterFunctions.setPlayerPosition(chr, determinedItem.getTeleportX(), determinedItem.getTeleportY(), (short)determinedItem.getTeleportMap());
                    break;
                }
                case 1016: // karma amulet
                {
                    chr.setKarmaMessagingTimes((short)(chr.getKarmaMessagingTimes()+1));
                    break;
                }
                case 1020: // name changer
                {
                    p.Skip(4);
                    string charName = MiscFunctions.obscureString(p.ReadString(16));
                    if(charName.Length < 3 || Regex.Replace(charName, "[^A-Za-z0-9]+", "") != charName || MySQLTool.NameTaken(charName))
                    {
                        StaticPackets.sendSystemMessageToClient(chr.getAccount().mClient, 1, "Wrong input " + charName + ".");
                        return;
                    }

                    chr.setName(charName);
                    determined = charName;

                    CharacterFunctions.refreshCharacterForTheWorld(chr);
                    break;
                }
                case 1021: // face changer
                {
                    chr.setFace((byte)itemData.getSpecialEffect());
                    break;
                }
                case 1024:
                {
                    // yy..?
                    break;
                }
                case 1031: // red castle
                {
                    determiner = BitConverter.ToInt32(p.ReadBytes(4), 0);
                    if(determiner == 0) return;
                    ItemData determinedItem = ItemDataCache.Instance.getItemData(determiner);
                    if(determinedItem == null || determinedItem.getCategory() != 56 || ((determiner < 273001255 && determiner > 273001257) && determiner != 283000472 && determiner != 283000543 && determiner != 283000575 && determiner != 283000614 && determiner != 283000934 && determiner != 283001078 && determiner != 283001373 && determiner != 283001376))
                    {
                        Console.WriteLine("I CAN'T TURN 10 INTO 20 CHICKENZ");
                        return;
                    }
                    CharacterFunctions.setPlayerPosition(chr, determinedItem.getTeleportX(), determinedItem.getTeleportY(), (short)determinedItem.getTeleportMap());
                    break;
                }
                default:
                {
                    StaticPackets.sendSystemMessageToClient(chr.getAccount().mClient, 1, "Feature not implemented yet");
                    return;
                }
            }

            OutPacket op = new OutPacket(52);
            op.WriteInt(52);
            op.WriteShort(0x04);
            op.WriteShort(0x05);
            op.WriteInt(140328705);
            op.WriteInt(chr.getuID());
            op.WriteShort(0x01);
            op.WriteByte(0x01);
            op.WriteByte(usingIndex);
            op.WriteInt(item.getQuantity());
            op.WriteInt(793149441);
            op.WriteInt(/*determiner > 0 ? determiner : 0*/);
            op.WritePaddedString(determined, 17);
            op.WriteByte(0x90);
            op.WriteByte(0xd2);
            op.WriteByte(0x2a);
            c.WriteRawPacket(op.ToArray());

            OutPacket ops = new OutPacket(40);
            ops.WriteInt(40);
            ops.WriteShort(0x05);
            ops.WriteShort(0x05);
            ops.WriteInt(779458561);
            ops.WriteInt(chr.getuID());
            ops.WriteInt(item.getItemID());
            ops.WritePaddedString(determined, 17);
            ops.WriteByte(0x9e);
            ops.WriteByte(0x0f);
            ops.WriteByte(0xbf);
            WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), ops.ToArray());
        }
Esempio n. 30
0
        public static void initNPCsForCharacter(Character chr, List<NPC> npcs)
        {
            if(npcs.Count == 0)
                return;

            OutPacket all = new OutPacket((npcs.Count() * 589) + 30);
            all.WriteInt((npcs.Count() * 589) + 30);
            all.WriteShort(4);
            all.WriteShort(4);
            all.WriteByte(1);
            all.WriteInt(chr.getuID());
            all.WriteInt(chr.getArea().getaID());
            all.WriteFloat(chr.getPosition()[0]);
            all.WriteFloat(chr.getPosition()[1]);
            foreach(NPC npc in npcs)
            {
                all.WriteBytes(npc.npcSpawnChained(chr));
            }
            all.WriteByte();
            all.WriteInt(3560);
            chr.getAccount().mClient.WriteRawPacket(all.ToArray());

            Console.WriteLine("npc init package length: {0}", all.ToArray().Length);
        }