streetmeat

/me /ame и прочие команды отыгрыша

Рекомендованные сообщения



Не найдено.

23 posts in this topic

из названия понятно, что мне нужно. сам я туповатый и эти команды у меня работают некорректно, так что нужен знающий человек :^)

Share this post


Link to post
Share on other sites

TS Posted (edited) · Report post

да, то что есть на форуме - не пашет полностью тоже

Edited by streetmeat

Share this post


Link to post
Share on other sites

@streetmeat, ну, скидывайте, что вы именно пытаетесь вставить из форума, какие ошибки появляются в логах (если появляются), что еще интересного насчет команд этих.

Share this post


Link to post
Share on other sites
2 минуты назад, odosenok сказал:

@streetmeat, ну, скидывайте, что вы именно пытаетесь вставить из форума, какие ошибки появляются в логах (если появляются), что еще интересного насчет команд этих.

команды брал из этой темы https://pawno-rus.ru/topic/3380-cmdkomandy-me-ame-do-todo-s-n-try-dlya-processora-dc_cmd/. взял /me (для примера) и переделал под свой мод, и получаю такую ошибку
https://imgur.com/a/9zLpYEd
пока другие не пробовал, но может тут ещё найду решение для будущих проблем (наверное)

Share this post


Link to post
Share on other sites

@streetmeat, это ошибка табуляции. Потому что у вас не везде соблюдена табуляция. Весь код должен идти за красной линией (см. изображение). Однако, первая строчка стоит неправильно. Достаточно ее сдвинуть правее и все будет хорошо.

Спойлер

Безымянный.png

 

Share this post


Link to post
Share on other sites
В 29.04.2020 в 22:53, odosenok сказал:

@streetmeat, это ошибка табуляции. Потому что у вас не везде соблюдена табуляция. Весь код должен идти за красной линией (см. изображение). Однако, первая строчка стоит неправильно. Достаточно ее сдвинуть правее и все будет хорошо.

  изображение (открыть спойлер)

Безымянный.png

 

я уже этим разобрался, но вылилась другая проблема - команда не работает
https://imgur.com/a/FttvUxv

 

вылилась новая проблема - не отображается никнейм когда пишешь отыгровку
https://imgur.com/a/R2pg5qT

Share this post


Link to post
Share on other sites

АВТОМАТИЧЕСКИ СФОРМИРОВАННОЕ СООБЩЕНИЕ:

Данная тема была перемещена модерацией или администрацией портала PAWNO-RUS.RU! 

Перемещена из: "Магазин > Стол заказов"

Перемещена в: "Скриптинг PAWN > Вопросы / проблемы по скриптингу"

 

С уважением, ваш Бот! 

Если вы НЕ согласны с переносом данной темы в раздел "Скриптинг PAWN > Вопросы / проблемы по скриптингу", пожалуйтесь на это сообщение в жалобе указав причины вашего недовольства. Спасибо. 

 

Share this post


Link to post
Share on other sites

Добавьте в OnPlayerConnect строку
 

GetPlayerName(playerid, PlayerInfo[playerid][NAME], sizeof PlayerInfo[playerid][NAME]);

 

Скорее всего её нет, поэтому в самой строке не хранится имя игрока.

Share this post


Link to post
Share on other sites
3 часа назад, smvrtdev сказал:

Добавьте в OnPlayerConnect строку
 


GetPlayerName(playerid, PlayerInfo[playerid][NAME], sizeof PlayerInfo[playerid][NAME]);

 

Скорее всего её нет, поэтому в самой строке не хранится имя игрока.

https://imgur.com/a/ye94Hxx появились такие ошибки. щас попробую исправить, если не выйдет - отпишу

ошибки всё так же, ничего не поменялось

Share this post


Link to post
Share on other sites

Дайте полный код команды, которая в Вашем моде.

Share this post


Link to post
Share on other sites
1 час назад, smvrtdev сказал:

Дайте полный код команды, которая в Вашем моде.

CMD:me(playerid, params[])
{
	if(sscanf(params, "s[118]", params[0])) return SCM(playerid, COLOR_GREY, !"/me [действие]");
	new string[144];
	format(string, sizeof(string), "* %s %s", PlayerInfo[playerid][NAME], params[0]);
	ProxDetector(20.0, playerid, string, COLOR_ROSE, COLOR_ROSE, COLOR_ROSE, COLOR_ROSE, COLOR_ROSE);
	SetPlayerChatBubble(playerid, params[0], COLOR_ROSE, 20, 7500);
	return 1;
}

если было про /me

Share this post


Link to post
Share on other sites

ProxDetector корректно работает в других случаях?

 

12 часов назад, streetmeat сказал:

https://imgur.com/a/ye94Hxx появились такие ошибки. щас попробую исправить, если не выйдет - отпишу

ошибки всё так же, ничего не поменялось

Вместо sizeof PlayerInfo[playerid][NAME] поставь sizeof(PlayerInfo[playerid][NAME])

Share this post


Link to post
Share on other sites

@streetmeat sizeof можно использовать только для объектов, размер которых известен на момент компиляции. PlayerInfo[playerid][NAME] таким не является, так как зависит от переменной playerid, которая известна только на момент исполнения кода. 

вместо sizeof PlayerInfo[playerid][NAME] вставьте просто константу MAX_PLAYER_NAME

Share this post


Link to post
Share on other sites
2 часа назад, DEST сказал:

@streetmeat sizeof можно использовать только для объектов, размер которых известен на момент компиляции. PlayerInfo[playerid][NAME] таким не является, так как зависит от переменной playerid, которая известна только на момент исполнения кода. 

вместо sizeof PlayerInfo[playerid][NAME] вставьте просто константу MAX_PLAYER_NAME

сработало)

вот ещё такой вопрос, но про /ame - как сделать так, чтобы самому игроку отправилось сообщение в чат? через scm (sendclientmessage)?

Share this post


Link to post
Share on other sites
14 минут назад, streetmeat сказал:

сработало)

вот ещё такой вопрос, но про /ame - как сделать так, чтобы самому игроку отправилось сообщение в чат? через scm (sendclientmessage)?

Да.

Share this post


Link to post
Share on other sites

https://imgur.com/a/pZ2My2r
 

CMD:ame(playerid, params[])
{
	new string[180];
	if(sscanf(params, "s[124]", params[0])) return SCM(playerid, COLOR_GREY, "/ame [äåéñòâèå]");
	SetPlayerChatBubble(playerid,string,COLOR_ROSE,30.0,5000);
	format(string, sizeof(string), "> %s", string);
	SCM(playerid, COLOR_ROSE, string);
    return 1;
}

ладно, где я зафакапился, что у меня ни отыгровка, ни ник игрока не отображается?

Share this post


Link to post
Share on other sites

Ты отправляешь игроку и в проксдетектор string, а текст в params[0].

Share this post


Link to post
Share on other sites
13 минут назад, povstanec сказал:

Ты отправляешь игроку и в проксдетектор string, а текст в params[0].

https://imgur.com/a/GE18m9I подправил, но ника нет. где ещё надо заменить?
 

CMD:ame(playerid, params[])
{
	new string[180];
	if(sscanf(params, "s[124]", params[0])) return SCM(playerid, COLOR_GREY, "/ame [действие]");
	SetPlayerChatBubble(playerid, params[0], COLOR_ROSE, 20, 5000);
	format(string, sizeof(string), "> %s", params[0]);
	SCM(playerid, COLOR_ROSE, string);
    return 1;
}

 

Share this post


Link to post
Share on other sites

@streetmeat

Спойлер

CMD:me(playerid, params[])
{
	if (!params[0]) return SCM(playerid, COLOR_GREY, !"/me [действие]"); // если строка действия на передана, выведем сообщение
	
	new string[144]; // создадим переменную для хранения текста с действием игрока
	format(string, sizeof(string), "* %s %s", PlayerInfo[playerid][NAME], params[0]); // форматируем переменную
	ProxDetector(20.0, playerid, string, COLOR_ROSE, COLOR_ROSE, COLOR_ROSE, COLOR_ROSE, COLOR_ROSE); // выведем текст из string всем в радиусе 20.0
	SetPlayerChatBubble(playerid, params[0], COLOR_ROSE, 20, 7500); // выведем текст действия над головой игрока
	
	SendClientMessage(playerid, COLOR_ROSE, string); // выведем аналогичный текст, как в  ProxDetector, самому игроку
	return 1;
}

 

 

