Ejemplo n.º 1
0
    private void SendMsg(X_GUID guid, int count)
    {
        CUseItem msg = new CUseItem();

        msg.bagid   = (int)EM_BAG_HASHTABLE_TYPE.EM_BAG_HASHTABLE_TYPE_COMMON;
        msg.itemkey = (int)guid.GUID_value;
        msg.num     = (short)count;
        IOControler.GetInstance().SendProtocol(msg);
    }
Ejemplo n.º 2
0
    public override void OnUseItem(int _count)
    {
        if (_count > m_Count)
        {
            return;
        }

        CUseItem msg = new CUseItem();

        msg.bagid   = (int)EM_BAG_HASHTABLE_TYPE.EM_BAG_HASHTABLE_TYPE_COMMON;
        msg.itemkey = (int)m_BaseGuid.GUID_value;
        msg.num     = (short)_count;
        IOControler.GetInstance().SendProtocol(msg);
    }
Ejemplo n.º 3
0
    protected override void DetectedItemAction()
    {
        if (!CanMove || IsUseItem || !m_movement.IsOnGround || InAction)
        {
            return;
        }

        if (!m_input.InputData.btnInputs[(int)InputIndex.B])
        {
            return;
        }

        CPlayerUnit player = m_unit as CPlayerUnit;

        if (player == null)
        {
            return;
        }
        CInventory inventory = player.Inventory;

        if (inventory == null)
        {
            return;
        }

        IsUseItem = true;
        m_anim.SetBool("IsUseItem", IsUseItem);

        CUseItem item = inventory.ItemUse(inventory.CurItemSelect) as CUseItem;
        int      nIdx = (int)UseAnimType.MAX;

        if (item == null)
        {
            m_anim.Play("Item" + nIdx);
            return;
        }

        nIdx = (int)item.UseAnimType;

        // 아이템 사용 번호에 따라 아이템 액션 변경 및 던지는 물체의 경우 발사체 소환
        m_anim.Play("Item" + nIdx);

        m_unit.CurUseItem = item;
    }
Ejemplo n.º 4
0
        public async Task CUseItem(GSSession session, CUseItem message)
        {
            var @char = session.Player.Character;
            var inv   = @char.Inventory;

            Logger.Debug("CUseItem {0} {1} {2}", message.Source, message.Dest, message.Type);

            var Source = inv.Get(message.Source);

            if (Source.BasicInfo.Skill != Spell.None)
            {
                if (await @char.Spells.TryAdd(Source.BasicInfo.Skill))
                {
                    await inv.Delete(message.Source);
                }
                @char.HPorSDChanged();
                return;
            }

            switch (Source.Number)
            {
            case 14 * 512 + 0:    // Apple
            case 14 * 512 + 1:    // Small HP Potion
            case 14 * 512 + 2:    // Medium HP Potion
            case 14 * 512 + 3:    // Big HP Potion
                var AddLife = (Source.SellPrice * 10) - (@char.Level * 2);
                if (AddLife < 0)
                {
                    AddLife = 0;
                }

                float AddLifeRate = ((Source.Number.Index + 1) * 10.0f) + (Source.Plus * 5.0f);
                AddLife += (long)(@char.MaxHealth * AddLifeRate / 100.0f);
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                @char.Health += AddLife;

                break;

            case 14 * 512 + 4:    // Small MP Potion
            case 14 * 512 + 5:    // Medium MP Potion
            case 14 * 512 + 6:    // Big MP Potion
                var AddMana = (Source.SellPrice * 10) - @char.Level;
                if (AddMana < 0)
                {
                    AddMana = 0;
                }

                float AddManaRate = ((Source.Number.Index - 3) * 10.0f) + (Source.Plus * 5.0f);
                AddMana += (uint)(@char.MaxMana * AddManaRate / 100.0f);
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                @char.Mana += AddMana;
                break;

            case 14 * 512 + 8:     // Antidote
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }
                await @char.Spells.DelBuff(SkillStates.Ice);

                await @char.Spells.DelBuff(SkillStates.Poison);

                break;

            case 14 * 512 + 46:     // Haloween Scroll
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                @char.Spells.SetBuff(SkillStates.HAttackSpeed, TimeSpan.FromMilliseconds(1800));
                break;

            case 14 * 512 + 47:     // Haloween Scroll
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                @char.Spells.SetBuff(SkillStates.HAttackPower, TimeSpan.FromMilliseconds(1800));
                break;

            case 14 * 512 + 48:     // Haloween Scroll
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                @char.Spells.SetBuff(SkillStates.HDefensePower, TimeSpan.FromMilliseconds(1800));
                break;

            case 14 * 512 + 49:     // Haloween Scroll
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                @char.Spells.SetBuff(SkillStates.HMaxLife, TimeSpan.FromMilliseconds(1800));
                break;

            case 14 * 512 + 50:     // Haloween Scroll
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                @char.Spells.SetBuff(SkillStates.HMaxMana, TimeSpan.FromMilliseconds(1800));
                break;

            case 14 * 512 + 10:     // Town Portal Scroll
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                if (@char.MapID == Maps.Davias)
                {
                    await @char.WarpTo(22);
                }
                else if (@char.MapID == Maps.Noria)
                {
                    await @char.WarpTo(27);
                }
                else if (@char.MapID == Maps.LostTower)
                {
                    await @char.WarpTo(42);
                }
                else if (@char.MapID == Maps.Atlans)
                {
                    await @char.WarpTo(49);
                }
                else if (@char.MapID == Maps.Tarkan)
                {
                    await @char.WarpTo(57);
                }
                else if (@char.MapID == Maps.BloodCastle1)
                {
                    await @char.WarpTo(22);
                }
                else if (@char.MapID == Maps.ChaosCastle1)
                {
                    await @char.WarpTo(22);
                }
                else if (@char.MapID == Maps.Kalima1)
                {
                    await @char.WarpTo(22);
                }
                else if (@char.MapID == Maps.Aida)
                {
                    await @char.WarpTo(27);
                }
                else if (@char.MapID == Maps.Crywolf)
                {
                    await @char.WarpTo(27);
                }
                else
                {
                    await @char.WarpTo(17);
                }
                break;

            case 14 * 512 + 9:     // Ale
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }
                break;

            case 14 * 512 + 20:     // Remedy Of Love
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                await session.SendAsync(new SItemUseSpecialTime { Number = 1, Time = 90 });

                break;

            case 14 * 512 + 7:     // Siege Potion
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                var SS   = Source.Plus == 0 ? SkillStates.PotionBless : SkillStates.PotionSoul;
                var time = TimeSpan.FromSeconds(Source.Plus == 0 ? 120 : 60);
                @char.Spells.SetBuff(SS, time);
                if (Source.Plus == 1)
                {
                    await session.SendAsync(new SItemUseSpecialTime { Number = 2, Time = 60 });
                }
                break;

            case 14 * 512 + 63:     // Fireworks
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }

                await session.SendAsync(new SCommand(ServerCommandType.Fireworks, (byte)@char.Position.X, (byte)@char.Position.Y));

                break;

            case 14 * 512 + 35:    // Small SD Potion
            case 14 * 512 + 36:    // Medium SD Potion
            case 14 * 512 + 37:    // Big SD Potion
                float addSDRate = @char.MaxShield * (25.0f + (Source.Number.Index - 35) * 10.0f) / 100.0f;

                @char.Shield += addSDRate;
                if (Source.Durability == 1)
                {
                    await inv.Delete(message.Source);
                }
                else
                {
                    Source.Durability--;
                }
                await session.SendAsync(new SEffect((ushort)session.ID, ClientEffect.RecoverShield));

                break;

            case 14 * 512 + 13:     //  Jewel of Bless
            {
                var Target = inv.Get(message.Dest);
                if (Target.Plus >= 7)
                {
                    break;
                }

                await inv.Delete(message.Source);

                Target.Plus++;
            }
            break;

            case 14 * 512 + 14:     //  Jewel of Soul
            {
                var Target = inv.Get(message.Dest);
                if (Target.Plus >= 9)
                {
                    break;
                }

                await inv.Delete(message.Source);

                var soulRate = 50 + (Target.Luck ? 25 : 0);
                if (new Random().Next(100) < soulRate)
                {
                    Target.Plus++;
                }
                else
                {
                    if (Target.Plus > 7)
                    {
                        Target.Plus = 0;
                    }
                    else
                    {
                        Target.Plus--;
                    }
                }
            }
            break;

            case 14 * 512 + 16:     // Jewel of Life
            {
                var Target = inv.Get(message.Dest);
                if (Target.Option28 >= 3)
                {
                    break;
                }

                if (!Target.BasicInfo.Option)
                {
                    break;
                }

                await inv.Delete(message.Source);

                var lifeRate = 50 + (Target.Luck ? 25 : 0);
                if (new Random().Next(100) < lifeRate)
                {
                    Target.Option28++;
                }
                else
                {
                    Target.Option28--;
                }
            }
            break;

            case 13 * 512 + 66:     //Invitation of the Santa Town's

                break;
            }
        }