예제 #1
0
 //脱掉一件物品.
 public void UnEquipItem(InventoryItem item)
 {
     ItemDatas.ItemDatas unit = item.Info();
     if (unit != null)
     {
     }
 }
예제 #2
0
    public InventoryItem EquipItems(InventoryItem item)
    {
        InventoryItem itemUnEquip = null;

        ItemDatas.ItemDatas unit = item.Info();


        if (unit != null)
        {
            HpMax += unit.HP;
            MpMax += unit.MP;
            hpCur += unit.HP;
            mpCur += unit.MP;
            Speed += unit.Speed;
            if (Speed > 2500)
            {
                Speed = 2500;
            }
            Crit += unit.Crit;
            if (item != null && item.extra != null && unit.Quality != 0)
            {
                //减去额外属性.
                HpMax += item.extra.Hp;
                hpCur += item.extra.Hp;
                MpMax += item.extra.Mp;
                mpCur += item.extra.Mp;
                Speed += item.extra.Speed;
                Crit  += item.extra.Crit;
            }
        }

        return(itemUnEquip);
    }
예제 #3
0
    public void Drop(MeteorUnit player)
    {
        //player.Attr;
        //List<GameObject> obj = new List<GameObject>();
        //一定爆出角色主武器,有Flag爆出Flag,并且这个Flag,会持续一定时间,若无人拾取,则会重置Flag归位.
        int mainWeapon = player.Attr.Weapon;

        ItemDatas.ItemDatas     ib = Main.Ins.DataMgr.GetData <ItemDatas.ItemDatas>(mainWeapon);
        WeaponDatas.WeaponDatas wb = U3D.GetWeaponProperty(ib.UnitId);
        GameObject trigget         = CreateTriggerObj(wb.WeaponR, player.transform, -player.transform.forward);

        //obj.Add(trigget);
        //ExplosionObject01.iTweenExplosion01(1, ref obj, player.transform.position);
        ExplosionObject01.DropItem(trigget, player.transform.position, -player.transform.forward);
        //如果角色拥有第二武器,那么第一武器扔掉时,切换到第二武器
        player.DropAndChangeWeapon();

        //扔掉Flag道具
        if (player.GetFlag)
        {
            trigget = CreateObj(player.GetFlagItem.model, player.transform, -player.transform.forward);
            ExplosionObject01.DropItem(trigget, player.transform.position, Quaternion.AngleAxis(30, Vector3.up) * -player.transform.forward);
            player.SetFlag(null, 0);
        }
    }
    public void OnPickup(MeteorUnit unit)
    {
        if (unit != null && !unit.Dead)
        {
            //满武器,不能捡
            if (unit.Attr.Weapon != 0 && unit.Attr.Weapon2 != 0)
            {
                return;
            }
            //相同武器,不能捡
            ItemDatas.ItemDatas     ib0 = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon);
            WeaponDatas.WeaponDatas wb0 = U3D.GetWeaponProperty(ib0.UnitId);
            if (wb0 != null && wb0.WeaponR == model)
            {
                return;
            }

            if (unit.Attr.Weapon2 != 0)
            {
                ItemDatas.ItemDatas     ib1 = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon2);
                WeaponDatas.WeaponDatas wb1 = U3D.GetWeaponProperty(ib1.UnitId);
                if (wb1 != null && wb1.WeaponR == model)
                {
                    return;
                }
            }

            //同类武器不能捡
            int weaponPickup       = Main.Ins.GameStateMgr.GetWeaponCode(model);
            ItemDatas.ItemDatas wb = Main.Ins.GameStateMgr.FindItemByIdx(weaponPickup);
            if (wb == null)
            {
                return;
            }

            ItemDatas.ItemDatas wbl = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon);
            if (wbl == null)
            {
                return;
            }

            ItemDatas.ItemDatas wbr = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon2);
            if (wb.SubType == wbl.SubType)
            {
                return;
            }

            if (wbr != null && wb.SubType == wbr.SubType)
            {
                return;
            }
            //可以捡取
            unit.Attr.Weapon2 = weaponPickup;
            Main.Ins.SFXLoader.PlayEffect(672, unit.gameObject, true);
            Destroy(gameObject);
        }
    }
예제 #5
0
 public ItemDatas.ItemDatas FindItemByIdx(int itemid)
 {
     ItemDatas.ItemDatas ItemProperty = Main.Ins.DataMgr.GetData <ItemDatas.ItemDatas>(itemid);
     //缺失读取外部加载的部分
     //if (ItemProperty == null)
     //    ItemProperty = Main.Instance..GetItem(itemid);
     if (ItemProperty != null)
     {
         return(ItemProperty);
     }
     return(null);
 }
예제 #6
0
    public InventoryItem MakeEquip(int unitIdx)
    {
        ItemDatas.ItemDatas info = FindItemByIdx(unitIdx);
        if (info == null)
        {
            return(null);
        }
        InventoryItem item = new InventoryItem();

        item.Count = 1;
        item.Idx   = info.ID;
        return(item);
    }
예제 #7
0
    public void DropWeapon(MeteorUnit player)
    {
        int mainWeapon = player.Attr.Weapon2;

        if (mainWeapon == 0)
        {
            return;
        }
        ItemDatas.ItemDatas     ib = Main.Ins.DataMgr.GetData <ItemDatas.ItemDatas>(mainWeapon);
        WeaponDatas.WeaponDatas wb = U3D.GetWeaponProperty(ib.UnitId);
        GameObject trigget         = CreateTriggerObj(wb.WeaponR, player.transform, -player.transform.forward);

        //obj.Add(trigget);
        //ExplosionObject01.iTweenExplosion01(1, ref obj, player.transform.position);
        player.Attr.Weapon2 = 0;
        ExplosionObject01.DropItem(trigget, player.transform.position, -player.transform.forward);
    }
