[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

  • Man sollte wenigstens paar Kentnisse über SQL-Befehle haben.



    new query[64],pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
    mysql_format(dbhandle,query,64,"SELECT `passwort` FROM `accounts` WHERE `spielername` = '%e' LIMIT 1;",pName);
    mysql_tquery(dbhandle,query,"CheckAccount","i",playerid);


    [tabmenu]


    [tab='dbhandle ']
    dbhandle = Ist die Verbindungskennung , welche du an eine variabel weitergibt mit
    mysql_connect(HOST[], USER[], DATABASE[], PASSWORD[], PORT);
    [tab='query']
    Hier kommt dein SQL-Befehl den du an den MySQL Server senden möchtest rein
    [tab=' CheckAccount']
    Dies ist das Callback, welches aufgerufen wird sobald das gesendete query verarbeitet wurde
    [tab='i']
    Die jeweiligen Datentypen der Argumente
    i,d = integer
    s = string
    f = float
    x = hexdezimal
    c = Für eine einzelnen Buchstaben (character)
    [tab='playerid']
    Somit wird die Funktion aufgerufen, da diese nur 1 Argument hat mit dem wert, welcher sich hinter playerid verbirgt.
    [/tabmenu]




    forward CheckAccount(playerid);
    public CheckAccount(playerid) {
    new res[2];
    cache_get_data(res[0],res[1]);
    switch(res[0]){
    case false:{
    print("Spieler nicht gefunden");
    }
    case true:{
    print("Spieler gefunden");
    }
    }
    return 1;
    }



    mit cache_get_data wird zurückgegeben wie oft der Eintrag in der Datenbank vorkommt, sollte er nicht vorkommen so wird logischerweise 0(false) zurück geben.
    Durch das LIMIT 1 im query wird nur nach einem Datensatz gesucht der die WHERE -Clausel erfüllt und somit kann in dem Fall auch maximal nur 1(true) zurück gegeben werden.

  • Danke Prototype, die paar Kenntnisse habe ich eigentlich. Mit den alten mysql versionen kam ich super klar. Aber das Argument was einmal kam, das mit dem cache etc. alles etwas schneller wird wollte ich halt wechseln. Dann war ich halt am überlegen wie ich das machen soll mit dem callback. Naja, danke für deine Antwort...

  • Brauche mal Hilfe...
    Durch das break, lässt der keine Waffen mehr fallen, ich benutze den break weil das sonst gespammt wird.


    for(new i_slot = 0, gun, ammo; i_slot != 12; i_slot++)
    {
    GetPlayerWeaponData(playerid, i_slot, gun, ammo);
    if(gun != 0 && ammo != 0) CreateDroppedGun(gun, ammo, pPosX+random(2)-random(2), pPosY+random(2)-random(2), pPosZ);
    format(string, sizeof(string), "* %s lässt seine Waffen fallen.",PlayerName(playerid));
    ProxDetector(20, playerid, string, COLOR_PURPLE);
    break;
    }


    Kann wer helfen?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Gaaanz kurze Frag bez. MySQL.


    Wenn man mysql_format() benutzt um einen Query zu formatieren, ist es da noch nötig vor der Formatierung, nen String zu escapen ? Weil es ja die %e Escape-Funktion in msql_format gibt, denke ich wäre das unnötig oder ?


    Edit1. habs das hier übersehen. Wäre also geklärt. ^^
    Edit2. Edit1 editiert

    Code
    %e  Escapes data directly without the need to call mysql_escape_string() before

    2 Mal editiert, zuletzt von Makaveli ()

  • Ok das wäre dann bei mir geklärt, wenn ich nun die San News Base betretet und dann rausgehe funktioniert alles.
    Aber wenn ich beim Sfpd reingehe komme ich dann bei der San News Base wieder raus.
    else if (IsPlayerInRangeOfPoint(playerid,4.0,2814.7673,973.4995,10.7500))// San News Enter
    {
    if(PlayerInfo[playerid][pLeader] == 9 || PlayerInfo[playerid][pMember] == 9 || IsACop(playerid))
    {
    SetPlayerPos(playerid,246.375991,109.245994,1003.218750);
    SetPlayerInterior(playerid,10);
    SetPlayerVirtualWorld(playerid, 6);
    SetPlayerFacingAngle(playerid,2.5225);
    }
    }
    else if (IsPlayerInRangeOfPoint(playerid,4.0,246.375991,109.245994,1003.218750))//San News Exit
    {
    if(PlayerInfo[playerid][pLeader] == 9 || PlayerInfo[playerid][pMember] == 9 || IsACop(playerid))
    {
    SetPlayerPos(playerid,2814.7673,973.4995,10.7500);
    SetPlayerFacingAngle(playerid,222.1635);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid, 0);
    }
    }
    else if(IsPlayerInRangeOfPoint(playerid,4.0,-1605.6937,711.6380,13.8672))//SFPD/LSPD /enter
    {
    SetPlayerPos(playerid,246.3121,109.1336,1003.2188);
    SetPlayerInterior(playerid,10);
    SetPlayerFacingAngle(playerid,358.7832);
    }
    else if (IsPlayerInRangeOfPoint(playerid,4.0,246.6916,109.3309,1003.2188))//SFPD/LSPD /exit
    {
    SetPlayerPos(playerid,-1605.6937,711.6380,13.8672);
    SetPlayerInterior(playerid,0);

  • Gibt es ein Codeschnipsel in dem man ein bestimmtes Zeichen aus einem String löschen kann.


    Beispiel:
    new kommastr[50];
    format(kommastr,sizeof(kommastr),"Hallo, ich, heiße, Simon");
    und nun will man alle Kommas raus haben und macht zum Beispiel:
    Chardel(kommastr,',');
    und der neue string ist: "hallo ich heiße Simon"


  • strdel(kommastr,strfind(kommastr,","),strfind(kommastr,",")+1);

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