strigimas
Posted: 2011 Apr 29 18:53
Dėl ko gali užstrigti ( išsijungti ) serveris, be jokio erroro?
for, while, switch sitie ciklai ar kurie? beje taip kartais būna tada kai paleidžiu serverį, net nespėjus viskam užsikrautiaaarnas wrote:Ta prasme užstringa ir konsolė nereaguoja į komandas ir nieko nerašo? Amžinas ciklas susidarė.
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[][] = { "...", ".." }aaarnas wrote:for ir whiel. Switch yra sąlyga.
Paleidus serverį kartais būna, kad luktelt reikia, bet žiūrint kaip užstringa.
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 } } }
Code: Select all
new temp while(1<4) { if(++temp > 10000) { log_amx("Ciklas while(1<4) uzstrigo") break; } }
Code: Select all
L 05/02/2011 - 16:20:28: [.amxx] uzstrigo setup_buttonsL 05/02/2011 - 16:20:28: [.amxx] uzstrigo setup_buttons2
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)}
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)}