AnimeshniK

Опять проблемы с форматированием строк

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



19 posts in this topic

Работает опять-же криво.
Пишеться в игре [A][A-GUN] Основатель %s выдал оружие игроку <пустое место> Так-же с примерно той-же командой только уже /gun Спросите нах я сделал /agun? Потому-что игроки выдавали себе миниган и творили с ним что хотели,вот я и добавил /agun может выдавать все оружки кроме 45 Я хз почему оставил 45 ид Но я думал будет ошибка если я уберу весь case  в общем /agun выдаёт всё а у /gun запрещёнки есть довольно большие. помоги плиз.С меня +-ик

CMD:agun(playerid, params[])
{
	if(PlayerInfo[playerid][pAlcoInvenxua] < 15) return true;
	if(sscanf(params, "ddd",params[0],params[1],params[2])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /agun [id] [id оружия /gi] [патроны]");
	if(!IsPlayerConnected(params[0])) return true;
	if(params[2] < 1 || params[2] > 9999) return SendClientMessage(playerid, COLOR_GRAD1, "Нельзя меньше 1 или больше 9999 патронов!");
	if(params[1] < 1 || params[1] > 46) return SendClientMessage(playerid, COLOR_GREY, "ID оружия от 1 до 46!");
	switch(params[1])
	{
		case 45: return SendClientMessage(playerid, COLOR_GRAD1, "Запрещенное оружие!");
	}
	GiveWeapon(params[0],params[1],params[2]);
	SendClientMessage(playerid, COLOR_GRAD1, "Оружие Выдано!");
	SendClientMessage(playerid, COLOR_GRAD1,stringer1);
	format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал Вам оружие!", PlayerInfo[playerid][pNames]);
	format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал оружие игроку %s", PlayerInfo[playerid][pNames][pNames]);
	SendAdminMessage(COLOR_RED,stringer1);
	return true;
}

И ещё не могли бы вы сделать для меня команду /fakeban ? С диалогом что  вы получили бан?Я думаю всем ясна данная команда,но всё-же скажу. Это даёт ФЕЙКОВЫЙ бан,не банит игрока и желательно чтобы не снимала админку а то было такое что снималось админка. Кто сделаем там +-ик :D  Спасибо заранее
Командный Процессор DC_CMD обязательно плиз :D

Edited by AnimeshniK

Share this post


Link to post
Share on other sites

Енум с диалогами(если имеется)

fakeban

OnDialogResponse

case fakeban:
		{
			if(response)
			{
				SendClientMessage(playerid, -1, "Ха-ха-ха-ха-ха, а я пошутииил! :)");
			}
		}

И в любое место в моде)

cmd:fakeban(playerid,params[])
{
	new id,reason[64];
	if(sscanf(params,"us[64]",id,reason)) return SendClientMessage(playerid, -1, "Usage: /fakeban [ID][Причина]");
	if(id < 0 || id > 499) return SendClientMessage(playerid, -1, "Неверный ID");
	new dialog[256];
	format(dialog,sizeof dialog, "Вы были забанены на сервере (НАЗВАНИЕ).\n\
		Причина: %s",reason);
	ShowPlayerDialog(playerid, fakeban, DIALOG_STYLE_MSGBOX, "Уведомление:", dialog, "Принять", "");
	return 0;
}

Пробежимся по коду:
В перечисляемый список enum (ха-ха-ха) добавим название нашего диалога: fakeban
В паблик с диалогами(OnPlayerDialog), напишем: делаем проверку, если нажата клавиша 1(Принять), то высветится сообщение с шуткой(лол как смешно). 
Затем мы пишем саму команду, кстати, cmd на CMD замени, попробуй, если ошибки будут.
Создаём переменные с ID и reason, ставьте размерность сообщения по своему вкусу, после с помощью SSCANF принимаем параметры. Затем проверяем id игрока, проверка ужасна, но работает( может быть xD ) 
Затем выделяем память под текст диалога, выделил побольше, т.к ещё и причина входит в этот состав, можно было сделать по уму, но если не принципиально :) Затем форматируем текст, после выводим диалог, P R O F I T.

Судя по ТЗ , вам требовалось это?)

 

__________________
/gun , /agun код скинь

 

Упс, да, не заметил код, сори. В общем попробуй new string[512]; (внутри твоей команды) , и stringer1 заменить на string

Edited by keyl1337
Причина: пофиксил один эррор, разобрал свой полезный урок, хаха

Share this post


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

Енум с диалогами(если имеется)


fakeban

OnDialogResponse


case fakeban:
		{
			if(response)
			{
				SendClientMessage(playerid, -1, "Ха-ха-ха-ха-ха, а я пошутииил! :)");
			}
		}

И в любое место в моде)


cmd:fakeban(playerid,params[])
{
	new id,reason[64];
	if(sscanf(params,"us[64]",id,reason)) return SendClientMessage(playerid, -1, "Usage: /fakeban [ID][Причина]");
	if(id < 0 || id > 499) return SendClientMessage(playerid, -1, "Неверный ID");
	new dialog[256];
	format(dialog,sizeof dialog, "Вы были забанены на сервере (НАЗВАНИЕ).\n\
		Причина: %s",reason);
	ShowPlayerDialog(playerid, fakeban, DIALOG_STYLE_MSGBOX, "Уведомление:", dialog, "Принять", "");
	return 0;
}

Пробежимся по коду:
В перечисляемый список enum (ха-ха-ха) добавим название нашего диалога: fakeban
В паблик с диалогами(OnPlayerDialog), напишем: делаем проверку, если нажата клавиша 1(Принять), то высветится сообщение с шуткой(лол как смешно). 
Затем мы пишем саму команду, кстати, cmd на CMD замени, попробуй, если ошибки будут.
Создаём переменные с ID и reason, ставьте размерность сообщения по своему вкусу, после с помощью SSCANF принимаем параметры. Затем проверяем id игрока, проверка ужасна, но работает( может быть xD ) 
Затем выделяем память под текст диалога, выделил побольше, т.к ещё и причина входит в этот состав, можно было сделать по уму, но если не принципиально :) Затем форматируем текст, после выводим диалог, P R O F I T.

Судя по ТЗ , вам требовалось это?)

 

__________________
/gun , /agun код скинь

 

Упс, да, не заметил код, сори. В общем попробуй new string[512]; (внутри твоей команды) , и stringer1 заменить на string

Спасибо конечно,но я начинающий,так что почти нечего не понял из выше сказанного :D Можешь плиз по проще?

Share this post


Link to post
Share on other sites

@AnimeshniK По поводу проблемы с форматированием. Проблема опять такая же, как и в прошлой теме. В этот раз поясню подробней. 

Format - функция для форматированного ввода в строку, т.е. она записывает данные в переменную.

SendClientMessage - функция для вывода (отправки строки игроку). 

Теперь логически сопоставьте, что нужно выполнить первым: ввод или вывод?

Спойлер

format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал Вам оружие!", PlayerInfo[playerid][pNames]); // запись данных
SendClientMessage(playerid, COLOR_GRAD1,stringer1); // вывод данных
format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал оружие игроку %s", PlayerInfo[playerid][pNames][pNames]); // запись данных
SendAdminMessage(COLOR_RED,stringer1); // вывод данных 

 

Ссылки на документацию:

https://wiki.sa-mp.com/wiki/Format

https://wiki.sa-mp.com/wiki/SendClientMessage

Share this post


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

@AnimeshniK По поводу проблемы с форматированием. Проблема опять такая же, как и в прошлой теме. В этот раз поясню подробней. 

Format - функция для форматированного ввода в строку, т.е. она записывает данные в переменную.

SendClientMessage - функция для вывода (отправки строки игроку). 

Теперь логически сопоставьте, что нужно выполнить первым: ввод или вывод?

  Правильный вариант кода (закрыть спойлер)


format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал Вам оружие!", PlayerInfo[playerid][pNames]); // запись данных
SendClientMessage(playerid, COLOR_GRAD1,stringer1); // вывод данных
format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал оружие игроку %s", PlayerInfo[playerid][pNames][pNames]); // запись данных
SendAdminMessage(COLOR_RED,stringer1); // вывод данных 

 

Ссылки на документацию:

https://wiki.sa-mp.com/wiki/Format

https://wiki.sa-mp.com/wiki/SendClientMessage

Простите,я понимаю что вы профессионал в своём деле,но не могли бы вы для меня сделать Код или что там надо который рабоает как-то так при форматирований тех строк Администратор %s выдал оружие %d[Тут тип пишеться Desert Eagle и  т.д]  игроку %s с %d[тут патроны скольк выдал] патронами. Очень прошу :D

40 минут назад, DEST сказал:

