public static void UpdateAvatar(Client gc) { var chr = gc.Character; Map map = MapFactory.GetMap(chr.MapX, chr.MapY); InventoryPacket.getInvenEquip(gc); StatusPacket.getStatusInfo(gc); foreach (Character All in map.Characters) { InventoryPacket.getAvatar(All.Client, chr); } }
public static void PickupItem(InPacket lea, Client gc) { int OriginalID = lea.ReadInt(); int ItemID = lea.ReadInt(); lea.ReadInt(); var chr = gc.Character; Map Map = MapFactory.GetMap(chr.MapX, chr.MapY); // 撿取靈魂 if (ItemID >= 9900001 && ItemID <= 9900004) { if (Map.getDropByOriginalID(OriginalID) == null) { return; } switch (ItemID) { case 9900001: // Blue chr.Mp += (short)(chr.MaxMp * 0.2); if (chr.Mp > chr.MaxMp) { chr.Mp = chr.MaxMp; } break; case 9900002: // Green chr.Mp += (short)(chr.MaxMp * 0.4); if (chr.Mp > chr.MaxMp) { chr.Mp = chr.MaxMp; } break; case 9900003: // Red int rnd = Randomizer.Next(3, 7); chr.Fury += (short)(chr.MaxFury / 100 * rnd); if (chr.Fury > chr.MaxFury) { chr.Fury = chr.MaxFury; } break; case 9900004: // Purple if (chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Seal] != null) { chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Seal].Spirit++; InventoryPacket.getInvenEquip(gc); } break; } StatusPacket.UpdateHpMp(gc, chr.Hp, chr.Mp, chr.Fury, chr.MaxFury); foreach (Character All in Map.Characters) { InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID); } return; } // 撿取錢 if (ItemID >= 9800001 && ItemID <= 9800005) { if (Map.getDropByOriginalID(OriginalID) == null) { return; } chr.Money += Map.getDropByOriginalID(OriginalID).Quantity; InventoryPacket.getInvenMoney(gc, chr.Money, Map.getDropByOriginalID(OriginalID).Quantity); foreach (Character All in Map.Characters) { InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID); } return; } if (!Map.Item.ContainsKey(OriginalID)) { return; } byte Type = InventoryType.getItemType(ItemID); Item finditem = null; foreach (Item it in gc.Character.Items) { if (it.ItemID == ItemID) { finditem = it; } } if (((Type == (byte)InventoryType.ItemType.Spend3) || (Type == (byte)InventoryType.ItemType.Other4)) && (finditem != null) && (finditem.Quantity + Map.getDropByOriginalID(OriginalID).Quantity) <= 100) { // 合併消費物品跟其他物品 chr.Items[(InventoryType.ItemType)finditem.Type, finditem.Slot].Quantity += Map.getDropByOriginalID(OriginalID).Quantity; } else { byte Slot = gc.Character.Items.GetNextFreeSlot((InventoryType.ItemType)Type); Item oItem = new Item(ItemID, Type, Slot, Map.getDropByOriginalID(OriginalID).Quantity); chr.Items.Add(oItem); } foreach (Character All in Map.Characters) { InventoryPacket.ClearDropItem(All.Client, chr.CharacterID, OriginalID, ItemID); } Map.Item.Remove(OriginalID); UpdateInventory(gc, Type); }
public static void Game_Log_Req(InPacket lea, Client gc) { //int re = SearchBytes(lea.Content, new byte[] { 0x0 }); string[] data = lea.ReadString(0x100 /*re*/).Split(new[] { (char)0x20 }, StringSplitOptions.None); int encryptKey = int.Parse(data[1]); string username = data[2]; string password = data[4]; int selectCharacter = lea.ReadByte(); IPAddress hostid = lea.ReadIPAddress(); gc.SetAccount(new Account(gc)); try { gc.Account.Load(username); //var pe = new PasswordEncrypt(encryptKey); //string encryptPassword = pe.encrypt(gc.Account.Password, gc.RetryLoginCount > 0 ? password.ToCharArray() : null); if (password.Equals(gc.Account.Password)) { gc.Dispose(); Log.Error("Login Fail!"); } else { gc.Account.Characters = new List <Character>(); foreach (dynamic datum in new Datums("Characters").PopulateWith("id", "accountId = '{0}' ORDER BY position ASC", gc.Account.ID)) { Character character = new Character(datum.id, gc); character.Load(false); character.IP = hostid; gc.Account.Characters.Add(character); } gc.SetCharacter(gc.Account.Characters[selectCharacter]); } Log.Inform("Password = {0}", password); //Log.Inform("encryptKey = {0}", encryptKey); //Log.Inform("encryptPassword = {0}", encryptPassword); } catch (NoAccountException) { gc.Dispose(); Log.Error("Login Fail!"); } Character chr = gc.Character; chr.CharacterID = gc.CharacterID; MapFactory.AllCharacters.Add(chr); StatusPacket.UpdateHpMp(gc, 0, 0, 0, 0); GamePacket.FW_DISCOUNTFACTION(gc); StatusPacket.getStatusInfo(gc); InventoryPacket.getCharacterEquip(gc); SkillPacket.getSkillInfo(gc, chr.Skills.getSkills()); QuestPacket.getQuestInfo(gc, chr.Quests.getQuests()); GamePacket.getQuickSlot(gc, chr.Keymap); StoragePacket.getStoreInfo(gc); StoragePacket.getStoreMoney(gc); MapPacket.enterMapStart(gc); InventoryPacket.getInvenCash(gc); CashShopPacket.MgameCash(gc); CashShopPacket.GuiHonCash(gc); InventoryPacket.getInvenEquip(gc); InventoryPacket.getInvenEquip1(gc); InventoryPacket.getInvenEquip2(gc); InventoryPacket.getInvenSpend3(gc); InventoryPacket.getInvenOther4(gc); InventoryPacket.getInvenPet5(gc); }