Beiträge von Pascal.

    Hey Community,
    hier geht ein befehl nicht, kriege folgenden debug code.


    Code
    [18:40:33] [debug] Run time error 4: "Array index out of bounds"
    [18:40:33] [debug]   Accessing element at index 18 past array upper bound 17
    [18:40:33] [debug] Backtrace (most recent call first):
    [18:40:33] [debug] #0  0037c3d0 in public ocmd_bizlist (playerid=0, params[]=@0x00000000 "") at D:\pRP\gamemodes\purerpscript_pub.pwn:38307
    [18:40:33] [debug] #1  ???????? in native CallLocalFunction () from samp-server.exe
    [18:40:33] [debug] #2  00008484 in public OnPlayerCommandText (playerid=0, cmdtext[]=@0x00000000 "") at D:\pRP\pawno\include\ocmd.inc:31


    OCMD Include:
    #include <a_samp>
    #define ocmd:%1(%2) forward ocmd_%1(%2);\
    public ocmd_%1(%2)
    public OnPlayerCommandText(playerid,cmdtext[])
    {
    cmdtext[0]='_';
    new ocmdStr[128],ocmdParams[128],bool:ocmdAffe,ocmdFu;
    for(new i;i<128;i++)
    {
    if(cmdtext[i]=='\0')break;
    if((cmdtext[i]==' ')&&(!ocmdAffe))
    {
    ocmdAffe=true;
    continue;
    }
    if(!ocmdAffe)ocmdStr[i]=cmdtext[i];
    else
    {
    ocmdParams[ocmdFu]=cmdtext[i];
    ocmdFu++;
    }
    }
    format(ocmdStr,128,"ocmd%s",ocmdStr);
    if(!strlen(ocmdParams))format(ocmdParams,128," ");
    if(CallLocalFunction(ocmdStr,"ds",playerid,ocmdParams))return 1; //error zeile
    cmdtext[0]='/';
    return CallLocalFunction("ocmd_OnPlayerCommandText","ds",playerid,cmdtext);
    }


    #if defined _ALS_OnPlayerCommandText
    #undef OnPlayerCommandText
    #else
    #define _ALS_OnPlayerCommandText
    #endif
    #define OnPlayerCommandText ocmd_OnPlayerCommandText
    forward ocmd_OnPlayerCommandText(playerid, cmdtext[]);


    Script (befehl ausschnitt)
    for (new i = 0; i < sizeof(BizInfo); i++)
    {
    format(string, sizeof(string), "%s\n%s [ %i/%i ]", string, BizName(i), BizInfo[i][biz_prods], bMaxProds[BizInfo[i][biz_art]-1][0]); //Error zeile (vermute -1)
    }
    ShowPlayerDialog(playerid, DIALOG_TRUCKER_BIZLIST, DIALOG_STYLE_LIST, "Bizliste", string, "Checkpoint", "Abbrechen");


    Jeffry:

    Hallo.
    Ich habe folgendes Problem bei einem Befehl.
    Den Befehl gibt es nicht und dieser debug kommt:


    Code
    [18:40:33] [debug] Run time error 4: "Array index out of bounds"
    [18:40:33] [debug]   Accessing element at index 18 past array upper bound 17
    [18:40:33] [debug] Backtrace (most recent call first):
    [18:40:33] [debug] #0  0037c3d0 in public ocmd_bizlist (playerid=0, params[]=@0x00000000 "") at D:\pRP\gamemodes\purerpscript_pub.pwn:38307
    [18:40:33] [debug] #1  ???????? in native CallLocalFunction () from samp-server.exe
    [18:40:33] [debug] #2  00008484 in public OnPlayerCommandText (playerid=0, cmdtext[]=@0x00000000 "") at D:\pRP\pawno\include\ocmd.inc:31


    for (new i = 0; i < sizeof(BizInfo); i++)
    {
    format(string, sizeof(string), "%s\n%s [ %i/%i ]", string, BizName(i), BizInfo[i][biz_prods], bMaxProds[BizInfo[i][biz_art]-1][0]); // Zeile 38307
    }
    ShowPlayerDialog(playerid, DIALOG_TRUCKER_BIZLIST, DIALOG_STYLE_LIST, "Bizliste", string, "Checkpoint", "Abbrechen");


    ocmd:


    Habe die etwas verändert:


    #include <a_samp>
    #define ocmd:%1(%2) forward ocmd_%1(%2);\
    public ocmd_%1(%2)
    public OnPlayerCommandText(playerid,cmdtext[])
    {
    cmdtext[0]='_';
    new ocmdStr[128],ocmdParams[128],bool:ocmdAffe,ocmdFu;
    for(new i;i<128;i++)
    {
    if(cmdtext[i]=='\0')break;
    if((cmdtext[i]==' ')&&(!ocmdAffe))
    {
    ocmdAffe=true;
    continue;
    }
    if(!ocmdAffe)ocmdStr[i]=cmdtext[i];
    else
    {
    ocmdParams[ocmdFu]=cmdtext[i];
    ocmdFu++;
    }
    }
    format(ocmdStr,128,"ocmd%s",ocmdStr);
    if(!strlen(ocmdParams))format(ocmdParams,128," ");
    if(CallLocalFunction(ocmdStr,"ds",playerid,ocmdParams))return 1; // error zeile
    cmdtext[0]='/';
    return CallLocalFunction("ocmd_OnPlayerCommandText","ds",playerid,cmdtext);
    }


    #if defined _ALS_OnPlayerCommandText
    #undef OnPlayerCommandText
    #else
    #define _ALS_OnPlayerCommandText
    #endif
    #define OnPlayerCommandText ocmd_OnPlayerCommandText
    forward ocmd_OnPlayerCommandText(playerid, cmdtext[]);


    Jeffry:

    eine variable musst du oben ins script tuen, zu den globalen variablen
    new Roller[MAX_PLAYERS];


    ocmd:roller(playerid,params[])
    {
    new Auto, Float:x, Float:y,Float:z, Float:a;
    if(GetPlayerScore(playerid) >= 3) return SendClientMessage(playerid, BLAU, "* Du kannst kein Roller mehr Spawnen!");
    if(Roller[playerid] == 1) return SendClientMessage(playerid, BLAU, "Du kannst kein Roller mehr Spawnen.");
    SendClientMessage(playerid,BLAU,"Achtung wenn dein Level größer als 3 ist, kannst du kein Roller mehr Spawnen.");
    GetPlayerPos(playerid, x, y, z); // Abfragen wo der Spieler steht
    GetPlayerFacingAngle(playerid, a); // Die Rotation abfragen
    Auto = CreateVehicle(571, x, y ,z,a ,-1,-1,-1); // Erstellen mit CreateVehicle
    PutPlayerInVehicle(playerid, Auto, 0); // ins Auto rein tuen
    Roller[playerid] = 1;
    return 1;
    }

    Probier es doch erstmal selber :)
    Wenn du dann Hilfe brauchst meldest du dich hier im Forum.
    Wir sind zum Helfen da und nicht zum erstellen.


    Mit freundlichen Grüßen
    Pascal :)

    Jedes mal wenn jemand stirbt, kommt dieser Debug.
    [16:30:10] [debug] Run time error 4: "Array index out of bounds"
    [16:30:10] [debug] Accessing element at index 65535 past array upper bound 999
    [16:30:10] [debug] AMX backtrace:
    [16:30:10] [debug] #0 0003ca84 in public OnPlayerDeath (playerid=0, killerid=65535, reason=255) at D:\Server SVT\gamemodes\selfmade.pwn:2053


    Zeile 2052: SendDeathMessage(killerid,playerid,reason);
    Zeile 2053: killstreak[killerid]++;
    Zeile 2054: killstreak[playerid] = 0;

    Soweit ich weiß wird mit %e theoritisch %s ausgegeben, und du benutzt es bei jeden Integer.
    Du kannst es ja einfach mal printen oder einfach direkt ändern.
    Übrigens brauchst du kein public zum Speichern, eine Funktion wird ausreichen.
    Was du noch machst, accFormat1-4, du machst jedes mal eine neue Variable mit der gleichen größe.
    Es reicht wenn du eine Variable machst und diese Formatierst, wenn du in eine neue Zeile möchtest das machst du mit \


    beispiel:
    blablablabla\
    blablablabla

    Also bei MySQL musst du 4 tabellen anlegen mit dem Wert "Float".
    Wenn der Spieler gespeichert wird machst zum Beispiel:
    OnPlayerDisconneted:
    new Float:x, Float:y, Float:z, Float:r; //Variablen erstellen
    GetPlayerPos(playerid, x, y, z); // x, y, z wird befüllt mit den Koordinaten wo er steht
    GetPlayerFacingAngle(playerid, r); // r wird befüllt mit der Sicht
    pInfo[playerid][SpawnX] = x; // SpawnX = x
    pInfo[playerid][SpawnY] = y; // SpawnY = y
    pInfo[playerid][SpawnZ] = z; // SpawnZ = z
    pInfo[playerid][SpawnR] = r; // SpawnR = r


    SpielerSpeichern:
    SpawnX='%f', SpawnY='%f', SpawnZ'%f', SpawnR='%f'", pInfo[playerid][SpawnX], pInfo[playerid][SpawnY], pInfo[playerid][SpawnZ],
    pInfo[playerid][SpawnZ]); // Speicherst die Koordinaten ab


    Wo du den Spieler ladest:

    SetPlayerPos(playerid, pInfo[playerid][SpawnX], pInfo[playerid][SpawnY], pInfo[playerid][SpawnZ]); // Setzt den Spieler an die Position zurück
    SetPlayerFacingAngle(playerid, pInfo[playerid][SpawnR]); // setzt die sicht da hin, als wo er sich ausgelogt hat


    Diese werden dann in der Datenbank gespeichert.

    Funktioniert nun, Danke :)
    Aber ein kleines Problem hab ich noch, kriege jetzt so ein Warning im Log:


    Habe da was gesehen mit der Zeile 3281, das war die Funktion "StartRace".



    stock StartRace(playerid, time)
    {
    if(InitializeRace(playerid))
    {
    setproperty(.name = "CountdownTime", .value = time);
    return LoadData[lTimerID] = SetTimerEx("@Countdown",1000,false,"ii",playerid, time);
    }
    return 1;
    }


    stock static LoadFromMeta(path[])
    {
    if(!fexist(path))return 0;
    new File:fhandle = fopen(path,io_read),loadstr[400];
    while(fread(fhandle, loadstr))
    {
    if(strfind(loadstr,"#weather") != -1)
    {
    strmid(loadstr, loadstr, strfind(loadstr,"[")+1, strfind(loadstr,"]"));
    SetWeather(strval(loadstr));
    printf("meta.xml geladen");
    break;
    }
    }
    fclose(fhandle);
    return 1;
    }

    Sie ist aus dem Include:


    stock LoadRandomMap(Float:offZ = 0.0)
    {
    new rand;
    do
    {
    rand = random((LoadData[lMaxMaps]-10000000))+10000000;
    }
    while(LoadData[lLastMap] == rand);
    new loadstr[100];
    if(!existproperty(0, "", rand))return print("Es konnte keine Map geladen werden!"),0;
    getproperty(0, "", rand, loadstr);
    strunpack(loadstr, loadstr, sizeof(loadstr));
    strins(loadstr,"/Racemaps/",0);
    strcat(loadstr,"/objects.map");
    return LoadMap(loadstr,offZ);
    }


    stock LoadMap(path[], Float:offZ = 0.0)
    {
    if(UnloadMap())
    {
    new loadstr[400],mapValues[mapData],count;
    if(!fexist(path))return 0;
    new File:fhandle = fopen(path,io_read);
    while(fread(fhandle, loadstr))
    {
    if(!loadstr[0])continue;
    if(!sscanf(loadstr, "p<">'object''model='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]))
    {
    CreateDynamicObject(mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ, mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ],-1,-1,-1,300.0,300.0);
    }
    else if(!sscanf(loadstr, "p<">'racepickup''type='s[30]'vehicle='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMtype],mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]))
    {
    if(strcmp(mapValues[pMtype],"nitro") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,1);
    else if(strcmp(mapValues[pMtype],"repair") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,2);
    else if(strcmp(mapValues[pMtype],"vehiclechange") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,3,mapValues[pMmodelid]);
    }
    else if(!sscanf(loadstr, "p<">'spawnpoint''vehicle='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]))
    {
    ++count;
    CreateRaceSpawn(mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ, mapValues[pMRZ],count);
    }
    else if(!sscanf(loadstr, "p<">'marker''color='s[10]'posX='f'posY='f'posZ='f",mapValues[pMtype],mapValues[pMX], mapValues[pMY], mapValues[pMZ]))
    {
    mapValues[pMmodelid] = CreateDynamicObject(1559,mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,0.0,0.0,0.0,-1,-1,-1,400.0,400.0);
    mapValues[pMcolorID] = ConvertStringToHex(mapValues[pMtype]);
    SetDynamicObjectMaterial(mapValues[pMmodelid], 0, 1231, "dynsigns", "white64", mapValues[pMcolorID]);
    }
    else if(!sscanf(loadstr, "p<">'speedboost''posX='f'posY='f'posZ='f'veloX='f'veloY='f'veloZ='f", mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]))
    {
    CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,4, 0 ,mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]);
    }
    else if(!sscanf(loadstr, "p<">'teleport''posX='f'posY='f'posZ='f'nposX='f'nposY='f'nposZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ],mapValues[pNMRZ],mapValues[pNMRZ],mapValues[pNMRZ]))
    {
    CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,5 , 0 ,mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]+offZ,mapValues[pNMRZ]);
    }
    }
    fclose(fhandle);
    if(!count)return print("Map konnte nicht geladen werden"),0;
    print("Map wurde geladen");
    strdel(path,strfind(path,"objects.map"),strlen(path));
    strdel(loadstr,0,sizeof(loadstr));
    format(loadstr,40,"%smeta.xml",path);
    LoadFromMeta(loadstr);
    }
    return 1;
    }

    Hi Community,
    mein Server crasht sobald ich doppelt ein Command eingebe.
    Beim Crashdetect kam folgendes herraus:


    Command:
    ocmd:race(playerid, params[])
    {
    modus[playerid] = 2;
    SetPlayerVirtualWorld(playerid, 2);
    //TogglePlayerControllable(playerid, 0);
    //new Float:x, Float:y, Float:z;
    //GetPlayerPos(playerid, x, y, z);
    //SetPlayerPos(playerid, x-10, y-10, z-10);
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if (IsPlayerConnected(i) && modus[i] == 2)
    {
    if (alive[i] == 0)
    {
    LoadRandomMap();
    StartRace(playerid, 5000);
    }
    else
    {
    //Wenn noch welche Fahren
    new vID = GetPlayerVehicleID(i);
    PlayerSpectateVehicle(playerid, vID);
    specid[playerid] = i;
    }
    return 1;
    }
    }
    new string[128];
    format(string, 128, "Modus: %i", modus[playerid]);
    SendClientMessage(playerid, -1, string);
    return 1;
    }



    IPrototypeI:

    Wie genau jetzt?
    Möchtest du das nach 3 Minuten haben oder später?
    Möchtest du zwei verschiedene nachrichten haben?


    Wenn du diese Nachricht nur später ausgeben lassen möchtest statt 3 Minuten musste einfach den Timer wert höhrer setzen.
    also statt 180000 machst du einfach dein wert rein beispiel 500000.


    Ansonsten erkläre und wie du es haben willst.

    Sowie der Code aussieht hast du kein Enum.
    Sind die Fahrzeuge überhaupt in der Datenbank?
    Du möchtest das Auto mit der ID löschen aber wie, wenn er nicht einmal die kennt?
    DELETE FROM tabelle WHERE modelID ='%i', vID


    Könnte gehen, aber das Problem währe er würde jedes Auto mit dieser ModelID löschen.
    Würde dir raten mach ein Enum, müsstest halt jedes Auto dann in der Datenbank haben.

    Hallo Community!
    Ich habe mir ein Include runtergeladen für Youtube musik.
    Aber das Problem ist einfach, sobald 1 User den Song hört kann ein anderer den nicht mehr aufrufen.
    Ich möchte ja das es für alle ist.


    //Include:


    stock PlayYoutubeVideoForPlayer(playerid,url[])
    {
    if(strfind(url,"&") != -1) strmid(url,url,0,strfind(url,"&"),128);
    format(g_link,sizeof(g_link),"%s",url);
    format(url,128,"youtubeinmp3.com/fetch/?api=advanced&video=%s",g_link);
    HTTP(playerid, HTTP_GET, url, "", "OnYoutubeResponse");
    }


    forward OnYoutubeResponse(playerid, response_code, data[]);
    public OnYoutubeResponse(playerid, response_code, data[])
    {
    if(response_code == 200)
    {
    new content[3][256],stream[256],string[256];
    new hours,minutes,seconds,tmp_seconds[8];

    explode(content,data,"<br />");
    strmid(tmp_seconds,content[1],8,strlen(content[1]));
    strmid(stream,content[2],6,strlen(content[2]));

    g_duration = strval(tmp_seconds);
    g_title = content[0];

    formatSeconds(g_duration,hours,minutes,seconds);

    format(string,sizeof(string),"{0049FF}[Now playing] {00c9ff}%s (Duration: %02d:%02d:%02d)",GetVideoTitle(),hours,minutes,seconds);
    SendClientMessage(playerid,-1,string);

    PlayAudioStreamForPlayer(playerid,stream);
    g_playing = true;

    SetTimerEx("SongFinished",(g_duration+5)*1000,false,"i",playerid);
    }
    else
    {
    new error[128];
    format(error,sizeof(error),"{0049FF}[ERROR] {00c9ff}An error has occured: %s (%d)",GetError(response_code),response_code);
    SendClientMessage(playerid,0xFF0000FF,error);
    }
    }


    //script teil:
    ocmd:youtube(playerid,params[])
    {
    if (pInfo[playerid][a_score] < 2)return SendClientMessage(playerid,COLOR_RED,"ERROR: You are not a high enough level to use this command");
    new link[128], pID;
    if(sscanf(params,"us[128]",pID, link)) return SendClientMessage(playerid, COLOR_RED,"USAGE: /youtube [playerid/name] [youtube-url]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_RED, "The Player is not online!");
    if(strlen(link) >= 128) return SendClientMessage(playerid, COLOR_RED,"Link too long !");
    PlayYoutubeVideoForPlayer(pID,link);
    return 1;
    }


    ocmd:stopyoutube(playerid, params[])
    {
    if (pInfo[playerid][a_score] < 2)return SendClientMessage(playerid,COLOR_RED,"ERROR: You are not a high enough level to use this command");
    new pID;
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid, COLOR_RED,"USAGE: /stopyoutube [playerid/name]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_RED, "The Player is not online!");
    StopYoutubeVideoForPlayer(pID);
    return 1;
    }


    ocmd:youtubeforall(playerid,params[])
    {
    if (pInfo[playerid][a_score] < 2)return SendClientMessage(playerid,COLOR_RED,"ERROR: You are not a high enough level to use this command");
    new link[128];
    new string[128];
    if(sscanf(params,"s[128]", link)) return SendClientMessage(playerid, COLOR_RED,"USAGE: /youtubeforall [youtube-url]");
    if(strlen(link) >= 128) return SendClientMessage(playerid, COLOR_RED,"Link too long !");
    SendClientMessage(playerid, COLOR_BLUE, "If you want to hear the song, please enter /playmusic a.");
    format(string, sizeof(string), "[Music]: %s (Duration: %s)", GetVideoTitle(), GetLengthOfVideo());
    SendClientMessageToAll(COLOR_RED, string);
    format(string, sizeof(string), "[Music]: Music link: %s", GetVideoLink());
    SendClientMessageToAll(COLOR_RED, string);
    strmid(song, link, 0, 128, 128); //hatte es jetzt mit variablen gemacht, eigentlich hatte ich vor das es direkt für alle läuft
    return 1;
    }


    ocmd:stopyoutubeforall(playerid,params[])
    {
    if (pInfo[playerid][a_score] < 2)return SendClientMessage(playerid,COLOR_RED,"ERROR: You are not a high enough level to use this command");
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(playerid))continue;
    StopYoutubeVideoForPlayer(i);
    }
    return 1;
    }


    ocmd:playmusic(playerid, params[])
    {
    if (strlen(song) < 1)return SendClientMessage(playerid, COLOR_RED, "There is no music on run.");
    PlayYoutubeVideoForPlayer(playerid,song);
    return 1;
    }

    Hey Community,
    ich habe ein kleines Problem zu dem erstellen von Gangzonen.
    Hatte mich damit zuvor noch nie auseinander gesetzt...
    Hatte es mit 2 Varianten versucht aber nix klappt davon.
    Er zeigt alles an außer die Gangzone.


    new string[250];
    if (fInfo[id][ctf_text] != Text3D:-1)
    {
    Delete3DTextLabel(fInfo[id][ctf_text]);
    }
    if (!strlen(fInfo[id][ctf_team]))
    {
    format(string, sizeof(string), "\
    » %s «\n\
    TEAM: None",fInfo[id][ctf_name]);
    fInfo[id][ctf_pickup] = CreateDynamicPickup(1314, 1, fInfo[id][ctf_x], fInfo[id][ctf_y], fInfo[id][ctf_z], -1);
    M_CreateZone(fInfo[id][Min_x], fInfo[id][Min_y], fInfo[id][Max_x], fInfo[id][Max_y], fInfo[id][ctf_color], string, COLOR_RED);
    GangZoneShowForAll(fInfo[id][ctf_zone], fInfo[id][ctf_color]);
    }
    else
    {
    format(string, sizeof(string), "\
    » %s «\n\
    TEAM: %s",fInfo[id][ctf_name], fInfo[id][ctf_team]);
    fInfo[id][ctf_pickup] = CreateDynamicPickup(1314, 1, fInfo[id][ctf_x], fInfo[id][ctf_y], fInfo[id][ctf_z], -1);
    fInfo[id][ctf_text] = Create3DTextLabel(string, COLOR_RED, fInfo[id][ctf_x], fInfo[id][ctf_y], fInfo[id][ctf_z], 10, 0, 1);
    fInfo[id][ctf_zone] = GangZoneCreate(fInfo[id][Min_x], fInfo[id][Min_y], fInfo[id][Max_x], fInfo[id][Max_y]);
    GangZoneShowForAll(fInfo[id][ctf_zone], fInfo[id][ctf_color]);
    }