Style C4 Timer

Одобрените от нас плъгини. Моля, докладвайте ако забележите бъг с някой от плъгините в този раздел.
Отговори
Потребителски аватар

Автор на темата
OciXCrom TM
Администратор
Администратор
Мнения: 5037
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 56 пъти
Получена благодарност: 469 пъти
Години: 21
Контакти:

Style C4 Timer

Мнение от OciXCrom TM » 07 окт 2016, 16:27

Изображение

Style C4 Timer
Описание
  • C4 таймер, който показва времето до експлозия по малко различен начин. Можете да избирате между няколко различни стилове, включвайки и обикновения, т.е. отброяване до 0. Таймерът също така сменя цвета си през определено време, като по подразбиране започва със зелен цвят, на 10 секунди става жълт, а на 5 става червен.
Списък с cvar-ове
  • * Имайте предвид, че кваровете за цветове и позиция на екрана са активни само когато плъгинът ползва HUD или DHUD съобщения.
  • c4timer_style <по подразбиране: "1"> -- Стил на таймера (вижте стиловете по-долу).
  • c4timer_random <по подразбиране: "0"> -- Дали таймерът да има произволни цветове (ако е включено, долните два cvar-а ще бъдат блокирани).
  • c4timer_yellow <по подразбиране: "10"> -- На колко секунди таймерът да става жълт.
  • c4timer_red <по подразбиране: "5"> -- На колко секунди таймерът да става червен.
  • c4timer_xpos <по подразбиране: "-1.0"> -- X позиция на екрана.
  • c4timer_ypos <по подразбиране: "0.80"> -- Y позиция на екрана.
  • c4timer_type <по подразбиране: "0"> -- Вид на съобщението (0 = HUD; 1 = DHUD; 2 = CENTER)
Стилове (c4timer_style "0/1/2/3/4...")

Изображение
  • * Имайте предвид, че списъка на снимката не е комплектен след последните ъпдейти на плъгина. Нови стилове може да се добавят във файла configs/C4Styles.ini:
  • Стил 0:
    • C4: 10
  • Стил 1:
    • [ | | | | | - - - - - - - - - - ]
  • Стил 2:
    • oooooooooo
  • Стил 3:
    • | > > > > o > > > > > > > > > > |
  • Стил 4:
    • | > > > > C4 > > > > > > > > > > |
  • Стил 5:
    • [ + + + + + - - - - - - - - - - ]
  • Стил 6:
    • [ - - - - > - - - - - - - - - - ]
Снимки

Изображение

Изображение

Изображение

Изображение

Клип (с HUD съобщения)



* Цъкни тук за да видиш всички сървъри, които използват този плъгин.

Допълнителна информация и линк за теглене

Изображение
Изображение
Изображение

Потребителски аватар

Автор на темата
OciXCrom TM
Администратор
Администратор
Мнения: 5037
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 56 пъти
Получена благодарност: 469 пъти
Години: 21
Контакти:

Re: Style C4 Timer

Мнение от OciXCrom TM » 29 дек 2016, 16:15

Update 2.0 @ 29.12.2016
  • Добавен е квар за смяна на вида на съобщението: c4timer_type (0 = HUD; 1 = DHUD; 2 = CENTER)
  • Добавени са нови стилове.
  • Оптимизация на кода.

Потребителски аватар

Stoyan VK Trip6ix
Потребител
Потребител
Мнения: 12
Регистриран: 17 апр 2017, 19:27
Местоположение: Sofia, Bulgaria
Се отблагодари: 1 път
Години: 20
Контакти:

Re: Style C4 Timer

Мнение от Stoyan VK Trip6ix » 17 апр 2017, 20:21

Ще може ли да ми направиш частта със звуците?
"Бъди промяната, която искаш да видиш в света." ~ Махатма Ганди

Потребителски аватар

Автор на темата
OciXCrom TM
Администратор
Администратор
Мнения: 5037
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 56 пъти
Получена благодарност: 469 пъти
Години: 21
Контакти:

Re: Style C4 Timer

Мнение от OciXCrom TM » 17 апр 2017, 20:28

Update v2.1 @ 23.01.2017
  • Стиловете вече не се намират в .sma файла. Можете да ги променяте и да добавяте нови такива от файла configs/C4Styles.ini.
  • Вече можете да ползвате %n% за да преместите съобщението на нов ред. Отнася се за (D)HUD съобщения
Stoyan VK написа:Ще може ли да ми направиш частта със звуците?

Код: Избери всички

#include <amxmodx>
#include <amxmisc>
#include <csx>

#if AMXX_VERSION_NUM < 183
    #include <dhudmessage>