@AnimeshniK По поводу проблемы с форматированием. Проблема опять такая же, как и в прошлой теме. В этот раз поясню подробней. 

Format - функция для форматированного ввода в строку, т.е. она записывает данные в переменную.

SendClientMessage - функция для вывода (отправки строки игроку). 

Теперь логически сопоставьте, что нужно выполнить первым: ввод или вывод?

  Правильный вариант кода (открыть спойлер)


format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал Вам оружие!", PlayerInfo[playerid][pNames]); // запись данных
SendClientMessage(playerid, COLOR_GRAD1,stringer1); // вывод данных
format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал оружие игроку %s", PlayerInfo[playerid][pNames][pNames]); // запись данных
SendAdminMessage(COLOR_RED,stringer1); // вывод данных 

 

Ссылки на документацию:

https://wiki.sa-mp.com/wiki/Format

https://wiki.sa-mp.com/wiki/SendClientMessage

Увы но не работает этот ваш Правильный Варьянт.

sa-mp-024.png

Share this post


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

Спасибо конечно,но я начинающий,так что почти нечего не понял из выше сказанного :D Можешь плиз по проще?

Попроще  = CTRL + C , CTRL + V

 

Ещё попроще , скопируешь вставишь только команду -_-

Edited by keyl1337

Share this post


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

Попроще  = CTRL + C , CTRL + V

 

Ещё попроще , скопируешь вставишь только команду -_-

Так а как хотя-б выглядит этот Енум с диалогами??

 

Share this post


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

Так а как хотя-б выглядит этот Енум с диалогами??

 

Вообще идентично обычному енуму, т.е
 

enum e_DialogID
{
	none,
  	fakeban,
  	register,
}
//и сюда просто кидаешь названия диалогов, никаких запар :)

Если у тебя его нет, то .. я думаю , ну в принципе, можешь создать, и в дальнейшем его юзать) В DialogResponse , просто писать 
 

switch(dialogid)
{
  case fakeban:
    {}
    
  case name_of_dialog: // вот так прросто добавляешь диалоги (:
}



UPD:
И все enum'ы, лучше называй  так: "e_name_of_enum", в последующем , другому кодеру будет удобно юзать его.

Edited by keyl1337

Share this post


Link to post
Share on other sites
18 часов назад, keyl1337 сказал:

Вообще идентично обычному енуму, т.е
 


enum e_DialogID
{
	none,
  	fakeban,
  	register,
}
//и сюда просто кидаешь названия диалогов, никаких запар :)

Если у тебя его нет, то .. я думаю , ну в принципе, можешь создать, и в дальнейшем его юзать) В DialogResponse , просто писать 
 


switch(dialogid)
{
  case fakeban:
    {}
    
  case name_of_dialog: // вот так прросто добавляешь диалоги (:
}



UPD:
И все enum'ы, лучше называй  так: "e_name_of_enum", в последующем , другому кодеру будет удобно юзать его.

Прости,а ты не знаешь как сделать телепорт игрока вместе  с машиной ??

Share this post


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

Прости,а ты не знаешь как сделать телепорт игрока вместе  с машиной ??

SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z); 

 

Share this post


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

SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z); 

 

Не работает.

1 час назад, keyl1337 сказал:

SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z); 

 

CMD:tun(playerid)
{
	if(PlayerInfo[playerid][pAlcoInvenxua] < 1) return true;
	if(PlayerInfo[playerid][pPayDayHad] > 5) return SendClientMessage(playerid, -1, "{ff0000}Âû íå îòûãðàëè 5 ÷àñîâ.");
	SendClientMessage(playerid, COLOR_YELLOW, "Âû óñïåøíî òåëåïîðòèðîâàëèñü ê Òþíèíã-Ñàëîíó.");
	SetPPos(playerid, -1778.31, 1200.12, 24.73);
   	SetVehiclePos(GetPlayerVehicleID(playerid), -1778.31, 1200.12, 24.73);
	return true;
}

Вот код команды,которая должна тебя тепать с тачкой. Почему не работает??И как сделать чтобы можно было тепаться на любой админке,а то почему-то возможно тепатся только с 1 лвлом админки подскажите плиз Уже пробовал символ сменить на > не помогло.

 

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

