Hey,
nach gefühlt 20 Jahren, in denen ich nicht gescriptet habe wollte ich mal wieder anfangen. Habe ein /tban-System gescriptet (zum timebannen, wer häts gedacht). Das Problem was ich jetzt habe das die Person nicht gebannt wird, also man trotzdem noch auf den Server kommt und der Grund nicht angezeigt wird.
Hier mal den Code:
Befehl:
ocmd:tban(playerid, params[]){
if(PlayerInfo[playerid][pAdmin] >= 1337){
new pID, grund[64], dauer;
if(sscanf(params, "uis", pID, grund,dauer)) return SendClientMessage(playerid, 0xFF004BFF, "/tban [ID] [Dauer (in Minuten)] [Grund]");
if(PlayerInfo[pID][pAdmin] > PlayerInfo[playerid][pAdmin]){
SendClientMessage(playerid, COLOR_GRAD2, "Du kannst diesen Spieler nicht timebannen, da er ein höheres Adminlevel hat als du!");
return 1;
}
tban(pID,grund,dauer,playerid);
return 1;
}
return 1;
}
Stock tban:
stock tban(playerid, str[], dauer, admin){
new timestamp;
timestamp = gettime();
new sekunden = dauer * 60;
timestamp += sekunden;
new name[MAX_PLAYER_NAME], adminname[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
GetPlayerName(admin, adminname, sizeof(adminname));
format(str, sizeof(str),"AdmCmd: %s wurde von %s für %i Minuten gebannt. Grund: %s", name, adminname, dauer, str);
SendClientMessageToAll(ROT,str);
Kick(playerid);
new pfad[MAX_PLAYER_NAME+16];
format(pfad, sizeof(pfad), "/accounts/%s.ini", name);
dini_IntSet(pfad, "tbanned", timestamp);
return 1;
}
OnPlayerConnect
new timestamp = gettime();
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
new pfad[MAX_PLAYER_NAME+16];
format(pfad, sizeof(pfad), "accounts/%s.ini", name);
new bistgebannt = dini_Int(pfad, "tbanned");
if(timestamp < bistgebannt)
{
new differenz = bistgebannt - timestamp;
new minuten = differenz / 60;
new str[64];
format(str,sizeof(str),"Du bist noch %i Minuten gebannt!",minuten);
SendClientMessage(playerid,0xFAFAFAFF,str);
Kick(playerid);
}
Ich denke das ist wieder was total simples auf das ich einfach grade nicht komme.
/tban Problem
- Kraizy
- Geschlossen
- Erledigt
-
-
if(sscanf(params, "uis", pID, grund,dauer)) return SendClientMessage(playerid, 0xFF004BFF, "/tban [ID] [Dauer (in Minuten)] [Grund]");
Ist mir beim überfliegen aufgefallen
Du packst den Grund in ein Integer und die Dauer in einen string
-
fail Ich werds gleich mal ausprobieren obs jetzt funktioniert.
//edit: Funktioniert leider immernoch nicht.
-
Lass dir doch mal die Zeit variablen beim connecten ausgeben (printf) oder allgemein debuggen mit print / printf
-
Und wenn ich mich nicht irre musst du neuerdings wegen eines Buggs (glaube ich) verzögern das der Spieler gekickt wird.
meine Lösung :D beim kicken
forward KickEx(playerid);
public KickEx(playerid)
{
if(GetPVarInt(playerid,"GetKick") == 1) {
Kick(playerid);
}
else {
SetPVarInt(playerid,"GetKick",1);
SetTimerEx("KickEx",2500,0,"i",playerid);
}
return 1;
}
-
Das ist kein Bug das wurde absichtlich so geändert das Kick quasi eine "höhere abarbeites Priorität" hat als zb SendClientMessage
-
Das ist kein Bug das wurde absichtlich so geändert das Kick quasi eine "höhere abarbeites Priorität" hat als zb SendClientMessage
"glaube ich" sage ich da mal nur. Ist mir eigtl relaitv egal weshalb, meine Lösung funktioniert.Und mein 1. Beitrag im Thema bezieht auf die Tatsache das kein Grund angezeigt wird by the way da ichs vergessen habe zu erwähnen.
-
breadfish.de
Hat das Thema geschlossen.