Сообщение от
BadPawn
Учту. Критика всегда полезна. НО:
Я в павно не старый, учусь, поэтому можно было и подтолкнуть в нужное русло.
Так своими замечаниями я именно это и пытался сделать... Осталось лишь прислушаться к ним и исправить все недочёты.
Ну, как я понимаю, ты хочешь увидеть готовый вариант. Я сделал бы что-то типа этого:
PHP код:
if(!strcmp(cmdtext, "/setname", true))
{
//Тут можете вставить ваш код проверки на администратора
new giveplayerid,
new_name[MAX_PLAYER_NAME];
if(sscanf(params, "us[24]", giveplayerid, new_name)) return SendClientMessage(playerid, 0xFFFFFFAA, "***Используйте: /setname [ID/Имя_Фамилия] [New_Name]");
if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, 0xAFAFAFAA, "**Персонаж отсутствует на сервере.");
//Так же можно вставить свои проверки, типа проверки на авторизацию и т.п.
static const fmt_query[] = "SELECT * FROM `имя_таблицы_аккаунтов` WHERE `имя_игрока` = '%s'";// ИМЕНА ТАБЛИЦЫ И СТОЛБЦА С НИКОМ ЗАМЕНИТЬ НА СВОИ
new query_string[sizeof(fmt_query)+(MAX_PLAYER_NAME-2)];
format(query_string, sizeof(query_string), fmt_query, new_name);
mysql_function_query(mysql_connect_ID, query_string, false, "OnPlayerSetName", "dds", playerid, giveplayerid, new_name);
return 1;
}
PHP код:
forward OnPlayerSetName(admin_id, playerid, const text[]);
public OnPlayerSetName(admin_id, playerid, const text[])
{
new rows, fields;
cache_get_data(rows, fields);
if(rows) return SendClientMessage(admin_id, 0xAFAFAFAA, "**Ник %s используется!", text);
static const fmt_query[] = "UPDATE `имя_таблицы_аккаунтов` SET `имя_игрока` = '%s' WHERE `имя_игрока` = '%s'";// ИМЕНА ТАБЛИЦЫ И СТОЛБЦА С НИКОМ ЗАМЕНИТЬ НА СВОИ
new query_string[sizeof(fmt_query)+(MAX_PLAYER_NAME-2)+(MAX_PLAYER_NAME-2)],
old_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, old_name, MAX_PLAYER_NAME);
format(query_string, sizeof(query_string), fmt_query, new_name, old_name);
mysql_function_query(mysql_connect_ID, query_string, false, "", "");
SetPlayerName(playerid, text);
format(query_string, sizeof(query_string), "Теперь %s известен, как %s", old_name, text);
SendClientMessageToAll(0xFF6347AA, query_string);
SendClientMessage(playerid, 0xFF6347AA, "* Не забудьте ввести свой новый ник в SA:MP Client.");
return 1;
}
Но работоспособность не проверял, писал прямо в браузере. Тут и оптимизация кода в целом, и отсутствие лишних самописанных функций/макросов, которых у других может не быть.