public static void AttackDefendState(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked playerState with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; OutPacket op = new OutPacket(24); op.WriteInt(24); op.WriteShort(0x05); op.WriteShort(0x06); op.WriteByte(0x01); op.WriteByte(0x33); op.WriteByte(0x15); op.WriteByte(0x08); op.WriteInt(chr.getuID()); op.WriteShort(p.ReadByte()); op.WriteByte(0x10); op.WriteByte(0x29); WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), op.ToArray()); }
public static void LauncherValidate(MartialClient c, InPacket p) { byte pinLength = p.ReadByte(); byte uNameLength = p.ReadByte(); byte passWLength = p.ReadByte(); p.ReadByte(); string pin = MiscFunctions.obscureString(p.ReadString(4)); string uN = MiscFunctions.obscureString(p.ReadString(16)); string pW = MiscFunctions.obscureString(p.ReadString(12)); Account account = new Account(); if(account.Load(uN, pW, pin) != Account.AccountLoadErrors.Success) { c.WriteRawPacket(Constants.accDoesntExist); Logger.WriteLog(Logger.LogTypes.HEmi, "Authorization error for [{0} | {1} | {2}]", uN, pW, pin); c.Close(); return; } Logger.WriteLog(Logger.LogTypes.HEmi, "User passed authorization [{0} | {1} | {2}]", uN, pW, pin); account.mClient = c; c.setAccount(account); account.LoadCharacters(); if(c.getAccount().characters.Count() > 0) { c.WriteRawPacket(LoginPacketCreator.initCharacters(c.getAccount(), false).Concat(Constants.emptyAccount).ToArray()); } c.WriteRawPacket(Constants.emptyAccount); c.WriteRawPacket(LoginPacketCreator.initAccount(c.getAccount())); }
public static void SendMessage(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook SendMessage handling while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; int messageType = p.ReadInt(); // identifier of message type maybe? string receiver = p.ReadString(20); // receiver name MiscFunctions.obscureString(receiver); if(!MySQLTool.NameTaken(receiver)) { return; } int messageLength = p.ReadInt(); // message length string message = p.ReadString(messageLength); MiscFunctions.obscureString(message); OutPacket op = new OutPacket(20); op.WriteInt(20); op.WriteShort(4); op.WriteShort(0x53); op.WriteInt(718349825); op.WriteInt(chr.getuID()); op.WriteInt(-1089732352); c.WriteRawPacket(op.ToArray()); }
public static void HandleFriends(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook HandleFriends while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte managementType = p.ReadByte(); byte communityIndex = p.ReadByte(); string personName = MiscFunctions.obscureString(p.ReadString(16)); Community com = chr.getCommunity(); switch(managementType) { case 0: case 1: { if(!com.addPersona(managementType, communityIndex, personName)) { StaticPackets.sendSystemMessageToClient(c, 1, "Sorry. Something went wrong!"); return; } break; } case 2: case 3: { if(!com.removePersona((byte)(managementType - 2), communityIndex)) { StaticPackets.sendSystemMessageToClient(c, 1, "Sorry. Something went wrong!"); return; } break; } default: { //tuffnucks you! return; } } OutPacket op = new OutPacket(40); op.WriteInt(40); op.WriteShort(0x04); op.WriteShort(0x31); op.WriteInt(134652417); op.WriteInt(chr.getuID()); op.WriteShort(1); op.WriteByte(managementType); op.WriteByte(communityIndex); op.WritePaddedString(personName, 16); op.WriteInt(-1089495552); c.WriteRawPacket(op.ToArray()); }
public static void MoveFromInv(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook cargo -> inv while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte managementType = p.ReadByte(); byte fromInvIndex = p.ReadByte(); byte toCargoSlot = p.ReadByte(); byte toCargoLine = p.ReadByte(); byte toCargoRow = p.ReadByte(); Cargo cargo = chr.getCargo(); Console.WriteLine("Cargo > {0} | {1} | {2} | {3} | {4}", managementType, fromInvIndex, toCargoSlot, toCargoLine, toCargoRow); if(!cargo.insertItemFromInventory(chr.getInventory(), fromInvIndex, toCargoRow, toCargoLine)) { Console.WriteLine("da fuaaark"); return; } OutPacket op = new OutPacket(24); op.WriteInt(24); op.WriteShort(4); op.WriteShort(44); op.WriteInt(1); op.WriteInt(chr.getuID()); op.WriteShort(1); op.WriteByte(managementType); op.WriteByte(fromInvIndex); op.WriteByte(toCargoSlot); op.WriteByte(toCargoLine); op.WriteByte(toCargoRow); op.WriteByte(42); c.WriteRawPacket(op.ToArray()); }
public static void Move(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook cargo movement while not being ingame."); c.Close(); return; } byte fromCargoIndex = p.ReadByte(); short unknownMovement = p.ReadShort(); byte toCargoSlot = p.ReadByte(); byte toCargoLine = p.ReadByte(); byte toCargoRow = p.ReadByte(); Character chr = c.getAccount().activeCharacter; Cargo cargo = chr.getCargo(); Console.WriteLine("Cargo > {0} | {1} | {2} | {3}", fromCargoIndex, toCargoSlot, toCargoLine, toCargoRow); if(!cargo.moveItem(fromCargoIndex, toCargoSlot, toCargoRow, toCargoLine)) { Console.WriteLine("problem with move item"); return; } OutPacket op = new OutPacket(24); op.WriteInt(24); op.WriteShort(4); op.WriteShort(46); op.WriteInt(1); op.WriteInt(chr.getuID()); op.WriteShort(1); op.WriteByte(fromCargoIndex); op.WriteShort(unknownMovement); op.WriteByte(toCargoSlot); op.WriteByte(toCargoLine); op.WriteByte(toCargoRow); c.WriteRawPacket(op.ToArray()); }
public static void CreateGuild(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked guild.Refresh with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; Guild guild = chr.getGuild(); byte managementType = p.ReadByte(); // 0 - disband; 1 - create; 2 - donate; 3 - hat byte managementArg = p.ReadByte(); // 1 - bang, 2 - mun, 3 - pa, 4 - nohing, 5 - dan, 6 - gak, 7 - gyo, 8 - gung string managementName = MiscFunctions.obscureString(p.ReadString(18)); switch(managementType) { case 0: { if(guild == null) { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guild disband with char that ain't in guild"); c.Close(); return; } guild.Delete(); WMap.Instance.removeGuild(guild); foreach(GuildMember i in guild.guildMembers) { Character tmp = i.getOnlineCharacter(); tmp.getAccount().mClient.WriteRawPacket(GuildPackets.quitGuildForInternal(tmp)); WMap.Instance.getGrid(tmp.getMap()).sendTo3x3Area(tmp, tmp.getArea(), GuildPackets.quitGuildForExternals(tmp)); tmp.setGuild(null); i.setOnlineCharacter(null); } return; } case 1: { if(guild != null) { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guild create with char that is in guild"); c.Close(); return; } Guild newGuild = new Guild(managementArg, managementName); c.WriteRawPacket(GuildPackets.createGuildResponse(chr, managementType, managementArg, managementName)); WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), GuildPackets.extCharGuild(chr)); return; } case 2: { if(guild == null) { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guild donate with char that ain't in guild"); c.Close(); return; } return; } case 3: { if(guild == null) { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guild hat change with char that ain't in guild"); c.Close(); return; } guild.guildHat = managementArg; WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), GuildPackets.extCharGuild(chr)); c.WriteRawPacket(GuildPackets.refreshGuild(chr)); return; } } return; }
public static void Refresh(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked guild.Refresh with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; OutPacket op = new OutPacket(40); op.WriteInt(40); op.WriteShort(5); op.WriteShort(0x41); op.WriteInt(1); op.WriteShort(13413); c.WriteRawPacket(op.ToArray()); op = new OutPacket(32); op.WriteInt(32); op.WriteShort(4); op.WriteShort(97); op.WriteInt(1); op.WriteShort(-15349); op.WriteShort((short)chr.getuID()); op.WriteLong(); op.WriteLong(); c.WriteRawPacket(op.ToArray()); op = new OutPacket(136); op.WriteInt(136); op.WriteShort(4); op.WriteShort(81); op.WriteInt(1); op.WriteShort(-15349); op.WriteShort((short)chr.getuID()); op.WriteShort(1); op.WriteShort(30726); op.WriteString("PolishPoverty"); c.WriteRawPacket(op.ToArray()); op = new OutPacket(20); op.WriteInt(20); op.WriteInt(5); op.WriteInt(937683714); // those values.. lelellele op.WriteInt(680); op.WriteInt(939117056); c.WriteRawPacket(op.ToArray()); }
public static void UpdateNews(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked guild.Refresh with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; if(chr.getGuild() == null) { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guild news with char that ain't in guild"); c.Close(); return; } Guild guild = chr.getGuild(); if(chr.getGuild() == null) { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guild news with char that ain't in guild"); c.Close(); return; } GuildMember gMember = guild.findGuildMember(chr.getuID()); if(gMember.getGuildRank() < 4) // aint master? { Logger.LogCheat(Logger.HackTypes.Guild, c, "Hooked guildManagement with char that ain't a guild master"); c.Close(); return; } string news = MiscFunctions.obscureString(p.ReadString(195)); guild.guildNews = news; guild.sendToGuildMembers(GuildPackets.getRefreshNewsGuildPacket(news)); }
public static void Ping(MartialClient c, InPacket p) { c.WriteRawPacket(new byte[0]); }
public static void DeclareWar(MartialClient c, InPacket p) { return; }
public static void UpgradeItem(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook upgradeItem while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte[] decrypted = p.ReadBytes(10); byte oldItemIndex = decrypted[8]; byte upgraderIndex = decrypted[9]; Inventory inv=chr.getInventory(); inv.updateInv(); List<int> seq = new List<int>(inv.getSeqSaved()); Dictionary<int, Item> items = new Dictionary<int, Item>(inv.getInvSaved()); int oldItemHash = seq[oldItemIndex]; int upgraderHash = seq[upgraderIndex]; if(oldItemHash == -1 || upgraderHash == -1) { Console.WriteLine("can't upgrade items.. cause they don't exist o.o"); return; } Item oldItem = items[oldItemHash]; if(oldItem == null) { Console.WriteLine("Tried to use not existing item.."); return; } if(oldItem.getQuantity() > 1) { Console.WriteLine("wtf.."); return; } Item upgrader = items[upgraderHash]; if(upgrader == null) { Console.WriteLine("Tried to use not existing item.."); return; } Upgrade upgrade = Upgrades.Instance.getUpgradeClasse(oldItem.getItemID(), upgrader.getItemID()); if(upgrade == null) { Console.WriteLine("not found dla {0} | {1}", oldItem.getItemID(), upgrader.getItemID()); return; } else Console.WriteLine("znaleziony upgrade: {0} | {1}", upgrade.getOldit(), upgrade.getNewit()); //if(!SkillMaster.canUpgrade(chr, upgrade.getUpgradeskill())){ // throw new InventoryException("Cannot upgrade item [your upgrade lvl is too low]"); //} byte newItemIndex = 0; int newItemHash = -1; //change item oldItem.setItemID(upgrade.getNewit()); oldItem.setQuantity(1); //position of new item newItemIndex=oldItemIndex; newItemHash = oldItemHash; //remove upgrader inv.removeItem(upgraderIndex, 1); if(inv.getSeq()[upgraderIndex] == -1) { Console.WriteLine("usuwamy itemek"); c.WriteRawPacket(StaticPackets.getInventoryDeletePacket(chr, upgraderIndex, 1)); } else Console.WriteLine("co kurwa"); inv.saveInv(); c.WriteRawPacket(StaticPackets.getUpgradePacket(chr, oldItem, newItemIndex, newItemHash)); }
public static void SellToNPC(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook sellToNPC while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte[] decrypted = p.ReadBytes(9); Item item = new Item(); if(!chr.getInventory().sellItem(decrypted[5], decrypted[8], item)) { Console.WriteLine("sell to npc teh problemz"); return; } if(payedItems.Contains(item.getItemID())) { ItemData itemData = ItemDataCache.Instance.getItemData(item.getItemID()); int itemPrice = itemData.getNpcPrice() * decrypted[8]; chr.setCoin(chr.getCoin() + itemPrice); } OutPacket op = new OutPacket(32); op.WriteInt(32); op.WriteShort(0x04); op.WriteShort(0x14); op.WriteInt(0x01); op.WriteInt(chr.getuID()); op.WriteShort(0x01); op.WriteByte(0x01); op.WriteByte(decrypted[5]); op.WriteInt(decrypted[8]); op.WriteLong(chr.getCoin()); c.WriteRawPacket(op.ToArray()); }
public static void UnknownStatimizer(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked playerState with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; OutPacket op = new OutPacket(24); op.WriteInt(24); op.WriteShort(4); op.WriteShort(47); op.WriteInt(1); op.WriteInt(chr.getuID()); op.WriteByte(); op.WriteByte(); op.WriteByte(1); op.WriteByte(); op.WriteByte(); op.WriteByte(); op.WriteByte(); op.WriteByte(); // ok, there's some magic on those bytes, for ex. 3rd byte tells you, if you're able to trade in wild zone chr.getAccount().mClient.WriteRawPacket(op.ToArray()); }
// 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()); }
public static void Fury(MartialClient c, InPacket p) { return; }
public static void UseItem(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook useItem while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; p.Skip(1); byte usingIndex = p.ReadByte(); Item item = chr.getInventory().getItemBySeqIndexing(usingIndex); if(item == null) { Logger.LogCheat(Logger.HackTypes.Items, c, "Tried to use not existing item."); return; } ItemData itemData = ItemDataCache.Instance.getItemData(item.getItemID()); if(!itemData.getClassUsable()[chr.getcClass() - 1]) { Console.WriteLine("not for teh class.."); return; } if(itemData.getMinLvl() > chr.getLevel() || itemData.getMaxLvl() < chr.getLevel()) { Console.WriteLine("not for yar level.."); return; } if(itemData.getFaction() != 0 && chr.getFaction() != itemData.getFaction()) { Console.WriteLine("not for yah faction.."); return; } p.Skip(2); MainItemUsage.useItem(chr, item, usingIndex, p); }
public static void RefreshFriends(MartialClient c, InPacket p) { }
public static void ViewInventory(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked viewInventory with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; OutPacket op = new OutPacket(28); op.WriteInt(28); op.WriteShort(0x04); op.WriteShort(0x1e); op.WriteInt(0x01); op.WriteInt(chr.getuID()); op.WriteShort(0x01); op.WriteByte(0xf8); op.WriteByte(0x01); p.Skip(4); op.WriteBytes(p.ReadBytes(4)); op.WriteByte(0x9e); op.WriteByte(0x0f); op.WriteByte(0xbf); c.WriteRawPacket(op.ToArray()); }
public static void MoveToInv(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook cargo -> inv while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte fromCargoIndex = p.ReadByte(); byte toInvSlot = p.ReadByte(); byte toInvLine = p.ReadByte(); byte toInvRow = p.ReadByte(); Cargo cargo = chr.getCargo(); Inventory inv = chr.getInventory(); Console.WriteLine("Cargo > {0} | {1} | {2} | {3}", fromCargoIndex, toInvSlot, toInvLine, toInvRow); cargo.updateCargo(); if(!cargo.getCargoSaved().ContainsKey((byte)fromCargoIndex)) { Console.WriteLine("Cannot moveItemToInv [item missing]"); return; } Item itemF = cargo.getCargoSaved()[(byte)fromCargoIndex]; if(!inv.moveFromCargo(itemF, fromCargoIndex, toInvRow, toInvLine)) { StaticPackets.sendSystemMessageToClient(c, 1, "do kurwy nendzy"); return; } cargo.saveCargo(); OutPacket op = new OutPacket(24); op.WriteInt(24); op.WriteShort(4); op.WriteShort(45); op.WriteInt(1); op.WriteInt(chr.getuID()); op.WriteShort(1); op.WriteByte(fromCargoIndex); op.WriteByte(toInvSlot); op.WriteByte(toInvLine); op.WriteByte(toInvRow); op.WriteShort(-16625); c.WriteRawPacket(op.ToArray()); }
public static void StateVending(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook openVending while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte stateType = p.ReadByte(); string shopName = p.ReadString(30); if(stateType == 1) { if(chr.getVending() != null) { Console.WriteLine("u already have teh vending biach"); return; } chr.setVending(new Vending(chr, shopName)); c.WriteRawPacket(VendingPackets.createVendorFrame(chr, 1, shopName)); if(chr.getMap() == 1) { WMap.Instance.getGrid(1).addToVendings(chr); } } else { chr.getVending().deleteVendor(); chr.setVending(null); c.WriteRawPacket(VendingPackets.createVendorFrame(chr, 0)); } WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), VendingPackets.getExtVending(chr)); }
public static void BuyFromVending(MartialClient c, InPacket p) { }
public static void Movement(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked Movement with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; p.Skip(4); byte[] locationToX = p.ReadBytes(4); byte[] locationToY = p.ReadBytes(4); p.Skip(1); byte movingMode = p.ReadByte(); MoveCharacterPacket.HandleMovement(chr, locationToX, locationToY, movingMode); }
public static void CastSkill(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook cast skill while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte skillBarNumber = p.ReadByte(); byte skillActivationType = p.ReadByte(); p.Skip(14); byte chartargets = p.ReadByte(); p.Skip(1); byte mobtargets = p.ReadByte(); if((chartargets + mobtargets) > 8) return; p.Skip(1); int[] targetIds = new int[chartargets + mobtargets]; for(int i = 0;i < targetIds.Length;i++) { targetIds[i] = p.ReadInt(); } System.Console.WriteLine("{0} | {1} | {2} | {3} | {4}", skillBarNumber, skillActivationType, chartargets, mobtargets, string.Join(",", targetIds)); //skillpckt1 is a packet of skilleffects e.g. buffs byte[] skillpckt1 = SkillPackets.getSkillEffectOnCharPacket(chr); //skillpckt2 is a packet of skill activation, different IDs and DMG byte[] skillpckt2 = new byte[52]; //just for medi and turbo byte[] skillpckt3 = new byte[28]; //SkillID byte[] skillid; int skillIDInt = SkillDataCache.Instance.getSkillIDFromCast(chr, (byte)(skillBarNumber)); int skillidNoFake = skillIDInt; skillid = BitTools.intToByteArray(skillIDInt); //SkillMaster.canCastSkill(cur, skillidInt); SkillData skill = SkillDataCache.Instance.getSkill(skillIDInt); if(skill == null) { System.Console.WriteLine("Skill was null"); return; } if(skill.getTargets() < chartargets + mobtargets) { System.Console.WriteLine("tried to hit moar than poss"); return; } //TURBO AND MEDI if(skill.getTypeSpecific() == 6 || skill.getTypeSpecific() == 7) { if(skill.getTypeSpecific() == 6) { skillpckt3 = SkillPackets.getMediPacket(chr, skillIDInt, skillActivationType); } else { skillpckt3 = SkillPackets.getTurboPacket(chr, skillIDInt, skillActivationType == (byte)0xc8); //if(skillActivationType == (byte)0xc8) chr.setTurboSpeed(((CastableSkill)skill).getSpeed()); //else chr.setTurboSpeed(0); } c.WriteRawPacket(skillpckt3); WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), skillpckt3); return; } //TARGETS int targets = chartargets + mobtargets; //COSTS chr.setCurHP(chr.getCurHP() - skill.getHealCost()); chr.setCurMP((short)(chr.getCurMP() - skill.getManaCost())); chr.setCurSP((short)(chr.getCurSP() - skill.getStaminaCost())); Fightable target; //GET MAXIMUM CASTERS DMG int dmgInt = SkillDataCache.Instance.skillCastDmgCalculations(chr, skillIDInt); int totalDmg; int dmgType; //GET MAIN SKILL PACKET skillpckt2 = SkillPackets.getCastSkillPacket(chr, targets, skillidNoFake, skillActivationType); //ADD TARGET STUFF TO THE PACKET for(int aoe = 0;aoe < targets;aoe++) { //GET TARGET byte[] targetByteB = BitTools.intToByteArray(targetIds[aoe]); target = WMap.Instance.getGrid(chr.getMap()).getFightableNear(chr.getArea(), BitTools.byteArrayToInt(targetByteB)); if(target == null) continue; //check for distance //canCastToTarget((Location)chr, (Location)target); totalDmg = dmgInt; //DECREASE DMG BY DEF dmgType = SkillDataCache.Instance.skillCastDmgTypeCalculations(chr, target, skill.getTypeSpecific() == 2); totalDmg -= target.getDef(); //CRIT if(dmgType == 2 || dmgType == 5) totalDmg += chr.getCritDmg(); //DMG TYPE FACTOR totalDmg *= (int)(SkillDataCache.Instance.getDmgFactorByType(dmgType) * SkillDataCache.Instance.getDmgFactorByClass(chr)); if(totalDmg < 0) totalDmg = 0; //ATK THE TARGET FINALLY target.recDamage(chr.getuID(), totalDmg); int targetId = BitTools.byteArrayToInt(targetByteB); //COMPLETE THE TARGET IN THE PACKAGE skillpckt2 = SkillPackets.completeCastSkillPacket(skillpckt2, aoe, targetId, target.getCurHP(), target.getCurMP(), -totalDmg, chartargets, dmgType); if(chartargets > 0) chartargets--; } //send skill packet to other players WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), skillpckt2); //send skill packet to client c.WriteRawPacket(skillpckt2); //effects on char c.WriteRawPacket(skillpckt1); return; }
public static void ToggleMutationEffect(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked toggleMutationEffect with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte toggleType = p.ReadByte(); OutPacket op = new OutPacket(20); op.WriteInt(20); op.WriteShort(0x05); op.WriteShort(0X7c); op.WriteInt(140235265); op.WriteInt(chr.getuID()); op.WriteInt(toggleType == 0 ? 716251136 : 716251314); WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr.getArea(), op.ToArray()); }
public static void LearnSkill(MartialClient c, InPacket p) { Character chr = c.getAccount().activeCharacter; byte[] skillNumber = p.ReadBytes(4); byte[] skillId = p.ReadBytes(4); int skillNumberInt = BitTools.byteArrayToInt(skillNumber); int skillIdInt = BitTools.byteArrayToInt(skillId); if(!SkillDataCache.Instance.canLearnSkill(chr, skillIdInt)) { StaticPackets.sendSystemMessageToClient(c, 1, "You can't learn this skill! [" + skillIdInt + "]"); return; } chr.getSkills().learnSkill(skillIdInt, true); byte[] learnskill = SkillPackets.getLearnSkillPacket(chr, skillIdInt, skillNumberInt); c.WriteRawPacket(learnskill); }
public static void Chat(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Hooked chat with null of activeCharacter"); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte messageType = (byte)p.ReadShort(); string receiver = MiscFunctions.obscureString(p.ReadString(17)); byte messageLength = (byte)p.ReadInt(); if(messageLength > 65) { Logger.LogCheat(Logger.HackTypes.Chat, c, "Tried to send a message of size {0}", messageLength); c.Close(); return; } string message = p.ReadString(messageLength); switch(messageType) { case 0: WMap.Instance.getGrid(chr.getMap()).sendTo3x3Area(chr, chr.getArea(), StaticPackets.chatRelay(chr, messageType, message)); break; case 1: { if(receiver == null) return; Character player = WMap.Instance.findPlayerByName(receiver); if(player == null) { chr.getAccount().mClient.WriteRawPacket(StaticPackets.playerIsntConnected(chr)); break; } player.getAccount().mClient.WriteRawPacket(StaticPackets.chatRelay(chr, messageType, message)); break; } case 6: // karma notice { if(chr.getKarmaMessagingTimes() == 0) { } WMap.Instance.sendToAllCharactersExcept(chr, StaticPackets.chatRelay(chr, messageType, message)); break; } case 7: // "GM Shout" { if(chr.getAccount().gmLvl == 0 && chr.getGMShoutMessagingCounts() == 0) { } WMap.Instance.sendToAllCharactersExcept(chr, StaticPackets.chatRelay(chr, messageType, message)); break; } case 9: // admin commands { string[] cmd = Regex.Split(message, " "); if(chr.getAccount().gmLvl == 0) { Logger.LogCheat(Logger.HackTypes.Chat, c, "Tried to parse GM Command {0}", cmd[0]); c.Close(); break; } if(cmd.Length == 0) { Logger.LogCheat(Logger.HackTypes.Chat, c, "Tried to parse null GM Command"); c.Close(); break; } if(cmd[0][0] != '/') { Logger.LogCheat(Logger.HackTypes.Chat, c, "Tried to parse command without '/' slash"); c.Close(); break; } CommandProcessor.ParseCommand(c, cmd); break; } default: { break; } } }
public static void ShortcutBar(MartialClient c, InPacket p) { if(c.getAccount().activeCharacter == null) { Logger.LogCheat(Logger.HackTypes.NullActive, c, "Attempted to hook bar skill while not being ingame."); c.Close(); return; } Character chr = c.getAccount().activeCharacter; byte barIndex = p.ReadByte(); byte actionID = p.ReadByte(); p.Skip(2); int thingID = p.ReadInt(); OutPacket op = new OutPacket(24); op.WriteInt(24); op.WriteShort(4); op.WriteShort(17); op.WriteInt(135595521); op.WriteInt(chr.getuID()); op.WriteShort(1); op.WriteByte(barIndex); op.WriteByte(actionID); op.WriteInt(thingID); if(actionID >= 1 && actionID <= 4) { chr.getSkillBar().addToSkillBar(barIndex, thingID); } else if(actionID == 6) { chr.getSkillBar().addToSkillBar(barIndex, thingID + 256); } else if(actionID == 0) { chr.getSkillBar().removeFromSkillBar(barIndex); } else if(actionID == 5) { chr.getSkillBar().addToSkillBar(barIndex, thingID + 512); } c.WriteRawPacket(op.ToArray()); }
protected override void OnPacket(byte[] packet) { Console.WriteLine(BitConverter.ToString(packet)); using (InPacket p = new InPacket(packet)) { short opcode = 0; if(packet.Length >= 4) { opcode = (short)((int)((packet[0] & 0xFF) * 666) + (int)(packet[2] & 0xFF)); if(packet[3] != 0x00) opcode = 1; } if(m_processor == null) return; PacketHandler handler = null; handler = m_processor[opcode]; if (handler != null) { p.Skip(4); handler(this, p); } else { Logger.WriteLog(Logger.LogTypes.Warning, "[{0}] Unhandled packet from {1}: {2}.", m_processor.Label, Label, opcode); } } }
public static void InvalidVersion(MartialClient c, InPacket p) { c.WriteRawPacket(Constants.authFail); c.Close(); return; }