예제 #1
0
    // 掉落前 的 记录整理
    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));
        }
    }
예제 #2
0
    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;
        }
        }
    }