Exemplo n.º 1
0
        public async Task <BaseResponseData> BuyLand(int pos, BuyLandResult result)
        {
            if (pos > MaxPosValue || pos < 0)
            {
                result.Result = GameEnum.WsResult.ParamsError;
                return(result);
            }
            //获取土地状态
            var land = await LandDataHelper.Instance.GetLandByPos(pos);

            if (land == null || land.State == (int)MapStatus.Empty)
            {//可以购买
                result = await BuyLand(pos);

                return(result);
            }
            else if (land.State == (int)MapStatus.Saled)
            {
                result.Result = GameEnum.WsResult.LandIsSaled;
                return(result);
            }
            else
            {
                //TODO 其他状态尚未处理
                return(result);
            }
        }
Exemplo n.º 2
0
        private static async Task <BaseResponseData> BuyLand()
        {
            BuyLandResult result = new BuyLandResult();

            if (User.bytes == null)
            {
                result.Result = GameEnum.WsResult.ParamsError;
                return(result);
            }
            var data = await InitHelpers.GetPse().DeserializeAsync <BuyLandReq>(User.bytes);

            if (data == null)
            {
                result.Result = GameEnum.WsResult.ParamsError;
                return(result);
            }
            var  landConfig = LandInfo.GetForLevel(data.Level);
            long needMoney  = landConfig.Price.Count;
            var  moneyType  = landConfig.Price.CurrencyID;

            if (needMoney <= 0)
            {
                result.Result = GameEnum.WsResult.ParamsError;
                return(result);
            }
            if (!(BagController.Instance.CheckMoney(needMoney, moneyType)))
            {
                result.Result = GameEnum.WsResult.NotEnoughMoney;
                return(result);
            }
            return(await LandController.Instance.BuyLand(data.Pos, result));
        }
Exemplo n.º 3
0
        public async Task <BuyLandResult> BuyLand(int pos)
        {
            BuyLandResult result = new BuyLandResult();
            var           config = AutoData.LandInfo.GetForLevel(1);
            var           role   = LogicServer.User.role;

            LandData land = new LandData(pos, role.Id);

            var posList = await PosListDataHelper.Instance.GetPosListByRoleIdAsync(role.Id);

            if (posList == null)
            {
                posList = new List <int>();
            }
            posList.Add(pos);
            Dictionary <int, LandData> dic = await LandDicDataHelper.Instance.GetLandDicByRoleIdAsync(role.Id);

            if (dic == null)
            {
                dic = new Dictionary <int, LandData>();
            }
            dic.Add(pos, land);
            FinanceLogData log = new FinanceLogData()
            {
                AorD      = false,
                Count     = -config.Price.Count,
                MoneyType = config.Price.CurrencyID,
                Type      = (int)GameEnum.FinanceLog.BuyLand
            };

            try
            {
                using (var tx = LogicServer.Instance.StateManager.CreateTransaction())
                {
                    await LandDicDataHelper.Instance.UpdateLandDicByRoleIdAsync(role.Id, dic, tx);

                    await BagDataHelper.Instance.DecGold(config.Price.Count, config.Price.CurrencyID, tx);

                    await LandDataHelper.Instance.UpdateLandByPos(pos, land, tx);

                    await PosListDataHelper.Instance.UpdatePosListByRoleIdAsync(role.Id, posList, tx);

                    await RoleController.Instance.AddIncome(role.Id, config.Income, tx);

                    await FinanceLogController.Instance.UpdateFinanceLog(role.Id, log, tx);

                    await tx.CommitAsync();
                }
            }
            catch (Exception ex)
            {
                result.Result = GameEnum.WsResult.BuyLandErr;
                return(result);
            }
            result.PosX   = land.PosX;
            result.PoxY   = land.PoxY;
            result.State  = land.State;
            result.RoleId = land.RoleId;

            await MsgSender.Instance.UpdateIncome();  //更新身价

            await MsgSender.Instance.UpdateGold(config.Price.CurrencyID);

            await MsgSender.Instance.FinanceLogUpdate(log);

            return(result);
        }