Advertisement
Guest User

Info panel for developers

a guest
Dec 26th, 2015
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.98 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.0
  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.  
  48. // Изменяет текст в инфо
  49. ChangeStringDevInfo(playerid)
  50. {
  51.     new Float: data[4];
  52.  
  53.     GetPlayerPos(playerid, data[0], data[1], data[2]);
  54.     GetPlayerFacingAngle(playerid, data[3]);
  55.  
  56.     new string_current[MAX_STRING_DI];
  57.  
  58.     format
  59.     (
  60.         string_current, sizeof string_current, TD_TEXT_STRING,
  61.         data[0], data[1], data[2], data[3],
  62.         GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)
  63.     );
  64.  
  65.     static string_buffer[MAX_STRING_DI] = ' ';
  66.  
  67.     if (strcmp(string_buffer, string_current, true))
  68.     {
  69.         TextDrawSetString(td_id[playerid], string_current);
  70.     }
  71.     string_buffer = string_current;
  72. }
  73.  
  74. // Обновляет текст в инфо
  75. forward UpdateDevInfo(playerid);
  76. public UpdateDevInfo(playerid)
  77. {
  78.     ChangeStringDevInfo(playerid);
  79. }
  80.  
  81. // Колбеки
  82. public OnFilterScriptInit()
  83. {
  84.     print("Инфо-панель для разработчиков \
  85.     v"#INFO_VERSION" загружена");
  86.     return 1;
  87. }
  88.  
  89. public OnFilterScriptExit()
  90. {
  91.     print("Инфо-панель для разработчиков \
  92.     v"#INFO_VERSION" выгружена");
  93.     return 1;
  94. }
  95.  
  96. public OnPlayerConnect(playerid)
  97. {
  98.     timer_id[playerid] = -1;
  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.     }
  119.     if (td_id[playerid] != Text:INVALID_TEXT_DRAW)
  120.     {
  121.         TextDrawDestroy(td_id[playerid]);
  122.         td_id[playerid] = Text:INVALID_TEXT_DRAW;
  123.     }
  124.     return 1;
  125. }
  126.  
  127. public OnPlayerCommandText(playerid, cmdtext[])
  128. {
  129.     if (strcmp(cmdtext, TXT_CMD_DI, true) == 0)
  130.     {
  131.         if (timer_id[playerid] == -1)
  132.         {
  133.             ChangeStringDevInfo(playerid);
  134.             TextDrawShowForPlayer(playerid, td_id[playerid]);
  135.             timer_id[playerid] = SetTimerEx("UpdateDevInfo",\
  136.             TIME_UPDATE_DI, 1, "d", playerid);
  137.             SendClientMessage(playerid, COLOR_MSG_ON, TXT_SHOW_DI);
  138.         }
  139.         else
  140.         {
  141.             TextDrawHideForPlayer(playerid, td_id[playerid]);
  142.             KillTimer(timer_id[playerid]);
  143.             timer_id[playerid] = -1;
  144.             SendClientMessage(playerid, COLOR_MSG_OFF, TXT_HIDE_DI);
  145.         }
  146.         return 1;
  147.     }
  148.     return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement