예제 #1
0
        private static async Task <BaseResponseData> DestoryBuild()
        {
            DestoryBuildResult result = new DestoryBuildResult();

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

            if (data == null)
            {
                result.Result = GameEnum.WsResult.ParamsError;
                return(result);
            }
            return(await BuildController.Instance.DestoryBuild(data.Id, result));
        }
예제 #2
0
        public async Task <BaseResponseData> DestoryBuild(string buildId, DestoryBuildResult result)
        {
            //检查店铺是否属于自己
            var roleId = LogicServer.User.role.Id;
            //var roleBuildList = await BuildIdDataHelper.Instance.GetBuildIdListByRoleId(roleId);
            //if (roleBuildList != null)
            //{
            //    if (roleBuildList.Contains(buildId))
            //    {
            var build = await BuildDataHelper.Instance.GetBuildByBuildId(buildId);

            if (build != null) //拿到店铺
            {
                if (build.RoleId.Equals(roleId.ToString()))
                {
                    var config    = AutoData.BuildingLevel.GetForId(build.Level);
                    var goldType  = config.DismantleCost.CurrencyID;
                    var goldCount = config.DismantleCost.Count;
                    var land      = await LandController.Instance.GetLandCell(build.Pos);

                    FinanceLogData log = new FinanceLogData()
                    {
                        Count     = goldCount,
                        MoneyType = goldType,
                        Type      = (int)GameEnum.FinanceLog.DestoryBuild,
                        AorD      = false
                    };
                    FinanceLogData log1 = new FinanceLogData()
                    {
                        Count     = build.CostGold,
                        MoneyType = (int)GameEnum.Currency.Gold,
                        Type      = (int)GameEnum.FinanceLog.DestoryBuild
                    };


                    using (var tx = LogicServer.Instance.StateManager.CreateTransaction())
                    {
                        await BagDataHelper.Instance.DecGold(goldCount, goldType, tx);                         //扣除货币

                        await BagDataHelper.Instance.AddGold(build.CostGold, (int)GameEnum.Currency.Gold, tx); //返还消耗掉的金砖

                        await RoleController.Instance.AddIncome(roleId, build.Income, tx);                     //更新身价

                        {                                                                                      //销毁店铺
                            await BuildDataHelper.Instance.RemoveBuildByBuildId(buildId, tx);

                            await BuildIdDataHelper.Instance.RemoveOneBuildIdByRoleId(roleId, buildId, tx);

                            await BuildIdPosDataHelper.Instance.RemoveBuildIdByPos(build.Pos, tx);
                        }

                        { //更新土地状态
                            if (land != null)
                            {
                                land.ShopId = string.Empty;
                                land.State  = (int)GameEnum.MapStatus.Saled;
                            }
                            await LandController.Instance.UpdateLandCell(build.Pos, land, tx);
                        }
                        await FinanceLogController.Instance.UpdateFinanceLog(roleId, log, tx);

                        await FinanceLogController.Instance.UpdateFinanceLog(roleId, log1, tx);

                        await tx.CommitAsync();
                    }

                    await MsgSender.Instance.UpdateIncome();

                    await MsgSender.Instance.UpdateGold(goldType);

                    await MsgSender.Instance.UpdateGold((int)GameEnum.Currency.Gold);

                    await MsgSender.Instance.FinanceLogUpdate(log);

                    await MsgSender.Instance.FinanceLogUpdate(log1);

                    result.LandInfo.BuildId = build.Id;
                    result.LandInfo.PosX    = land.PosX;
                    result.LandInfo.PoxY    = land.PoxY;
                    result.LandInfo.RoleId  = land.RoleId;
                    result.LandInfo.State   = land.State;
                    build = null;
                    return(result);
                }
                else
                {
                    result.Result = GameEnum.WsResult.BuildIsNotExists;
                    return(result);
                }
            }
            else
            {
                result.Result = GameEnum.WsResult.NoneBuilds;
                return(result);
            }

            //    else
            //    {
            //        result.Result = GameEnum.WsResult.BuildIdNotOwnRole;
            //        return result;
            //    }
            //}
        }