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

[Модуль AMXX] Round Control

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

В данном разделе форума разрешено выкладывать файлы или модули для AMXX/SM, которые пригодятся при программировании.

[Модуль AMXX] Round Control

Сообщение s1lent » 04 май 2014, 11:59

RoundControl


Автор: s1lent
Весрия: 2.2

Описание: В основном модуль предназначен для разработчиков, как отдельный инструмент для работы над раундами. Модуль умеет - блокировать полностью раунд, принудительно завершать раунд (Победа CT, T, НИЧЬЯ), блокировать конец раунда по собственному желанию в нужный момент.
Также снимает ограничение с CVAR mp_roundtime, можно ставить 500 минут, выше не советую - собьется HUD.

Поддерживаемые версии HLDS:
- Windows 5758,6027,6132
- Linux 5787,6027,6132

Установка:
roundcontrol_amxx.dll | roundcontrol_amxx_i386.so положить в папку /cstrike/amxmodx/modules/
и прописать roundcontrol модуль в /cstrike/amxmodx/configs/modules.ini

API:

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

Регистрируем форвард
Код: Выделить всё
public plugin_init()
{
        
RegisterControl(RC_CheckWinConditions,"fw_CheckWinConditions");


Уничтожение форварда
Код: Выделить всё
new RoundControlHook:g_pWinCondHook;
 
public 
plugin_init()
{
        
g_pWinCondHook RegisterControl(RC_CheckWinConditions,"fw_CheckWinConditions");
}
 
public 
removeHook()
{
        
UnregisterControl(RC_CheckWinConditions,g_pWinCondHook);


Функция CheckWinConditions, вызывается когда заканчивается раунд, игрок заходит в игру или меняет команду.

ROUND_CONTINUE - Продолжает выполнение функции, в нашем случае произойдет конец раунда.
ROUND_SUPERCEDE - Блокирует дальнейшее выполнение функции, окончание раунда будет заблокирован.

Код: Выделить всё
 
public fw_CheckWinConditions()
{
        
client_print(0,print_chat,"* Forward ^"CheckWinConditions^" called.");
        if(
g_pBlockEnd)// Предположим у нас свой мод и g_pBlockEnd == true, раунд не будет завершаться, пока g_pBlockEnd снова не станет false.
        
{
                return 
ROUND_SUPERCEDE;
        }
        return 
ROUND_CONTINUE;
}
  


roundcontrol.inc
Код: Выделить всё
#if defined _roundcontrol_included
   #endinput
#endif

#define _roundcontrol_included

#if AMXX_VERSION_NUM >= 175
   #pragma reqlib roundcontrol
   #if !defined AMXMODX_NOAUTOLOAD
      #pragma loadlib roundcontrol
   #endif
#else
   #pragma library roundcontrol
#endif

#define DONT_REG         -1
#define BLOCK_BOTH         0
#define BLOCK_ONLY_EXPIRED      1

#define FLAG_RETRACT_EXPIRED      (1<<0)                     /* Этот флаг убирает перехват функции HasRoundTimeExpired за ненадобностью. */

#define RC_NONE            0
#define RC_SOUND         (1<<0)                     /* Воспроизводить звук победы. */
#define RC_MESSAGE         (1<<1)                     /* Сообщение окончания раунда. ( Автоматически составляет сообщение по событии eventid ) */
#define RC_SCORE         (1<<2)                     /* Прибавлять команде победные очки. */

#define RC_ALL_AUTO         (RC_SOUND|RC_SCORE)
#define RC_ALL_CUSTOM         (RC_SOUND|RC_MESSAGE|RC_SCORE)

#define ROUND_CONTINUE         0                     /* Продолжает выполнение функции */
#define ROUND_SUPERCEDE         4                     /* Блокирует дальнейшее выполнение функции */

enum (+= 4)
{
   m_bFreezePeriod = 4,
   m_bBombDropped,

   m_flRestartRoundTime = 48,      // +4 float   | W.48 | L.40
   m_flCheckWinConditions,         // +4 float   | W.52 | L.44
   m_fRoundCount,            // +4 float   | W.56 | L.48
   m_iRoundTime,            // +4 int   | W.60 | L.52
   m_iRoundTimeSecs,         // +4 int   | W.64 | L.56
   m_iIntroRoundTime,         // +4 int   | W.68 | L.60
   m_fIntroRoundCount,         // +4 int   | W.72 | L.64
   m_iAccountTerrorist,         // +4 int   | W.76 | L.68
   m_iAccountCT,            // +4 int   | W.80 | L.68
   m_iNumTerrorist,         // +4 int   | W.84 | L.76
   m_iNumCT,            // +4 int   | W.88 | L.80
   m_iNumSpawnableTerrorist,      // +4 int   | W.92 | L.84
   m_iNumSpawnableCT,         // +4 int   | W.96 | L.88
   m_iSpawnPointCount_Terrorist,      // +4 int   | W.100 | L.92
   m_iSpawnPointCount_CT,         // +4 int   | W.104 | L.96
   m_iHostagesRescued,         // +4 int   | W.108 | L.100
   m_iHostagesTouched,         // +4 int   | W.112 | L.104
   m_iRoundWinStatus,         // +4 int   | W.116 | L.108
   m_iNumCTWins,            // +2 short   | W.120 | L.112
   m_iNumTerroristWins = 122,      // +2 short   | W.122 | L.114
   m_bTargetBombed = 124,         // +1 bool   | W.124 | L.116
   m_bBombDefused = 125,         // +1 bool   | W.125 | L.117
   m_bMapHasBombTarget = 126,      // +1 bool   | W.126 | L.118
   m_bMapHasBombZone = 127,      // +1 bool   | W.127 | L.119
   m_bMapHasBuyZone = 128,         // +1 bool   | W.128 | L.120
   m_bMapHasRescueZone = 129,      // +1 bool   | W.129 | L.121
   m_bMapHasEscapeZone = 130,      // +1 bool   | W.130 | L.122
   m_iMapHasVIPSafetyZone = 132,      // +4 int   | W.132 | L.124
   m_bMapHasCameras,         // +4 bool   | W.136 | L.128
   m_iC4Timer,            // +4 int   | W.140 | L.132
   m_iC4Guy,            // +4 int   | W.144 | L.136
   m_iLoserBonus,            // +4 int   | W.148 | L.140
   m_iNumConsecutiveCTLoses,      // +4 int   | W.152 | L.144
   m_iNumConsecutiveTerroristLoses,   // +4 int   | W.156 | L.148
   m_fMaxIdlePeriod,         // +4 int   | W.160 | L.152
   m_iLimitTeams,            // +4 int   | W.164 | L.156
   m_bLevelInitialized,         // +1 bool   | W.168 | L.160
   m_bRoundTerminating = 169,      // +1 bool   | W.169 | L.161
   m_bCompleteReset = 170,         // +1 bool   | W.170 | L.162
   m_flRequiredEscapeRatio = 172,      // +4 float   | W.172 | L.164
   m_iNumEscapers,            // +4 float   | W.176 | L.168
   m_iHaveEscaped,            // +4 float   | W.180 | L.172
   m_bCTCantBuy,            // +1 bool   | W.184 | L.176
   m_bTCantBuy = 185,         // +1 bool   | W.185 | L.177
   m_flBombRadius = 188,         // +4 float   | W.188 | L.180
   m_iConsecutiveVIP,         // +4 float   | W.192 | L.184
   m_iTotalGunCount,         // +4 int   | W.196 | L.188
   m_iTotalGrenadeCount,         // +4 int   | W.200 | L.192
   m_iTotalArmourCount,         // +4 int   | W.204 | L.196
   m_iUnBalancedRounds,         // +4 int   | W.208 | L.200
   m_iNumEscapeRounds,         // +4 int   | W.212 | L.204
   m_iMapVotes,            // +400 int   | W.216 | L.208
   m_iLastPick = 616,         // +4 int   | W.616 | L.608
   m_iMaxMapTime,            // +4 int   | W.620 | L.612
   m_iMaxRounds,            // +4 int   | W.624 | L.616
   m_iTotalRoundsPlayed,         // +4 int   | W.628 | L.620
   m_iMaxRoundsWon,         // +4 int   | W.632 | L.624
   m_iStoredSpectValue,         // +4 int   | W.636 | L.628
   m_flForceCameraValue,         // +4 float   | W.640 | L.632
   m_flForceChaseCamValue,         // +4 float   | W.644 | L.636
   m_flFadeToBlackValue,         // +4 float   | W.648 | L.640
   m_pVIP,               // +4 pvdata   | W.652 | L.644
   VIPQueue,            // +20 pvdata   | W.656 | L.648
   m_flIntermissionEndTime = 676,      // +4 pvdata   | W.676 | L.668
   m_flIntermissionStartTime,      // +4 float   | W.680 | L.672
   m_iEndIntermissionButtonHit,      // +4 int   | W.684 | L.676
   m_tmNextPeriodicThink,         // +4 float   | W.688 | L.680
   m_bFirstConnected,         // +1 bool   | W.692 | L.684
   m_bInCareerGame = 693,         // +1 bool   | W.693 | L.685
   m_fCareerRoundMenuTime = 696,      // +4 float   | W.696 | L.688
   m_iCareerMatchWins,         // +4 int   | W.700 | L.692
   m_iRoundWinDifference,         // +4 int   | W.704 | L.696
   m_fCareerMatchMenuTime,         // +4 float   | W.708 | L.700
   m_bSkipSpawn            // +1 bool   | W.712 | L.704
};

enum RoundEvent
{
   EventDefault = 0,
   TargetBombed,
   VIPEscaped,
   VIPAssassinated,
   TerroristEscaped,
   CTsPreventEscape,
   EscapingTerroristNeutralized,
   BombDefused,
   CTsWin,
   TerroristWin,
   RoundDraw,
   AllHostagesRescued,
   TargetSaved,
   HostagesNotRescued,
   TerroristNotEscaped,
   VIPNotEscaped,
   GameCommencing
};

enum RoundControlWin
{
   WINSTATUS_CT = 1,
   WINSTATUS_TERRORIST,
   WINSTATUS_DRAW
};

enum RoundControlFunc
{
   /*
   * void
   */
   RC_CheckWinConditions = 0,         // (void);

   /*
    * teamWins - какая команда побеждает.
    * numWins - победные очки.
    * eventRound - событие окончание раунда.
    * bHasExpired - раунд закончился по истечению времени.
   */
   RC_RoundEnd               // (RoundControlWin:teamWins,numWins,RoundEvent:eventRound,bool:bHasExpired)
};

/*
 * Регистрация форварда
 *
*/
native RoundControlHook:RegisterControl(RoundControlFunc:function,const callback[],Post = 0);

/*
 * Удаление форварда
 *
*/
native UnregisterControl(RoundControlFunc:function,RoundControlHook:hookid,Post = 0);

/*
 * Позволяет составить условие для постоянной блокировки
 *
*/
native RoundControlHook:SetBlockControl(RoundControlFunc:function,any:...);

/*
 * Удаляет блокировку
 *
*/
native RemoveBlockControl(RoundControlFunc:function,RoundControlHook:hookid);

/**
 * Возобновляет вызов форварда
 *
*/
native EnableControl(RoundControlHook:hookid,Post = 0);

/**
 * Приостанавливает вызов форварда
 *
*/
native DisableControl(RoundControlHook:hookid,Post = 0);

/*
 * Вызов функции из gamedll, в частности функцию CheckWinConditions
 * Вызов RoundEnd имитирует конце раунда
 *
*/
native ExecuteControl(RoundControlFunc:function,any:...);

/*
 * Действует только для RoundEnd и только в PRE
 * Дает возможность изменить параметры, которые передается в функции.
*/
native SetReturnParamControl(RoundControlFunc:function,any:...);

/*
 * Устанавливает особые флаги
 *
*/
native SetFlagsControl(const flags = FLAG_RETRACT_EXPIRED);

/*
 * Обновить табло счёта и установить/добавить очки команде.
 *
*/
native RoundUpdateScoreWins(ctsWins = 0,tsWins = 0,bool:bAdd = true);

/*
 * Принудительное окончание раунда.
 *
 * @param winStatus      Команда которая побеждает.
 * @param fDelay      Время (задержка), через которое наступит следующий раунд.
 * @param flags         Флаги RC_SOUND, RC_MESSAGE,RC_SCORE.
 * @param sentence      Своё сообщение о победе. (По умолчанию сообщение определяется по eventid)
 * @param eventid      Событие победы, "RoundEvent".
 * @param numScore      Сколько очков получает побежденная команда (По умолчанию +1)
 * @param bReset      Отбирать всю экипировку, фраги, смерти, победы в начале нового раунда. (Идентично sv_restart 1)
 *
 * @return         nothing
 */
native RoundEndForceControl(RoundControlWin:winStatus = WINSTATUS_CT,Float:fDelay = 5.0,flags = RC_ALL_CUSTOM,const sentence[] = "#Round_Draw",RoundEvent:eventid = EventDefault,numScore = 1,bool:bReset = false);

native set_pgame_int(_offset,_value,_linuxdiff = 8);

native get_pgame_int(_offset,_linuxdiff = 8);

native set_pgame_float(_offset,Float:_value,_linuxdiff = 8);

native Float:get_pgame_float(_offset,_linuxdiff = 8);

native set_pgame_short(_offset,Float:_value,_linuxdiff = 8);

native get_pgame_short(_offset,_linuxdiff = 8);

native set_pgame_bool(_offset,bool:_value,_linuxdiff = 8);

native bool:get_pgame_bool(_offset,_linuxdiff = 8);

native set_pgame_cbase(_Index_,_offset,_linuxdiff = 8);

native get_pgame_cbase(_offset,_linuxdiff = 8);

/*
* @return адрес указателя g_pGameRules
*/
native get_pgame_rules();

Принудительно завершить раунд
Код: Выделить всё
/*
 * Принудительное окончание раунда.
 *
 * @param winStatus             Команда которая побеждает.
 * @param fDelay                Время (задержка), через которое наступит следующий раунд.
 * @param flags                 Флаги RC_SOUND, RC_MESSAGE,RC_SCORE.
 * @param sentence              Своё сообщение о победе. (По умолчанию сообщение определяется по eventid)
 * @param eventid               Событие победы, "RoundEvent".
 * @param numScore              Сколько очков получает побежденная команда (По умолчанию +1)
 * @param bReset                Отбирать всю экипировку, фраги, смерти, победы в начале нового раунда. (Идентично sv_restart 1)
 *
 * @return                      nothing
 */
native RoundEndForceControl(RoundControlWin:winStatus WINSTATUS_CT,Float:fDelay 5.0,flags RC_ALL_CUSTOM,const sentence[] = "#Round_Draw",RoundEvent:eventid EventDefault,numScore 1,bool:bReset false); 


Принудительно завершить победный раунд в пользу CT.
Код: Выделить всё
 register_clcmd("say /ctwin","cmdCtwin");
 
public 
cmdCtwin(id)
{
        
RoundEndForceControl(WINSTATUS_CT);


Исходники:
Вы должны зарегистрироваться, чтобы видеть ссылки.
Последний раз редактировалось s1lent 01 ноя 2014, 00:28, всего редактировалось 14 раз(а).
Аватара пользователя
s1lent
Скриптер
 
Сообщения: 123
Зарегистрирован: 11 июл 2011, 20:02
Откуда: Северск
Благодарил (а): 32 раз.
Поблагодарили: 110 раз.

Re: [Модуль AMXX] Round Control

Сообщение Safety1st » 07 май 2014, 11:18

Developer писал(а):В ближайшее время собираюсь переделать 'Force Round End' на использование вашего модуля для красивого завершения затянувшихся раундов.

Вы должны зарегистрироваться, чтобы видеть ссылки.. Рад до безумия, что благодаря вам появилась возможность грамотно форсировать завершение раунда! :dance2:


Советую включить этот код в roundcontrol.inc :
[pawn]
  1. #pragma reqlib RoundControl

  2. #if !defined AMXMODX_NOAUTOLOAD

  3.         #pragma loadlib RoundControl

  4. #endif
[/pawn]
--

Вам осталось только замутить модульный Unlimited Money – и у нелюбителей Арфея больше не будет причин завистливо облизываться :thumbs_up
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: [Модуль AMXX] Round Control

Сообщение s1lent » 07 май 2014, 12:54

Developer,
насчет плагина модификации Force Round End, не знаю зачем там реализовано через дхуд, но кажется get_user_msgid("RoundTime") было бы куда приличней)

думаю в следующей версии добавить форвард, если раунд истек по времени от mp_roundtime,
и не имеет значения есть ли цели на карте и вызывать конец раунда на свое усмотрение.

p.s кто-нибудь подайте петицию на редактирование первого поста, из-за этого отпадает желание вообще что-то обновлять в этой теме, чего походу и добиваются)
Аватара пользователя
s1lent
Скриптер
 
Сообщения: 123
Зарегистрирован: 11 июл 2011, 20:02
Откуда: Северск
Благодарил (а): 32 раз.
Поблагодарили: 110 раз.

Re: [Модуль AMXX] Round Control

Сообщение Safety1st » 07 май 2014, 19:10

plamont писал(а):не знаю зачем там реализовано через дхуд, но кажется get_user_msgid("RoundTime") было бы куда приличней)

Не вижу связи :head:
С помощью RoundTime 'там' ловится длительность раунда, а DHUD - это Director HUD месседжи, с их помощью игрой выводятся tutor'ы, а я его использую для показа предупреждения игрокам.

plamont писал(а):думаю в следующей версии добавить форвард, если раунд истек по времени от mp_roundtime,
и не имеет значения есть ли цели на карте и вызывать конец раунда на свое усмотрение.

Думаю, это будет лишним: такой функционал мало кому пригодится + он прост и больше достоин реализации в pawn'е.

plamont писал(а):p.s кто-нибудь подайте петицию на редактирование первого поста, из-за этого отпадает желание вообще что-то обновлять в этой теме, чего походу и добиваются)

Подам. На все темы распространяется эта неудобство.
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: [Модуль AMXX] Round Control

Сообщение Safety1st » 16 май 2014, 03:27

plamont, обнаружилось одно неудобство.

Многие плагины для регистрации конца раунда используют конструкцию:
[pawn]
  1. register_event( "SendAudio", "event_end_round", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw" )
[/pawn]Так вот, когда рауд завершается модулем принудительно - этот месседж AMXX-плагины не получают. В моём случае warmup на сервере мог длиться несколько раундов ;)

Безусловно, fast fix простой - в плагине заменить отлов раунда на:
[pawn]
  1. register_logevent( "event_end_round", 2, "1=Round_End" )
