Русское сообщество по скриптингу

Как проверить, идет ли игра? CS 1.6

Все вопросы по скриптингу для Metamod, помощь в редактировании плагинов.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

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


Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник плагина.

Как проверить, идет ли игра? CS 1.6

Сообщение simsergey » 06 авг 2011, 00:20

Приветствую! :-)

У меня возникла такая проблема, никак не могу проверить, идет ли игра, или игроки просто находятся в командах, или в спектре, либо еще как-то.. :(

Немножко объясню, что именно мне нужно:
Речь идет о Counter-Strike 1.6
Рассмотрим ситуацию с самого начала, когда на сервере нет ни одного игрока. Подключатся первый игрок и, предположим, заходит за CT. Игроку выдается сообщение, что счет очков вестись не будет, т.к. за команду противника никто не играет. Заходит второй игрок, он заходит за T, и игра начинается. Игрокам выдается сообщение, что игра стартовала.

Вопрос, как поймать событие (сообщение) "игра стартовала", и отловить сообщение "счет очков вестись не будет" ?
Как узнать количество игроков?

Знаю точно, что HL ведет их учет. Вариант найти его в памяти рассматривал, однако найденная переменная после перезапуска сервера меняет свой адрес...
Вариант ведения самостоятельного учета по событиям (pfnClientConnect, pfnClientDisconnect, pfnClientPutInServer, pfnSpectatorConnect, pfnSpectatorDisconnect, pfnSpectatorThink...) не очень радует..

Спасибо, что прочитали.. Есть мысли?
С уважением. :-)
Не нравятся смайлы? - не интерпретируй их.
Аватара пользователя
simsergey
 
Сообщения: 46
Зарегистрирован: 27 июн 2011, 11:26
Благодарил (а): 15 раз.
Поблагодарили: 3 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Как проверить, идет ли игра? CS 1.6

Сообщение simsergey » 10 авг 2011, 02:00

Прошу прощения, что не так скоро ответил, на свой же пост :-)

DJ_WEST, спасибо за подсказку! Не сразу догадался, что с помощь функции WriteString можно читать, мне что-то показалось, что через функцию с именем Write обычно пишут :-D

