| igor.ol13 |
01-14-2013 17:35 |
How to avoid recursion here?
I have no one function that is calling himself, I verified. I've found the problem, but it doesn't make sense for me (I'll show)... Someone has an idea? Any comments are welcome :wink:
ps: I don't know if this code is working right
So, I have this func, note fill_player call, if I comment that line disappears recursion
PHP Code:
bool:info_login(id) { static login_info[MAX_LOGIN_STR + 1 char], pass_info[MAX_PASS_STR + 1 char], login_uid, uid_str[11 char], tempA[34 char], tempB[1 char]; get_user_info(id, "_rLogin", login_info, MAX_LOGIN_STR); login_uid = nvault_get(vault[login], login_info) if (login_uid > 0) { get_user_info(id, "_rPass", pass_info, MAX_PASS_STR); num_to_str(login_uid, uid_str, 10); nvault_get(vault[data], uid_str, tempA, MAX_PASS_STR); split(tempA, tempA, MAX_PASS_STR, tempB, 0, ";"); if (equal(tempA, pass_info)) //senha correta { // logged in cl_uid[set_id(id)] = login_uid; fill_player(id, uid_str); set_user_hud_info(id, {0,255,0}, "O login automatico esta ativado, voce ja esta logado ;)"); set_user_hud_info(id, {200,255,200}, "Digite a qualquer momento /registro para alterar informacoes de sua conta."); return true; } else if (login_info[0] != 0 && pass_info[0] != 0) { set_user_hud_info(id, {255,0,0}, "O login automatico esta ativado, mas a sua senha ou seu login esta incorreto!"); return false; } } return false; }
Now here is my fill_player func, note that info_login is never called here! But if I switch internal by public (and remove default values too), recursion disappears too :s
PHP Code:
fill_player(id, const uid[], operacao:op = obter, db:dado = pass, const novo_dado[] = -1) { static str_temp[sizeof(pl_dados)+11], strA[60 char], len; if (op == obter) { nvault_get(vault[data], uid, str_temp, charsmax(str_temp)); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); copy(pl_dados[pass], charsmax(pl_dados[pass]), strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); copy(pl_dados[nickname], charsmax(pl_dados[nickname]), strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); copy(pl_dados[loginname], charsmax(pl_dados[loginname]), strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); copy(pl_dados[steam], charsmax(pl_dados[steam]), strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); pl_dados[aps] = str_to_num(strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); copy(pl_dados[email], charsmax(pl_dados[email]), strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); pl_dados[regdate1] = str_to_num(strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); pl_dados[regdate2] = str_to_num(strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); pl_dados[regdate3] = str_to_num(strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); pl_dados[birthdate1] = str_to_num(strA); split(str_temp, strA, charsmax(strA), str_temp, charsmax(str_temp), ";"); pl_dados[birthdate2] = str_to_num(strA); ArrayPushArray(cl_dados, pl_dados); cl_id[set_id(id)] = ar_id; ar_id++; } else if (op == salvar) { len = 0; ArrayGetArray(cl_dados, cl_id[set_id(id)], pl_dados); len += formatex(str_temp[len], (charsmax(str_temp) - len), "%s;", pl_dados[pass]); len += formatex(str_temp[len], (charsmax(str_temp) - len), "%s;", pl_dados[nickname]); len += formatex(str_temp[len], (charsmax(str_temp) - len), "%s;", pl_dados[loginname]); len += formatex(str_temp[len], (charsmax(str_temp) - len), "%s;", pl_dados[steam]); num_to_str(pl_dados[aps], strA, charsmax(strA)); len += formatex(str_temp[len], (charsmax(str_temp) - len), "%s;", strA); len += formatex(str_temp[len], (charsmax(str_temp) - len), "%s;", pl_dados[email]); formatex(strA, charsmax(strA), "%d;%d;%d", pl_dados[regdate1], pl_dados[regdate2], pl_dados[regdate3]); len += formatex(str_temp[len], (charsmax(str_temp) - len), "%s;", strA); formatex(strA, charsmax(strA), "%d;%d", pl_dados[birthdate1], pl_dados[birthdate2]); len += formatex(str_temp[len], (charsmax(str_temp) - len), "%s", strA); nvault_pset(vault[data], uid, str_temp); } else if (op == atualizar) { ArrayGetArray(cl_dados, cl_id[set_id(id)], pl_dados); ArrayDeleteItem(cl_dados, cl_id[set_id(id)]); copy(pl_dados[dado], sizeof(dado), novo_dado); ArrayInsertArrayBefore(cl_dados, cl_id[set_id(id)], pl_dados); } else return; return; }
why is this happening? what can I do?
|