/*
Shows current players online, then a list with players online
(C) 2015, Oxxy, v1.9.5
v1.0 initial release.
v1.1 added @online atcommand.
v1.2 added GMs online list.
v1.2.1 fixed typos.
v1.2.2 fixed menu.
v1.2.3 fixed more typos.
v1.3 added config to show location, level, location+level or nothing but name.
v1.3.1 fixed MORE typos, finally should be working.
v1.4 Added .MaxGrpID config. See OnInit for description.
v1.5 Added GM Level to show together with GM's name. Location of GM will only be shown if the variable .showLocation equals to 1 and your group id is more than 0
v1.5.1 fixed small typo in check of group id. (OnPCLoginEvent and OnPCLogoutEvent)
v1.5.2 Instead of SQL query, update waitingroom with script command getusers(1). - ty Dastgir for pointing that out.
v1.5.3 Merged .showLocation and .showLevel variable into one bitwise variable .showPlayerInfo - ty Dastgir
v1.5.4 Added Job level to show in NPC. so .showPlayerInfo = 1; shows Base and Job level together.
v1.6 Added Peak Online
v1.7 Added disabling of location show when WOE is on if setting .checkWOE equal to 1.
v1.8 Added menu after every .maxPlayersPerPage players, that will allow you to quit at any point, or just continue listing through players.
v1.8.1 translated russian string, accidently got from my script.
v1.8.2 now only players with .minGrpID can see GMs location, fixed one more russian string. hehe.
v1.9 Added Job to show, changed variable .showLocLevel to .showPlayerInfo
v1.9.1 Fixed peak online. Now should be saving properly.
v1.9.2 Cleaned up code a bit(GM location showing code)
v1.9.3 Swapped array variables from .NPC_type to $Global_type -> GMs will be still shown even if you @reloadscript
v1.9.4 Added .showPeakOnline bitwise variable. Check OnInit
v1.9.5 Added new option .announceCurrentOnline. Check OnInit
TODO:
Add support of the .hidePlayerInfoWOE variable.
*/
prontera,155,167,6 script Players Online 700,{
OnShowOnline:
query_sql "SELECT `name`,`last_map`,`base_level`,`job_level`,`class` FROM `char` WHERE `online` > 0 ORDER BY `last_map`", .@names$, .@loc$, .@blevel, .@jlevel, .@job;
while(1) {
if(select("Players Online:GMs online["+getarraysize($GM_Name$)+"]") == 2) {
//GMs online
if(getarraysize($GM_Name$) == 0) {
mes "At the moment, there're no GMs online.";
//close;
break;
}
mes "[GMs online: ^0000FF"+getarraysize($GM_Name$)+"^000000]";
for(.@i = 0; .@i < getarraysize($GM_Name$); .@i++) {
getmapxy(.Map$,.x,.y, 0, $GM_Name$[.@i]);
mes "["+$GM_Level[.@i]+"]"+$GM_Name$[.@i]+""+((.showPlayerInfo&2 && getgroupid() > .MinGrpID)?": "+.Map$+"":"")+"";
}
//close;
break;
}
//Players Online
mes "[Players Online: ^FF0000"+getarraysize(.@names$)+"^000000"+((.showPeakOnline&1)?" / ^FF0000"+$PeakOnline+"^000000]":"]")+"";
for(.@i = 0; .@i < getarraysize(.@names$); .@i++) {
mes "["+(.@i+1)+"] "+.@names$[.@i]+" "+((.showPlayerInfo&4)? " - "+jobname(.@job[.@i])+"":"")+""+((.showPlayerInfo&1)? " - Lvl: "+.@blevel[.@i]+"/"+.@jlevel[.@i]+" ":"")+""+ (((.showPlayerInfo&2 && !.checkWOE) || (.showPlayerInfo&2 && .checkWOE && (.hidePlayerInfoWOE&2 && agitcheck() == 0 && agitcheck2() == 0)))? " - Map: "+.@loc$[.@i]+"":"");
if ( ((.@i+1) % .maxPlayersPerPage) == 0 && .@names$[.@i+1] != "" ) {
if(select("Show next "+.maxPlayersPerPage+" players:Close") == 2) close;
next;
}
}
close;
}
OnInit:
.maxPlayersPerPage = 20; // Max number per page that'll be shown.
.MinGrpID = 1; // Min. group id to show in GM list. Also player with grp id < .MinGrpID can't see GMs location.
.MaxGrpID = 99; // Max. group id to show in GM list. Players that have grp id > .MaxGrpID won't be shown in the GMs list.
.showPlayerInfo = 7; // Bitwise variable,
// 1 = Show only Base/Job Level after the name
// 2 = Show only Map after the name
// 3 = Show Base/Job Level + Map after the name
// 4 = Show only Job after the name
// 5 = Show Job + Base/Job Level
// 6 = Show Job + Map
// 7 = Show Job + Base/Job level + Map
.checkWOE = 1; // If you set this to 1, then it will not show locations during WOE.
// 0 to disable this check.
.hidePlayerInfoWOE = 1; // Hide players info while WOE is on? Bitwsie Variable; .checkWOE have to be set to 1.
// 1 = Hide only Base/Job Level
// 2 = Hide only Map
// 3 = Hide Base/Job Level + Map
// 4 = Hide only Job
// 5 = Hide Job + Base/Job Level
// 7 = Hide Job + Base/Job Level + Map
.showPeakOnline = 3; // Show peak online? Bitwise variable
// 1 = show only in NPC dialog
// 2 = show only in waitingroom
// 3 = show in NPC and waitingroom together.
.announceCurrentOnline = 1; // Announce current online every hour?
bindatcmd "online", strnpcinfo(0)+"::OnShowOnline";
initnpctimer;
end;
OnTimer1000:
delwaitingroom;
waitingroom "Players online: "+getusers(1)+" "+((.showPeakOnline&2)?"/ "+$PeakOnline+"":"")+"",0;
if(.announceCurrentOnline && gettime(2) == 00 && gettime(1) == 01)
announce "[System]: There"+((getusers(1) > 2)?"'re":"'s")+" "+getusers(1)+" player"+((getusers(1)>2)?"s":"")+" online.",bc_all;
stopnpctimer;
initnpctimer;
end;
OnPCLoginEvent:
if($PeakOnline < getusers(1)) $PeakOnline = getusers(1);
if(getgroupid() < .MinGrpID || getgroupid() > .MaxGrpID) end;
$GM_Name$[getarraysize($GM_Name$)] = strcharinfo(0);
$GM_Level[getarraysize($GM_Level)] = getgroupid();
end;
OnPCLogoutEvent:
if(getgroupid() < .MinGrpID || getgroupid() > .MaxGrpID) end;
for(.@i = 0; .@i < getarraysize($GM_Name$); .@i++) {
if(strcharinfo(0) != $GM_Name$[.@i]) continue;
deletearray $GM_Name$[.@i],1;
deletearray $GM_Level[.@i],1;
end;
}
end;
}