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; }
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(); } }
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; }
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); }
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); }