public static void MHShop(MartialClient c, InPacket p) { byte[] decrypted = p.ReadBytes(80); int itemIdentificator = BitConverter.ToInt32(decrypted, 0); ShopItem shopItem = ItemShop.Instance.getShopItemData(itemIdentificator); if (shopItem == null) { Console.WriteLine("wrong id selected.."); return; } if (c.getAccount().MHPoints < shopItem.getPrice()) { Console.WriteLine("teh hacksorz.."); return; } Character chr = c.getAccount().activeCharacter; Console.WriteLine("si: {0} | {1} | {2} | {3}", itemIdentificator, shopItem.getItemID(), shopItem.getItemQuantity(), shopItem.getPrice()); OutPacket op = new OutPacket(156); op.WriteInt(156); op.WriteShort(0x04); op.WriteShort(0x4b); op.WriteInt(1); op.WriteInt(chr.getuID()); op.WriteInt(1); op.WriteRepeatedByte(1, 4); op.WriteRepeatedByte(1, 4); op.WriteInt(shopItem.getItemID()); op.WriteInt(shopItem.getItemQuantity()); op.WriteInt(shopItem.getItemID()); op.WriteInt(shopItem.getItemQuantity()); op.WriteInt(shopItem.getItemID()); op.WriteInt(shopItem.getItemQuantity()); op.WriteInt(shopItem.getItemID()); op.WriteInt(shopItem.getItemQuantity()); // item quantity op.WriteRepeatedByte(1, 112); //op.Position = 152; //c.getAccount().MHPoints -= shopItem.getPrice(); //op.WriteInt(shopItem.getPrice()); c.WriteRawPacket(op.ToArray()); Console.WriteLine(BitConverter.ToString(op.ToArray())); //TODO: Delivery items //System.Console.WriteLine("sent: {0}", System.BitConverter.ToString(op.ToArray())); }
protected override void OnDisconnected() { if (account != null) { if (account.characters != null) { CharacterFunctions.quitGameWorld(this); foreach (Character character in account.characters.Values) { character.Save(); } account.clearCharacters(); } } OutPacket wayToHell = new OutPacket(9); wayToHell.WriteInt(9); wayToHell.WriteShort(3); wayToHell.WriteRepeatedByte(6, 3); // just for lulz WriteRawPacket(wayToHell.ToArray()); if (m_processor != null) { Logger.WriteLog(Logger.LogTypes.Disconnect, "[{0}] Client {1} disconnected.", m_processor.Label, Label); m_deathAction(this); } }
public static void setPlayerPosition(Character chr, float goX, float goY, short map) { MartialClient c = chr.getAccount().mClient; Logger.WriteLog(Logger.LogTypes.Debug, goX + " | " + goY + " | " + map); Area lastArea = chr.getArea(); Area newArea = WMap.Instance.getGrid(map).getAreaByRound(goX, goY); if (newArea == null) { StaticPackets.sendSystemMessageToClient(chr.getAccount().mClient, 1, "The position " + goX + "|" + goY + "|" + map + " can't be reached."); Waypoint closestTown = TownCoordsCache.Instance.getClosestWaypointForMap(map, new Waypoint(goX, goY)); if (closestTown == null) { Area vvArea = WMap.Instance.getGrid(1).getAreaByRound(-1660, 2344); if (vvArea == null) { Logger.WriteLog(Logger.LogTypes.Error, "Pure setPlayerPosition error {0}|{1}|{2}", goX, goY, map); StaticPackets.sendSystemMessageToClient(chr.getAccount().mClient, 1, "We're sorry, but an hard error has occured. Please report it to an admin."); c.Close(); return; } else { goX = -1660; goY = 2344; map = 1; newArea = vvArea; } } else { goX = closestTown.getX(); goY = closestTown.getY(); newArea = WMap.Instance.getGrid(map).getAreaByRound(goX, goY); } } if (lastArea != null) { WMap.Instance.getGrid(chr.getMap()).sendTo3x3AreaLeave(chr, lastArea); lastArea.removeCharacter(chr); } if (newArea != null) { chr.setArea(newArea); } else { chr.getAccount().mClient.Close(); return; } newArea.addCharacter(chr); chr.setMap(map); chr.setPosition(new float[] { goX, goY }); OutPacket op = new OutPacket(5840); op.WriteInt(5824); op.WriteShort(4); // 4 - 5 op.WriteShort(1); // 6 - 7 op.WriteInt(1); // 8 - 11 op.WriteInt(chr.getuID()); // 12 - 15 op.WriteShort(1); // 16 - 19 op.WriteShort(1); // 16 - 19 op.WriteInt(chr.getMap()); // 20 - 23 op.WriteInt(DateTime.Now.Year - 2000); // 24 - 27 op.WriteByte((byte)DateTime.Now.Month); // 28 op.WriteByte(DateTime.Now.Day > 30 ? (byte)0x1e : (byte)DateTime.Now.Day); // 29 op.WriteInt(DateTime.Now.Hour); // 30 - 37 for (int i = 0; i < 120; i++) { if (chr.getCargo().getSeqSaved()[i] != -1 && chr.getCargo().getCargoSaved()[chr.getCargo().getSeqSaved()[i]] != null) { op.WriteInt(); op.WriteByte((byte)(chr.getCargo().getSeqSaved()[i] / 100)); op.WriteByte((byte)(chr.getCargo().getSeqSaved()[i] % 100)); Item item = chr.getCargo().getCargoSaved()[chr.getCargo().getSeqSaved()[i]]; op.WriteInt(item.getItemID()); ItemData itemData = ItemDataCache.Instance.getItemData(item.getItemID()); if (itemData.getTimeToExpire() > 0) { } op.WriteShort(item.getQuantity()); } else { op.WriteZero(12); } } // 38 - 1477 op.Position = 1476; for (int i = 0; i < chr.getCommunity().getFriendsList().Capacity; i++) { if (chr.getCommunity().getFriendsList().ElementAtOrDefault(i) != null) { op.WritePaddedString(chr.getCommunity().getFriendsList()[i], 17); } else { op.WriteZero(17); } } // 1476 - 1934 op.WriteRepeatedByte(0x58, 40); op.Position = 1986; for (int i = 0; i < chr.getCommunity().getIgnoresList().Capacity; i++) { if (chr.getCommunity().getIgnoresList().ElementAtOrDefault(i) != null) { op.WritePaddedString(chr.getCommunity().getIgnoresList()[i], 17); } else { op.WriteZero(17); } } // 1987 - 2157 op.WriteInt(363); // questsy op.WriteLong(); op.WriteLong(138769276674441706); op.WriteLong(21692910); op.WriteShort(); op.WriteShort(1); op.Position = 2248; for (byte i = 0; i < 240; i++) { if (chr.getInventory().getSeqSaved()[i] != -1 && chr.getInventory().getInvSaved()[chr.getInventory().getSeqSaved()[i]] != null) { op.WriteShort(); op.WriteByte((byte)(chr.getInventory().getSeqSaved()[i] / 100)); op.WriteByte((byte)(chr.getInventory().getSeqSaved()[i] % 100)); Item item = chr.getInventory().getInvSaved()[chr.getInventory().getSeqSaved()[i]]; op.WriteInt(item.getItemID()); op.WriteInt(item.getQuantity()); } else { op.WriteZero(12); } } // 2252 - 5133 op.WriteLong(chr.getCoin()); op.Position = 5140; for (byte i = 0; i < 21; i++) { if (chr.getSkillBar().getSkillBar().ContainsKey(i)) { int barID = chr.getSkillBar().getSkillBar()[i]; if (barID > 200000000) { op.WriteInt(1); } else if (barID > 511) { op.WriteInt(5); barID -= 512; } else if (barID > 255) { op.WriteInt(6); barID -= 256; } else { SkillData skill = SkillDataCache.Instance.getSkill(chr.getSkills().getLearnedSkills().ElementAtOrDefault(barID)); if (skill == null) { op.WriteInt(0); } else if (skill.getTypeSpecific() == 6) { op.WriteInt(3); } else if (skill.getTypeSpecific() == 7) { op.WriteInt(4); } else { op.WriteInt(2); } } op.WriteInt(barID); } else { op.WriteZero(8); } } // 5140 - 5299 op.Position = 5320; for (int i = 0; i < 60; i++) { if (chr.getSkills().getLearnedSkills().Count > i && chr.getSkills().getLearnedSkills()[i] != 0) { op.WriteInt(chr.getSkills().getLearnedSkills()[i]); op.WriteInt(SkillDataCache.Instance.getSkill(chr.getSkills().getLearnedSkills()[i]).getSkillPoints()); } else { op.WriteLong(); } } // 5320 - 5799 op.WriteFloat(chr.getPosition()[0]); op.WriteFloat(chr.getPosition()[1]); op.WriteInt(0x0c); op.WriteInt(140338688); op.WriteInt(); op.WriteShort(); op.WriteShort(10962); //s3c0nd p4ck3t op.WriteInt(16); op.WriteInt(7929861); op.WriteInt(chr.getuID()); c.WriteRawPacket(op.ToArray()); WMap.Instance.getGrid(chr.getMap()).sendTo3x3AreaSpawn(chr, chr.getArea()); }