strigimas

Kalbos apie viską kas nesusiję su kitais forumais.
Post Reply
User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

strigimas

Post by aurimasko »

Dėl ko gali užstrigti ( išsijungti ) serveris, be jokio erroro?

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: strigimas

Post by aaarnas »

Ta prasme užstringa ir konsolė nereaguoja į komandas ir nieko nerašo? Amžinas ciklas susidarė.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

Re: strigimas

Post 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

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: strigimas

Post by aaarnas »

for ir whiel. Switch yra sąlyga.

Paleidus serverį kartais būna, kad luktelt reikia, bet žiūrint kaip užstringa.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

Re: strigimas

Post 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[][] = { "...", ".." }

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: strigimas

Post 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.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

Re: strigimas

Post 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?

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: strigimas

Post 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;        }    }
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

Re: strigimas

Post 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)}  

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: strigimas

Post 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.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests