Пример #1
0
    protected override void InitWindow()
    {
        base.InitWindow();
        skillMgr = GameUI.Instance.mMainPlayer.GetCmpt <SkillTreeUnitMgr>();
        skEntiyt = GameUI.Instance.mMainPlayer.GetCmpt <SkAliveEntity>();
        Refresh(TableState.tb_Work);
        SkillTreeInfo.SetUICallBack(RefreshTypeData);
        Invoke("ResetScrollValue", 0.2f);

        mSkillTypeCtrl.onSetBtnActive += OnSkillTypeBtnActive;

        mSkillTypeCtrl.SetActiveBtn(0);
    }
    private void ProcDigVoxels(SkEntity caster)
    {
        SkInst      inst       = SkRuntimeInfo.Current as SkInst;
        IDigTerrain digTerrain = caster as IDigTerrain;
        IntVector4  digPos     = null;

        if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero || (inst != null && !(inst._target is VFVoxelTerrain)))
        {
            return;
        }

        float      damage         = caster.GetAttribute((int)AttribType.Atk) * (1f + caster.GetAttribute((int)AttribType.ResDamage));
        float      radius         = caster.GetAttribute((int)AttribType.ResRange);
        float      resourceBonus  = caster.GetAttribute((int)AttribType.ResBouns);
        float      height         = caster.GetAttribute((int)AttribType.ResDamage);
        bool       returnResource = digPos.w == 1;
        IntVector3 intPos         = digPos.XYZ;

        if (!GameConfig.IsMultiMode)
        {
            //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x, intPos.y, intPos.z);
            List <VFVoxel> removeList = new List <VFVoxel>();
            DigTerrainManager.DigTerrain(intPos,
                                         damage * (returnResource ? 5f : 1f),
                                         radius,
                                         height,
                                         ref removeList, returnResource);
            if (returnResource)
            {
                bool bGetSpItems = false;
                if (caster is SkAliveEntity)
                {
                    SkAliveEntity    alive = (SkAliveEntity)caster;
                    SkillTreeUnitMgr mgr   = alive.Entity.GetCmpt <SkillTreeUnitMgr>();
                    bGetSpItems = mgr.CheckMinerGetRare();
                }
                Dictionary <int, int> itemGet = DigTerrainManager.GetResouce(removeList, resourceBonus, bGetSpItems);
                if (itemGet.Count > 0)
                {
                    List <int> itemsArray = new List <int>(itemGet.Count * 2);
                    foreach (int intemID in itemGet.Keys)
                    {
                        itemsArray.Add(intemID);
                        itemsArray.Add(itemGet[intemID]);
                    }
                    caster.Pack += itemsArray.ToArray();
                }
            }
        }
        else
        {
            if (caster != null && caster._net != null)
            {
                //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x,intPos.y, intPos.z);

                bool bGetSpItems = false;
                if (returnResource)
                {
                    if (caster is SkAliveEntity)
                    {
                        SkAliveEntity    alive = (SkAliveEntity)caster;
                        SkillTreeUnitMgr mgr   = alive.Entity.GetCmpt <SkillTreeUnitMgr>();
                        bGetSpItems = mgr.CheckMinerGetRare();
                    }
                }

                DigTerrainManager.DigTerrainNetwork((SkNetworkInterface)(caster._net), intPos, damage * (returnResource ? 5f : 1f),
                                                    radius, resourceBonus, returnResource, bGetSpItems, 0.3f);
            }
        }
    }
Пример #3
0
    public static Dictionary <int, List <SkillTreeUnit> > GetUIShowList(int mainType, SkillTreeUnitMgr mgr)
    {
        //[grade][unit]
        List <SkillTreeUnit> minLevelSkills = SkillTreeInfo.GetMinLevelByMainType(mainType);
        List <SkillTreeUnit> learntSkills   = mgr.GetSkillsByMainType(mainType);
        //[grade][unit]
        Dictionary <int, List <SkillTreeUnit> > outSkills = new Dictionary <int, List <SkillTreeUnit> >();

        for (int j = 0; j < minLevelSkills.Count; j++)
        {
            for (int i = 0; i < learntSkills.Count; i++)
            {
                if (learntSkills[i]._skillType == minLevelSkills[j]._skillType)
                {
                    minLevelSkills[j] = learntSkills[i];
                    break;
                }
            }
            mgr.ChangeSkillState(minLevelSkills[j]);
            if (!outSkills.ContainsKey(minLevelSkills[j]._skillGrade))
            {
                outSkills[minLevelSkills[j]._skillGrade] = new List <SkillTreeUnit>();
            }
            outSkills[minLevelSkills[j]._skillGrade].Add(minLevelSkills[j]);
        }
        foreach (var iter in outSkills)
        {
            if (iter.Value != null && iter.Value.Count > 1)
            {
                iter.Value.Sort((left, right) =>
                {
                    if (left._descIndex > right._descIndex)
                    {
                        return(1);
                    }
                    else if (left._descIndex == right._descIndex)
                    {
                        return(0);
                    }
                    else
                    {
                        return(-1);
                    }
                });
            }
        }
        return(outSkills);
    }
Пример #4
0
        public bool PutOnEquipment(ItemObject itemObj, bool addToReceiver = true, Receiver receiver = null, bool netRequest = false)
        {
            if (!netRequest && null != mViewCmpt && mViewCmpt.IsRagdoll)
            {
                return(false);
            }

            Receiver currentReceiver = (null == receiver)?mItemReciver:receiver;

            if (null == itemObj)
            {
                return(false);
            }

            ItemAsset.Equip equip = itemObj.GetCmpt <ItemAsset.Equip>();

            if (null == equip)
            {
                return(false);
            }

            if (!Pathea.PeGender.IsMatch(equip.sex, Entity.ExtGetSex()))
            {
                return(false);
            }

            if (mItemList.Contains(itemObj))
            {
                return(false);
            }
            SkillTreeUnitMgr learntSkills = Entity.GetCmpt <SkillTreeUnitMgr>();

            if (!netRequest && learntSkills != null && RandomMapConfig.useSkillTree)
            {
                if (!learntSkills.CheckEquipEnable(equip.protoData.itemClassId, equip.itemObj.level))
                {
                    return(false);
                }
            }
            m_TakeOffEquip.Clear();
            for (int i = 0; i < mItemList.Count; ++i)
            {
                ItemObject      item       = mItemList[i];
                ItemAsset.Equip existEquip = item.GetCmpt <ItemAsset.Equip>();
                if (null != existEquip)
                {
                    if (System.Convert.ToBoolean(equip.equipPos & existEquip.equipPos))
                    {
                        m_TakeOffEquip.Add(item);
                    }
                }
            }
            for (int i = 0; i < mEquipments.Count; ++i)
            {
                if (m_TakeOffEquip.Contains(mEquipments[i].m_ItemObj) && !netRequest && !mEquipments[i].CanTakeOff())
                {
                    return(false);
                }
            }

            if (!netRequest && addToReceiver && null != currentReceiver)
            {
                if (!currentReceiver.CanAddItemList(m_TakeOffEquip))
                {
                    //lz-2016.08.15 如果是NPC的背包满了要单独提示
                    if (currentReceiver is NpcPackageCmpt)
                    {
                        PeTipMsg.Register(PELocalization.GetString(82209013), PeTipMsg.EMsgLevel.Warning);
                    }
                    else
                    {
                        PeTipMsg.Register(PELocalization.GetString(82209001), PeTipMsg.EMsgLevel.Warning);
                    }
                    return(false);
                }
            }

            for (int i = mItemList.Count - 1; i >= 0; i--)
            {
                if (m_TakeOffEquip.Contains(mItemList[i] as ItemObject))
                {
                    mItemList.RemoveAt(i);
                }
            }
            mItemList.Add(itemObj);

            if (addToReceiver && null != currentReceiver)
            {
                currentReceiver.AddItemList(m_TakeOffEquip);
            }

            //Do change
            for (int i = 0; i < m_TakeOffEquip.Count; ++i)
            {
                ItemObject item = m_TakeOffEquip[i];
                RemoveItemEff(item);
                RemoveModel(item);
                mEquipType &= ~item.protoData.equipType;
                EventArg removeEvtArg = new EventArg();
                removeEvtArg.isAdd   = false;
                removeEvtArg.itemObj = item;
                changeEventor.Dispatch(removeEvtArg, this);
            }

            ApplyItemEff(itemObj);
            AddModel(itemObj);
            mEquipType |= itemObj.protoData.equipType;

            EventArg evtArg = new EventArg();

            evtArg.isAdd   = true;
            evtArg.itemObj = itemObj;
            changeEventor.Dispatch(evtArg, this);

            if (0 != (itemObj.protoData.equipPos & (1 << 4)))
            {
                mainHandEquipment = itemObj;
            }

            if (OnEquipmentChange != null)
            {
                OnEquipmentChange();
            }

            //lz-2016.08.22 引导检测玩家穿装备
            if (Entity.IsMainPlayer)
            {
                InGameAidData.CheckPutOnEquip(itemObj.protoId);
            }

            m_EquipmentDirty = true;

            return(true);
        }
