Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }