[E] Informații depsre „Server-Crash”

person L E V I N
schedule Sep 22, 2017
forum 1
visibility 27
Sep 22, 2017 at 6:58 PM
Original Post
#1
Member

Mai jos vă voi lăsa un plugin, care crează un fișier al său, prin care vă arată detalii despre „crash”-uri.

 

Spoiler

#include <amxmodx>
 
#define PLUGIN "Crash Counter"
#define VERSION "1.0"
#define AUTHOR "stupok"
 
#define DIR_CRASHLOG    "addons\amxmodx\logs\CrashLog"
#define FILE_CRASHMAP   "addons\amxmodx\logs\CrashLog\crash_map.txt"
#define FILE_LOG    "CrashLog.log" // will be found in addons\amxmodx\logs
 
new cvar_Crashed
 
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    cvar_Crashed = register_cvar("server_crashed", "1", FCVAR_SPONLY) // do not let players edit this cvar
    
    if(!dir_exists(DIR_CRASHLOG)) mkdir(DIR_CRASHLOG) // make addons\amxmodx\logs\CrashLog
    
    if(!file_exists(FILE_CRASHMAP)) write_file(FILE_CRASHMAP, "-- Do not edit --", -1) // make crash_map.txt
    
    new szMapName[32]
    new iLineLen
    read_file(FILE_CRASHMAP, 2, szMapName, charsmax(szMapName), iLineLen) // read previous map from file
    
    if(get_pcvar_num(cvar_Crashed)) // check if server just started, 1 = start, 0 = restart/mapchange
    {
        if(szMapName[0]) // do we have a map from crash_map.txt?
        {
            log_to_file(FILE_LOG, "The server exited or crashed on '%s' before this recorded time.", szMapName)
        }
        set_pcvar_num(cvar_Crashed, 0) // this will be set to 1 again when the server has a "fresh" start (not restart)
    }
    
    get_mapname(szMapName, charsmax(szMapName)) // get the name of the current map
    write_file(FILE_CRASHMAP, szMapName, 2) // write it to crash_map.txt
}
Jan 25, 2018 at 5:58 PM
#2
Member

Ceva mai complex

 

Spoiler

#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Crash Logs"
#define VERSION "1.1"
#define AUTHOR "Ser_UFL"
 
#define CRASHED_MAPS            "addons/amxmodx/logs/Crashes/Crash.log"
#define CRASHED_MAPS_DIR        "addons/amxmodx/logs/Crashes"
 
new g_ConsoleFile[16]
new bool:g_LoadingMap

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
 
        register_forward(FM_ServerDeactivate, "Deactivate_Server")

        is_linux_server() ? formatex(g_ConsoleFile, charsmax(g_ConsoleFile), "qconsole.log") : formatex(g_ConsoleFile, charsmax(g_ConsoleFile), "../qconsole.log")
 
        new Time[32], this_map[32], this_map_log[64], Logs_all[64], Crash_file[64]

        get_time("%d.%m.%Y / %X", Time, charsmax(Time))
        get_mapname(this_map, charsmax(this_map))

        formatex(Logs_all, charsmax(Logs_all), "Start: %s | %s", Time, this_map)
        formatex(this_map_log, charsmax(this_map_log), "%s/%s.txt", CRASHED_MAPS_DIR, this_map)
 
        new CrashDir = open_dir(CRASHED_MAPS_DIR, Crash_file, charsmax(Crash_file))
 
        if (!CrashDir)
                return
        do
        {
                if (containi(Crash_file, ".txt") != -1)
                {
                        new i_LineLen, Crashed_map_file[64], s_Line[64], Logs_all_crashes[96]
 
                        formatex(Crashed_map_file, charsmax(Crashed_map_file), "%s/%s", CRASHED_MAPS_DIR, Crash_file)
 
                        read_file(Crashed_map_file, 0, s_Line, charsmax(s_Line), i_LineLen)
 
                        formatex(Logs_all_crashes, charsmax(Logs_all_crashes), "%s | Deactivate: %s", s_Line, Time)
 
                        write_file(CRASHED_MAPS, Logs_all_crashes)
                        delete_file(Crash_file)
                }
        }
        while (next_file(CrashDir, Crash_file, charsmax(Crash_file)))
 
        close_dir(CrashDir)
 
        write_file(this_map_log, Logs_all)
 
        g_LoadingMap = true
 
        set_task(1.0, "Fatal_Error")
}
 
public Deactivate_Server()
{
        new map_deactivate[64]
 
        get_mapname(map_deactivate, charsmax(map_deactivate))
 
        format(map_deactivate, charsmax(map_deactivate), "%s/%s.txt", CRASHED_MAPS_DIR, map_deactivate)
       
        delete_file(map_deactivate)
 
        server_cmd("log on")
        //server_cmd("condebug")
        server_exec()
}
 
public Fatal_Error()
{
        server_cmd("condebug")
        server_exec()
 
        new i_LineLen, i_LineCount, s_Line[192]
 
        while (read_file(g_ConsoleFile, i_LineCount++, s_Line, charsmax(s_Line), i_LineLen))
        {
                if (containi(s_Line, "FATAL ERROR") != -1)
                {
                        g_LoadingMap = false
 
                        format(s_Line, charsmax(s_Line), "Произошла следующая ошибка: %s", s_Line)
 
                        write_file(CRASHED_MAPS, s_Line)
                }
        }
 
        if (!g_LoadingMap)
                set_task(0.1, "Loading_map")
        else
                delete_file(g_ConsoleFile)
}

 
public Loading_map()
{
        new i_LineLen, i_LineCount, s_Line[192]
 
        while (read_file(g_ConsoleFile, i_LineCount++, s_Line, charsmax(s_Line), i_LineLen))
        {
                if (containi(s_Line, "Loading map") != -1)
                {
                        format(s_Line, charsmax(s_Line), "при загрузке карты: %s", s_Line)
 
                        write_file(CRASHED_MAPS, s_Line)
                }
        }
        
        delete_file(g_ConsoleFile)
}  

Join the Discussion

You need to be logged in to post a reply.

loginLogin to Reply