[/pawn]

Но в целях совместимости с имеющимися плагинами я всё же предлагаю добавить нужный функционал в модуль. Например, если он сам шлёт месседж SendAudio - пусть это будет emessage. Предложение относится ко всем 'атрибутам' конца раунда, каких 'не хватает' AMXX-плагинам при принудительном завершении (я не углублялся в этот вопрос).
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: [Модуль AMXX] Round Control

Сообщение s1lent » 16 май 2014, 13:22

Developer, хм да вроде там и так встроено. ну если не ловится посмотрю.

[pawn]
  1.  

  2. void RoundEndForce(int iWinStatus,float fDelay,int iFlags,const char *szSentence,int iEventID,int iScore,BOOL bReset)

  3. {

  4.         if(iFlags & RC_SOUND)

  5.         {

  6.                 static int gmsgidSendAudio;

  7.                 if(gmsgidSendAudio || (gmsgidSendAudio = REG_USER_MSG("SendAudio",-1)) != NULL)

  8.                 {

  9.                         MESSAGE_BEGIN(MSG_BROADCAST,gmsgidSendAudio);

  10.                         WRITE_BYTE(0);

  11.                         WRITE_STRING(szWinStatus[iWinStatus * 2]);

  12.                         WRITE_SHORT(100);

  13.                         MESSAGE_END();

  14.                 }

  15.         }

  16.  
[/pawn]

[pawn]
  1.  

  2. static const char *szWinStatus[] =

  3. {

  4.         "",

  5.         "#CTs_Win",                     "%!MRAD_ctwin",

  6.         "#Terrorists_Win",      "%!MRAD_terwin",

  7.         "#Round_Draw",          "%!MRAD_rounddraw"

  8. };

  9.  
[/pawn]

Код: Выделить всё

Result:
WINSTATUS_DRAW = 3;
WINSTATUS_DRAW * 2 = 6;
szWinStatus[6] = "%!MRAD_rounddraw"
Аватара пользователя
s1lent
Скриптер
 
Сообщения: 123
Зарегистрирован: 11 июл 2011, 20:02
Откуда: Северск
Благодарил (а): 32 раз.
Поблагодарили: 110 раз.

Re: [Модуль AMXX] Round Control

Сообщение Cloun » 23 май 2014, 18:08

Developer писал(а):Вообще запретили редактировать свои посты спустя некоторое время ((

Об изменениях в новой версии расскажете?

И раз уж пишу - спрошу заранее.
Код: Выделить всё
/**
 * Подтвердить, что событие "#Game_Commencing" уже было.
 * Для предотвращения следующих "Game_Commencing"
 */
native RC_Commencing();

О каких последующих "Game_Commencing" речь? Где такой функционал может пригодиться на ваш взгляд?

В ближайшее время собираюсь переделать 'Force Round End' на использование вашего модуля для красивого завершения затянувшихся раундов. Будет ещё 1 пример применения ;)

Game Commencing вызывается тогда, когда в изначально пустые команда заходит хотя бы по одному человеку. Предположим, что запустили пустой сервер, затем на него зашли 10 человек и хотя бы один из них за СТ. Поиграли, разошлись. И при этом осталось 5 человек и все за команду Т. Тогда в консоли у всех будет писаться "Scoring will not start until both teams have players". И если в это время кто-то зайдет за СТ, то вызовется Game Commencing.

Добавлено спустя 1 минуту 25 секунд:
Вопрос: Когда раунд завершается, как ничейный (Round Draw) кроме случаев, когда на сервере один игрок и он сам себя убил?
Аватара пользователя
Cloun
 
Сообщения: 89
Зарегистрирован: 28 мар 2013, 16:52
Благодарил (а): 17 раз.
Поблагодарили: 6 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6
C++ / Pure C

Re: [Модуль AMXX] Round Control

Сообщение MoonSorr0w. » 11 июн 2014, 13:51

Подскажите ,как установить? :D
Мне просто этот код:

[spoiler]#include <amxmodx>
#include <roundcontrol>

#pragma ctrlchar '\'

new bool:g_pBlockEnd = false;

public plugin_init()
{
register_clcmd("say /draw","cmdDraw");
register_clcmd("say /ctwin","cmdCtwin");
register_clcmd("say /terwin","cmdTerwin");

register_clcmd("say /block","cmdBlock");
register_clcmd("say /commencing","cmdGameCommencing");

register_logevent("RoundEnd",2,"1=Round_End");
}
public cmdBlock(id)
{
return client_print(id,print_chat,"* RoundEnd block: %s",(g_pBlockEnd ^= true) ? "True" : "False");
}
public cmdGameCommencing(id)
{
RC_Commencing();
return client_print(id,print_chat,"* GameCommencing - Approve!");
}
public RoundEnd()
{
client_print(0,print_chat,"* Event called \"Round_End\"");
}
public RC_CheckWinConditions()
{
client_print(0,print_chat,"* Forward \"RC_CheckWinConditions\" called.");
if(g_pBlockEnd)
{
return RC_SUPERCEDE;
}
return RC_CONTINUE;
}
public cmdDraw(id)
{
RC_RoundEndForce(WINSTATUS_DRAW);
}
public cmdCtwin(id)
{
RC_RoundEndForce(WINSTATUS_CT);
}
public cmdTerwin(id)
{
RC_RoundEndForce(WINSTATUS_TERRORIST);
}[/spoiler]

скомпилить и поставить или что? :P
P.S Извините за тупые вопросы, в сфере кс- новичок.
Аватара пользователя
MoonSorr0w.
 
Сообщения: 49
Зарегистрирован: 19 окт 2013, 18:12
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6

Re: [Модуль AMXX] Round Control

Сообщение Safety1st » 11 июн 2014, 18:30

MoonSorr0w., модуль 'Round Control' сам по себе ничего не делает: он даёт возможность заюзать свои функции в плагинах, так же как и все дефолтные модули из AMXX. Т.е. какой-то плагин к нему нужен обязательно. 'Мне просто этот код' - это просто пример для скриптеров, он не предназначен для применения на серверах.

Если нужна просто блокировка окончания раунда - используйте metamod-модуль 'Вы должны зарегистрироваться, чтобы видеть ссылки.'. Вот там ставится модуль и больше ничего не нужно: раунд становится бесконечным.
GoldSrc Gaming Community
Аватара пользователя
Safety1st
 
Сообщения: 1958
Зарегистрирован: 08 окт 2011, 05:41
Откуда: Moscow
Благодарил (а): 1690 раз.
Поблагодарили: 933 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: [Модуль AMXX] Round Control

Сообщение PRoSToTeM@ » 11 июн 2014, 19:56

По идее правильно будет sv_roundend -> mp_roundend, т.к. всё таки, это game (multiplayer) расширение, а не engine + только для cs.
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Re: [Модуль AMXX] Round Control

Сообщение prefed801 » 11 июл 2014, 07:28

Код: Выделить всё
udpconnection.cpp (1589) : Assertion Failed: !m_bFindingBestServer\

Билд 6132 - что не так? Почему падает сервер?
Аватара пользователя
prefed801
 
Сообщения: 680
Зарегистрирован: 24 янв 2013, 22:09
Забанен
Благодарил (а): 0 раз.
Поблагодарили: 147 раз.

Пред.След.

Вернуться в Файлы и модули

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

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