Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: перевод - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
перевод команда на стандаритный

#1
Пользователь офлайн   _54REGION_ 

  • Эксперт
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
помогите пожалуйста перевести команду на стандатный процесор
CMD:ban(playerid, params[])
{
//	if(!IsPlayerAdmin(playerid)) return 1;

new
targetid,
days,
days_string[4+1],
targetid_name[MAX_PLAYER_NAME+1],
playerid_name[MAX_PLAYER_NAME+1];

if(sscanf(params, !"uds[120]", targetid, days, params[0]))
return SendClientMessage(playerid, -1, !"Использование: /ban [ID/Ник] [Кол-во дней] [Причина]");
if(targetid == INVALID_PLAYER_ID)
return SendClientMessage(playerid, -1, !"Игрок не найден.");
if(!(1 <= days <= 100))
return SendClientMessage(playerid, -1, !"Неверное количество дней. Доступно: 1-100.");
if(strlen(params[0]) > 32)
return SendClientMessage(playerid, -1, !"Длина причины должна быть не больше 32х символов.");

GetPlayerName(playerid, playerid_name, MAX_PLAYER_NAME);
GetPlayerName(targetid, targetid_name, MAX_PLAYER_NAME);

GetDeclensionWord(days_string, sizeof(days_string), days, "день", "дня", "дней");

static const auto_string[] =
"Администратор %s[%d] забанил(а) %s[%d] на %d %s. Причина: %s";
new
string[sizeof(auto_string) - 2 + MAX_PLAYER_NAME - 2 + 4 - 2 + MAX_PLAYER_NAME - 2 + 4 - 2 + 3 - 2 + 4 - 2 + 32 + 1],
unbanunixtime = gettime() + days * 86400;

format(string, sizeof(string), auto_string, playerid_name, playerid, targetid_name, targetid, days, days_string, params[0]);
SendClientMessageToAll(-1, string);

static const auto_query_string[] =
"INSERT INTO `banlist` (`Name`, `Reason`, `Admin`, `BanDate`, `UnbanUNIXTime`) "\
"VALUES ('%s', '%s', '%s', '%s', '%d')";
new
query_string[sizeof(auto_query_string) - 2 + MAX_PLAYER_NAME - 2 + 32 - 2 + MAX_PLAYER_NAME - 2 + 20 - 2 + 11 + 1],
date_string[20+1],
year,
month,
day,
hour,
minute,
second;

getdate(year, month, day);
gettime(hour, minute, second);
format(date_string, sizeof(date_string), "%02d.%02d.%d, %02d:%02d:%02d", day, month, year, hour, minute, second);

format(query_string, sizeof(query_string), auto_query_string, targetid_name, params[0], playerid_name, date_string, unbanunixtime);
mysql_function_query(1, query_string, false, "", "");

TogglePlayerControllable(targetid, 0);
Kick(targetid);
return 1;
}


Сообщение отредактировал _54REGION_: 13 Октябрь 2017 - 08:03

0

#2
Пользователь офлайн   Skiffi 

  • HennessyProject
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Помочь? Хорошо.
Используй strtok

Сообщение отредактировал Skiffi: 13 Октябрь 2017 - 12:36

0

#3
Пользователь офлайн   Long- 

  • Местный
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщенияSkiffi (13 Октябрь 2017 - 12:36) писал:

Помочь? Хорошо.
Используй strtok


Зачем? sscanf != стандартный командный процессор.
Достаточно просто заменить шапку команды.

sscanf не является чем то особенным, это простой обработчик текста, и используют его не только в командах в dc_cmd, но и в функциях, разгрузки/загрузки данных.
0

#4
Пользователь офлайн   Skiffi 

  • HennessyProject
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Это понятно, но большинство людей, которые используют стандартный командный процессор, используют strtok
По этому и предоставил ссылку на ресурс.
0

#5
Пользователь офлайн   _54REGION_ 

  • Эксперт
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Команду я эту перевел но, в чат все правильно выводит а в mysql запись идёт все отлично кроме причины за место причины пишет ??? Русский язык что ли не определяет хотя добавлены функции в ongamemodeinit русский текст
0

