[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
  • Könnte ein fehlerhafter Zugriff auf ein nicht erstelltes Textdraw sein, somit wird das Textdraw mit der ID 0 verändert. Das kann man mit einem kleinen Trick umgehen, indem man die ID 0 vorbelegt, aber nie anzeiegt:
    Direkt unter OnGameModeInit, als erstes:
    TextDrawCreate(0.0, 0.0," "); //Dummy


    Dann dürfte der Fehler nicht mehr auftreten.

    Es funktioniert jetzt^^, habe es einfach 2mal hinzugefügt und es funktioniert einfach

  • Wie lasse ich die Fahrzeuge jetzt laden?


    public OnPlayerDisconnect(playerid, reason){ for(new i=0; i<sizeof(cInfo); i++) { if(cInfo[i][id_x]==0)continue; if(cInfo[i][besitzer]!=PlayerInfo[playerid][p_id])continue; new query[128]; format(query,sizeof(query),"UPDATE autos SET x='%f',y='%f',z='%f',r='%f' WHERE id='%i'",cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z],cInfo[i][c_r],cInfo[i][db_id]); } if(IsPlayerNPC(playerid)) return 1; aduty[playerid]=false; KillTimer(Payday[playerid]); SaveUserStats(playerid); return 1;}


    Bin ziemlich neu im Gebiet MySQL und ich weiß nicht wie ich die Query ausführen soll :/

    Das Tutorial von Jeffry kann dir da sicherlich behilflich sein:
    [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-5

  • Es hat sich aufjedenfall etwas getan. jetzt wechselt sich es immer so: Ganz kurz kommt das richtige textdraw, dann so: 100 dann 98 102 99 usw..

    Es funktioniert jetzt^^, habe es einfach 2mal hinzugefügt und es funktioniert einfach

    Interessant! Normalerweise sollte es keine Variablen geben, die mit 1 vorbelegt sind, außer das ist irgendwo im Code so gemacht worden.
    Prinzipiell würde ich dir aber trotzdem empfehlen, danach zu suchen, wodurch die Zahlen verursacht werden, das ist ja nicht normal. Dort greift der Code auf Textdraw-Variablen zu, die unbelegt sind, sprich auf Textdraws, die nicht existieren.
    Aber gut, dass du es soweit mit zwei Textdraws umgehen kannst.

  • SetTimerEx("countdown", 1000, 0, "i", sekunden); //Startet Countdown für 10 Sekunden
    forward countdown(sekunden);
    public countdown(sekunden)
    {
    if(sekunden < 0)
    {
    TextDrawHideForAll(textid); //Hier für alle dann verschwinden lassen
    TextDrawDestroy(textid); //Und dann ggf zerstören
    for(new i = 0; i != MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    AddStaticVehicle(603,1996.3143,2107.4868,10.5815,270.9597,75,77); // car 1
    AddStaticVehicle(597,2217.6785,-1144.3297,25.5638,246.3326,0,1); // car cop
    AddPlayerClass(0,2217.9575,-1142.6348,25.8046,246.3701,0,0,0,0,0,0); // person cop
    AddStaticVehicle(597,2225.3459,-1147.9573,25.5848,241.1193,0,1); // car cop 1
    AddPlayerClass(0,2225.7766,-1146.2927,25.8052,241.1622,0,0,0,0,0,0); // person cop 1
    AddStaticVehicle(598,2231.1885,-1147.3685,25.5765,226.9986,0,1); // car cop 1
    AddPlayerClass(0,2232.0166,-1145.8538,25.7969,227.0359,0,0,0,0,0,0); // person cop 2
    AddPlayerClass(0,2207.8762,-1131.3096,25.6250,252.5959,0,0,0,0,0,0); // cop person 3
    AddStaticVehicle(599,2207.8901,-1133.1573,25.8234,252.5959,0,1); // car cop 4
    }
    return 0;
    }
    new string[64];
    format(string,sizeof(string),"Die Runde startet in %d Sekunden",sekunden);
    TextDrawSetString(textid, string);


    C:\Users\-\Desktop\Fade-Copchase\gamemodes\Fade-Copchase.pwn(1823) : error 021: symbol already defined: "SetTimerEx"
    C:\Users\-\Desktop\Fade-Copchase\gamemodes\Fade-Copchase.pwn(1829) : error 017: undefined symbol "textid"
    C:\Users\-\Desktop\Fade-Copchase\gamemodes\Fade-Copchase.pwn(1830) : error 017: undefined symbol "textid"
    C:\Users\-\Desktop\Fade-Copchase\gamemodes\Fade-Copchase.pwn(1848) : error 017: undefined symbol "textid"

  • SetTimerEx() kann global nicht verwendet werden, sondern nur innerhalb einer Funktion. textid existiert nirgends, sprich wurde nicht definiert. Das musst du eben mit dem Namen der Variable ändern, in welcher die textdrawID enthalten ist.

  • SetTimerEx() kann global nicht verwendet werden, sondern nur innerhalb einer Funktion. textid existiert nirgends, sprich wurde nicht definiert. Das musst du eben mit dem Namen der Variable ändern, in welcher die textdrawID enthalten ist.

    C:\Users\-\Desktop\Fade-Copchase\gamemodes\Fade-Copchase.pwn(1824) : error 021: symbol already defined: "SetTimerEx"
    C:\Users\-\Desktop\Fade-Copchase\gamemodes\Fade-Copchase.pwn(1830) : warning 213: tag mismatch
    C:\Users\-\Desktop\Fade-Copchase\gamemodes\Fade-Copchase.pwn(1831) : warning 213: tag mismatch
    C:\Users\-\Desktop\Fade-Copchase\gamemodes\Fade-Copchase.pwn(1849) : warning 213: tag mismatch


    Ich habs jetzt definiert, aber dann kommt halt sowas.

  • @Douq Ich hab irgendwie keinen Plan :/ ich meinte doch das die Fahrzeuge gelöscht werden sollen wenn er Disconnectet aber ich versteh immer noch nicht wie ich das ausführe ?(

    Das Fahrzeug löschen kannst du per DestroyVehicle(). Als Parameter musst du dann die gewünschte vehicleid vom Fahrzeug angeben. Ich weiß jetzt nicht wie du derzeit die Fahrzeuge erstellst, aber wenn du sie beispielsweise so erstellst:


    cInfo[ i ][cvehicleid] = CreateVehicle()


    nutzt du einfach innerhalb der Schleife:
    DestroyVehicle(cInfo[ i ][cvehicleid]);

  • Hey,
    irgendjemand eine Idee, warum mir immer angezeigt wird. /cfraktion [name] bla bla bla?
    Keine Warnings oder Errors.
    ocmd:cfraktion(playerid, params[])
    {
    new fname[256],query[256],fshortname[64],string[256],skinid,typ,cop,farbcode[64];
    if(!isPlayerAnAdmin(playerid,4))return SCM(playerid, ERROR_FARBE, ERROR_ADMIN);
    if(sscanf(params,"s[256]s[16]ddds[56]",fname,fshortname,typ,cop,skinid,farbcode))return SCM(playerid, -1, "Tippe: /cfraktion [name] [abkürzung] [typ 0=Neutral 1=Staat] [cop 0=Nein 1=Ja] [leaderskin-id] [farbcode(HTML)]");
    for(new i=0; i<MAX_FRAC; i++)
    {
    new Float:x, Float:y, Float:z, Float:r, interior, visualworld;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, r);
    interior = GetPlayerInterior(playerid);
    visualworld = GetPlayerVirtualWorld(playerid);
    fInfo[i][fid] = i;
    fInfo[i][f_name] = fname;
    fInfo[i][f_shortname] = fshortname;
    fInfo[i][f_x] = x;
    fInfo[i][f_y] = y;
    fInfo[i][f_z] = z;
    fInfo[i][f_r] = r;
    fInfo[i][f_inter] = interior;
    fInfo[i][f_world] = visualworld;
    fInfo[i][f_typ] = typ;
    fInfo[i][f_cop] = cop;
    fInfo[i][f_leaderskin] = skinid;
    fInfo[i][f_kasse] = 0;
    fInfo[i][f_mats] = 0;
    fInfo[i][f_drogen] = 0;
    fInfo[i][f_color] = farbcode;
    format(query, sizeof(query), "INSERT INTO Fractions (FID, Name, Shortname, X, Y, Z, R, Inter, World, Typ, Cop, Leaderskin, Kasse, Mats, Drogen, Color) VALUES ('%d', '%s', '%s', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%s')",
    i, fInfo[i][f_name], fInfo[i][f_shortname], fInfo[i][f_x], fInfo[i][f_y], fInfo[i][f_z], fInfo[i][f_r], fInfo[i][f_inter], fInfo[i][f_world], fInfo[i][f_typ], fInfo[i][f_cop], fInfo[i][f_leaderskin], fInfo[i][f_kasse], fInfo[i][f_mats], fInfo[i][f_drogen], fInfo[i][f_color]); format(string,sizeof(string), "Du hast erfolgreich die Fraktion %s(F-ID: %d) erstellt.", fname, i);
    mysql_tquery(handle, query);
    SCM(playerid, BABYBLAU, string);
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wenn du die sscanf Funktion nutzt, anstelle dem Plugin, versuche es so:
    if(sscanf(params,"ssddds",fname,fshortname,typ,cop,skinid,farbcode))return SCM(playerid, -1, "Tippe: /cfraktion [name] [abkürzung] [typ 0=Neutral 1=Staat] [cop 0=Nein 1=Ja] [leaderskin-id] [farbcode(HTML)]");

  • Wenn du die sscanf Funktion nutzt, anstelle dem Plugin, versuche es so:
    if(sscanf(params,"ssddds",fname,fshortname,typ,cop,skinid,farbcode))return SCM(playerid, -1, "Tippe: /cfraktion [name] [abkürzung] [typ 0=Neutral 1=Staat] [cop 0=Nein 1=Ja] [leaderskin-id] [farbcode(HTML)]");

    Kannst du dir mal die Query anschauen dass System speichert nicht.
    @Jeffry

  • Habe wohl einen Klammefehler finde ihn aber nicht :(


    ocmd:exit(playerid,params[])
    {
    if(GetPlayerVirtualWorld(playerid) == 1)
    {
    if(IsPlayerInRangeOfPoint(playerid,3,2807.5945,-1174.7563,1025.5703))
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid,1085.0936,-1226.3617,15.8203);
    SetPlayerVirtualWorld(playerid,0);
    SetCameraBehindPlayer(playerid);
    SetPlayerFacingAngle(playerid,270);
    SendClientMessage(playerid,GRAU,"Du hast die Ballas Base verlassen!");
    }
    else if(GetPlayerVirtualWorld(playerid) == 2)
    {
    if(IsPlayerInRangeOfPoint(playerid,3,2807.5945,-1174.7563,1025.5703))
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid,0);
    SetPlayerPos(playerid,2143.6633,-1802.3103,16.1406);
    SetCameraBehindPlayer(playerid);
    SetPlayerFacingAngle(playerid,270);
    SendClientMessage(playerid,GRAU,"Du hast die Hitman Base verlassen!");
    }
    else if(GetPlayerVirtualWorld(playerid) == 3)
    {
    if(IsPlayerInRangeOfPoint(playerid,3,2807.5945,-1174.7563,1025.5703))
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid,0);
    SetPlayerPos(playerid,2495.4055,-1687.8857,13.5166);
    SetCameraBehindPlayer(playerid);
    SetPlayerFacingAngle(playerid,0);
    SendClientMessage(playerid,GRAU,"Du hast die Groove Street Base verlassen!");
    }
    else if(GetPlayerVirtualWorld(playerid) == 4)
    {
    if(IsPlayerInRangeOfPoint(playerid,3,2807.5945,-1174.7563,1025.5703))
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerPos(playerid,-2721.3125,-316.9236,7.8438);
    SendClientMessage(playerid,GRAU,"Du hast die Triadenbase verlassen!");
    }
    else if(GetPlayerVirtualWorld(playerid) == 5)
    {
    if(IsPlayerInRangeOfPoint(playerid,3,2807.5945,-1174.7563,1025.5703))
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerFacingAngle(playerid, 180);
    SetPlayerPos(playerid,-2623.6453,1409.7599,7.0938);
    SendClientMessage(playerid,GRAU,"Du hast die Cali Kartell Base verlassen!");
    }
    else if(GetPlayerVirtualWorld(playerid) == 6)
    {
    if(IsPlayerInRangeOfPoint(playerid,3,2807.5945,-1174.7563,1025.5703))
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerFacingAngle(playerid, 180);
    SetPlayerPos(playerid,1507.8292,730.5375,10.8203);
    SendClientMessage(playerid,GRAU,"Du hast die Yakuza Base verlassen!");
    }
    else
    {
    SendClientMessage(playerid,DUNKELROT,"Du kannst hier nichts verlassen!");
    }
    return 1;
    }


    will halt wenn er einfach /exit eingibt das die nachricht kommt Du kannst hier nichts verlassen


    Meine Errors:
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(204) : error 017: undefined symbol "MySQL_SetupConnection"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(210) : error 017: undefined symbol "AntiDeAMX"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(1986) : error 017: undefined symbol "SaveUserStats"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2047) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2127) : error 017: undefined symbol "sscanf"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2128) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2147) : error 017: undefined symbol "sscanf"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2150) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2168) : error 017: undefined symbol "sscanf"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2169) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2178) : error 017: undefined symbol "sscanf"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2179) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2181) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2221) : error 017: undefined symbol "sscanf"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2225) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2227) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2229) : error 017: undefined symbol "SaveUserStats"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2238) : error 017: undefined symbol "sscanf"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2240) : error 017: undefined symbol "SaveUserStats"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2251) : error 017: undefined symbol "SaveUserStats"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2261) : error 017: undefined symbol "sscanf"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2264) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2265) : error 017: undefined symbol "SpielerName"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2268) : error 017: undefined symbol "SaveUserStats"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2301) : error 017: undefined symbol "sscanf"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\selfmade.pwn(2407) : error 079: inconsistent return types (array & non-array)


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    26 Errors.

  • Wie @Douq: schon meinte du hast immer nach dem if eine { gemacht hast die aber nichtmehr geschlossen sondern danach wieder das gleiche gemacht
    so sollte es passen



    @The Sensei:
    Wird etwas im Mysql Log gepostet ?

  • Kannst du dir mal die Query anschauen dass System speichert nicht.

    Was gibt dir der MySQL Log aus, wenn du den Befehl ausführst?


    EDIT:
    Auf jeden Fall noch:
    fInfo[i][f_name] = fname;
    fInfo[i][f_shortname] = fshortname;
    fInfo[i][f_color] = farbcode;
    zu:
    format(fInfo[i][f_name],256,fname);
    format(fInfo[i][f_shortname],16,fshortname);
    format(fInfo[i][f_color],56,farbcode);


    Sonst speichert es die Texte nicht richtig ab, und überschreibt eventuell andere Werte.
    Gegebenenfalls muss auch die Länge des Queries von 256 erhöht werden, du bist schon über 200 Zeichen ohne gefüllte Platzhalter.


    Der Log sollte da aber Infos geben, wo der Fehler liegt.

    3HZXdYd.png

    3 Mal editiert, zuletzt von Jeffry ()

  • Hey,
    irgendjemand eine Idee, warum mir immer angezeigt wird. /cfraktion [name] bla bla bla?
    Keine Warnings oder Errors.
    ocmd:cfraktion(playerid, params[]){new fname[256],query[256],fshortname[64],string[256],skinid,typ,cop,farbcode[64];if(!isPlayerAnAdmin(playerid,4))return SCM(playerid, ERROR_FARBE, ERROR_ADMIN);if(sscanf(params,"s[256]s[16]ddds[56]",fname,fshortname,typ,cop,skinid,farbcode))return SCM(playerid, -1, "Tippe: /cfraktion [name] [abkürzung] [typ 0=Neutral 1=Staat] [cop 0=Nein 1=Ja] [leaderskin-id] [farbcode(HTML)]");for(new i=0; i<MAX_FRAC; i++){new Float:x, Float:y, Float:z, Float:r, interior, visualworld;GetPlayerPos(playerid, x, y, z);GetPlayerFacingAngle(playerid, r);interior = GetPlayerInterior(playerid);visualworld = GetPlayerVirtualWorld(playerid);fInfo[i][fid] = i;fInfo[i][f_name] = fname;fInfo[i][f_shortname] = fshortname;fInfo[i][f_x] = x;fInfo[i][f_y] = y;fInfo[i][f_z] = z;fInfo[i][f_r] = r;fInfo[i][f_inter] = interior;fInfo[i][f_world] = visualworld;fInfo[i][f_typ] = typ;fInfo[i][f_cop] = cop;fInfo[i][f_leaderskin] = skinid;fInfo[i][f_kasse] = 0;fInfo[i][f_mats] = 0;fInfo[i][f_drogen] = 0;fInfo[i][f_color] = farbcode;format(query, sizeof(query), "INSERT INTO Fractions (FID, Name, Shortname, X, Y, Z, R, Inter, World, Typ, Cop, Leaderskin, Kasse, Mats, Drogen, Color) VALUES ('%d', '%s', '%s', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%s')",i, fInfo[i][f_name], fInfo[i][f_shortname], fInfo[i][f_x], fInfo[i][f_y], fInfo[i][f_z], fInfo[i][f_r], fInfo[i][f_inter], fInfo[i][f_world], fInfo[i][f_typ], fInfo[i][f_cop], fInfo[i][f_leaderskin], fInfo[i][f_kasse], fInfo[i][f_mats], fInfo[i][f_drogen], fInfo[i][f_color]); format(string,sizeof(string), "Du hast erfolgreich die Fraktion %s(F-ID: %d) erstellt.", fname, i);mysql_tquery(handle, query);SCM(playerid, BABYBLAU, string);}return 1;}

    Erhöh die Länge deines Querys auf 512 o.ä. Sollte das immer noch nicht klappen, lass dir den Query per printf() ausgeben und führe in manuell durch, dann solltest du einen aufschlussreichen Fehlercode bekommen

  • Erhöh die Länge deines Querys auf 512 o.ä. Sollte das immer noch nicht klappen, lass dir den Query per printf() ausgeben und führe in manuell durch, dann solltest du einen aufschlussreichen Fehlercode bekommen

    Er gibt das aus bei MySQL: #1136 - Column count doesn't match value count at row 1
    Er schickt diese Nachricht format(string,sizeof(string), "Du hast erfolgreich die Fraktion %s(F-ID: %d) erstellt.", fname, i); solange ab bis MAX_FRAC erreicht wurde. Kann es daran liegen?