Пример #1
0
        public static async Task<HttpResponseMessage> BattlePostAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "battles")]HttpRequestMessage req,
            [Table("PredictedInfo")] IQueryable<PredictedInfo> predictedInfo,
            [Table("Tags")] IQueryable<Tag> tags,
            [Table("BattleResult")]ICollector<BattleResultInfo> outBattleResultTable,
            TraceWriter log)
        {
            dynamic data = await req.Content.ReadAsAsync<object>();
            string nameX = data.nameX;
            string nameY = data.nameY;
            var infoX = predictedInfo.Where(x => x.PartitionKey == "Upload" && x.RowKey == nameX).First();
            var infoY = predictedInfo.Where(x => x.PartitionKey == "Upload" && x.RowKey == nameY).First();
            var unitX = BattleLogic.AnalyzeParameter(infoX, tags.ToList());
            var unitY = BattleLogic.AnalyzeParameter(infoY, tags.ToList());
            var imageX = ImageInfo.FromNameAndResult(nameX, infoX);
            var imageY = ImageInfo.FromNameAndResult(nameY, infoY);
            var invertedTicks = string.Format("{0:D19}", DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks);
            var resultId = invertedTicks + "-" + Guid.NewGuid();
            log.Info(JsonConvert.SerializeObject(unitX));
            log.Info(JsonConvert.SerializeObject(unitY));

            var result = BattleLogic.Battle(unitX, unitY);
            log.Info(JsonConvert.SerializeObject(result));

            var resultInfo = new BattleResultInfo()
            {
                PartitionKey = nameX,
                RevFlag = false,
                ThumbnailUrlX = imageX.ThumbnailUrl,
                ThumbnailUrlY = imageY.ThumbnailUrl,
                RowKey = resultId,
                Result = result
            };
            outBattleResultTable.Add(resultInfo);
            // 検索の便宜上、対戦相手側のキーをパーティションとしたレコードを生成する
            // XXX 効果検証(有効ではない可能性がある)
            var resultInfoR = new BattleResultInfo()
            {
                PartitionKey = nameY,
                RevFlag = true,
                ThumbnailUrlX = imageX.ThumbnailUrl,
                ThumbnailUrlY = imageY.ThumbnailUrl,
                RowKey = resultId,
                Result = result
            };
            outBattleResultTable.Add(resultInfoR);

            return req.CreateJsonResponse(HttpStatusCode.OK, new
            {
                ResultId = resultInfo.RowKey
            });
        }
Пример #2
0
    public override void OnOpenWindow()
    {
        BattleResultInfo data = PVEManager.Instance.BattleResult;

        for (int i = 0; i < 3; ++i)
        {
            if (i >= data.star)
            {
                _imgStar[i].sprite = _grayStar;
            }
        }

        if (_txtLevel != null)
        {
            _txtLevel.text = "Lv " + UserManager.Instance.Level;
        }
        _txtExp.text   = "x" + data.addPlayerExp;
        _txtMoney.text = data.addMoney.ToString();

        for (int i = 0; i < _heros.Length; ++i)
        {
            if (i < data.heroInfo.Count)
            {
                BattleResultHeroInfo heroInfo = data.heroInfo[i];
                _heros[i].SetInfo(heroInfo.heroID, heroInfo.addExp);
            }
            else
            {
                _heros[i].gameObject.SetActive(false);
            }
        }

        for (int i = 0; i < _items.Length; ++i)
        {
            if (i < data.itemInfo.Count)
            {
                ItemInfo itemInfo = data.itemInfo[i];
                _items[i].SetInfo(itemInfo.ConfigID, itemInfo.Number);
            }
            else
            {
                _items[i].gameObject.SetActive(false);
            }
        }

        UpdateClientData();
    }
Пример #3
0
    public void SetInfo(BattleResultInfo result, int index)
    {
        for (int i = 0; i < _itemWidget.Length; ++i)
        {
            SimpleItemWidget itemWidget = _itemWidget[i];
            if (i < result.itemInfo.Count)
            {
                ItemInfo itemInfo = result.itemInfo[i];
                itemWidget.SetInfo(itemInfo.ConfigID, itemInfo.Number);
            }
            else
            {
                itemWidget.gameObject.SetActive(false);
            }
        }

        _txtPlayerExp.text = "x" + result.addPlayerExp.ToString();
        _txtMoney.text     = result.addMoney.ToString();
        _txtTitle.text     = string.Format(Str.Get("UI_PVE_QUICK_FIGHT_RESULT_TITLE"), index + 1);
    }
Пример #4
0
    public override void OnOpenWindow()
    {
        if (PVEManager.Instance.QuickFightResult.Count <= 0)
        {
            return;
        }

        BattleResultInfo result = PVEManager.Instance.QuickFightResult[0];

        _txtMoney.text     = result.addMoney.ToString();
        _txtPlayerExp.text = "x" + result.addPlayerExp.ToString();

        for (int i = 0; i < _itemWidget.Length; ++i)
        {
            SimpleItemWidget itemWidget = _itemWidget[i];
            if (i >= result.itemInfo.Count)
            {
                itemWidget.gameObject.SetActive(false);
            }
            else
            {
                ItemInfo itemInfo = result.itemInfo[i];
                itemWidget.SetInfo(itemInfo.ConfigID, itemInfo.Number);
            }
        }

        for (int i = 0; i < _itemWidgetExtra.Length; ++i)
        {
            SimpleItemWidget itemWidget = _itemWidgetExtra[i];
            itemWidget.gameObject.SetActive(false);
//            if (i >= result.itemInfo.Count) {
//                itemWidget.gameObject.SetActive(false);
//            } else {
//                ItemInfo itemInfo = result.itemInfo[i];
//                itemWidget.SetInfo(itemInfo.ConfigID, itemInfo.Number);
//            }
        }
    }
Пример #5
0
    private void OnMsgMopUpFuben(byte[] buffer)
    {
        MopUpResult ret = Net.Deserialize <MopUpResult>(buffer);

        if (!Net.CheckErrorCode(ret.errorCode, eCommand.MOP_UP_FUBEN))
        {
            return;
        }

        // 添加奖励
        QuickFightResult.Clear();

        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(CurrentSelectLevelID);

        if (cfg == null)
        {
            return;
        }

        List <ItemInfo> list       = new List <ItemInfo>();
        int             awardExp   = 0;
        int             awardMoney = 0;

        foreach (var item in ret.awardCollections)
        {
            BattleResultInfo info = new BattleResultInfo();
            info.addPlayerExp = item.awdExp;
            awardExp         += item.awdExp;

            foreach (var itemData in item.awardItems)
            {
                ItemInfo itemInfo = new ItemInfo();
                itemInfo.Deserialize(itemData);

                Debug.Log(itemInfo.ConfigID);

                if (itemInfo.ConfigID == GameConfig.ITEM_CONFIG_ID_MONEY)
                {
                    info.addMoney += itemInfo.Number;
                    awardMoney    += itemInfo.Number;
                }
                else if (itemInfo.ConfigID == GameConfig.ITEM_CONFIG_ID_WOOD)
                {
                }
                else if (itemInfo.ConfigID == GameConfig.ITEM_CONFIG_ID_STONE)
                {
                }
                else if (itemInfo.ConfigID == GameConfig.ITEM_CONFIG_ID_GOLD)
                {
                }
                else
                {
                    info.itemInfo.Add(itemInfo);
                    list.Add(itemInfo);
                }
            }

            // 减少体力消耗
            UserManager.Instance.SP = Mathf.Max(0, UserManager.Instance.SP - cfg.StaminaCost);

            QuickFightResult.Add(info);
        }

        LevelInfo levelInfo = GetLevelInfo(CurrentSelectLevelID);

        if (levelInfo != null)
        {
            levelInfo.fightCount += QuickFightResult.Count;
        }

        // 打开界面显示结果
        if (QuickFightResult.Count > 1)
        {
            // 扫荡10次的结果
            UIManager.Instance.OpenWindow <UIPVEQuickFight10ResultView>();
        }
        else
        {
            // 扫荡1次
            UIManager.Instance.OpenWindow <UIPVEQuickFightResultView>();
        }

        UserManager.Instance.AddItem(list, true);
        UserManager.Instance.AddMoney(awardMoney, PriceType.MONEY);
        UserManager.Instance.OnAddUserExp(awardExp);

        // 刷新体力和金钱
        EventDispatcher.TriggerEvent(EventID.EVENT_UI_REFRESH_SP);
        UIManager.Instance.RefreshWindow <UINewPVEEntranceView>();
    }
Пример #6
0
    // 一场战斗胜利,更新level中的星级数据,并且更新最新关卡
    public void OnBattleResult(PBattleReport data)
    {
        if (data.pos == null)
        {
            Log.Error("OnBattleResult error, PBattleReport 没有设置 data.pos");
            return;
        }

        int levelID            = data.pos.x;
        MissionConstConfig cfg = MissionConstConfigLoader.GetConfig(levelID);

        if (cfg == null)
        {
            return;
        }

        UserManager.Instance.SP = Mathf.Max(0, UserManager.Instance.SP - cfg.StaminaCost);

        bool isAttacker = UserManager.Instance.EntityID == data.attackerId;

        if (isAttacker)
        {
            if (data.winner == eBattleSide.SIDE_DEFENSER)
            {
                // 输了
                UIManager.Instance.OpenWindow <UIPVEBattleResultFailView>();
                return;
            }
        }
        else
        {
            if (data.winner == eBattleSide.SIDE_ATTACKER)
            {
                // 输了
                UIManager.Instance.OpenWindow <UIPVEBattleResultFailView>();
                return;
            }
        }

        // 赢了
        LevelInfo info = GetLevelInfo(levelID);

        if (info != null)
        {
            info.star = data.star;
            ++info.fightCount;
        }
        else
        {
            AddLevelInfo(levelID, cfg.TimesLimit > 0 ? cfg.TimesLimit - 1 : 0, data.star);
        }

        ChapterType chapterType = (ChapterType)cfg.MissionDegree;

        if (chapterType == ChapterType.NORMAL)
        {
            LastLevelID = Mathf.Max(LastLevelID, levelID);
            int normalLastLevelID = GetLastLevelID(ChapterType.NORMAL);

            // 最后一个关卡打完后,自动跳到下一个
            if (levelID == normalLastLevelID)
            {
                CurrentSelectLevelID = GetNextLevel(levelID, chapterType);
            }
        }
        else if (chapterType == ChapterType.ELITE)
        {
            LastEliteLevelID = Mathf.Max(LastEliteLevelID, levelID);
            int eliteLastLevelID = GetLastLevelID(ChapterType.ELITE);

            // 最后一个关卡打完后,自动跳到下一个
            if (levelID == eliteLastLevelID)
            {
                CurrentSelectLevelID = GetNextLevel(levelID, chapterType);
            }
        }

        // 刷新副本界面
        UIManager.Instance.RefreshWindow <UINewPVEEntranceView>();

        // 战斗结果
        BattleResult = new BattleResultInfo();
        BattleResult.addPlayerExp = data.awdExp;
        BattleResult.star         = data.star;

        foreach (var item in data.awardPoits)
        {
            if (item.roleType == eRoleType.ROLE_LORD)
            {
            }
            else if (item.roleType == eRoleType.ROLE_HERO)
            {
                BattleResultHeroInfo heroInfo = new BattleResultHeroInfo();
                heroInfo.heroID = item.geter;
                heroInfo.addExp = item.awExp;
                BattleResult.heroInfo.Add(heroInfo);
            }

            foreach (var item2 in item.awardItems)
            {
                if (item2.type == eItem.CURRENCY)
                {
                    // 金钱
                    BattleResult.addMoney = item2.num;
                }
                else
                {
                    ItemInfo itemInfo = new ItemInfo();
                    itemInfo.Deserialize(item2);
                    BattleResult.itemInfo.Add(itemInfo);
                }
            }
        }

        UIManager.Instance.OpenWindow <UIPVEBattleResultView>();
    }