Page 1 of 1

strigimas

Posted: 2011 Apr 29 18:53
by aurimasko
Dėl ko gali užstrigti ( išsijungti ) serveris, be jokio erroro?

Re: strigimas

Posted: 2011 Apr 29 19:21
by aaarnas
Ta prasme užstringa ir konsolė nereaguoja į komandas ir nieko nerašo? Amžinas ciklas susidarė.

Re: strigimas

Posted: 2011 Apr 29 19:26
by aurimasko
aaarnas wrote:Ta prasme užstringa ir konsolė nereaguoja į komandas ir nieko nerašo? Amžinas ciklas susidarė.
for, while, switch sitie ciklai ar kurie? beje taip kartais būna tada kai paleidžiu serverį, net nespėjus viskam užsikrauti

Re: strigimas

Posted: 2011 Apr 29 19:40
by aaarnas
for ir whiel. Switch yra sąlyga.

Paleidus serverį kartais būna, kad luktelt reikia, bet žiūrint kaip užstringa.

Re: strigimas

Posted: 2011 Apr 29 19:50
by aurimasko
aaarnas wrote:for ir whiel. Switch yra sąlyga.

Paleidus serverį kartais būna, kad luktelt reikia, bet žiūrint kaip užstringa.
o for ciklai gali būti bet kokia kad ir for(new i = 0; i < num; i++) ar pvz kai modelius precachina su new models[][] = { "...", ".." }

Re: strigimas

Posted: 2011 Apr 29 20:02
by aaarnas
Su for ciklu sudėtinga, nes dažniausia i daromas 0 arba 1 ir sąlyga, kad jis mažesnis už kažką. While didesnė tikimybė, nes ten tik sąlyga. Amžinas ciklas susidaro, kai įvyksta cikle kažkas, apie ką nepagalvojai ir pradedama skaičiuoti į kitą pusę nei to reikia.

Re: strigimas

Posted: 2011 Apr 29 20:16
by aurimasko
aaarnas wrote:Su for ciklu sudėtinga, nes dažniausia i daromas 0 arba 1 ir sąlyga, kad jis mažesnis už kažką. While didesnė tikimybė, nes ten tik sąlyga. Amžinas ciklas susidaro, kai įvyksta cikle kažkas, apie ką nepagalvojai ir pradedama skaičiuoti į kitą pusę nei to reikia.

Code: Select all

    while((pos <= sizeof(g_Buttons)) && (ent[0] = engfunc(EngFunc_FindEntityByString, ent[0], "classname", "info_player_deathmatch")))    {        pev(ent[0], pev_origin, origin)        while((ent[1] = engfunc(EngFunc_FindEntityInSphere, ent[1], origin, CELL_RADIUS)))        {            if(!is_valid_ent(ent[1]))                continue                        entity_get_string(ent[1], EV_SZ_classname, info, charsmax(info))            if(!equal(info, "func_door"))                continue                        entity_get_string(ent[1], EV_SZ_targetname, info, charsmax(info))            if(!info[0])                continue                        if(TrieKeyExists(g_CellManagers, info))            {                TrieGetCell(g_CellManagers, info, ent[2])            }            else            {                ent[2] = engfunc(EngFunc_FindEntityByString, 0, "target", info)            }                        if(is_valid_ent(ent[2]) && (in_array(ent[2], g_Buttons, sizeof(g_Buttons)) < 0))            {                g_Buttons[pos] = ent[2]                pos++                break            }        }    }
Šis ciklas galėtų tai padaryti?

Re: strigimas

Posted: 2011 Apr 29 22:06
by aaarnas
Pavyzdys kaip patikrinti + apsaugoti nuo užstrigimo:

Code: Select all

new temp    while(1<4) {                if(++temp > 10000) {                        log_amx("Ciklas while(1<4) uzstrigo")            break;        }    }

Re: strigimas

Posted: 2011 May 02 15:21
by aurimasko

Code: Select all

 L 05/02/2011 - 16:20:28: [.amxx] uzstrigo setup_buttonsL 05/02/2011 - 16:20:28: [.amxx] uzstrigo setup_buttons2 
va tokių errorų daug..

Kodas:

Code: Select all

  public setup_buttons(){    new ent[3]    new Float:origin[3]    new info[32]    new pos        while((pos <= sizeof(g_Buttons)) && (ent[0] = engfunc(EngFunc_FindEntityByString, ent[0], "classname", "info_player_deathmatch")))    {        pev(ent[0], pev_origin, origin)        while((ent[1] = engfunc(EngFunc_FindEntityInSphere, ent[1], origin, CELL_RADIUS)))        {            if(!is_valid_ent(ent[1]))                continue                        entity_get_string(ent[1], EV_SZ_classname, info, charsmax(info))            if(!equal(info, "func_door"))                continue                        entity_get_string(ent[1], EV_SZ_targetname, info, charsmax(info))            if(!info[0])                continue                        if(TrieKeyExists(g_CellManagers, info))            {                TrieGetCell(g_CellManagers, info, ent[2])            }            else            {                ent[2] = engfunc(EngFunc_FindEntityByString, 0, "target", info)            }                        if(is_valid_ent(ent[2]) && (in_array(ent[2], g_Buttons, sizeof(g_Buttons)) < 0))            {                g_Buttons[pos] = ent[2]                pos++                break            }            log_amx("uzstrigo setup_buttons2")        }        log_amx("uzstrigo setup_buttons")    }    TrieDestroy(g_CellManagers)}  

Re: strigimas

Posted: 2011 May 02 19:50
by aaarnas
Ne taip :D

Code: Select all

public setup_buttons(){    new ent[3]    new Float:origin[3]    new info[32]    new pos    new temp        while((pos <= sizeof(g_Buttons)) && (ent[0] = engfunc(EngFunc_FindEntityByString, ent[0], "classname", "info_player_deathmatch")))    {        pev(ent[0], pev_origin, origin)        while((ent[1] = engfunc(EngFunc_FindEntityInSphere, ent[1], origin, CELL_RADIUS)))        {            if(!is_valid_ent(ent[1]))                continue                        entity_get_string(ent[1], EV_SZ_classname, info, charsmax(info))            if(!equal(info, "func_door"))                continue                        entity_get_string(ent[1], EV_SZ_targetname, info, charsmax(info))            if(!info[0])                continue                        if(TrieKeyExists(g_CellManagers, info))            {                TrieGetCell(g_CellManagers, info, ent[2])            }            else            {                ent[2] = engfunc(EngFunc_FindEntityByString, 0, "target", info)            }                        if(is_valid_ent(ent[2]) && (in_array(ent[2], g_Buttons, sizeof(g_Buttons)) < 0))            {                g_Buttons[pos] = ent[2]                pos++                break            }        }        if(++temp > 10000) {                        log_amx("uzstrigo setup_buttons")            break;        }    }    TrieDestroy(g_CellManagers)}
Va taip daryk.