Mehrere Fragen & Probleme.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mehrere Fragen & Probleme.

    Guten Abend,
    ich habe mehrere Fragen & Probleme.

    Mein Script läuft über MySQL, deshalb möchte ich auch das in die Datenbank eingetragen wird, ob der Spieler gebannt ist.
    Falls der gebannt ist soll

    Fangen wir mit dem ersten an und zwar habe ich einen Bann & Kick Befehl.
    Sobald ich jemanden Ingame Kicke oder Banne, gibt der mir als Grund den Spielernamen, des Spielers den ich Bannen/Kicken möchte.

    Kick Befehl:
    [pwn]ocmd:kick(playerid,params[]){
    new userid,grund[64],text[128];
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,COLOR_RED,"Du bist nicht eingeloggt!");
    if(ImTutorial[playerid] == 1)return SendClientMessage(playerid,COLOR_RED,"Du kannst keine Befehle nutzen, da du im Tutorial bist!");
    if(!isAdmin(playerid,5)) return SendClientMessage(playerid, COLOR_RED,"Du bist nicht berechtigt!");
    if(sscanf(params,"u",userid,grund)) return SendClientMessage(playerid,COLOR_GREY,"Nutze: /kick [playerid] [grund]");
    format(text,sizeof(text),"Info: %s wurde vom Server gekickt, Grund: %s.",PlayerName(userid),PlayerName(playerid),grund);
    SendClientMessageToAll(COLOR_RED,text);
    Kick(userid);
    return 1;
    }[/pwn]

    Bann Befehl:

    [pwn]ocmd:ban(playerid,params[]){
    new userid,grund[64],text[128];
    if(!isAdmin(playerid,3)) return SendClientMessage(playerid,COLOR_RED,"Du bist nicht berechtigt!");
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,COLOR_RED,"Du bist nicht eingeloggt!");
    if(ImTutorial[playerid] == 1)return SendClientMessage(playerid,COLOR_RED,"Du kannst keine Befehle nutzen, da du im Tutorial bist!");
    if(IsPlayerConnected(playerid))return SendClientMessage(playerid,COLOR_RED,"Der Spieler ist nicht eingeloggt!");
    if(sscanf(params,"u",userid,grund)) return SendClientMessage(playerid,COLOR_GREY,"Nutze: /ban [playerid] [grund]");
    format(text,sizeof(text),"Info: %s wurde vom Server gebannt, Grund: %s.",PlayerName(userid),PlayerName(playerid),grund);
    SendClientMessageToAll(COLOR_RED,text);
    Ban(userid);
    return 1;
    }[/pwn]

    Okay, kommen wir nun zum nächsten Teil.
    Mein Selfmade Script läuft über MySQL, nun will ich, sobald der Spieler gebannt wird das in die Datenbank eingetragen wird bei 'Gebannt' (Feld erstelle ich dann) ob der Spieler gebannt ist oder nicht.

    Ich habe ein Adminsystem, habe schon paar Befehle erstellt, alles Problemlos.
    Nur was mir fehlt ist folgendes:
    - Adminchat
    - Mutesystem
    - /admins
    - Timebann System
    - SendAdminMessage (An die Admins glaub per Stock)

    Letzte Frage...
    Ich möchte die Funktion hier nutzen: wiki.sa-mp.com/wiki/PlayerSpectatePlayer
    Das sollte per SetTimerEx laufen (3sec), nur weiß ich nicht genau wie ich das durchsetzen soll.
    Aufjedenfall unter 'OnPlayerDeath' ...

    Ich hoffe ihr könnt mir helfen!
    Schönen Abend noch.


    Liebe Grüße,
    John_Thalstroem

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von John_Thalstroem ()

  • moin,

    ich habe deinen Thread schon gestern gelesen, leider unterwegs und konnte da nicht schreiben.
    So, nun bin ich von der Arbeit daheim und kann dir endlich mal antworten ^^.

    Zum erstem hat Manniac recht,
    du hast den Parameter für den STring vergessen.

    Wegen MySQL,
    Hast du denn schon Daten in die Datenbank eingespeichert?
    wenn ja, kannst du das mit dem Ban/ Kick genau so machen, wie mit den anderen Spielerdaten.

    Zu deinen Adminbefehlen,
    hier zeigt sich schonmal, dass du dir da erstmal Grundweissen aneignen solltest, bevor du alles durcheinander machst.
    Es ist zwar gerade anfangs verlockend direkt mit was großem zu starten, aber meist wird das dann nicht, man sollte da doch schon besser erstmal was kleineres anfangen,
    bzw. ich sage ja immer, bevor man mit der SAMP API anfängt zu arbeiten, erstmal pawn an sich richtig lernen.

    - Adminchat
    im Grunde wie ein normaler Chat,
    anstatt an allen, sendest du die Nachricht aber nur an die Spieler, die Admins sind, die anderen Spieler überspringst du.
    Das geht mit einer Schleife:
    [pwn]
    for(new i = 0; i < MAX_PLAYER; i++){
    if(isAdmin(i, 5)){
    SendClientMessage(i, COLOR_RED, message);
    }
    }
    [/pwn]

    - Mutesystem
    Hier kannst du dem Spieler einfach quasi abwürgen glaube bei OnPlayerText machen,
    indem du hier, wenn der Spieler ein Mute hat einfach direkt raushaust.
    [pwn]
    public OnPlayerText(playerid, text[]){
    if(isPlayerMuted(playerid))return 1; // z.B. einfach mit einer Funktion (Habe sie jetzt einfach mal so genannt) abfragen, ob der Spieler Mute hat, kannst du z.B. in der DB Speichern, in PVars, in einem Spielerarray, etc.
    // Wenn Spieler keinen Mute hat
    }
    [/pwn]

    - /admins
    Hier kannst du nun einfach die Schelife vom Adminchat verwenden:
    [pwn]
    for(new i = 0; i < MAX_PLAYER; i++){
    if(isAdmin(playerid,5))SendClientMessage(playerid, COLOR_RED, GetUserName(i)); // Wenn der Spieler i ein Admin ist, wird dem Spieler playerid sein Name ausgegeben. Ich habe die Funktion nun einfach mal GetUserName genannt, du brauchst da halt eine, die von der ID den Spielername ausgibt. Du kannst auch wie GetPlayerName den Namen direkt auslesen, da man das aber öfters braucht ist eien Funktion besser geeignet, wenn du aber schon etwas vom Skript stehen hast, wirst du da wohl eine Funktion zu haben.
    }
    [/pwn]

    - Timebann System
    Einen Ban bedeutet ja, dass er für diese Zeit vom Server verwiesen wird (zumindest im Normalfall).
    Also kannst du nicht mit SetTimerEx() oder so arbeiten, da du mit ihm, wenn er nicht auf dem Srever ist erstmal nichts machen kannst (Stimmt so nicht ganz, aber auch alle Offlinespieler weiter im Skript verwalten zu lassen wäre doch sinnloser Rechenaufwand). Also am besten hier in der DB Speichern, bis wann der Spieler gebannt ist (Datum/ Uhrzeit, z.B. als Timestamp) und wenn der Spieler den Srever betritt, unter OnPlayerConnected abfragen, ob seine Bannzeit länger her ist, als das heutige Datum.
    Der Timestamp z.B. wird mit jeder Sekunde größer, also jede Sekunde +eine Sekunde. also muss der momentane Timestamp größer sein, als der, bis wann er gebannt ist, sonst ist er noch gebannt. Das einfach in eine Abfrage bringen.

    - SendAdminMessage (An die Admins glaub per Stock)
    Erstmal, einen "stock" gibt es nicht.
    Nun Hier kannst du genau die gleiche Schleife wie im Adminchat verwenden, da du genau wie da an alle Admins eine Nachricht sendest:
    [pwn]
    SendMessageToAdmins(message){
    for(new i = 0; i < MAX_PLAYER; i++){
    if(isAdmin(i, 5)){
    SendClientMessage(i, COLOR_RED, message);
    }
    }
    }
    [/pwn]
    Hier hast du direkt eine Funktion, die "message" an alle Admins sendet, z.B. Verwendung:
    [pwn]SendMessageToAdmins("Halle")[/pwn]
    Alle Admins bekonnen "Hallo" angezeigt.
    Die Funktion kannst du so auch für den Adminchat verwenden.

    Weiter gehts dann gleich, muss nun kurz spontan nochmal raus, bis gleich dann.
    Gruß,
    Dennis

    PS: Das sind jetzt ansätze udn halt Tips, mir ist klar das das keine fertige Skripte sind, und da ich seit Jahren nichts mehr mit SAMP zu tun habe, kann hier der eine oder andere Fehler auftauchen, hoffe aber einfach mal ganz optimistisch nicht :D. Versuch es erstmal so, wenn du da noch wo Fragen hast, einfach hier wieder schreiben, dann klappts schon Stück für Stück.