Advertisement
Guest User

Info panel for developers

a guest
Jul 27th, 2016
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.13 KB | None | 0 0
  1. /*
  2.     Инфо-панель для разработчиков
  3.  
  4.     Панель в виде текстдрава, показывающая некоторые данные игрока
  5.     (по самому себе). Создана для разработчиков игровых модов.
  6.  
  7.     Как образно будет выглядеть панель на экране -
  8.     x: 0.0 y: 0.0 z: 0.0 angle: 0.0 world: 0 int: 0
  9.  
  10.     где:
  11.     x, y, z - позиция;
  12.     angle - угол поворота;
  13.     world - виртуальный мир;
  14.     int - интерьер.
  15.  */
  16.  
  17. // Подключаемые файлы
  18. #include <a_samp>
  19.  
  20. // Настройки
  21. #define INFO_VERSION            1.1
  22.  
  23. #define TIME_UPDATE_DI          500// время обновления (млс.)
  24. #define MAX_STRING_DI           164// максимальный размер строки
  25.  
  26. #define TD_COORD                132.000000, 428.000000
  27. #define TD_FONT                 1
  28. #define TD_LETTER_SIZE          0.259999, 1.499999
  29. #define TD_SET_OUTLINE          1
  30. #define TD_SET_PROPORTIONAL     1
  31.  
  32. #define TD_TEXT_STRING\
  33. "~w~~h~x: ~y~~h~%.4f ~w~~h~y: ~y~~h~%.4f ~w~~h~z: ~y~~h~%.4f \
  34. ~w~~h~angle: ~y~~h~%.4f \
  35. ~w~~h~world: ~y~~h~%d ~w~~h~int: ~y~~h~%d"
  36.  
  37. #define TXT_CMD_DI              "/инфо"
  38. #define TXT_SHOW_DI             "Инфо-панель включена"
  39. #define TXT_HIDE_DI             "Инфо-панель отключена"
  40.  
  41. #define COLOR_MSG_ON            (0x00ff00ff)
  42. #define COLOR_MSG_OFF           (0xff0000ff)
  43.  
  44. // Переменные
  45. static Text:td_id[MAX_PLAYERS] = {Text:INVALID_TEXT_DRAW, ...};
  46. static timer_id[MAX_PLAYERS];
  47. static string_buffer_info[MAX_PLAYERS][MAX_STRING_DI];
  48.  
  49. // Изменяет текст в инфо
  50. ChangeStringDevInfo(playerid)
  51. {
  52.     new Float:data[4];
  53.  
  54.     GetPlayerPos(playerid, data[0], data[1], data[2]);
  55.     GetPlayerFacingAngle(playerid, data[3]);
  56.  
  57.     new string_current[MAX_STRING_DI];
  58.  
  59.     format
  60.     (
  61.         string_current, sizeof string_current, TD_TEXT_STRING,
  62.         data[0], data[1], data[2], data[3],
  63.         GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)
  64.     );
  65.  
  66.     if (strcmp(string_buffer_info[playerid], string_current, true))
  67.     {
  68.         TextDrawSetString(td_id[playerid], string_current);
  69.     }
  70.     string_buffer_info[playerid] = string_current;
  71. }
  72.  
  73. // Обновляет текст в инфо
  74. forward UpdateDevInfo(playerid);
  75. public UpdateDevInfo(playerid)
  76. {
  77.     ChangeStringDevInfo(playerid);
  78. }
  79.  
  80. // Колбеки
  81. public OnFilterScriptInit()
  82. {
  83.     print("Инфо-панель для разработчиков \
  84.     v"#INFO_VERSION" загружена");
  85.     return 1;
  86. }
  87.  
  88. public OnFilterScriptExit()
  89. {
  90.     print("Инфо-панель для разработчиков \
  91.     v"#INFO_VERSION" выгружена");
  92.     return 1;
  93. }
  94.  
  95. public OnPlayerConnect(playerid)
  96. {
  97.     timer_id[playerid] = -1;
  98.     string_buffer_info[playerid] = " ";
  99.     if (td_id[playerid] == Text:INVALID_TEXT_DRAW)
  100.     {
  101.         td_id[playerid] = TextDrawCreate(TD_COORD, " ");
  102.         TextDrawFont(td_id[playerid], TD_FONT);
  103.         TextDrawLetterSize(td_id[playerid], TD_LETTER_SIZE);
  104.         TextDrawSetOutline(td_id[playerid], TD_SET_OUTLINE);
  105.         TextDrawSetProportional(td_id[playerid], TD_SET_PROPORTIONAL);
  106.     }
  107.     return 1;
  108. }
  109.  
  110. public OnPlayerDisconnect(playerid, reason)
  111. {
  112.     #pragma unused reason
  113.     if (timer_id[playerid] != -1)
  114.     {
  115.         TextDrawHideForPlayer(playerid, td_id[playerid]);
  116.         KillTimer(timer_id[playerid]);
  117.         timer_id[playerid] = -1;
  118.         string_buffer_info[playerid] = " ";
  119.     }
  120.     if (td_id[playerid] != Text:INVALID_TEXT_DRAW)
  121.     {
  122.         TextDrawDestroy(td_id[playerid]);
  123.         td_id[playerid] = Text:INVALID_TEXT_DRAW;
  124.     }
  125.     return 1;
  126. }
  127.  
  128. public OnPlayerCommandText(playerid, cmdtext[])
  129. {
  130.     if (strcmp(cmdtext, TXT_CMD_DI, true) == 0)
  131.     {
  132.         if (timer_id[playerid] == -1)
  133.         {
  134.             ChangeStringDevInfo(playerid);
  135.             TextDrawShowForPlayer(playerid, td_id[playerid]);
  136.             timer_id[playerid] = SetTimerEx("UpdateDevInfo",
  137.             TIME_UPDATE_DI, 1, "d", playerid);
  138.             SendClientMessage(playerid, COLOR_MSG_ON, TXT_SHOW_DI);
  139.         }
  140.         else
  141.         {
  142.             TextDrawHideForPlayer(playerid, td_id[playerid]);
  143.             KillTimer(timer_id[playerid]);
  144.             timer_id[playerid] = -1;
  145.             string_buffer_info[playerid] = " ";
  146.             SendClientMessage(playerid, COLOR_MSG_OFF, TXT_HIDE_DI);
  147.         }
  148.         return 1;
  149.     }
  150.     return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement