[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
  • ocmd:delveh(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid, ROT, "Du bist kein Admin oder dein Rang ist zu niedrig!");
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, ROT, "Du musst in einem Fahrzeug sitzen!");
    for(new i=0; i<sizeof(cInfo); i++)
    {
    new vID=GetPlayerVehicleID(playerid);
    if(cInfo[i][id_x]!=vID)continue;
    new query[128];
    format(query,sizeof(query),"DELETE FROM cars WHERE id=%d");
    mysql_function_query(dbverbindung,query,false,"","");
    DestroyVehicle(vID)
    }
    return 1;
    }
    So? oder muss man das '%d' so schreiben und dahinter dann auch angeben was der Wert ist.




    Und das i des Autos entspricht aber nicht der DB Id oder?
    Wenn ich alleine am Server connecte und 5 Autos habe, steht ja im i 0,1,2,3,4


    Und die Cars in der DB haben ja dann ID 100+, jenachdem wie viel erstellt worden sind/ gelöscht sind

  • public carSavedToDB(carid)
    {
    cInfo[carid][db_id]=cache_insert_id(dbverbindung);
    return 1;
    }


    Hier wird dann die ID, die ja beim Erstellen des Cars in der DB automatisch gesetzt wird, da die ja einfach immer um 1 hochgezählt wird dann in der Variable
    cInfo[carid][db_id] gespeichert oder ?







    Hatte jetzt beim Autoladen schon alles aus der DB geholt und in die Variablen gespeichert, geht genau so wie cache insert dann oder ?
    cInfo[id][db_id]=cache_get_field_content_int(i,"id",dbverbindung);

    Einmal editiert, zuletzt von IceWave ()

  • Weiß einer wie im GF die Wanted Sterne unter der Geldanzeige heißen? Hab für Wanted 3 verschiedene Namen :D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hat einer eine Lösung kriege dieses nicht hin.
    updateHaus(id)
    {
    new string[128];
    if(hInfo[id][h_pickup])
    {
    DestroyPickup(hInfo[id][h_pickup]);
    }
    if(hInfo[id][htext])
    {
    Delete3DTextLabel(hInfo[id][htext]);
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Zum Verkauf\nKosten: %i$\n/hauskaufen", hInfo[id][h_preis]);
    //hInfo[id][htext]=Create3DTextLabel(string, COLOR_RED, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Besitzer: %s\n/enter", hInfo[id][h_besitzer]);
    //hInfo[id][htext]=Create3DTextLabel(string, COLOR_BLUE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    return 1;
    }
    Die Ausgeklammerten sind die warning tags.
    Es gibt bei mir auch einen Bug er updatet es nicht. Die texte und die Pickups sind noch da wurden nicht Gelöscht.


    Code
    D:\SAMP Server\gamemodes\vroleplay.pwn(1819) : warning 213: tag mismatch
    D:\SAMP Server\gamemodes\vroleplay.pwn(1825) : warning 213: tag mismatch


    Lg,
    Skoam

  • Schreibe die updateHaus-Funktion so:
    updateHaus(id)
    {
    new string[128];
    if(hInfo[id][h_pickup] != -1)
    {
    DestroyPickup(hInfo[id][h_pickup]);
    hInfo[id][h_pickup] = -1;
    }
    if(hInfo[id][htext] != -1)
    {
    Delete3DTextLabel(hInfo[id][htext]);
    hInfo[id][htext] = Text3D:-1;
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Zum Verkauf\nKosten: %i$\n/hauskaufen", hInfo[id][h_preis]);
    hInfo[id][htext]=Create3DTextLabel(string, COLOR_RED, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Besitzer: %s\n/enter", hInfo[id][h_besitzer]);
    hInfo[id][htext]=Create3DTextLabel(string, COLOR_BLUE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    return 1;
    }


    Dann füge im enum, dort wo du "htext" deklariert hast "Text3D:" vor das "htext" hinzu, dass es so aussieht:
    Text3D:htext,


    Und füge bei OnGameModeInit, ganz als erstes, das hier ein:
    for(new i=0; i<sizeof(hInfo); i++)
    {
    hInfo[i][h_pickup] = -1;
    hInfo[i][htext] = Text3D:-1;
    }


    Warum tritt das Problem auf? Es gibt auch eine ID 0, das wird bei dem Code den du hattest nicht berücksichtigt.

  • Jeffry: Habe es gemacht und mit Text3D wusste ich auch habe ich auch drinne mit deinem Code habe ich jetzt 3Warnings.

    Code
    D:\SAMP Server\gamemodes\vroleplay.pwn(1817) : warning 213: tag mismatch
    D:\SAMP Server\gamemodes\vroleplay.pwn(1826) : warning 213: tag mismatch
    D:\SAMP Server\gamemodes\vroleplay.pwn(1832) : warning 213: tag mismatch
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    3 Warnings.
  • if (dialogid==DIALOG_FLEIHENBMX)
    {
    if(response)
    {
    if(radmou[playerid]!=0)return(SendClientMessage(playerid,ROT,"Du hast bereits ein Fahrzeug geliehen! Du kannst es mit '/abgeben' abgeben!");
    if(radbmx[playerid]!=0)return(SendClientMessage(playerid,ROT,"Du hast bereits ein Fahrzeug geliehen! Du kannst es mit '/abgeben' abgeben!");
    SendClientMessage(playerid,GRUEN,"Viel Spaß mit deinem BMX!");
    SetTimerEx("Radbmxtimer",600000,false,"i",playerid);
    GivePlayerMoney(playerid,-48);
    radbmx[playerid]=CreateVehicle(481,479.0388,-1501.8889,20.0479,263.1277,0,0,-1);
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast den Vorgang abgebrochen!");
    }
    }


    Hi, weiß jemand was hier falsch ist? bekomme viele Errors wie diese hier:
    C:\Users\Andi\Desktop\EastWestReallife\gamemodes\EastWest.pwn(1327) : error 001: expected token: ")", but found ";"
    C:\Users\Andi\Desktop\EastWestReallife\gamemodes\EastWest.pwn(1328) : error 001: expected token: ";", but found "if"

  • if (dialogid==DIALOG_FLEIHENBMX)
    {
    if(response)
    {
    if(radmou[playerid]!=0)return SendClientMessage(playerid,ROT,"Du hast bereits ein Fahrzeug geliehen! Du kannst es mit '/abgeben' abgeben!");
    if(radbmx[playerid]!=0)return SendClientMessage(playerid,ROT,"Du hast bereits ein Fahrzeug geliehen! Du kannst es mit '/abgeben' abgeben!");
    SendClientMessage(playerid,GRUEN,"Viel Spaß mit deinem BMX!");
    SetTimerEx("Radbmxtimer",600000,false,"i",playerid);
    GivePlayerMoney(playerid,-48);
    radbmx[playerid]=CreateVehicle(481,479.0388,-1501.8889,20.0479,263.1277,0,0,-1);
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast den Vorgang abgebrochen!");
    }
    }


    die Klammer ( nach dem return entfernen

  • lol war zu doof das zu sehen xD
    Noch eine Frage, funktioniert das so, dass man 2 if Abfragen so wie hier in den Dialog macht?
    if (dialogid==DIALOG_ABGEBEN)
    {
    if(response)
    {
    if(radmou[playerid]!=0)
    {
    KillTimer(Radmoutimer(playerid));
    SendClientMessage(playerid,GOLD,"Du hast dein Fahrzeug abgegeben, jetzt kannst du wieder ein neues mieten!");
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast kein Fahrzeug welches du abgeben kannst!");
    }

    if(radbmx[playerid]!=0)
    {
    KillTimer(Radbmxtimer(playerid));
    SendClientMessage(playerid,GOLD,"Du hast dein Fahrzeug abgegeben, jetzt kannst du wieder ein neues mieten!");
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast kein Fahrzeug welches du abgeben kannst!");
    }
    }
    }



    Und wie könnte ich das machen dass abgefragt wird ob radmou oder radbmx ungleich 0 ist, und dann wenn radbmx ungleich 0 ist dass destroyt wird, wenn nicht das andre

  • @Skoam: Komisch.
    updateHaus(id)
    {
    new string[128];
    if(hInfo[id][h_pickup] != -1)
    {
    DestroyPickup(hInfo[id][h_pickup]);
    hInfo[id][h_pickup] = -1;
    }
    if(hInfo[id][htext] != Text:-1)
    {
    Delete3DTextLabel(hInfo[id][htext]);
    hInfo[id][htext] = Text3D:-1;
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Zum Verkauf\nKosten: %i$\n/hauskaufen", hInfo[id][h_preis]);
    hInfo[id][htext]=Create3DTextLabel(string, COLOR_RED, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10.0, 0, 1);
    }
    else
    {
    hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Besitzer: %s\n/enter", hInfo[id][h_besitzer]);
    hInfo[id][htext]=Create3DTextLabel(string, COLOR_BLUE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10.0, 0, 1);
    }
    return 1;
    }
    Einen Fehler habe ich gefunden, den hab ich auch selbst rein gemacht (bei der if-Abfrage den Tag vergessen).
    Möglicherweise liegen die anderen beiden daran, dass du 10 anstatt 10.0 geschrieben hast.

  • Wieso speichert er die Spieler bei einem GMX nicht ?


    public OnGameModeExit()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    SetPlayerSkin(i, SpielerInfo[i][pSkin]);
    SavePlayer(i);
    }
    return 1;
    }


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Und wie könnte ich das machen dass abgefragt wird ob radmou oder radbmx ungleich 0 ist, und dann wenn radbmx ungleich 0 ist dass destroyt wird, wenn nicht das andre


    Das kannst du so machen

    if (dialogid==DIALOG_ABGEBEN)
    {
    if(response)
    {
    if(radmou[playerid]!=0)
    {
    KillTimer(Radmoutimer(playerid));
    SendClientMessage(playerid,GOLD,"Du hast dein Fahrzeug abgegeben, jetzt kannst du wieder ein neues mieten!");
    }
    else
    {
    if(radbmx[playerid]!=0)
    {
    KillTimer(Radbmxtimer(playerid));
    SendClientMessage(playerid,GOLD,"Du hast dein Fahrzeug abgegeben, jetzt kannst du wieder ein neues mieten!");
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast kein Fahrzeug welches du abgeben kannst!");
    }
    }
    }
    return 1;
    }


    oder die kurz variante

    if (dialogid==DIALOG_ABGEBEN)
    {
    if((radmou[playerid] + radbmx[playerid]) == 0)return SendClientMessage(playerid,ROT,"Du hast kein Fahrzeug welches du abgeben kannst!");
    radbmx[playerid] && KillTimer(Radbmxtimer(playerid)) || KillTimer(Radmoutimer(playerid));
    return SendClientMessage(playerid,GOLD,"Du hast dein Fahrzeug abgegeben, jetzt kannst du wieder ein neues mieten!");
    }

  • 2 kleine Fragen hätte ich noch, was bedeutet das + ?


    Und wie funktioniert dass hier? radbmx[playerid] && KillTimer(Radbmxtimer(playerid)) || KillTimer(Radmoutimer(playerid));
    Würde ja bedeuten radbmx UND Killtimer von Radbmx ODER Killtimer Radmou


    Dann würde man ja das radmou gar nicht abfragen