예제 #8
0
 void AddWeaponItem(ItemDatas.ItemDatas it, int idx)
 {
     if (GridWeapon.Count > idx)
     {
         GridWeapon[idx].SetActive(true);
         UIFunCtrl ctrl = GridWeapon[idx].GetComponent <UIFunCtrl>();
         ctrl.SetEvent(ShowWeapon, it.ID);
         ctrl.SetText(it.Name);
     }
     else
     {
         GameObject weapon = GameObject.Instantiate(Resources.Load("GridItemBtn")) as GameObject;
         UIFunCtrl  obj    = weapon.AddComponent <UIFunCtrl>();
         obj.SetEvent(ShowWeapon, it.ID);
         obj.SetText(it.Name);
         obj.transform.SetParent(WeaponRoot.transform);
         obj.gameObject.layer        = WeaponRoot.layer;
         obj.transform.localScale    = Vector3.one;
         obj.transform.localPosition = Vector3.zero;
         obj.transform.localRotation = Quaternion.identity;
         GridWeapon.Add(weapon);
     }
 }
    public void Load(string file)
    {
        string s = file;

        if (!string.IsNullOrEmpty(file))
        {
            //查看此物体属于什么,A:武器 B:道具 C:镖物
            if (ItemInfo == null)
            {
                for (int i = 0; i < Main.Ins.MenuResLoader.Info.Count; i++)
                {
                    if (Main.Ins.MenuResLoader.Info[i].model != "0" && 0 == string.Compare(Main.Ins.MenuResLoader.Info[i].model, s, true))
                    {
                        ApplyPrev(Main.Ins.MenuResLoader.Info[i]);
                        break;
                    }
                    string rh  = s.ToUpper();
                    string rh2 = Main.Ins.MenuResLoader.Info[i].model.ToUpper();
                    if (rh2.StartsWith(rh))
                    {
                        s = Main.Ins.MenuResLoader.Info[i].model;
                        ApplyPrev(Main.Ins.MenuResLoader.Info[i]);
                        break;
                    }
                }
                //不是一个Meteor.res里的物件
                if (ItemInfo == null)
                {
                    List <ItemDatas.ItemDatas> its = Main.Ins.DataMgr.GetDatasArray <ItemDatas.ItemDatas>();
                    for (int i = 0; i < its.Count; i++)
                    {
                        if (its[i].MainType == 1)
                        {
                            WeaponDatas.WeaponDatas weapon = U3D.GetWeaponProperty(its[i].UnitId);
                            if (weapon.WeaponR == s)
                            {
                                ItemInfoEx = its[i];
                                break;
                            }
                        }
                    }
                }
            }

            //证明此物品不是可拾取物品
            gameObject.layer      = (ItemInfo != null || ItemInfoEx != null) ?  LayerMask.NameToLayer("Trigger") : LayerMask.NameToLayer("Scene");
            root.gameObject.layer = gameObject.layer;
            //箱子椅子桌子酒坛都不允许为场景物品.
            WsGlobal.ShowMeteorObject(s, root);
            DesFile fIns = Main.Ins.DesLoader.Load(s);
            //把子物件的属性刷到一起.
            for (int i = 0; i < fIns.SceneItems.Count; i++)
            {
                LoadCustom(fIns.SceneItems[i].name, fIns.SceneItems[i].custom);
            }

            //雪人不能合并材质,不然没法动画
            if (Main.Ins.CombatData.GLevelItem.Scene != "Meteor_21")
            {
                if (name.StartsWith("D_Item") || name.StartsWith("D_RJug") || name.StartsWith("D_itRJug") || name.StartsWith("D_BBox") ||
                    name.StartsWith("D_BBBox") || name.StartsWith("D_Box"))
                {
                    if (root != null)
                    {
                        CombineChildren combine = root.gameObject.AddComponent <CombineChildren>();
                        combine.generateTriangleStrips = false;
                    }
                    else
                    {
                        CombineChildren combine = gameObject.AddComponent <CombineChildren>();
                        combine.generateTriangleStrips = false;
                    }
                }
            }

            FMCFile f = Main.Ins.FMCLoader.Load(s);
            if (f != null)
            {
                player = GetComponent <FMCPlayer>();
                if (player == null)
                {
                    player = gameObject.AddComponent <FMCPlayer>();
                }
                player.Init(s, f);
            }
            else
            {
                player = GetComponent <FMCPlayer>();
                if (player != null)
                {
                    DestroyObject(player);
                    player = null;
                }
            }
        }
    }
    public void OnPickUped(MeteorUnit unit)
    {
        //场景上的模型物件捡取
        if (unit.Dead)
        {
            return;
        }
        if (ItemInfo != null && ItemInfo.Type != 0 && root != null)
        {
            if (ItemInfo.IsWeapon())
            {
                //满武器,不能捡
                if (unit.Attr.Weapon != 0 && unit.Attr.Weapon2 != 0)
                {
                    return;
                }
                //相同武器,不能捡
                ItemDatas.ItemDatas     ib0 = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon);
                WeaponDatas.WeaponDatas wb0 = U3D.GetWeaponProperty(ib0.UnitId);
                if (wb0 != null && wb0.WeaponR == ItemInfo.model)
                {
                    return;
                }

                if (unit.Attr.Weapon2 != 0)
                {
                    ItemDatas.ItemDatas     ib1 = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon2);
                    WeaponDatas.WeaponDatas wb1 = U3D.GetWeaponProperty(ib1.UnitId);
                    if (wb1 != null && wb1.WeaponR == ItemInfo.model)
                    {
                        return;
                    }
                }

                //同类武器不能捡
                int weaponPickup       = Main.Ins.GameStateMgr.GetWeaponCode(ItemInfo.model);
                ItemDatas.ItemDatas wb = Main.Ins.GameStateMgr.FindItemByIdx(weaponPickup);
                if (wb == null)
                {
                    return;
                }

                ItemDatas.ItemDatas wbl = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon);
                if (wbl == null)
                {
                    return;
                }

                ItemDatas.ItemDatas wbr = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon2);
                if (wb.SubType == wbl.SubType)
                {
                    return;
                }

                if (wbr != null && wb.SubType == wbr.SubType)
                {
                    return;
                }
                //可以捡取
                unit.Attr.Weapon2 = weaponPickup;
                Main.Ins.SFXLoader.PlayEffect(672, unit.gameObject, true);
                refresh_tick = ItemInfo.first[1].flag[1];
                if (asDrop)
                {
                    GameObject.Destroy(gameObject);
                }
                else
                {
                    if (refresh_tick > 0)
                    {
                        Refresh = true;
                    }
                    GameObject.Destroy(root.gameObject);
                    root = null;
                }
            }
            else if (ItemInfo.IsItem())
            {
                //表明此为Buff,会叠加某个属性,且挂上一个持续的特效。
                unit.GetItem(ItemInfo);
                refresh_tick = ItemInfo.first[1].flag[1];
                if (refresh_tick > 0)
                {
                    Refresh = true;
                }
                GameObject.Destroy(root.gameObject);
                root = null;
            }
            else if (ItemInfo.IsFlag())
            {
                GameObject.Destroy(root.gameObject);
                root = null;
                if (ItemInfo.first[1].flag[1] != 0)
                {
                    Main.Ins.SFXLoader.PlayEffect(ItemInfo.first[1].flag[1], unit.gameObject, true);
                }
                U3D.InsertSystemMsg(unit.name + " 夺得镖物");
                unit.SetFlag(ItemInfo, ItemInfo.first[2].flag[1]);
            }

            if (OnPickUp != null)
            {
                OnPickUp.Invoke(Main.Ins.CombatData.GScript, null);
            }
        }
        else if (ItemInfoEx != null)
        {
            if (ItemInfoEx.MainType == 1)
            {
                string weaponModel         = "";
                WeaponDatas.WeaponDatas wp = U3D.GetWeaponProperty(ItemInfoEx.UnitId);
                if (wp != null)
                {
                    weaponModel = wp.WeaponR;
                }
                //满武器,不能捡
                if (unit.Attr.Weapon != 0 && unit.Attr.Weapon2 != 0)
                {
                    return;
                }
                //相同武器,不能捡
                ItemDatas.ItemDatas     ib0 = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon);
                WeaponDatas.WeaponDatas wb0 = U3D.GetWeaponProperty(ib0.UnitId);
                if (wb0 != null && wb0.WeaponR == weaponModel)
                {
                    return;
                }

                if (unit.Attr.Weapon2 != 0)
                {
                    ItemDatas.ItemDatas     ib1 = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon2);
                    WeaponDatas.WeaponDatas wb1 = U3D.GetWeaponProperty(ib1.UnitId);
                    if (wb1 != null && wb1.WeaponR == weaponModel)
                    {
                        return;
                    }
                }

                //同类武器不能捡
                int weaponPickup       = Main.Ins.GameStateMgr.GetWeaponCode(weaponModel);
                ItemDatas.ItemDatas wb = Main.Ins.GameStateMgr.FindItemByIdx(weaponPickup);
                if (wb == null)
                {
                    return;
                }

                ItemDatas.ItemDatas wbl = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon);
                if (wbl == null)
                {
                    return;
                }

                ItemDatas.ItemDatas wbr = Main.Ins.GameStateMgr.FindItemByIdx(unit.Attr.Weapon2);
                if (wb.SubType == wbl.SubType)
                {
                    return;
                }

                if (wbr != null && wb.SubType == wbr.SubType)
                {
                    return;
                }
                //可以捡取
                unit.Attr.Weapon2 = weaponPickup;
                Main.Ins.SFXLoader.PlayEffect(672, unit.gameObject, true);

                if (asDrop)
                {
                    GameObject.Destroy(gameObject);
                }
            }
        }
        else
        {
            if (OnTouch != null)
            {
                OnTouch.Invoke(Main.Ins.CombatData.GScript, new object[] { 0, unit.InstanceId });
            }
            else if (OnPickUp != null)
            {
                OnPickUp.Invoke(Main.Ins.CombatData.GScript, null);
            }
        }
    }