Получается, надо создать небольшой объектик, и по мере поступления событий менять в нем поля .. По ходу, дублировать перемнные в памяти.. Не есть хорошо :-[ :-! , но так, ради теста остальных алгоритмов сойдет.

Fedcomp, почитал я документацию АртМани, в итоге нашел я указатель на переменную, которая в случае если игра идет равна 1, если не идет 0.
(Я в первом сообщении описывал, что значит идет и не идет)
Однако, при отсеивании указателей, после первого же перезапуска сервера (как написано в инструкциях АртМани) все указатели отсеиваются.. Искал именно указатель на начало блока памяти, т.к. указателя на ячейку не нашел..
При этом заметил, что в адресе к переменной младшие байты сохраняются, 0xXXXX0444.
Это совпадение или переменная, имеющая статический адрес?

У вас могут быть предложения, как поймать статический адрес переменной?
Спасибо.
Не нравятся смайлы? - не интерпретируй их.
Аватара пользователя
simsergey
 
Сообщения: 46
Зарегистрирован: 27 июн 2011, 11:26
Благодарил (а): 15 раз.
Поблагодарили: 3 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Как проверить, идет ли игра? CS 1.6

Сообщение stea » 23 авг 2011, 20:13

[pawn]
  1. /* Ultimate KillStreak Advanced

  2.     Автор перевода Sho0ter

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

  4.  

  5. 1) 10 звуков убийств противников:

  6. Проигрывает звук TripleKill

  7. Проигрывает звук MultiKill (не стандартный)

  8. Проигрывает звук UltraKill (не стандартный)

  9. Проигрывает звук KillingSpree (не стандартный)

  10. Проигрывает звук MegaKill

  11. Проигрывает звук Holy Shit

  12. Проигрывает звук Ludicrouskill

  13. Проигрывает звук Rampage

  14. Проигрывает звук Unstoppable (не стандартный)

  15. Проигрывает звук Monster Kill (не стандартный)

  16.  

  17. 2) 3 звука Headshot (в случайном порядке)

  18. 3) 3 звука Knife Kill (в случайном порядке)

  19. 4) 2 звука First Blood (в случайном порядке))

  20. 5) 3 звука Round Counter ((в случайном порядке))

  21. 6) 1 звук Grenade Kill Events

  22. 7) 6 звуков самоубийства (в случайном порядке)

  23. 8) 2 звука Double Kill (в случайном порядке)

  24.  

  25. Переменные:

  26.  

  27. - ut_killstreak_advanced (по умолчанию 3) - переключение режима работы

  28. 1 = Только цветные сообщения

  29. 2 = Только звуки

  30. 3 = Звуки и цветные сообщения

  31. Другие цифры выключают плагин

  32.  

  33.  

  34. - ut_killstreak_hs (по умолчанию 1) -> вкл/выкл убийства в голову

  35. Включает 2 звука, цветные сообщения

  36.  

  37. - ut_killstreak_knife (по умолчанию 1) -> вкл/выкл убийства ножом

  38. Включает 3 звука, цветные сообщения

  39.  

  40. - ut_firstblood (по умолчанию 1) -> вкл/выкл первую кровь

  41. Включает 2 звука, цветные сообщения

  42.  

  43. - ut_nade_events (по умолчанию 1) -> вкл/выкл убийства гранатой

  44. Включает 2 звука, цветные сообщения

  45.  

  46. - ut_suicide_events (по умолчанию 1) -> вкл/выкл самоубийства

  47. Включает 6 звуков, цветные сообщения

  48.  

  49. - ut_doublekill_events (по умолчанию 1) -> вкл/выкл двойные убийства

  50. Включает 2 звука, цветные сообщения

  51.  

  52. - ut_roundcout_sounds (по умолчанию 1) -> вкл/выкл начало раунда

  53. Включает 3 звука, цветные сообщения

  54.  

  55.  

  56. * Авторы:

  57. - xxAvalancheXx for double kill codes

  58. - jim_yang for some sugestion and grenade events codes

  59. - bo0m! for help me with an register event function

  60. - Duca for Streak Mode Example

  61.  

  62. */

  63.  

  64.  

  65.  

  66.  

  67. #include <amxmodx>

  68. #include <amxmisc>

  69.  

  70. #define PLUGIN_NAME "Ultimate KillStreak Advanced"

  71. #define PLUGIN_VERSION "0.7"

  72. #define PLUGIN_AUTHOR "SAMURAI"

  73.  

  74.  

  75. new kills[33] = {0,...};

  76. new deaths[33] = {0,...};

  77. new firstblood

  78. new kill[33][24];

  79.  

  80. #define LEVELS 10

  81. #define hsounds 2

  82. #define knsounds 3

  83. #define fbsounds 2

  84. #define prpsounds 3

  85. #define suicidesounds 6

  86. #define maxdbsounds 2

  87. #define TASK_CLEAR_KILL    100

  88.  

  89. new hsenable

  90. new knifeenable

  91. new firstbloodenable

  92. new nadecvar

  93. new suicidecvar

  94. new cvardouble

  95. new rnstartcvar

  96. new killstreaktype

  97.  

  98.  

  99. new levels[10] = {3, 4, 6, 8, 10, 12,14,15,16,18};

  100.  

  101. new sounds[10][] =

  102. {

  103. "mdie_ut/triplekill1",

  104. "mdie_ut/multikill1",  

  105. "mdie_ut/ultrakill1",

  106. "mdie_ut/killingspree1",

  107. "mdie_ut/megakill1",

  108. "mdie_ut/holyshit1",

  109. "mdie_ut/ludicrouskill1",

  110. "mdie_ut/rampage1",

  111. "mdie_ut/unstoppable1",

  112. "mdie_ut/monsterkill1"

  113. };

  114.  

  115. new messages[10][] =

  116. {

  117. "%s сделал тройное убийство!",

  118. "%s сделал несколько убийств!",

  119. "%s ультра убийца!",

  120. "%s в убийственном кутеже!",

  121. "%s мега убийца!",

  122. "%s, святое гомно !",

  123. "%s, это уже не смешно !",

  124. "%s буйствует !",

  125. "%s НЕПОБЕДИМЫЙ!",

  126. "%s МОНСТР !!!"

  127. };

  128.  

  129. new hslist[hsounds][] =

  130. {

  131. "mdie_ut/headshot1",

  132. "mdie_ut/headshot2"

  133. }

  134.  

  135. new fblist[fbsounds][]=

  136. {

  137. "mdie_ut/firstblood1",

  138. "mdie_ut/firstblood2"

  139. }

  140.  

  141. new preplist[prpsounds][]=

  142. {

  143. "mdie_ut/prepare1",

  144. "mdie_ut/prepare2",

  145. "mdie_ut/prepare3"

  146. }

  147.  

  148.  

  149. new fbmessages[2][]=

  150. {

  151. "%s сделал первое убийство !",

  152. "%s почувствовал вкус первой крови !"

  153. }

  154.  

  155. new hsmessages[4][]=

  156. {

  157. "%s снес голову %s !",

  158. "%s попал прямо в голову %s !",

  159. "%s превратил голову %s в месиво !",

  160. "%s положил %s превосходным выстрелом в голову !"

  161. }

  162.  

  163. new knlist[knsounds][]=

  164. {

  165. "mdie_ut/knife1",

  166. "mdie_ut/knife2",

  167. "mdie_ut/knife3"

  168. }

  169.  

  170. new knmessages[3][]=

  171. {

  172. "%s вспорол %s",

  173. "%s подкрался с ножом к %s",   

  174. "%s сделал нарезочку с %s"

  175. }

  176.  

  177. new nademessages[3][]=

  178. {

  179. "%s кинул прямо в %s",

  180. "%s преподнес подарок %s",

  181. "%s метко кинул! Так держать..."

  182. }

  183.  

  184. new suicidemess[3][]=

  185. {

  186. "%s самоубийца",

  187. "%s камикадзе",

  188. "%s убился"

  189. }

  190.  

  191. new suicidelist[suicidesounds][]=

  192. {

  193. "mdie_ut/suicide1",

  194. "mdie_ut/suicide2",

  195. "mdie_ut/suicide3",

  196. "mdie_ut/suicide4",

  197. "mdie_ut/suicide5",

  198. "mdie_ut/suicide6"

  199. }

  200.  

  201. new doublelist[maxdbsounds][]=

  202. {

  203. "mdie_ut/doublekill1",

  204. "mdie_ut/doublekill2"

  205. }

  206.  

  207. is_mode_set(bits) {

  208.     new mode[9];

  209.     get_cvar_string("ut_killstreak_advanced", mode, 8);

  210.     return read_flags(mode) & bits;

  211. }

  212.  

  213. public plugin_init() {

  214.     register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

  215.     killstreaktype = register_cvar("ut_killstreak_advanced", "3");

  216.     register_event("ResetHUD", "reset_hud", "b");

  217.     register_event("HLTV","rnstart","a", "1=0", "2=0");

  218.     register_event("DeathMsg", "event_death", "a");

  219.     hsenable = register_cvar("ut_killstreak_hs","1");

  220.     knifeenable = register_cvar("ut_killstreak_knife","1");

  221.     firstbloodenable = register_cvar("ut_firstblood","1");

  222.     nadecvar = register_cvar("ut_nade_events","1");

  223.     suicidecvar = register_cvar("ut_suicide_events","1");

  224.     cvardouble = register_cvar("ut_doublekill_events","1");

  225.     rnstartcvar = register_cvar("ut_roundcout_sounds","1");

  226.  

  227.     return PLUGIN_CONTINUE;

  228. }

  229.  

  230.  

  231. public event_death(id) {

  232.     new killer = read_data(1);

  233.     new victim = read_data(2);

  234.     new headshot = read_data(3);

  235.     new weapon[24], vicname[32], killname[32]

  236.     read_data(4,weapon,23)

  237.     get_user_name(victim,vicname,31)

  238.     get_user_name(killer,killname,31)

  239.    

  240.    

  241.  

  242.     if(headshot == 1 && get_pcvar_num(hsenable) ==1)

  243.     {

  244.         set_hudmessage(0, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)

  245.         show_hudmessage(0, (hsmessages[random_num(0,3)]), killname, vicname)

  246.         new i

  247.         i = random_num(0,hsounds-1)

  248.         client_cmd(0,"spk %s",hslist[i])

  249.     }

  250.  

  251.    

  252.     if(weapon[0] == 'k'  && get_pcvar_num(knifeenable) ==1)

  253.     {

  254.         set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)

  255.         show_hudmessage(0, (knmessages[random_num(0,2)]), killname, vicname)

  256.         new r

  257.         r = random_num(0,knsounds-1)

  258.         client_cmd(0,"spk %s",knlist[r])  

  259.     }

  260.    

  261.    

  262.     if(firstblood && killer!=victim && killer>0 && get_pcvar_num(firstbloodenable) ==1)

  263.     {          

  264.         set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)

  265.         show_hudmessage(0, (fbmessages[random_num(0,1)]), killname)

  266.         new t

  267.         t = random_num(0,fbsounds-1)

  268.         client_cmd(0,"spk %s",fblist[t])

  269.         firstblood = 0

  270.      }

  271.      

  272.      

  273.     if(weapon[1] == 'r' && get_pcvar_num(nadecvar) ==1)

  274.      {

  275.         set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)

  276.         show_hudmessage(0,(nademessages[random_num(0,2)]),killname,vicname)

  277.         client_cmd(0,"spk ultimate_sounds/nade1")

  278.      }

  279.  

  280.      

  281.     if(killer == victim && get_pcvar_num(suicidecvar) ==1)

  282.     {

  283.         set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)

  284.         show_hudmessage(0,(suicidemess[random_num(0,2)]), vicname)

  285.         new z

  286.         z = random_num(0,suicidesounds-1)

  287.         client_cmd(0,"spk %s",suicidelist[z])

  288.      

  289.     }

  290.    

  291.    

  292.     if(kill[killer][0] && equal(kill[killer],weapon) && get_pcvar_num(cvardouble) == 1)

  293.     {

  294.         set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)

  295.         show_hudmessage(0,"Ух-ты! %s положил сразу двоих!", killname)

  296.         kill[killer][0] = 0;

  297.         new q

  298.         q= random_num(0,maxdbsounds-1)

  299.         client_cmd(0,"spk %s",doublelist[q])

  300.     }

  301.    

  302.     else

  303.     {

  304.         kill[killer] = weapon;

  305.         set_task(0.1,"clear_kill",TASK_CLEAR_KILL+killer);

  306.     }

  307.        

  308.        

  309.    

  310.     kills[killer] += 1;

  311.     kills[victim] = 0;

  312.     deaths[killer] = 0;

  313.     deaths[victim] += 1;

  314.  

  315.     for (new i = 0; i < LEVELS; i++)

  316.     {

  317.         if (kills[killer] == levels[i])

  318.         {

  319.             announce(killer, i);

  320.             return PLUGIN_CONTINUE;

  321.         }

  322.     }

  323.  

  324.     return PLUGIN_CONTINUE;

  325. }

  326.  

  327. announce(killer, level)

  328. {

  329.        

  330.     new name[33]

  331.     new r = random(256)

  332.     new g = random(256)

  333.     new b = random(256)

  334.  

  335.     get_user_name(killer, name, 32);

  336.     set_hudmessage(r,g,b, 0.05, 0.65, 2, 0.02, 6.0, 0.01, 0.1, 2);

  337.  

  338.     if( (get_pcvar_num(killstreaktype) <= 0 ) || get_pcvar_num(killstreaktype) > 3)

  339.     return PLUGIN_HANDLED;

  340.    

  341.    

  342.    

  343.     if(get_pcvar_num(killstreaktype) == 1)

  344.     {

  345.         show_hudmessage(0, messages[level], name);

  346.     }

  347.        

  348.     if(get_pcvar_num(killstreaktype) == 2)

  349.     {

  350.         client_cmd(0, "spk %s", sounds[level]);

  351.     }

  352.  

  353.     if(get_pcvar_num(killstreaktype) == 3)

  354.     {

  355.         show_hudmessage(0, messages[level], name);

  356.         client_cmd(0, "spk %s", sounds[level]);

  357.     }

  358.        

  359.     return PLUGIN_CONTINUE;

  360.        

  361. }

  362.  

  363.  

  364. public reset_hud(id)

  365. {

  366.     firstblood = 1

  367.     if (is_mode_set(16)) {

  368.       if (kills[id] > levels[0]) {

  369.         client_print(id, print_chat,

  370.                      "* Вы убили %d не умерев ни разу.", kills[id]);

  371.       } else if (deaths[id] > 1) {

  372.         client_print(id, print_chat,

  373.                      "* Осторожней, вы умираете %d раунд подряд.", deaths[id]);

  374.  

  375.         }

  376.     }

  377. }

  378.  

  379. public rnstart(id)

  380. {

  381.     if(get_pcvar_num(rnstartcvar) == 1)

  382.     {

  383.     firstblood = 1  

  384.     set_hudmessage(255, 0, 255, -1.0, 0.30, 0, 6.0, 6.0)

  385.     show_hudmessage(0, "Приготовтесь к бою!")

  386.     new q

  387.     q = random_num(0,prpsounds-1)

  388.     client_cmd(0,"spk %s",preplist[q])

  389.     }

  390. }

  391.  

  392. public client_connect(id) {

  393.     kills[id] = 0;

  394.     deaths[id] = 0;

  395. }

  396.  

  397. public clear_kill(taskid)

  398.  {

  399.     new id = taskid-TASK_CLEAR_KILL;

  400.     kill[id][0] = 0;

  401.  }

  402.  

  403. public plugin_precache()

  404. {

  405. precache_sound("mdie_ut/triplekill1.wav")

  406. precache_sound("mdie_ut/multikill1.wav")

  407. precache_sound("mdie_ut/ultrakill1.wav")

  408. precache_sound("mdie_ut/killingspree1.wav")

  409. precache_sound("mdie_ut/megakill1.wav")

  410. precache_sound("mdie_ut/holyshit1.wav")

  411. precache_sound("mdie_ut/ludicrouskill1.wav")

  412. precache_sound("mdie_ut/rampage1.wav")

  413. precache_sound("mdie_ut/unstoppable1.wav")

  414. precache_sound("mdie_ut/monsterkill1.wav")

  415. precache_sound("mdie_ut/headshot1.wav")

  416. precache_sound("mdie_ut/headshot2.wav")

  417. precache_sound("mdie_ut/headshot3.wav")

  418. precache_sound("mdie_ut/knife1.wav")

  419. precache_sound("mdie_ut/knife2.wav")

  420. precache_sound("mdie_ut/knife3.wav")

  421. precache_sound("mdie_ut/firstblood1.wav")

  422. precache_sound("mdie_ut/firstblood2.wav")

  423. precache_sound("mdie_ut/prepare1.wav")

  424. precache_sound("mdie_ut/prepare2.wav")

  425. precache_sound("mdie_ut/prepare3.wav")

  426. precache_sound("mdie_ut/nade1.wav")

  427. precache_sound("mdie_ut/suicide1.wav")

  428. precache_sound("mdie_ut/suicide2.wav")

  429. precache_sound("mdie_ut/suicide3.wav")

  430. precache_sound("mdie_ut/suicide4.wav")

  431. precache_sound("mdie_ut/suicide5.wav")

  432. precache_sound("mdie_ut/suicide6.wav")

  433. precache_sound("mdie_ut/doublekill1.wav")

  434. precache_sound("mdie_ut/doublekill2.wav")

  435. }

  436.          

  437.        

  438.        

  439.  
[/pawn]
Аватара пользователя
stea
 
Сообщения: 1
Зарегистрирован: 01 авг 2011, 11:30
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead

Пред.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7