AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Solved After ban fix compile error and debug (https://forums.alliedmods.net/showthread.php?t=341807)

ChillerX 02-12-2023 23:33

After ban fix compile error and debug
 
I am unable to compile and getting errors (number of arguments does not match definition), also a server crash when using it.

Code:

[FAKEMETA] Unknown dllfunc entry -512
[AMXX] Run time error 10 (plugin "AfterBan.amxx") (native "dllfunc") - debug not enabled!

Code:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <time>

#include <sqlx>

#define PLUGIN "AfterBan"
#define VERSION "2021.0"
#define AUTHOR "Rev"

#define DATE "4.11.2018"

#if AMXX_VERSION_NUM < 183
        #include <ColorChat>
#else
        #define RED print_team_red
        #define DontChange print_team_default
        #define register_dictionary_colored register_dictionary
#endif

//#define _ctrlchar

const SIZE_T = 63;
const ID_LEN = 25

const TASK_SNAP = 1056

/**
        Тип сообщения о бане (для квара CVAR_BAN_MESSAGE_TYPE)
 */
const BAN_MESSAGE_TYPE_CHAT = 0
const BAN_MESSAGE_TYPE_HUD = 1
const BAN_MESSAGE_TYPE_ALL = 2

enum CVARS
{
        CVAR_ADMIN_ON,

        CVAR_ADMIN_TABLE,
        CVAR_BAN_PREFIX,
        CVAR_SHOW_ADMIN,
        CVAR_SNAPSHOT_TIMES,
       
        CVAR_BANHUD_X,
        CVAR_BANHUD_Y,
        CVAR_BANHUD_COLOR,
       
        CVAR_FREEZE_PLAYER,
        CVAR_STRIP_PLAYER,

        CVAR_BAN_MESSAGE_TYPE
}

new g_Cvars[CVARS];
new Handle:iCore;

new amx_passwd_info[22];
new amx_def_flag[2]

const BAN_STRING_LEN = 64;
const BAN_IP_LEN = 22

enum _:BannedData {

        /* Required Params */
        BD_BAN_NAME[BAN_STRING_LEN],BD_BAN_STEAM[BAN_IP_LEN],BD_BAN_IP[BAN_IP_LEN],BD_BAN_COOKIE[BAN_IP_LEN],BD_BAN_UID[BAN_IP_LEN],BD_BAN_DIVEID[BAN_IP_LEN],BD_BAN_CDKEY[33],
        BD_BAN_LEN,BD_BAN_REASON[BAN_STRING_LEN],BD_BAN_TIME,BD_BAN_UNBAN_TIME,BD_BAN_ADMIN_NAME[BAN_STRING_LEN],BD_BAN_ADMIN_ID[BAN_IP_LEN],BD_BAN_TYPE[BAN_IP_LEN],
        BD_BAN_SERVER[BAN_STRING_LEN],BD_BAN_SERVER_IP[BAN_IP_LEN],BD_BAN_ADMIN_PLAYER_ID,BD_BAN_BANTYPE,BD_BAN_PLAYER_ID
}

forward divebanx_addban(id, data[BannedData], const bantype);
forward divebanx_kick_player(const player,const admin_name[],const reason[]);
forward divebanx_history_bans(const id, const bans_count);

enum _:AdminData
{
        Nick[32],
        Authid[32],
        TLast,
        Passwd[32],
        Flags[32],
        _To[32],
        _From[32]
}

new Array: g_admins;
new g_admin_time[33];

public plugin_precache()
{
        g_Cvars[CVAR_ADMIN_ON] = register_cvar("af_admin_on","1");

        g_Cvars[CVAR_ADMIN_TABLE] = register_cvar("af_admin_table","diveban_admins");
        g_Cvars[CVAR_BAN_PREFIX] = register_cvar("af_ban_prefix","AfterBan");
        g_Cvars[CVAR_SHOW_ADMIN] = register_cvar("af_show_adminname","1");
        g_Cvars[CVAR_SNAPSHOT_TIMES] = register_cvar("af_snapshot_times","2");
       
        g_Cvars[CVAR_BANHUD_X] = register_cvar("af_banhud_x","0.05");
        g_Cvars[CVAR_BANHUD_Y] = register_cvar("af_banhud_y","0.4");
        g_Cvars[CVAR_BANHUD_COLOR] = register_cvar("af_banhud_color","255x0x0");

        g_Cvars[CVAR_FREEZE_PLAYER] = register_cvar("af_freeze_player","1");
        g_Cvars[CVAR_STRIP_PLAYER] = register_cvar("af_strip_player","1");
        g_Cvars[CVAR_BAN_MESSAGE_TYPE] = register_cvar("af_ban_message_type","2");

        new cfg[64];
        get_configsdir(cfg, charsmax(cfg))
       
        add(cfg, charsmax(cfg), "/AfterBan.cfg");
       
        server_cmd("exec %s", cfg)
        server_exec();
       
        g_admins = ArrayCreate(AdminData);
       
}
public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        register_srvcmd("amx_reloadadmins", "reloadAdmins")

        register_dictionary_colored("afterban.txt");
        register_dictionary("time.txt")

        if(!get_pcvar_num(g_Cvars[CVAR_ADMIN_ON]))
                return

        register_cvar("amx_password_field", "_pw")
        register_cvar("amx_default_access", "z")
       
        register_cvar("amx_vote_ratio", "0.02")
        register_cvar("amx_vote_time", "10")
        register_cvar("amx_vote_answers", "1")
        register_cvar("amx_vote_delay", "60")
        register_cvar("amx_last_voting", "0")
        register_cvar("amx_show_activity", "2")
        register_cvar("amx_votekick_ratio", "0.40")
        register_cvar("amx_voteban_ratio", "0.40")
        register_cvar("amx_votemap_ratio", "0.40")

        set_cvar_float("amx_last_voting", 0.0)
        remove_user_flags(0, read_flags("z"))                // Remove 'user' flag from server rights

        new configsDir[64]
        get_configsdir(configsDir, 63)
       
        server_cmd("exec %s/amxx.cfg", configsDir)        // Execute main configuration file
        server_exec();

        SQL_Init();
}
public plugin_natives()
{
        register_native("af_get_admin_time", "_admin_time", 1)
}
public _admin_time(id)
{
        if(!get_pcvar_num(g_Cvars[CVAR_ADMIN_ON]))        return -3;
       
        return g_admin_time[id];
}
public SQL_Init()
{

        static host[SIZE_T+1], user[SIZE_T+1], pass[SIZE_T+1], db[SIZE_T+1];
       
        get_cvar_string("divebans_host", host, SIZE_T)
        get_cvar_string("divebans_user", user, SIZE_T)
        get_cvar_string("divebans_pass", pass, SIZE_T)
        get_cvar_string("divebans_db",          db,  SIZE_T)

        iCore= strlen(host) ? SQL_MakeDbTuple(host,user,pass,db) : SQL_MakeStdTuple();
       
        static err,error[128]
        new Handle:iConnect = SQL_Connect(iCore,err,error,127)
       
        if(iConnect == Empty_Handle)
        {
                PrintMessage("Can't connect to Mysql (Error %s)",error)
                set_fail_state("Can't connect to Mysql (Check Logs)")
        }
       
        SQL_FreeHandle(iConnect)

        PrintMessage(" Plugin running [Version: %s] ", VERSION);
       
        get_cvar_string("amx_password_field", amx_passwd_info, charsmax(amx_passwd_info))
        get_cvar_string("amx_default_access", amx_def_flag, charsmax(amx_def_flag))
       
        static server_ip[26];
        get_user_ip(0, server_ip, charsmax(server_ip))
       
        static szTemp[256], Table[64];
        get_pcvar_string(g_Cvars[CVAR_ADMIN_TABLE], Table, charsmax(Table))
        formatex(szTemp,255,"SELECT * FROM `%s` Where `access` LIKE '%%%s%%'",Table, server_ip)
       
        SQL_ThreadQuery(iCore,"LoadAdminData",szTemp)
}
public LoadAdminData(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
        if(FailState)
                return SQL_Error(Query, Error, Errcode, FailState);
       
        if(SQL_AffectedRows(Query) < 1)
                return SQL_FreeHandle(Query);
       
        new data[AdminData];

        while(SQL_MoreResults(Query))
        {
                SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "steamid"), data[Authid], 31);
                SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "nick"), data[Nick], 31);
                SQL_ReadResult(Query, SQL_FieldNameToNum(Query,"passwd"), data[Passwd], 31);
                SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "timelast"), data[_To], 31);
                SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "timedo"), data[_From], 31);
                SQL_ReadResult(Query, SQL_FieldNameToNum(Query,"flags"), data[Flags], 31);
               
                data[TLast] = !equali(data[_To], "0") ? parse_time(data[_To], "%Y-%m-%d") : 0;
               
                ArrayPushArray(g_admins, data);

                SQL_NextRow(Query);
        }
       
        PrintMessage("Load %d admin(s)", ArraySize(g_admins));
       
        if ( get_playersnum() > 0 )
        {
                static maxplayers; maxplayers = get_maxplayers();
                for(new id = 1; id < maxplayers; id++)
                        if(is_user_connected(id))        client_authorized(id);       
        }
        return SQL_FreeHandle(Query);
}
public reloadAdmins( const server_id, level, sid )
{
        ArrayClear(g_admins);
        PrintMessage("ClearAllAdmins...")

        static server_ip[26];
        get_user_ip(0, server_ip, charsmax(server_ip))
       
        PrintMessage("Start to load admins from %s", server_ip)

        static szTemp[256], Table[64];
        get_pcvar_string(g_Cvars[CVAR_ADMIN_TABLE], Table, charsmax(Table))
        formatex(szTemp,255,"SELECT * FROM `%s` Where `access` LIKE '%%%s%%'",Table, server_ip)
       
        SQL_ThreadQuery(iCore,"LoadAdminData",szTemp)
}
GetAdminID(authid[], nick[])
{
        new data[AdminData];
        new size = ArraySize(g_admins);
       
        new bool:onlySteamID = false;
        new bool:onlyNick= false;
        for(new i; i<size; i++)
        {
                ArrayGetArray(g_admins, i, data);

                onlySteamID = bool:(containi(data[Flags], "*") != -1);
                onlyNick = bool:(containi(data[Flags], "#") != -1);

                if( equali(data[Authid], authid) && onlySteamID ) {
                        //PrintMessage("Auth by SteamID (%s) [Flags %s] [OnlySteamID]", authid, data[Flags])
                        return i;
                }
                       
                if( equali(data[Nick], nick) && onlyNick ) {
                        //PrintMessage("Auth by NickName (%s) [Flags %s] [OnlyNickName]", nick, data[Flags])
                        return i;
                }
                       

                if( (equali(data[Authid], authid) || equali(data[Nick], nick)) && !onlyNick && !onlySteamID )
                {
                        //PrintMessage("Auth by Steam/Nick: Player %s (%s) | DataBase %s (%s) [Flags %s]", nick, authid, data[Nick], data[Authid], data[Flags])
                        return i;
                }
        }
       
        return -1;
}
stock AuthAdmin(id)
{
        if(!get_pcvar_num(g_Cvars[CVAR_ADMIN_ON]))        return 0;

        static authid[ID_LEN+1],name[ID_LEN+1], ip[22];
       
        get_user_authid(id,authid,ID_LEN)
        get_user_name(id, name,ID_LEN);
        get_user_ip(id, ip, charsmax(ip), 1)

        new admin_id = GetAdminID(authid, name)

        if(admin_id == -1)
        {
                g_admin_time[id] = -1
                return 0;
        }
               
        new data[AdminData], status[16], info[32];
       
        ArrayGetArray(g_admins, admin_id, data);
        get_user_info(id, amx_passwd_info,info, charsmax(info))       
       
        new sys = get_systime(0);
               
        if( data[TLast] - sys < 0 && data[TLast] != 0)
        {
                g_admin_time[id] = -1
                return 0;
        }

        if(equali(data[Authid], authid))        status = "SteamID";
        else if(equali(data[Nick], name))        status = "NickName";
       
        if( strlen(data[Passwd]) >= 3 && !equal(data[Passwd],info) )
        {
                PrintMessage("Player %s (%s)(%s) invalid password [Has:%s][Need:%s] [ID:%s]",name,authid,ip, info , data[Passwd], status)
                return server_cmd("kick #%d ^"[Af] Invalid Password^"",get_user_userid(id));
        }

        g_admin_time[id] = !data[TLast] ? 0 : (data[TLast] - sys)/(3600*24);

        new mData[32];
        copy(mData, 31, data[_To]);
       
        PrintMessage("Player %s (%s)(%s) [%s] became an admin [From:%s][To:%s] [ID:%s][%d Days]",name,authid,ip, data[Flags], data[_From], !data[TLast] ? "permament" : mData, status, _admin_time(id));

        remove_user_flags(id,read_flags(amx_def_flag));
        set_user_flags(id,read_flags(data[Flags]));
       
       
        return 0;
}

public client_authorized(id)
{
        g_admin_time[id] = -2;
        AuthAdmin(id);

        return PLUGIN_CONTINUE;
       
}
public client_putinserver(id)
{
        if( g_admin_time[id] == -2) AuthAdmin(id);
        if(!is_user_admin(id)) set_user_flags(id, read_flags(amx_def_flag))
}

public divebanx_addban(id, data[BannedData], const bantype)
{
        static player_name[32], ban_time[64], admin_name[32], reason[64];

        new player = data[BD_BAN_PLAYER_ID];
       
        copy(admin_name, charsmax(admin_name), data[BD_BAN_ADMIN_NAME])
        copy(player_name, charsmax(player_name), data[BD_BAN_NAME])
        copy(reason, charsmax(reason), data[BD_BAN_REASON])

        get_time_length(0, data[BD_BAN_LEN], timeunit_minutes, ban_time, 63)
 
        new prefix[32];
        get_pcvar_string(g_Cvars[CVAR_BAN_PREFIX], prefix, charsmax(prefix))

        new ban_message_type = get_pcvar_num(g_Cvars[CVAR_BAN_MESSAGE_TYPE]);

        if (ban_message_type == BAN_MESSAGE_TYPE_CHAT || ban_message_type == BAN_MESSAGE_TYPE_ALL) {
                if(get_pcvar_num(g_Cvars[CVAR_SHOW_ADMIN]))        {
                        client_print_color(0, RED, "^1[^3%s^1] %L",prefix, LANG_PLAYER, "AFTERBAN_BAN_AMESSAGE", admin_name, player_name, ban_time, reason);
                } else {
                        client_print_color(0, RED, "^1[^3%s^1] %L",prefix, LANG_PLAYER, "AFTERBAN_BAN_MESSAGE", player_name, ban_time, reason);
                }
        }

        if (ban_message_type == BAN_MESSAGE_TYPE_HUD || ban_message_type == BAN_MESSAGE_TYPE_ALL) {
                static color[16];
                get_pcvar_string(g_Cvars[CVAR_BANHUD_COLOR], color, charsmax(color))
               
                replace_all(color, charsmax(color), "x", " ");

                new rgb[3][4];
                parse(color, rgb[0], 3, rgb[1], 3, rgb[2], 3)

                //HudMessage
                set_hudmessage(str_to_num(rgb[0]),str_to_num(rgb[1]),str_to_num(rgb[2]), get_pcvar_float(g_Cvars[CVAR_BANHUD_X]), get_pcvar_float(g_Cvars[CVAR_BANHUD_Y]),0,1.0,12.0,1.0,1.0,2);
       
                if(get_pcvar_num(g_Cvars[CVAR_SHOW_ADMIN]))        show_hudmessage(0, "%L", LANG_PLAYER, "AFTERBAN_HUD_ATEXT", admin_name,player_name,ban_time,reason)
                else                                                show_hudmessage(0, "%L", LANG_PLAYER, "AFTERBAN_HUD_TEXT", player_name,ban_time,reason)
        }

        //SnapShoot
        set_task(0.5, "SnapshotPlayer", player+TASK_SNAP, _,_, "a", get_pcvar_num(g_Cvars[CVAR_SNAPSHOT_TIMES]))

        if(is_user_alive(player))
        {
                if(get_pcvar_num(g_Cvars[CVAR_FREEZE_PLAYER]))        freeze_player(player)
                if(get_pcvar_num(g_Cvars[CVAR_STRIP_PLAYER]))        fm_strip_user_weapons(player)
        }
}

public divebanx_kick_player(const player,const admin_name[],const reason[])
{
        static name[32],prefix[32];
        get_user_name(player, name, charsmax(name));
        get_pcvar_string(g_Cvars[CVAR_BAN_PREFIX], prefix, charsmax(prefix))
       
        client_print_color(0, RED, "^1[^3%s^1] %L",prefix, LANG_PLAYER, "AFTERBAN_KICKBAN_TEXT", name,reason);
}
public divebanx_history_bans(const id, const bans_count)
{
        new p[32], c, player;
        get_players(p,c, "ch")
       
        static name[32],prefix[32];
        get_user_name(id, name, charsmax(name));
        get_pcvar_string(g_Cvars[CVAR_BAN_PREFIX], prefix, charsmax(prefix))

        for(new i; i<c; i++)
        {
                player = p[i];
               
                if(!is_user_admin(player))
                        continue;
                       
                client_print_color(player, RED, "^1[^3%s^1] %L", prefix, player, "AFTERBAN_BANCOUNT_TEXT", name, bans_count);
        }
}
public divebans_disconnect_ban(const admin, const name[], const ip[], const minutes, const reason[])
{
        static aname[32], prefix[32], ban_time[64];
        get_user_name(admin, aname, charsmax(aname))
       
        get_time_length(0, minutes, timeunit_minutes, ban_time, 63)
        get_pcvar_string(g_Cvars[CVAR_BAN_PREFIX], prefix, charsmax(prefix))
       
        if(get_pcvar_num(g_Cvars[CVAR_SHOW_ADMIN]))        client_print_color(0, RED, "^1[^3%s^1] %L",prefix, LANG_PLAYER, "AFTERBAN_DISCBAN_AMESSAGE", aname, name, ban_time, reason);
        else                                                client_print_color(0, RED, "^1[^3%s^1] %L",prefix, LANG_PLAYER, "AFTERBAN_DISCBAN_MESSAGE", name, ban_time, reason);
}

public SnapshotPlayer( taskid )
{
        new id = taskid - TASK_SNAP;
       
        if(!is_user_connected(id))
                return remove_task( id+TASK_SNAP);
               
        client_cmd(id,";snapshot")
       
        return 0;
}
stock freeze_player(id)
{
        set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
        engfunc(EngFunc_SetClientMaxspeed, id, 0.00001)
       
        return set_pev(id , pev_flags, pev(id, pev_flags) | FL_FROZEN)
}
stock PrintMessage(const szMessage[], any:...)
{
        static szMsg[256];
        vformat(szMsg, charsmax(szMsg), szMessage, 2);
       
        log_amx("%s", szMsg)
        server_print("%s", szMsg)
        return 1;
}
stock SQL_Error(Handle:query, const error[], errornum, failstate)
{
        static qstring[512]
        SQL_GetQueryString(query, qstring, 511)
       
        if(failstate == TQUERY_CONNECT_FAILED)
        {
                PrintMessage("[SQLX] Error connected to database")
        }
        else if (failstate == TQUERY_QUERY_FAILED)
        {
                PrintMessage("[SQLX] Failed")
        }
        PrintMessage("[SQLX] Error '%s' with '%s'", error, errornum)
        PrintMessage("[SQLX] %s", qstring)

        return SQL_FreeHandle(query)
}

#define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))

stock fm_strip_user_weapons(index) {
        new ent = fm_create_entity("player_weaponstrip");
        if (!pev_valid(ent))
                return 0;

        dllfunc(DLLFunc_Spawn, ent);
        dllfunc(DLLFunc_Use, ent, index);
        engfunc(EngFunc_RemoveEntity, ent);

        return 1;
}
stock mysql_escape_string(const source[],  dest[],  len)
{
        copy(dest, len, source);
 
        replace_all(dest, len, "^\", "^\^\");
       
        replace_all(dest, len, "'", "^\'");
        replace_all(dest, len, "`", "^\`");
        replace_all(dest, len, "^"", "^\^"");
}
stock bool: is_user_steam(client)
{
    new dp_pointer;
       
    if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
    {
        server_cmd("dp_clientinfo %d", client);
        server_exec();
        return bool:((get_pcvar_num(dp_pointer) == 2) ? 1 : 0);
    }
       
    return bool:0;
}


fysiks 02-14-2023 03:08

Re: After ban fix compile error and debug
 
If you can't compile it then how are you running it in your server?

I'm not sure if I've ever called a AMX Mod X forward from somewhere else in my code. I don't think I would expect it to care (granted, I'm not all that knowledgable about the inner workings of the compiler). I wonder if it's confused by that.