#endif

#define PLUGIN_VERSION "2.1 [cdown edit]"
#define SYM_NEWLINE "%n%"
#define CDOWN_SOUND "sound/countdown.mp3"

enum
{
    RED = 0,
    GREEN,
    BLUE
}

enum
{
    HUD = 0,
    DHUD,
    CENTER
}

enum _:RegisteredCvars
{
    CVAR_STYLE,
    CVAR_RANDOM,
    CVAR_YELLOW,
    CVAR_RED,
    CVAR_XPOS,
    CVAR_YPOS,
    CVAR_TYPE,
    CVAR_ORIGINAL
}

enum _:CvarValues
{
    CV_STYLE,
    bool:CV_RANDOM,
    CV_YELLOW,
    CV_RED,
    Float:CV_XPOS,
    Float:CV_YPOS,
    CV_TYPE,
    CV_ORIGINAL
}

enum _:Styles
{
    Begin[64],
    Add[20],
    End[20],
    ReplaceSymbol[20],
    ReplaceWith[20],
    bool:DoReplace
}

new g_eRegisteredCvars[RegisteredCvars]
new g_eCvarValues[CvarValues]
new g_eTimer[Styles]
new Array:g_aStyles
 
new g_szTimer[128], g_iCurrentTimer, g_iMessage
new bool:g_bPlanted
new g_iStyles
 
