Example #1
0
 protected virtual void StopDealing()
 {
     if (DealingCharacter == null)
     {
         ClearDealingData();
         return;
     }
     // Set dealing state/data for co player character entity
     DealingCharacter.ClearDealingData();
     DealingCharacter.DealingCharacter = null;
     // Set dealing state/data for player character entity
     ClearDealingData();
     DealingCharacter = null;
 }
Example #2
0
 protected virtual void NetFuncConfirmDealing()
 {
     if (DealingState != DealingState.LockDealing || !(DealingCharacter.DealingState == DealingState.LockDealing || DealingCharacter.DealingState == DealingState.ConfirmDealing))
     {
         gameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.InvalidDealingState);
         return;
     }
     DealingState = DealingState.ConfirmDealing;
     if (DealingState == DealingState.ConfirmDealing && DealingCharacter.DealingState == DealingState.ConfirmDealing)
     {
         ExchangeDealingItemsAndGold();
         DealingCharacter.ExchangeDealingItemsAndGold();
         StopDealing();
     }
 }
Example #3
0
        public virtual void ExchangeDealingItemsAndGold()
        {
            if (DealingCharacter == null)
            {
                return;
            }
            List <DealingCharacterItem> tempDealingItems = new List <DealingCharacterItem>(DealingItems);

            for (int i = nonEquipItems.Count - 1; i >= 0; --i)
            {
                CharacterItem nonEquipItem = nonEquipItems[i];
                for (int j = tempDealingItems.Count - 1; j >= 0; --j)
                {
                    DealingCharacterItem dealingItem = tempDealingItems[j];
                    if (dealingItem.nonEquipIndex == i && nonEquipItem.amount >= dealingItem.characterItem.amount)
                    {
                        if (DealingCharacter.IncreaseItems(dealingItem.characterItem))
                        {
                            // Reduce item amount when able to increase item to co character
                            nonEquipItem.amount -= dealingItem.characterItem.amount;
                            if (nonEquipItem.amount == 0)
                            {
                                nonEquipItems.RemoveAt(i);
                            }
                            else
                            {
                                nonEquipItems[i] = nonEquipItem;
                            }
                        }
                        tempDealingItems.RemoveAt(j);
                        break;
                    }
                }
            }
            this.FillEmptySlots();
            Gold -= DealingGold;
            DealingCharacter.Gold += DealingGold;
        }
Example #4
0
 protected virtual void NetFuncAcceptDealingRequest()
 {
     if (DealingCharacter == null)
     {
         gameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.CannotAcceptDealingRequest);
         StopDealing();
         return;
     }
     if (Vector3.Distance(CacheTransform.position, DealingCharacter.CacheTransform.position) > gameInstance.conversationDistance)
     {
         gameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.CharacterIsTooFar);
         StopDealing();
         return;
     }
     // Set dealing state/data for co player character entity
     DealingCharacter.ClearDealingData();
     DealingCharacter.DealingState = DealingState.Dealing;
     DealingCharacter.RequestAcceptedDealingRequest(ObjectId);
     // Set dealing state/data for player character entity
     ClearDealingData();
     DealingState = DealingState.Dealing;
     RequestAcceptedDealingRequest(DealingCharacter.ObjectId);
 }
Example #5
0
        protected virtual void NetFuncSendDealingRequest(PackedUInt objectId)
        {
            BasePlayerCharacterEntity targetCharacterEntity = null;

            if (!TryGetEntityByObjectId(objectId, out targetCharacterEntity))
            {
                gameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.NotFoundCharacter);
                return;
            }
            if (targetCharacterEntity.DealingCharacter != null)
            {
                gameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.CharacterIsInAnotherDeal);
                return;
            }
            if (Vector3.Distance(CacheTransform.position, targetCharacterEntity.CacheTransform.position) > gameInstance.conversationDistance)
            {
                gameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.CharacterIsTooFar);
                return;
            }
            DealingCharacter = targetCharacterEntity;
            targetCharacterEntity.DealingCharacter = this;
            // Send receive dealing request to player
            DealingCharacter.RequestReceiveDealingRequest(ObjectId);
        }