- Регистрация
- 25 Июл 2012
- Сообщения
- 41
- Лучшие ответы
- 0
- Репутация
- 0
Всем привет!
Плохо, что не сделал этого раньше!
Размеры запросов постоянно растут и использовать SavePlayer со всеми параметрами - не лучшая идея. (не только Player)
Чтобы не вваливать такие огромные запросы - нужно сделать синхронизацию каждой переменной с mysql при ее изменении.
то же можно проделать с char и float
пример использования:
ВАЖНО: представлен только вариант с целыми числами (не float, не char)
Можно не использовать SavePlayer при disconnect, т.к все переменные записываются в таблицу при их изменении.
Если есть предложения по улучшению сей функции - буду только рад выслушать:ab:
Плохо, что не сделал этого раньше!
Размеры запросов постоянно растут и использовать SavePlayer со всеми параметрами - не лучшая идея. (не только Player)
Чтобы не вваливать такие огромные запросы - нужно сделать синхронизацию каждой переменной с mysql при ее изменении.
PHP:
enum pInfo
{
p_id,//id в таблице mysql
p_money,
}
new PlayerInfo[MAX_PLAYER][pInfo];
PHP:
stock EditPlayer_int(playerid,params,pInfo_name[],id=0,bool:know=true)
//где playerid - id игрока, если онлайн; params - сюда пихаем действие с переменной; pInfo_name[] - название переменной в таблице mysql; id - если игрок оффлайн, но мы знаем его p_id; know - задать значение = true, выполнить с числом сложение (делал для money) = false
{
new time = GetTickCount();//засекаем время
if(id==0)//если игрок онлайн
id=PlayerInfo[playerid][p_id];
new query_string[500] = "UPDATE `players` SET";//"players" на свое название
if(!know)//если значение переменной нужно прибавить know==false
format(query_string, sizeof(query_string), "%s `%s` = `%s`+'%d'", query_string,pInfo_name,pInfo_name, params);
else
format(query_string, sizeof(query_string), "%s `%s` = '%d'", query_string,pInfo_name, params);
format(query_string, sizeof(query_string), "%s WHERE `id` = '%d'", query_string, id);
mysql_tquery(mysql_connect_ID, query_string, "", "");//"mysql_connect_ID" - на свое название
printf("[save_player]: <%i>.\ttime size: <%i мс>.\t params: %s",id,GetTickCount()-time,pInfo_name);
return 1;
}
пример использования:
PHP:
CMD:givemoney(playerid,params[])//если игрок онлайн
{
new giveplayerid,moneydd;
if(sscanf(params, "dd", giveplayerid,moneydd))return SCM(playerid,COLOR_HELP,"/givemoney [id][money]");
EditPlayer_int(giveplayerid,PlayerInfo[giveplayerid][p_money]+=moneydd,"money");//"money" меняй на свое название
return 1;
}
CMD:offgivemoney(playerid,params[])//если игрок офлайн
{
new giveplayerid,moneydd;
if(sscanf(params, "dd", giveplayerid,moneydd))return SCM(playerid,COLOR_HELP,"/offgivemoney [id][money]");
EditPlayer_int(0,moneydd,"money",giveplayerid,false);//в итоге прибавит значение moneydd к значению "money" в таблице
//giveplayerid - id из mysql таблицы
}
Можно не использовать SavePlayer при disconnect, т.к все переменные записываются в таблицу при их изменении.
Если есть предложения по улучшению сей функции - буду только рад выслушать:ab:
Последнее редактирование: