Problem kod komande

Započeo boky., Jun 05, 2023, 18:30:14 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 4 gostiju pregledaju ovu temu.

Problem(error/warning): Koristim YSI 5.1. Komanda /createhouse je radila top, cim je dosla do 23 id ona vise kao ne postoji komanda na serveru.  A max kuca 50. Ubacio sam crashdetect i izbacio mi je ovo, malo sam cesljao po netu nesto za MALLOC ali opet isto se desava.
Deo skripte: [pawn]Vaš odgovor[/pawn]
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [pawn][18:24:39] [debug]
[18:24:39] [debug] Parameter count corrections:
[18:24:39] [debug]
[18:24:39] [debug] The 1st mangled argments (e.g. `<1073741823 arguments>`) below should read `<2 arguments>`
[18:24:39] [debug]
[18:24:39] [debug] Run time error 4: "Array index out of bounds"
[18:24:39] [debug] AMX backtrace:
[18:24:39] [debug] #0 0021f764 in ?? (0, 2967376, 0) from sp-rpg.amx
[18:24:39] [debug] #1 00048128 in ?? (0, 2967324, 0) from sp-rpg.amx
[18:24:39] [debug] #2 0004ac80 in ?? (0, 2967324, 0, 0, 0, 0, 8, 0, 2967324, 0, ... <1073741813 arguments>) from sp-rpg.amx
[18:24:39] [debug] #3 000178c0 in public OnPlayerCommandText (0, 2967324) from sp-rpg.amx[/pawn]
Slika/video ingame problema(obavezno ako je ingame problem): link slike


Citat: bepo poslato Jun 05, 2023, 19:18:40 POSLE PODNE
daj cmd cijelu

Evo ga

[pawn]YCMD:createhouse(playerid, const string: params[], help)
{
    if(player_ADMIN[playerid] < 5)
        return Error(playerid, "Nemate dozvolu za ovu komandu - niste admin level 5.");

    if(admin_DUZNOST[playerid] == 0)
        return Error(playerid, "Niste na admin duznosti - koristite /aduty kako bi koristili komande!");

    new kucaID = NextHouseID(), vrsta, Float:Poz[3];
    if(sscanf(params, "i", vrsta))
    {
        Usage(playerid, "/createhouse <vrsta>");
        Info(playerid, "1. Mala kuca. | 2. Srednja kuca. | 3. Velika kuca. | 4. Villa.");
        return 1;
    }
   
    if(vrsta < 1 || vrsta > 4)
        return Error(playerid, "Vrsta ne moze biti iznad 4 i ispod 1!");
   
    if(kucaID >= MAX_KUCA)
        return Error(playerid, "Maximum kuca je ogranicen ne mozete ici iznad!");
   
    GetPlayerPos(playerid, Poz[0], Poz[1], Poz[2]);
    switch(vrsta)
    {
        case 1:
        {
            kuca_INT_X[kucaID] = 2308.7529;
            kuca_INT_Y[kucaID] = -1212.5588;
            kuca_INT_Z[kucaID] = 1049.0234;
            kuca_ID[kucaID] = MALAKUCA;
            kuca_INT_ID[kucaID] = 6;
           
            kuca_CENA[kucaID] = 350000;
            kuca_LEVEL[kucaID] = 5;
        }   
        case 2:
        {
            kuca_INT_X[kucaID] = 318.6055;
            kuca_INT_Y[kucaID] = 1114.9292;
            kuca_INT_Z[kucaID] = 1083.8828;
            kuca_ID[kucaID] = SREDNJAKUCA;
            kuca_INT_ID[kucaID] = 5;
           
            kuca_CENA[kucaID] = 600000;
            kuca_LEVEL[kucaID] = 10;
        }
        case 3:
        {
            kuca_INT_X[kucaID] = 386.6623;
            kuca_INT_Y[kucaID] = 1471.7719;
            kuca_INT_Z[kucaID] = 1080.1875;
            kuca_ID[kucaID] = VELIKAKUCA;
            kuca_INT_ID[kucaID] = 15;
           
            kuca_CENA[kucaID] = 800000;
            kuca_LEVEL[kucaID] = 15;
        }
        case 4:
        {
            kuca_INT_X[kucaID] = 2324.3840;
            kuca_INT_Y[kucaID] = -1149.0188;
            kuca_INT_Z[kucaID] = 1050.7101;
            kuca_ID[kucaID] = VILLA;
            kuca_INT_ID[kucaID] = 12;
           
            kuca_CENA[kucaID] = 1200000;
            kuca_LEVEL[kucaID] = 15;
        }
    }   
    kuca_VW_ID[kucaID] = kucaID;
    kuca_OWNERPROVERA[kucaID] = 0;
    strmid(kuca_OWNERIME[kucaID], "Niko", 0, strlen("Niko"), 255);
    kuca_EXT_X[kucaID] = Poz[0];
    kuca_EXT_Y[kucaID] = Poz[1];
    kuca_EXT_Z[kucaID] = Poz[2];
    kuca_NOVAC[kucaID] = 0;
    kuca_ZAKLJUCANO[kucaID] = 1;
    kuca_NEAKTIVNOST[kucaID] = 0;
    create_House(kucaID);
    save_House(kucaID);

    Torq(playerid, "Info: Kreirali ste kucu id: %d, vrsta: %s, cena: $%d, level: %d.", kucaID, HouseID(kuca_ID[kucaID]), kuca_CENA[kucaID], kuca_LEVEL[kucaID]);
   
    adminPoruka(0x5DA335AA, "Admin Info: Admin %s je kreirao kucu id: %d, vrsta: %s, cena: $%d, level: %d.",
        ReturnPlayerName(playerid), kucaID, HouseID(kuca_ID[kucaID]), kuca_CENA[kucaID], kuca_LEVEL[kucaID]);

    Log_Write(ADMINLOG, "(%s) Admin %s je kreirao kucu id: %d, vrsta: %s, cena: $%d, level: %d.",
            ReturnDate(), ReturnPlayerName(playerid), kucaID, HouseID(kuca_ID[kucaID]), kuca_CENA[kucaID], kuca_LEVEL[kucaID]);
    return 1;
}[/pawn]




Citat: realnaith poslato Jun 05, 2023, 20:21:11 POSLE PODNE
Opisi detaljnije problem

Ovako, krenuo sam da kreiram kuce po serveru i kada je doslo od id 23 kuce, od tada mi server prikazuje SERVER: unknown command, kao da ne postoji. A jos veca fora kada samo upisem /createhouse radi, ali cim upisem /createhouse vrstu(1/2/3/4) nece komanda. Max kuca mi je 50. Ubacio sam crashdetect i to mi izaslo. Nmg da provalim koji je djavo.
Poslednja Izmena: Jun 05, 2023, 20:27:06 POSLE PODNE od hexx.

Citat: hexx. poslato Jun 05, 2023, 20:25:59 POSLE PODNE
Ovako, krenuo sam da kreiram kuce po serveru i kada je doslo od id 23 kuce, od tada mi server prikazuje SERVER: unknown command, kao da ne postoji. A jos veca fora kada samo upisem /createhouse radi, ali cim upisem /createhouse vrstu(1/2/3/4) nece komanda. Max kuca mi je 50. Ubacio sam crashdetect i to mi izaslo. Nmg da provalim koji je djavo.

Posalji delove vezane za kuce kao i logove kreiranja kuce



[pawn]
new kucaID = NextHouseID(),

//....

    if(kucaID >= MAX_KUCA)
        return Error(playerid, "Maximum kuca je ogranicen ne mozete ici iznad!");
[/pawn]
Ovo je sve kako treba, jedino mozda NextHouseID ako vraca negativni broj kao invalid pa da te to jebe.
Ali izgleda ko da je radio neko ko je razumeo koliko toliko, ili je makar kopirao iz neceg sto je donekle ok.

Vidi NextHouseID funkciju, ili je posalji ovde. A mozes probat YCMD da zamenis sa ZCMD ukoliko ne koristis nista osim command processora.