А Ваш вариант выше отправлял сообщение только Вам, не всем игрокам в некотором радиусе.

Share this post


Link to post
Share on other sites
CMD:ame(playerid, params[])
{
	new string[180];
	if(sscanf(params, "s[124]", params[0])) return SCM(playerid, COLOR_GREY, "/ame [действие]");
	SetPlayerChatBubble(playerid, params[0], COLOR_ROSE, 20, 5000);
	format(string, sizeof(string), "> %s %s", PlayerInfo[playerid][NAME], params[0]);
	SCM(playerid, COLOR_ROSE, string);
    return 1;
}

 

Share this post


Link to post
Share on other sites

@odosenok  и @povstanec  всё работает, спасибо)

Share this post


Link to post
Share on other sites

и последний вопрос: как убрать в ми, ами и ду черту в нике между именем и фамилией?

Share this post


Link to post
Share on other sites

@streetmeat, давайте я попробую здесь изложить ход рассуждений, чтобы Вы поняли, по какому принципу стоит решать подобные вопросы, а не брали постоянно готовый участок кода.

 

Замечание: не есть правильно каждый раз при использовании команд отыгровки RolePlay-ситуаций искать нижнее подчеркивание в имени игрока и заменять его пробелом. Как минимум, это нерационально. Лучше добавьте в массив игрока глобальную переменную (теперь у Вас будет две переменных: одна - OOC-характера (внеигровая), хранящая игровое имя в полном формате, например, First_Second, другая - игровая (IC-характера), например, First Name. Проводите инициализацию двух переменных при подключении игрока к серверу и работайте дальше напрямую с этими переменными.

 

Вернемся к тому, как убрать нижнее подчеркивание. Есть у Вас, например, некоторая переменная, в которую записан nick-name игрока (я использую имя Дениса Косякова, поскольку 1 мая, сегодня, - день его рождения):

new name[MAX_PLAYER_NAME+1] = "Denis_Kosyakov";

Как убрать нижнее подчеркивание? Необходимо найти его местонахождение программно. Для этого нужно поискать какую-нибудь функцию поиска символа в строке (или же функцию поиска подстроки в строке). Как пользователя поисковой системой Google? Первая же вкладка - WIKI-страничка. 

Читаем, как пользоваться функцией strfind, какие аргументы она принимает, что возвращает. И делаем аналогично:

// создаем переменную для хранения строки - имени пользователя
new name[MAX_PLAYER_NAME+1] = "Denis_Kosyakov";
// в переменную underline будет записан порядковый номер (с нуля) нижнего подчеркивания 
new underline = strfind(name, "_"); // name - где ищем, "_" - что ищем (нижнее подчеркивание)

Нашли? Отлично. Теперь думаем, как можно заменить нижнее подчеркивание другим символом (речь идет о пробеле). Здесь достаточно просто изменить значение ячейки массива, обратившись к ней по индексу.

// создаем переменную для хранения строки - имени пользователя
new name[MAX_PLAYER_NAME+1] = "Denis_Kosyakov";
// в переменную underline будет записан порядковый номер (с нуля) нижнего подчеркивания 
new underline = strfind(name, "_"); // name - где ищем, "_" - что ищем (нижнее подчеркивание)
// заменяем значение ячейки массива с индексом underline новым значением - пробелом
name[underline] = ' '; // теперь в переменной name ячейка underline содержит пробел

Можно пойти другим способом - перебирать все ячейки строки, пока не будет найден символ нижнего подчеркивания. Нашли? Отлично, заменяем его пробелом, как это сделано в примере выше.

new name[MAX_PLAYER_NAME+1] = "Denis_Kosyakov";

// создаем цикл for. Переменная i "пробегается" от 0 до MAX_PLAYER_NAME = 24
for (new i = 0; i < MAX_PLAYER_NAME; i++) {
	if (name[i] == '_') { // если символ в i-ой (итой) ячейке экивалентен нижнему подчеркиванию
		name[i] = ' '; // изменяем символ в i-ой ячейке на символ пробела
		break; // если мы нашли одно нижнее подчеркивание, то больше их не будет - иначе это не RP nick-name
	}
}

Конкретно я использовал бы второй способ. А так... Что хотите, то и используйте. Можете даже создать отдельную функцию, которая бы в переданном nick-name находила символ нижнего подчеркивания и возвращала nick-name уже без этого символа.

Спойлер

// следующий макрос необходимо добавить в начало мода
#if !defined isnull
    #define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
#endif

// функция ликвидации нижнего подчеркивания из ника игрока
stock DeleteUnderline(nick[]) {
	if (isnull(nick)) { // если nick - пустая строка
		return '\0'; // завершаем работу функции, возвращаем нуль-символ
	}
	
	// создадим результирующую строку (в нее будет записан ник без нижнего подчеркивания)
	new result[MAX_PLAYER_NAME+1];
	
	// создадим цикл, в котором будем перебирать все символы ника
	for (int i = 0, length = strlen(nick); i < length; i++) {
		result[i] = (nick[i] == '_') ? (' ') : (nick[i]);
	}
	
	return result;
}

 

 

Ну, и если использовать функцию, то выход будет примерно таким:

Спойлер

CMD:ame(playerid, params[])
{
	new string[180];
	if(sscanf(params, "s[124]", params[0])) return SCM(playerid, COLOR_GREY, "/ame [действие]");
	SetPlayerChatBubble(playerid, params[0], COLOR_ROSE, 20, 5000);
	format(string, sizeof(string), "> %s %s", DeleteUnderline(PlayerInfo[playerid][NAME]), params[0]);
	SCM(playerid, COLOR_ROSE, string);
    return 1;
}

 

 

И я хочу обратить еще раз Ваше внимание на ту пометку, которую оставил под своим прошлым постом: текущая версия Вашей команды отправляет текст только Вам, а не всем игрокам из радиуса. Решение данной проблемы я прикладывал, однако, Вы его проигнорировали.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • warrion4ik
      By warrion4ik
      При телепорте по метке она тепает под текстуры и приходится перетелепортироваться, как это можно исправить?
      Видео: https://youtu.be/FLjer8lfGc0
    • glvde.
      By glvde.


      Просмотр файла Aurora RP (доработка)
      Хранение данных (версия MySQL): R41-3.
      Командный процессор: Pawn.CMD.
      Количество строк в моде (без маппинга): 65264.
      Анти-чит: Nexius-AC.

      Под доработку взята версия Aurora за декабрь 2018.
      Автор данного мода: oscar_floyd.
      Автор данной доработки: GLADE (я).

      На доработку мода ушло около одного месяца.

      Что было сделано:
       

      Так же, начал делать инвентарь (copy by Aurora), но так и не доделал.

      Дополнительные скриншоты:
       


      Не исключаю, что есть ещё баги.
      Спасибо за внимание.
      Добавил glvde. Добавлено 21.04.2020 Категория Моды Автор oscar_floyd  
    • E)/(IK
      By E)/(IK
      В моде Only RolePlay можно создать всего 612 машин,для сервера мне надо  700. Так как я буду добавлять в игру их. Просто нужно мне узнать,как сделать так,чтобы больше машин можно было спавинть. После написания команды /veh 613 0 0 пишет введите /veh [ID Машины] [цвет1] [цвет2] а если вводить меньше то все работает.
    • NNN
      By NNN
      Поставил эту http://pawno-rus.ru/topic/1034-sistema-reporta/ систему репорта со всеми доработками, в компиляторе высвечиваются эти ошибки:
      loose indentation error 017: undefined symbol "AddMessage" warning 215: expression has no effect error 001: expected token: ";", but found "]" error 029: invalid expression, assumed zero fatal error 107: too many error messages on one line первое предупреждение из за корявости скрипта (loose indentation) а вот с остальными не знаю)