Skip to content

Commit abbe25e

Browse files
Fix /liststaff [rank] showing members even when rank is not a staff rank, reduce code duplication in /liststaff
1 parent ff0ef23 commit abbe25e

File tree

2 files changed

+30
-51
lines changed

2 files changed

+30
-51
lines changed

fCraft/Commands/InfoCommands.cs

Lines changed: 26 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -847,61 +847,40 @@ static void OnlineStaffHandler(Player player, CommandReader cmd)
847847

848848
static void ListStaffHandler(Player player, CommandReader cmd)
849849
{
850-
Rank ranktarget = null;
851-
if (cmd.HasNext)
852-
{
850+
Rank onlyRank = null;
851+
if (cmd.HasNext) {
853852
string rankName = cmd.Next();
854-
ranktarget = RankManager.FindRank( rankName );
855-
if (ranktarget == null)
856-
{
853+
onlyRank = RankManager.FindRank( rankName );
854+
if (onlyRank == null) {
857855
player.MessageNoRank(rankName);
858856
return;
859857
}
860858
}
861859

862-
PlayerInfo[] infos;
863-
864-
if (ranktarget == null)
865-
{
860+
if (onlyRank == null) {
866861
player.Message("Below is a list of ALL staff members.");
867-
foreach (Rank rank in RankManager.Ranks)
868-
{
869-
if (rank.IsStaff)
870-
{
871-
infos = PlayerDB.PlayerInfoList
872-
.Where(info => info.Rank == rank)
873-
.ToArray();
874-
if (infos != null && rank.PlayerCount > 0)
875-
{
876-
Array.Sort(infos, new PlayerInfoComparer(player));
877-
IClassy[] itemsEnumerated = infos;
878-
string nameList = itemsEnumerated.Take( 15 ).JoinToString( "&S, ", p => p.ClassyName );
879-
if (rank.PlayerCount > 15) {
880-
player.Message( " {0} &S(&f{1}&S): {2}{3} &S{4} more", rank.ClassyName, rank.PlayerCount, rank.Color, nameList, (rank.PlayerCount - 15) );
881-
} else {
882-
player.Message( " {0} &S(&f{1}&S): {2}{3}", rank.ClassyName, rank.PlayerCount, rank.Color, nameList );
883-
}
884-
}
885-
}
862+
foreach (Rank rank in RankManager.Ranks) {
863+
if (rank.IsStaff) ListStaffOf(player, rank, 15, false);
886864
}
865+
} else if (!onlyRank.IsStaff) {
866+
player.Message("Rank {0}&S is not a staff rank", onlyRank.ClassyName);
867+
} else {
868+
player.Message("Below is a list of ALL staff members of rank {0}&S:", onlyRank.ClassyName);
869+
ListStaffOf(player, onlyRank, 30, true);
887870
}
888-
else
889-
{
890-
player.Message("Below is a list of ALL staff members of rank '" + ranktarget.ClassyName + "&S':");
891-
infos = PlayerDB.PlayerInfoList
892-
.Where(info => info.Rank == ranktarget)
893-
.ToArray();
894-
if (infos != null)
895-
{
896-
Array.Sort(infos, new PlayerInfoComparer(player));
897-
IClassy[] itemsEnumerated = infos;
898-
string nameList = itemsEnumerated.Take(30).JoinToString(", ", p => p.ClassyName);
899-
if (ranktarget.PlayerCount > 15) {
900-
player.Message( " {0} &S(&f{1}&S): {2}{3} &S{4} more", ranktarget.ClassyName, ranktarget.PlayerCount, ranktarget.Color, nameList, (ranktarget.PlayerCount - 30) );
901-
} else {
902-
player.Message( " {0} &S(&f{1}&S): {2}{3}", ranktarget.ClassyName, ranktarget.PlayerCount, ranktarget.Color, nameList );
903-
}
904-
}
871+
}
872+
873+
static void ListStaffOf(Player player, Rank rank, int max, bool showEmpty) {
874+
PlayerInfo[] infos = PlayerDB.PlayerInfoList.Where(info => info.Rank == rank).ToArray();
875+
if (infos == null || (!showEmpty && infos.Length == 0)) return;
876+
877+
Array.Sort(infos, new PlayerInfoComparer(player));
878+
string names = infos.Take(max).JoinToString(", ", p => p.ClassyName);
879+
880+
if (rank.PlayerCount > max) {
881+
player.Message( " {0} &S(&f{1}&S): {2}{3} &S{4} more", rank.ClassyName, rank.PlayerCount, rank.Color, names, (rank.PlayerCount - max) );
882+
} else {
883+
player.Message( " {0} &S(&f{1}&S): {2}{3}", rank.ClassyName, rank.PlayerCount, rank.Color, names );
905884
}
906885
}
907886

@@ -2112,7 +2091,7 @@ static void PingListHandler(Player player, CommandReader cmd) {
21122091

21132092
for (int i = 0; i < list.Length; i++) {
21142093
player.Message(" &7{1}&S - {0}", list[i].Info.ClassyName,
2115-
list[i].Ping.Format().PadLeft(pad, '0'));
2094+
list[i].Ping.Format().PadLeft(pad, '0'));
21162095
}
21172096
player.Message("Showing players {0}-{1} (out of {2}).", offset + 1, offset + list.Length, candidates.Count());
21182097
}

fCraft/Network/PacketReader.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ public OpCode ReadOpCode() {
1414
return (OpCode)ReadByte();
1515
}
1616

17-
byte[] oneBuffer = new byte[1];
17+
byte[] one = new byte[1];
1818
public override byte ReadByte() {
19-
int count = BaseStream.Read(oneBuffer, 0, 1);
20-
if (count == -1) throw new EndOfStreamException("End of file");
21-
return oneBuffer[0];
19+
int count = BaseStream.Read(one, 0, 1);
20+
if (count == 0) throw new EndOfStreamException("End of file");
21+
return one[0];
2222
}
2323

2424
public override short ReadInt16() {

0 commit comments

Comments
 (0)