[AMXX Module] RoundControl, Управление раундами, форсация окончания раунда |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
|
[AMXX Module] RoundControl, Управление раундами, форсация окончания раунда |
s1lent
|
20.5.2014, 14:29
Сообщение
|
|
|
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() Уничтожение форварда Код: new RoundControlHook:g_pWinCondHook; Функция CheckWinConditions, вызывается когда заканчивается раунд, игрок заходит в игру или меняет команду. ROUND_CONTINUE - Продолжает выполнение функции, в нашем случае произойдет конец раунда. ROUND_SUPERCEDE - Блокирует дальнейшее выполнение функции, окончание раунда будет заблокирован. Код: public fw_CheckWinConditions() 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_iNumScodeableTerrorist, // +4 int | W.92 | L.84 m_iNumScodeableCT, // +4 int | W.96 | L.88 m_iScodePointCount_Terrorist, // +4 int | W.100 | L.92 m_iScodePointCount_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_bSkipScode // +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");Предыдущие версии: - 1.0
RoundControl_1_0.zip ( 23,17 килобайт )
Кол-во скачиваний: 63- 2.1
roundcontrol_2_1.zip ( 112,68 килобайт )
Кол-во скачиваний: 127Примеры использование в других плагинах: Плагин Force Round End от Safety1st Исходники: SVN Repository AGHL.RU Текущая версия 2.2:
roundcontrol_2_2.zip ( 122,35 килобайт )
Кол-во скачиваний: 1542
Отредактировал: s1lent, - 31.10.2014, 22:29
|
|
|
|
Type
|
26.10.2014, 16:20
Сообщение
|
|
|
s1lent, Спасибо,полезно для csdm.
оффтоп С вашими знаниями,пора делать Aim Detector на мете) |
|
|
|
kritik
|
31.10.2014, 15:51
Сообщение
|
|
|
I'm not sure what you're saying that to me, this is completely unrelated to thread nor what I've said above. You want to use s1lent's code, but you don't want to take into account of his interests. He written whblocker module which can not be published on alliedmods because of the impossibility to open the source code for all. I think we can solve this problem. |
Поблагодарили 1 раз
|
|
csnet
|
31.10.2014, 16:53
Сообщение
|
|
|
подлизы они такие ...
![]() go v cs:go
|
Поблагодарили 1 раз
|
|
Bloo
|
31.10.2014, 16:54
Сообщение
|
![]() |
csnet, опять не поспал видимо) Это количество скачиваний нового архива)))
|
|
|
|
csnet
|
31.10.2014, 16:55
Сообщение
|
|
|
я поспал. и тему читаю раз в 15 мин
ну я понимаю что он мог перезалить
Отредактировал: csnet, - 31.10.2014, 16:56
![]() go v cs:go
|
|
|
|
maga
|
16.1.2015, 8:27
Сообщение
|
|
|
парни поясните:
m_iNumCT m_iAccountCT m_iNumSpawnableCT m_iSpawnPointCount_CT в чем разница между ними ? |
|
|
|
![]() ![]() |