Пример #1
0
    void CreateDroppableItemList()
    {
        if (_itemListsUpdated)
        {
            return;
        }

        _itemListsUpdated = true;

        //_itemLists.Add(this); // this will be added at the end of this method(foreach)

        Pathea.PeEntity entity = GetComponent <Pathea.PeEntity>();
        if (null == entity)
        {
            return;
        }
        _skAlive = entity.GetCmpt <Pathea.SkAliveEntity>();
        if (_skAlive == null || !_skAlive.isDead)
        {
            return;
        }

        if (Pathea.PeGameMgr.IsMulti)
        {
            return;
        }
        Pathea.CommonCmpt common = entity.GetCmpt <Pathea.CommonCmpt>();
        if (common != null)
        {
            List <ItemSample> items = ItemDropData.GetDropItems(common.ItemDropId);
            if (common.entityProto.proto == Pathea.EEntityProto.Monster)
            {
                if (items == null)
                {
                    items = GetSpecialItem.MonsterItemAdd(common.entityProto.protoId);
                }
                else
                {
                    items.AddRange(GetSpecialItem.MonsterItemAdd(common.entityProto.protoId));   //特殊道具添加
                }
            }
            if (items != null)
            {
                foreach (ItemSample item in items)
                {
                    AddDroppableItem(item);
                }
            }
        }

        return;
    }
Пример #2
0
        void DispatchDeathEvent(SkEntity caster)
        {
            if (null != deathEvent)
            {
                deathEvent(this, caster);
            }
            if (null != entityDeadEvent)
            {
                entityDeadEvent(this);
            }

            if (GetComponent <ItemDropPeEntity>() == null)
            {
                PeEntity entity = GetComponent <PeEntity>();
                if (entity != null && (entity.ItemDropId > 0 || GetSpecialItem.ExistSpecialItem(entity)))
                {
//					gameObject.AddComponent<ItemDropPeEntity>();
//					LootItemDropPeEntity.AddPeEntity(entity);
                    LootItemMgr.Instance.RequestCreateLootItem(entity);
                }
            }
            PeEventGlobal.Instance.DeathEvent.Invoke(this, caster);
        }
Пример #3
0
    public void RequestCreateLootItem(PeEntity entity)
    {
        if (null == entity)
        {
            return;
        }
        if (PeGameMgr.IsMulti)
        {
            return;
        }

        CommonCmpt common = entity.commonCmpt;

        if (common != null)
        {
            List <ItemSample> items = ItemDropData.GetDropItems(common.ItemDropId);
            if (common.entityProto.proto == EEntityProto.Monster)
            {
                if (items == null)
                {
                    items = GetSpecialItem.MonsterItemAdd(common.entityProto.protoId);
                }
                else
                {
                    items.AddRange(GetSpecialItem.MonsterItemAdd(common.entityProto.protoId));                       //特殊道具添加
                }
            }
            if (items != null)
            {
                for (int i = 0; i < items.Count; ++i)
                {
                    AddLootItem(entity.position, items[i].protoId, items[i].stackCount);
                }
            }
        }
    }
Пример #4
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();
                            }
                        }
                    }
                }
            }
        }
    }