コード例 #1
0
ファイル: TradeMgr.cs プロジェクト: remixod/netServer
		/// <summary>
		/// Checks requirements for trading between two characters
		/// </summary>
		/// <param name="initChr">possible initiator of trading</param>
		/// <param name="targetChr">possible target of trading</param>
		public static bool MayProposeTrade(Character initChr, Character targetChr)
		{
			TradeStatus tradeStatus;

			if (targetChr == null || !targetChr.IsInContext)
			{
				tradeStatus = TradeStatus.PlayerNotFound;
				return false;
			}
			else if (initChr.IsLoggingOut || targetChr.IsLoggingOut)
			{
				tradeStatus = TradeStatus.LoggingOut;
			}
			else if (!initChr.IsAlive)
			{
				tradeStatus = TradeStatus.PlayerDead;
			}
			else if (!targetChr.IsInRadius(initChr, MaxTradeRadius))
			{
				tradeStatus = TradeStatus.TooFarAway;
			}
			else if (!targetChr.IsAlive)
			{
				tradeStatus = TradeStatus.TargetDead;
			}
			else if (targetChr.IsStunned)
			{
				tradeStatus = TradeStatus.TargetStunned;
			}
			else if (targetChr.IsIgnoring(initChr))
			{
				tradeStatus = TradeStatus.PlayerIgnored;
			}
			else if (targetChr.TradeWindow != null)
			{
				tradeStatus = TradeStatus.AlreadyTrading;
			}
			else if (targetChr.Faction.Group != initChr.Faction.Group && !initChr.Role.IsStaff)
			{
				tradeStatus = TradeStatus.WrongFaction;
			}
			else if (targetChr.IsLoggingOut)
			{
				tradeStatus = TradeStatus.TargetLoggingOut;
			}
			else
			{
				tradeStatus = TradeStatus.Proposed;
				return true;
			}

			TradeHandler.SendTradeStatus(initChr, tradeStatus);
			return false;
		}
コード例 #2
0
ファイル: Group.cs プロジェクト: ray2006/WCell
		/// <summary>
		/// Check whether the given inviter may invite the given target
		/// </summary>
		public static GroupResult CheckInvite(Character inviter, out Character target, string targetName)
		{
			GroupResult err;
			var inviterMember = inviter.GroupMember;
			var group = inviterMember != null ? inviterMember.Group : null;

			if (group != null && group.IsFull)
			{
				// your group is full
				err = GroupResult.GroupIsFull;
				target = null;
				targetName = string.Empty;
			}
			else if ((inviterMember != null && !inviterMember.IsAtLeastAssistant))
			{
				target = null;
				err = GroupResult.DontHavePermission;
			}
			else
			{
				target = World.GetCharacter(targetName, false);
				if (target == null || inviter == target ||
					(target.Role.IsStaff && !inviter.Role.IsStaff))	// cannot invite staff members without authorization
				{
					// Character is offline or doesn't exist
					err = GroupResult.OfflineOrDoesntExist;
				}
				else if (inviter.Faction.Group != target.Faction.Group)
				{
					// you can't invite anyone from another faction
					err = GroupResult.TargetIsUnfriendly;
				}
				else if (target.Group != null || target.IsInvitedToGroup)
				{
					err = GroupResult.AlreadyInGroup;
				}
				else if (target.IsIgnoring(inviter) && !inviter.Role.IsStaff)
				{
					err = GroupResult.TargetIsIgnoringYou;
				}
				else
				{
					return GroupResult.NoError;
				}
			}

			SendResult(inviter.Client, err, 0, targetName);
			return err;
		}