Jump to content
  • 0

pomoc Vyplata


arci224

Dotaz

Popis problému:

Zdravím mam problém, mam script na výplatu který by měl fungovat v pawno to nevyhazuje žádný error, jenže udělal jsem si debug pomocí čísel kam se to dostane, ale dle všeho to nefunguje i když pawno nevyhazuje ž´dnou chybu

 

Chyby/varování kompilátoru a při běhu:

--

 

Kód:

 

[spoiler][code=auto:0]
forward DoPaycheck(simulation);
public DoPaycheck(simulation){
    new HELP[300], str[1024], line[128];
    new DBResult:result;
 
    // Výběr platů z DB
    new paycheck[MAX_TEAMS][PAY_TYPE];
    new Float:payed[MAX_TEAMS];
    result = Query(vyplaty, "SELECT * FROM vyplaty");
    for(results){
        db_get_field_assoc(result, "id", HELP, 30);new teamid = strval(HELP);
        db_get_field_assoc(result, "start", HELP, 30);
        paycheck[teamid][BASEmin] = floatstr(HELP);
        db_get_field_assoc(result, "konec", HELP, 30);
        paycheck[teamid][BASEmax] = floatstr(HELP);
        db_get_field_assoc(result, "leader_start", HELP, 30);
        paycheck[teamid][LEADERmin] = floatstr(HELP);
        db_get_field_assoc(result, "leader_konec", HELP, 30);
        paycheck[teamid][LEADERmax] = floatstr(HELP);
        db_next_row(result);
    }
    db_free_result(result);
    // Výběr ranků
    new rank[MAX_TEAMS][MAX_RANKS][RANK_TYPE];
    //new teamid, rankid;
    result = Query(sql, "SELECT * FROM ranklist");
    for(results){
        db_get_field_assoc(result, "team", HELP, 30);
        new teamid = strval(HELP);
        db_get_field_assoc(result, "rank", HELP, 30);
        new rankid = strval(HELP);
        db_get_field_assoc(result, "plat", HELP, 30);
        rank[teamid][rankid][RATIO] = floatstr(HELP);
        //db_get_field_assoc(result, "name", rank[teamid][rankid][NAME], 64);
        db_next_row(result);
    }
    // Sem se to nedostane
    SendClientMessageToAll(-1,"3");
    db_free_result(result);
 
    // Výplatní páska
    for(new i=0;i99){
            addprem = 1;
        }
        printf(" [PAYCHECK] Výplata pro %s[id:%d;teamid:%d;rankid:%d;duty:%.2f%%]", PlayerName(i), i, teamid, rankid, duty);
 
        new Float:money = paycheck[teamid][BASEmin]+float(random(floatround(paycheck[teamid][BASEmax]-paycheck[teamid][BASEmin])));
        new Float:premie = (money*rank[teamid][rankid][RATIO]);
        premie = premie*addprem;
        new Float:hruba_mzda = money+premie;
        money=money+premie;
        new Float:socialni = money*0.25;
        new Float:zdravotni = money*0.09;
        new Float:superhruba = money+socialni+zdravotni;
        new Float:dane = superhruba*0.15;
        if(dane>=92.5) dane=dane-92.5;
        else dane=0.0;
 
        new Float:socialni_zamestnancem = money*0.065;
        new Float:zdravotni_zamestnancem = money*0.045;
        new Float:cista_mzda = hruba_mzda-dane-socialni_zamestnancem-zdravotni_zamestnancem;
 
        if(!simulation){
            if(cista_mzda=10000) SetPlayerAchieved(i, 17);
            if(actualMoney>=15000) SetPlayerAchieved(i, 18);
            if(actualMoney>=20000) SetPlayerAchieved(i, 19);
            if(actualMoney>=50000) SetPlayerAchieved(i, 20);
        } else {
            PayBillsSIM(i);
            PaySubscribe(i, 1);
        }
        format(line, 128, "hrubá mzda: {f1c40f}${AAAAAA}%.2f", hruba_mzda);format(str, sizeof(str), "%s\n{ecf0f1}%s", str, line);
        format(line, 128, "Hodnostní ohodnocení: {f1c40f}${AAAAAA}%.2f", premie);format(str, sizeof(str), "%s\n{ecf0f1}%s", str, line);
        format(line, 128, "Zdravotní pojištění: {f1c40f}${AAAAAA}%.2f", zdravotni);format(str, sizeof(str), "%s\n{ecf0f1}%s", str, line);
        format(line, 128, "   hrazeno zaměstnancem: {f1c40f}${AAAAAA}%.2f", zdravotni_zamestnancem);format(str, sizeof(str), "%s\n{ecf0f1}%s", str, line);
        format(line, 128, "Sociální pojištění: {f1c40f}${AAAAAA}%.2f", socialni);format(str, sizeof(str), "%s\n{ecf0f1}%s", str, line);
        format(line, 128, "   hrazeno zaměstnancem: {f1c40f}${AAAAAA}%.2f", socialni_zamestnancem);format(str, sizeof(str), "%s\n{ecf0f1}%s", str, line);
        format(line, 128, "Daň z příjmu: {f1c40f}${AAAAAA}%.2f", dane);format(str, sizeof(str), "%s\n{ecf0f1}%s", str, line);
        format(line, 128, "");format(str, sizeof(str), "%s\n%s", str, line);
        format(line, 128, "Čistá mzda: {f1c40f}${AAEEAA}%.2f", cista_mzda);format(str, sizeof(str), "%s\n{ecf0f1}%s", str, line);
 
        SetPVarString(i, "paycheck_message", str);
        printf("    Výplatní zpráva: %s", str);
        print("  [/PAYCHECK]");
        format(str, sizeof(str), "");
 
        SendOOCMessage(i, OOC_TYPE_INFO, "Přišla ti výplata, /vyplata");
    }
    SendClientMessageToAll(-1,"4");
    if(!simulation){
        new query[250];
        Query(vyplaty, "DELETE FROM vyplata");
        format(query, 250, "INSERT INTO vyplata VALUES (%d)", gettime()+60*60);
        Query(vyplaty, query);
        OnPaycheck();
    }
    SendClientMessageToAll(-1,"5");
 
    return 1;
} [/code]
[/spoiler]

 

 

 

Dodatečné poznámky:

 

#define results new i=0;i
Link to comment
Share on other sites

12 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Globální moderátor

No napadá mě, že tam může zlobit:

rank[teamid][rankid][RATIO] = floatstr(HELP);

 

Stáhni si crashdetect, jestli tam není náhodou nějaký run-time error

Link to comment
Share on other sites

  • 0

Vyhodí to

[13:07:06] SELECT * FROM vyplaty
[13:07:06] SELECT * FROM ranklist
[13:07:06] [debug] Run time error 4: "Array index out of bounds"
[13:07:06] [debug]  Accessing element at index 100 past array upper bound 24
[13:07:06] [debug] AMX backtrace:
[debug] #0 000601a8 in public DoPaycheck (0x00000000) from job.amx

je to vypsáno od mysql záznamu výše od toho nic není

Link to comment
Share on other sites

  • 0
  • Globální moderátor

[13:07:06] [debug] Accessing element at index 100 past array upper bound 24

 

#define MAX_RANKS 25

 

 

Laicky přeloženo: Přístup k prvku na indexu 100 přes horní mez 24.

 

Tady máš odpověď. V tabulce ranklist máš tým, který má rank 100 (edit poznámka: teda aspoň si to tak interpretuju co s tím chceš dělat). Technicky řečeno, přesahuješ velikost pole rank, tím že tam dosazuješ rank[...][100][...]....

 

Oprav to buď tím, že zvýšíš MAX_RANK na 101 (idx od 0) nebo přidáš podmínku, že pokud přesahuje 25 tak se nastaví na 24 (idx od 0)

Edited by HighPrint
  • Líbí se mi to! (+1) 3
Link to comment
Share on other sites

  • 0

Ono kdyby si ten mód znal, tak víš jaké má omezení :) .. Už ti stihli odpovědět ostatní. Stačilo mi napsat na FB a já bych ti s mým starým ukradeným scriptem rád pomohl.

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...