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); }
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 }); }
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); }
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); }
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); }
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(); } }); }
public SaveBank(PlayerBank playerBank) { PlayerBank = playerBank; }
public PlayerStatus(PlayerBank playerBank, PlayerGames playerGames, PlayerCharacters playerCharacters) { PlayerBank = playerBank; PlayerGames = playerGames; PlayerCharacters = playerCharacters; }