#6
Пользователь офлайн   SooBad 

  • I'm a part of the troubles
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщенияSkiffi (14 Октябрь 2017 - 15:09) писал:

Это понятно, но большинство людей, которые используют стандартный командный процессор, используют strtok
По этому и предоставил ссылку на ресурс.

Штооооо?
Я не люблю докапываться, но можно пруфы, пожалуйста?
0

#7
Пользователь офлайн   _54REGION_ 

  • Эксперт
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
почему если есть аккаунт в таблице банлист то не заходит на сервер тупо не грузится дальше пишет что рестарт сервера
если очистить OnPlayerFindInBanlist то он заходит но тупо появляется в середине карты и всё по 0 тоесть не грузит FindPlayerInTable такое ощущение что нельзя 1 игроку второую таблицу загрузить что за

format(query_strings, sizeof(query_strings), "SELECT * FROM `banlist` WHERE `Name` = '%s'", pStats[playerid][pNames]);
    	        mysql_function_query(mysql_connect_id, query_strings, true, "OnPlayerFindInBanlist", "d", playerid);

		format(query_string, sizeof(query_string), "SELECT * FROM `Accounts` WHERE `Nickname` = '%s'", pStats[playerid][pNames]);
		mysql_function_query(mysql_connect_id, query_string, true, "FindPlayerInTable","i", playerid);


forward OnPlayerFindInBanlist(playerid);
public OnPlayerFindInBanlist(playerid)
{
	new rows,fields,unbanunixtime;
	cache_get_data(rows, fields);
	if(rows)
	{
	unbanunixtime = cache_get_field_content_int(0, !"UnbanUNIXTime", 1);
	new playerid_name[MAX_PLAYER_NAME + 1],
	admin_name[MAX_PLAYER_NAME + 1];
	GetPlayerName(playerid, playerid_name, MAX_PLAYER_NAME);
	if(gettime() >= unbanunixtime)
	{
	static const auto_query_string[] = "DELETE FROM `banlist` WHERE `Name` = '%s'";
	new query_string[sizeof(auto_query_string) - 2 + MAX_PLAYER_NAME + 1];
	format(query_string, sizeof(query_string), auto_query_string, playerid_name);
	mysql_function_query(mysql_connect_id, query_string, false, "", "");
	return 1;
	}
    static const auto_string[] ="Ваш аккаунт заблокирован Администратором {ff6347}%s. {ffffff}Причина: {ff6347}%s.";
	new string[sizeof(auto_string) - 2 + MAX_PLAYER_NAME - 2 + 32 + 1],days_string[4+1],word_string[8+1],reason[32+1],
	days = (unbanunixtime - gettime()) / 86400 + 1;
	cache_get_field_content(0, !"Admin", admin_name);
	cache_get_field_content(0, !"Reason", reason);
    GetDeclensionWord(word_string, sizeof(word_string), days, "Остался", "Осталось", "Осталось");
	GetDeclensionWord(days_string, sizeof(days_string), days, "день", "дня", "дней");
	format(string, sizeof(string), auto_string, admin_name, reason);
	SendClientMessage(playerid, -1, string);
	format(string, sizeof(string), "%s {ff6347}%d %s {ffffff}до разблокировки.", word_string, days, days_string);
	SendClientMessage(playerid, -1, string);
	Kick(playerid);
	}
	return 1;
}

Сообщение отредактировал _54REGION_: 15 Октябрь 2017 - 20:01

0

#8
Пользователь офлайн   Long- 

  • Местный
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Просмотр сообщенияSkiffi (14 Октябрь 2017 - 15:09) писал:

Это понятно, но большинство людей, которые используют стандартный командный процессор, используют strtok
По этому и предоставил ссылку на ресурс.


Ну и что? Многие люди курят, может тоже начать? И считать хорошей привычкой !? :(

Просмотр сообщения_54REGION_ (15 Октябрь 2017 - 19:56) писал:

почему если есть аккаунт в таблице банлист то не заходит на сервер тупо не грузится дальше пишет что рестарт сервера
если очистить OnPlayerFindInBanlist то он заходит но тупо появляется в середине карты и всё по 0 тоесть не грузит FindPlayerInTable такое ощущение что нельзя 1 игроку второую таблицу загрузить что за

format(query_strings, sizeof(query_strings), "SELECT * FROM `banlist` WHERE `Name` = '%s'", pStats[playerid][pNames]);
    	        mysql_function_query(mysql_connect_id, query_strings, true, "OnPlayerFindInBanlist", "d", playerid);

		format(query_string, sizeof(query_string), "SELECT * FROM `Accounts` WHERE `Nickname` = '%s'", pStats[playerid][pNames]);
		mysql_function_query(mysql_connect_id, query_string, true, "FindPlayerInTable","i", playerid);


forward OnPlayerFindInBanlist(playerid);
public OnPlayerFindInBanlist(playerid)
{
	new rows,fields,unbanunixtime;
	cache_get_data(rows, fields);
	if(rows)
	{
	unbanunixtime = cache_get_field_content_int(0, !"UnbanUNIXTime", 1);
	new playerid_name[MAX_PLAYER_NAME + 1],
	admin_name[MAX_PLAYER_NAME + 1];
	GetPlayerName(playerid, playerid_name, MAX_PLAYER_NAME);
	if(gettime() >= unbanunixtime)
	{
	static const auto_query_string[] = "DELETE FROM `banlist` WHERE `Name` = '%s'";
	new query_string[sizeof(auto_query_string) - 2 + MAX_PLAYER_NAME + 1];
	format(query_string, sizeof(query_string), auto_query_string, playerid_name);
	mysql_function_query(mysql_connect_id, query_string, false, "", "");
	return 1;
	}
    static const auto_string[] ="Ваш аккаунт заблокирован Администратором {ff6347}%s. {ffffff}Причина: {ff6347}%s.";
	new string[sizeof(auto_string) - 2 + MAX_PLAYER_NAME - 2 + 32 + 1],days_string[4+1],word_string[8+1],reason[32+1],
	days = (unbanunixtime - gettime()) / 86400 + 1;
	cache_get_field_content(0, !"Admin", admin_name);
	cache_get_field_content(0, !"Reason", reason);
    GetDeclensionWord(word_string, sizeof(word_string), days, "Остался", "Осталось", "Осталось");
	GetDeclensionWord(days_string, sizeof(days_string), days, "день", "дня", "дней");
	format(string, sizeof(string), auto_string, admin_name, reason);
	SendClientMessage(playerid, -1, string);
	format(string, sizeof(string), "%s {ff6347}%d %s {ffffff}до разблокировки.", word_string, days, days_string);
	SendClientMessage(playerid, -1, string);
	Kick(playerid);
	}
	return 1;
}



Не имейте привычки надоедать людям, создаете по 30 вопросов в одной теме.
В данном случае даже не хочется помогать
0

#9
Пользователь офлайн   Skiffi 

  • HennessyProject
  • Вставить ник
  • Цитировать
  • Раскрыть информацию

Цитата

Ну и что? Многие люди курят, может тоже начать? И считать хорошей привычкой !? :(

Ты немного не так понял мои слова, я не говорю переходи на strtok
Он просил помочь перевести команду, соответственно он ее взял откуда-то, с паблика и тп. т.е. не факт что он сам использует sscanf
0

#10
Пользователь офлайн   _54REGION_ 

  • Эксперт
  • Вставить ник
  • Цитировать
  • Раскрыть информацию
Все сделал не грузилась из за того так как нельзя 2раза подряд делать запрос в 2разные таблици сделал загрузку бан листа в стоке после загрузки аккаунта , и то что причина записывалась ??? Проблема была в mysql поменял кодировку на sp1251 все работает тему можно закрывать
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей