Сообщение от
ziggi
У тебя SetPlayerSkin находится в цикле на 10 итераций и никаких проверок я не вижу. В общем, объясни что ты хочешь сделать, а "Функция предназначена для выбора скина при регистрации." - не объяснение.
Я написал, что добавил условие.
В принципе, функция сама по себе простая, но что-то у меня всё не очень хорошо с её реализацией. В общем: идентификаторы внешности хранятся в базе данных:
Какой столбец для чего предназначен - понятно (пол, национальность, минимальный выбранный возраст и максимальный выбранный возраст).
При старте сервера они загружаются из базы данных:
PHP код:
mysql_tquery(MySQL, !"SELECT * FROM `skins_info`", !"LoadSkins", "");
И, соответственно, функция:
PHP код:
function LoadSkins()
{
new rows;
cache_get_row_count(rows);
if(rows)
{
for(new i = 0, buff; i < rows; i++)
{
cache_get_value_name_int(i, !"gend", buff);
reg_gend{i} = buff;
cache_get_value_name_int(i, !"nat", buff);
reg_nat{i} = buff;
cache_get_value_name_int(i, !"minage", buff);
reg_minage{i} = buff;
cache_get_value_name_int(i, !"maxage", buff);
reg_maxage{i} = buff;
cache_get_value_name(i, !"sid", skins[i], 26);
}
print(!"Загружено.");
}
else print(!"Не загружено.");
return true;
}
Из сообщения #5 видно, что всё загружается (выводит в чат).
Теперь сама функция выбора (дополненная):
PHP код:
stock SSkin(playerid, gend, nat, age)
{
new id[6], skin[MAX_PLAYERS] = -1;
skin[playerid]++;
for(new i = 0; i < 10; i++)
{
if(reg_gend{i} == gend && reg_nat{i} == nat && (age >= reg_minage{i} && age <= reg_maxage{i}))
{
SendClientMessage(playerid, -1, skins[i]);
sscanf(skins[i], !"p<,>iiiii", tempid[0], id[1], id[2], id[3], id[4]);
format(s_string, sizeof(s_string), "%i", sskin[playerid]);
SendClientMessage(playerid, -1, s_string);
SetPlayerSkin(playerid, tempid[skin[playerid]]);
}
}
return true;
}
Ну и команда для тестирования:
PHP код:
cmd:test(playerid)
{
SSkin(playerid, /*пол*/, /*национальность*/, /*возраст*/);
return true;
}