Пример #5
0
        public bool NetTryPutOnEquipment(ItemObject itemObj, bool addToReceiver = true, Receiver receiver = null)
        {
            if (null != mViewCmpt && mViewCmpt.IsRagdoll)
            {
                return(false);
            }
            Receiver currentReceiver = (null == receiver)?mItemReciver:receiver;

            if (null == itemObj)
            {
                return(false);
            }
            if (mItemList.Contains(itemObj))
            {
                return(false);
            }

            ItemAsset.Equip equip = itemObj.GetCmpt <ItemAsset.Equip>();

            if (null == equip)
            {
                return(false);
            }

            if (!Pathea.PeGender.IsMatch(equip.sex, Entity.ExtGetSex()))
            {
                return(false);
            }
            SkillTreeUnitMgr learntSkills = Entity.GetCmpt <SkillTreeUnitMgr>();

            if (learntSkills != null && RandomMapConfig.useSkillTree)
            {
                if (!learntSkills.CheckEquipEnable(equip.protoData.itemClassId, equip.itemObj.level))
                {
                    return(false);
                }
            }

            m_TakeOffEquip.Clear();
            for (int i = 0; i < mItemList.Count; ++i)
            {
                ItemObject item = mItemList[i];
                if (item == itemObj)
                {
                    return(false);
                }
                ItemAsset.Equip existEquip = item.GetCmpt <ItemAsset.Equip>();
                if (null != existEquip)
                {
                    if (System.Convert.ToBoolean(equip.equipPos & existEquip.equipPos))
                    {
                        m_TakeOffEquip.Add(item);
                    }
                }
            }

            for (int i = 0; i < mEquipments.Count; ++i)
            {
                if (m_TakeOffEquip.Contains(mEquipments[i].m_ItemObj) && !mEquipments[i].CanTakeOff())
                {
                    return(false);
                }
            }

            if (null != currentReceiver)
            {
                if (!currentReceiver.CanAddItemList(m_TakeOffEquip))
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #6
0
    private void onAlterAttribs(int idx, float oldValue, float newValue)
    {
//		if(_targetTree == null)	return;
//		Debug.Log("Cutting a tree........");

        /* when the tree's hp has been cut to zero
         * if (null != LSubTerrainMgr.Instance)
         * {
         *      LSubTerrainMgr.DeleteTree(mGroundItem);
         *      LSubTerrainMgr.RefreshAllLayerTerrains();
         * }
         * else if (null != RSubTerrainMgr.Instance)
         * {
         *      RSubTerrainMgr.DeleteTree(mGroundItem._treeInfo);
         *      RSubTerrainMgr.RefreshAllLayerTerrains();
         * }
         */

        if (idx != 2)
        {
            return;
        }

        float damage         = _attribs.sums[0];
        float resourceBonus  = _attribs.sums[1];
        bool  returnResource = _attribs.sums[2] > 0.0f;

        SkEntity caster = GetCasterToModAttrib(idx);

        if (null != caster)
        {
            ISkSubTerrain subTerrain = caster as ISkSubTerrain;
            if (null != subTerrain && null != subTerrain.treeInfo)
            {
                treeHPInfos[subTerrain.treeInfo.WorldPos] = DigTerrainManager.Fell(subTerrain.treeInfo, damage, GetTreeHP(subTerrain.treeInfo.WorldPos));
                if (GameConfig.IsMultiMode)
                {
                    caster.SendFellTree(subTerrain.treeInfo._treeInfo.m_protoTypeIdx, subTerrain.treeInfo.WorldPos, subTerrain.treeInfo._treeInfo.m_heightScale, subTerrain.treeInfo._treeInfo.m_widthScale);
                }
                else
                {
                    if (treeHPInfos[subTerrain.treeInfo.WorldPos] <= 0)
                    {
                        OnTreeCutDown(caster, subTerrain.treeInfo);
                        DigTerrainManager.RemoveTree(subTerrain.treeInfo);
                        if (returnResource)
                        {
                            bool bGetSpItems = false;
                            if (caster is SkAliveEntity)
                            {
                                SkAliveEntity alive = (SkAliveEntity)caster;
                                if (alive.Entity.proto == EEntityProto.Player)
                                {
                                    SkillTreeUnitMgr mgr = alive.Entity.GetCmpt <SkillTreeUnitMgr>();
                                    bGetSpItems = mgr.CheckMinerGetRare();
                                }
                            }
                            Dictionary <int, int> itemGet = DigTerrainManager.GetTreeResouce(subTerrain.treeInfo, resourceBonus, bGetSpItems);
                            if (itemGet.Count > 0)
                            {
                                List <int> itemsArray = new List <int>(itemGet.Count * 2);
                                foreach (int intemID in itemGet.Keys)
                                {
                                    itemsArray.Add(intemID);
                                    itemsArray.Add(itemGet[intemID]);
                                }
                                GetSpecialItem.PlantItemAdd(ref itemsArray);  //植物特殊道具添加
                                caster._attribs.pack += itemsArray.ToArray();
                            }
                        }
                    }
                }
            }
        }
    }