I renamed client_authorized(id) to client_authorized2(id) and then re-created client_authorized(id) like this:

PHP Code:

public client_authorized(id)
{
    
client_authorized2(id)



ChillerX 02-14-2023 03:38

Re: After ban fix compile error and debug
 
The server crashed recently, and this error appeared for the first time. As a result, I decided to locate the sma file and investigate.

The file was already pre-compiled on the server, either modified or used as-is. It's likely the latter as attempts to decompile it have also been unsuccessful.

fysiks 02-15-2023 00:42

Re: After ban fix compile error and debug
 
Interesting. Did my solution above allow you to compile it?

ChillerX 02-15-2023 08:49

Re: After ban fix compile error and debug
 
sma(233) : error 088: number of arguments does not match definition

DruGzOG 02-15-2023 11:37

Re: After ban fix compile error and debug
 
Well for starters this plugin is extremely messy. Secondly, we do not support non-steam here.

fysiks 02-15-2023 18:41

Re: After ban fix compile error and debug
 
Quote:

Originally Posted by ChillerX (Post 2799491)
The server crashed recently, and this error appeared for the first time. As a result, I decided to locate the sma file and investigate.

The file was already pre-compiled on the server, either modified or used as-is. It's likely the latter as attempts to decompile it have also been unsuccessful.

You probably forgot to rename all instances of client_authorized() (particularly on the line where the error occurs). I almost made that mistake too. So, client_authorized() should only appear once in the entire plugin.

ChillerX 02-20-2023 20:54

Re: After ban fix compile error and debug
 
I didn't realize there was one more instance. Now that it compiles, I'll keep it as an alternative. I have since switched to using only nVault plugins. It seems that cheaters have now moved on to other games. Therefore, maintaining an internal or external MySQL database and external ban list management is no longer a viable option.

Quote:

Originally Posted by DruGzOG (Post 2799597)
Well for starters this plugin is extremely messy.

Let me guess: "Something isn't right" :D

I'm genuinely curious how you managed to accumulate 2000+ posts without providing a single solution in 16 years?

I have identified all the servers where you participate or play, and they are all empty and non-steam :D

My vote goes to you as the OG moderator of the trash section.

DruGzOG 02-21-2023 07:10

Re: After ban fix compile error and debug
 
Quote:

Originally Posted by ChillerX (Post 2799941)
I didn't realize there was one more instance. Now that it compiles, I'll keep it as an alternative. I have since switched to using only nVault plugins. It seems that cheaters have now moved on to other games. Therefore, maintaining an internal or external MySQL database and external ban list management is no longer a viable option.



Let me guess: "Something isn't right" :D

I'm genuinely curious how you managed to accumulate 2000+ posts without providing a single solution in 16 years?

I have identified all the servers where you participate or play, and they are all empty and non-steam :D

My vote goes to you as the OG moderator of the trash section.

PHP Code:

stock boolis_user_steam(client)
{
    new 
dp_pointer;
    
    if(
dp_pointer || (dp_pointer get_cvar_pointer("dp_r_id_provider")))
    {
        
server_cmd("dp_clientinfo %d"client);
        
server_exec();
        return 
bool:((get_pcvar_num(dp_pointer) == 2) ? 0);
    }
    
    return 
bool:0;


This is strictly for dproto. It's that obvious. Secondly, I know enough to say this plugin is a mess.
I'm glad you can see that I play games that are not steam related, really curious how you came to such a conclusion
Thanks for the recommendation. You'd fit well in that section

ChillerX 02-21-2023 08:32

Re: After ban fix compile error and debug
 
The fact that an old plugin has dproto code in it doesn't necessarily means that someone is using dproto.
You may not be aware, as is often the case, that this is a part of an older yet very reliable private plugin that has been written this way to resist de-compilation.
Relying on non-steam platforms yourself and lacking coding skills does not justify your mindless accusations, nor does it mean that your juvenile behavior will go unnoticed.
You seem to be having difficulty with the default settings so...i'm pretty sure there have been others who don't want you involved in their topic.
Now that we have it all sorted out you can go pound sand, take a hike or jump in a lake.


All times are GMT -4. The time now is 10:14.

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