[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
  • Wie mach ich das ? Habe lange nicht mehr mit Pawno gearbeitet.

    Vielleicht vereinfacht dir das hier das: https://breadfish.de/index.php…ckpoint-routen-ersteller/



    Wie kann ich jemandem den definierten SERVERTAG vor den Namen setzen wenn er in den Adminduty geht und es wieder rausnehmen wenn er Offduty geht?

    Ehhh einfach sowas:



    //Pseudo Codeif(OnDuty[playerid] == true) format(string,sizeof(string),"%s %s: %s",SERVERTAG,GetName(playerid),text);
    else format(string,sizeof(string),"%s: %s",GetName(playerid),text);
    SendClientMessage(---, string);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von NixMuss ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Vorposter war schneller c: ().
  • Bekomme folgenden Error:
    ---pwn(385) : error 052: multi-dimensional arrays must be fully initialized



    Soweit ich weiß darfst du bei dem 2. keinen define verwenden. Versuch mal mit der oben definierten Zahl selbst.


    Code
    new GangwarZones[50][gangwar_daten] // 50 durch deine Zahl (MAX_GWZONES) ersetzen


    Eine andere Lösung dafür ist mir jetzt nicht bewusst.

    MfG. Adrian

  • Musste leider nen Screenshot machen:

    Der Define von MAX_GWZONES muss entweder exakt der Anzahl an GW-Zonen entsprechen, oder du machst das einfach raus.
    new GangwarZones[][gangwar_daten] =


    Den Define könntest du dann, falls du diesen woanders noch nutzt, auch so schreiben:
    #define MAX_GWZONES sizeof(GangwarZones)


    Dann musst du nirgends einen festen Wert angeben.

  • Guten Tag.


    Wieso wird bei keinem Bus "Leerfahrt" angezeigt ?



    Code:



    forward public LoadBusCars();
    public LoadBusCars() {


    new rows,BusCars,count;
    cache_get_row_count(rows);
    for(new i=0;i<rows;i++) {
    cache_get_value_name_int(i,"ID",BusCars);
    if(BusCars < MAX_BUESE) {


    cache_get_value_name_int(i,"ID",sBCars[BusCars][sCID]);
    cache_get_value_name_int(i,"ModelID",sBCars[BusCars][sCModelID]);
    cache_get_value_name_float(i,"PosX",sBCars[BusCars][sCPosX]);
    cache_get_value_name_float(i,"PosY",sBCars[BusCars][sCPosY]);
    cache_get_value_name_float(i,"PosZ",sBCars[BusCars][sCPosZ]);
    cache_get_value_name_float(i,"PosA",sBCars[BusCars][sCPosA]);
    cache_get_value_name_int(i,"Color1",sBCars[BusCars][sCColor1]);
    cache_get_value_name_int(i,"Color2",sBCars[BusCars][sCColor2]);
    CreateVehicleEx(sBCars[BusCars][sCModelID],sBCars[BusCars][sCPosX],sBCars[BusCars][sCPosY],sBCars[BusCars][sCPosZ],sBCars[BusCars][sCPosA],sBCars[BusCars][sCColor1],sBCars[BusCars][sCColor2],120,true);


    for(new bi=0;bi<sizeof(BusCars);bi++) {
    UpdateDynamic3DTextLabelText(Vehicle[BusCars[bi]][vehText],Hellblau,"Leerfahrt");
    Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL,Vehicle[BusCars[bi]][vehText],E_STREAMER_ATTACH_OFFSET_Z,2.0);
    Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL,Vehicle[BusCars[bi]][vehText],E_STREAMER_ATTACH_OFFSET_Y,5.3);
    SetVehicleNumberPlate(BusCars[bi],"Bus");
    }


    count++;
    }
    }
    printf("[LOAD] Es wurden [%d/%d] Büse geladen.",count,MAX_BUESE);
    return 1;
    }

  • Beitrag von ARCADION ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Erledigt ().

  • [20:57:24] [debug] Run time error 4: "Array index out of bounds"
    [20:57:24] [debug] Attempted to read/write array element at negative index -400
    [20:57:24] [debug] AMX backtrace:
    [20:57:24] [debug] #0 0046361c in public cmd_parkscheinkontrolle (playerid=0, params[]=@0058d6c8 "") at C:\Users\User\Desktop\Selfmade\gamemodes\German.pwn:75196
    [20:57:24] [debug] #1 native CallLocalFunction () in samp-server.exe
    [20:57:24] [debug] #2 00000a7c in public OnPlayerCommandText (playerid=0, cmdtext[]=@0058d674 "/parkscheinkontrolle") at C:\Users\User\Desktop\Selfmade\pawno\include\zcmd.inc:102


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich denke mal GetCarOwner gibt eine Playerid zurück, deswegen macht es keinen Sinn hier: CarName[GetVehicleModel(VehicleOwner)-400] das Model von der Playerid zu kriegen, dort musst du eine Vehicleid angeben. Also dort sowie oben bei dem anderen if das GetVehicleModel(VehicleOwner) mit GetVehicleModel(vehicleid) ersetzen.

  • Eine Funktion um alle IDS aus einem Fahrzeug zu ermitteln ?
    So hatte ich es mal probiert, funkt aber nicht. Jemand einen Quellcode da, damit ich mir den mal anschauen kann.



    stock GetVehicleMember(vid, &id1, &id2, &id3, &id4)
    {
    new id[4] = INVALID_PLAYER_ID;
    for(new i, count;i<PLAYER_MAX;i++)
    {
    if(count >= 4)break;
    if(IsPlayerLoggedIn(i) == true)
    {
    if(IsPlayerInVehicle(i, vid) == 1)
    {
    id[count] = i;
    count ++;
    }
    }
    }
    id1 = id[0],
    id2 = id[1],
    id3 = id[2],
    id4 = id[3];
    return 1;
    }

  • Moin.
    Die letzte Id wird als 0 ausgegeben und nicht als INVALID_PLAYER_ID.
    Haben es mit 2 aber auch mit 3 Leuten getestet gestestet. Also jeweils mit mir und 2 Beifahrern.
    Mit der Funktion will ich alle Leute in einem Fahrzeug ermitteln für vermehrt sinnvolle funktionen.


    Ja, finde sie wenn sie klappt, sinnvoll.


    #handy

  • Code
    OnQueryError(1064,'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1','INSERT INTO `server_vehicles` (`id`, `vehBesitzer`, `modelid`, `vehPosX`, `vehPosY`, `vehPosZ`, `vehPosA`, `vehColor1`, `vehColor2`, `vehPaintjob`, `vehSpoiler`, `vehHood`, `vehWheels`, `vehStereo`, `vehHydraulics`, `vehFrontBumper`, `vehRearBumper`,`vehVentRight`, `vehVentLeft`, `vehPreis`, `vehNumberPlate`, `vehFuel`, `vehSpecialtuned`, `vehState`, `vehNeonID1`, `vehNeonID2`, `vehPeilsender`, `vehTUV`, `vehKMStand`) VALUES (')
    OnQueryError(1064,'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''Tester', '579', '1795.186279', '-1884.070556', '13.572400', '264.057312'' at line 1',''Tester', '579', '1795.186279', '-1884.070556', '13.572400', '264.057312', '-1', '-1', '-1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'KEINE PLAKETTE', '0', '0', '0', '0', '0', '0', '0', '0'')

    //Fehler Zeile -> Finde den fehler nicht

  • Finde den fehler nicht

    Naja, was machst du da auch?


    Du sendest einmal das mainQuery hab was halb vollständig ist und die andere Hälfte sendest du separat ab :D


    Vllt...nur ein query? :D


    C
    stock CreatePlayerCar(playerid,Float:x,Float:y,Float:z,Float:rot,model,color1,color2)
    {
        new mainQuery[1537];
        strcat(mainQuery, "INSERT INTO `server_vehicles` (`id`, `vehBesitzer`, `modelid`, `vehPosX`, `vehPosY`, `vehPosZ`, `vehPosA`, `vehColor1`, `vehColor2`, `vehPaintjob`, `vehSpoiler`, `vehHood`, `vehWheels`, `vehStereo`, `vehHydraulics`, `vehFrontBumper`, `vehRearBumper`,");
        strcat(mainQuery, "`vehVentRight`, `vehVentLeft`, `vehPreis`, `vehNumberPlate`, `vehFuel`, `vehSpecialtuned`, `vehState`, `vehNeonID1`, `vehNeonID2`, `vehPeilsender`, `vehTUV`, `vehKMStand`) VALUES (");
        format(mainQuery, sizeof(mainQuery), "%s'%s', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d'",
        mainQuery,GetName(playerid), model, x, y, z, rot, color1, color2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEIN_KENNZEICHEN, 0, 0, 0, 0, 0, 0, 0, 0);
        mysql_function_query(MySQLConnected, mainQuery, false, "", "");
        return 1;
    }

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Code
    OnQueryError(1064,'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1','INSERT INTO `server_vehicles` (`id`, `vehBesitzer`, `modelid`, `vehPosX`, `vehPosY`, `vehPosZ`, `vehPosA`, `vehColor1`, `vehColor2`, `vehPaintjob`, `vehSpoiler`, `vehHood`, `vehWheels`, `vehStereo`, `vehHydraulics`, `vehFrontBumper`, `vehRearBumper`,`vehVentRight`, `vehVentLeft`, `vehPreis`, `vehNumberPlate`, `vehFuel`, `vehSpecialtuned`, `vehState`, `vehNeonID1`, `vehNeonID2`, `vehPeilsender`, `vehTUV`, `vehKMStand`) VALUES ('Tester', '560', '1537.553710', '-1683.660888', '5.890625', '0.000000', '1', '1', '-1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'KEINE PLAKETTE', '0', '0', '0', '0', '0', '0', '0', '0'')

    Habe ich selber gerade gemerkt aber dder Fehler bleibt trotzdem :D

  • /me und /do Befehl funktionieren nicht mehr. Sobald man /me und den Text eingibt, wird nix angezeigt.


    COMMAND:me(playerid,params[])
    {
    if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!");
    if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
    if(Spieler[playerid][pInPrison] == 1)return SendClientMessage(playerid,GRAU,"Du bist im Prison.");


    if(Spieler[playerid][pDeath] == 1)return SendClientMessage(playerid,GRAU,"Du bist verletzt.");
    new string[128],text[91];
    if(Spieler[playerid][pMuted] == 1)
    {
    format(string,sizeof(string),"Du bist noch %i:%02d Minuten gemuted.",floatround(Spieler[playerid][pMuteTime]/60),floatround(Spieler[playerid][pMuteTime]%60));
    SendClientMessage(playerid,WEISS,string);
    }
    if(sscanf(params,"s[91]",text))return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /me [Text]");
    if(strlen(text) > 90)return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /me [Text darf maximal 90 Zeichen beinhalten]");
    for(new i=0;i<sizeof(BadWord);i++)
    {
    if(strfind(text,BadWord[i],true) != -1)
    {
    format(string,sizeof(string),"AdminBefehl: Das System hat den Spieler %s (ID:%i) für 15 Minuten gemutet. Grund: Beleidigung",Spieler[playerid][pName],playerid);
    SendClientMessageToAll(LEUCHTENDESROT,string);
    format(string,sizeof(string),"Beleidigung: %s | %s | Art: /me",BadWord[i],text);
    SendAdminMessage(LEUCHTENDESROT,string);
    Spieler[playerid][pMuteTime] += 15*60;
    Spieler[playerid][pMuted] = 1;
    return 1;
    }
    }
    new strpos = strfind(text,"www",true);
    if(strfind(text,".",true) != -1 && strfind(text,":",true) != -1 && strlen(text) > 8 && strfind(text,TSIP,false) == -1)
    {
    strdel(text,strpos,strfind(text,".",true) && strfind(text,":",true));
    return 1;
    }
    format(string,sizeof(string),"* %s %s",SpielerName(playerid),text);
    PlayerTalkPublic(Spieler[playerid][pRPName],MEFARBE,string,10);
    return 1;
    }


    COMMAND:do(playerid,params[])
    {
    if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!");
    if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
    if(Spieler[playerid][pInPrison] == 1)return SendClientMessage(playerid,GRAU,"Du bist im Prison.");


    if(Spieler[playerid][pDeath] == 1)return SendClientMessage(playerid,GRAU,"Du bist verletzt.");
    new string[128],text[91];
    if(Spieler[playerid][pMuted] == 1)
    {
    format(string,sizeof(string),"Du bist noch %i:%02d Minuten gemuted.",floatround(Spieler[playerid][pMuteTime]/60),floatround(Spieler[playerid][pMuteTime]%60));
    SendClientMessage(playerid,WEISS,string);
    }
    if(sscanf(params,"s[91]",text))return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /do [Text]");
    if(strlen(text) > 90)return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /do [Text darf maximal 90 Zeichen beinhalten]");
    for(new i=0;i<sizeof(BadWord);i++)
    {
    if(strfind(text,BadWord[i],true) != -1)
    {
    format(string,sizeof(string),"AdminBefehl: Das System hat den Spieler %s (ID:%i) für 15 Minuten gemutet. Grund: Beleidigung",Spieler[playerid][pName],playerid);
    SendClientMessageToAll(LEUCHTENDESROT,string);
    format(string,sizeof(string),"Beleidigung: %s | %s | Art: /do",BadWord[i],text);
    SendAdminMessage(LEUCHTENDESROT,string);
    Spieler[playerid][pMuteTime] += 15*60;
    Spieler[playerid][pMuted] = 1;
    return 1;
    }
    }
    new strpos = strfind(text,"www",true);
    if(strfind(text,".",true) != -1 && strfind(text,":",true) != -1 && strlen(text) > 8 && strfind(text,TSIP,false) == -1)
    {
    strdel(text,strpos,strfind(text,".",true) && strfind(text,":",true));
    return 1;
    }
    format(string,sizeof(string),"** %s %s ** (( %s ))",SpielerName(playerid),text,Spieler[playerid][pName]);
    PlayerTalkPublic(Spieler[playerid][pRPName],MEFARBE,string,10);
    return 1;
    }

  • Habe ich selber gerade gemerkt aber dder Fehler bleibt trotzdem

    Nein, du musst genau schauen, es ist ein anderer Fehler.


    Dieser entsteht vermutlich, weil du die Klammer nicht geschlossen hast:


    "%s'%s', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')"

    me und /do Befehl funktionieren nicht mehr. Sobald man /me und den Text eingibt, wird nix angezeigt.

    Das sagt jetzt nicht soviel aus.


    Hast du mal crashdetect geladen?
    Mal ein paar prints gesetzt und geschaut wo es hängen bleibt?
    Das Stichwort ist Debugging: https://wiki.sa-mp.com/wiki/Debugging

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

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