コード例 #1
0
        public static PlayerBank Gain(PlayerBank playerBank, Dictionary <int, ulong> moneys,
                                      Dictionary <int, uint> items)
        {
            foreach (var(key, value) in moneys)
            {
                if (playerBank.MoneysIdToNum.TryGetValue(key, out var num))
                {
                    playerBank.MoneysIdToNum[key] =
                        Math.Min(OtherConfig.MaxCoinNum, value + num);
                }
                else
                {
                    playerBank.MoneysIdToNum.Add(key, value);
                }
            }

            foreach (var(key, value) in items)
            {
                if (playerBank.ItemsIdToNum.TryGetValue(key, out var num))
                {
                    playerBank.ItemsIdToNum[key] =
                        Math.Min(OtherConfig.MaxItemNum, value + num);
                }
                else
                {
                    playerBank.ItemsIdToNum.Add(key, value);
                }
            }

            return(playerBank);
        }
コード例 #2
0
ファイル: Tools.cs プロジェクト: tyrdom/hang_up
        public static BankBaseResponse GenBankBaseResponseByPlayBank(PlayerBank playerBank)
        {
            var playerBankMoneysIdToNum = playerBank.MoneysIdToNum
                                          .Select(x => new Money()
            {
                itemId = x.Key, Num = x.Value
            }).ToList();

            return(new BankBaseResponse
            {
                Moneys = playerBankMoneysIdToNum
            });
        }
コード例 #3
0
ファイル: Tools.cs プロジェクト: tyrdom/hang_up
        public static BankItemResponse GenBankItemResponseByPlayBank(PlayerBank playerBank, IEnumerable <int> itemId)
        {
            var items = playerBank.ItemsIdToNum.Where(a =>
                                                      itemId.Contains(a.Key)
                                                      ).Select(x => new Item {
                itemId = x.Key, Num = x.Value
            }).ToList();
            var bank = new BankItemResponse {
                Items = items
            };

            return(bank);
        }
コード例 #4
0
ファイル: Tools.cs プロジェクト: tyrdom/hang_up
        public static BankItemResponse GenBankItemResponseByPlayBank(PlayerBank playerBank)
        {
            var items = playerBank.ItemsIdToNum
                        .Select(x => new Item()
            {
                itemId = x.Key, Num = x.Value
            }).ToList();

            var bank = new BankItemResponse {
                Items = items
            };

            return(bank);
        }
コード例 #5
0
        public static bool Use(PlayerBank playerBank, Dictionary <int, ulong> moneys,
                               Dictionary <int, uint> items)
        {
            foreach (var(key, value) in moneys)
            {
                if (!playerBank.MoneysIdToNum.TryGetValue(key, out var num))
                {
                    return(false);
                }
                if (num >= value)
                {
                    continue;
                }
                return(false);
            }


            foreach (var(key, value) in items)
            {
                if (!playerBank.ItemsIdToNum.TryGetValue(key, out var num))
                {
                    return(false);
                }
                if (num >= value)
                {
                    continue;
                }
                return(false);
            }

            foreach (var(k, v) in items)
            {
                playerBank.ItemsIdToNum[k] -= v;
            }

            foreach (var(k, v) in moneys)
            {
                playerBank.MoneysIdToNum[k] -= v;
            }
            return(true);
        }
コード例 #6
0
ファイル: LinkActor.cs プロジェクト: tyrdom/hang_up
        private void OnLine()
        {
            FamousActors.MongodbPlayerStatusActor.Tell(new InitStatus(_accountId));

            // ICancelable scheduleTellRepeatedlyCancelable = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(
            //     TimeSpan.FromMinutes(10),
            //     TimeSpan.FromMinutes(10),
            //     Self, SavePlayerDB.Instance
            //     , ActorRefs.Nobody);
            void ReallyLoginOk()
            {
                _temp.bankBaseResponse      = Tools.GenBankBaseResponseByPlayBank(_myWallet);
                _temp.charactersGetResponse = Tools.GenCharactersGetResponseByPlayerCharacters(_myCharacters);
                var aMsg = new AMsg
                {
                    type        = AMsg.Type.ResponseMsg,
                    responseMsg = { head = ResponseMsg.Head.LoginResponse, loginResponse = _temp }
                };

                _tcpActorRef.Tell(GenTcpWrite(aMsg));
            }

            Receive <PlayerStatus>(status =>
            {
                _myWallet     = status.PlayerBank;
                _myGames      = status.PlayerGames;
                _myCharacters = status.PlayerCharacters;
                ReallyLoginOk();
            });


            Receive <ErrorResponse>(response =>
                                    _tcpActorRef.Tell(GenTcpWrite(
                                                          new AMsg
            {
                type        = AMsg.Type.ResponseMsg,
                responseMsg = { head = ResponseMsg.Head.ErrorResponse, errorResponse = response }
            }
                                                          ))
                                    );
            Receive <Tcp.ConnectionClosed>(closed =>
            {
                OffLineSave(OutReason.Drop);
                _log.Info($"Stopped, remote connection [{_remote}] closed");
                Context.Stop(Self);
            });
            Receive <Terminated>(terminated =>
            {
                OffLineSave(OutReason.Drop);
                _log.Info($"Stopped, remote connection [{_remote}] died");

                Context.Stop(Self);
            });

            Receive <LogoutResponse>(response =>
            {
                _tcpActorRef.Tell(GenTcpWrite(new AMsg
                {
                    type        = AMsg.Type.ResponseMsg,
                    responseMsg = { head = ResponseMsg.Head.LogoutResponse, logoutResponse = response }
                }));
            });
            Receive <Tcp.Received>(received =>
            {
                var aMsg     = ProtoTool.DeSerialize <AMsg>(received.Data.ToArray());
                var aMsgType = aMsg.type;

                if (aMsgType == AMsg.Type.RequestMsg && _gameState == GameState.Online && _accountId != null)
                {
                    var aMsgRequestMsg = aMsg.requestMsg;
                    switch (aMsgRequestMsg.head)
                    {
                    case RequestMsg.Head.BankBaseRequest:

                        var genBankBaseResponseByPlayBank = Tools.GenBankBaseResponseByPlayBank(_myWallet);
                        Sender.Tell(GenTcpWrite(new AMsg()
                        {
                            type        = AMsg.Type.ResponseMsg,
                            responseMsg = new ResponseMsg()
                            {
                                head             = ResponseMsg.Head.BankBaseResponse,
                                bankBaseResponse = genBankBaseResponseByPlayBank
                            }
                        }));
                        break;

                    case RequestMsg.Head.BankItemAllRequest:

                        var genBankItemAllResponseByPlayBank = Tools.GenBankItemResponseByPlayBank(_myWallet);
                        Sender.Tell(GenTcpWrite(new AMsg()
                        {
                            type        = AMsg.Type.ResponseMsg,
                            responseMsg = new ResponseMsg()
                            {
                                head             = ResponseMsg.Head.BankItemResponse,
                                bankItemResponse = genBankItemAllResponseByPlayBank
                            }
                        }));
                        break;

                    case RequestMsg.Head.BankItemCustomRequest:
                        var genBankItemResponseByPlayBank =
                            Tools.GenBankItemResponseByPlayBank(_myWallet,
                                                                aMsgRequestMsg.bankCustomItemRequest.itemIds);
                        Sender.Tell(GenTcpWrite(new AMsg()
                        {
                            type        = AMsg.Type.ResponseMsg,
                            responseMsg = new ResponseMsg()
                            {
                                head             = ResponseMsg.Head.BankItemResponse,
                                bankItemResponse = genBankItemResponseByPlayBank
                            }
                        }));
                        break;


                    case RequestMsg.Head.LogoutRequest:

                        OffLineSave(OutReason.LogOut);
                        _gameState = GameState.OffLine;
                        Become(OffLine);
                        break;

                    default:
                        _tcpActorRef.Tell(Tcp.Close.Instance);
                        throw new ArgumentOutOfRangeException();
                    }
                }
                else
                {
                    _tcpActorRef.Tell(Tcp.Close.Instance);
                    throw new ArgumentOutOfRangeException();
                }
            });
        }
コード例 #7
0
 public SaveBank(PlayerBank playerBank)
 {
     PlayerBank = playerBank;
 }
コード例 #8
0
 public PlayerStatus(PlayerBank playerBank, PlayerGames playerGames, PlayerCharacters playerCharacters)
 {
     PlayerBank       = playerBank;
     PlayerGames      = playerGames;
     PlayerCharacters = playerCharacters;
 }