public void Transfer(Session session, Packet packet) { string newOwnerName; try { newOwnerName = packet.GetString(); } catch (Exception) { ReplyError(session, packet, Error.Unexpected); return; } if (session.Player.Tribesman == null) { ReplyError(session, packet, Error.TribeIsNull); return; } uint newOwnerPlayerId; if (!world.FindPlayerId(newOwnerName, out newOwnerPlayerId)) { ReplyError(session, packet, Error.PlayerNotFound); return; } Dictionary <uint, IPlayer> players; locker.Lock(out players, newOwnerPlayerId, session.Player.Tribesman.Tribe.Owner.PlayerId).Do(() => { if (players == null) { ReplyError(session, packet, Error.Unexpected); return; } ITribe tribe = session.Player.Tribesman.Tribe; if (!tribe.IsOwner(session.Player)) { ReplyError(session, packet, Error.TribesmanNotAuthorized); return; } var result = tribe.Transfer(newOwnerPlayerId); ReplyWithResult(session, packet, result); }); }
public void Remove(Session session, Packet packet) { uint playerId; try { playerId = packet.GetUInt32(); } catch (Exception) { ReplyError(session, packet, Error.Unexpected); return; } IPlayer playerToBeRemoved; if (!world.TryGetObjects(playerId, out playerToBeRemoved)) { ReplyError(session, packet, Error.PlayerNotFound); return; } CallbackLock.CallbackLockHandler lockHandler = delegate { var tribe = session.Player.IsInTribe ? session.Player.Tribesman.Tribe : null; if (tribe == null) { return(new ILockable[] {}); } var locks = strongholdManager.StrongholdsForTribe(tribe) .SelectMany(stronghold => stronghold.LockList()) .ToList(); locks.Add(tribe); return(locks.ToArray()); }; locker.Lock(lockHandler, new object[] {}, session.Player, playerToBeRemoved).Do(() => { if (!session.Player.IsInTribe || !playerToBeRemoved.IsInTribe || playerToBeRemoved.Tribesman.Tribe != session.Player.Tribesman.Tribe) { ReplyError(session, packet, Error.TribeIsNull); return; } ITribe tribe = session.Player.Tribesman.Tribe; if (!tribe.HasRight(session.Player.PlayerId, TribePermission.Kick)) { ReplyError(session, packet, Error.TribesmanNotAuthorized); return; } if (tribe.IsOwner(playerToBeRemoved)) { ReplyError(session, packet, Error.TribesmanIsOwner); return; } var result = session.Player.Tribesman.Tribe.KickTribesman(playerToBeRemoved, session.Player); ReplyWithResult(session, packet, result); }); }