ThomasFlores
Новичок
Привет всем! Уже долгое время не могу создать команду, которая обновляет некоторую информацию о доме, например, цену, класс, квартплату. Хочу сделать её так, чтобы сразу записывала изменение в БД, но у меня не выходит... Сделал две команды: одна создаёт координаты дома, другая изменяет координаты личного транспорта у этого дома. Вот код, как я их делал:
С ними проблем у меня не возникло. Не получается создать именно команду, по которой нужно задействовать определенный ID дома, например, /updateprice [ID дома] [Цена]
Примерно так я создавал команды такого типа:
В сообщении "Цена для дома № ... была успешно обновлена" писалось не то, что я на самом деле писал в этой самой команде. Например я писал /updateprice 500 100000, а мне выдавало "Цена для дома № e была успешно обновлена"
Я менял сабж %e на %s и %d, сообщение, которое мне выдавало после ввода команды изменялось, но не так, как должно быть.
Я переписывал эту команду разными способами, пытался сделать и что-то типо /selhouse [ID], чтобы ID который я впишу сохранился под переменную, чтобы потом уже просто ввести /updateprice [Цена] (То есть без ID), так как я уже записал ID в переменную, но и так же ничего не получалось.
Подскажите как мне сделать эту систему
Может свой способ какой-нибудь?
PHP:
if(strcmp(cmd, "/createhouse", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] < 7) return true;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))return SendClientMessage(playerid, -1, "Введите: /createhouse [ID дома]" ) ;
new newstring[40];
mysql_real_escape_string(tmp, newstring);
new gethouse[80];
format(gethouse, sizeof(gethouse), "SELECT * FROM `houses` WHERE ID = '%s'", tmp);
new Cache: ljasdasdg = mysql_query(dbHandle,gethouse,true);
if(cache_num_rows() > 0) return SendClientMessage(playerid,COLOR_GRAD1,"Такой ID дома уже существует");
if(cache_num_rows() == 0)
{
new Float: lwx, Float:lwy, Float:lwz;
GetPlayerPos(playerid, lwx, lwy, lwz);
new mquery[1024];
mysql_format(dbHandle, mquery, sizeof(mquery), "INSERT INTO houses (hExitX, hExitY, hExitZ, ID) VALUES ('%f','%f','%f','%e')", lwx, lwy, lwz , tmp) ;
mysql_pquery(dbHandle, mquery);
format(query,sizeof(query),"ID дома № %s был успешно создан",tmp);
SendClientMessage(playerid, 0x187bf1AA,query);
}
cache_delete(ljasdasdg);
return 1;
}
if(strcmp(cmd, "/updateposcar", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] < 7) return true;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Ввведите: /updateposcar [ID дома]");
new newstring[40];
mysql_real_escape_string(tmp, newstring);
new getint[80];
format(getint, sizeof(getint), "SELECT * FROM `houses` WHERE ID = '%s'", tmp);
new Cache: ljasdasdg = mysql_query(dbHandle,getint,true);
if(cache_num_rows() == 0) return SendClientMessage(playerid,COLOR_GRAD1,"Такого ID дома не существует");
if(cache_num_rows() > 0)
{
new Float: PosCar[3], Float: AnglePos;
GetPlayerFacingAngle(playerid,AnglePos);
GetPlayerPos(playerid,PosCar[0],PosCar[1],PosCar[2]);
new mquery[1024];
mysql_format(dbHandle, mquery, sizeof(mquery), "UPDATE houses SET hCarX = '%f', hCarY = '%f', hCarZ = '%f', hCarA = '%f' WHERE ID = '%e'", PosCar[0], PosCar[1], PosCar[2], AnglePos, tmp);
mysql_pquery(dbHandle, mquery);
format(query,sizeof(query),"Координаты личного транспорта для дома № %s были успешно обновлены",tmp);
SendClientMessage(playerid, 0x187bf1AA,query);
}
cache_delete(ljasdasdg);
return 1;
}
С ними проблем у меня не возникло. Не получается создать именно команду, по которой нужно задействовать определенный ID дома, например, /updateprice [ID дома] [Цена]
Примерно так я создавал команды такого типа:
PHP:
if(strcmp(cmd, "/updateprice", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] < 7) return true;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Ввведите: /updateprice [ID дома] [Цена]");
new IDHome;
IDHome = srval(tmp);
new newstring[40];
mysql_real_escape_string(tmp, newstring);
new getint[80];
format(getint, sizeof(getint), "SELECT * FROM `houses` WHERE ID = '%s'", tmp);
new Cache: ljasdasdg = mysql_query(dbHandle,getint,true);
if(cache_num_rows() == 0) return SendClientMessage(playerid,COLOR_GRAD1,"Такого ID дома не существует");
if(cache_num_rows() > 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Ввведите: /updateprice [ID дома] [Цена]");
new PriceHome;
PriceHome = srval(tmp);
new mquery[1024];
mysql_format(dbHandle, mquery, sizeof(mquery), "UPDATE houses SET Price = '%e' WHERE ID = '%e'", PriceHome,IDHome);
mysql_pquery(dbHandle, mquery);
format(query,sizeof(query),"Цена для дома № %s была успешно обновлена",IDHome);
SendClientMessage(playerid, 0x187bf1AA,query);
}
cache_delete(ljasdasdg);
return 1;
}
В сообщении "Цена для дома № ... была успешно обновлена" писалось не то, что я на самом деле писал в этой самой команде. Например я писал /updateprice 500 100000, а мне выдавало "Цена для дома № e была успешно обновлена"
Я менял сабж %e на %s и %d, сообщение, которое мне выдавало после ввода команды изменялось, но не так, как должно быть.
Я переписывал эту команду разными способами, пытался сделать и что-то типо /selhouse [ID], чтобы ID который я впишу сохранился под переменную, чтобы потом уже просто ввести /updateprice [Цена] (То есть без ID), так как я уже записал ID в переменную, но и так же ничего не получалось.
Подскажите как мне сделать эту систему
Последнее редактирование модератором:
