OK, erstmal Entwarnung für daRope. Die Probleme sind vermutlich ein Timingproblem. Wenn ich ein playerinfo anwende, muss dies so schnell wie möglich geschehen. Es ist daher durchaus möglich, dass bei einem etwas beschäftigten Server das playerinfo() zu spät kommt. Ob LogD da etwas schneller ist, kann ich nicht sagen. Egal wie es ist, auf den Durchlauf der Suchroutine kann man daher nicht verzichten. Hier die neue Version. Scheint zu funktionieren:
Code:
/* Default access switch.
Changes default_access to 0, if admin is entering the server and back to 1 if the last admin disconnects.
v1.2 by [WING]Black Knight, 8.6.2002 */
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_CONSOLE 131072
new STRING_VERSION[MAX_DATA_LENGTH] = "v1.2";
new admins=0;
new Message1[MAX_TEXT_LENGTH]="Admins offline! admin_vote_kick, admin_vote_map and say rockthevote enabled";
public default_entered(HLCommand, HLData){
new strName[MAX_NAME_LENGTH];
new UserIndex;
new strUserIndex[MAX_TEXT_LENGTH];
new Message0[MAX_TEXT_LENGTH];
convert_string(HLData,strUserIndex,MAX_TEXT_LENGTH);
UserIndex=strtonum(strUserIndex);
playerinfo(UserIndex,strName, MAX_NAME_LENGTH);
if(access(ACCESS_BAN,strName)){
if(admins==0){
exec("default_access 0");
say("1 Admin online! admin_vote_kick, admin_vote_map and say rockthevote disabled");
}
admins++;
}
if(admins!=0){
snprintf(Message0,MAX_TEXT_LENGTH,"%i Admin(s) online! admin_vote_kick, admin_vote_map and say rockthevote disabled",admins);
message(strName,Message0);
}
else{
message(strName,Message1);
}
return PLUGIN_CONTINUE;
}
public plugin_disconnect(HLUserName, UserIndex){
new strName[MAX_NAME_LENGTH];
new maxplayers = maxplayercount();
new i;
new da;
admins=0;
for(i=1; i<=maxplayers; i++){
strinit(strName);
if(playerinfo(i,strName,MAX_NAME_LENGTH)==1){
if(access(ACCESS_BAN,strName)!=0){
admins++;
}
}
}
da=getvar("default_access");
if(admins==0 && da==0){
exec("default_access 1");
say(Message1);
}
return PLUGIN_CONTINUE;
}
public plugin_init() {
plugin_registerinfo("Default Access Switch","default_access switch while away",STRING_VERSION);
plugin_registercmd("default_entered","default_entered",ACCESS_CONSOLE,"");
exec("logd_reg 51 admin_command default_entered");
return PLUGIN_CONTINUE;
}
_________________
Der schwarze Ritter triumphiert immer...
WING-Clan