Citat: Sniffie White poslato Jun 05, 2023, 21:28:06 POSLE PODNE
[pawn]
new kucaID = NextHouseID(),

//....

    if(kucaID >= MAX_KUCA)
        return Error(playerid, "Maximum kuca je ogranicen ne mozete ici iznad!");
[/pawn]
Ovo je sve kako treba, jedino mozda NextHouseID ako vraca negativni broj kao invalid pa da te to jebe.
Ali izgleda ko da je radio neko ko je razumeo koliko toliko, ili je makar kopirao iz neceg sto je donekle ok.

Vidi NextHouseID funkciju, ili je posalji ovde. A mozes probat YCMD da zamenis sa ZCMD ukoliko ne koristis nista osim command processora.

[pawn]NextHouseID()
{
    new id = -1;
    for(new loop = (0), provera = (-1), Data_[64] = "\0"; loop != MAX_KUCA; ++ loop)
    {
       provera = (loop + 1);
       format(Data_, (sizeof Data_), KUCE_FILE, provera);
       if(!fexist(Data_))
       {
          id = (provera);
          break;
       }
    }
    return id;
}[/pawn]

Probao sam, stavio sam Pawn.CMD isto mi se desava, samo sa tom komandom. Ce da vidimo, resava mi ovo realnaith.

Eto ti problem, ako je invalid vraca -1

U sustini trebao bi da proveravas ovako
[pawn]
//Umesto ovoga:
    if(kucaID >= MAX_KUCA)
        return Error(playerid, "Maximum kuca je ogranicen ne mozete ici iznad!");

//Ovako:
    if(kucaID == -1)
        return Error(playerid, "Maximum kuca je ogranicen ne mozete ici iznad!");
[/pawn]

To pricam samo za taj slucaj, za druge ne znam. To receno, NextHouseID je po meni sam po sebi glupo napravljen zato sto umesto da loop kroz niz on proverava fajlove. Ali necu ulaziti u to, ne bi trebalo da je to problem.
PS: Poruku bih isto izmenio umesto maximum kuca na nesto tipa nije pronadjen slobodnan ID za novu kucu ili nesto slicno.
Poslednja Izmena: Jun 05, 2023, 21:38:46 POSLE PODNE od Sniffie White

Citat: Sniffie White poslato Jun 05, 2023, 21:37:30 POSLE PODNE
Eto ti problem, ako je invalid vraca -1

U sustini trebao bi da proveravas ovako
[pawn]
//Umesto ovoga:
    if(kucaID >= MAX_KUCA)
        return Error(playerid, "Maximum kuca je ogranicen ne mozete ici iznad!");

//Ovako:
    if(kucaID == -1)
        return Error(playerid, "Maximum kuca je ogranicen ne mozete ici iznad!");
[/pawn]

To pricam samo za taj slucaj, za druge ne znam. To receno, NextHouseID je po meni sam po sebi glupo napravljen zato sto umesto da loop kroz niz on proverava fajlove. Ali necu ulaziti u to, ne bi trebalo da je to problem.
PS: Poruku bih isto izmenio umesto maximum kuca na nesto tipa nije pronadjen slobodnan ID za novu kucu ili nesto slicno.

[pawn]if(kucaID == -1)
        return Error(playerid, "Maximum kuca je ogranicen ne mozete ici iznad!");[/pawn]

Nije do toga ista je prica. Kako mi je rekao realnaith, problem je izgleda do YSI paketa 5.1. Takodje sam isto citao na github da je Y_Less nesto vezano za paket sredjivao, ali izgleda je opet ne radi.

Zato sam ti rekao da probas zameniti YCMD na ZCMD, ne lupam bezveze ko vecina ovde. Isto tako cini mi se da nemas -d3 flag, zato su ti upitnici umesto imena funkcije.
Ali ono sto sam ti iznad rekao, da ide -1 to stoji (iako mozda nije vezano za problem).

Ako zamenis ycmd na zcmd (ili pawn.cmd kako si rekao), a isto ti se desava, onda downgrade YSI na recimo v5.05.0505  (po ideji bilo koja 5.x.x verzija bi trebala da ti radi iako je