// 掉落前 的 记录整理 public void Start(NPC npc) { // 掉落卡牌 if (npc.IsHaveDropItem()) { // 掉落卡牌 DropItemPerformanceCard itemType = new DropItemPerformanceCard(); itemType.m_type = DropItemPerformanceType.Type.enCard; itemType.m_cardList.Clear(); itemType.m_deadPos = new Vector3(npc.MainObj.transform.position.x, npc.MainObj.transform.position.y, npc.MainObj.transform.position.z); itemType.m_eulerAngles = new Vector3(npc.MainObj.transform.localEulerAngles.x, npc.MainObj.transform.localEulerAngles.y, npc.MainObj.transform.localEulerAngles.z); // 更新掉落列表 if (null != npc.roomElement) { foreach (int cardId in npc.roomElement.MonsterData.dropList) { itemType.m_cardList.Add(cardId); } } MainGame.Singleton.StartCoroutine(LoadDropItem(itemType)); } // 掉落金钱 if ((npc.GetNpcType() == ENNpcType.enBoxNPC && npc.GetNpcInterSubType() == ENNpcInterSubType.enTreasureBox)) { // 掉落金钱 DropItemPerformanceType itemType = new DropItemPerformanceType(); itemType.m_type = DropItemPerformanceType.Type.enGold; itemType.m_intParam = 100; itemType.m_deadPos = new Vector3(npc.MainObj.transform.position.x, npc.MainObj.transform.position.y, npc.MainObj.transform.position.z); itemType.m_eulerAngles = new Vector3(npc.MainObj.transform.localEulerAngles.x, npc.MainObj.transform.localEulerAngles.y, npc.MainObj.transform.localEulerAngles.z); MainGame.Singleton.StartCoroutine(LoadDropItem(itemType)); } }
public IEnumerator LoadDropItem(DropItemPerformanceType item) { yield return(new WaitForSeconds(0.2f)); GameResPackage.AsyncLoadPackageData loadData = new GameResPackage.AsyncLoadPackageData(); IEnumerator e = null; EventItemInfo eventInfo = GameTable.eventItemAsset.LookUp(item.m_intParam); DropItemPerformanceType.Type type = item.m_type; if (eventInfo != null) { type = (DropItemPerformanceType.Type)eventInfo.dropType; } switch (type) { // 卡牌 case DropItemPerformanceType.Type.enCard: { DropItemPerformanceCard cardItem = (DropItemPerformanceCard)item; foreach (int cardId in cardItem.m_cardList) { e = NewDropItem(loadData, item, cardId); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } Debug.Log("....cardId:" + cardId); yield return(new WaitForSeconds(0.1f)); } // 卡牌的增长数目 Reward.Singleton.m_cardDesNum = Reward.Singleton.m_cardNum + cardItem.m_cardList.Count; break; } // 金钱 case DropItemPerformanceType.Type.enGold: { // 如果有钱则掉落金币 效果 if (item.m_intParam > 0) { int min = 15; int max = 30; WorldParamInfo worldInfo = GameTable.WorldParamTableAsset.Lookup((int)ENWorldParamIndex.enDropGoldMinMax); if (null != worldInfo) { List <int> cardList = ConvertorTool.StringToList_Int(worldInfo.StringTypeValue); if (null != cardList && cardList.Count >= 2) { min = cardList[0]; max = cardList[1]; } } // 金币增长的数目 int randomGold = UnityEngine.Random.Range(100, 1000); Reward.Singleton.m_goldDesNum = Reward.Singleton.m_goldNum + randomGold; int dropNum = UnityEngine.Random.Range(min, max); for (int i = 0; i < dropNum; i++) { e = NewDropItem(loadData, item); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } yield return(new WaitForSeconds(0.01f)); } } break; } // 钥匙 case DropItemPerformanceType.Type.enKey: { e = NewDropItem(loadData, item, item.m_intParam); while (true) { e.MoveNext(); if (loadData.m_isFinish) { break; } yield return(e.Current); } break; } } }