Recovered from the archived server. This was never posted on the forum, so there is no thread behind it and no author post to quote — the attribution below comes from the plugin's own register_plugin() call where it has one.
say_tracker
by Unknown · 2005-02-19
recovered from the server
From the first post
Decompiled source reconstructed
say_tracker.amxx was published compiled only. This Pawn was recovered from the
bytecode with Lysis — 218 lines. Strings, cvars and the plugin registration
survive; local variable names do not. It is an approximation, not the author's file.
// Decompiled from say_tracker.amxx by Lysis.n// This is RECONSTRUCTED source, not the author's original: withoutn// debug symbols the variable names are lost and control flow isn// rebuilt from bytecode. Treat it as a readable approximation.nnnew g_var23a8;nnew g_var1ea0;nnew g_var1ea4;npublic client_authorized(_arg0)n{n get_user_authid(_arg0, 1240[_arg0], 31);n get_user_ip(_arg0, 5596[_arg0], 15, 1);n return 0;n}nnpublic plugin_cfg()n{n new var2 = 0;n sub_120(var2, "");n new var3 = 0;n while (var3 < 2)n {n format(208[var3], "AMXX DoD Community", "%s/%s", var2, 208[var3]);n var3++;n }n server_cmd("exec %s/sql.cfg", var2);n server_cmd("exec %s", 208/* ERROR unknown load Constant */ + 208);n new var4 = 208 + 4;n if (file_exists(var4 + var4))n {n new var5 = 0;n new var6 = 0;n var5++;n new var7 = 208 + 4;n while (read_file(var7 + var7, var5, var6, 31, _unused_temp_))n {n new var1;n if (!equal(var6, "//", 2) && strlen(var6) > 0)n {n register_concmd(var6, "track", -1, {0});n }n }n }n set_task(1065353216, "timedSettings", "amxx_configsdir", {0}, "amxx_configsdir", {0}, "amxx_configsdir");n return 0;n}nnpublic plugin_end()n{n if (get_cvar_num("amx_say_tracker_type") == 0)n {n dbi_close(g_var1ea0);n }n return 0;n}nnpublic plugin_init()n{n register_plugin("Say Tracker", "0.1h", "AMXX DoD Community");n register_clcmd("say", "track", -1, {0});n register_clcmd("say_team", "track", -1, {0});n register_cvar("amx_sql_host", "127.0.0.1", "amxx_configsdir", "amxx_configsdir");n register_cvar("amx_sql_user", "root", "amxx_configsdir", "amxx_configsdir");n register_cvar("amx_sql_pass", "root", "amxx_configsdir", "amxx_configsdir");n register_cvar("amx_sql_db", "blackwatch", "amxx_configsdir", "amxx_configsdir");n register_cvar("amx_sql_say_table", "amxx_say_tracker", "amxx_configsdir", "amxx_configsdir");n register_cvar("amx_say_servernum", 9772, "amxx_configsdir", "amxx_configsdir");n register_cvar("amx_say_tracker_type", 9864, "amxx_configsdir", "amxx_configsdir");n register_cvar("amx_say_textdir", "chat_db", "amxx_configsdir", "amxx_configsdir");n return 0;n}nnpublic plugin_modules()n{n if (get_cvar_num("amx_say_tracker_type") == 0)n {n require_module("DBI");n }n return 0;n}nnpublic timedSettings()n{n g_var23a8 = get_cvar_num("amx_say_servernum");n if (get_cvar_num("amx_say_tracker_type") == 0)n {n new var1 = 0;n get_cvar_string("amx_sql_host", 7848, "");n get_cvar_string("amx_sql_user", 8104, 31);n get_cvar_string("amx_sql_pass", 8232, 31);n get_cvar_string("amx_sql_db", 8360, 31);n get_cvar_string("amx_sql_say_table", 8488, 31);n if (!sub_1cd0())n {n return 1;n }n format(var1, 1023, "CREATE TABLE IF NOT EXISTS %s (server TINYINT NOT NULL,nick VARCHAR(32) NOT NULL,steamid VARCHAR(32) NOT NULL,ip VARCHAR(16) NOT NULL,timestamp datetime NOT NULL default '0000-00-00 00:00:00',chat_method TEXT NOT NULL,alive TINYINT NOT NULL,chat LONGTEXT NOT NULL)", 8488);n if (!sub_1df8(var1, "timedSettings"))n {n return 1;n }n dbi_free_result(g_var1ea4);n dbi_close(g_var1ea0);n }n elsen {n if (get_cvar_num("amx_say_tracker_type") == 1)n {n new var2 = 0;n new var3 = 0;n new var4 = 0;n new var5 = 0;n get_time("%m_%d_%Y", var4, 31);n sub_120(var2, "");n get_mapname(var3, "");n get_cvar_string("amx_say_textdir", var5, 31);n format(728, 127, "%s/%s/%s_chat_log.txt", var2, var5, var4);n format(var3, "AMXX DoD Community", "------------- Mapchange to Map %s -------------", var3);n write_file(728, var3, -1);n }n }n return 0;n}nnpublic track(_arg0)n{n new var2 = 0;n new var3 = 0;n new var4 = 0;n new var5 = 0;n read_argv("amxx_configsdir", var2, 31);n read_args(var3, 255);n replace(var3, 255, var2, 10376);n remove_quotes(var3);n trim(var3);n get_user_name(_arg0, var5, 31);n if (get_cvar_num("amx_say_tracker_type") == 0)n {n if (!sub_1cd0())n {n return 0;n }n format(var4, 1023, "INSERT INTO %s (server,nick,steamid,ip,timestamp,chat_method,alive,chat) VALUES ('%d','%s','%s','%s',NOW(),'%s','%d','%s')", 8488, g_var23a8, var5, 1240[_arg0], 5596[_arg0], var2, is_user_alive(_arg0), var3);n if (!sub_1df8(var4, "track"))n {n return 0;n }n dbi_free_result(g_var1ea4);n dbi_close(g_var1ea0);n }n elsen {n if (get_cvar_num("amx_say_tracker_type") == 1)n {n new var6 = 0;n new var7 = 0;n get_time("%m/%d/%Y-%H:%M:%S", var7, 31);n new var1;n if (is_user_alive(_arg0))n {n var1 = 11256;n }n elsen {n var1 = 11300;n }n format(var6, 255, "<%d> [%s] %s<%s><%s> %s %s %s", g_var23a8, var7, var5, 1240[_arg0], 5596[_arg0], var2, var1, var3);n write_file(728, var6, -1);n }n }n return 0;n}nnsub_120(_arg0, _arg1)n{n return get_localinfo("amxx_configsdir", _arg0, _arg1);n}nnsub_1cd0()n{n g_var1ea0 = dbi_connect(7848, 8104, 8232, 8360, 8616, 127);n if (g_var1ea0 == 0)n {n log_amx("%L", 0, "SQL_BAD_CONNECTION", 8616);n return 0;n }n return 1;n}nnsub_1df8(_arg0, _arg1)n{n dbi_free_result(g_var1ea4);n g_var1ea4 = dbi_query(g_var1ea0, _arg0);n if (g_var1ea4 == -1)n {n sub_1fbc(0, _arg0, _arg1);n dbi_free_result(g_var1ea4);n dbi_close(g_var1ea0);n return 0;n }n return 1;n}nnsub_1fbc(_arg0, _arg1, _arg2)n{n dbi_error(g_var1ea0, 8616, 127);n if (_arg0)n {n client_print(_arg0, 2, "%L", -1, "SQL_BAD_QUERY", _arg1, _arg2, 8616);n }n elsen {n server_print("%L", 0, "SQL_BAD_QUERY", _arg1, _arg2, 8616);n log_amx("%L", 0, "SQL_BAD_QUERY", _arg1, _arg2, 8616);n }n return 1;n}nn

