[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich glaub du hast mich nicht verstanden :D , Ich wollte fragen , ob man einen Spieler löschen kann also einen Account über der Datenbank mit einen MySQL befehl. Und wenn ja , welchen?

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • SQL
    DELETE FROM users WHERE name = '%s'


    http://www.w3schools.com/sql/sql_delete.asp

    Okay, bin grad dabei über einen Stock einen TBanAccount zuerstellen. (auf einer weiteren Datenbank) Und bis jetzt keine Errors. Aber warnings:



    warning 213: tag mismatch //Das 8 mal!


    //die Zeile mit den vielen Warning Tags:


    stock CreateTBanAccount(pID)
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(pID,Name, MAX_PLAYER_NAME);
    format(query, sizeof(query), "INSERT INTO `SpielerTimeBanned` (`Name`, `IP`, `TBanGrund`, `vonAdmin`, `Dauer`) VALUES ('%s', '%s', '%s', '%s','%d')", pNameTBan, pTBanIP, pTBanGrund, pvonAdmin, pTBanDauer);//hier
    mysql_query(query);
    printf("[S-INFO] %s wurde von %s für %d verbannt. Grund: %s",pNameTBan,pvonAdmin,pTBanDauer,pTBanGrund);//hier
    return 1;
    }



    //TimeBan Befehl.



    ocmd:timeban(playerid,params[])
    {
    if(SpielerInfo[playerid][pAlevel] >= 1)
    {
    new pID, aname[MAX_PLAYERS],spieler[MAX_PLAYERS],grund[128],dauer,string[128];
    if(sscanf(params,"uds[128]",pID,dauer,grund)) return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /Timeban [Name/ID][Dauer][Grund]");
    //if(!IsPlayerConnected(pid)) return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit der angegebenen ID ist Online");
    {
    format(string,sizeof(string),"[INFO]{00CDFF} %s %s {FFFFFF}hat {00CDFF}%s {FFFFFF}für {00CDFF}%d Minuten {FFFFFF}vom Server verbannt! Grund: {00CDFF}%s",GetPlayerAdminRankName(playerid),aname,spieler,dauer,grund);
    SendClientMessageToAll(0xFF0000FF,string);
    new zeitdauer = Now() + dauer*60;//Warning Code: warning 204: symbol is assigned a value that is never used: "zeitdauer"
    CreateTBanAccount(pID);
    Kick(pID);
    }
    }
    return 1;
    }


    //Die stocks falls du die brauchst:


    stock mktime(hour,minute,second,day,month,year)
    {
    new timestamp2;


    timestamp2 = second + (minute * 60) + (hour * 3600);


    new days_of_month[12];


    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
    days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
    } else {
    days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
    }
    new days_this_year = 0;
    days_this_year = day;
    if(month > 1) { // No January Calculation, because its always the 0 past months
    for(new i=0; i<month-1;i++) {
    days_this_year += days_of_month[i];
    }
    }
    timestamp2 += days_this_year * 86400;


    for(new j=1970;j<year;j++) {
    timestamp2 += 31536000;
    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
    }


    return timestamp2;
    }


    stock Now()
    {
    new hour,minute,second,year,month,day;
    gettime(hour, minute, second);
    getdate(year, month, day);
    return mktime(hour,minute,second,day,month,year);
    }


    Jeffry

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • Kann mir einer sagen wieso die Schranke nicht wieder Runterfährt? :D



    ocmd:mv(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,8.0,1544.69165, -1630.95276, 13.08530))return 1;
    {
    SendClientMessage(playerid,FARBE_WEISS,"Die Schranke ist Geöffnet! In 7 Sekunden schließt sie sich Automatisch!");
    MoveSchranke(Tore[0]);
    SetTimer("TorTimer",17000,false);
    }
    if(!IsPlayerInRangeOfPoint(playerid,8.0,1591.73621, -1638.06018, 12.41790))return 1;
    {
    SendClientMessage(playerid,FARBE_WEISS,"Das Tor ist Geöffnet! In 7 Sekunden schließt sich Tor Automatisch!");
    MoveObject(Tore[1],1584.51758, -1637.96497, 12.41790,5.8,0.00000, 0.00000, 0.00000);
    SetTimer("TorTimer",7000,false);
    }
    return 1;
    }


    public TorTimer(playerid)
    {
    SetSchranke(Tore[0],false);
    return 1;
    }


    Die Schranke schließt sich einfach nicht :(


    MfG.

  • @[GeD]Max: So wie es aussieht, schreibst du in die Platzhalter die enum-Werte rein, und nicht die Variablen. Poste mal wie du das enum und die dazugehörige Variable deklariert hast. Oder behebe das Problem gleich, wenn du weißt was ich meine.
    Die andere Warnung kommt, weil du die Variable nie verwendest, sprich die Zeit nicht weiter verarbeitest.


    @DevdogVideos:
    Du gibst nirgends an, ob die Schranke hoch oder runter gehen soll. Außerdem gibst rufst du mit dem Timer der bei ! gestartet wird das Objekt von 0 auf. Um dir zu helfen bräuchte man auch noch die fehlenden Funktionen MoveSchranke und SetSchranke. Oder du versuchst dies erstmal selbst umzusetzen, vielleicht bekommst du es ja schon hin.

  • @[GeD]Max: So wie es aussieht, schreibst du in die Platzhalter die enum-Werte rein, und nicht die Variablen. Poste mal wie du das enum und die dazugehörige Variable deklariert hast. Oder behebe das Problem gleich, wenn du weißt was ich meine.
    Die andere Warnung kommt, weil du die Variable nie verwendest, sprich die Zeit nicht weiter verarbeitest.


    @DevdogVideos:
    Du gibst nirgends an, ob die Schranke hoch oder runter gehen soll. Außerdem gibst rufst du mit dem Timer der bei ! gestartet wird das Objekt von 0 auf. Um dir zu helfen bräuchte man auch noch die fehlenden Funktionen MoveSchranke und SetSchranke. Oder du versuchst dies erstmal selbst umzusetzen, vielleicht bekommst du es ja schon hin.

    Ich bin ganz ehrlich zu dir, ich habe keine Ahnung was du meinst :/ Ich gib dir einfach alles was zum TBan gehört:



    enum SpielerTimeBanned
    {
    pNameTBan[MAX_PLAYER_NAME],
    pTBanIP,
    pTBanGrund,
    pvonAdmin,
    pTBanDauer
    }



    ocmd:timeban(playerid,params[])
    {
    if(SpielerInfo[playerid][pAlevel] >= 1)
    {
    new pID, aname[MAX_PLAYERS],spieler[MAX_PLAYERS],grund[128],dauer,string[128];
    if(sscanf(params,"uds[128]",pID,dauer,grund)) return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /Timeban [Name/ID][Dauer][Grund]");
    //if(!IsPlayerConnected(pid)) return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit der angegebenen ID ist Online");
    {
    format(string,sizeof(string),"[INFO]{00CDFF} %s %s {FFFFFF}hat {00CDFF}%s {FFFFFF}für {00CDFF}%d Minuten {FFFFFF}vom Server verbannt! Grund: {00CDFF}%s",GetPlayerAdminRankName(playerid),aname,spieler,dauer,grund);
    SendClientMessageToAll(0xFF0000FF,string);
    new zeitdauer = Now() + dauer*60;
    CreateTBanAccount(pID);
    Kick(pID);
    }
    }
    return 1;
    }



    stock mktime(hour,minute,second,day,month,year)
    {
    new timestamp2;


    timestamp2 = second + (minute * 60) + (hour * 3600);


    new days_of_month[12];


    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
    days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
    } else {
    days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
    }
    new days_this_year = 0;
    days_this_year = day;
    if(month > 1) { // No January Calculation, because its always the 0 past months
    for(new i=0; i<month-1;i++) {
    days_this_year += days_of_month[i];
    }
    }
    timestamp2 += days_this_year * 86400;


    for(new j=1970;j<year;j++) {
    timestamp2 += 31536000;
    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
    }


    return timestamp2;
    }


    stock Now()
    {
    new hour,minute,second,year,month,day;
    gettime(hour, minute, second);
    getdate(year, month, day);
    return mktime(hour,minute,second,day,month,year);
    }



    stock CreateTBanAccount(pID)//pass[]
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(pID,Name, MAX_PLAYER_NAME);
    format(query, sizeof(query), "INSERT INTO `SpielerTimeBanned` (`Name`, `IP`, `TBanGrund`, `vonAdmin`, `Dauer`) VALUES ('%s', '%s', '%s', '%s','%d')", pNameTBan, pTBanIP, pTBanGrund, pvonAdmin, pTBanDauer);
    mysql_query(query);
    printf("[S-INFO] %s wurde von %s für %d verbannt. Grund: %s",pNameTBan,pvonAdmin,pTBanDauer,pTBanGrund);
    return 1;
    }



    Kannst du mir evlt. dass erklären mit den Variabeln?[/i]

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • @DevdogVideos: Da ich die Funktionen nicht kenne kann ich dir auch nicht sagen wie du sie zu verwenden hast. Wenn, dann solltest du sie posten.


    @[GeD]Max:
    Welche Variable wird mit dem enum SpielerTimeBanned verbunden? (Suche nach [SpielerTimeBanned] und poste das).
    Außerdem solltest du, und das sage ich nicht zu ersten mal, für solche Probleme einen Thread erstellen, da das definitiv keine kleine Scripting Frage ist.

  • Schreibe es mal so:
    ocmd:mv(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,8.0,1544.69165, -1630.95276, 13.08530))return 1;
    {
    SendClientMessage(playerid,FARBE_WEISS,"Die Schranke ist Geöffnet! In 7 Sekunden schließt sie sich Automatisch!");
    MoveSchranke(Tore[0]);
    SetTimerEx("TorTimer",7000,false,"d",0);
    }
    if(!IsPlayerInRangeOfPoint(playerid,8.0,1591.73621, -1638.06018, 12.41790))return 1;
    {
    SendClientMessage(playerid,FARBE_WEISS,"Das Tor ist Geöffnet! In 7 Sekunden schließt sich Tor Automatisch!");
    MoveObject(Tore[1],1584.51758, -1637.96497, 12.41790,5.8,0.00000, 0.00000, 0.00000);
    SetTimerEx("TorTimer",7000,false,"d",1);
    }
    return 1;
    }


    public TorTimer(id)
    {
    if(id == 0) return MoveSchranke(Tore[0]);
    if(id == 1) return MoveObject(Tore[1], ...Startposition von Tore[1] ...);
    return 1;
    }

  • Was ist der Unterschied zwischen stock und Public? Bzw. wozu ist was gut?


    Was sind denn jetzt genau Variabeln? (Bin mir nicht sicher ob ich die richtige Erklärung bekommen habe!)


    Ich denke einen großen unterschied gibt es nicht. Kleine Unterschiede schon


    Public:
    - muss geforwarded werden
    - wird auch wenn es nicht irgendwie aufgerufen wird auf Fehler überprüft


    stock:
    - wird nur auf Fehler überprüft wenn man es auch irgendwo aufruft


    andere Unterschiede hab ich noch nicht festgestellt. Bin für neues gerne offen :D


    /edit:
    Du hattest doch bestimmt Mathe in der Schule, da wurde doch in einer Gleichung Werte wie "x" "y" eingesetzt bzw versucht Rechnerisch herauszufinden gelle ? Kleines beispiel.


    10 = x + 6 |-6
    4 = x


    also muss für die Variable "x" der Wert "4" eingesetzt dann steht ja da 10 = 4 + 6
    (Mathenachhilfe kostet.... Nein Spaß :thumbup: )
    Im Script läuft das ähnlich ab. Du kannst in eine Variable einen bestimmten Wert schreiben und den dann beliebig oft im Script einsetzen (falls global) kleines Beispiel.


    new alter = 17;
    ocmd:test(playerid, params[])


    if(alter<18)
    {
    SendClientMessage(playerid, color, "Ich bin nicht volljährig");
    }
    else
    {
    SendClientMessage(playerid, color, "Ich bin volljährig");
    }


    ocmd:alter(playerid, params[])
    {
    new string[128];
    format(string,sizeof(string),"Ich bin %i Jahre alt/jung", alter);
    SendClientMessage(playerid, color, string);
    return 1;
    }


    Jetzt kannst du oben die Variable "alter" einfach auf 20 machen und dann steht bei /test dort das du volljährig bist und bei /alter das du 20 bist.


    Hoffe du hast es ein wenig verstanden. Bin nicht sehr gut im erklären, habs warscheinlich etwas umständlich gemacht...:D

    Einmal editiert, zuletzt von Nexor ()

  • @[GeD]Max:

    andere Unterschiede hab ich noch nicht festgestellt. Bin für neues gerne offen :D


    Der Hauptunterschied ist der, dass public's mit CallRemoteFunction / CallLocalFunction und vor allem von Timern aufgerufen werden können.
    Stocks hingegen können Arrays zurückgeben, das kann man mit einem public nicht, ebenso können keine Standartwerte in den Parametern von public's eingebaut werden (=optionale Parameter).



    DeaN Hunter:
    Das sollte eigentlich so klappen. Aber versuche mal:
    CreateObject(8390, 1472.90002, -2540.19995, 31.9, 0, 0, 270,150.0);


    Sicher, dass es nicht CreateDynamicObject ist?

  • Dies entspricht die Zeile des ersten Warning:


    CreateObject(8390, 1472.90002, -2540.19995, 31.9, 0, 0, 270);


    http://wiki.sa-mp.com/wiki/CreateObject


    schau dir mal diese Seite an und überprüf die "Argumente" sprich die Parameter ( die Sachen die in der Klammer setehen getrennt durch ein Komma ).
    Der Fehler kommt daher das die Funktion CreateObject 8 Parameter benötigt (welche sind auf der Seite zu entnehmen) und du hast nur 7 angegeben.


    Mit freundlichem Gruß
    Moritz


    Jeffry: Alles klar ich verwende eh eigendlich nur stocks da ich keine Lust hab forwards zu machen.:D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen