[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
  • Guten Morgen,


    ich hab nen kleines Problem.


    format(carname,sizeof(carname),"Tank: %.2f/%dL",VehicleInfo[vID][Tankmenge],FahrzeugInfo[mID-400][veh_Liter]);

    hier bei den -400 sagt der Compiler Array index out of Bounds.

    Ich habe new mID = GetVehicleModel(vID);.


    Wie bekomme ich den Fehler gefixt?


    Danke im Voraus.


    MfG


    Allrounder18

  • Etwas mehr Code wäre natürlich schön.


    Aber an sich besteht das Problem darin, dass mID 0 ist, bzw kein Spieler im Fahrzeug sich befindet, diesen Fall musst du abdecken.


    Kannst sowas darüber schreiben:


    C
    if(!mID) return 1;

    ast2ufdyxkb1.png


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

  • Hallo,


    ich finde hier den Fehler nicht, in einem anderen Script wo die selbe Funktion und der selbe Dialog drin sind kommt der Fehler nicht. Ich habe an den Funktionen nichts geändert.

    Code
    stock FormatNumber(geld, const szChar[] = ".")
    {
        new str[24],i;
        valstr(str,geld),i=(geld > 0) ? strlen(str)-3 : strlen(str)-4;
        for(; i>0; i-=3) strins(str,szChar,(geld > 0) ? i : i+1,sizeof(str));
        return str;
    }
    Code
    [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
    [debug]  Stack pointer (STK) is 0x4D7A24, heap pointer (HEA) is 0x4D7A1C
    [debug] AMX backtrace:
    [debug] #0 00020178 in FormatNumber (geld=0, szChar[]=@004a4640 ".") at C:\Users\Administrator\Desktop\Selfmade Roleplay\pawno\include\../include/core/allgemeines.inc:470
    [debug] #1 0003f1fc in dialoge (playerid=0, dialogid=56, response=1, listitem=0, inputtext[]=@004d7584 "R") at C:\Users\Administrator\Desktop\Selfmade Roleplay\pawno\include\../include/core/dialoge.inc:524
    [debug] #2 0005ba94 in public OnDialogResponse (playerid=0, dialogid=56, response=1, listitem=0, inputtext[]=@004d7584 "R") at selfmade.pwn:283

    470 ist new str[24],i;

    524 ist das format(string10

    283 ist aloge(playerid, dialogid, response, listitem, inputtext);


    Wo liegt der Fehler?


    Danke im Voraus.


    MfG


    Allrounder18

  • Wo liegt der Fehler?

    Kann es sein, dass du einen Compiler Warning bekommst?


    Bzw unten da so komische Zahlen angezeigt werden?


    Ich glaube du reservierst viel zu viel Speicher, aufgrund dessen kommt es zur Stack/Heap Kollision, das hat nichts mit der Funktion an sich zu tun.

    Zeig uns mal dein Compiler Fenster nach dem compilen.

    ast2ufdyxkb1.png


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

  • Pack mal oben in dein Skript:


    #pragma dynamic 5476660


    Oder hast du schon ein pragma dynamic in deinem Skript?

    Wenn ja, lösche das, compile nochmal (komplett ohne pragma dynamic) und poste die neue Meldung.

    ast2ufdyxkb1.png


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

  • Das kommt wenn ich es mache wie du schreibst.


    Header size: 7852 bytes

    Code size: 375812 bytes

    Data size: 5076500 bytes

    Stack/heap size: 21906640 bytes; estimated max. usage: unknown, due to recursion

    Total requirements:27366804 bytes

  • Oder hast du schon ein pragma dynamic in deinem Skript?

    Wenn ja, lösche das, compile nochmal (komplett ohne pragma dynamic) und poste die neue Meldung.

    Liest du auch, was ich schreibe?


    Offensichtlich verwendest du schon einmal pragma dynamic.


    Lösch es mal überall raus und poste nochmal die Meldung...


    //Edit:
    Oder kann es sein, dass du eine pawn.cfg in deinem Pawno Ordner hast?


    Wenn ja, lösche diese mal.

    ast2ufdyxkb1.png


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

  • ich hab nirgends eins drin.


    Edit: Nein, es ist keine pawn.cfg vorhanden.


    das pragma dynamic hat den Fehler behoben, danke.

  • warning 213: tag mismatch tritt auf, bei folgendem Codeabschnitt:

    Code
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    INI_WriteFloat(File,"posX",x);
    INI_WriteFloat(File,"posY",y);
    INI_WriteFloat(File,"posZ",z);

    der mismatch tritt beim WriteFloat auf.

    Benutze y_ini.

    Die Sequenz tritt im Callback OnPlayerDisconnect(); auf.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Grundsätzlich ist das alles richtig.


    Nutzt du eventuell eine veraltete Version von y_ini?

    Schau mal in die y_ini.inc bzw. in die zugehörige y_ini_impl.inc, dort müsste sich folgender Funktionsheader finden:

    stock bool:INI_WriteFloat(INI:file, const name[], Float:data, accuracy = 6)


    Suche nach INI_WriteFloat und schaue, wie bei dir der Header aussieht. Gegebenenfalls sieht der dritte Parameter "data" anders aus.


    Sofern dem so ist, hier findest du die neuste Version: https://github.com/pawn-lang/YSI-Includes/releases

  • Mit der aktuellsten Version passiert folgendes beim compilen:

    mit Version 4.0.2:

    Code
    C:\Users\styles\Desktop\samp037_svr_R2-1-1_win32\gamemodes\bare.pwn(75) : warning 213: tag mismatch
    C:\Users\styles\Desktop\samp037_svr_R2-1-1_win32\gamemodes\bare.pwn(76) : warning 213: tag mismatch
    C:\Users\styles\Desktop\samp037_svr_R2-1-1_win32\gamemodes\bare.pwn(77) : warning 213: tag mismatch
    Pawn compiler 3.2.3664              Copyright (c) 1997-2006, ITB CompuPhase
    
    
    3 Warnings.

    Einmal editiert, zuletzt von StYl3z ()

  • Ok, dann nutze die 4.0.2 vorerst.

    Versuche es testweise mal so:

    INI_WriteFloat(File,"posX",Float:x);

    INI_WriteFloat(File,"posY",Float:y);

    INI_WriteFloat(File,"posZ",Float:z);

    oder:

    INI_WriteFloat(File,"posX",_:x);

    INI_WriteFloat(File,"posY",_:y);

    INI_WriteFloat(File,"posZ",_:z);

  • Wofür sorry? :) Irgendwas scheint die Funktion dann zu stören bzw. zu denken, dass x, y und z nicht mit Float definiert wurden.

    Aber wenn es jetzt so klappt, passt es ja.


    Die Y... Funktionsbibliotheken sind leider so undurchschaubar, daher habe ich diese auch nie genutzt.

  • Moin, bekomme immer den Fehler error 035: argument type mismatch (argument 2)


    Das wäre auch kein Problem. Allerdings taucht das nur beim zweiten SetDynamicObjectMaterialText auf.


    Es hat nichts mit City[1 / 2] zutun, das hab ich schon getestet, ich finde den Fehler einfach nicht

    Code
    new string3[128];
    format(string3,sizeof(string3),"Factory-Output\nAssault: %d\nHeavy: %d\nSniper: %d\nProduction-Efficencity: %d%",City[1][weaponProduction][0], City[1][weaponProduction][1],City[1][weaponProduction][2],City[1][Effectivity]);
    SetObjectMaterialText(City[1][ProductionText], string3, 0, 140, "Arial", 45, 1, 0xFFFFFFFF, 0xFFB40404, 1);
    format(string3,sizeof(string3),"Factory-Output\nAssaut: %d\nHeavy: %d\nSniper: %d\nProduction-Efficencity: %d%",City[1][weaponProduction][0], City[1][weaponProduction][1],City[1][weaponProduction][2],City[1][Effectivity]);
    SetDynamicObjectMaterialText(City[2][ProductionText], string3, 0, 140, "Arial", 45, 1, 0xFFFFFFFF, 0xFFB40404, 1); //Fehler
  • SetDynamicObjectMaterialText

    Die Definition davon lautet:


    C
    native SetDynamicObjectMaterialText(STREAMER_TAG_OBJECT objectid, materialindex, const text[], materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0);

    Im Gegensatz zu SetObjectMaterialText ist hier der Text und der materialindex vertauscht. Wieso auch immer das Incognito so gemacht hat, weil das einfach alle und jedes mal abfuckt xD


    Einfach so schreiben:


    C
    SetDynamicObjectMaterialText(City[2][ProductionText], 0, string3, 140, "Arial", 45, 1, 0xFFFFFFFF, 0xFFB40404, 1);


    Bei dem Anderen kommt kein Fehler, weil es nicht auf ein "Dynamic-Objekt" bezieht, sondern auf ein normales Objekt.

    ast2ufdyxkb1.png


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