Участник
Пользователь
- Сообщения
- 282
- Реакции
- 34
- Помог
- 3 раз(а)
- Ошибка
-
For some reason, plugin goes in new row like this:
[code]
[ - - - - - - - - - - - - - -
- - ]
[/code]
- ОС
- Linux
- Amx Mod X
-
AMX Mod X 1.10.0.5453
- Билд
-
reHLDS 3.12.0.780-dev
- ReGamedll
-
5.21.0.556
- Версия Metamod
-
1.31
- Список метамодулей
-
[ 1] SafeNameAndChat RUN - SafeNameAndChat.so v1.1 ini ANY ANY
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.0.137 ini Start Never
[ 3] AMX Mod X RUN - amxmodx_mm_i386.so v1.10.0.5453 ini Start ANY
[ 4] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 5] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 6] Rechecker RUN - rechecker_mm_i386.so v2.7 ini Chlvl ANY
[ 7] WHBlocker RUN - whblocker_mm_i386.so v1.5.697 ini Chlvl ANY
[ 8] ReSRDetector RUN - resrdetector_mm_i386.so v0.1.0 ini Chlvl ANY
[ 9] Revoice RUN - revoice_mm_i386.so v0.1.0.34 ini Start Never
[10] HitBox Fix RUN - hitbox_fix_mm_i386.so v1.1.1 ini Start ANY
[11] Admins Kit RUN - adminskit_amxx_i386.so v2.1.0 pl3 ANY ANY
[12] FakeMeta RUN - fakemeta_amxx_i386.so v1.10.0.5453 pl3 ANY ANY
[13] MySQL RUN - mysql_amxx_i386.so v1.10.0.5453 pl3 ANY ANY
[14] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.10.0.5453 pl3 ANY ANY
[15] Engine RUN - engine_amxx_i386.so v1.10.0.5453 pl3 ANY ANY
[16] ReAPI RUN - reapi_amxx_i386.so v5.22.0.254-dev pl3 ANY Never
[17] CStrike RUN - cstrike_amxx_i386.so v1.10.0.5453 pl3 ANY ANY
[18] Fun RUN - fun_amxx_i386.so v1.10.0.5453 pl3 ANY ANY
[19] GeoIP RUN - geoip_amxx_i386.so v1.10.0.5453 pl3 ANY ANY
[20] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl3 ANY Never
20 plugins, 20 running
- Список плагинов
-
[ 1] 0 FreshBans 1.4.6b kanagava unknown fresh_bans_ running
[ 2] 1 ScreenMaker 1.1 neygomon screen_make running
[ 3] 2 CSStatsX SQL 0.7.4+2 serfreeman1337 unknown csstatsx_sq debug
[ 4] 3 unknown unknown unknown unknown aes_statsx_ bad load 'dont worry this is going to be fixed in next map...
[ 5] 4 Admin Base 1.10.0.545 AMXX Dev Team admin.amxx running
[ 6] 5 AdminListen 2.3x /dev/ urandom / unknown adminlisten running
[ 7] 6 Admin Commands 1.10.0.545 AMXX Dev Team admincmd.am running
[ 8] 7 Admin Help 1.10.0.545 AMXX Dev Team adminhelp.a running
[ 9] 8 Multi-Lingual System 1.10.0.545 AMXX Dev Team multilingua running
[ 10] 9 Menus Front-End 1.10.0.545 AMXX Dev Team menufront.a running
[ 11] 10 Commands Menu 1.10.0.545 AMXX Dev Team cmdmenu.amx running
[ 12] 11 Players Menu 1.10.0.545 AMXX Dev Team plmenu.amxx running
[ 13] 12 Pause Plugins 1.10.0.545 AMXX Dev Team pausecfg.am running
[ 14] 13 Maps Menu 1.10.0.545 AMXX Dev Team mapsmenu.am running
[ 15] 14 Plugin Menu 1.10.0.545 AMXX Dev Team pluginmenu. running
[ 16] 15 Anti Flood 1.10.0.545 AMXX Dev Team antiflood.a running
[ 17] 16 Scrolling Message 1.10.0.545 AMXX Dev Team scrollmsg.a running
[ 18] 17 Info. Messages 1.10.0.545 AMXX Dev Team imessage.am running
[ 19] 18 Admin Votes 1.10.0.545 AMXX Dev Team adminvote.a running
[ 20] 19 Map Manager: Core 3.1.5 Mistrick unknown map_manager running
[ 21] 20 Map Manager: Scheduler 0.1.10 Mistrick unknown map_manager running
[ 22] 21 Map Manager: Rtv 0.1.1 Mistrick unknown map_manager running
[ 23] 22 Map Manager: Nominatio 0.2.1 Mistrick unknown map_manager running
[ 24] 23 Map Manager: BlockList 0.0.4 Mistrick unknown map_manager running
[ 25] 24 Map Manager: Online so 0.0.4 Mistrick unknown map_manager running
[ 26] 25 Map Manager: Effects 0.1.1 Mistrick unknown map_manager running
[ 27] 26 Map Manager: Informer 0.0.5 Mistrick unknown map_manager running
[ 28] 27 Map Manager: Sounds 0.0.2 Mistrick unknown map_manager running
[ 29] 28 Map Manager: Advanced 0.1.0 Mistrick unknown map_manager running
[ 30] 29 Map Manager: Priority 0.0.2 Mistrick unknown map_manager running
[ 31] 30 Stats Configuration 1.10.0.545 AMXX Dev Team statscfg.am running
[ 32] 31 Unreal Cheater Cry 1.0.11 Karaulov unknown unreal_chea running
[ 33] 32 [Advanced Slot Reserva 2.2 Shadows Adi unknown advanced_sl running
[ 34] 33 Temporary Flags 1.0 drag1c unknown temp_flags. running
[ 35] 34 Restrict Weapons 1.10.0.545 AMXX Dev Team restmenu.am running
[ 36] 35 [ReAPI] Best player of 1.1.2 F@nt0M best_player running
[ 37] 36 Say me and Say hp 1.4 neygomon sayme_reapi running
[ 38] 37 Std Admin Color Chat 1.1.1 Van der Cal unknown kgb_admin_c running
[ 39] 38 Deluxe Admin Chat 1.7 Hell Phoenix/EJL unknown amx_ejl_adm running
[ 40] 39 Unreal Spawn Fixer 1.1 karaulov unknown spawnfix.am running
[ 41] 40 Task Scheduler 0.2 JustinHoMi unknown task_schedu running
[ 42] 41 Reset Score 1.0 Silenttt unknown ressetscore running
[ 43] 42 Autoresponder/Advertis 0.5 MaximusBrood unknown ad_manager. running
[ 44] 43 AFK Control ReNew 1.2(a) neygomon unknown afk_control running
[ 45] 44 Bypass Guard 1.0.1 mx?! bypass_guar running
[ 46] 45 [BG] Provider: GeoIP 0.2 mx?! bg_provider running
[ 47] 46 Restrict Names 1.2a Brad Jones unknown restrictnam running
[ 48] 47 Admin Commands Log 1.2.1 twisterniq https://github.com/twisterniq/a admin_comma running
[ 49] 48 Exec 1.0 ToXiC unknown exec.amxx running
[ 50] 49 Admin ESP 1.0 neygomon unknown admin_esp.a running
[ 51] 50 Models Replacement 0.0.2 ConnorMcLeod | V unknown models_repl running
[ 52] 51 [ReAPI] Slay Losers 1.0 drag1c unknown reapi_slayl running
[ 53] 52 AMXX Gag 1.5.0 xPaw & Exolent amxgag.amxx running
[ 54] 53 [ReAPI] No Team Flash 0.0.2 Vaqtincha unknown no_team_fla running
[ 55] 54 WalkGuard 1.3.2 mogel unknown walkguard_t running
[ 56] 55 Music Round End 1.2.7 Jumper unknown MusicRoundE running
[ 57] 56 ReAimDetector API 0.2.2 ReHLDS Team unknown reaimdetect running
[ 58] 57 Ping Checker 26.0.1 RC1 h1k3 unknown ping_checke running
[ 59] 58 Frags Counter 1.0 CHEL74 unknown frags_count running
[ 60] 59 GameName Wins 1.0.4 twisterniq https://github.com/twisterniq/a gamename_wi running
[ 61] 60 Mode 2x2 2.5re s1lent mode.amxx running
[ 62] 61 [ReAPI] AWPoff 1.4.3 PAffAEJIkA :3 awp_off.amx running
[ 63] 62 Auto Team Balance Adva 1.5.1 Radius unknown auto_team_b running
[ 64] 63 [ReAPI] Block Fire in 3.1.0 F@nt0M unknown reapi_block running
[ 65] 64 Auto Set Steam Flag 1.0.0 drag1c unknown steam_free_ running
[ 66] 65 Bullet Damage 1.0 drag1c bullet_dama running
[ 67] 66 Weapon skins 1.0 drag1c unknown skins.amxx running
[ 68] 67 VIP and SVIP 2.5.11 drag1c unknown csgo_vip_sv running
[ 69] 68 CS:GO Molotov 2.5.11 DynamicBits & O' unknown csgo_moloto running
[ 70] 69 Advanced Kill Assists 1.3c Xelson kill_assist running
[ 71] 70 Custom Smoke 1.07 bionext custom_smok running
[ 72] 71 Snow WarmUp 0.3 bizon unknown reapi_snow_ running
[ 73] 72 Quick Defuse Bomb 0.0.2 Albertio unknown quick_defus running
[ 74] 73 Style C4 Timer 3.1 OciXCrom unknown crx_c4timer running
[ 75] 74 Discord Connect 1.0 drag1c unknown discord.amx running
[ 76] 75 Advanced Experience Sy 0.5.9 [REA serfreeman1337/s unknown aes_main.am running
[ 77] 76 AES: CStrike Addon 0.5.9 [REA serfreeman1337/s unknown aes_exp_cst running
[ 78] 77 AES: Informer 0.5.9 [REA serfreeman1337/s unknown aes_informe running
[ 79] 78 AES: Admin Tools 0.5.9 [REA serfreeman1337/s unknown aes_exp_edi running
[ 80] 79 AES: Bonus System 0.5.9 Vega serfreeman1337/s unknown aes_bonus_s running
[ 81] 80 AES: Bonus CSTRIKE 0.5.9.1 [R serfreeman1337/s unknown aes_bonus_c running
[ 82] 81 AES: Status Info 0.1 serfreeman1337 unknown aes_status_ running
[ 83] 82 Revive Teammates: Core 0.11.0 ufame & Albertio unknown rt_core.amx running
[ 84] 83 Revive Teammates: Plan 0.11.0 ufame & Albertio unknown rt_planting running
[ 85] 84 Revive Teammates: Rest 0.11.0 ufame & Albertio unknown rt_restrict running
[ 86] 85 Revive Teammates: Time 0.11.0 ufame & Albertio unknown rt_timer.am running
[ 87] 86 Revive Teammates: Effe 0.11.0 ufame & Albertio unknown rt_effects. running
[ 88] 87 Revive Teammates: Soun 0.11.0 ufame & Albertio unknown rt_sounds.a running
[ 89] 88 Revive Teammates: Bonu 0.11.0 ufame & Albertio unknown rt_bonus.am running
( 4) Load fails: Module/Library Class "xstats" required for plugin. Check modules.ini. 'going to be fixed in next map
89 plugins, 88 running
- Автор плагина
- OciXCrom
- Версия плагина
- 3.1
- Исходный код
-
#include <amxmodx>
#include <amxmisc>
#include <engine>
#if AMXX_VERSION_NUM < 183 || !defined set_dhudmessage
#tryinclude <dhudmessage>
#if !defined _dhudmessage_included
#error "dhudmessage.inc" is missing in your "scripting/include" folder. Download it from: "https://amxx-bg.info/inc/"
#endif
#endif
new const PLUGIN_VERSION[] = "3.1"
new const SYM_NEWLINE[] = "%n%"
#if !defined MAX_NAME_LENGTH
const MAX_NAME_LENGTH = 32
#endif
const Float:TIMER_THINK = 1.0
const MAX_POSITION_VALUES = 2
const MAX_RGB_VALUES = 3
const MAX_STYLE_LENGTH = 64
const MAX_TIMER_LENGTH = 256
const MAX_FILENAME_LENGTH = 256
enum _:RGBColors
{
RED,
GREEN,
BLUE
}
enum _:Sections
{
SECTION_NONE,
SECTION_SETTINGS,
SECTION_STYLES
}
enum _:MessageTypes
{
MSGTYPE_HUD,
MSGTYPE_DHUD,
MSGTYPE_CENTER
}
enum _:StyleModes
{
STYLEMODE_MANUAL,
STYLEMODE_CONSECUTIVE,
STYLEMODE_RANDOM
}
enum _:ColorModes
{
COLORMODE_ONE_COLOR,
COLORMODE_COLOR_CYCLE,
COLORMODE_RANDOM
}
enum _:Settings
{
STYLE_MODE,
TIMER_STYLE,
COLOR_MODE,
STARTING_COLOR[MAX_RGB_VALUES],
Float:STARTING_POSITION[MAX_POSITION_VALUES],
bool:ENABLE_POSITION_CYCLE,
MESSAGE_TYPE,
bool:OVERWRITE_ROUND_TIMER,
TIMER_SYNC,
START_MESSAGE_AT,
START_VOICE_AT,
VOICE_SPEAKER[MAX_NAME_LENGTH]
}
enum _:Styles
{
Begin[MAX_STYLE_LENGTH],
Add[MAX_STYLE_LENGTH],
End[MAX_STYLE_LENGTH],
ReplaceSymbol[MAX_STYLE_LENGTH],
ReplaceWith[MAX_STYLE_LENGTH],
bool:DoReplace
}
new g_eSettings[Settings]
new g_eTimer[Styles]
new g_szTimer[MAX_TIMER_LENGTH]
new Array:g_aStyles
new Array:g_aPositionCycle
new Trie:g_tColorCycle
new Float:g_fTimerPosition[MAX_POSITION_VALUES]
new bool:g_bPlanted
new bool:g_bRefreshColors
new g_iTimerColor[MAX_RGB_VALUES]
new g_iCurrentStyle
new g_iCurrentTimer
new g_iCurrentPosition
new g_iMessage
new g_iMaxStyles
new g_iMaxTimer
new g_iMaxPositions
new g_iTimerEntity
new g_iShowTimer
new g_iRoundTime
new g_pC4Timer
public plugin_init()
{
register_plugin("Style C4 Timer", PLUGIN_VERSION, "OciXCrom")
register_cvar("StyleC4Timer", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
g_iTimerEntity = create_entity("info_target")
if(!g_iTimerEntity)
{
set_fail_state("Unable to create timer entity")
}
new const TIMER_ENTITY_NAME[] = "stylec4timer_entity"
entity_set_string(g_iTimerEntity, EV_SZ_classname, TIMER_ENTITY_NAME)
register_think(TIMER_ENTITY_NAME, "timer_display")
register_event("HLTV", "timer_adjust", "a", "1=0", "2=0")
register_logevent("timer_create", 3, "2=Planted_The_Bomb")
register_logevent("timer_remove", 3, "2=Defused_The_Bomb")
register_logevent("timer_remove", 6, "3=Target_Saved")
register_logevent("timer_remove", 6, "3=Target_Bombed")
register_logevent("timer_remove", 2, "1=Round_Start")
register_logevent("timer_remove", 2, "1=Round_End")
register_logevent("timer_remove", 2, "1&Restart_Round_")
g_pC4Timer = get_cvar_pointer("mp_c4timer")
g_aStyles = ArrayCreate(Styles)
ReadFile()
}
public plugin_cfg()
{
timer_adjust()
}
public plugin_end()
{
ArrayDestroy(g_aStyles)
if(g_eSettings[COLOR_MODE] == COLORMODE_COLOR_CYCLE)
{
TrieDestroy(g_tColorCycle)
}
if(g_eSettings[ENABLE_POSITION_CYCLE])
{
ArrayDestroy(g_aPositionCycle)
}
}
ReadFile()
{
new szFilename[MAX_FILENAME_LENGTH]
get_configsdir(szFilename, charsmax(szFilename))
add(szFilename, charsmax(szFilename), "/StyleC4Timer.ini")
new iFilePointer = fopen(szFilename, "rt")
if(iFilePointer)
{
new szData[MAX_FILENAME_LENGTH], szKey[MAX_NAME_LENGTH], szValue[MAX_FILENAME_LENGTH - MAX_NAME_LENGTH], szMap[MAX_NAME_LENGTH]
new eStyle[Styles], bool:bRead = true, iSection = SECTION_NONE, szTemp[4][5], iSize, i
get_mapname(szMap, charsmax(szMap))
while(!feof(iFilePointer))
{
fgets(iFilePointer, szData, charsmax(szData))
trim(szData)
switch(szData[0])
{
case EOS, ';': continue
case '-':
{
iSize = strlen(szData)
if(szData[iSize - 1] == '-')
{
szData[0] = ' '
szData[iSize - 1] = ' '
trim(szData)
if(contain(szData, "*") != -1)
{
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '*')
copy(szValue, strlen(szKey), szMap)
bRead = equal(szValue, szKey) != 0
}
else
{
static const szAll[] = "#all"
bRead = equal(szData, szAll) || equali(szData, szMap)
}
}
else continue
}
case '[':
{
iSize = strlen(szData)
if(szData[iSize - 1] == ']')
{
switch(szData[2])
{
case 'E', 'e': iSection = SECTION_SETTINGS
case 'T', 't': iSection = SECTION_STYLES
default: iSection = SECTION_NONE
}
}
else continue
}
case '{':
{
if(iSection == SECTION_STYLES)
{
g_iMaxStyles++
}
}
case '}':
{
if(iSection == SECTION_STYLES)
{
eStyle[DoReplace] = eStyle[ReplaceWith][0] != 0
ArrayPushArray(g_aStyles, eStyle)
eStyle[Begin][0] = EOS
eStyle[Add][0] = EOS
eStyle[End][0] = EOS
eStyle[ReplaceSymbol][0] = EOS
eStyle[ReplaceWith][0] = EOS
}
}
default:
{
if(!bRead)
{
continue
}
switch(iSection)
{
case SECTION_SETTINGS:
{
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
trim(szKey); trim(szValue)
if(equal(szKey, "STYLE_MODE"))
{
g_eSettings[STYLE_MODE] = clamp(str_to_num(szValue), STYLEMODE_MANUAL, STYLEMODE_RANDOM)
}
else if(equal(szKey, "TIMER_STYLE"))
{
g_eSettings[TIMER_STYLE] = str_to_num(szValue)
}
else if(equal(szKey, "COLOR_MODE"))
{
g_eSettings[COLOR_MODE] = clamp(str_to_num(szValue), COLORMODE_ONE_COLOR, COLORMODE_RANDOM)
if(g_eSettings[COLOR_MODE] == COLORMODE_COLOR_CYCLE)
{
g_tColorCycle = TrieCreate()
}
}
else if(equal(szKey, "STARTING_COLOR"))
{
parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]), szTemp[2], charsmax(szTemp[]))
for(i = 0; i < MAX_RGB_VALUES; i++)
{
g_eSettings[STARTING_COLOR][i] = clamp(str_to_num(szTemp[i]), -1, 255)
}
}
else if(equal(szKey, "COLOR_CYCLE"))
{
if(g_eSettings[COLOR_MODE] != COLORMODE_COLOR_CYCLE)
{
continue
}
while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
{
trim(szKey); trim(szValue)
strtok(szKey, szTemp[0], charsmax(szTemp[]), szKey, charsmax(szKey), ' ')
TrieSetString(g_tColorCycle, szTemp[0], szKey)
}
}
else if(equal(szKey, "STARTING_POSITION"))
{
parse(szValue, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]))
for(i = 0; i < MAX_POSITION_VALUES; i++)
{
g_eSettings[STARTING_POSITION][i] = _:floatclamp(str_to_float(szTemp[i]), -1.0, 1.0)
}
}
else if(equal(szKey, "ENABLE_POSITION_CYCLE"))
{
g_eSettings[ENABLE_POSITION_CYCLE] = _:clamp(str_to_num(szValue), false, true)
if(g_eSettings[ENABLE_POSITION_CYCLE])
{
g_aPositionCycle = ArrayCreate(MAX_POSITION_VALUES)
}
}
else if(equal(szKey, "POSITION_CYCLE"))
{
if(!g_eSettings[ENABLE_POSITION_CYCLE])
{
continue
}
static Float:fPosition[MAX_POSITION_VALUES]
while(szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
{
trim(szKey); trim(szValue)
parse(szKey, szTemp[0], charsmax(szTemp[]), szTemp[1], charsmax(szTemp[]))
for(new i; i < MAX_POSITION_VALUES; i++)
{
fPosition[i] = str_to_float(szTemp[i])
}
g_iMaxPositions++
ArrayPushArray(g_aPositionCycle, fPosition)
}
}
else if(equal(szKey, "MESSAGE_TYPE"))
{
g_eSettings[MESSAGE_TYPE] = clamp(str_to_num(szValue), MSGTYPE_HUD, MSGTYPE_CENTER)
if(g_eSettings[MESSAGE_TYPE] == MSGTYPE_HUD)
{
g_iMessage = CreateHudSyncObj()
}
}
else if(equal(szKey, "OVERWRITE_ROUND_TIMER"))
{
g_eSettings[OVERWRITE_ROUND_TIMER] = _:clamp(str_to_num(szValue), false, true)
if(g_eSettings[OVERWRITE_ROUND_TIMER])
{
g_iShowTimer = get_user_msgid("ShowTimer")
g_iRoundTime = get_user_msgid("RoundTime")
}
}
else if(equal(szKey, "TIMER_SYNC"))
{
g_eSettings[TIMER_SYNC] = str_to_num(szValue)
}
else if(equal(szKey, "START_MESSAGE_AT"))
{
g_eSettings[START_MESSAGE_AT] = str_to_num(szValue)
}
else if(equal(szKey, "START_VOICE_AT"))
{
g_eSettings[START_VOICE_AT] = str_to_num(szValue)
}
else if(equal(szKey, "VOICE_SPEAKER"))
{
copy(g_eSettings[VOICE_SPEAKER], charsmax(g_eSettings[VOICE_SPEAKER]), szValue)
}
}
case SECTION_STYLES:
{
replace_all(szData, charsmax(szData), SYM_NEWLINE, "^n")
strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), ':')
trim(szKey); trim(szValue)
remove_quotes(szValue)
if(equali(szKey, "begin"))
{
copy(eStyle[Begin], charsmax(eStyle[Begin]), szValue)
}
else if(equali(szKey, "add"))
{
copy(eStyle[Add], charsmax(eStyle[Add]), szValue)
}
else if(equali(szKey, "end"))
{
copy(eStyle[End], charsmax(eStyle[End]), szValue)
}
else if(equali(szKey, "replace symbol"))
{
copy(eStyle[ReplaceSymbol], charsmax(eStyle[ReplaceSymbol]), szValue)
}
else if(equali(szKey, "replace with"))
{
copy(eStyle[ReplaceWith], charsmax(eStyle[ReplaceWith]), szValue)
}
}
}
}
}
}
fclose(iFilePointer)
if(!g_iMaxStyles)
{
set_fail_state("No styles found in the configuration file")
}
g_eSettings[TIMER_STYLE] = clamp(g_eSettings[TIMER_STYLE], 0, g_iMaxStyles - 1)
if(g_eSettings[STYLE_MODE] == STYLEMODE_MANUAL)
{
ArrayGetArray(g_aStyles, g_eSettings[TIMER_STYLE], g_eTimer)
}
if(g_eSettings[MESSAGE_TYPE] != MSGTYPE_CENTER)
{
if(g_eSettings[COLOR_MODE] != COLORMODE_RANDOM)
{
timer_refresh_colors()
if(g_eSettings[COLOR_MODE] == COLORMODE_COLOR_CYCLE)
{
g_bRefreshColors = true
}
}
if(!g_eSettings[ENABLE_POSITION_CYCLE])
{
for(new i; i < MAX_POSITION_VALUES; i++)
{
g_fTimerPosition[i] = g_eSettings[STARTING_POSITION][i]
}
}
}
}
else
{
set_fail_state("Unable to locate or open configuration file")
}
}
public timer_adjust()
{
g_iMaxTimer = get_pcvar_num(g_pC4Timer) + g_eSettings[TIMER_SYNC]
}
public timer_create()
{
if(g_bPlanted)
{
return
}
g_bPlanted = true
g_szTimer[0] = EOS
g_iCurrentTimer = g_iMaxTimer
switch(g_eSettings[STYLE_MODE])
{
case STYLEMODE_CONSECUTIVE:
{
ArrayGetArray(g_aStyles, g_iCurrentStyle++, g_eTimer)
if(g_iCurrentStyle == g_iMaxStyles)
{
g_iCurrentStyle = 0
}
}
case STYLEMODE_RANDOM:
{
ArrayGetArray(g_aStyles, random(g_iMaxStyles), g_eTimer)
}
}
if(g_bRefreshColors)
{
timer_refresh_colors()
}
if(g_eTimer[DoReplace])
{
timer_add(g_eTimer[Begin])
for(new i; i < g_iCurrentTimer; i++)
{
timer_add(g_eTimer[Add])
}
timer_add(g_eTimer[End])
}
else
{
formatex(g_szTimer, charsmax(g_szTimer), g_eTimer[Begin], g_iCurrentTimer)
}
timer_display(g_iTimerEntity)
}
timer_add(const szString[])
{
add(g_szTimer, charsmax(g_szTimer), szString)
}
public timer_display(iEnt)
{
if(g_bPlanted)
{
if(g_iCurrentTimer >= 0)
{
if(g_eSettings[START_MESSAGE_AT] && g_eSettings[START_MESSAGE_AT] < g_iCurrentTimer)
{
goto @AFTER_MESSAGE
}
if(g_eSettings[MESSAGE_TYPE] != MSGTYPE_CENTER)
{
switch(g_eSettings[COLOR_MODE])
{
case COLORMODE_COLOR_CYCLE:
{
new szTimer[5]
num_to_str(g_iCurrentTimer, szTimer, charsmax(szTimer))
if(TrieKeyExists(g_tColorCycle, szTimer))
{
new szColor[12], szRGB[MAX_RGB_VALUES][4]
TrieGetString(g_tColorCycle, szTimer, szColor, charsmax(szColor))
parse(szColor, szRGB[0], charsmax(szRGB[]), szRGB[1], charsmax(szRGB[]), szRGB[2], charsmax(szRGB[]))
for(new i; i < MAX_RGB_VALUES; i++)
{
g_iTimerColor[i] = str_to_num(szRGB[i])
}
}
}
case COLORMODE_RANDOM:
{
for(new i; i < MAX_RGB_VALUES; i++)
{
g_iTimerColor[i] = random(256)
}
}
}
if(g_eSettings[ENABLE_POSITION_CYCLE])
{
ArrayGetArray(g_aPositionCycle, g_iCurrentPosition++, g_fTimerPosition)
if(g_iCurrentPosition == g_iMaxPositions)
{
g_iCurrentPosition = 0
}
}
}
switch(g_eSettings[MESSAGE_TYPE])
{
case MSGTYPE_HUD:
{
set_hudmessage(g_iTimerColor[0], g_iTimerColor[1], g_iTimerColor[2], g_fTimerPosition[0], g_fTimerPosition[1], 0, 1.0, 1.0, 0.01, 0.01)
ShowSyncHudMsg(0, g_iMessage, g_szTimer, g_iCurrentTimer)
}
case MSGTYPE_DHUD:
{
set_dhudmessage(g_iTimerColor[0], g_iTimerColor[1], g_iTimerColor[2], g_fTimerPosition[0], g_fTimerPosition[1], 0, 1.0, 1.0, 0.01, 0.01)
show_dhudmessage(0, g_szTimer, g_iCurrentTimer)
}
case MSGTYPE_CENTER:
{
client_print(0, print_center, g_szTimer, g_iCurrentTimer)
}
}
@AFTER_MESSAGE:
if(0 < g_iCurrentTimer <= g_eSettings[START_VOICE_AT])
{
new szSpeaker[MAX_NAME_LENGTH]
num_to_word(g_iCurrentTimer, szSpeaker, charsmax(szSpeaker))
client_cmd(0, "spk ^"%s/%s.wav", g_eSettings[VOICE_SPEAKER], szSpeaker)
}
if(g_eSettings[OVERWRITE_ROUND_TIMER])
{
message_begin(MSG_ALL, g_iShowTimer)
message_end()
message_begin(MSG_ALL, g_iRoundTime)
write_short(g_iCurrentTimer + 1)
message_end()
}
g_iCurrentTimer--
if(g_eTimer[DoReplace])
{
replace(g_szTimer, charsmax(g_szTimer), g_eTimer[ReplaceSymbol], g_eTimer[ReplaceWith])
}
else
{
formatex(g_szTimer, charsmax(g_szTimer), g_eTimer[Begin], g_iCurrentTimer)
}
entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + TIMER_THINK)
}
}
}
public timer_remove()
{
if(g_bPlanted)
{
g_bPlanted = false
g_iCurrentTimer = -1
}
}
timer_refresh_colors()
{
for(new i; i < MAX_RGB_VALUES; i++)
{
g_iTimerColor[i] = g_eSettings[STARTING_COLOR][i]
}
}
Plugin goes in two rows on HUD whichever resolution is taken. It is the same for all players.