Veteran Member
Join Date: May 2008
Location: Brazil
|
05-25-2009
, 02:31
Get Cvars Changes
|
#1
|
Only have a little problem with Some Float Returns, Example you put 220.1 the plugin return 220.09999999
PLUGIN:
PHP Code:
// #define USE_FAKEMETA
#include <amxmodx>
#if defined USE_FAKEMETA #include <fakemeta> #else #include <engine> #endif
new Array:g_CvarHolds new Array:g_CvarType new Array:g_CvarFwd new Array:g_CvarData
public plugin_precache() { register_plugin("Cvars Change", "1.0", "ReymonARG") g_CvarHolds = ArrayCreate(1, 1) g_CvarType = ArrayCreate(1, 1) g_CvarData = ArrayCreate(128, 1) g_CvarFwd = ArrayCreate(1, 1) #if defined USE_FAKEMETA register_forward(FM_StartFrame, "server_frame") #endif }
public plugin_natives() { register_library("ReymonARG_Cvars") register_native("register_cvar_change", "__cvar_change_add") register_native("unregister_cvar_change", "__cvar_change_delete") }
public __cvar_change_add( iPlugin, iParams ) { if( iParams != 3 ) return log_error(AMX_ERR_NATIVE, "Invalid Params Nums %d", iParams) static szCvar[64]; get_string(2, szCvar, 63) if( !cvar_exists(szCvar) ) return log_error(AMX_ERR_NATIVE, "Cvar: %s No Exists", szCvar) static fwd_id, iType; iType = get_param(1) static szCallBack[32]; get_string(3, szCallBack, 31) switch( iType ) { case 1: fwd_id = CreateOneForward(iPlugin, szCallBack, FP_CELL, FP_CELL, FP_CELL) case 2: fwd_id = CreateOneForward(iPlugin, szCallBack, FP_CELL, FP_FLOAT, FP_FLOAT) case 3: fwd_id = CreateOneForward(iPlugin, szCallBack, FP_CELL, FP_STRING, FP_STRING) default: return log_error(AMX_ERR_NATIVE, "%d Dont is a Correct Type Cvar", iType) } if( fwd_id < 0 ) return log_error(AMX_ERR_NATIVE, "Correct the CallBack Funcion") static pCvar; pCvar = get_cvar_pointer(szCvar) ArrayPushCell(g_CvarHolds, pCvar) ArrayPushCell(g_CvarType, iType) switch( iType ) { case 1: { static iResult; iResult = get_pcvar_num(pCvar) ArrayPushCell(g_CvarData, iResult) } case 2: { static Float:fResult; fResult = get_pcvar_float(pCvar) ArrayPushCell(g_CvarData, fResult) } case 3: { static szResult[128]; get_pcvar_string(pCvar, szResult, 127) ArrayPushString(g_CvarData, szResult) } } ArrayPushCell(g_CvarFwd, fwd_id) return fwd_id }
public __cvar_change_delete( iPlugin, iParams ) { if( iParams != 1 ) return log_error(AMX_ERR_NATIVE, "Invalid Params Nums %d", iParams) static i, fwd_id, len; len = ArraySize(g_CvarFwd) fwd_id = get_param(1) for( i = 0; i < len; i++) { if( ArrayGetCell(g_CvarFwd, i) == fwd_id ) { ArrayDeleteItem(g_CvarHolds, i) ArrayDeleteItem(g_CvarType, i) ArrayDeleteItem(g_CvarData, i) ArrayDeleteItem(g_CvarFwd, i) DestroyForward(fwd_id) return 1 } } return 0 }
public server_frame() { static i, type, idCvar, iReturn, len; len = ArraySize(g_CvarFwd) static iResult[2], Float:fResult[2], szResult[2][128] for( i = 0; i < len; i++) { type = ArrayGetCell(g_CvarType, i) idCvar = ArrayGetCell(g_CvarHolds, i) switch( type ) { case 1: { iResult[0] = ArrayGetCell(g_CvarData, i) iResult[1] = get_pcvar_num(idCvar) if( iResult[0] != iResult[1] ) { static id; id = ArrayGetCell(g_CvarFwd, i) ExecuteForward(id, iReturn, id, iResult[0], iResult[1]) if( iReturn ) { set_pcvar_num(idCvar, iResult[0]) iReturn = 0 } else { ArraySetCell(g_CvarData, i, iResult[1]) } } } case 2: { fResult[0] = ArrayGetCell(g_CvarData, i) fResult[1] = get_pcvar_float(idCvar) if( fResult[0] != fResult[1] ) { static id; id = ArrayGetCell(g_CvarFwd, i) ExecuteForward(id, iReturn, id, fResult[0], fResult[1]) if( iReturn ) { set_pcvar_float(idCvar, fResult[0]) iReturn = 0 } else { ArraySetCell(g_CvarData, i, fResult[1]) } } } case 3: { ArrayGetString(g_CvarData, i, szResult[0], 127) get_pcvar_string(idCvar, szResult[1], 127) if( !equal(szResult[0], szResult[1]) ) { static id; id = ArrayGetCell(g_CvarFwd, i) ExecuteForward(id, iReturn, id, szResult[0], szResult[1]) if( iReturn ) { set_pcvar_string(idCvar, szResult[0]) iReturn = 0 } else { ArraySetString(g_CvarData, i, szResult[1]) } } } } } }
INC:
PHP Code:
#if defined _cvarchange_included #endinput #endif #define _cvarchange_included
#if AMXX_VERSION_NUM >= 175 #pragma reqlib ReymonARG_Cvars #if !defined AMXMODX_NOAUTOLOAD #pragma loadlib ReymonARG_Cvars #endif #else #pragma library ReymonARG_Cvars #endif
enum Type { cvarINT = 1, cvarFL = 2, cvarSZ = 3 }
native register_cvar_change(Type:type, const Cvar[], const CallBack[]) native unregister_cvar_change(fwd_id)
EXAMPLE:
PHP Code:
#include <amxmodx> #include <cvarchange>
#define PLUGIN "Cvar xD" #define VERSION "1.0" #define AUTHOR "ReymonARG"
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_cvar_change(cvarINT, "mp_friendlyfire", "ffback") register_cvar_change(cvarFL, "kz_min_lj", "ljmin") register_cvar_change(cvarSZ, "amx_nextmap", "nextmap") }
public ffback( id, pre, post) { server_print("%d %d %d", id, pre, post) return 1 }
public ljmin( id, Float:pre, Float:post) { server_print("%d %f %f", id, pre, post) }
public nextmap(id, const pre[], const post[]) { server_print("%d %s %s", id, pre, post) }
Thanks, Correct me if I do something wrong
__________________
Last edited by AntiBots; 05-25-2009 at 02:48.
|
|