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; }
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); }
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); } } } }
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(); } } } } } } }