CMD:cubik(playerid, params[])
{
    if(sscanf(params, "dd", params[0], params[1]))  {
        SendClientMessage(playerid, 0xFF8000AA, !"Èñïîëüçóéòå /cubik [÷èñëî 1-6][Ñóììà Ñòàâêè] ÷òîáû áðîñèòü êóáèê.");
        return SendClientMessage(playerid, 0xFF8000AA, !"Óñëè âû óãàäàåòå âû ïîëó÷èòå ñóììó ñòàâêè óìíîæåííóþ íà 10.");
    }

    if(1 < params[0] > 6)
        return SendClientMessage(playerid, 0xFF8000AA, !"×èñëî îò 1 äî 6.");

    if(100 < params[1] > 1000000)
        return SendClientMessage(playerid, 0xFF8000AA, !"Ñóììà ñòàâêè íå äîëæíà áûòü ìåíüøå 100$ è áîëüøå 1.000.000$.");

    if(params[0] == random(6 + 1)) {
        SendClientMessage(playerid, 0xFF8000AA, !"Âû âûèãðàëè è ïîëó÷àåòå ñóììó ñòàâêè óìíîæåííóþ íà 10.");
        return GivePlayerMoney(playerid, params[1]  * 10);
    }
    else {
    	SendClientMessage(playerid, 0xFF8000AA, !"Âû ïðîèãðàëè!");
        GivePlayerMoney(playerid, -params[0]);
    }
    return 1;
}

 

Share this post


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

Не работает.


CMD:tun(playerid)
{
	if(PlayerInfo[playerid][pAlcoInvenxua] < 1) return true;
	if(PlayerInfo[playerid][pPayDayHad] > 5) return SendClientMessage(playerid, -1, "{ff0000}Âû íå îòûãðàëè 5 ÷àñîâ.");
	SendClientMessage(playerid, COLOR_YELLOW, "Âû óñïåøíî òåëåïîðòèðîâàëèñü ê Òþíèíã-Ñàëîíó.");
	SetPPos(playerid, -1778.31, 1200.12, 24.73);
   	SetVehiclePos(GetPlayerVehicleID(playerid), -1778.31, 1200.12, 24.73);
	return true;
}

Вот код команды,которая должна тебя тепать с тачкой. Почему не работает??И как сделать чтобы можно было тепаться на любой админке,а то почему-то возможно тепатся только с 1 лвлом админки подскажите плиз Уже пробовал символ сменить на > не помогло.

 

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


CMD:cubik(playerid, params[])
{
    if(sscanf(params, "dd", params[0], params[1]))  {
        SendClientMessage(playerid, 0xFF8000AA, !"Èñïîëüçóéòå /cubik [÷èñëî 1-6][Ñóììà Ñòàâêè] ÷òîáû áðîñèòü êóáèê.");
        return SendClientMessage(playerid, 0xFF8000AA, !"Óñëè âû óãàäàåòå âû ïîëó÷èòå ñóììó ñòàâêè óìíîæåííóþ íà 10.");
    }

    if(1 < params[0] > 6)
        return SendClientMessage(playerid, 0xFF8000AA, !"×èñëî îò 1 äî 6.");

    if(100 < params[1] > 1000000)
        return SendClientMessage(playerid, 0xFF8000AA, !"Ñóììà ñòàâêè íå äîëæíà áûòü ìåíüøå 100$ è áîëüøå 1.000.000$.");

    if(params[0] == random(6 + 1)) {
        SendClientMessage(playerid, 0xFF8000AA, !"Âû âûèãðàëè è ïîëó÷àåòå ñóììó ñòàâêè óìíîæåííóþ íà 10.");
        return GivePlayerMoney(playerid, params[1]  * 10);
    }
    else {
    	SendClientMessage(playerid, 0xFF8000AA, !"Âû ïðîèãðàëè!");
        GivePlayerMoney(playerid, -params[0]);
    }
    return 1;
}

 

Раскладку смени и перекопируй код заново.
Там где с 1-ым лвлом админки, нужен код)
После перезахода восстанавливает? 

Edited by keyl1337

Share this post


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

Раскладку смени и перекопируй код заново.
Там где с 1-ым лвлом админки, нужен код)
После перезахода восстанавливает? 

Всм восстанавливает ? :D Можете написать мне правильный код?

 

Share this post


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

Всм восстанавливает ? :D Можете написать мне правильный код?

 

в смысле деньги восстанавливаются после перезахода? 

Share this post


Link to post
Share on other sites
13 часов назад, keyl1337 сказал:

в смысле деньги восстанавливаются после перезахода? 

Ну тип деньги сразу восстанавливаются Тип с начала идут в минус а после восстанавливаются,идут в минус  я имел ввиду ЧТо убывают.

Share this post


Link to post
Share on other sites
В 10.08.2019 в 16:35, DEST сказал:

@AnimeshniK По поводу проблемы с форматированием. Проблема опять такая же, как и в прошлой теме. В этот раз поясню подробней. 

Format - функция для форматированного ввода в строку, т.е. она записывает данные в переменную.

SendClientMessage - функция для вывода (отправки строки игроку). 

Теперь логически сопоставьте, что нужно выполнить первым: ввод или вывод?

  Правильный вариант кода (открыть спойлер)


format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал Вам оружие!", PlayerInfo[playerid][pNames]); // запись данных
SendClientMessage(playerid, COLOR_GRAD1,stringer1); // вывод данных
format(stringer1,sizeof(stringer1),"{00FF00}[A][A-GUN]{FF0000}Основатель %s выдал оружие игроку %s", PlayerInfo[playerid][pNames][pNames]); // запись данных
SendAdminMessage(COLOR_RED,stringer1); // вывод данных 

 

Ссылки на документацию:

https://wiki.sa-mp.com/wiki/Format

https://wiki.sa-mp.com/wiki/SendClientMessage

Кстати,не решилась проблема. Всё так-же пишет Администратор Alexei_Cheetov выдал <пробел> / Ну кароче всё (Слово удалено системой) не работает :D Буду рад если скинете доделанный и правильный код\

Share this post


Link to post
Share on other sites

@AnimeshniK Нужно исправить аргументы форматирования, порядок операций там правильный. 

Share this post


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

@AnimeshniK Нужно исправить аргументы форматирования, порядок операций там правильный. 

Прости но я всё-же так не понимаю,я понимаю если ты например пример напишешь :D Уж прости но так учился я скриптингу :D Ну и ещё учусь.

Share this post


Link to post
Share on other sites

Отпишите мне в Личные Сообщения, сделаю вам команду нормально и ее никто не сможет использовать с исключением Администратора и то с определенного уровня.

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

    • brodgie
      By brodgie
      Include - m_mail
      Просмотр файла m_mail - Отправляет письмо на электронную почту из игры.
       
      Описание:

      • Поддержка русского текста;
      • Доступно 2 типа отправки письма (обычный и HTML).

      Пример использования:
       
      #define M_MAIL_URL "example.com/m_mail.php" #define M_MAIL_ADDRESS "mymail@example.com" #include <m_mail> public OnPlayerConnect(playerid) { Mail_Send(playerid, Mail:EXAMPLE_EMAIL, "pawnocoder@mail.ru", "Название", "Тема сообщения", "Текст сообщения"); return 1; } Mail_Response:EXAMPLE_EMAIL(playerid, response_code, const data[]) { switch (response_code) { case 200: { // Почта успешно отправлена } default: { // Не удалось отправить почту } } return 1; }  
      Автор: NoName (Pawno_Coder) | Взято с соседнего борда
      Добавил brodgie Добавлено 25.09.2021 Категория Плагины / инклуды Автор Pawno_Coder Совместимость с версией мультиплеера  
    • brodgie
      By brodgie
      m_mail - Отправляет письмо на электронную почту из игры.
       
      Описание:

      • Поддержка русского текста;
      • Доступно 2 типа отправки письма (обычный и HTML).

      Пример использования:
       
      #define M_MAIL_URL "example.com/m_mail.php" #define M_MAIL_ADDRESS "mymail@example.com" #include <m_mail> public OnPlayerConnect(playerid) { Mail_Send(playerid, Mail:EXAMPLE_EMAIL, "pawnocoder@mail.ru", "Название", "Тема сообщения", "Текст сообщения"); return 1; } Mail_Response:EXAMPLE_EMAIL(playerid, response_code, const data[]) { switch (response_code) { case 200: { // Почта успешно отправлена } default: { // Не удалось отправить почту } } return 1; }  
      Автор: NoName (Pawno_Coder) | Взято с соседнего борда
    • Antoxa39
      By Antoxa39
      Здрасте, вообщем сразу к делу. платный ли плагин для новых машин на сервере? У меня есть плагин который расширяет количество новых машин на сервере, но нет клиентской части. Так вот плагин клиент. части платный? Если нет то может кто нибудь его скинуть?