Problem mit Stock (Server crasht down)

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
  • Hey Leute,


    ich habe ein Problem mit diesem Stock, der die Tank-Preise in meinem Script festlegt bzw. lädt:
    Beim compilen bekomme ich keine Fehler, jedoch stürzt der Server beim starten ab und spuckt folgende Fehlermeldungen aus:


    Code
    [16:16:43] [MySQL] Connected (0) to 'test'@'127.0.0.1 via TCP/IP'.
    [16:16:43] [MySQL] Server Version 5.6.20.
    [16:16:44] [debug] Server crashed while executing inventar.amx
    [16:16:44] [debug] AMX backtrace:
    [16:16:44] [debug] #0 native format () from samp-server.exe
    [16:16:44] [debug] #1 0000a7b8 in SCMF (playerid=65535, color=-65281, fstring[]=@00c41348 "Diesel: %i$ | Benzin: %i$", ... <2 arguments>) at D:\Domi\Spiele\GTA San Andreas\Selfmade\gamemodes\inventar.pwn:137
    [16:16:44] [debug] #2 00101f54 in RandomTankpreis () at D:\Domi\Spiele\GTA San Andreas\Selfmade\gamemodes\inventar.pwn:21145
    [16:16:44] [debug] #3 0000b9d0 in public OnGameModeInit () at D:\Domi\Spiele\GTA San Andreas\Selfmade\gamemodes\inventar.pwn:1381
    [16:16:44] [debug] Native backtrace:
    [16:16:44] [debug] #0 0046c9e6 in ?? () from samp-server.exe



    OnGameModeInit:


    RandomTankpreis();
    SetTimer("ipsync",3600000,1);



    Der Stock:


    stock RandomTankpreis()
    {
    TankInfo[Diesel] = 5+random(6);
    TankInfo[Benzin] = 10+random(6);
    TankInfo[SuperPlus] = 15+random(6);
    TankInfo[Kerosin] = 15+random(16);
    SCMTA(gelb,"|>----Tankstellen-Infos----<|");
    SCMF(0xFFFF,gelb,"Diesel: %i$ | Benzin: %i$",TankInfo[Diesel],TankInfo[Benzin]);
    SCMF(0xFFFF,gelb,"Super+: %i$ | Kerosin: %i$",TankInfo[SuperPlus],TankInfo[Kerosin]);
    return 1;
    }


    Einbau im Timer ipsync:


    forward ipsync();
    public ipsync()
    {
    RandomTankpreis();
    RespawnAHCars(-1);
    return 1;
    }


    Sobald ich bei OnGameModeInit "RandomTankpreis" auskommentiere funktioniert alles :/



    Was ist da los?! ?(

  • SCMF:


    stock SCMF(playerid, color, fstring[], {Float, _}:...)
    {
    static const STATIC_ARGS = 3;
    new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
    if(n)
    {
    new message[144],arg_start,arg_end;
    #emit CONST.alt fstring
    #emit LCTRL 5
    #emit ADD
    #emit STOR.S.pri arg_start


    #emit LOAD.S.alt n
    #emit ADD
    #emit STOR.S.pri arg_end
    do
    {
    #emit LOAD.I
    #emit PUSH.pri
    arg_end -= BYTES_PER_CELL;
    #emit LOAD.S.pri arg_end
    }
    while(arg_end > arg_start);


    #emit PUSH.S fstring
    #emit PUSH.C 144
    #emit PUSH.ADR message


    n += BYTES_PER_CELL * 3;
    #emit PUSH.S n
    #emit SYSREQ.C format


    n += BYTES_PER_CELL;
    #emit LCTRL 4
    #emit LOAD.S.alt n
    #emit ADD
    #emit SCTRL 4


    if(playerid == INVALID_PLAYER_ID)
    {
    #pragma unused playerid
    return SendClientMessageToAll(color, message);
    } else {
    return SCM(playerid, color, message);
    }
    } else {
    if(playerid == INVALID_PLAYER_ID)
    {
    #pragma unused playerid
    return SendClientMessageToAll(color, fstring);
    } else {
    return SCM(playerid, color, fstring);
    }
    }
    }


    SCMF = SendClientMessage + String


    Beispiel:


    SCMF(playerid,ROT,"%s hat dich gebannt",SpielerName[playerid]


    Das ist quasi eine verkürzung der format-Geschichte und macht das ganze viel leichter :)

  • Verwendest du es vorher auch schon in dein Script, oder bei der Methode das erste mal?
    Außerdem sendest du es dem Spieler 65535, was bei SA:MP eine ungültige ID wäre.

  • stock RandomTankpreis()
    {
    TankInfo[Diesel] = 5+random(6);
    TankInfo[Benzin] = 10+random(6);
    TankInfo[SuperPlus] = 15+random(6);
    TankInfo[Kerosin] = 15+random(16);
    SCMTA(gelb,"|>----Tankstellen-Infos----<|");
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i))continue;
    SCMF(i,gelb,"Diesel: %i$ | Benzin: %i$",TankInfo[Diesel],TankInfo[Benzin]);
    SCMF(i,gelb,"Super+: %i$ | Kerosin: %i$",TankInfo[SuperPlus],TankInfo[Kerosin]);
    }
    return 1;
    }
    Versuch das mal so.

  • Ich glaube nicht, dass das an den einigen Dialogen lag.
    Du hast als ID in der Funktion 65535 (0xFFFF) angegeben, und das Standardmäßig in SA:MP eine ungültige ID.
    Das kann vorher nicht funktioniert haben, wenn du als ID 0xFFFF (65535) angegeben hast :)