public plugin_init()
{
    register_plugin("Style C4 Timer", PLUGIN_VERSION, "OciXCrom")
    register_cvar("StyleC4Timer", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    register_logevent("RemoveTimer", 2, "1=Round_Start")
    register_logevent("RemoveTimer", 2, "1=Round_End")
    register_logevent("RemoveTimer", 2, "1&Restart_Round_")
    g_aStyles = ArrayCreate(Styles)
    
    g_eRegisteredCvars[CVAR_STYLE]             =         register_cvar("c4timer_style", "1")
    g_eRegisteredCvars[CVAR_RANDOM]            =         register_cvar("c4timer_random", "0")
    g_eRegisteredCvars[CVAR_YELLOW]         =         register_cvar("c4timer_yellow", "10")
    g_eRegisteredCvars[CVAR_RED]             =         register_cvar("c4timer_red", "5")
    g_eRegisteredCvars[CVAR_XPOS]             =         register_cvar("c4timer_xpos", "-1.0")
    g_eRegisteredCvars[CVAR_YPOS]             =         register_cvar("c4timer_ypos", "0.80")
    g_eRegisteredCvars[CVAR_TYPE]             =         register_cvar("c4timer_type", "0")
    g_eRegisteredCvars[CVAR_ORIGINAL]        =         get_cvar_pointer("mp_c4timer")
    
    g_iMessage = CreateHudSyncObj()
    ReadFile()
}

public plugin_precache()
    precache_generic(CDOWN_SOUND)

public plugin_end()
    ArrayDestroy(g_aStyles)

ReadFile()
{
    new szConfigsName[256], szFilename[256]
    get_configsdir(szConfigsName, charsmax(szConfigsName))
    formatex(szFilename, charsmax(szFilename), "%s/C4Styles.ini", szConfigsName)
    new iFilePointer = fopen(szFilename, "rt")
    
    if(iFilePointer)
    {
        new szData[96], szKey[32], szValue[64]
        new eStyle[Styles]
        
        while(!feof(iFilePointer))
        {
            fgets(iFilePointer, szData, charsmax(szData))
            trim(szData)
            
            switch(szData[0])
            {
                case EOS, ';': continue
                case '{': g_iStyles++
                case '}':
                {
                    eStyle[DoReplace] = !is_blank(eStyle[Add])
                    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:
                {
                    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)
    }
}
 
public bomb_planted()
{
    CheckCvars()
    g_bPlanted = true
    g_iCurrentTimer = g_eCvarValues[CV_ORIGINAL]
    FormTimer()
    DisplayTimer()
}
 
public bomb_defused()
    RemoveTimer()
 
public bomb_explode()
    RemoveTimer()

CheckCvars()
{
    g_eCvarValues[CV_STYLE]         =         clamp(get_pcvar_num(g_eRegisteredCvars[CVAR_STYLE]), 0, g_iStyles)
    g_eCvarValues[CV_RANDOM]         =         bool:get_pcvar_num(g_eRegisteredCvars[CVAR_RANDOM])
    g_eCvarValues[CV_YELLOW]         =         get_pcvar_num(g_eRegisteredCvars[CVAR_YELLOW])
    g_eCvarValues[CV_RED]             =         get_pcvar_num(g_eRegisteredCvars[CVAR_RED])
    g_eCvarValues[CV_XPOS]             =        _:get_pcvar_float(g_eRegisteredCvars[CVAR_XPOS])
    g_eCvarValues[CV_YPOS]             =         _:get_pcvar_float(g_eRegisteredCvars[CVAR_YPOS])
    g_eCvarValues[CV_TYPE]             =         get_pcvar_num(g_eRegisteredCvars[CVAR_TYPE])
    g_eCvarValues[CV_ORIGINAL]         =         get_pcvar_num(g_eRegisteredCvars[CVAR_ORIGINAL])
    
    ArrayGetArray(g_aStyles, g_eCvarValues[CV_STYLE], g_eTimer)
}

FormTimer()
{
    ClearTimer()
    
    if(g_eTimer[DoReplace])
    {
        AddToTimer(g_eTimer[Begin])
        
        for(new i; i < g_iCurrentTimer; i++)
            AddToTimer(g_eTimer[Add])
            
        AddToTimer(g_eTimer[End])
    }
    else
        formatex(g_szTimer, charsmax(g_szTimer), g_eTimer[Begin], g_iCurrentTimer)
}

UpdateTimer()
{
    if(g_eTimer[DoReplace])
        ReplaceInTimer(g_eTimer[ReplaceSymbol], g_eTimer[ReplaceWith])
    else
        formatex(g_szTimer, charsmax(g_szTimer), g_eTimer[Begin], g_iCurrentTimer)
}

ClearTimer()
    g_szTimer[0] = EOS
    
AddToTimer(const szString[])
    add(g_szTimer, charsmax(g_szTimer), szString)
    
ReplaceInTimer(const szString[], const szString2[])
    replace(g_szTimer, charsmax(g_szTimer), szString, szString2)
    
public DisplayTimer()
{   
    if(g_bPlanted)
    {    
        if(g_iCurrentTimer >= 0)
        {
            if(g_iCurrentTimer == 10)
                client_cmd(0, "mp3 play %s", CDOWN_SOUND)
            
            switch(g_eCvarValues[CV_TYPE])
            {
                case HUD:
                {
                    new iColor[3]; GetColors(iColor)
                    set_hudmessage(iColor[0], iColor[1], iColor[2], g_eCvarValues[CV_XPOS], g_eCvarValues[CV_YPOS], 0, 1.0, 1.0, 0.01, 0.01)
                    ShowSyncHudMsg(0, g_iMessage, g_szTimer, g_iCurrentTimer)
                }
                case DHUD:
                {
                    new iColor[3]; GetColors(iColor)
                    set_dhudmessage(iColor[0], iColor[1], iColor[2], g_eCvarValues[CV_XPOS], g_eCvarValues[CV_YPOS], 0, 1.0, 1.0, 0.01, 0.01)
                    show_dhudmessage(0, g_szTimer, g_iCurrentTimer)
                }
                case CENTER: client_print(0, print_center, g_szTimer, g_iCurrentTimer)
            }
            
            g_iCurrentTimer--
            
            UpdateTimer()
            set_task(1.0, "DisplayTimer")
        }
    }
}

public RemoveTimer()
{
    if(g_bPlanted)
    {
        g_bPlanted = false
        g_iCurrentTimer = -1
    }
}

GetColors(iColor[3])
{
    if(g_eCvarValues[CV_RANDOM])
    {
        for(new i; i < BLUE; i++)
            iColor[i] = random(256)
    }
    else
    {
        if(g_iCurrentTimer > g_eCvarValues[CV_YELLOW]) iColor[GREEN] = 100
        else if(g_iCurrentTimer > g_eCvarValues[CV_RED])
        {
            iColor[RED] = 255
            iColor[GREEN] = 255
        }
        else iColor[RED] = 255
    }
}

bool:is_blank(szString[])
    return szString[0] == EOS

Потребителски аватар

WickedAbuser
Потребител
Потребител
Мнения: 2
Регистриран: 23 окт 2018, 10:53

Style C4 Timer

Мнение от WickedAbuser » 01 ное 2018, 16:25

Преди да компилирам - Промених в sma файла - register_cvar("c4timer_style", "0") от 1 на 0 - компилирах. Качих, добавих ini файла. Рестартирах сървъра - тествах. При залагане на C4 (в моя сървър времето е 35 секунди) Плъгина показва отброяване от 35 до 0, докато сървъра започва от 34. Спрях всички плъгини без този. Няма ефект. Да плъгина на практика отброява правилно просто реших да питам в тази тема, къде да търся проблема ?

В някои сървъри големия брояч долу в средата показващ оставащо време до края на рунда при слагане на c4 изчезва и остава таймера от плъгина. Как да забраня при поставяне на c4 този таймер ?

Локално компилиране 1.8.2 Студио 1.4.3
ReGameDLL version: 5.7.0.312-dev
reHLDS

Добавено преди 2 часа 4 минути 8 секунди:
С твоя плъгин бомбата избухва на 35-тата секунда със стил 0, а таймера най-отдолу започващ от 34 секунди свършва една секунда по рано твоя (логично).

Тествах ето този плъгин

Код: Избери всички

/* AMX Mod X 
* by the AMX Mod X Development Team 
*  originally developed by JustinHoMi 
*/ 

#include <amxmodx> 
#include <cstrike> 

#define PLUGIN     "C4 Timer and Sound" 
#define VERSION "1.6" 
#define AUTHOR     "kwpd" 

new g_c4timer 
new cvar_showteam 
new cvar_flash 
new cvar_sprite 
new cvar_msg 
new g_Cvar 
new g_C4 
new g_msg_showtimer 
new g_msg_roundtime 
new g_msg_scenario 

#define MAX_SPRITES    2 
#define task_sound 69696969 

new const g_timersprite[MAX_SPRITES][] = { "bombticking", "bombticking1" } 
new const g_message[] = "Detonation time intiallized....." 

public plugin_precache()  
{ 
    precache_sound("C4Female/ten.wav") 
    precache_sound("C4Female/nine.wav") 
    precache_sound("C4Female/eight.wav") 
    precache_sound("C4Female/seven.wav") 
    precache_sound("C4Female/six.wav") 
    precache_sound("C4Female/five.wav") 
    precache_sound("C4Female/four.wav") 
    precache_sound("C4Female/three.wav") 
    precache_sound("C4Female/two.wav") 
    precache_sound("C4Female/one.wav") 
    precache_sound("C4Female/boom.wav") 
     
    return PLUGIN_HANDLED 
}  

public plugin_init()  
{ 
    register_plugin(PLUGIN, VERSION, AUTHOR) 
     
    cvar_showteam    = register_cvar("amx_showc4timer", "3") 
    cvar_flash    = register_cvar("amx_showc4flash", "0") 
    cvar_sprite    = register_cvar("amx_showc4sprite", "1") 
    cvar_msg    = register_cvar("amx_showc4msg", "1") 
     
    g_msg_showtimer    = get_user_msgid("ShowTimer") 
    g_msg_roundtime    = get_user_msgid("RoundTime") 
    g_msg_scenario    = get_user_msgid("Scenario") 
     
    register_event("HLTV", "event_hltv", "a", "1=0", "2=0") 
    register_logevent("RoundEnd",2,"1=Round_End") 
    register_logevent("RoundStart", 2, "1=Round_Start") 
    register_logevent("logevent_plantedthebomb", 3, "2=Planted_The_Bomb") 
    register_logevent("logevent_function_p", 3, "2=Defused_The_Bomb") 
     
    g_C4    = get_cvar_pointer("mp_c4timer") 
    g_Cvar    = register_cvar("amx_soundc4", "1") 
} 

public event_hltv() 
{ 
    g_c4timer = get_pcvar_num(g_C4) 
} 

public logevent_plantedthebomb() 
{ 
    new showtteam = get_pcvar_num(cvar_showteam) 
     
    static players[32], num, i 
    switch(showtteam) 
    { 
        case 1:  
        { 
            get_players(players, num, "ace", "TERRORIST") 
        } 
        case 2:  
        { 
            get_players(players, num, "ace", "CT") 
        } 
        case 3:  
        { 
            get_players(players, num, "ac") 
        } 
        default: return 
    } 
    for(i = 0; i < num; ++i) set_task(1.0, "update_timer", players[i]) 
} 

public client_death(killer, victim, wpnindex, hitplace, TK) 
{ 
    if (wpnindex == CSW_C4) 
    { 
    client_cmd(0, "spk C4Female/boom.wav")   
    return PLUGIN_CONTINUE  
    } 
    return PLUGIN_HANDLED 
} 

public update_timer(id) 
{ 
    message_begin(MSG_ONE_UNRELIABLE, g_msg_showtimer, _, id) 
    message_end() 
     
    message_begin(MSG_ONE_UNRELIABLE, g_msg_roundtime, _, id) 
    write_short(g_c4timer) 
    message_end() 
     
    message_begin(MSG_ONE_UNRELIABLE, g_msg_scenario, _, id) 
    write_byte(1) 
    write_string(g_timersprite[clamp(get_pcvar_num(cvar_sprite), 0, (MAX_SPRITES - 1))]) 
    write_byte(150) 
    write_short(get_pcvar_num(cvar_flash) ? 20 : 0) 
    message_end() 
     
    if(get_pcvar_num(cvar_msg)) 
    { 
        set_hudmessage(255, 180, 0, 0.44, 0.87, 2, 6.0, 6.0) 
        show_hudmessage(id, g_message) 
    } 
} 

public bomb_planted(planter)  
{ 
    new Name[32] 
    new id = task_sound 
     
    if(get_pcvar_num(g_Cvar)) 
    { 
        get_user_name(planter, Name, 31)   
         
        new time = get_pcvar_num(g_C4) 
         
        float(time) 
        set_task( (time - 10.0) , "Zero", task_sound+id) 
        set_task( (time - 9.0) , "one", task_sound+id) 
        set_task( (time - 8.0) , "two", task_sound+id) 
        set_task( (time - 7.0) , "three", task_sound+id) 
        set_task( (time - 6.0) , "foor", task_sound+id) 
        set_task( (time - 5.0) , "five", task_sound+id) 
        set_task( (time - 4.0) , "six", task_sound+id) 
        set_task( (time - 3.0) , "seven", task_sound+id) 
        set_task( (time - 2.0) , "eigth", task_sound+id) 
        set_task( (time - 1.0) , "nine", task_sound+id) 
    } 
    return PLUGIN_CONTINUE   
} 

public Zero()   
{ 
    client_cmd(0, "spk C4Female/ten.wav" )   
    return PLUGIN_CONTINUE   
} 

public one()   
{ 
    client_cmd(0, "spk C4Female/nine.wav" )   
    return PLUGIN_CONTINUE   
} 

public two()   
{ 
    client_cmd(0, "spk C4Female/eight.wav")   
    return PLUGIN_CONTINUE   
} 

public three()   
{ 
    client_cmd(0, "spk C4Female/seven.wav")   
    return PLUGIN_CONTINUE   
} 

public foor()   
{  
    client_cmd(0, "spk C4Female/six.wav"  )  
    client_cmd(0, "spk C4Female/boom.wav")             
    return PLUGIN_CONTINUE   
} 

public five()   
{ 
    client_cmd(0, "spk C4Female/five.wav" )   
    return PLUGIN_CONTINUE   
} 

public six()   
{ 
    client_cmd(0, "spk C4Female/four.wav" )  
    return PLUGIN_CONTINUE   
} 

public seven()   
{ 
    client_cmd(0, "spk C4Female/three.wav")  
    return PLUGIN_CONTINUE   
} 

public eigth()   
{ 
    client_cmd(0, "spk C4Female/two.wav"  )   
    return PLUGIN_CONTINUE   
} 

public nine()   
{ 
    client_cmd(0, "spk C4Female/one.wav")   
    return PLUGIN_CONTINUE   
} 

public logevent_function_p() 
{ 
    new id = task_sound 
    remove_task(task_sound+id) 
} 

public RoundEnd() 
{ 
    new id = task_sound 
    remove_task(task_sound+id) 
} 

public RoundStart()   
{ 
    new id = task_sound 
    remove_task(task_sound+id) 
} 
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE 
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang6154{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
Тук имаме само долния централен таймер. Отново започва отброяването от 34-тата секунда, но когато стане на 0 бомбата избухва.

Защо този таймер където по принцип е времето за рунда при поставяне на бомбата той започва от 34-тата секунда ?

mp_c4timer 35 в сървър цфг-то - нямам други плъгини определящи кога да избухне, а и цял ден го тествам само с 1 плъгин, твоят и този втория, като не ги включвам едновременно.

Добавено преди 12 минути 10 секунди:
Забелязах нещо. С втория плъгин наистина отново тръгва от 34-тата секунда, но следващата не е 33, а отново 34 - тоест 34 34 33 32 31...0. Тоест 34-тата секунда я показва/повтаря 2 пъти, но с този плъгин. С твоя си вървят 34, 33, 32 , 31...0

Потребителски аватар

SuperCHAOSXXX ™♫
Потребител
Потребител
Мнения: 48
Регистриран: 28 юли 2017, 15:56
Местоположение: Bulgaria
Се отблагодари: 1 път
Години: 22
Контакти:

Style C4 Timer

Мнение от SuperCHAOSXXX ™♫ » 21 фев 2019, 21:11

Да, как може да са оправи този проблем, таймера остава на 2 когато гръмни бомбата и таймера брои бързо понякога по някъква причина. А пък със AMXX таймера си работи нормално.

Отговори

Върни се в “Одобрени плъгини”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 2 госта