public virtual void ExchangeDealingItemsAndGold() { if (CoCharacter == null) { return; } var tempDealingItems = new List <DealingCharacterItem>(DealingItems); for (var i = nonEquipItems.Count - 1; i >= 0; --i) { var nonEquipItem = nonEquipItems[i]; for (var j = tempDealingItems.Count - 1; j >= 0; --j) { var dealingItem = tempDealingItems[j]; if (dealingItem.nonEquipIndex == i && nonEquipItem.amount >= dealingItem.amount) { nonEquipItem.amount -= dealingItem.amount; if (nonEquipItem.amount == 0) { nonEquipItems.RemoveAt(i); } else { nonEquipItems[i] = nonEquipItem; } CoCharacter.IncreaseItems(dealingItem.dataId, dealingItem.level, dealingItem.amount, dealingItem.durability); tempDealingItems.RemoveAt(j); break; } } } Gold -= DealingGold; CoCharacter.Gold += DealingGold; }
protected virtual void StopDealing() { if (CoCharacter == null) { ClearDealingData(); return; } // Set dealing state/data for co player character entity CoCharacter.ClearDealingData(); CoCharacter.CoCharacter = null; // Set dealing state/data for player character entity ClearDealingData(); CoCharacter = null; }
protected virtual void NetFuncConfirmDealing() { if (DealingState != DealingState.LockDealing || !(CoCharacter.DealingState == DealingState.LockDealing || CoCharacter.DealingState == DealingState.ConfirmDealing)) { GameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.InvalidDealingState); return; } DealingState = DealingState.ConfirmDealing; if (DealingState == DealingState.ConfirmDealing && CoCharacter.DealingState == DealingState.ConfirmDealing) { ExchangeDealingItemsAndGold(); CoCharacter.ExchangeDealingItemsAndGold(); StopDealing(); } }
protected virtual void NetFuncAcceptDealingRequest() { if (CoCharacter == null) { GameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.CannotAcceptDealingRequest); StopDealing(); return; } if (Vector3.Distance(CacheTransform.position, CoCharacter.CacheTransform.position) > GameInstance.conversationDistance) { GameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.CharacterIsTooFar); StopDealing(); return; } // Set dealing state/data for co player character entity CoCharacter.ClearDealingData(); CoCharacter.DealingState = DealingState.Dealing; CoCharacter.RequestAcceptedDealingRequest(ObjectId); // Set dealing state/data for player character entity ClearDealingData(); DealingState = DealingState.Dealing; RequestAcceptedDealingRequest(CoCharacter.ObjectId); }
protected virtual void NetFuncSendDealingRequest(PackedUInt objectId) { BasePlayerCharacterEntity targetCharacterEntity = null; if (!TryGetEntityByObjectId(objectId, out targetCharacterEntity)) { GameManager.SendServerGameMessage(ConnectionId, GameMessage.Type.NotFoundCharacter); return; } if (targetCharacterEntity.CoCharacter != 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; } CoCharacter = targetCharacterEntity; targetCharacterEntity.CoCharacter = this; // Send receive dealing request to player CoCharacter.RequestReceiveDealingRequest(ObjectId); }