Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 14
  1. #1
    Аватар для R1KO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.01.2020
    Сообщений
    9
    Репутация:
    0 ±

    макрос на format + SendClientMessage

    PHP код:
    new format_string[128];
    #define SendChatEx(%0,%1,%2,%3)          format(format_string, sizeof(format_string),%2,%3) && SCM(%0, %1, format_string) 
    Создал такой макрос, где-то в недрах г-и увидел тему об крашах подобных ф-й, на сколько это правдиво и аргументировано? просто я с подобным не сталкивался чтобы макрос приводил к крашу сервера? Спасибо заранее.

  2. #2
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Можно сделать так:

    1. #define SendChatEx(%0,%1,%2,%3) format(format_string,sizeof(format_string),%2,%3);SendClientMessage(%0,%1,format_string)


    И это будет работоспособно (проверил), но лучше все таки создавать локальную переменную в месте использования, впрочем это уже совсем другая история.

  3. #3
    Аватар для R1KO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.01.2020
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от Steve_Stage Посмотреть сообщение
    Можно сделать так:

    1. #define SendChatEx(%0,%1,%2,%3) format(format_string,sizeof(format_string),%2,%3);SendClientMessage(%0,%1,format_string)


    И это будет работоспособно (проверил), но лучше все таки создавать локальную переменную в месте использования, впрочем это уже совсем другая история.
    А чем ваш код отличается от моего?

  4. #4
    Аватар для red.inc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    30.07.2019
    Адрес
    Беларусь, Витебск
    Сообщений
    23
    Репутация:
    0 ±
    Инклудом strlib воспользуйтесь и не тратьте время на макросы.

  5. #5
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Держи готовую функу и не парь себе мозг.
    1. stock SendClientMessageEx(playerid, color, const text[], {Float, _}:...)
    2. {
    3. static
    4. args,
    5. str[144];
    6.  
    7.  
    8. /*
    9.   * Custom function that uses #emit to format variables into a string.
    10.   * This code is very fragile; touching any code here will cause crashing!
    11.   */
    12. if ((args = numargs()) == 3)
    13. {
    14. SendClientMessage(playerid, color, text);
    15. }
    16. else
    17. {
    18. while (--args >= 3)
    19. {
    20. #emit LCTRL 5
    21. #emit LOAD.alt args
    22. #emit SHL.C.alt 2
    23. #emit ADD.C 12
    24. #emit ADD
    25. #emit LOAD.I
    26. #emit PUSH.pri
    27. }
    28. #emit PUSH.S text
    29. #emit PUSH.C 144
    30. #emit PUSH.C str
    31. #emit PUSH.S 8
    32. #emit SYSREQ.C format
    33. #emit LCTRL 5
    34. #emit SCTRL 4
    35.  
    36.  
    37. SendClientMessage(playerid, color, str);
    38.  
    39.  
    40. #emit RETN
    41. }
    42. return 1;
    43. }

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    Держи готовую функу и не парь себе мозг.
    1. stock SendClientMessageEx(playerid, color, const text[], {Float, _}:...)
    2. {
    3. static
    4. args,
    5. str[144];
    6.  
    7.  
    8. /*
    9.   * Custom function that uses #emit to format variables into a string.
    10.   * This code is very fragile; touching any code here will cause crashing!
    11.   */
    12. if ((args = numargs()) == 3)
    13. {
    14. SendClientMessage(playerid, color, text);
    15. }
    16. else
    17. {
    18. while (--args >= 3)
    19. {
    20. #emit LCTRL 5
    21. #emit LOAD.alt args
    22. #emit SHL.C.alt 2
    23. #emit ADD.C 12
    24. #emit ADD
    25. #emit LOAD.I
    26. #emit PUSH.pri
    27. }
    28. #emit PUSH.S text
    29. #emit PUSH.C 144
    30. #emit PUSH.C str
    31. #emit PUSH.S 8
    32. #emit SYSREQ.C format
    33. #emit LCTRL 5
    34. #emit SCTRL 4
    35.  
    36.  
    37. SendClientMessage(playerid, color, str);
    38.  
    39.  
    40. #emit RETN
    41. }
    42. return 1;
    43. }
    И лови краши при использовании crashdetect/схожих плагинов :3

    А что мешает просто прописывать format и SendClientMessage вручную? Куда вы так спешите?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #7
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    И лови краши при использовании crashdetect/схожих плагинов :3

    А что мешает просто прописывать format и SendClientMessage вручную? Куда вы так спешите?
    Докажи, что именно эта вариация функи вызывает краши)
    Это не тот дефолт который везде предлагают.
    Я юзал эту функу с модом на онлайне достаточное время и всё было отлично)
    Если интересует мод, то South Central.

    А вообще, так же не вижу смысла её использовать, вместо fmt + SCM. Шило на мыло как говорится.

  8. #8
    Аватар для R1KO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.01.2020
    Сообщений
    9
    Репутация:
    0 ±
    Я все понимаю, но мой вопрос был касательно макроса а не велосипедов с функциями.

  9. #9
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    К слову, максимальная длина строки SendClientMessage - 144 символа +1 нуль-символ, а не 128

  10. #10
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от R1KO Посмотреть сообщение
    Я все понимаю, но мой вопрос был касательно макроса а не велосипедов с функциями.
    Если тебя интересует крашит или нет, то скажу, что не крашит.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •