Esempio n. 1
0
        /// <summary>
        /// 100个矿工为一组奴隶
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="userName"></param>
        /// <param name="minersGroupCount">100个矿工为一组奴隶</param>
        /// <returns></returns>
        public int AddMinersToFactory(int userID, string userName, int minersGroupCount)
        {
            int result = CheckTime();

            if (result != OperResult.RESULTCODE_TRUE)
            {
                return(result);
            }

            if (minersGroupCount < 1)
            {
                return(OperResult.RESULTCODE_PARAM_INVALID);
            }
            PlayerRunnable playerrunner = PlayerController.Instance.GetRunnable(userName);

            if (playerrunner == null)
            {
                return(OperResult.RESULTCODE_USER_NOT_EXIST);
            }
            if (playerrunner.BasePlayer.FortuneInfo.MinersCount < minersGroupCount * StoneFactoryConfig.OneGroupSlaveHasMiners)
            {
                return(OperResult.RESULTCODE_MINERS_LACK_OF_BALANCE);
            }

            PlayerStoneFactoryAccountInfo factoryAccount = DBProvider.PlayerStoneFactoryDBProvider.GetPlayerStoneFactoryAccountInfo(userID);

            if (factoryAccount == null || !factoryAccount.FactoryIsOpening || factoryAccount.FactoryLiveDays <= 0)
            {
                return(OperResult.RESULTCODE_STONEFACTORYISCLOSED);
            }

            result = MyDBHelper.Instance.TransactionDataBaseOper(myTrans =>
            {
                result = playerrunner.TransferMinersToFactory(minersGroupCount * StoneFactoryConfig.OneGroupSlaveHasMiners, myTrans);
                if (result == OperResult.RESULTCODE_TRUE)
                {
                    factoryAccount.FreezingSlaveGroupCount += minersGroupCount;
                    //factoryAccount.LastFeedSlaveTime = new MyDateTime(DateTime.Now);

                    bool isOK = DBProvider.PlayerStoneFactoryDBProvider.SavePlayerStoneFactoryAccountInfo(factoryAccount, myTrans);
                    return(isOK ? OperResult.RESULTCODE_TRUE : OperResult.RESULTCODE_FALSE);
                }

                return(result);
            },
                                                                 exc =>
            {
                PlayerController.Instance.RollbackUserFromDB(userName);
            });

            if (result == OperResult.RESULTCODE_TRUE)
            {
                LogHelper.Instance.AddInfoLog("矿石工厂,玩家ID[" + userName + "] 增加" + minersGroupCount + "00苦力");
            }
            return(result);
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="stoneStackCount">矿石股数(一万矿石为一股)</param>
        /// <returns></returns>
        public int WithdrawStone(int userID, string userName, int stoneStackCount)
        {
            PlayerRunnable playerrunner = PlayerController.Instance.GetRunnable(userName);

            if (playerrunner == null)
            {
                return(OperResult.RESULTCODE_USER_NOT_EXIST);
            }
            var playerFactoryAccountInfo = this.GetPlayerStoneFactoryAccountInfo(userID);

            if (playerFactoryAccountInfo == null)
            {
                return(OperResult.RESULTCODE_STONEFACTORYISCLOSED);
            }

            if (playerFactoryAccountInfo.WithdrawableStackCount < stoneStackCount)
            {
                return(OperResult.RESULTCODE_LACK_OF_BALANCE);
            }

            int result = MyDBHelper.Instance.TransactionDataBaseOper(myTrans =>
            {
                playerFactoryAccountInfo.WithdrawableStackCount -= stoneStackCount;
                playerFactoryAccountInfo.TotalStackCount        -= stoneStackCount;

                result = playerrunner.WithdrawStoneFromFactory(stoneStackCount, myTrans);
                if (result == OperResult.RESULTCODE_TRUE)
                {
                    //添加矿石取出记录
                    StoneFactoryStackChangeRecord record = new StoneFactoryStackChangeRecord()
                    {
                        UserID = userID,
                        JoinStoneStackCount = -stoneStackCount,
                        Time = new MyDateTime(DateTime.Now)
                    };
                    bool isOK = DBProvider.PlayerStoneFactoryDBProvider.AddNewStackChangeRecord(record, myTrans);
                    if (isOK)
                    {
                        return(OperResult.RESULTCODE_TRUE);
                    }
                    return(OperResult.RESULTCODE_FALSE);
                }
                return(result);
            },
                                                                     exc =>
            {
                PlayerController.Instance.RollbackUserFromDB(userName);
            });

            if (result == OperResult.RESULTCODE_TRUE)
            {
                LogHelper.Instance.AddInfoLog("矿石工厂,玩家ID[" + userID + "] 取出" + stoneStackCount + "矿石");
            }
            return(OperResult.RESULTCODE_FALSE);
        }
Esempio n. 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="userName"></param>
        /// <param name="stoneStackCount">矿石股数(一万矿石为一股)</param>
        /// <returns></returns>
        public int AddStoneToFactory(int userID, string userName, int stoneStackCount)
        {
            int result = CheckTime();

            if (result != OperResult.RESULTCODE_TRUE)
            {
                return(result);
            }

            //1万矿石可以投入一股,30天后,可撤回到玩家矿石账户
            PlayerRunnable playerrunner = PlayerController.Instance.GetRunnable(userName);

            if (playerrunner == null)
            {
                return(OperResult.RESULTCODE_USER_NOT_EXIST);
            }
            if (playerrunner.BasePlayer.FortuneInfo.StockOfStones - playerrunner.BasePlayer.FortuneInfo.FreezingStones < (stoneStackCount * StoneFactoryConfig.StoneFactoryStone_Stack))
            {
                return(OperResult.RESULTCODE_LACK_OF_BALANCE);
            }

            result = MyDBHelper.Instance.TransactionDataBaseOper(myTrans =>
            {
                result = playerrunner.JoinStoneToFactory(stoneStackCount, myTrans);
                if (result == OperResult.RESULTCODE_TRUE)
                {
                    //只需要添加矿石存入记录。
                    StoneFactoryStackChangeRecord record = new StoneFactoryStackChangeRecord()
                    {
                        UserID = userID,
                        JoinStoneStackCount = stoneStackCount,
                        Time = new MyDateTime(DateTime.Now)
                    };
                    bool isOK = DBProvider.PlayerStoneFactoryDBProvider.AddNewStackChangeRecord(record, myTrans);
                    if (isOK)
                    {
                        return(OperResult.RESULTCODE_TRUE);
                    }
                    return(OperResult.RESULTCODE_FALSE);
                }
                return(result);
            },
                                                                 exc =>
            {
                PlayerController.Instance.RollbackUserFromDB(userName);
            });

            if (result == OperResult.RESULTCODE_TRUE)
            {
                LogHelper.Instance.AddInfoLog("矿石工厂,玩家[" + userName + "] 添加" + stoneStackCount + "0000矿石");
            }
            return(result);
        }
Esempio n. 4
0
        public int WithdrawOutputRMB(int userID, string userName, decimal withdrawRMBCount)
        {
            PlayerRunnable playerrunner = PlayerController.Instance.GetRunnable(userName);

            if (playerrunner == null)
            {
                return(OperResult.RESULTCODE_USER_NOT_EXIST);
            }
            var playerFactoryAccountInfo = this.GetPlayerStoneFactoryAccountInfo(userID);

            if (playerFactoryAccountInfo == null)
            {
                return(OperResult.RESULTCODE_STONEFACTORYISCLOSED);
            }
            if (playerFactoryAccountInfo.WithdrawableProfitRMB < withdrawRMBCount)
            {
                return(OperResult.RESULTCODE_LACK_OF_BALANCE);
            }

            int result = MyDBHelper.Instance.TransactionDataBaseOper(myTrans =>
            {
                //添加提现记录
                StoneFactoryProfitRMBChangedRecord record = new StoneFactoryProfitRMBChangedRecord()
                {
                    UserID     = userID,
                    OperRMB    = -withdrawRMBCount,
                    OperTime   = new MyDateTime(DateTime.Now),
                    ProfitType = FactoryProfitOperType.WithdrawRMB
                };

                bool isOK = DBProvider.PlayerStoneFactoryDBProvider.AddProfitRMBChangedRecord(record, myTrans);
                if (isOK)
                {
                    return(playerrunner.WithdrawRMBFromFactory(withdrawRMBCount, myTrans));
                }

                return(OperResult.RESULTCODE_FALSE);
            },
                                                                     exc =>
            {
                PlayerController.Instance.RollbackUserFromDB(userName);
            });

            if (result == OperResult.RESULTCODE_TRUE)
            {
                LogHelper.Instance.AddInfoLog("矿石工厂,玩家ID[" + userID + "] 提取" + withdrawRMBCount + "灵币");
            }

            return(result);
        }
        public int BuyVirtualShoppingItem(string token, VirtualShoppingItem shoppingItem)
        {
            if (RSAProvider.LoadRSA(token))
            {
                PlayerRunnable playerrunner = null;
                string         userName     = "";
                try
                {
                    userName     = ClientManager.GetClientUserName(token);
                    playerrunner = PlayerController.Instance.GetRunnable(userName);
                    if (playerrunner == null)
                    {
                        return(OperResult.RESULTCODE_USER_NOT_EXIST);
                    }

                    if (!VirtualShoppingController.Instance.CheckVirtualShoppingItemBuyable(playerrunner.BasePlayer.SimpleInfo.UserID, shoppingItem))
                    {
                        return(OperResult.RESULTCODE_VIRTUALSHOPPING_PLAYERCANOTBUY_THISITEM);
                    }

                    int result = MyDBHelper.Instance.TransactionDataBaseOper(myTrans =>
                    {
                        int innerResult = playerrunner.BuyVirtualShoppingItem(shoppingItem, myTrans);
                        if (innerResult != OperResult.RESULTCODE_TRUE)
                        {
                            return(innerResult);
                        }

                        return(VirtualShoppingController.Instance.BuyVirtualShoppingItem(playerrunner.BasePlayer.SimpleInfo.UserID, userName, shoppingItem, myTrans));
                    },
                                                                             exc =>
                    {
                        if (playerrunner != null)
                        {
                            playerrunner.RefreshFortune();
                        }

                        if (exc != null)
                        {
                            LogHelper.Instance.AddErrorLog("玩家[" + userName + "]购买虚拟商品[" + shoppingItem.Name + "]异常", exc);
                        }
                    });

                    if (result == OperResult.RESULTCODE_TRUE)
                    {
                        LogHelper.Instance.AddInfoLog("玩家[" + userName + "]成功购买了虚拟商品[" + shoppingItem.Name + "]");
                    }

                    return(result);
                }
                catch (Exception exc)
                {
                    LogHelper.Instance.AddErrorLog("玩家[" + userName + "]购买虚拟商品[" + shoppingItem.Name + "]异常. ClientIP=" + ClientManager.GetClientIP(token), exc);
                    return(OperResult.RESULTCODE_EXCEPTION);
                }
            }
            else
            {
                throw new Exception();
            }
        }
        public int BuyDiamondShoppingItem(string token, DiamondShoppingItem shoppingItem, PostAddress address)
        {
            if (RSAProvider.LoadRSA(token))
            {
                PlayerRunnable playerrunner = null;
                string         userName     = "";
                try
                {
                    if (address == null)
                    {
                        return(OperResult.RESULTCODE_NEEDPOSTADDRESS);
                    }

                    userName     = ClientManager.GetClientUserName(token);
                    playerrunner = PlayerController.Instance.GetRunnable(userName);
                    if (playerrunner == null)
                    {
                        return(OperResult.RESULTCODE_USER_NOT_EXIST);
                    }

                    int result = MyDBHelper.Instance.TransactionDataBaseOper(myTrans =>
                    {
                        int innerResult = playerrunner.BuyDiamondShoppingItem(shoppingItem, myTrans);
                        if (innerResult != OperResult.RESULTCODE_TRUE)
                        {
                            return(innerResult);
                        }

                        return(DiamondShoppingController.Instance.BuyDiamondShoppingItem(playerrunner.BasePlayer.SimpleInfo.UserID, userName, shoppingItem, address, myTrans));
                    },
                                                                             exc =>
                    {
                        if (playerrunner != null)
                        {
                            playerrunner.RefreshFortune();
                        }

                        if (exc != null)
                        {
                            LogHelper.Instance.AddErrorLog("玩家[" + userName + "]购买钻石商品[" + shoppingItem.Name + "]异常", exc);
                        }
                    });

                    if (result == OperResult.RESULTCODE_TRUE)
                    {
                        LogHelper.Instance.AddInfoLog("玩家[" + userName + "]成功购买了钻石商品[" + shoppingItem.Name + "]");
                    }

                    return(result);
                }
                catch (Exception exc)
                {
                    LogHelper.Instance.AddErrorLog("玩家[" + userName + "]购买钻石商品[" + shoppingItem.Name + "]异常. ClientIP=" + ClientManager.GetClientIP(token), exc);
                    return(OperResult.RESULTCODE_EXCEPTION);
                }
            }
            else
            {
                throw new Exception();
            }
        }