Raised This Month: $32 Target: $400
 8% 

Auto record demo


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
xonfire
Member
Join Date: Sep 2020
Old 01-14-2021 , 21:59   Auto record demo
Reply With Quote #1

I would like a demo autorecord that records each map.
xonfire is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 01-14-2021 , 22:23   Re: Auto record demo
Reply With Quote #2

https://www.amxx-bg.info/viewtopic.php?t=61
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
xonfire
Member
Join Date: Sep 2020
Old 01-14-2021 , 23:01   Re: Auto record demo
Reply With Quote #3

Quote:
Originally Posted by OciXCrom View Post
It would help me to save each map as an example "CRX_de_dust2.dem, CRX_de_nuke.dem" thanks for answer.
xonfire is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 01-15-2021 , 07:26   Re: Auto record demo
Reply With Quote #4

Use <mapname> in the dem_name cvar.

PHP Code:
#include <amxmodx>

#define CC_COLORS_TYPE CC_COLORS_SHORT
#include <cromchat>

#define PLUGIN_VERSION "2.0+map"
#define MAX_MESSAGE_LENGTH 192
#define MAX_DEMO_NAME_LENGTH 64
#define MAX_TIME_LENGTH 32
#define DEMO_MESSAGES 2
#define REPLACER_SYMBOL "_"

#define ARG_NAME "<name>"
#define ARG_NAME_FULL "<name>.dem"
#define ARG_TIME "<time>"

new const g_szSymbols[][] = { " "":"".""*""/""|""\", "?", ">", "<" }

enum _:Cvars
{
    dem_delay,
    dem_msg_delay,
    dem_name,
    dem_message,
    dem_message2,
    dem_time_format
}

enum _:CvarValues
{
    Float:cv_dem_delay,
    Float:cv_dem_msg_delay,
    cv_dem_name[MAX_DEMO_NAME_LENGTH],
    cv_dem_message[MAX_MESSAGE_LENGTH],
    cv_dem_message2[MAX_MESSAGE_LENGTH],
    cv_dem_time_format[MAX_TIME_LENGTH]
}

new g_eCvars[Cvars], g_eCvarValues[CvarValues]

public plugin_init()
{
    register_plugin("
Simple Demo Recorder", PLUGIN_VERSION, "OciXCrom")
    register_cvar("
CRXDemoRecorder", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    
    g_eCvars[dem_delay] = register_cvar("
dem_delay", "15.0")
    g_eCvars[dem_msg_delay] = register_cvar("
dem_msg_delay", "0.1")
    g_eCvars[dem_name] = register_cvar("
dem_name", "CRX_<mapname>")
    g_eCvars[dem_message] = register_cvar("
dem_message", "!g[!tDemo RecordeR!g] !nWe are now recording in your !gcstrike !nfolder: !t<name>")
    g_eCvars[dem_message2] = register_cvar("
dem_message2", "!g[!tDemo RecordeR!g] !nDemo recording has been started at: !t<time>")
    g_eCvars[dem_time_format] = register_cvar("
dem_time_format", "%X")
}

public plugin_cfg()
{
    g_eCvarValues[cv_dem_delay] = _:get_pcvar_float(g_eCvars[dem_delay])
    g_eCvarValues[cv_dem_msg_delay] = _:get_pcvar_float(g_eCvars[dem_msg_delay])
    get_pcvar_string(g_eCvars[dem_name], g_eCvarValues[cv_dem_name], charsmax(g_eCvarValues[cv_dem_name]))
    get_pcvar_string(g_eCvars[dem_message], g_eCvarValues[cv_dem_message], charsmax(g_eCvarValues[cv_dem_message]))
    get_pcvar_string(g_eCvars[dem_message2], g_eCvarValues[cv_dem_message2], charsmax(g_eCvarValues[cv_dem_message2]))
    get_pcvar_string(g_eCvars[dem_time_format], g_eCvarValues[cv_dem_time_format], charsmax(g_eCvarValues[cv_dem_time_format]))
    
    new szMap[32]
    get_mapname(szMap, charsmax(szMap))
    strtolower(szMap)

    replace(g_eCvarValues[cv_dem_name], charsmax(g_eCvarValues[cv_dem_name]), "
<mapname>", szMap)

    for(new i; i < sizeof(g_szSymbols); i++)
        replace_all(g_eCvarValues[cv_dem_name], charsmax(g_eCvarValues[cv_dem_name]), g_szSymbols[i], REPLACER_SYMBOL)

    add(g_eCvarValues[cv_dem_name], charsmax(g_eCvarValues[cv_dem_name]), "
.dem")
}

public client_putinserver(id)
    set_task(g_eCvarValues[cv_dem_delay], "
StartRecording", id)

public StartRecording(id)
{
    if(!is_user_connected(id))
        return
    
    client_cmd(id, "
stoprecord ^"%s^"", g_eCvarValues[cv_dem_name])
    set_task(g_eCvarValues[cv_dem_msg_delay], "
SendMessages", id)
}

public SendMessages(id)
{
    if(!is_user_connected(id))
        return
        
    new szMessage[DEMO_MESSAGES][MAX_MESSAGE_LENGTH]
    copy(szMessage[0], charsmax(szMessage[]), g_eCvarValues[cv_dem_message])
    copy(szMessage[1], charsmax(szMessage[]), g_eCvarValues[cv_dem_message2])
    
    for(new i; i < DEMO_MESSAGES; i++)
    {
        apply_replacements(szMessage[i], charsmax(szMessage[]))
        CC_SendMessage(id, szMessage[i])
    }
}

apply_replacements(szMessage[], const iLen)
{
    replace_all(szMessage, iLen, ARG_NAME, g_eCvarValues[cv_dem_name])
    
    if(contain(szMessage, ARG_TIME) != -1)
    {
        new szTime[MAX_TIME_LENGTH]
        get_time(g_eCvarValues[cv_dem_time_format], szTime, charsmax(szTime))
        replace_all(szMessage, iLen, ARG_TIME, szTime)
    }

__________________

Last edited by OciXCrom; 01-15-2021 at 21:37.
OciXCrom is offline
Send a message via Skype™ to OciXCrom
xonfire
Member
Join Date: Sep 2020
Old 01-15-2021 , 12:49   Re: Auto record demo
Reply With Quote #5

Quote:
Originally Posted by OciXCrom View Post
Use <mapname> in the dem_name cvar.

PHP Code:
#include <amxmodx>

#define CC_COLORS_TYPE CC_COLORS_SHORT
#include <cromchat>

#define PLUGIN_VERSION "2.0+map"
#define MAX_MESSAGE_LENGTH 192
#define MAX_DEMO_NAME_LENGTH 64
#define MAX_TIME_LENGTH 32
#define DEMO_MESSAGES 2
#define REPLACER_SYMBOL "_"

#define ARG_NAME "<name>"
#define ARG_NAME_FULL "<name>.dem"
#define ARG_TIME "<time>"

new const g_szSymbols[][] = { " "":"".""*""/""|""\", "?", ">", "<" }

enum _:Cvars
{
    dem_delay,
    dem_msg_delay,
    dem_name,
    dem_message,
    dem_message2,
    dem_time_format
}

enum _:CvarValues
{
    Float:cv_dem_delay,
    Float:cv_dem_msg_delay,
    cv_dem_name[MAX_DEMO_NAME_LENGTH],
    cv_dem_message[MAX_MESSAGE_LENGTH],
    cv_dem_message2[MAX_MESSAGE_LENGTH],
    cv_dem_time_format[MAX_TIME_LENGTH]
}

new g_eCvars[Cvars], g_eCvarValues[CvarValues]

public plugin_init()
{
    register_plugin("
Simple Demo Recorder", PLUGIN_VERSION, "OciXCrom")
    register_cvar("
CRXDemoRecorder", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
    
    g_eCvars[dem_delay] = register_cvar("
dem_delay", "15.0")
    g_eCvars[dem_msg_delay] = register_cvar("
dem_msg_delay", "0.1")
    g_eCvars[dem_name] = register_cvar("
dem_name", "CRX_<mapname>")
    g_eCvars[dem_message] = register_cvar("
dem_message", "!g[!tDemo RecordeR!g] !nWe are now recording in your !gcstrike !nfolder: !t<name>")
    g_eCvars[dem_message2] = register_cvar("
dem_message2", "!g[!tDemo RecordeR!g] !nDemo recording has been started at: !t<time>")
    g_eCvars[dem_time_format] = register_cvar("
dem_time_format", "%X")


}

public plugin_cfg()
{
    g_eCvarValues[cv_dem_delay] = _:get_pcvar_float(g_eCvars[dem_delay])
    g_eCvarValues[cv_dem_msg_delay] = _:get_pcvar_float(g_eCvars[dem_msg_delay])
    get_pcvar_string(g_eCvars[dem_name], g_eCvarValues[cv_dem_name], charsmax(g_eCvarValues[cv_dem_name]))
    get_pcvar_string(g_eCvars[dem_message], g_eCvarValues[cv_dem_message], charsmax(g_eCvarValues[cv_dem_message]))
    get_pcvar_string(g_eCvars[dem_message2], g_eCvarValues[cv_dem_message2], charsmax(g_eCvarValues[cv_dem_message2]))
    get_pcvar_string(g_eCvars[dem_time_format], g_eCvarValues[cv_dem_time_format], charsmax(g_eCvarValues[cv_dem_time_format]))
    
    for(new i; i < sizeof(g_szSymbols); i++)
        replace_all(g_eCvarValues[cv_dem_name], charsmax(g_eCvarValues[cv_dem_name]), g_szSymbols[i], REPLACER_SYMBOL)

    new szMap[32]
    get_mapname(szMap, charsmax(szMap))
    strtolower(szMap)

    replace(g_eCvarValues[cv_dem_name], charsmax(g_eCvarValues[cv_dem_name]), "
<mapname>", szMap)
    add(g_eCvarValues[cv_dem_name], charsmax(g_eCvarValues[cv_dem_name]), "
.dem")
}

public client_putinserver(id)
    set_task(g_eCvarValues[cv_dem_delay], "
StartRecording", id)

public StartRecording(id)
{
    if(!is_user_connected(id))
        return
    
    client_cmd(id, "
stoprecord ^"%s^"", g_eCvarValues[cv_dem_name])
    set_task(g_eCvarValues[cv_dem_msg_delay], "
SendMessages", id)
}

public SendMessages(id)
{
    if(!is_user_connected(id))
        return
        
    new szMessage[DEMO_MESSAGES][MAX_MESSAGE_LENGTH]
    copy(szMessage[0], charsmax(szMessage[]), g_eCvarValues[cv_dem_message])
    copy(szMessage[1], charsmax(szMessage[]), g_eCvarValues[cv_dem_message2])
    
    for(new i; i < DEMO_MESSAGES; i++)
    {
        apply_replacements(szMessage[i], charsmax(szMessage[]))
        CC_SendMessage(id, szMessage[i])
    }
}

apply_replacements(szMessage[], const iLen)
{
    replace_all(szMessage, iLen, ARG_NAME, g_eCvarValues[cv_dem_name])
    
    if(contain(szMessage, ARG_TIME) != -1)
    {
        new szTime[MAX_TIME_LENGTH]
        get_time(g_eCvarValues[cv_dem_time_format], szTime, charsmax(szTime))
        replace_all(szMessage, iLen, ARG_TIME, szTime)
    }

I am using the code you have given me but it does not recognize the name of the map being played and when changing the map it is overwritten. I understand the space it would take to do this, but they are for pug.
xonfire is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 01-15-2021 , 15:18   Re: Auto record demo
Reply With Quote #6

Doesn't recognize what? What is the demo name you're getting?

Of course it overwrites it. Demo files can be 100+ MB in size. Imagine what would happen if it creates new files each time you enter the server.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
xonfire
Member
Join Date: Sep 2020
Old 01-15-2021 , 16:02   Re: Auto record demo
Reply With Quote #7

Quote:
Originally Posted by OciXCrom View Post
Doesn't recognize what? What is the demo name you're getting?

Of course it overwrites it. Demo files can be 100+ MB in size. Imagine what would happen if it creates new files each time you enter the server.
To write the name of the map that is being played at that time
xonfire is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 01-15-2021 , 16:21   Re: Auto record demo
Reply With Quote #8

I'm asking again - what is the demo name at the moment?
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
xonfire
Member
Join Date: Sep 2020
Old 01-15-2021 , 20:07   Re: Auto record demo
Reply With Quote #9

Quote:
Originally Posted by OciXCrom View Post
I'm asking again - what is the demo name at the moment?
CRX__mapname_.dem
xonfire is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 01-15-2021 , 21:37   Re: Auto record demo
Reply With Quote #10

Was that so hard to say? I fixed my code.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 19:57.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode