public void DeliverItems(Session User1, Session User2) { lock (mSyncRoot) { using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { foreach (Item Item in mUserOneOffers.Values) { User1.InventoryCache.RemoveItem(Item.Id); User2.InventoryCache.Add(Item); Item.MoveToUserInventory(MySqlClient, User2.CharacterId); } foreach (Item Item in mUserTwoOffers.Values) { User2.InventoryCache.RemoveItem(Item.Id); User1.InventoryCache.Add(Item); Item.MoveToUserInventory(MySqlClient, User1.CharacterId); } } User1.SendData(InventoryRefreshComposer.Compose()); User2.SendData(InventoryRefreshComposer.Compose()); mUserOneOffers.Clear(); mUserTwoOffers.Clear(); mTradeStage = TradeStage.Dead; } }
public bool AcceptTrade(bool User) { lock (mSyncRoot) { if (mTradeStage == Trading.TradeStage.Finalized) { return(false); } if (User) { mUserOneAccepted = true; } else { mUserTwoAccepted = true; } if (mUserOneAccepted && mUserTwoAccepted) { mTradeStage = mTradeStage == Trading.TradeStage.Finalizing ? TradeStage.Finalized : TradeStage.Finalizing; mUserOneAccepted = false; mUserTwoAccepted = false; } } return(true); }
private IEnumerator SetTradeStage(TradeStage newStage) { tradeStage = newStage; switch (tradeStage) { case TradeStage.ChoosingOffer: yield return(StartCoroutine(SetUIForChoosingOffer())); break; case TradeStage.ConfirmingOfferChoice: yield return(StartCoroutine(SetUIForConfirmingOfferChoice())); break; case TradeStage.WaitingForOtherUserOffer: yield return(StartCoroutine(SetUIForWaitingForOtherUserOffer())); break; case TradeStage.DecidingOnOffer: yield return(StartCoroutine(SetUIForDecidingOnOffer())); break; case TradeStage.WaitingForOtherUserDecisionOnOffer: yield return(StartCoroutine(SetUIForWaitingForOtherUserDecisionOnOffer())); break; case TradeStage.ConfirmingCancelTrade: yield return(StartCoroutine(SetUIForConfirmingCloseTrade())); break; default: Debug.LogError("Unknown trade stage: " + tradeStage); break; } }
public bool AcceptTrade(bool User) { lock (mSyncRoot) { if (mTradeStage == Trading.TradeStage.Finalized) { return false; } if (User) { mUserOneAccepted = true; } else { mUserTwoAccepted = true; } if (mUserOneAccepted && mUserTwoAccepted) { mTradeStage = mTradeStage == Trading.TradeStage.Finalizing ? TradeStage.Finalized : TradeStage.Finalizing; mUserOneAccepted = false; mUserTwoAccepted = false; } } return true; }
private IEnumerator MainTradeSceneCoroutine() { #region Initial Setup waitingForPlayerChoice = false; tradeReadyToExecute = false; //Check arguments are set if (!TradeEntranceArguments.argumentsSet) { Debug.LogError("Trade entrance arguments not set"); GameSceneManager.CloseTradeScene(); yield break; } //Set up trade stage tradeStage = 0; //Read entrance arguments networkStream = TradeEntranceArguments.networkStream; otherUserName = TradeEntranceArguments.otherUserName; disallowedSendPokemonGuids = TradeEntranceArguments.disallowedSendPokemonGuids; //Set the other user's displayed name according to newly-read-from-entrance-arguments name tradeUIController.RefreshOtherUserName(); //Initialise offered pokemon playerOfferedPokemonLocator = null; otherUserOfferedPokemon = null; //Create comms manager commsManager = new Connection.NetworkTradeCommsManager( stream: networkStream, serializer: Serialize.DefaultSerializer); //Start listening commsManager.StartListening(); #endregion #region Trade Decision Loop tradeUIController.SetInteractionEnabled(true); while (true) { #region Comm Receiving Connection.NetworkCommsManager.Comm comm = commsManager.GetNextComm(); if (comm != null) { yield return(StartCoroutine(HandleTradeComm(comm))); } #endregion #region Actions Needing To Be Taken if (locatorToBeConfirmed != null) { if (tradeStage != TradeStage.ChoosingOffer && tradeStage != TradeStage.ConfirmingOfferChoice) { Debug.LogError("Locator to be confirmed has been set when not in correct trade stage"); } else if (tradeStage == TradeStage.ChoosingOffer) { yield return(StartCoroutine(SetTradeStage(TradeStage.ConfirmingOfferChoice))); } } else if (tryingToConfirmCloseTrade) { if (tradeStage != TradeStage.ChoosingOffer) { Debug.LogError("Trying to close trade when not in correct trade stage"); } else { tryingToConfirmCloseTrade = false; yield return(StartCoroutine(SetTradeStage(TradeStage.ConfirmingCancelTrade))); } } else if (needToNotifyPlayerDisallowedTrade) { if (tradeStage != TradeStage.ChoosingOffer && tradeStage != TradeStage.ConfirmingOfferChoice) { Debug.LogError("Trying to notify player of disallowed offer when not choosing offer pokemon"); } else { needToNotifyPlayerDisallowedTrade = false; textBoxController.Show(); yield return(StartCoroutine( textBoxController.RevealText(otherUserName + disallowedOfferPokemonMessageSuffix, true) )); textBoxController.Hide(); } } #endregion #region Other user making decision being waited for //Waiting for other user's offer and other user's offer has been set if (tradeStage == TradeStage.WaitingForOtherUserOffer && otherUserOfferedPokemon != null) { yield return(StartCoroutine(SetTradeStage(TradeStage.DecidingOnOffer))); } //Waiting for other user decision on offer and other user has accepted trade if (tradeStage == TradeStage.WaitingForOtherUserDecisionOnOffer && otherUserAcceptedTrade) { tradeReadyToExecute = true; break; //Break loop to execute trade } #endregion #region User Making Choices during Trade Stages if (waitingForPlayerChoice) { if (textBoxController.userChoiceIndexSelected >= 0) //If choice has been made { switch (tradeStage) { case TradeStage.ConfirmingOfferChoice: yield return(StartCoroutine(ConfirmOfferChoiceMade())); break; case TradeStage.WaitingForOtherUserOffer: yield return(StartCoroutine(CancelOfferedPokemon())); break; case TradeStage.DecidingOnOffer: yield return(StartCoroutine(DecisionOnOfferChoiceMade())); break; case TradeStage.ConfirmingCancelTrade: yield return(StartCoroutine(ConfirmCancelTradeChoiceMade())); break; default: Debug.LogError("Text box waiting for user choice when not on selection trade stage"); break; } } } #endregion if (commsManager.CommsConnErrorOccured) { break; } yield return(new WaitForFixedUpdate()); } #endregion #region Dealing with Circumstances of Loop Breaking if (tradeReadyToExecute) //Trade decided successfully { CloseNetworking(); tradeUIController.Hide(); yield return(StartCoroutine(ExecuteTrade())); CloseTradeScene(); } else if (commsManager.CommsConnErrorOccured) //Connection error occured { yield return(StartCoroutine( textBoxController.RevealText(connErrorOccuredMessage, true) )); CloseTradeScene(); } else //Unknown reason { Debug.LogError("Main trade scene loop closed for unknown reason"); GameSceneManager.CloseTradeScene(); } #endregion }