Compare commits
55 Commits
amxmodx-1.
...
amxmodx-1.
Author | SHA1 | Date | |
---|---|---|---|
45bccd7a7f | |||
e8a30e7187 | |||
8a93673276 | |||
ece4db4f43 | |||
8b8cc3dd6b | |||
b33e76d9c4 | |||
6fb6d7d399 | |||
5649a17502 | |||
5cfc2df359 | |||
1ac390b54c | |||
102c2b219f | |||
4e1d420495 | |||
e93e75fa39 | |||
90c213bc6d | |||
6c3e7e7ee0 | |||
8a2528108d | |||
a65d65bee4 | |||
483403aa3a | |||
2a1dbf5247 | |||
7aa687eb69 | |||
699cb2a6d6 | |||
7b82bc7b76 | |||
ed43b8a5ac | |||
d2ebca38a1 | |||
d542015214 | |||
d84c3a3798 | |||
405d9ff48e | |||
a63c728471 | |||
a60e9d205b | |||
553a950b98 | |||
955e827b19 | |||
00380cfe4c | |||
12ecf026db | |||
3fa6cd3227 | |||
fe1ebfe7bb | |||
f3057efd7d | |||
39d5ea94fb | |||
90f11b52bc | |||
9740f6469d | |||
461e7de151 | |||
c2695a8cd8 | |||
5ded9eef2a | |||
44617778c7 | |||
647d226764 | |||
f086273d2b | |||
afde57b27e | |||
c4453a9593 | |||
020b3a5963 | |||
3720810b61 | |||
98e20e0fc7 | |||
e72aff5c14 | |||
63bc8885c9 | |||
ff8fd747c5 | |||
98278b7bb5 | |||
09df281556 |
@ -33,7 +33,7 @@
|
|||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "binlog.h"
|
#include "binlog.h"
|
||||||
|
|
||||||
CForward::CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam *paramTypes)
|
CForward::CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam *paramTypes, int fwd_type)
|
||||||
{
|
{
|
||||||
m_FuncName = name;
|
m_FuncName = name;
|
||||||
m_ExecType = et;
|
m_ExecType = et;
|
||||||
@ -47,6 +47,13 @@ CForward::CForward(const char *name, ForwardExecType et, int numParams, const Fo
|
|||||||
|
|
||||||
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
||||||
{
|
{
|
||||||
|
if ((fwd_type != FORWARD_ALL) &&
|
||||||
|
((fwd_type == FORWARD_ONLY_NEW && ((*iter).getAMX()->flags & AMX_FLAG_OLDFILE))
|
||||||
|
|| (fwd_type == FORWARD_ONLY_OLD && !((*iter).getAMX()->flags & AMX_FLAG_OLDFILE))
|
||||||
|
))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if ((*iter).isValid() && amx_FindPublic((*iter).getAMX(), name, &func) == AMX_ERR_NONE)
|
if ((*iter).isValid() && amx_FindPublic((*iter).getAMX(), name, &func) == AMX_ERR_NONE)
|
||||||
{
|
{
|
||||||
AMXForward tmp;
|
AMXForward tmp;
|
||||||
@ -352,13 +359,15 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
|
|||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CForwardMngr::registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam * paramTypes)
|
int CForwardMngr::registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam * paramTypes, int fwd_type)
|
||||||
{
|
{
|
||||||
int retVal = m_Forwards.size() << 1;
|
int retVal = m_Forwards.size() << 1;
|
||||||
CForward *tmp = new CForward(funcName, et, numParams, paramTypes);
|
CForward *tmp = new CForward(funcName, et, numParams, paramTypes, fwd_type);
|
||||||
|
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
|
{
|
||||||
return -1; // should be invalid
|
return -1; // should be invalid
|
||||||
|
}
|
||||||
|
|
||||||
m_Forwards.push_back(tmp);
|
m_Forwards.push_back(tmp);
|
||||||
|
|
||||||
@ -519,14 +528,16 @@ void CForwardMngr::unregisterSPForward(int id)
|
|||||||
m_FreeSPForwards.push(id);
|
m_FreeSPForwards.push(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num)
|
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num, int fwd_type)
|
||||||
{
|
{
|
||||||
ForwardParam params[FORWARD_MAX_PARAMS];
|
ForwardParam params[FORWARD_MAX_PARAMS];
|
||||||
|
|
||||||
for (size_t i=0; i<num; i++)
|
for (size_t i=0; i<num; i++)
|
||||||
|
{
|
||||||
params[i] = static_cast<ForwardParam>(list[i]);
|
params[i] = static_cast<ForwardParam>(list[i]);
|
||||||
|
}
|
||||||
|
|
||||||
return g_forwards.registerForward(funcName, et, num, params);
|
return g_forwards.registerForward(funcName, et, num, params, fwd_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
int registerForward(const char *funcName, ForwardExecType et, ...)
|
int registerForward(const char *funcName, ForwardExecType et, ...)
|
||||||
|
@ -51,6 +51,10 @@
|
|||||||
|
|
||||||
const int FORWARD_MAX_PARAMS = 32;
|
const int FORWARD_MAX_PARAMS = 32;
|
||||||
|
|
||||||
|
#define FORWARD_ONLY_OLD 1
|
||||||
|
#define FORWARD_ONLY_NEW 2
|
||||||
|
#define FORWARD_ALL 3
|
||||||
|
|
||||||
enum ForwardExecType
|
enum ForwardExecType
|
||||||
{
|
{
|
||||||
ET_IGNORE = 0, // Ignore return vaue
|
ET_IGNORE = 0, // Ignore return vaue
|
||||||
@ -107,7 +111,7 @@ class CForward
|
|||||||
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
|
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam * paramTypes);
|
CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam * paramTypes, int fwd_type=FORWARD_ALL);
|
||||||
CForward() {} // leaves everything unitialized'
|
CForward() {} // leaves everything unitialized'
|
||||||
|
|
||||||
cell execute(cell *params, ForwardPreparedArray *preparedArrays);
|
cell execute(cell *params, ForwardPreparedArray *preparedArrays);
|
||||||
@ -203,7 +207,7 @@ public:
|
|||||||
|
|
||||||
// Interface
|
// Interface
|
||||||
// Register normal forward
|
// Register normal forward
|
||||||
int registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam *paramTypes);
|
int registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam *paramTypes, int fwd_type=FORWARD_ALL);
|
||||||
// Register single plugin forward
|
// Register single plugin forward
|
||||||
int registerSPForward(const char *funcName, AMX *amx, int numParams, const ForwardParam * paramTypes);
|
int registerSPForward(const char *funcName, AMX *amx, int numParams, const ForwardParam * paramTypes);
|
||||||
int registerSPForward(int func, AMX *amx, int numParams, const ForwardParam * paramTypes);
|
int registerSPForward(int func, AMX *amx, int numParams, const ForwardParam * paramTypes);
|
||||||
@ -227,7 +231,7 @@ public:
|
|||||||
|
|
||||||
// (un)register forward
|
// (un)register forward
|
||||||
int registerForward(const char *funcName, ForwardExecType et, ...);
|
int registerForward(const char *funcName, ForwardExecType et, ...);
|
||||||
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num);
|
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num, int fwd_type=FORWARD_ALL);
|
||||||
int registerSPForwardByName(AMX *amx, const char *funcName, ...);
|
int registerSPForwardByName(AMX *amx, const char *funcName, ...);
|
||||||
int registerSPForwardByNameC(AMX *amx, const char *funcName, cell *list, size_t num);
|
int registerSPForwardByNameC(AMX *amx, const char *funcName, cell *list, size_t num);
|
||||||
int registerSPForward(AMX *amx, int func, ...);
|
int registerSPForward(AMX *amx, int func, ...);
|
||||||
|
@ -417,14 +417,16 @@ void CPluginMngr::CPlugin::pausePlugin()
|
|||||||
// Unpause a plugin
|
// Unpause a plugin
|
||||||
void CPluginMngr::CPlugin::unpausePlugin()
|
void CPluginMngr::CPlugin::unpausePlugin()
|
||||||
{
|
{
|
||||||
if (isValid())
|
if (isValid() && (getStatusCode() != ps_stopped))
|
||||||
{
|
{
|
||||||
// set status first so the function will be marked executable
|
// set status first so the function will be marked executable
|
||||||
setStatus(ps_running);
|
setStatus(ps_running);
|
||||||
|
|
||||||
// call plugin_unpause if provided
|
// call plugin_unpause if provided
|
||||||
if (m_UnpauseFwd != -1)
|
if (m_UnpauseFwd != -1)
|
||||||
|
{
|
||||||
executeForwards(m_UnpauseFwd);
|
executeForwards(m_UnpauseFwd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
#include "binlog.h"
|
#include "binlog.h"
|
||||||
#include "libraries.h"
|
#include "libraries.h"
|
||||||
|
|
||||||
|
const char *invis_cvar_list[5] = {"amxmodx_version", "amxmodx_modules", "amx_debug", "amx_mldebug", "amx_client_languages"};
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL get_xvar_id(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_xvar_id(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
@ -542,14 +544,27 @@ static cell AMX_NATIVE_CALL is_user_hltv(AMX *amx, cell *params) /* 1 param */
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern bool g_bmod_tfc;
|
||||||
static cell AMX_NATIVE_CALL is_user_alive(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL is_user_alive(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
|
|
||||||
if (index < 1 || index > gpGlobals->maxClients)
|
if (index < 1 || index > gpGlobals->maxClients)
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
|
CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
|
||||||
|
|
||||||
|
if (g_bmod_tfc)
|
||||||
|
{
|
||||||
|
edict_t *e = pPlayer->pEdict;
|
||||||
|
if (e->v.flags & FL_SPECTATOR ||
|
||||||
|
(!e->v.team || !e->v.playerclass))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ((pPlayer->ingame && pPlayer->IsAlive()) ? 1 : 0);
|
return ((pPlayer->ingame && pPlayer->IsAlive()) ? 1 : 0);
|
||||||
}
|
}
|
||||||
@ -976,7 +991,9 @@ static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) /* 3 param */
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (params[3])
|
if (params[3])
|
||||||
|
{
|
||||||
set_amxstring(amx, params[2], pPlayer->team.c_str(), params[3]);
|
set_amxstring(amx, params[2], pPlayer->team.c_str(), params[3]);
|
||||||
|
}
|
||||||
|
|
||||||
return pPlayer->teamId;
|
return pPlayer->teamId;
|
||||||
}
|
}
|
||||||
@ -1575,6 +1592,19 @@ static cell AMX_NATIVE_CALL get_cvar_string(AMX *amx, cell *params) /* 3 param *
|
|||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
char* sptemp = get_amxstring(amx, params[1], 0, ilen);
|
char* sptemp = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = sptemp;
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return set_amxstring(amx, params[2], CVAR_GET_STRING(sptemp), params[3]);
|
return set_amxstring(amx, params[2], CVAR_GET_STRING(sptemp), params[3]);
|
||||||
}
|
}
|
||||||
@ -1596,6 +1626,20 @@ static cell AMX_NATIVE_CALL get_pcvar_float(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL get_cvar_float(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL get_cvar_float(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
|
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
REAL pFloat = CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
|
REAL pFloat = CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
|
||||||
|
|
||||||
return amx_ftoc(pFloat);
|
return amx_ftoc(pFloat);
|
||||||
@ -1638,6 +1682,18 @@ static cell AMX_NATIVE_CALL get_pcvar_num(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL get_cvar_num(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL get_cvar_num(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return (int)CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
|
return (int)CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2208,6 +2264,18 @@ static cell AMX_NATIVE_CALL task_exists(AMX *amx, cell *params) /* 1 param */
|
|||||||
static cell AMX_NATIVE_CALL cvar_exists(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL cvar_exists(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return (CVAR_GET_POINTER(get_amxstring(amx, params[1], 0, ilen)) ? 1 : 0);
|
return (CVAR_GET_POINTER(get_amxstring(amx, params[1], 0, ilen)) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2728,6 +2796,20 @@ static cell AMX_NATIVE_CALL get_cvar_flags(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
int ilen;
|
int ilen;
|
||||||
char* sCvar = get_amxstring(amx, params[1], 0, ilen);
|
char* sCvar = get_amxstring(amx, params[1], 0, ilen);
|
||||||
|
|
||||||
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
{
|
||||||
|
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
|
||||||
|
char *cvar = sCvar;
|
||||||
|
for (unsigned int i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(cvar, invis_cvar_list[i]) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cvar_t* pCvar = CVAR_GET_POINTER(sCvar);
|
cvar_t* pCvar = CVAR_GET_POINTER(sCvar);
|
||||||
|
|
||||||
return pCvar ? pCvar->flags : 0;
|
return pCvar ? pCvar->flags : 0;
|
||||||
@ -3221,19 +3303,30 @@ static cell AMX_NATIVE_CALL get_func_id(AMX *amx, cell *params)
|
|||||||
CPluginMngr::CPlugin *plugin;
|
CPluginMngr::CPlugin *plugin;
|
||||||
|
|
||||||
if (params[2] < 0)
|
if (params[2] < 0)
|
||||||
|
{
|
||||||
plugin = g_plugins.findPluginFast(amx);
|
plugin = g_plugins.findPluginFast(amx);
|
||||||
else
|
} else {
|
||||||
plugin = g_plugins.findPlugin(params[2]);
|
plugin = g_plugins.findPlugin(params[2]);
|
||||||
|
}
|
||||||
|
|
||||||
if (!plugin)
|
if (!plugin)
|
||||||
|
{
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!plugin->isValid())
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
const char *funcName = get_amxstring(amx, params[1], 0, len);
|
const char *funcName = get_amxstring(amx, params[1], 0, len);
|
||||||
int index, err;
|
int index, err;
|
||||||
|
|
||||||
if ((err = amx_FindPublic(plugin->getAMX(), funcName, &index)) != AMX_ERR_NONE)
|
if ((err = amx_FindPublic(plugin->getAMX(), funcName, &index)) != AMX_ERR_NONE)
|
||||||
|
{
|
||||||
index = -1;
|
index = -1;
|
||||||
|
}
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
@ -3876,6 +3969,21 @@ static cell AMX_NATIVE_CALL CreateMultiForward(AMX *amx, cell *params)
|
|||||||
return registerForwardC(funcname, static_cast<ForwardExecType>(params[2]), ps, count-2);
|
return registerForwardC(funcname, static_cast<ForwardExecType>(params[2]), ps, count-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL CreateMultiForwardEx(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
char *funcname = get_amxstring(amx, params[1], 0, len);
|
||||||
|
|
||||||
|
cell ps[FORWARD_MAX_PARAMS];
|
||||||
|
cell count = params[0] / sizeof(cell);
|
||||||
|
for (cell i=4; i<=count; i++)
|
||||||
|
{
|
||||||
|
ps[i-4] = *get_amxaddr(amx, params[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return registerForwardC(funcname, static_cast<ForwardExecType>(params[2]), ps, count-3, params[3]);
|
||||||
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL CreateOneForward(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL CreateOneForward(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
CPluginMngr::CPlugin *p = g_plugins.findPlugin(params[1]);
|
CPluginMngr::CPlugin *p = g_plugins.findPlugin(params[1]);
|
||||||
@ -4410,6 +4518,7 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
|
|||||||
{"CreateHudSyncObj", CreateHudSyncObj},
|
{"CreateHudSyncObj", CreateHudSyncObj},
|
||||||
{"CreateLangKey", CreateLangKey},
|
{"CreateLangKey", CreateLangKey},
|
||||||
{"CreateMultiForward", CreateMultiForward},
|
{"CreateMultiForward", CreateMultiForward},
|
||||||
|
{"CreateMultiForwardEx", CreateMultiForwardEx},
|
||||||
{"CreateOneForward", CreateOneForward},
|
{"CreateOneForward", CreateOneForward},
|
||||||
{"DestroyForward", DestroyForward},
|
{"DestroyForward", DestroyForward},
|
||||||
{"ExecuteForward", ExecuteForward},
|
{"ExecuteForward", ExecuteForward},
|
||||||
|
@ -73,7 +73,7 @@
|
|||||||
|
|
||||||
#define AMXXLOG_Log g_log.Log
|
#define AMXXLOG_Log g_log.Log
|
||||||
#define AMXXLOG_Error g_log.LogError
|
#define AMXXLOG_Error g_log.LogError
|
||||||
#define AMX_VERSION "1.76"
|
#define AMX_VERSION "1.76b"
|
||||||
|
|
||||||
extern AMX_NATIVE_INFO core_Natives[];
|
extern AMX_NATIVE_INFO core_Natives[];
|
||||||
extern AMX_NATIVE_INFO time_Natives[];
|
extern AMX_NATIVE_INFO time_Natives[];
|
||||||
|
@ -92,9 +92,10 @@ void Client_ShowMenu(void* mValue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern bool g_bmod_tfc;
|
||||||
void Client_TeamInfo(void* mValue)
|
void Client_TeamInfo(void* mValue)
|
||||||
{
|
{
|
||||||
if (mPlayer) return;
|
if (mPlayer && !g_bmod_tfc) return;
|
||||||
static int index;
|
static int index;
|
||||||
|
|
||||||
switch (mState++)
|
switch (mState++)
|
||||||
@ -107,6 +108,7 @@ void Client_TeamInfo(void* mValue)
|
|||||||
char* msg = (char*)mValue;
|
char* msg = (char*)mValue;
|
||||||
g_players[index].team.assign(msg);
|
g_players[index].team.assign(msg);
|
||||||
g_teamsIds.registerTeam(msg, -1);
|
g_teamsIds.registerTeam(msg, -1);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -799,13 +799,25 @@ static cell AMX_NATIVE_CALL amx_rmdir(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL amx_rename(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL amx_rename(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
char f_old_r[260];
|
||||||
|
char f_new_r[260];
|
||||||
|
|
||||||
char *fold = get_amxstring(amx, params[1], 0, len);
|
char *fold = get_amxstring(amx, params[1], 0, len);
|
||||||
char *fnew = get_amxstring(amx, params[2], 1, len);
|
char *fnew = get_amxstring(amx, params[2], 1, len);
|
||||||
|
|
||||||
|
if (params[0] / sizeof(cell) == 3 && params[3])
|
||||||
|
{
|
||||||
|
build_pathname_r(f_old_r, sizeof(f_old_r)-1, "%s", fold);
|
||||||
|
build_pathname_r(f_new_r, sizeof(f_new_r)-1, "%s", fnew);
|
||||||
|
} else {
|
||||||
|
snprintf(f_old_r, sizeof(f_old_r)-1, "%s", fold);
|
||||||
|
snprintf(f_new_r, sizeof(f_new_r)-1, "%s", fnew);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined __linux__
|
#if defined __linux__
|
||||||
return (rename(fold, fnew) == 0);
|
return (rename(f_old_r, f_new_r) == 0);
|
||||||
#elif defined WIN32
|
#elif defined WIN32
|
||||||
return MoveFileA(fold, fnew);
|
return MoveFileA(f_old_r, f_new_r);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,6 +96,7 @@ String g_log_dir;
|
|||||||
String g_mod_name;
|
String g_mod_name;
|
||||||
XVars g_xvars;
|
XVars g_xvars;
|
||||||
|
|
||||||
|
bool g_bmod_tfc;
|
||||||
bool g_bmod_cstrike;
|
bool g_bmod_cstrike;
|
||||||
bool g_bmod_dod;
|
bool g_bmod_dod;
|
||||||
bool g_dontprecache;
|
bool g_dontprecache;
|
||||||
@ -315,6 +316,20 @@ const char* get_localinfo(const char* name, const char* def)
|
|||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* get_localinfo_r(const char *name, const char *def, char buffer[], size_t maxlength)
|
||||||
|
{
|
||||||
|
const char* b = LOCALINFO((char*)name);
|
||||||
|
|
||||||
|
if (b == 0 || *b == 0)
|
||||||
|
{
|
||||||
|
SET_LOCALINFO((char*)name, (char*)(b = def));
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(buffer, maxlength, "%s", b);
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
// Very first point at map load
|
// Very first point at map load
|
||||||
// Load AMX modules for new native functions
|
// Load AMX modules for new native functions
|
||||||
// Initialize AMX stuff and load it's plugins from plugins.ini list
|
// Initialize AMX stuff and load it's plugins from plugins.ini list
|
||||||
@ -367,14 +382,17 @@ int C_Spawn(edict_t *pent)
|
|||||||
get_localinfo("amx_logdir", "addons/amxmodx/logs");
|
get_localinfo("amx_logdir", "addons/amxmodx/logs");
|
||||||
|
|
||||||
char map_pluginsfile_path[256];
|
char map_pluginsfile_path[256];
|
||||||
|
char configs_dir[256];
|
||||||
|
|
||||||
// ###### Load modules
|
// ###### Load modules
|
||||||
loadModules(get_localinfo("amxx_modules", "addons/amxmodx/configs/modules.ini"), PT_ANYTIME);
|
loadModules(get_localinfo("amxx_modules", "addons/amxmodx/configs/modules.ini"), PT_ANYTIME);
|
||||||
|
|
||||||
|
get_localinfo_r("amxx_configsdir", "addons/amxmodx/configs", configs_dir, sizeof(configs_dir)-1);
|
||||||
g_plugins.CALMFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
g_plugins.CALMFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
||||||
LoadExtraPluginsToPCALM(get_localinfo("amxx_configsdir", "addons/amxmodx/configs"));
|
LoadExtraPluginsToPCALM(configs_dir);
|
||||||
snprintf(map_pluginsfile_path, sizeof(map_pluginsfile_path)-1,
|
snprintf(map_pluginsfile_path, sizeof(map_pluginsfile_path)-1,
|
||||||
"%s/maps/plugins-%s.ini",
|
"%s/maps/plugins-%s.ini",
|
||||||
get_localinfo("amxx_configsdir", "addons/amxmodx/configs"),
|
configs_dir,
|
||||||
STRING(gpGlobals->mapname));
|
STRING(gpGlobals->mapname));
|
||||||
g_plugins.CALMFromFile(map_pluginsfile_path);
|
g_plugins.CALMFromFile(map_pluginsfile_path);
|
||||||
|
|
||||||
@ -415,7 +433,7 @@ int C_Spawn(edict_t *pent)
|
|||||||
|
|
||||||
// ###### Load AMX Mod X plugins
|
// ###### Load AMX Mod X plugins
|
||||||
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
||||||
LoadExtraPluginsFromDir(get_localinfo("amxx_configsdir", "addons/amxmodx/configs"));
|
LoadExtraPluginsFromDir(configs_dir);
|
||||||
g_plugins.loadPluginsFromFile(map_pluginsfile_path, false);
|
g_plugins.loadPluginsFromFile(map_pluginsfile_path, false);
|
||||||
g_plugins.Finalize();
|
g_plugins.Finalize();
|
||||||
g_plugins.InvalidateCache();
|
g_plugins.InvalidateCache();
|
||||||
@ -1571,6 +1589,7 @@ C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *inte
|
|||||||
} else {
|
} else {
|
||||||
g_bmod_cstrike = false;
|
g_bmod_cstrike = false;
|
||||||
g_bmod_dod = !stricmp(g_mod_name.c_str(), "dod");
|
g_bmod_dod = !stricmp(g_mod_name.c_str(), "dod");
|
||||||
|
g_bmod_tfc = !stricmp(g_mod_name.c_str(), "tfc");
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_engfuncs.pfnCmd_Argc = C_Cmd_Argc;
|
meta_engfuncs.pfnCmd_Argc = C_Cmd_Argc;
|
||||||
|
@ -37,11 +37,15 @@ CStack<int> g_MenuFreeStack;
|
|||||||
void ClearMenus()
|
void ClearMenus()
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < g_NewMenus.size(); i++)
|
for (size_t i = 0; i < g_NewMenus.size(); i++)
|
||||||
|
{
|
||||||
delete g_NewMenus[i];
|
delete g_NewMenus[i];
|
||||||
|
}
|
||||||
|
|
||||||
g_NewMenus.clear();
|
g_NewMenus.clear();
|
||||||
while (!g_MenuFreeStack.empty())
|
while (!g_MenuFreeStack.empty())
|
||||||
|
{
|
||||||
g_MenuFreeStack.pop();
|
g_MenuFreeStack.pop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void validate_menu_text(char *str)
|
void validate_menu_text(char *str)
|
||||||
@ -64,11 +68,15 @@ void validate_menu_text(char *str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (offs)
|
if (offs)
|
||||||
|
{
|
||||||
*(str-offs) = *str;
|
*(str-offs) = *str;
|
||||||
|
}
|
||||||
str++;
|
str++;
|
||||||
}
|
}
|
||||||
if (offs)
|
if (offs)
|
||||||
|
{
|
||||||
*(str-offs) = '\0';
|
*(str-offs) = '\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +107,9 @@ Menu::Menu(const char *title, int mid, int tid)
|
|||||||
Menu::~Menu()
|
Menu::~Menu()
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < m_Items.size(); i++)
|
for (size_t i = 0; i < m_Items.size(); i++)
|
||||||
|
{
|
||||||
delete m_Items[i];
|
delete m_Items[i];
|
||||||
|
}
|
||||||
|
|
||||||
unregisterSPForward(this->func);
|
unregisterSPForward(this->func);
|
||||||
|
|
||||||
@ -139,7 +149,9 @@ size_t Menu::GetPageCount()
|
|||||||
{
|
{
|
||||||
size_t items = GetItemCount();
|
size_t items = GetItemCount();
|
||||||
if (items_per_page == 0)
|
if (items_per_page == 0)
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return ((items/items_per_page) + ((items % items_per_page) ? 1 : 0));
|
return ((items/items_per_page) + ((items % items_per_page) ? 1 : 0));
|
||||||
}
|
}
|
||||||
@ -159,15 +171,49 @@ int Menu::PagekeyToItem(page_t page, item_t key)
|
|||||||
//first page
|
//first page
|
||||||
if (page == 0)
|
if (page == 0)
|
||||||
{
|
{
|
||||||
|
/* The algorithm for spaces here is same as a middle page. */
|
||||||
|
item_t new_key = key;
|
||||||
|
for (size_t i=start; i<(start+key-1) && i<m_Items.size(); i++)
|
||||||
|
{
|
||||||
|
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
|
||||||
|
{
|
||||||
|
if (m_Items[i]->blanks[j] == 1)
|
||||||
|
{
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
new_key--;
|
||||||
|
}
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
key = new_key;
|
||||||
if (key == items_per_page + 1)
|
if (key == items_per_page + 1)
|
||||||
|
{
|
||||||
return MENU_MORE;
|
return MENU_MORE;
|
||||||
else if (key == items_per_page + 2)
|
} else if (key == items_per_page + 2) {
|
||||||
return MENU_EXIT;
|
return MENU_EXIT;
|
||||||
else
|
} else {
|
||||||
return (start + key - 1);
|
return (start + key - 1);
|
||||||
|
}
|
||||||
} else if (page == num_pages - 1) {
|
} else if (page == num_pages - 1) {
|
||||||
//last page
|
//last page
|
||||||
size_t remaining = m_Items.size() - start;
|
size_t remaining = m_Items.size() - start;
|
||||||
|
/* We have to add one remaining for each "bumping" space */
|
||||||
|
for (size_t i=m_Items.size() - remaining; i<m_Items.size(); i++)
|
||||||
|
{
|
||||||
|
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
|
||||||
|
{
|
||||||
|
if (m_Items[i]->blanks[j] == 1)
|
||||||
|
{
|
||||||
|
remaining++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (key == remaining + 1)
|
if (key == remaining + 1)
|
||||||
{
|
{
|
||||||
return MENU_BACK;
|
return MENU_BACK;
|
||||||
@ -177,6 +223,29 @@ int Menu::PagekeyToItem(page_t page, item_t key)
|
|||||||
return (start + key - 1);
|
return (start + key - 1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
/* The algorithm for spaces here is a bit harder. We have to subtract
|
||||||
|
* one from the key for each space we find along the way.
|
||||||
|
*/
|
||||||
|
item_t new_key = key;
|
||||||
|
for (size_t i=start; i<(start+key-1) && i<m_Items.size(); i++)
|
||||||
|
{
|
||||||
|
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
|
||||||
|
{
|
||||||
|
if (m_Items[i]->blanks[j] == 1)
|
||||||
|
{
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
new_key--;
|
||||||
|
}
|
||||||
|
if (!new_key)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
key = new_key;
|
||||||
if (key > items_per_page && (key-items_per_page<=3))
|
if (key > items_per_page && (key-items_per_page<=3))
|
||||||
{
|
{
|
||||||
return m_OptOrders[key-items_per_page-1];
|
return m_OptOrders[key-items_per_page-1];
|
||||||
@ -286,27 +355,33 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
{
|
{
|
||||||
ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i));
|
ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i));
|
||||||
if (ret == ITEM_ENABLED)
|
if (ret == ITEM_ENABLED)
|
||||||
|
{
|
||||||
enabled = true;
|
enabled = true;
|
||||||
else if (ret == ITEM_DISABLED)
|
} else if (ret == ITEM_DISABLED) {
|
||||||
enabled = false;
|
enabled = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pItem->pfn)
|
if (pItem->pfn)
|
||||||
{
|
{
|
||||||
ret = (pItem->pfn)(player, thisId, i);
|
ret = (pItem->pfn)(player, thisId, i);
|
||||||
if (ret == ITEM_ENABLED)
|
if (ret == ITEM_ENABLED)
|
||||||
|
{
|
||||||
enabled = true;
|
enabled = true;
|
||||||
else if (ret == ITEM_DISABLED)
|
} else if (ret == ITEM_DISABLED) {
|
||||||
enabled = false;
|
enabled = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
{
|
{
|
||||||
keys |= (1<<option);
|
keys |= (1<<option);
|
||||||
if (m_AutoColors)
|
if (m_AutoColors)
|
||||||
|
{
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "\\r%d.\\w %s\n", ++option, pItem->name.c_str());
|
_snprintf(buffer, sizeof(buffer)-1, "\\r%d.\\w %s\n", ++option, pItem->name.c_str());
|
||||||
else
|
} else {
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", ++option, pItem->name.c_str());
|
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", ++option, pItem->name.c_str());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_AutoColors)
|
if (m_AutoColors)
|
||||||
{
|
{
|
||||||
@ -326,7 +401,9 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
for (size_t j=0; j<pItem->blanks.size(); j++)
|
for (size_t j=0; j<pItem->blanks.size(); j++)
|
||||||
{
|
{
|
||||||
if (pItem->blanks[j] == 1)
|
if (pItem->blanks[j] == 1)
|
||||||
|
{
|
||||||
option++;
|
option++;
|
||||||
|
}
|
||||||
m_Text.append("\n");
|
m_Text.append("\n");
|
||||||
slots++;
|
slots++;
|
||||||
}
|
}
|
||||||
@ -337,11 +414,17 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
{
|
{
|
||||||
int pad = items_per_page;
|
int pad = items_per_page;
|
||||||
if (flags & Display_Back)
|
if (flags & Display_Back)
|
||||||
|
{
|
||||||
pad--;
|
pad--;
|
||||||
|
}
|
||||||
if (flags & Display_Next)
|
if (flags & Display_Next)
|
||||||
|
{
|
||||||
pad--;
|
pad--;
|
||||||
|
}
|
||||||
if (flags & Display_Exit)
|
if (flags & Display_Exit)
|
||||||
|
{
|
||||||
pad--;
|
pad--;
|
||||||
|
}
|
||||||
for (int i=slots+1; i<=pad; i++)
|
for (int i=slots+1; i<=pad; i++)
|
||||||
{
|
{
|
||||||
m_Text.append("\n");
|
m_Text.append("\n");
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
// Microsoft Visual C++ generated resource script.
|
// Microsoft Visual C++ generated resource script.
|
||||||
//
|
//
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
#define APSTUDIO_READONLY_SYMBOLS
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
@ -26,8 +27,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,7,6,0
|
FILEVERSION 1,7,6,2
|
||||||
PRODUCTVERSION 1,7,6,0
|
PRODUCTVERSION 1,7,6,2
|
||||||
FILEFLAGSMASK 0x17L
|
FILEFLAGSMASK 0x17L
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
@ -44,12 +45,12 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "Comments", "AMX Mod X"
|
VALUE "Comments", "AMX Mod X"
|
||||||
VALUE "FileDescription", "AMX Mod X"
|
VALUE "FileDescription", "AMX Mod X"
|
||||||
VALUE "FileVersion", "1.76"
|
VALUE "FileVersion", "1.76b"
|
||||||
VALUE "InternalName", "amxmodx"
|
VALUE "InternalName", "amxmodx"
|
||||||
VALUE "LegalCopyright", "Copyright (c) 2004-2006, AMX Mod X Dev Team"
|
VALUE "LegalCopyright", "Copyright (c) 2004-2006, AMX Mod X Dev Team"
|
||||||
VALUE "OriginalFilename", "amxmodx_mm.dll"
|
VALUE "OriginalFilename", "amxmodx_mm.dll"
|
||||||
VALUE "ProductName", "AMX Mod X"
|
VALUE "ProductName", "AMX Mod X"
|
||||||
VALUE "ProductVersion", "1.76"
|
VALUE "ProductVersion", "1.76b"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
@ -6,4 +6,3 @@ ShowStats ;HUD-stats default
|
|||||||
SayRankStats ;Say /rankstats
|
SayRankStats ;Say /rankstats
|
||||||
SayRank ;Say /rank
|
SayRank ;Say /rank
|
||||||
SayTop15 ;Say /top15
|
SayTop15 ;Say /top15
|
||||||
ShowStats ;HUD-stats default
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#define CSW_HEGRENADE 4
|
#define CSW_HEGRENADE 4
|
||||||
#define CSW_C4 6
|
#define CSW_C4 6
|
||||||
#define CSW_SMOKEGRENADE 9
|
#define CSW_SMOKEGRENADE 9
|
||||||
|
#define CSW_KNIFE 29
|
||||||
#define CSW_FLASHBANG 25
|
#define CSW_FLASHBANG 25
|
||||||
|
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "WinCSX.h"
|
#include "WinCSX.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "commctrl.h"
|
||||||
|
|
||||||
int APIENTRY _tWinMain(HINSTANCE hInstance,
|
int APIENTRY _tWinMain(HINSTANCE hInstance,
|
||||||
HINSTANCE hPrevInstance,
|
HINSTANCE hPrevInstance,
|
||||||
@ -26,6 +27,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InitCommonControls();
|
||||||
|
|
||||||
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_WINCSX);
|
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_WINCSX);
|
||||||
|
|
||||||
// Show the dialog box now.
|
// Show the dialog box now.
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="comctl32.lib"
|
||||||
OutputFile="$(OutDir)/WinCSX.exe"
|
OutputFile="$(OutDir)/WinCSX.exe"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
GenerateDebugInformation="TRUE"
|
GenerateDebugInformation="TRUE"
|
||||||
@ -77,6 +78,7 @@
|
|||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="comctl32.lib"
|
||||||
OutputFile="$(OutDir)/WinCSX.exe"
|
OutputFile="$(OutDir)/WinCSX.exe"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
GenerateDebugInformation="TRUE"
|
GenerateDebugInformation="TRUE"
|
||||||
|
@ -61,6 +61,7 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="comctl32.lib"
|
||||||
OutputFile="$(OutDir)/WinCSX.exe"
|
OutputFile="$(OutDir)/WinCSX.exe"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
@ -136,6 +137,7 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="comctl32.lib"
|
||||||
OutputFile="$(OutDir)/WinCSX.exe"
|
OutputFile="$(OutDir)/WinCSX.exe"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
|
@ -2773,7 +2773,7 @@ void ValidateMacros_DontCallThis_Smiley()
|
|||||||
MF_FindLibrary(NULL, LibType_Class);
|
MF_FindLibrary(NULL, LibType_Class);
|
||||||
MF_AddLibraries(NULL, LibType_Class, NULL);
|
MF_AddLibraries(NULL, LibType_Class, NULL);
|
||||||
MF_RemoveLibraries(NULL);
|
MF_RemoveLibraries(NULL);
|
||||||
MF_OverrideNatives(NULL);
|
MF_OverrideNatives(NULL, "");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -43,7 +43,6 @@ int gmsgResetHUD;
|
|||||||
int gmsgAmmoX;
|
int gmsgAmmoX;
|
||||||
int gmsgScoreInfo;
|
int gmsgScoreInfo;
|
||||||
int gmsgAmmoPickup;
|
int gmsgAmmoPickup;
|
||||||
|
|
||||||
int gmsgSendAudio;
|
int gmsgSendAudio;
|
||||||
int gmsgTextMsg;
|
int gmsgTextMsg;
|
||||||
int gmsgBarTime;
|
int gmsgBarTime;
|
||||||
@ -62,26 +61,27 @@ cvar_t* csstats_pause;
|
|||||||
cvar_t init_csstats_rankbots ={"csstats_rankbots","1"};
|
cvar_t init_csstats_rankbots ={"csstats_rankbots","1"};
|
||||||
cvar_t init_csstats_pause = {"csstats_pause","0"};
|
cvar_t init_csstats_pause = {"csstats_pause","0"};
|
||||||
|
|
||||||
struct sUserMsg {
|
struct sUserMsg
|
||||||
|
{
|
||||||
const char* name;
|
const char* name;
|
||||||
int* id;
|
int* id;
|
||||||
funEventCall func;
|
funEventCall func;
|
||||||
bool endmsg;
|
bool endmsg;
|
||||||
} g_user_msg[] = {
|
} g_user_msg[] = {
|
||||||
{ "CurWeapon" , &gmsgCurWeapon , Client_CurWeapon, false },
|
{"CurWeapon", &gmsgCurWeapon, Client_CurWeapon, false},
|
||||||
{ "Damage" , &gmsgDamage,Client_Damage, false },
|
{"Damage", &gmsgDamage, Client_Damage, false},
|
||||||
{ "Damage" , &gmsgDamageEnd, Client_Damage_End, true },
|
{"Damage", &gmsgDamageEnd, Client_Damage_End, true},
|
||||||
{ "WeaponList" , &gmsgWeaponList, Client_WeaponList, false },
|
{"WeaponList", &gmsgWeaponList, Client_WeaponList, false},
|
||||||
{ "ResetHUD" , &gmsgResetHUD,Client_ResetHUD, true },
|
{"ResetHUD", &gmsgResetHUD, Client_ResetHUD, true},
|
||||||
{ "AmmoX" , &gmsgAmmoX, Client_AmmoX , false },
|
{"AmmoX", &gmsgAmmoX, Client_AmmoX, false},
|
||||||
{ "ScoreInfo" , &gmsgScoreInfo, Client_ScoreInfo, false },
|
{"ScoreInfo", &gmsgScoreInfo, Client_ScoreInfo, false},
|
||||||
{ "AmmoPickup" , &gmsgAmmoPickup, Client_AmmoPickup , false },
|
{"AmmoPickup", &gmsgAmmoPickup, Client_AmmoPickup, false},
|
||||||
|
{"SendAudio", &gmsgSendAudio, Client_SendAudio, false},
|
||||||
|
{"TextMsg", &gmsgTextMsg, Client_TextMsg, false},
|
||||||
|
{"BarTime", &gmsgBarTime, Client_BarTime, false},
|
||||||
|
{"DeathMsg", &gmsgDeathMsg, Client_DeathMsg, false},
|
||||||
|
|
||||||
{ "SendAudio" , &gmsgSendAudio , Client_SendAudio , false },
|
{0, 0, 0, false}
|
||||||
{ "TextMsg" , &gmsgTextMsg , Client_TextMsg , false },
|
|
||||||
{ "BarTime" , &gmsgBarTime , Client_BarTime , false },
|
|
||||||
|
|
||||||
{ 0 , 0,0,false }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int RegUserMsg_Post(const char *pszName, int iSize)
|
int RegUserMsg_Post(const char *pszName, int iSize)
|
||||||
@ -330,10 +330,20 @@ void EmitSound_Post(edict_t *entity, int channel, const char *sample, /*int*/flo
|
|||||||
RETURN_META(MRES_IGNORED);
|
RETURN_META(MRES_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TraceLine_Post(const float *v1, const float *v2, int fNoMonsters, edict_t *e, TraceResult *ptr) {
|
void TraceLine_Post(const float *v1, const float *v2, int fNoMonsters, edict_t *e, TraceResult *ptr)
|
||||||
if (ptr->pHit&&(ptr->pHit->v.flags& (FL_CLIENT | FL_FAKECLIENT) )&&
|
{
|
||||||
e&&(e->v.flags& (FL_CLIENT | FL_FAKECLIENT) )&&ptr->iHitgroup)
|
if (ptr->pHit && (ptr->pHit->v.flags & (FL_CLIENT|FL_FAKECLIENT))
|
||||||
GET_PLAYER_POINTER(e)->aiming = ptr->iHitgroup;
|
&& e
|
||||||
|
&& (e->v.flags & (FL_CLIENT|FL_FAKECLIENT))
|
||||||
|
&& ptr->iHitgroup)
|
||||||
|
{
|
||||||
|
CPlayer *pPlayer = GET_PLAYER_POINTER(e);
|
||||||
|
if (pPlayer->current != CSW_KNIFE)
|
||||||
|
{
|
||||||
|
pPlayer->aiming = ptr->iHitgroup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RETURN_META(MRES_IGNORED);
|
RETURN_META(MRES_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
// Module info
|
// Module info
|
||||||
#define MODULE_NAME "CSX"
|
#define MODULE_NAME "CSX"
|
||||||
#define MODULE_VERSION "1.76"
|
#define MODULE_VERSION "1.76a"
|
||||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
||||||
#define MODULE_URL "http://www.amxmodx.org/"
|
#define MODULE_URL "http://www.amxmodx.org/"
|
||||||
#define MODULE_LOGTAG "CSX"
|
#define MODULE_LOGTAG "CSX"
|
||||||
@ -367,7 +367,7 @@
|
|||||||
#define FN_TraceLine_Post TraceLine_Post
|
#define FN_TraceLine_Post TraceLine_Post
|
||||||
// #define FN_TraceToss_Post TraceToss_Post
|
// #define FN_TraceToss_Post TraceToss_Post
|
||||||
// #define FN_TraceMonsterHull_Post TraceMonsterHull_Post
|
// #define FN_TraceMonsterHull_Post TraceMonsterHull_Post
|
||||||
// #define FN_TraceHull_Post TraceHull_Post
|
// #define FN_TraceHull_Post TraceHull_Post
|
||||||
// #define FN_TraceModel_Post TraceModel_Post
|
// #define FN_TraceModel_Post TraceModel_Post
|
||||||
// #define FN_TraceTexture_Post TraceTexture_Post
|
// #define FN_TraceTexture_Post TraceTexture_Post
|
||||||
// #define FN_TraceSphere_Post TraceSphere_Post
|
// #define FN_TraceSphere_Post TraceSphere_Post
|
||||||
|
@ -88,10 +88,10 @@ void Client_AmmoPickup(void*);
|
|||||||
void Client_Damage_End(void*);
|
void Client_Damage_End(void*);
|
||||||
void Client_ScoreInfo(void*);
|
void Client_ScoreInfo(void*);
|
||||||
void Client_ResetHUD(void*);
|
void Client_ResetHUD(void*);
|
||||||
|
|
||||||
void Client_SendAudio(void*);
|
void Client_SendAudio(void*);
|
||||||
void Client_TextMsg(void*);
|
void Client_TextMsg(void*);
|
||||||
void Client_BarTime(void*);
|
void Client_BarTime(void*);
|
||||||
|
void Client_DeathMsg(void*);
|
||||||
|
|
||||||
bool ignoreBots (edict_t *pEnt, edict_t *pOther = NULL );
|
bool ignoreBots (edict_t *pEnt, edict_t *pOther = NULL );
|
||||||
bool isModuleActive();
|
bool isModuleActive();
|
||||||
|
@ -17,6 +17,44 @@ void Client_ResetHUD(void* mValue){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client_DeathMsg(void *mValue)
|
||||||
|
{
|
||||||
|
static int killer_id;
|
||||||
|
static int victim_id;
|
||||||
|
static int is_headshot;
|
||||||
|
const char *name;
|
||||||
|
|
||||||
|
switch (mState++)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
killer_id = *(int *)mValue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
victim_id = *(int *)mValue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
is_headshot = *(int *)mValue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
name = (const char *)mValue;
|
||||||
|
if (killer_id
|
||||||
|
&& (strcmp(name, "knife") == 0))
|
||||||
|
{
|
||||||
|
CPlayer *pPlayer = GET_PLAYER_POINTER_I(killer_id);
|
||||||
|
pPlayer->aiming = is_headshot ? 1 : 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Client_WeaponList(void* mValue){
|
void Client_WeaponList(void* mValue){
|
||||||
static int wpnList;
|
static int wpnList;
|
||||||
static int iSlot;
|
static int iSlot;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
// Module info
|
// Module info
|
||||||
#define MODULE_NAME "DoD Fun"
|
#define MODULE_NAME "DoD Fun"
|
||||||
#define MODULE_VERSION "1.76"
|
#define MODULE_VERSION "1.76b"
|
||||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
||||||
#define MODULE_URL "http://www.amxmodx.org"
|
#define MODULE_URL "http://www.amxmodx.org"
|
||||||
#define MODULE_LOGTAG "DODFUN"
|
#define MODULE_LOGTAG "DODFUN"
|
||||||
|
@ -251,7 +251,7 @@ void RankSystem::loadRank(const char* filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
short int i = 0;
|
short int i = 0;
|
||||||
if (!fread(&i, sizeof(short int), 1, bfp) != 1)
|
if (fread(&i, sizeof(short int), 1, bfp) != 1)
|
||||||
{
|
{
|
||||||
fclose(bfp);
|
fclose(bfp);
|
||||||
return;
|
return;
|
||||||
|
@ -2773,7 +2773,7 @@ void ValidateMacros_DontCallThis_Smiley()
|
|||||||
MF_FindLibrary(NULL, LibType_Class);
|
MF_FindLibrary(NULL, LibType_Class);
|
||||||
MF_AddLibraries(NULL, LibType_Class, NULL);
|
MF_AddLibraries(NULL, LibType_Class, NULL);
|
||||||
MF_RemoveLibraries(NULL);
|
MF_RemoveLibraries(NULL);
|
||||||
MF_OverrideNatives(NULL);
|
MF_OverrideNatives(NULL, "");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
// Module info
|
// Module info
|
||||||
#define MODULE_NAME "DoDX"
|
#define MODULE_NAME "DoDX"
|
||||||
#define MODULE_VERSION "1.76"
|
#define MODULE_VERSION "1.76b"
|
||||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
||||||
#define MODULE_URL "http://www.amxmodx.org"
|
#define MODULE_URL "http://www.amxmodx.org"
|
||||||
#define MODULE_LOGTAG "DODX"
|
#define MODULE_LOGTAG "DODX"
|
||||||
|
@ -798,31 +798,42 @@ static cell AMX_NATIVE_CALL in_view_cone(AMX *amx, cell *params)
|
|||||||
|
|
||||||
CHECK_ENTITY(src);
|
CHECK_ENTITY(src);
|
||||||
|
|
||||||
Vector2D vec2LOS;
|
edict_t *pEdictSrc = INDEXENT(src);
|
||||||
|
|
||||||
|
Vector vecLOS, vecForward;
|
||||||
float flDot;
|
float flDot;
|
||||||
|
|
||||||
edict_t *pEdictSrc = INDEXENT(src);
|
|
||||||
cell *addr = MF_GetAmxAddr(amx, params[2]);
|
cell *addr = MF_GetAmxAddr(amx, params[2]);
|
||||||
float vecOrigin[3];
|
Vector origin(amx_ctof(addr[0]), amx_ctof(addr[1]), amx_ctof(addr[2]));
|
||||||
|
|
||||||
vecOrigin[0] = amx_ctof(addr[0]);
|
bool use2D = (params[0] / sizeof(cell)) == 2 || params[3] == 0;
|
||||||
vecOrigin[1] = amx_ctof(addr[1]);
|
|
||||||
vecOrigin[2] = amx_ctof(addr[2]);
|
|
||||||
|
|
||||||
Vector origin(vecOrigin[0], vecOrigin[1], vecOrigin[2]);
|
if (use2D)
|
||||||
|
{
|
||||||
|
MAKE_VECTORS(pEdictSrc->v.angles);
|
||||||
|
vecForward = gpGlobals->v_forward;
|
||||||
|
|
||||||
MAKE_VECTORS(pEdictSrc->v.angles);
|
vecLOS = origin - pEdictSrc->v.origin;
|
||||||
|
|
||||||
vec2LOS = (origin - pEdictSrc->v.origin).Make2D();
|
vecForward.z = 0;
|
||||||
vec2LOS = vec2LOS.Normalize();
|
vecLOS.z = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MAKE_VECTORS(pEdictSrc->v.v_angle);
|
||||||
|
vecForward = gpGlobals->v_forward;
|
||||||
|
|
||||||
flDot = DotProduct(vec2LOS, gpGlobals->v_forward.Make2D());
|
vecLOS = origin - (pEdictSrc->v.origin + pEdictSrc->v.view_ofs);
|
||||||
|
}
|
||||||
|
|
||||||
|
vecLOS = vecLOS.Normalize();
|
||||||
|
|
||||||
|
flDot = DotProduct(vecLOS, vecForward);
|
||||||
|
|
||||||
if (flDot >= cos(pEdictSrc->v.fov * (M_PI / 360)))
|
if (flDot >= cos(pEdictSrc->v.fov * (M_PI / 360)))
|
||||||
return 1;
|
return 1;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL traceresult(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL traceresult(AMX *amx, cell *params)
|
||||||
|
@ -821,9 +821,9 @@ static cell AMX_NATIVE_CALL unregister_forward(AMX *amx, cell *params)
|
|||||||
|
|
||||||
CVector<int> *peng = NULL;
|
CVector<int> *peng = NULL;
|
||||||
if (post)
|
if (post)
|
||||||
peng = &(Engine[func]);
|
|
||||||
else
|
|
||||||
peng = &(EnginePost[func]);
|
peng = &(EnginePost[func]);
|
||||||
|
else
|
||||||
|
peng = &(Engine[func]);
|
||||||
|
|
||||||
CVector<int>::iterator begin, end=peng->end();
|
CVector<int>::iterator begin, end=peng->end();
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
// Module info
|
// Module info
|
||||||
#define MODULE_NAME "FakeMeta"
|
#define MODULE_NAME "FakeMeta"
|
||||||
#define MODULE_VERSION "1.76"
|
#define MODULE_VERSION "1.76b"
|
||||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
||||||
#define MODULE_URL "http://www.amxmodx.org"
|
#define MODULE_URL "http://www.amxmodx.org"
|
||||||
#define MODULE_LOGTAG "FAKEMETA"
|
#define MODULE_LOGTAG "FAKEMETA"
|
||||||
|
@ -55,6 +55,10 @@ static cell AMX_NATIVE_CALL SQL_MakeDbTuple(AMX *amx, cell *params)
|
|||||||
sql->user = strdup(MF_GetAmxString(amx, params[2], 0, &len));
|
sql->user = strdup(MF_GetAmxString(amx, params[2], 0, &len));
|
||||||
sql->pass = strdup(MF_GetAmxString(amx, params[3], 0, &len));
|
sql->pass = strdup(MF_GetAmxString(amx, params[3], 0, &len));
|
||||||
sql->db = strdup(MF_GetAmxString(amx, params[4], 0, &len));
|
sql->db = strdup(MF_GetAmxString(amx, params[4], 0, &len));
|
||||||
|
if (params[0] / sizeof(cell) >= 5)
|
||||||
|
{
|
||||||
|
sql->max_timeout = static_cast<unsigned int>(params[5]);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int num = MakeHandle(sql, Handle_Connection, FreeConnection);
|
unsigned int num = MakeHandle(sql, Handle_Connection, FreeConnection);
|
||||||
|
|
||||||
@ -87,11 +91,12 @@ static cell AMX_NATIVE_CALL SQL_Connect(AMX *amx, cell *params)
|
|||||||
nfo.pass = sql->pass;
|
nfo.pass = sql->pass;
|
||||||
nfo.port = sql->port;
|
nfo.port = sql->port;
|
||||||
nfo.host = sql->host;
|
nfo.host = sql->host;
|
||||||
|
nfo.max_timeout = sql->max_timeout;
|
||||||
|
|
||||||
char buffer[512];
|
char buffer[512];
|
||||||
int errcode;
|
int errcode;
|
||||||
|
|
||||||
IDatabase *pDb = g_Mysql.Connect(&nfo, &errcode, buffer, sizeof(buffer)-1);
|
IDatabase *pDb = g_Mysql.Connect2(&nfo, &errcode, buffer, sizeof(buffer)-1);
|
||||||
|
|
||||||
if (!pDb)
|
if (!pDb)
|
||||||
{
|
{
|
||||||
@ -378,13 +383,15 @@ static cell AMX_NATIVE_CALL SQL_GetQueryString(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query);
|
AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query);
|
||||||
|
|
||||||
if (!qInfo || !qInfo->pQuery)
|
if (!qInfo || (!qInfo->pQuery && !qInfo->opt_ptr))
|
||||||
{
|
{
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]);
|
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return MF_SetAmxString(amx, params[2], qInfo->pQuery->GetQueryString(), params[3]);
|
const char *ptr = qInfo->pQuery ? qInfo->pQuery->GetQueryString() : qInfo->opt_ptr;
|
||||||
|
|
||||||
|
return MF_SetAmxString(amx, params[2], ptr, params[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL SQL_FieldNameToNum(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL SQL_FieldNameToNum(AMX *amx, cell *params)
|
||||||
|
@ -134,11 +134,13 @@ namespace SourceMod
|
|||||||
|
|
||||||
struct DatabaseInfo
|
struct DatabaseInfo
|
||||||
{
|
{
|
||||||
|
DatabaseInfo() : max_timeout(0) { };
|
||||||
const char *host;
|
const char *host;
|
||||||
const char *database;
|
const char *database;
|
||||||
const char *user;
|
const char *user;
|
||||||
const char *pass;
|
const char *pass;
|
||||||
unsigned int port;
|
unsigned int port;
|
||||||
|
unsigned int max_timeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ISQLDriver
|
class ISQLDriver
|
||||||
@ -147,6 +149,8 @@ namespace SourceMod
|
|||||||
virtual ~ISQLDriver() { };
|
virtual ~ISQLDriver() { };
|
||||||
public:
|
public:
|
||||||
virtual IDatabase *Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength) =0;
|
virtual IDatabase *Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength) =0;
|
||||||
|
//Supports the timeout clause
|
||||||
|
virtual IDatabase *Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength) =0;
|
||||||
virtual const char *NameString() =0;
|
virtual const char *NameString() =0;
|
||||||
virtual bool IsCompatDriver(const char *namestring) =0;
|
virtual bool IsCompatDriver(const char *namestring) =0;
|
||||||
};
|
};
|
||||||
|
@ -21,6 +21,16 @@ const char *MysqlDriver::NameString()
|
|||||||
}
|
}
|
||||||
|
|
||||||
IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength)
|
IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength)
|
||||||
|
{
|
||||||
|
return _Connect(info, errcode, error, maxlength, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
IDatabase *MysqlDriver::Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength)
|
||||||
|
{
|
||||||
|
return _Connect(info, errcode, error, maxlength, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
IDatabase *MysqlDriver::_Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength, bool do_timeout)
|
||||||
{
|
{
|
||||||
MYSQL *mysql = mysql_init(NULL);
|
MYSQL *mysql = mysql_init(NULL);
|
||||||
|
|
||||||
@ -35,6 +45,11 @@ IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, s
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (do_timeout && info->max_timeout)
|
||||||
|
{
|
||||||
|
mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&(info->max_timeout));
|
||||||
|
}
|
||||||
|
|
||||||
if (mysql_real_connect(mysql,
|
if (mysql_real_connect(mysql,
|
||||||
info->host,
|
info->host,
|
||||||
info->user,
|
info->user,
|
||||||
@ -45,9 +60,13 @@ IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, s
|
|||||||
0) == NULL)
|
0) == NULL)
|
||||||
{
|
{
|
||||||
if (errcode)
|
if (errcode)
|
||||||
|
{
|
||||||
*errcode = mysql_errno(mysql);
|
*errcode = mysql_errno(mysql);
|
||||||
|
}
|
||||||
if (error && maxlength)
|
if (error && maxlength)
|
||||||
|
{
|
||||||
snprintf(error, maxlength, "%s", mysql_error(mysql));
|
snprintf(error, maxlength, "%s", mysql_error(mysql));
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,8 +9,11 @@ namespace SourceMod
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
IDatabase *Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength);
|
IDatabase *Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength);
|
||||||
|
IDatabase *Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength);
|
||||||
const char *NameString();
|
const char *NameString();
|
||||||
bool IsCompatDriver(const char *namestring);
|
bool IsCompatDriver(const char *namestring);
|
||||||
|
public:
|
||||||
|
IDatabase *_Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength, bool do_timeout);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -10,9 +10,11 @@
|
|||||||
|
|
||||||
struct AmxQueryInfo
|
struct AmxQueryInfo
|
||||||
{
|
{
|
||||||
|
AmxQueryInfo() : opt_ptr(NULL) { };
|
||||||
IQuery *pQuery;
|
IQuery *pQuery;
|
||||||
QueryInfo info;
|
QueryInfo info;
|
||||||
char error[255];
|
char error[255];
|
||||||
|
char *opt_ptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum HandleType
|
enum HandleType
|
||||||
@ -32,6 +34,7 @@ struct SQL_Connection
|
|||||||
char *pass;
|
char *pass;
|
||||||
char *db;
|
char *db;
|
||||||
int port;
|
int port;
|
||||||
|
unsigned int max_timeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*FREEHANDLE)(void *, unsigned int);
|
typedef void (*FREEHANDLE)(void *, unsigned int);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* to add multiple entries.
|
* to add multiple entries.
|
||||||
*/
|
*/
|
||||||
#define MODULE_NAME "MySQL"
|
#define MODULE_NAME "MySQL"
|
||||||
#define MODULE_VERSION "1.76"
|
#define MODULE_VERSION "1.76b"
|
||||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
||||||
#define MODULE_URL "http://www.amxmodx.org/"
|
#define MODULE_URL "http://www.amxmodx.org/"
|
||||||
#define MODULE_LOGTAG "MySQL"
|
#define MODULE_LOGTAG "MySQL"
|
||||||
|
@ -58,7 +58,7 @@ static cell AMX_NATIVE_CALL SQL_ThreadQuery(AMX *amx, cell *params)
|
|||||||
|
|
||||||
int len;
|
int len;
|
||||||
const char *handler = MF_GetAmxString(amx, params[2], 0, &len);
|
const char *handler = MF_GetAmxString(amx, params[2], 0, &len);
|
||||||
int fwd = MF_RegisterSPForwardByName(amx, handler, FP_CELL, FP_CELL, FP_STRING, FP_CELL, FP_ARRAY, FP_CELL, FP_DONE);
|
int fwd = MF_RegisterSPForwardByName(amx, handler, FP_CELL, FP_CELL, FP_STRING, FP_CELL, FP_ARRAY, FP_CELL, FP_CELL, FP_DONE);
|
||||||
if (fwd < 1)
|
if (fwd < 1)
|
||||||
{
|
{
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "Function not found: %s", handler);
|
MF_LogError(amx, AMX_ERR_NATIVE, "Function not found: %s", handler);
|
||||||
@ -76,7 +76,7 @@ static cell AMX_NATIVE_CALL SQL_ThreadQuery(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
g_QueueLock->Unlock();
|
g_QueueLock->Unlock();
|
||||||
|
|
||||||
kmThread->SetInfo(cn->host, cn->user, cn->pass, cn->db, cn->port);
|
kmThread->SetInfo(cn->host, cn->user, cn->pass, cn->db, cn->port, cn->max_timeout);
|
||||||
kmThread->SetForward(fwd);
|
kmThread->SetForward(fwd);
|
||||||
kmThread->SetQuery(MF_GetAmxString(amx, params[3], 1, &len));
|
kmThread->SetQuery(MF_GetAmxString(amx, params[3], 1, &len));
|
||||||
kmThread->SetCellData(MF_GetAmxAddr(amx, params[4]), (ucell)params[5]);
|
kmThread->SetCellData(MF_GetAmxAddr(amx, params[4]), (ucell)params[5]);
|
||||||
@ -126,13 +126,15 @@ void MysqlThread::SetForward(int forward)
|
|||||||
m_fwd = forward;
|
m_fwd = forward;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MysqlThread::SetInfo(const char *host, const char *user, const char *pass, const char *db, int port)
|
void MysqlThread::SetInfo(const char *host, const char *user, const char *pass, const char *db, int port, unsigned int max_timeout)
|
||||||
{
|
{
|
||||||
m_host.assign(host);
|
m_host.assign(host);
|
||||||
m_user.assign(user);
|
m_user.assign(user);
|
||||||
m_pass.assign(pass);
|
m_pass.assign(pass);
|
||||||
m_db.assign(db);
|
m_db.assign(db);
|
||||||
|
m_max_timeout = m_max_timeout;
|
||||||
m_port = port;
|
m_port = port;
|
||||||
|
m_qrInfo.queue_time = gpGlobals->time;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MysqlThread::SetQuery(const char *query)
|
void MysqlThread::SetQuery(const char *query)
|
||||||
@ -149,10 +151,15 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
|
|||||||
info.user = m_user.c_str();
|
info.user = m_user.c_str();
|
||||||
info.host = m_host.c_str();
|
info.host = m_host.c_str();
|
||||||
info.port = m_port;
|
info.port = m_port;
|
||||||
|
info.max_timeout = m_max_timeout;
|
||||||
|
|
||||||
|
float save_time = m_qrInfo.queue_time;
|
||||||
|
|
||||||
memset(&m_qrInfo, 0, sizeof(m_qrInfo));
|
memset(&m_qrInfo, 0, sizeof(m_qrInfo));
|
||||||
|
|
||||||
IDatabase *pDatabase = g_Mysql.Connect(&info, &m_qrInfo.amxinfo.info.errorcode, m_qrInfo.amxinfo.error, 254);
|
m_qrInfo.queue_time = save_time;
|
||||||
|
|
||||||
|
IDatabase *pDatabase = g_Mysql.Connect2(&info, &m_qrInfo.amxinfo.info.errorcode, m_qrInfo.amxinfo.error, 254);
|
||||||
IQuery *pQuery = NULL;
|
IQuery *pQuery = NULL;
|
||||||
if (!pDatabase)
|
if (!pDatabase)
|
||||||
{
|
{
|
||||||
@ -172,11 +179,15 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
|
|||||||
if (m_qrInfo.query_success && m_qrInfo.amxinfo.info.rs)
|
if (m_qrInfo.query_success && m_qrInfo.amxinfo.info.rs)
|
||||||
{
|
{
|
||||||
m_atomicResult.CopyFrom(m_qrInfo.amxinfo.info.rs);
|
m_atomicResult.CopyFrom(m_qrInfo.amxinfo.info.rs);
|
||||||
m_qrInfo.amxinfo.pQuery = pQuery;
|
|
||||||
m_qrInfo.amxinfo.info.rs = &m_atomicResult;
|
m_qrInfo.amxinfo.info.rs = &m_atomicResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pQuery)
|
||||||
|
{
|
||||||
|
m_qrInfo.amxinfo.pQuery = pQuery;
|
||||||
} else {
|
} else {
|
||||||
pQuery->FreeHandle();
|
m_qrInfo.amxinfo.opt_ptr = new char[m_query.size() + 1];
|
||||||
pQuery = NULL;
|
strcpy(m_qrInfo.amxinfo.opt_ptr, m_query.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pDatabase)
|
if (pDatabase)
|
||||||
@ -228,31 +239,37 @@ void MysqlThread::Execute()
|
|||||||
} else if (!m_qrInfo.query_success) {
|
} else if (!m_qrInfo.query_success) {
|
||||||
state = -1;
|
state = -1;
|
||||||
}
|
}
|
||||||
|
float diff = gpGlobals->time - m_qrInfo.queue_time;
|
||||||
|
cell c_diff = amx_ftoc(diff);
|
||||||
|
unsigned int hndl = MakeHandle(&m_qrInfo.amxinfo, Handle_Query, NullFunc);
|
||||||
if (state != 0)
|
if (state != 0)
|
||||||
{
|
{
|
||||||
MF_ExecuteForward(m_fwd,
|
MF_ExecuteForward(m_fwd,
|
||||||
(cell)state,
|
(cell)state,
|
||||||
(cell)0,
|
(cell)hndl,
|
||||||
m_qrInfo.amxinfo.error,
|
m_qrInfo.amxinfo.error,
|
||||||
m_qrInfo.amxinfo.info.errorcode,
|
m_qrInfo.amxinfo.info.errorcode,
|
||||||
data_addr,
|
data_addr,
|
||||||
m_datalen);
|
m_datalen,
|
||||||
|
c_diff);
|
||||||
} else {
|
} else {
|
||||||
unsigned int hndl = MakeHandle(&m_qrInfo.amxinfo, Handle_Query, NullFunc);
|
|
||||||
MF_ExecuteForward(m_fwd,
|
MF_ExecuteForward(m_fwd,
|
||||||
(cell)0,
|
(cell)0,
|
||||||
(cell)hndl,
|
(cell)hndl,
|
||||||
"",
|
"",
|
||||||
(cell)0,
|
(cell)0,
|
||||||
data_addr,
|
data_addr,
|
||||||
m_datalen);
|
m_datalen,
|
||||||
/* this should always be true I think */
|
c_diff);
|
||||||
if (m_qrInfo.amxinfo.pQuery)
|
|
||||||
{
|
|
||||||
m_qrInfo.amxinfo.pQuery->FreeHandle();
|
|
||||||
}
|
|
||||||
FreeHandle(hndl);
|
|
||||||
}
|
}
|
||||||
|
FreeHandle(hndl);
|
||||||
|
if (m_qrInfo.amxinfo.pQuery)
|
||||||
|
{
|
||||||
|
m_qrInfo.amxinfo.pQuery->FreeHandle();
|
||||||
|
m_qrInfo.amxinfo.pQuery = NULL;
|
||||||
|
}
|
||||||
|
delete [] m_qrInfo.amxinfo.opt_ptr;
|
||||||
|
m_qrInfo.amxinfo.opt_ptr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************
|
/*****************
|
||||||
|
@ -12,6 +12,7 @@ struct QueuedResultInfo
|
|||||||
AmxQueryInfo amxinfo;
|
AmxQueryInfo amxinfo;
|
||||||
bool connect_success;
|
bool connect_success;
|
||||||
bool query_success;
|
bool query_success;
|
||||||
|
float queue_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AtomicResult :
|
class AtomicResult :
|
||||||
@ -59,7 +60,7 @@ public:
|
|||||||
MysqlThread();
|
MysqlThread();
|
||||||
~MysqlThread();
|
~MysqlThread();
|
||||||
public:
|
public:
|
||||||
void SetInfo(const char *host, const char *user, const char *pass, const char *db, int port);
|
void SetInfo(const char *host, const char *user, const char *pass, const char *db, int port, unsigned int max_timeout);
|
||||||
void SetQuery(const char *query);
|
void SetQuery(const char *query);
|
||||||
void SetCellData(cell data[], ucell len);
|
void SetCellData(cell data[], ucell len);
|
||||||
void SetForward(int forward);
|
void SetForward(int forward);
|
||||||
@ -74,6 +75,7 @@ private:
|
|||||||
SourceHook::String m_user;
|
SourceHook::String m_user;
|
||||||
SourceHook::String m_pass;
|
SourceHook::String m_pass;
|
||||||
SourceHook::String m_db;
|
SourceHook::String m_db;
|
||||||
|
unsigned int m_max_timeout;
|
||||||
int m_port;
|
int m_port;
|
||||||
cell *m_data;
|
cell *m_data;
|
||||||
ucell m_datalen;
|
ucell m_datalen;
|
||||||
|
@ -382,13 +382,16 @@ static cell AMX_NATIVE_CALL SQL_FieldNumToName(AMX *amx, cell *params)
|
|||||||
static cell AMX_NATIVE_CALL SQL_GetQueryString(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL SQL_GetQueryString(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query);
|
AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query);
|
||||||
if (!qInfo)
|
|
||||||
|
if (!qInfo || (!qInfo->pQuery && !qInfo->opt_ptr))
|
||||||
{
|
{
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]);
|
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return MF_SetAmxString(amx, params[2], qInfo->pQuery->GetQueryString(), params[3]);
|
const char *ptr = qInfo->pQuery ? qInfo->pQuery->GetQueryString() : qInfo->opt_ptr;
|
||||||
|
|
||||||
|
return MF_SetAmxString(amx, params[2], ptr, params[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL SQL_FieldNameToNum(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL SQL_FieldNameToNum(AMX *amx, cell *params)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
// Module info
|
// Module info
|
||||||
#define MODULE_NAME "SQLite"
|
#define MODULE_NAME "SQLite"
|
||||||
#define MODULE_VERSION "1.76"
|
#define MODULE_VERSION "1.76b"
|
||||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
||||||
#define MODULE_URL "http://www.amxmodx.org/"
|
#define MODULE_URL "http://www.amxmodx.org/"
|
||||||
#define MODULE_LOGTAG "SQLITE"
|
#define MODULE_LOGTAG "SQLITE"
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
namespace SourceHook
|
namespace SourceHook
|
||||||
{
|
{
|
||||||
|
|
||||||
//This class is from CSDM for AMX Mod X
|
//This class is from CSDM for AMX Mod X
|
||||||
/*
|
/*
|
||||||
A circular, doubly-linked list with one sentinel node
|
A circular, doubly-linked list with one sentinel node
|
||||||
|
@ -10,9 +10,11 @@
|
|||||||
|
|
||||||
struct AmxQueryInfo
|
struct AmxQueryInfo
|
||||||
{
|
{
|
||||||
|
AmxQueryInfo() : opt_ptr(NULL) { };
|
||||||
IQuery *pQuery;
|
IQuery *pQuery;
|
||||||
QueryInfo info;
|
QueryInfo info;
|
||||||
char error[255];
|
char error[255];
|
||||||
|
char *opt_ptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum HandleType
|
enum HandleType
|
||||||
|
@ -54,6 +54,9 @@ void ThreadWorker::RunThread(IThreadHandle *pHandle)
|
|||||||
/**
|
/**
|
||||||
* Check number of items in the queue
|
* Check number of items in the queue
|
||||||
*/
|
*/
|
||||||
|
m_StateLock->Lock();
|
||||||
|
this_state = m_state;
|
||||||
|
m_StateLock->Unlock();
|
||||||
if (this_state != Worker_Stopped)
|
if (this_state != Worker_Stopped)
|
||||||
{
|
{
|
||||||
m_QueueLock->Lock();
|
m_QueueLock->Lock();
|
||||||
@ -65,6 +68,11 @@ void ThreadWorker::RunThread(IThreadHandle *pHandle)
|
|||||||
*/
|
*/
|
||||||
m_Waiting = true;
|
m_Waiting = true;
|
||||||
m_QueueLock->Unlock();
|
m_QueueLock->Unlock();
|
||||||
|
/* first check if we should end again */
|
||||||
|
if (this_state == Worker_Stopped)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
m_AddSignal->Wait();
|
m_AddSignal->Wait();
|
||||||
m_Waiting = false;
|
m_Waiting = false;
|
||||||
} else {
|
} else {
|
||||||
@ -80,7 +88,9 @@ void ThreadWorker::RunThread(IThreadHandle *pHandle)
|
|||||||
{
|
{
|
||||||
//wait until the lock is cleared.
|
//wait until the lock is cleared.
|
||||||
if (this_state == Worker_Paused)
|
if (this_state == Worker_Paused)
|
||||||
|
{
|
||||||
m_PauseSignal->Wait();
|
m_PauseSignal->Wait();
|
||||||
|
}
|
||||||
if (this_state == Worker_Stopped)
|
if (this_state == Worker_Stopped)
|
||||||
{
|
{
|
||||||
//if we're supposed to flush cleanrly,
|
//if we're supposed to flush cleanrly,
|
||||||
@ -187,9 +197,12 @@ bool ThreadWorker::Stop(bool flush_cancel)
|
|||||||
{
|
{
|
||||||
Unpause();
|
Unpause();
|
||||||
} else {
|
} else {
|
||||||
m_AddSignal->Signal();
|
m_QueueLock->Lock();
|
||||||
Pause();
|
if (m_Waiting)
|
||||||
Unpause();
|
{
|
||||||
|
m_AddSignal->Signal();
|
||||||
|
}
|
||||||
|
m_QueueLock->Unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
me->WaitForThread();
|
me->WaitForThread();
|
||||||
|
@ -97,7 +97,7 @@ IThreadHandle *WinThreader::MakeThread(IThread *pThread, const ThreadParams *par
|
|||||||
|
|
||||||
IEventSignal *WinThreader::MakeEventSignal()
|
IEventSignal *WinThreader::MakeEventSignal()
|
||||||
{
|
{
|
||||||
HANDLE event = CreateEventA(NULL, TRUE, TRUE, NULL);
|
HANDLE event = CreateEventA(NULL, FALSE, FALSE, NULL);
|
||||||
|
|
||||||
if (!event)
|
if (!event)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -275,7 +275,6 @@ WinThreader::WinEvent::~WinEvent()
|
|||||||
void WinThreader::WinEvent::Wait()
|
void WinThreader::WinEvent::Wait()
|
||||||
{
|
{
|
||||||
WaitForSingleObject(m_event, INFINITE);
|
WaitForSingleObject(m_event, INFINITE);
|
||||||
ResetEvent(m_event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WinThreader::WinEvent::Signal()
|
void WinThreader::WinEvent::Signal()
|
||||||
|
@ -129,6 +129,7 @@ void MysqlThread::SetForward(int forward)
|
|||||||
void MysqlThread::SetInfo(const char *db)
|
void MysqlThread::SetInfo(const char *db)
|
||||||
{
|
{
|
||||||
m_db.assign(db);
|
m_db.assign(db);
|
||||||
|
m_qrInfo.queue_time = gpGlobals->time;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MysqlThread::SetQuery(const char *query)
|
void MysqlThread::SetQuery(const char *query)
|
||||||
@ -146,8 +147,12 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
|
|||||||
info.host = "";
|
info.host = "";
|
||||||
info.port = 0;
|
info.port = 0;
|
||||||
|
|
||||||
|
float save_time = m_qrInfo.queue_time;
|
||||||
|
|
||||||
memset(&m_qrInfo, 0, sizeof(m_qrInfo));
|
memset(&m_qrInfo, 0, sizeof(m_qrInfo));
|
||||||
|
|
||||||
|
m_qrInfo.queue_time = save_time;
|
||||||
|
|
||||||
IDatabase *pDatabase = g_Sqlite.Connect(&info, &m_qrInfo.amxinfo.info.errorcode, m_qrInfo.amxinfo.error, 254);
|
IDatabase *pDatabase = g_Sqlite.Connect(&info, &m_qrInfo.amxinfo.info.errorcode, m_qrInfo.amxinfo.error, 254);
|
||||||
IQuery *pQuery = NULL;
|
IQuery *pQuery = NULL;
|
||||||
if (!pDatabase)
|
if (!pDatabase)
|
||||||
@ -168,15 +173,17 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
|
|||||||
if (m_qrInfo.query_success && m_qrInfo.amxinfo.info.rs)
|
if (m_qrInfo.query_success && m_qrInfo.amxinfo.info.rs)
|
||||||
{
|
{
|
||||||
m_atomicResult.CopyFrom(m_qrInfo.amxinfo.info.rs);
|
m_atomicResult.CopyFrom(m_qrInfo.amxinfo.info.rs);
|
||||||
m_qrInfo.amxinfo.pQuery = NULL;
|
|
||||||
m_qrInfo.amxinfo.info.rs = &m_atomicResult;
|
m_qrInfo.amxinfo.info.rs = &m_atomicResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pQuery)
|
if (pQuery)
|
||||||
{
|
{
|
||||||
pQuery->FreeHandle();
|
m_qrInfo.amxinfo.pQuery = pQuery;
|
||||||
pQuery = NULL;
|
} else {
|
||||||
|
m_qrInfo.amxinfo.opt_ptr = new char[m_query.size() + 1];
|
||||||
|
strcpy(m_qrInfo.amxinfo.opt_ptr, m_query.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pDatabase)
|
if (pDatabase)
|
||||||
{
|
{
|
||||||
pDatabase->FreeHandle();
|
pDatabase->FreeHandle();
|
||||||
@ -226,26 +233,37 @@ void MysqlThread::Execute()
|
|||||||
} else if (!m_qrInfo.query_success) {
|
} else if (!m_qrInfo.query_success) {
|
||||||
state = -1;
|
state = -1;
|
||||||
}
|
}
|
||||||
|
float diff = gpGlobals->time - m_qrInfo.queue_time;
|
||||||
|
cell c_diff = amx_ftoc(diff);
|
||||||
|
unsigned int hndl = MakeHandle(&m_qrInfo.amxinfo, Handle_Query, NullFunc);
|
||||||
if (state != 0)
|
if (state != 0)
|
||||||
{
|
{
|
||||||
MF_ExecuteForward(m_fwd,
|
MF_ExecuteForward(m_fwd,
|
||||||
(cell)state,
|
(cell)state,
|
||||||
(cell)0,
|
(cell)hndl,
|
||||||
m_qrInfo.amxinfo.error,
|
m_qrInfo.amxinfo.error,
|
||||||
m_qrInfo.amxinfo.info.errorcode,
|
m_qrInfo.amxinfo.info.errorcode,
|
||||||
data_addr,
|
data_addr,
|
||||||
m_datalen);
|
m_datalen,
|
||||||
|
c_diff);
|
||||||
} else {
|
} else {
|
||||||
unsigned int hndl = MakeHandle(&m_qrInfo.amxinfo, Handle_Query, NullFunc);
|
|
||||||
MF_ExecuteForward(m_fwd,
|
MF_ExecuteForward(m_fwd,
|
||||||
(cell)0,
|
(cell)0,
|
||||||
(cell)hndl,
|
(cell)hndl,
|
||||||
"",
|
"",
|
||||||
(cell)0,
|
(cell)0,
|
||||||
data_addr,
|
data_addr,
|
||||||
m_datalen);
|
m_datalen,
|
||||||
FreeHandle(hndl);
|
c_diff);
|
||||||
}
|
}
|
||||||
|
FreeHandle(hndl);
|
||||||
|
if (m_qrInfo.amxinfo.pQuery)
|
||||||
|
{
|
||||||
|
m_qrInfo.amxinfo.pQuery->FreeHandle();
|
||||||
|
m_qrInfo.amxinfo.pQuery = NULL;
|
||||||
|
}
|
||||||
|
delete [] m_qrInfo.amxinfo.opt_ptr;
|
||||||
|
m_qrInfo.amxinfo.opt_ptr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************
|
/*****************
|
||||||
|
@ -12,6 +12,7 @@ struct QueuedResultInfo
|
|||||||
AmxQueryInfo amxinfo;
|
AmxQueryInfo amxinfo;
|
||||||
bool connect_success;
|
bool connect_success;
|
||||||
bool query_success;
|
bool query_success;
|
||||||
|
float queue_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AtomicResult :
|
class AtomicResult :
|
||||||
|
@ -115,7 +115,7 @@ AutoIncBuild=1
|
|||||||
MajorVer=1
|
MajorVer=1
|
||||||
MinorVer=4
|
MinorVer=4
|
||||||
Release=3
|
Release=3
|
||||||
Build=0
|
Build=1
|
||||||
Debug=0
|
Debug=0
|
||||||
PreRelease=0
|
PreRelease=0
|
||||||
Special=0
|
Special=0
|
||||||
@ -126,11 +126,11 @@ CodePage=1252
|
|||||||
[Version Info Keys]
|
[Version Info Keys]
|
||||||
CompanyName=AMX Mod X Dev Team
|
CompanyName=AMX Mod X Dev Team
|
||||||
FileDescription=
|
FileDescription=
|
||||||
FileVersion=1.4.3.0
|
FileVersion=1.4.3.1
|
||||||
InternalName=
|
InternalName=
|
||||||
LegalCopyright=AMX Mod X Dev Team
|
LegalCopyright=AMX Mod X Dev Team
|
||||||
LegalTrademarks=
|
LegalTrademarks=
|
||||||
OriginalFilename=
|
OriginalFilename=
|
||||||
ProductName=AMXX-Studio
|
ProductName=AMXX-Studio
|
||||||
ProductVersion=1.4.3.0
|
ProductVersion=1.4.3 final
|
||||||
Comments=
|
Comments=
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -800,6 +800,8 @@ begin
|
|||||||
eCurrLine := Between(eCurrLine, '(', ')', True);
|
eCurrLine := Between(eCurrLine, '(', ')', True);
|
||||||
HideBracesAndStrings(eCurrLine, True);
|
HideBracesAndStrings(eCurrLine, True);
|
||||||
eStr2.Text := StringReplace(eCurrLine, ',', #13, [rfReplaceAll]);
|
eStr2.Text := StringReplace(eCurrLine, ',', #13, [rfReplaceAll]);
|
||||||
|
if (Trim(eStr2.Text) = ')') then
|
||||||
|
eStr2.Clear;
|
||||||
|
|
||||||
CreateCategory('Function Call');
|
CreateCategory('Function Call');
|
||||||
AddField('Function', 'Function Call', eVarName);
|
AddField('Function', 'Function Call', eVarName);
|
||||||
|
@ -176,7 +176,7 @@ begin
|
|||||||
eTempIndent := eTempIndent +1;
|
eTempIndent := eTempIndent +1;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else if (eStr[i] = 'else') or (Pos('else if', eStr[i]) = 1) and (Pos('{', eStr[i]) = 0) then
|
else if (eStr[i] = 'else') or ((Pos('else if', eStr[i]) = 1) or (Pos('case', eStr[i]) = 1) or (Pos('switch', eStr[i]) = 1)) and (Pos('{', eStr[i]) = 0) then
|
||||||
eTempIndent := eTempIndent +1
|
eTempIndent := eTempIndent +1
|
||||||
else if (Pos('{', eStr[i]) = 0) and (Length(eStr[i]) > 6) then begin
|
else if (Pos('{', eStr[i]) = 0) and (Length(eStr[i]) > 6) then begin
|
||||||
if (IsAtStart('stock', eStr[i], False)) or (IsAtStart('while', eStr[i], True)) then begin
|
if (IsAtStart('stock', eStr[i], False)) or (IsAtStart('while', eStr[i], True)) then begin
|
||||||
|
@ -751,6 +751,8 @@ begin
|
|||||||
else
|
else
|
||||||
eCPUSpeed := 1; // otherwise the program would hang up
|
eCPUSpeed := 1; // otherwise the program would hang up
|
||||||
frmSettings.txtLangDir.Text := IncludeTrailingPathDelimiter(eConfig.ReadString('Misc', 'LangDir', ''));
|
frmSettings.txtLangDir.Text := IncludeTrailingPathDelimiter(eConfig.ReadString('Misc', 'LangDir', ''));
|
||||||
|
if (frmSettings.txtLangDir.Text = '\') then
|
||||||
|
frmSettings.txtLangDir.Text := '';
|
||||||
frmSettings.chkShowStatusbar.Checked := eConfig.ReadBool('Misc', 'ShowStatusbar', True);
|
frmSettings.chkShowStatusbar.Checked := eConfig.ReadBool('Misc', 'ShowStatusbar', True);
|
||||||
frmMain.sbStatus.Visible := frmSettings.chkShowStatusbar.Checked;
|
frmMain.sbStatus.Visible := frmSettings.chkShowStatusbar.Checked;
|
||||||
end;
|
end;
|
||||||
|
@ -63,6 +63,7 @@ var i, k: integer;
|
|||||||
eTempResult: TPawnParseResult;
|
eTempResult: TPawnParseResult;
|
||||||
eProcedureAdded: Boolean;
|
eProcedureAdded: Boolean;
|
||||||
eCActive: Boolean;
|
eCActive: Boolean;
|
||||||
|
eTempBool: Boolean;
|
||||||
begin
|
begin
|
||||||
Result := TPawnParseResult.Create;
|
Result := TPawnParseResult.Create;
|
||||||
if not IsRecursive then
|
if not IsRecursive then
|
||||||
@ -101,30 +102,39 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
{ Constants and Variables }
|
{ Constants and Variables }
|
||||||
if (IsAtStart('new', eString, False)) or (IsAtStart('stock', eString, False)) then begin // const or variable
|
if (IsAtStart('new', eString, False)) or (IsAtStart('const', eString, False)) or (IsAtStart('stock', eString, False)) then begin // const or variable
|
||||||
if (eBracesOpen = 0) and (not IsRecursive) and (Pos('(', eString) = Pos(')', eString)) then begin
|
if (eBracesOpen = 0) and (not IsRecursive) and (Pos('(', eString) = Pos(')', eString)) then begin
|
||||||
Delete(eString, 1, Pos(#32, eString));
|
|
||||||
eString := Trim(eString);
|
|
||||||
// we don't need braces so delete them...
|
// we don't need braces so delete them...
|
||||||
while (CountChars(eString, '{') <> 0) and (CountChars(eString, '}') <> 0) and (Pos('{', eString) < Pos('}', eString)) do
|
while (CountChars(eString, '{') <> 0) and (CountChars(eString, '}') <> 0) and (Pos('{', eString) < Pos('}', eString)) do
|
||||||
eString := StringReplace(eString, '{' + Between(eString, '{', '}') + '}', '', [rfReplaceAll]);
|
eString := StringReplace(eString, '{' + Between(eString, '{', '}') + '}', '', [rfReplaceAll]);
|
||||||
while (CountChars(eString, '[') <> 0) and (CountChars(eString, ']') <> 0) and (Pos('[', eString) < Pos(']', eString)) do
|
while (CountChars(eString, '[') <> 0) and (CountChars(eString, ']') <> 0) and (Pos('[', eString) < Pos(']', eString)) do
|
||||||
eString := StringReplace(eString, '[' + Between(eString, '[', ']') + ']', '', [rfReplaceAll]);
|
eString := StringReplace(eString, '[' + Between(eString, '[', ']') + ']', '', [rfReplaceAll]);
|
||||||
// done? okay, split all items if there are more than one; and if not, it's okay...
|
// done? okay, split all items if there are more than one; and if not, it's okay...
|
||||||
eStr.Text := StringReplace(eString, ',', #13, [rfReplaceAll]);
|
eStr.Text := StringReplace(Copy(eString, Pos(#32, eString)+1, Length(eString)), ',', #13, [rfReplaceAll]);
|
||||||
for k := 0 to eStr.Count - 1 do begin
|
for k := 0 to eStr.Count - 1 do begin
|
||||||
if (Trim(eStr[k]) <> '') and (eStr[k] <> '}') then begin
|
if (Trim(eStr[k]) <> '') and (eStr[k] <> '}') then begin
|
||||||
eTemp := Trim(RemoveSemicolon(eStr[k]));
|
eTemp := Trim(RemoveSemicolon(eStr[k]));
|
||||||
|
|
||||||
if Pos(':', eTemp) <> 0 then
|
if (IsAtStart('const', eTemp, False)) then begin
|
||||||
|
Delete(eTemp, 1, 5);
|
||||||
|
eTemp := Trim(eTemp);
|
||||||
|
eTempBool := True;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
eTempBool := (IsAtStart('const', eString, False));
|
||||||
|
|
||||||
|
if (Pos(':', eTemp) <> 0) then
|
||||||
eTemp := Copy(eTemp, Pos(':', eTemp) + 1, Length(eTemp));
|
eTemp := Copy(eTemp, Pos(':', eTemp) + 1, Length(eTemp));
|
||||||
|
|
||||||
if Pos('=', eTemp) <> 0 then begin // constant
|
if (Pos('=', eTemp) <> 0) then begin // constant
|
||||||
Result.Constants.AddObject(Copy(eTemp, 1, Pos('=', eTemp) - 1), TObject(i));
|
Result.Constants.AddObject(Copy(eTemp, 1, Pos('=', eTemp) - 1), TObject(i));
|
||||||
Result.AutoComplete.Add(Copy(eTemp, 1, Pos('=', eTemp) - 1));
|
Result.AutoComplete.Add(Copy(eTemp, 1, Pos('=', eTemp) - 1));
|
||||||
end
|
end
|
||||||
else begin // variable
|
else begin // variable
|
||||||
Result.Variables.AddObject(eTemp, TObject(i));
|
if (eTempBool) then
|
||||||
|
Result.Constants.AddObject(eTemp, TObject(i))
|
||||||
|
else
|
||||||
|
Result.Variables.AddObject(eTemp, TObject(i));
|
||||||
Result.AutoComplete.Add(eTemp);
|
Result.AutoComplete.Add(eTemp);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -229,7 +239,7 @@ begin
|
|||||||
eStartLine := eStartLine - 1;
|
eStartLine := eStartLine - 1;
|
||||||
eTemp := Trim(RemoveSemicolon(Trim(eCode[eStartLine])));
|
eTemp := Trim(RemoveSemicolon(Trim(eCode[eStartLine])));
|
||||||
|
|
||||||
// Analyze type
|
// Analyze type
|
||||||
k := 0;
|
k := 0;
|
||||||
if IsAtStart('public', eTemp) then
|
if IsAtStart('public', eTemp) then
|
||||||
k := 1
|
k := 1
|
||||||
@ -243,7 +253,7 @@ begin
|
|||||||
k := 5;
|
k := 5;
|
||||||
|
|
||||||
|
|
||||||
// Remove type
|
// Remove type
|
||||||
if Pos('@', eTemp) = 1 then begin
|
if Pos('@', eTemp) = 1 then begin
|
||||||
eTemp := Copy(eTemp, 2, Length(eTemp));
|
eTemp := Copy(eTemp, 2, Length(eTemp));
|
||||||
k := 1;
|
k := 1;
|
||||||
@ -258,7 +268,7 @@ begin
|
|||||||
if eTemp[Length(eTemp)] = '{' then
|
if eTemp[Length(eTemp)] = '{' then
|
||||||
eTemp := Trim(Copy(eTemp, 1, Length(eTemp) - 1));
|
eTemp := Trim(Copy(eTemp, 1, Length(eTemp) - 1));
|
||||||
|
|
||||||
// Remove return-type
|
// Remove return-type
|
||||||
if (Pos(':', eTemp) <> 0) and (Pos(':', eTemp) < Pos('(', eTemp)) then
|
if (Pos(':', eTemp) <> 0) and (Pos(':', eTemp) < Pos('(', eTemp)) then
|
||||||
Delete(eTemp, 1, Pos(':', eTemp));
|
Delete(eTemp, 1, Pos(':', eTemp));
|
||||||
|
|
||||||
@ -275,7 +285,7 @@ begin
|
|||||||
4: Result.CallTips.Add(eTemp + '-> ' + FileName + ', forward');
|
4: Result.CallTips.Add(eTemp + '-> ' + FileName + ', forward');
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
// Copy function-name
|
// Copy function-name
|
||||||
if Pos('(', eTemp) <> 0 then
|
if Pos('(', eTemp) <> 0 then
|
||||||
eTemp := Copy(eTemp, 1, Pos('(', eTemp) - 1);
|
eTemp := Copy(eTemp, 1, Pos('(', eTemp) - 1);
|
||||||
eTemp := Trim(eTemp);
|
eTemp := Trim(eTemp);
|
||||||
|
Binary file not shown.
@ -9,13 +9,14 @@ uses
|
|||||||
|
|
||||||
type
|
type
|
||||||
TfrmGoToLine = class(TForm)
|
TfrmGoToLine = class(TForm)
|
||||||
|
pnlBG: TSpTBXPanel;
|
||||||
lblCaption: TLabel;
|
lblCaption: TLabel;
|
||||||
txtGoToLine: TSpTBXEdit;
|
|
||||||
cmdOK: TSpTBXButton;
|
|
||||||
cmdCancel: TSpTBXButton;
|
cmdCancel: TSpTBXButton;
|
||||||
procedure txtGoToLineChange(Sender: TObject);
|
cmdOK: TSpTBXButton;
|
||||||
|
txtGoToLine: TSpTBXEdit;
|
||||||
procedure txtGoToLineKeyPress(Sender: TObject; var Key: Char);
|
procedure txtGoToLineKeyPress(Sender: TObject; var Key: Char);
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
|
procedure txtGoToLineChange(Sender: TObject);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -27,14 +28,6 @@ uses UnitMainTools;
|
|||||||
|
|
||||||
{$R *.DFM}
|
{$R *.DFM}
|
||||||
|
|
||||||
procedure TfrmGoToLine.txtGoToLineChange(Sender: TObject);
|
|
||||||
begin
|
|
||||||
if not IsNumeric(txtGoToLine.Text) then
|
|
||||||
txtGoToLine.Text := '1'
|
|
||||||
else if txtGoToLine.Text = '0' then
|
|
||||||
txtGoToLine.Text := '1';
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TfrmGoToLine.txtGoToLineKeyPress(Sender: TObject; var Key: Char);
|
procedure TfrmGoToLine.txtGoToLineKeyPress(Sender: TObject; var Key: Char);
|
||||||
begin
|
begin
|
||||||
if Key = #13 then begin
|
if Key = #13 then begin
|
||||||
@ -46,6 +39,12 @@ end;
|
|||||||
procedure TfrmGoToLine.FormShow(Sender: TObject);
|
procedure TfrmGoToLine.FormShow(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
txtGoToLine.SetFocus;
|
txtGoToLine.SetFocus;
|
||||||
|
txtGoToLine.SelectAll;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmGoToLine.txtGoToLineChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
cmdOK.Enabled := StrToIntDef(txtGoToLine.Text, -1) > 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
object frmMain: TfrmMain
|
object frmMain: TfrmMain
|
||||||
Left = 189
|
Left = 184
|
||||||
Top = 114
|
Top = 77
|
||||||
Width = 888
|
Width = 893
|
||||||
Height = 648
|
Height = 648
|
||||||
Caption = 'AMXX-Studio'
|
Caption = 'AMXX-Studio'
|
||||||
Color = clBtnFace
|
Color = clBtnFace
|
||||||
@ -45,13 +45,13 @@ object frmMain: TfrmMain
|
|||||||
PixelsPerInch = 96
|
PixelsPerInch = 96
|
||||||
TextHeight = 13
|
TextHeight = 13
|
||||||
object splRight: TSplitter
|
object splRight: TSplitter
|
||||||
Left = 669
|
Left = 674
|
||||||
Top = 95
|
Top = 95
|
||||||
Height = 501
|
Height = 501
|
||||||
Align = alRight
|
Align = alRight
|
||||||
end
|
end
|
||||||
object spcRight1: TImage
|
object spcRight1: TImage
|
||||||
Left = 877
|
Left = 882
|
||||||
Top = 95
|
Top = 95
|
||||||
Width = 3
|
Width = 3
|
||||||
Height = 501
|
Height = 501
|
||||||
@ -67,7 +67,7 @@ object frmMain: TfrmMain
|
|||||||
object tbxTopDock: TSpTBXDock
|
object tbxTopDock: TSpTBXDock
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 880
|
Width = 885
|
||||||
Height = 72
|
Height = 72
|
||||||
object tbxMenu: TSpTBXToolbar
|
object tbxMenu: TSpTBXToolbar
|
||||||
Left = 0
|
Left = 0
|
||||||
@ -680,11 +680,11 @@ object frmMain: TfrmMain
|
|||||||
object sbStatus: TSpTBXStatusBar
|
object sbStatus: TSpTBXStatusBar
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 596
|
Top = 596
|
||||||
Width = 880
|
Width = 885
|
||||||
Height = 25
|
Height = 25
|
||||||
object mnuFilename: TSpTBXRightAlignSpacerItem
|
object mnuFilename: TSpTBXRightAlignSpacerItem
|
||||||
Caption = 'Untitled.sma'
|
Caption = 'Untitled.sma'
|
||||||
CustomWidth = 542
|
CustomWidth = 547
|
||||||
end
|
end
|
||||||
object sepStatus0: TSpTBXSeparatorItem
|
object sepStatus0: TSpTBXSeparatorItem
|
||||||
end
|
end
|
||||||
@ -728,7 +728,7 @@ object frmMain: TfrmMain
|
|||||||
object tbDocs: TJvTabBar
|
object tbDocs: TJvTabBar
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 72
|
Top = 72
|
||||||
Width = 880
|
Width = 885
|
||||||
RightClickSelect = False
|
RightClickSelect = False
|
||||||
Tabs = <
|
Tabs = <
|
||||||
item
|
item
|
||||||
@ -740,7 +740,7 @@ object frmMain: TfrmMain
|
|||||||
OnMouseDown = tbDocsMouseDown
|
OnMouseDown = tbDocsMouseDown
|
||||||
end
|
end
|
||||||
object tcTools: TSpTBXTabControl
|
object tcTools: TSpTBXTabControl
|
||||||
Left = 672
|
Left = 677
|
||||||
Top = 95
|
Top = 95
|
||||||
Width = 205
|
Width = 205
|
||||||
Height = 501
|
Height = 501
|
||||||
@ -950,7 +950,7 @@ object frmMain: TfrmMain
|
|||||||
object pnlParent: TPanel
|
object pnlParent: TPanel
|
||||||
Left = 3
|
Left = 3
|
||||||
Top = 95
|
Top = 95
|
||||||
Width = 666
|
Width = 671
|
||||||
Height = 501
|
Height = 501
|
||||||
Align = alClient
|
Align = alClient
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
@ -958,7 +958,7 @@ object frmMain: TfrmMain
|
|||||||
object splOutput: TSplitter
|
object splOutput: TSplitter
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 416
|
Top = 416
|
||||||
Width = 666
|
Width = 671
|
||||||
Height = 3
|
Height = 3
|
||||||
Cursor = crVSplit
|
Cursor = crVSplit
|
||||||
Align = alBottom
|
Align = alBottom
|
||||||
@ -967,7 +967,7 @@ object frmMain: TfrmMain
|
|||||||
object sciEditor: TScintilla
|
object sciEditor: TScintilla
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 666
|
Width = 671
|
||||||
Height = 416
|
Height = 416
|
||||||
Color = clWhite
|
Color = clWhite
|
||||||
Font.Charset = DEFAULT_CHARSET
|
Font.Charset = DEFAULT_CHARSET
|
||||||
@ -4493,7 +4493,7 @@ object frmMain: TfrmMain
|
|||||||
object lstOutput: TListBox
|
object lstOutput: TListBox
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 419
|
Top = 419
|
||||||
Width = 666
|
Width = 671
|
||||||
Height = 82
|
Height = 82
|
||||||
Align = alBottom
|
Align = alBottom
|
||||||
ItemHeight = 13
|
ItemHeight = 13
|
||||||
|
@ -1071,9 +1071,30 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.OnCodeSnippetClick(Sender: TObject);
|
procedure TfrmMain.OnCodeSnippetClick(Sender: TObject);
|
||||||
|
var Snippet, Indentation: String;
|
||||||
|
Line: Integer;
|
||||||
begin
|
begin
|
||||||
if Plugin_CodeSnippetClick(TSpTBXItem(Sender).Caption, GetCat, GetSnippet(GetCat, (Sender as TSpTBXItem).Caption)) then
|
if Plugin_CodeSnippetClick(TSpTBXItem(Sender).Caption, GetCat, GetSnippet(GetCat, (Sender as TSpTBXItem).Caption)) then begin
|
||||||
sciEditor.SelText := GetSnippet(GetCat, (Sender as TSpTBXItem).Caption);
|
Snippet := GetSnippet(GetCat, (Sender as TSpTBXItem).Caption);
|
||||||
|
if (Pos('!APPEND!' + #13, Snippet) = 1) then begin
|
||||||
|
Snippet := Copy(Snippet, Pos(#10, Snippet)+1, Length(Snippet));
|
||||||
|
Line := sciEditor.Lines.Add(Snippet);
|
||||||
|
end
|
||||||
|
else if (Pos('!INSERT!' + #13, Snippet) = 1) then begin
|
||||||
|
Indentation := sciEditor.Lines[sciEditor.GetCurrentLineNumber];
|
||||||
|
if (Trim(Indentation) <> '') then
|
||||||
|
Indentation := Copy(Indentation, 1, Pos(Copy(TrimLeft(Indentation), 1, 1), Indentation)-1);
|
||||||
|
Snippet := StringReplace(Snippet, #10, #10 + Indentation, [rfReplaceAll]);
|
||||||
|
Line := sciEditor.GetCurrentLineNumber;
|
||||||
|
sciEditor.Lines.Insert(Line, Copy(Snippet, Pos(#10, Snippet)+1, Length(Snippet)));
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
sciEditor.SelText := Snippet;
|
||||||
|
Line := sciEditor.GetCurrentLineNumber;
|
||||||
|
end;
|
||||||
|
|
||||||
|
sciEditor.GoToLine(Line);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.mnuCopyMessageClick(Sender: TObject);
|
procedure TfrmMain.mnuCopyMessageClick(Sender: TObject);
|
||||||
|
@ -64,7 +64,7 @@ object frmSettings: TfrmSettings
|
|||||||
Top = 0
|
Top = 0
|
||||||
Width = 351
|
Width = 351
|
||||||
Height = 260
|
Height = 260
|
||||||
ActivePage = jspCTSettings
|
ActivePage = jspCodeSnippets
|
||||||
PropagateEnable = False
|
PropagateEnable = False
|
||||||
Align = alClient
|
Align = alClient
|
||||||
OnChange = jplSettingsChange
|
OnChange = jplSettingsChange
|
||||||
@ -760,6 +760,9 @@ object frmSettings: TfrmSettings
|
|||||||
ScrollBars = ssBoth
|
ScrollBars = ssBoth
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
WantTabs = True
|
WantTabs = True
|
||||||
|
OnChange = txtCodeSnippetChange
|
||||||
|
OnEnter = txtCodeSnippetEnter
|
||||||
|
OnExit = txtCodeSnippetExit
|
||||||
OnKeyUp = txtCodeSnippetKeyUp
|
OnKeyUp = txtCodeSnippetKeyUp
|
||||||
end
|
end
|
||||||
object cmdCSAdd: TFlatButton
|
object cmdCSAdd: TFlatButton
|
||||||
|
@ -277,6 +277,9 @@ type
|
|||||||
procedure lvParamsDblClick(Sender: TObject);
|
procedure lvParamsDblClick(Sender: TObject);
|
||||||
procedure cmdAddFunctionClick(Sender: TObject);
|
procedure cmdAddFunctionClick(Sender: TObject);
|
||||||
procedure lstFunctionsClick(Sender: TObject);
|
procedure lstFunctionsClick(Sender: TObject);
|
||||||
|
procedure txtCodeSnippetEnter(Sender: TObject);
|
||||||
|
procedure txtCodeSnippetExit(Sender: TObject);
|
||||||
|
procedure txtCodeSnippetChange(Sender: TObject);
|
||||||
public
|
public
|
||||||
Foreground, Background: TColor;
|
Foreground, Background: TColor;
|
||||||
CaretFore, CaretBack: TColor;
|
CaretFore, CaretBack: TColor;
|
||||||
@ -339,9 +342,14 @@ begin
|
|||||||
eReg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False);
|
eReg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False);
|
||||||
{ AMXX }
|
{ AMXX }
|
||||||
AMXXDir := eReg.ReadString('ProgramFilesDir') + '\AMX Mod X\';
|
AMXXDir := eReg.ReadString('ProgramFilesDir') + '\AMX Mod X\';
|
||||||
if not DirectoryExists(AMXXDir) then
|
if DirectoryExists(AMXXDir) then
|
||||||
|
AMXXDir := IncludeTrailingPathDelimiter(AMXXDir)
|
||||||
|
else
|
||||||
AMXXDir := '';
|
AMXXDir := '';
|
||||||
eReg.CloseKey;
|
eReg.CloseKey;
|
||||||
|
{ Language Files }
|
||||||
|
if (DirectoryExists(AMXXDir + 'files\base\data\lang')) then
|
||||||
|
txtLangDir.Text := AMXXDir + 'files\base\data\lang';
|
||||||
{ Steam }
|
{ Steam }
|
||||||
if eReg.KeyExists('SOFTWARE\Valve\Steam') then begin
|
if eReg.KeyExists('SOFTWARE\Valve\Steam') then begin
|
||||||
eReg.OpenKey('SOFTWARE\Valve\Steam', False);
|
eReg.OpenKey('SOFTWARE\Valve\Steam', False);
|
||||||
@ -421,7 +429,7 @@ begin
|
|||||||
eConfig.WriteString('Misc', 'DefaultPluginAuthor', GetUser);
|
eConfig.WriteString('Misc', 'DefaultPluginAuthor', GetUser);
|
||||||
eConfig.WriteInteger('Misc', 'SaveNotesTo', 0);
|
eConfig.WriteInteger('Misc', 'SaveNotesTo', 0);
|
||||||
eConfig.WriteInteger('Misc', 'CPUSpeed', 5);
|
eConfig.WriteInteger('Misc', 'CPUSpeed', 5);
|
||||||
eConfig.WriteString('Misc', 'LangDir', '');
|
eConfig.WriteString('Misc', 'LangDir', txtLangDir.Text);
|
||||||
eConfig.WriteInteger('Misc', 'ShowStatusbar', 1);
|
eConfig.WriteInteger('Misc', 'ShowStatusbar', 1);
|
||||||
eConfig.WriteInteger('Misc', 'WindowState', 0);
|
eConfig.WriteInteger('Misc', 'WindowState', 0);
|
||||||
end;
|
end;
|
||||||
@ -434,6 +442,8 @@ begin
|
|||||||
2: frmMain.WindowState := wsMinimized;
|
2: frmMain.WindowState := wsMinimized;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
txtCodeSnippetExit(Sender);
|
||||||
|
|
||||||
PaintForeground(clBlack);
|
PaintForeground(clBlack);
|
||||||
PaintBackground(clBlack);
|
PaintBackground(clBlack);
|
||||||
PaintCaretFore(clBlack);
|
PaintCaretFore(clBlack);
|
||||||
@ -778,6 +788,7 @@ begin
|
|||||||
lstCodeSnippets.ItemIndex := lstCodeSnippets.Items.Add(eStr);
|
lstCodeSnippets.ItemIndex := lstCodeSnippets.Items.Add(eStr);
|
||||||
AddSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], eStr, '');
|
AddSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], eStr, '');
|
||||||
txtCodeSnippet.Enabled := True;
|
txtCodeSnippet.Enabled := True;
|
||||||
|
lstCodeSnippets.SetFocus;
|
||||||
lstCodeSnippetsClick(Sender);
|
lstCodeSnippetsClick(Sender);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -805,7 +816,9 @@ procedure TfrmSettings.lstCodeSnippetsClick(Sender: TObject);
|
|||||||
begin
|
begin
|
||||||
cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1;
|
cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1;
|
||||||
if cmdCSRemove.Enabled then
|
if cmdCSRemove.Enabled then
|
||||||
txtCodeSnippet.Lines.Text := GetSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], lstCodeSnippets.Items[lstCodeSnippets.ItemIndex]);
|
txtCodeSnippet.Lines.Text := GetSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], lstCodeSnippets.Items[lstCodeSnippets.ItemIndex])
|
||||||
|
else
|
||||||
|
txtCodeSnippetExit(Sender);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmSettings.ftcCodeSnippetsTabChanged(Sender: TObject);
|
procedure TfrmSettings.ftcCodeSnippetsTabChanged(Sender: TObject);
|
||||||
@ -815,8 +828,8 @@ begin
|
|||||||
lstCodeSnippets.ItemIndex := 0
|
lstCodeSnippets.ItemIndex := 0
|
||||||
else
|
else
|
||||||
txtCodeSnippet.Clear;
|
txtCodeSnippet.Clear;
|
||||||
lstCodeSnippetsClick(Sender);
|
|
||||||
txtCodeSnippet.Enabled := lstCodeSnippets.Items.Count > 0;
|
txtCodeSnippet.Enabled := lstCodeSnippets.Items.Count > 0;
|
||||||
|
lstCodeSnippetsClick(Sender);
|
||||||
cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1;
|
cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1250,4 +1263,28 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TfrmSettings.txtCodeSnippetEnter(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if (txtCodeSnippet.Font.Color = $008396A0) and ((ActiveControl = txtCodeSnippet) or (txtCodeSnippet.Enabled)) then begin
|
||||||
|
txtCodeSnippet.Font.Color := clWindowText;
|
||||||
|
txtCodeSnippet.Text := '';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmSettings.txtCodeSnippetExit(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if (txtCodeSnippet.Text = '') then begin
|
||||||
|
txtCodeSnippet.Lines.Text := 'Use "!APPEND!" to append or'#13'"!INSERT!" to insert the code'#13'snippet into a new line on click...';
|
||||||
|
txtCodeSnippet.Font.Color := $008396A0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmSettings.txtCodeSnippetChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if (txtCodeSnippet.Font.Color = $008396A0) then
|
||||||
|
txtCodeSnippet.Font.Color := clWindowText
|
||||||
|
else if (txtCodeSnippet.Text = '') and (ActiveControl <> txtCodeSnippet) then
|
||||||
|
txtCodeSnippetExit(Sender);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -3,4 +3,4 @@ source = R:\amxmodx
|
|||||||
makeopts =
|
makeopts =
|
||||||
output = c:\real\done
|
output = c:\real\done
|
||||||
devenv = C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.com
|
devenv = C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.com
|
||||||
release = amxmodx-1.76
|
release = amxmodx-1.76b
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
; Licensed under the GNU General Public License
|
; Licensed under the GNU General Public License
|
||||||
; Originally written by -=HaXoMaTiC=-
|
; Originally written by -=HaXoMaTiC=-
|
||||||
!define PRODUCT_NAME "AMX Mod X Installer"
|
!define PRODUCT_NAME "AMX Mod X Installer"
|
||||||
!define PRODUCT_VERSION "1.76"
|
!define PRODUCT_VERSION "1.76b"
|
||||||
!define PRODUCT_PUBLISHER "AMX Mod X Dev Team"
|
!define PRODUCT_PUBLISHER "AMX Mod X Dev Team"
|
||||||
!define PRODUCT_WEB_SITE "http://www.amxmodx.org/"
|
!define PRODUCT_WEB_SITE "http://www.amxmodx.org/"
|
||||||
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Installer.exe"
|
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Installer.exe"
|
||||||
@ -841,7 +841,7 @@ Section Uninstall
|
|||||||
|
|
||||||
Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"
|
Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk"
|
||||||
Delete "$SMPROGRAMS\$ICONS_GROUP\Website.lnk"
|
Delete "$SMPROGRAMS\$ICONS_GROUP\Website.lnk"
|
||||||
Delete "$DESKTOP\AMX Mod X Editor.lnk"
|
Delete "$DESKTOP\AMX Mod X Studio.lnk"
|
||||||
Delete "$SMPROGRAMS\$ICONS_GROUP\AMXX Studio.lnk"
|
Delete "$SMPROGRAMS\$ICONS_GROUP\AMXX Studio.lnk"
|
||||||
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation.lnk"
|
Delete "$SMPROGRAMS\$ICONS_GROUP\Documentation.lnk"
|
||||||
Delete "$SMPROGRAMS\$ICONS_GROUP\AMX Mod X.lnk"
|
Delete "$SMPROGRAMS\$ICONS_GROUP\AMX Mod X.lnk"
|
||||||
|
Binary file not shown.
@ -766,7 +766,7 @@ begin
|
|||||||
|
|
||||||
try
|
try
|
||||||
if FileList[i] = 'liblist.gam' then
|
if FileList[i] = 'liblist.gam' then
|
||||||
frmMain.IdFTP.Size('CHMOD 444 liblist.gam');
|
frmMain.IdFTP.Site('CHMOD 444 liblist.gam');
|
||||||
except
|
except
|
||||||
AddStatus('Warning: CHMOD not supported.', clMaroon);
|
AddStatus('Warning: CHMOD not supported.', clMaroon);
|
||||||
end;
|
end;
|
||||||
|
@ -148,7 +148,7 @@ var
|
|||||||
frmMain: TfrmMain;
|
frmMain: TfrmMain;
|
||||||
gMultiAccount: Boolean;
|
gMultiAccount: Boolean;
|
||||||
|
|
||||||
const VERSION = '1.76';
|
const VERSION = '1.76b';
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
@ -60,22 +60,28 @@ public plugin_init()
|
|||||||
public cmdSayChat(id)
|
public cmdSayChat(id)
|
||||||
{
|
{
|
||||||
if (!access(id, ADMIN_CHAT))
|
if (!access(id, ADMIN_CHAT))
|
||||||
|
{
|
||||||
return PLUGIN_CONTINUE
|
return PLUGIN_CONTINUE
|
||||||
|
}
|
||||||
|
|
||||||
new said[6], i = 0
|
new said[6], i = 0
|
||||||
read_argv(1, said, 5)
|
read_argv(1, said, 5)
|
||||||
|
|
||||||
while (said[i] == '@')
|
while (said[i] == '@')
|
||||||
|
{
|
||||||
i++
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
if (!i || i > 3)
|
if (!i || i > 3)
|
||||||
|
{
|
||||||
return PLUGIN_CONTINUE
|
return PLUGIN_CONTINUE
|
||||||
|
}
|
||||||
|
|
||||||
new message[192], a = 0
|
new message[192], a = 0
|
||||||
read_args(message, 191)
|
read_args(message, 191)
|
||||||
remove_quotes(message)
|
remove_quotes(message)
|
||||||
|
|
||||||
switch(said[i])
|
switch (said[i])
|
||||||
{
|
{
|
||||||
case 'r': a = 1
|
case 'r': a = 1
|
||||||
case 'g': a = 2
|
case 'g': a = 2
|
||||||
@ -85,6 +91,19 @@ public cmdSayChat(id)
|
|||||||
case 'c': a = 6
|
case 'c': a = 6
|
||||||
case 'o': a = 7
|
case 'o': a = 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new n, s = i
|
||||||
|
if (a)
|
||||||
|
{
|
||||||
|
n++
|
||||||
|
s++
|
||||||
|
}
|
||||||
|
while (said[s] && isspace(said[s]))
|
||||||
|
{
|
||||||
|
n++
|
||||||
|
s++
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
new name[32], authid[32], userid
|
new name[32], authid[32], userid
|
||||||
|
|
||||||
@ -92,11 +111,13 @@ public cmdSayChat(id)
|
|||||||
get_user_name(id, name, 31)
|
get_user_name(id, name, 31)
|
||||||
userid = get_user_userid(id)
|
userid = get_user_userid(id)
|
||||||
|
|
||||||
log_amx("Chat: ^"%s<%d><%s><>^" tsay ^"%s^"", name, userid, authid, message[i + 1])
|
log_amx("Chat: ^"%s<%d><%s><>^" tsay ^"%s^"", name, userid, authid, message[i + n])
|
||||||
log_message("^"%s<%d><%s><>^" triggered ^"amx_tsay^" (text ^"%s^") (color ^"%L^")", name, userid, authid, message[i + 1], "en", g_Colors[a])
|
log_message("^"%s<%d><%s><>^" triggered ^"amx_tsay^" (text ^"%s^") (color ^"%L^")", name, userid, authid, message[i + n], "en", g_Colors[a])
|
||||||
|
|
||||||
if (++g_msgChannel > 6 || g_msgChannel < 3)
|
if (++g_msgChannel > 6 || g_msgChannel < 3)
|
||||||
|
{
|
||||||
g_msgChannel = 3
|
g_msgChannel = 3
|
||||||
|
}
|
||||||
|
|
||||||
new Float:verpos = g_Pos[i][1] + float(g_msgChannel) / 35.0
|
new Float:verpos = g_Pos[i][1] + float(g_msgChannel) / 35.0
|
||||||
|
|
||||||
@ -104,11 +125,11 @@ public cmdSayChat(id)
|
|||||||
|
|
||||||
if (get_cvar_num("amx_show_activity") == 2)
|
if (get_cvar_num("amx_show_activity") == 2)
|
||||||
{
|
{
|
||||||
show_hudmessage(0, "%s : %s", name, message[i + 1])
|
show_hudmessage(0, "%s : %s", name, message[i + n])
|
||||||
client_print(0, print_notify, "%s : %s", name, message[i + 1])
|
client_print(0, print_notify, "%s : %s", name, message[i + n])
|
||||||
} else {
|
} else {
|
||||||
show_hudmessage(0, "%s", message[i + 1])
|
show_hudmessage(0, "%s", message[i + n])
|
||||||
client_print(0, print_notify, "%s", message[i + 1])
|
client_print(0, print_notify, "%s", message[i + n])
|
||||||
}
|
}
|
||||||
|
|
||||||
return PLUGIN_HANDLED
|
return PLUGIN_HANDLED
|
||||||
|
@ -40,17 +40,17 @@ VexdUM_Register()
|
|||||||
register_forward(FM_ClientUserInfoChanged, "Hook_ClientUserInfoChanged")
|
register_forward(FM_ClientUserInfoChanged, "Hook_ClientUserInfoChanged")
|
||||||
|
|
||||||
/* Global Forwards */
|
/* Global Forwards */
|
||||||
g_FwdTouch = CreateMultiForward("entity_touch", ET_STOP, FP_CELL, FP_CELL)
|
g_FwdTouch = CreateMultiForwardEx("entity_touch", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_CELL)
|
||||||
g_FwdThink = CreateMultiForward("entity_think", ET_STOP, FP_CELL)
|
g_FwdThink = CreateMultiForwardEx("entity_think", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
|
||||||
g_FwdSpawn = CreateMultiForward("entity_spawn", ET_STOP, FP_CELL)
|
g_FwdSpawn = CreateMultiForwardEx("entity_spawn", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
|
||||||
g_FwdClientPreThink = CreateMultiForward("client_prethink", ET_IGNORE, FP_CELL)
|
g_FwdClientPreThink = CreateMultiForwardEx("client_prethink", ET_IGNORE, FORWARD_ONLY_OLD, FP_CELL)
|
||||||
g_FwdClientPostThink = CreateMultiForward("client_postthink", ET_IGNORE, FP_CELL)
|
g_FwdClientPostThink = CreateMultiForwardEx("client_postthink", ET_IGNORE, FORWARD_ONLY_OLD, FP_CELL)
|
||||||
g_FwdEmitSound = CreateMultiForward("emitsound", ET_STOP, FP_CELL, FP_STRING)
|
g_FwdEmitSound = CreateMultiForwardEx("emitsound", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
|
||||||
g_FwdEmitAmbientSound = CreateMultiForward("emitambientsound", ET_STOP, FP_CELL, FP_STRING)
|
g_FwdEmitAmbientSound = CreateMultiForwardEx("emitambientsound", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
|
||||||
g_FwdSetModel = CreateMultiForward("set_model", ET_STOP, FP_CELL, FP_STRING)
|
g_FwdSetModel = CreateMultiForwardEx("set_model", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
|
||||||
g_FwdTraceLine = CreateMultiForward("traceline", ET_STOP, FP_CELL)
|
g_FwdTraceLine = CreateMultiForwardEx("traceline", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
|
||||||
g_FwdSetCliKeyValue = CreateMultiForward("setclientkeyvalue", ET_STOP, FP_CELL, FP_STRING, FP_STRING)
|
g_FwdSetCliKeyValue = CreateMultiForwardEx("setclientkeyvalue", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING, FP_STRING)
|
||||||
g_FwdKeyValue = CreateMultiForward("keyvalue", ET_STOP, FP_CELL)
|
g_FwdKeyValue = CreateMultiForwardEx("keyvalue", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
|
||||||
}
|
}
|
||||||
|
|
||||||
VexdUM_Natives()
|
VexdUM_Natives()
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
#include <amxmodx>
|
#include <amxmodx>
|
||||||
#include <csx>
|
#include <csx>
|
||||||
|
#include <cstrike>
|
||||||
|
|
||||||
public MultiKill
|
public MultiKill
|
||||||
public MultiKillSound
|
public MultiKillSound
|
||||||
@ -82,6 +83,7 @@ new g_announce_sync
|
|||||||
new g_status_sync
|
new g_status_sync
|
||||||
new g_left_sync
|
new g_left_sync
|
||||||
new g_bottom_sync
|
new g_bottom_sync
|
||||||
|
new g_he_sync
|
||||||
|
|
||||||
new g_MultiKillMsg[7][] =
|
new g_MultiKillMsg[7][] =
|
||||||
{
|
{
|
||||||
@ -197,6 +199,7 @@ public plugin_init()
|
|||||||
g_status_sync = CreateHudSyncObj()
|
g_status_sync = CreateHudSyncObj()
|
||||||
g_left_sync = CreateHudSyncObj()
|
g_left_sync = CreateHudSyncObj()
|
||||||
g_bottom_sync = CreateHudSyncObj()
|
g_bottom_sync = CreateHudSyncObj()
|
||||||
|
g_he_sync = CreateHudSyncObj()
|
||||||
}
|
}
|
||||||
|
|
||||||
public plugin_cfg()
|
public plugin_cfg()
|
||||||
@ -307,35 +310,55 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnemyRemaining)
|
if (EnemyRemaining && is_user_connected(victim))
|
||||||
{
|
{
|
||||||
new ppl[32], pplnum = 0
|
new ppl[32], pplnum = 0, maxplayers = get_maxplayers()
|
||||||
new team = get_user_team(victim) - 1
|
new epplnum = 0
|
||||||
|
new CsTeams:team = cs_get_user_team(victim)
|
||||||
|
new CsTeams:other_team
|
||||||
|
new CsTeams:enemy_team = (team == CS_TEAM_T) ? CS_TEAM_CT : CS_TEAM_T
|
||||||
|
|
||||||
if (team >= 0 && team < 4)
|
if (team == CS_TEAM_T || team == CS_TEAM_CT)
|
||||||
get_players(ppl, pplnum, "e", g_teamsNames[1 - team])
|
|
||||||
|
|
||||||
if (pplnum)
|
|
||||||
{
|
{
|
||||||
new eppl[32], epplnum
|
for (new i=1; i<=maxplayers; i++)
|
||||||
|
|
||||||
if (team >= 0 && team < 4)
|
|
||||||
{
|
{
|
||||||
get_players(eppl, epplnum, "ae", g_teamsNames[team])
|
if (!is_user_connected(i))
|
||||||
|
|
||||||
if (epplnum)
|
|
||||||
{
|
{
|
||||||
new message[128], team_name[32]
|
continue
|
||||||
|
}
|
||||||
|
if (i == victim)
|
||||||
|
{
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
other_team = cs_get_user_team(i)
|
||||||
|
if (other_team == team && is_user_alive(i))
|
||||||
|
{
|
||||||
|
epplnum++
|
||||||
|
} else if (other_team == enemy_team) {
|
||||||
|
ppl[pplnum++] = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pplnum && epplnum)
|
||||||
|
{
|
||||||
|
new message[128], team_name[32]
|
||||||
|
|
||||||
set_hudmessage(255, 255, 255, 0.02, 0.85, 2, 0.05, 0.1, 0.02, 3.0, -1)
|
set_hudmessage(255, 255, 255, 0.02, 0.85, 2, 0.05, 0.1, 0.02, 3.0, -1)
|
||||||
|
|
||||||
|
/* This is a pretty stupid thing to translate, but whatever */
|
||||||
|
new _teamname[32]
|
||||||
|
if (team == CS_TEAM_T)
|
||||||
|
{
|
||||||
|
format(_teamname, 31, "TERRORIST%s", (epplnum == 1) ? "" : "S")
|
||||||
|
} else if (team == CS_TEAM_CT) {
|
||||||
|
format(_teamname, 31, "CT%s", (epplnum == 1) ? "" : "S")
|
||||||
|
}
|
||||||
|
|
||||||
for (new a = 0; a < pplnum; ++a)
|
for (new a = 0; a < pplnum; ++a)
|
||||||
{
|
{
|
||||||
format(team_name, 31, "%L", ppl[a], (epplnum == 1) ? g_teamsNames[team] : g_teamsNames[team + 2])
|
format(team_name, 31, "%L", ppl[a], _teamname)
|
||||||
format(message, 127, "%L", ppl[a], "REMAINING", epplnum, team_name)
|
format(message, 127, "%L", ppl[a], "REMAINING", epplnum, team_name)
|
||||||
|
ShowSyncHudMsg(ppl[a], g_bottom_sync, "%s", message)
|
||||||
ShowSyncHudMsg(ppl[a], g_bottom_sync, "%s", message)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -344,9 +367,23 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
|
|||||||
if (LastMan)
|
if (LastMan)
|
||||||
{
|
{
|
||||||
new cts[32], ts[32], ctsnum, tsnum
|
new cts[32], ts[32], ctsnum, tsnum
|
||||||
|
new maxplayers = get_maxplayers()
|
||||||
|
new CsTeams:team
|
||||||
|
|
||||||
get_players(cts, ctsnum, "ae", g_teamsNames[1])
|
for (new i=1; i<=maxplayers; i++)
|
||||||
get_players(ts, tsnum, "ae", g_teamsNames[0])
|
{
|
||||||
|
if (!is_user_connected(i) || !is_user_alive(i))
|
||||||
|
{
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
team = cs_get_user_team(i)
|
||||||
|
if (team == CS_TEAM_T)
|
||||||
|
{
|
||||||
|
ts[tsnum++] = i
|
||||||
|
} else if (team == CS_TEAM_CT) {
|
||||||
|
cts[ctsnum++] = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ctsnum == 1 && tsnum == 1)
|
if (ctsnum == 1 && tsnum == 1)
|
||||||
{
|
{
|
||||||
@ -362,19 +399,19 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
|
|||||||
}
|
}
|
||||||
else if (!g_LastAnnounce)
|
else if (!g_LastAnnounce)
|
||||||
{
|
{
|
||||||
new oposite = 0, team = 0
|
new oposite = 0, _team = 0
|
||||||
|
|
||||||
if (ctsnum == 1 && tsnum > 1)
|
if (ctsnum == 1 && tsnum > 1)
|
||||||
{
|
{
|
||||||
g_LastAnnounce = cts[0]
|
g_LastAnnounce = cts[0]
|
||||||
oposite = tsnum
|
oposite = tsnum
|
||||||
team = 0
|
_team = 0
|
||||||
}
|
}
|
||||||
else if (tsnum == 1 && ctsnum > 1)
|
else if (tsnum == 1 && ctsnum > 1)
|
||||||
{
|
{
|
||||||
g_LastAnnounce = ts[0]
|
g_LastAnnounce = ts[0]
|
||||||
oposite = ctsnum
|
oposite = ctsnum
|
||||||
team = 1
|
_team = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_LastAnnounce)
|
if (g_LastAnnounce)
|
||||||
@ -384,10 +421,12 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
|
|||||||
get_user_name(g_LastAnnounce, name, 31)
|
get_user_name(g_LastAnnounce, name, 31)
|
||||||
|
|
||||||
set_hudmessage(0, 255, 255, -1.0, 0.35, 0, 6.0, 6.0, 0.5, 0.15, -1)
|
set_hudmessage(0, 255, 255, -1.0, 0.35, 0, 6.0, 6.0, 0.5, 0.15, -1)
|
||||||
ShowSyncHudMsg(0, g_center1_sync, "%s (%d HP) vs. %d %s%s: %L", name, get_user_health(g_LastAnnounce), oposite, g_teamsNames[team], (oposite == 1) ? "" : "S", LANG_PLAYER, g_LastMessages[random_num(0, 3)])
|
ShowSyncHudMsg(0, g_center1_sync, "%s (%d HP) vs. %d %s%s: %L", name, get_user_health(g_LastAnnounce), oposite, g_teamsNames[_team], (oposite == 1) ? "" : "S", LANG_PLAYER, g_LastMessages[random_num(0, 3)])
|
||||||
|
|
||||||
if (!is_user_connecting(g_LastAnnounce))
|
if (!is_user_connecting(g_LastAnnounce))
|
||||||
|
{
|
||||||
client_cmd(g_LastAnnounce, "spk misc/oneandonly")
|
client_cmd(g_LastAnnounce, "spk misc/oneandonly")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -402,7 +441,7 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
|
|||||||
get_user_name(victim, victim_name, 31)
|
get_user_name(victim, victim_name, 31)
|
||||||
|
|
||||||
set_hudmessage(255, 100, 100, -1.0, 0.25, 1, 6.0, 6.0, 0.5, 0.15, -1)
|
set_hudmessage(255, 100, 100, -1.0, 0.25, 1, 6.0, 6.0, 0.5, 0.15, -1)
|
||||||
show_hudmessage(0, "%L", LANG_PLAYER, g_KinfeMsg[random_num(0, 3)], killer_name, victim_name)
|
ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_KinfeMsg[random_num(0, 3)], killer_name, victim_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KnifeKillSound)
|
if (KnifeKillSound)
|
||||||
@ -421,10 +460,10 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
|
|||||||
if (!selfkill)
|
if (!selfkill)
|
||||||
{
|
{
|
||||||
if (GrenadeKill)
|
if (GrenadeKill)
|
||||||
show_hudmessage(0, "%L", LANG_PLAYER, g_HeMessages[random_num(0, 3)], killer_name, victim_name)
|
ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_HeMessages[random_num(0, 3)], killer_name, victim_name)
|
||||||
}
|
}
|
||||||
else if (GrenadeSuicide)
|
else if (GrenadeSuicide)
|
||||||
show_hudmessage(0, "%L", LANG_PLAYER, g_SHeMessages[random_num(0, 3)], victim_name)
|
ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_SHeMessages[random_num(0, 3)], victim_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (headshot && (HeadShotKill || HeadShotKillSound))
|
if (headshot && (HeadShotKill || HeadShotKillSound))
|
||||||
@ -586,6 +625,11 @@ public checkKills(param[])
|
|||||||
|
|
||||||
if (a > -1)
|
if (a > -1)
|
||||||
{
|
{
|
||||||
|
if (a > 6)
|
||||||
|
{
|
||||||
|
a = 6
|
||||||
|
}
|
||||||
|
|
||||||
if (MultiKill)
|
if (MultiKill)
|
||||||
{
|
{
|
||||||
new name[32]
|
new name[32]
|
||||||
@ -593,9 +637,6 @@ public checkKills(param[])
|
|||||||
get_user_name(id, name, 31)
|
get_user_name(id, name, 31)
|
||||||
set_hudmessage(255, 0, 100, 0.05, 0.50, 2, 0.02, 6.0, 0.01, 0.1, -1)
|
set_hudmessage(255, 0, 100, 0.05, 0.50, 2, 0.02, 6.0, 0.01, 0.1, -1)
|
||||||
|
|
||||||
if (a > 6)
|
|
||||||
a = 6
|
|
||||||
|
|
||||||
ShowSyncHudMsg(0, g_left_sync, g_MultiKillMsg[a], name, LANG_PLAYER, "WITH", g_multiKills[id][0], LANG_PLAYER, "KILLS", g_multiKills[id][1], LANG_PLAYER, "HS")
|
ShowSyncHudMsg(0, g_left_sync, g_MultiKillMsg[a], name, LANG_PLAYER, "WITH", g_multiKills[id][0], LANG_PLAYER, "KILLS", g_multiKills[id][1], LANG_PLAYER, "HS")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1420,7 +1420,15 @@ kill_stats(id)
|
|||||||
// Bail out if user stats timer is non-zero,
|
// Bail out if user stats timer is non-zero,
|
||||||
// ie function already called.
|
// ie function already called.
|
||||||
if (g_fzShowUserStatsTime[id] > 0.0)
|
if (g_fzShowUserStatsTime[id] > 0.0)
|
||||||
|
{
|
||||||
return
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
new team = get_user_team(id)
|
||||||
|
if (team < 1 || team > 2)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Flag kill stats displayed for this player.
|
// Flag kill stats displayed for this player.
|
||||||
g_fzShowUserStatsTime[id] = get_gametime()
|
g_fzShowUserStatsTime[id] = get_gametime()
|
||||||
@ -1546,7 +1554,9 @@ endround_stats()
|
|||||||
id = iaPlayers[iPlayer]
|
id = iaPlayers[iPlayer]
|
||||||
|
|
||||||
if (g_fzShowUserStatsTime[id] == 0.0)
|
if (g_fzShowUserStatsTime[id] == 0.0)
|
||||||
|
{
|
||||||
kill_stats(id)
|
kill_stats(id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_sAwardAndScore[0] = 0
|
g_sAwardAndScore[0] = 0
|
||||||
|
@ -425,7 +425,7 @@ showStatsMenu(id,pos){
|
|||||||
}
|
}
|
||||||
|
|
||||||
else len += format(menu_body[len],511-len,"^n0. %s" , pos ? "Back" : "Exit" )
|
else len += format(menu_body[len],511-len,"^n0. %s" , pos ? "Back" : "Exit" )
|
||||||
show_menu(id,keys,menu_body)
|
show_menu(id,keys,menu_body,-1,"Server Stats")
|
||||||
return PLUGIN_HANDLED
|
return PLUGIN_HANDLED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,9 +11,9 @@
|
|||||||
#endif
|
#endif
|
||||||
#define _amxconst_included
|
#define _amxconst_included
|
||||||
|
|
||||||
#define AMXX_VERSION 1.76
|
#define AMXX_VERSION 1.762
|
||||||
#define AMXX_VERSION_NUM 176
|
#define AMXX_VERSION_NUM 176
|
||||||
stock const AMXX_VERSION_STR[]="1.76"
|
stock const AMXX_VERSION_STR[]="1.76b"
|
||||||
|
|
||||||
#define M_PI 3.1415926535
|
#define M_PI 3.1415926535
|
||||||
|
|
||||||
@ -264,6 +264,7 @@ enum {
|
|||||||
#define AMX_ERR_DIVIDE 11
|
#define AMX_ERR_DIVIDE 11
|
||||||
#define AMX_ERR_NOTFOUND 19
|
#define AMX_ERR_NOTFOUND 19
|
||||||
#define AMX_ERR_PARAMS 25
|
#define AMX_ERR_PARAMS 25
|
||||||
|
#define AMX_ERR_GENERAL 27
|
||||||
|
|
||||||
#define INVALID_HANDLE -1
|
#define INVALID_HANDLE -1
|
||||||
|
|
||||||
@ -277,6 +278,10 @@ enum {
|
|||||||
#define FP_STRING 2
|
#define FP_STRING 2
|
||||||
#define FP_ARRAY 4
|
#define FP_ARRAY 4
|
||||||
|
|
||||||
|
#define FORWARD_ONLY_OLD 1
|
||||||
|
#define FORWARD_ONLY_NEW 2
|
||||||
|
#define FORWARD_ALL 3
|
||||||
|
|
||||||
#define MEXIT_ALL 1
|
#define MEXIT_ALL 1
|
||||||
#define MEXIT_NORMAL 0
|
#define MEXIT_NORMAL 0
|
||||||
#define MEXIT_NEVER -1
|
#define MEXIT_NEVER -1
|
||||||
|
@ -71,8 +71,8 @@ stock can_see(ent1, ent2)
|
|||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
new Float:flFraction;
|
new Float:flFraction;
|
||||||
get_tr2(0, TraceResult:TR_Fraction, flFraction);
|
get_tr2(0, TraceResult:TR_flFraction, flFraction);
|
||||||
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_Hit) == ent2))
|
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == ent2))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,11 @@
|
|||||||
#define _Vexd_Utilities_included
|
#define _Vexd_Utilities_included
|
||||||
|
|
||||||
#include <engine>
|
#include <engine>
|
||||||
|
#if defined AMXMOD_BCOMPAT
|
||||||
|
#if !defined _vexd_bcompat_included
|
||||||
|
#include <VexdUM>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
stock Entvars_Get_Int(iIndex, iVariable)
|
stock Entvars_Get_Int(iIndex, iVariable)
|
||||||
return entity_get_int(iIndex, iVariable)
|
return entity_get_int(iIndex, iVariable)
|
||||||
|
@ -204,8 +204,10 @@ native is_jit_enabled();
|
|||||||
native get_amxx_verstring(buffer[], length);
|
native get_amxx_verstring(buffer[], length);
|
||||||
|
|
||||||
/* If player is not attacked function returns 0, in other
|
/* If player is not attacked function returns 0, in other
|
||||||
* case returns index of attacking player. On second and third
|
* case returns index of attacking player. On second and third
|
||||||
* parameter you may get info about weapon and body hit place. */
|
* parameter you may get info about weapon and body hit place.
|
||||||
|
* As of 1.75, get_user_attacker can return a non-player index if the player was attacked by a non-player entity.
|
||||||
|
*/
|
||||||
native get_user_attacker(index,...);
|
native get_user_attacker(index,...);
|
||||||
|
|
||||||
/* If player doesn't hit at anything function returns 0.0,
|
/* If player doesn't hit at anything function returns 0.0,
|
||||||
@ -1014,11 +1016,20 @@ native set_addr_val(addr, val);
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* creates a multi-plugin forward.
|
* Creates a multi-plugin forward.
|
||||||
|
* Stop type must be one of the ET_ values in amxconst.inc
|
||||||
* results will be > 0 for success
|
* results will be > 0 for success
|
||||||
*/
|
*/
|
||||||
native CreateMultiForward(const name[], stop_type, ...);
|
native CreateMultiForward(const name[], stop_type, ...);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a multi-forward plugin that can filter between old/new plugins.
|
||||||
|
* Old plugins are used by the AMX Mod backwards compatibility layer.
|
||||||
|
* Stop type must be one of the ET_ values in amxconst.inc
|
||||||
|
* Forward type must be one of the FORWARD_ values in amxconst.inc.
|
||||||
|
*/
|
||||||
|
native CreateMultiForwardEx(const name[], stop_type, forward_type, ...);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a forward for one plugin.
|
* Creates a forward for one plugin.
|
||||||
* Results will be > 0 for success.
|
* Results will be > 0 for success.
|
||||||
|
@ -226,8 +226,10 @@ forward pfn_spawn(entid);
|
|||||||
*/
|
*/
|
||||||
native find_sphere_class(aroundent, _lookforclassname[], Float:radius, entlist[], maxents, Float:origin[3] = {0.0, 0.0, 0.0});
|
native find_sphere_class(aroundent, _lookforclassname[], Float:radius, entlist[], maxents, Float:origin[3] = {0.0, 0.0, 0.0});
|
||||||
|
|
||||||
//SDK function - checks if an origin is in an entity's view cone
|
/* SDK function - checks if an origin is in an entity's view cone
|
||||||
native is_in_viewcone(entity, Float:origin[3]);
|
* Set use3d to 1 to do the calculation in 3D. Otherwise it will be in 2D.
|
||||||
|
*/
|
||||||
|
native is_in_viewcone(entity, Float:origin[3], use3d = 0);
|
||||||
|
|
||||||
//SDK function - checks if an entity is visible to an entity
|
//SDK function - checks if an entity is visible to an entity
|
||||||
native is_visible(entity, target);
|
native is_visible(entity, target);
|
||||||
|
@ -29,8 +29,11 @@ native delete_file(const file[]);
|
|||||||
native file_exists(const file[]);
|
native file_exists(const file[]);
|
||||||
|
|
||||||
/* renames a file. returns 0 on failure, 1 on success.
|
/* renames a file. returns 0 on failure, 1 on success.
|
||||||
|
* if relative true, rename_file will act like other natives which
|
||||||
|
* use the moddir as a base directory. otherwise, the current directory is
|
||||||
|
* undefined (but assumed to be hlds).
|
||||||
*/
|
*/
|
||||||
native rename_file(const oldname[], const newname[]);
|
native rename_file(const oldname[], const newname[], relative=0);
|
||||||
|
|
||||||
/* Checks if a directory exists */
|
/* Checks if a directory exists */
|
||||||
native dir_exists(const dir[]);
|
native dir_exists(const dir[]);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
(C)Copyrighted under the GNU General Public License, Version 2
|
(C)Copyrighted under the GNU General Public License, Version 2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined geoip_included
|
#if defined _geoip_included
|
||||||
#endinput
|
#endinput
|
||||||
#endif
|
#endif
|
||||||
#define _geoip_included
|
#define _geoip_included
|
||||||
|
@ -30,8 +30,12 @@ enum Handle
|
|||||||
* !!NOTE!! I have seen most people think that this connects to the DB.
|
* !!NOTE!! I have seen most people think that this connects to the DB.
|
||||||
* Nowhere does it say this, and in fact it does not. It only caches
|
* Nowhere does it say this, and in fact it does not. It only caches
|
||||||
* the connection information, the host/user/pass/etc.
|
* the connection information, the host/user/pass/etc.
|
||||||
|
*
|
||||||
|
* The optional timeout parameter specifies how long connections should wait before
|
||||||
|
* giving up. If 0, the default (which is undefined) is used.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
native Handle:SQL_MakeDbTuple(const host[], const user[], const pass[], const db[]);
|
native Handle:SQL_MakeDbTuple(const host[], const user[], const pass[], const db[], timeout=0);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,8 +78,9 @@ native Handle:SQL_PrepareQuery(Handle:db, const fmt[], {Float,_}:...);
|
|||||||
* @param errnum - An error code, if any.
|
* @param errnum - An error code, if any.
|
||||||
* @param data - Data array you passed in.
|
* @param data - Data array you passed in.
|
||||||
* @param size - Size of the data array you passed in.
|
* @param size - Size of the data array you passed in.
|
||||||
|
* @param queuetime - Amount of gametime that passed while the query was resolving.
|
||||||
*
|
*
|
||||||
* public QueryHandler(failstate, Handle:query, error[], errnum, data[], size)
|
* public QueryHandler(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
|
||||||
*
|
*
|
||||||
* Note! The handle you pass in is a DB Tuple, NOT an active connection!
|
* Note! The handle you pass in is a DB Tuple, NOT an active connection!
|
||||||
* Note! The handle does not need to be freed.
|
* Note! The handle does not need to be freed.
|
||||||
|
@ -12,7 +12,7 @@ BAN = ban
|
|||||||
KICK = kick
|
KICK = kick
|
||||||
NO_ACC_COM = You have no access to that command
|
NO_ACC_COM = You have no access to that command
|
||||||
USAGE = Usage
|
USAGE = Usage
|
||||||
MORE_CL_MATCHT = here are more clients matching to your argument
|
MORE_CL_MATCHT = There is more than one client matching your argument
|
||||||
CL_NOT_FOUND = Client with that name or userid not found
|
CL_NOT_FOUND = Client with that name or userid not found
|
||||||
CLIENT_IMM = Client "%s" has immunity
|
CLIENT_IMM = Client "%s" has immunity
|
||||||
CANT_PERF_DEAD = That action can't be performed on dead client "%s"
|
CANT_PERF_DEAD = That action can't be performed on dead client "%s"
|
||||||
@ -34,7 +34,7 @@ BAN = ban
|
|||||||
KICK = kick
|
KICK = kick
|
||||||
NO_ACC_COM = Du hast nicht genuegend Rechte, um diesen Befehl auszufuehren!
|
NO_ACC_COM = Du hast nicht genuegend Rechte, um diesen Befehl auszufuehren!
|
||||||
USAGE = Anwendung
|
USAGE = Anwendung
|
||||||
MORE_CL_MATCHT = hier sind mehrere Spieler, auf die deine Angaben zutreffen
|
MORE_CL_MATCHT = Es gibt mehrere Spieler, auf die deine Angaben zutreffen
|
||||||
CL_NOT_FOUND = Spieler mit diesem Namen oder dieser UserID nicht gefunden
|
CL_NOT_FOUND = Spieler mit diesem Namen oder dieser UserID nicht gefunden
|
||||||
CLIENT_IMM = Spieler "%s" hat Immnuitaet
|
CLIENT_IMM = Spieler "%s" hat Immnuitaet
|
||||||
CANT_PERF_DEAD = Diese Aktion kann nicht am toten Spieler "%s" ausgefuehrt werden.
|
CANT_PERF_DEAD = Diese Aktion kann nicht am toten Spieler "%s" ausgefuehrt werden.
|
||||||
@ -166,7 +166,7 @@ BAN = ban
|
|||||||
KICK = kick
|
KICK = kick
|
||||||
NO_ACC_COM = Nie mozesz uzyc tej komendy
|
NO_ACC_COM = Nie mozesz uzyc tej komendy
|
||||||
USAGE = Uzycie
|
USAGE = Uzycie
|
||||||
MORE_CL_MATCHT = tutaj jest wiecej klientow pasujacych do twojego wyboru
|
MORE_CL_MATCHT = Istnieje kilku graczy pasujacych do podanego wzorca
|
||||||
CL_NOT_FOUND = Nie znaleziono klienta z tym nickiem lub ID
|
CL_NOT_FOUND = Nie znaleziono klienta z tym nickiem lub ID
|
||||||
CLIENT_IMM = Klient "%s" ma immunitet
|
CLIENT_IMM = Klient "%s" ma immunitet
|
||||||
CANT_PERF_DEAD = Nie mozesz tego wykonac na martwym kliencie "%s"
|
CANT_PERF_DEAD = Nie mozesz tego wykonac na martwym kliencie "%s"
|
||||||
@ -210,7 +210,7 @@ BAN = banear
|
|||||||
KICK = expulsar
|
KICK = expulsar
|
||||||
NO_ACC_COM = No tienes acceso a este comando
|
NO_ACC_COM = No tienes acceso a este comando
|
||||||
USAGE = Uso
|
USAGE = Uso
|
||||||
MORE_CL_MATCHT = aqui hay mas clientes que coinciden con tu argumento
|
MORE_CL_MATCHT = Hay mas de un cliente que coincide con tu argumento
|
||||||
CL_NOT_FOUND = No se encontro ningun cliente con ese nombre o ese identificador
|
CL_NOT_FOUND = No se encontro ningun cliente con ese nombre o ese identificador
|
||||||
CLIENT_IMM = El cliente "%s" tiene inmunidad
|
CLIENT_IMM = El cliente "%s" tiene inmunidad
|
||||||
CANT_PERF_DEAD = Esta accion no se puede aplicar a un cliente muerto "%s"
|
CANT_PERF_DEAD = Esta accion no se puede aplicar a un cliente muerto "%s"
|
||||||
|
@ -303,7 +303,6 @@ COM_STATS_ADD = ^tadd <nimi> <muuttuja> - Lisaa tilastoja listaan
|
|||||||
NO_STATS = Tilastopluginit eivat ole asennettuna talla palvelimellar^n
|
NO_STATS = Tilastopluginit eivat ole asennettuna talla palvelimellar^n
|
||||||
SAVE_CONF = Tallenna saadot
|
SAVE_CONF = Tallenna saadot
|
||||||
|
|
||||||
|
|
||||||
[ls]
|
[ls]
|
||||||
NO_OPTION = C0|_|ld|\|'t f!|\|d 0pt!0|\|(s) w!th s|_|(h v4r!4bl3 (|\|4m3 "%s")
|
NO_OPTION = C0|_|ld|\|'t f!|\|d 0pt!0|\|(s) w!th s|_|(h v4r!4bl3 (|\|4m3 "%s")
|
||||||
STATS_CONF_SAVED = $t4tz0|2 (0|\|f!g|_|r4t!0|\| s4v3d s|_|((3ssf|_|lly
|
STATS_CONF_SAVED = $t4tz0|2 (0|\|f!g|_|r4t!0|\| s4v3d s|_|((3ssf|_|lly
|
||||||
|
@ -22,7 +22,7 @@ BEST_SCORE = Best score
|
|||||||
KILL_S = kill(s)
|
KILL_S = kill(s)
|
||||||
TOTAL = Total
|
TOTAL = Total
|
||||||
SHOT_S = shot(s)
|
SHOT_S = shot(s)
|
||||||
HITS_YOU_IN = %s hits you in
|
HITS_YOU_IN = %s hit you in
|
||||||
KILLED_BY_WITH = Killed by %s with %s @ %0.0fm
|
KILLED_BY_WITH = Killed by %s with %s @ %0.0fm
|
||||||
NO_HITS = no hits
|
NO_HITS = no hits
|
||||||
YOU_NO_KILLER = You have no killer...
|
YOU_NO_KILLER = You have no killer...
|
||||||
|
@ -89,7 +89,6 @@ TELE_MENU = Teleportvalikko
|
|||||||
CUR_LOC = Nykyinen sijainti
|
CUR_LOC = Nykyinen sijainti
|
||||||
SAVE_LOC = Tallenna sijainti
|
SAVE_LOC = Tallenna sijainti
|
||||||
|
|
||||||
|
|
||||||
[ls]
|
[ls]
|
||||||
ADMIN_TELEPORT_1 = l33t s3rv3r 0P: h4x3d %s t0 n3w ISP
|
ADMIN_TELEPORT_1 = l33t s3rv3r 0P: h4x3d %s t0 n3w ISP
|
||||||
ADMIN_TELEPORT_2 = l33t s3rv3r 0P %s: h4x3d %s t0 n3w ISP
|
ADMIN_TELEPORT_2 = l33t s3rv3r 0P %s: h4x3d %s t0 n3w ISP
|
||||||
|
@ -353,7 +353,7 @@ public actionVoteMapMenu(id, key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
keys |= (1<<8)
|
keys |= (1<<8)
|
||||||
len += format(menuBody[len], 511, "^n9. None^n")
|
len += format(menuBody[len], 511, "^n9. %L^n", id, "NONE")
|
||||||
} else {
|
} else {
|
||||||
len = format(menuBody, 511, g_coloredMenus ? "\y%L^n%s?^n\w^n1. %L^n2. %L^n" : "%L^n%s?^n^n1. %L^n2. %L^n", id, "CHANGE_MAP_TO", g_mapName[g_voteSelected[id][0]], id, "YES", id, "NO")
|
len = format(menuBody, 511, g_coloredMenus ? "\y%L^n%s?^n\w^n1. %L^n2. %L^n" : "%L^n%s?^n^n1. %L^n2. %L^n", id, "CHANGE_MAP_TO", g_mapName[g_voteSelected[id][0]], id, "YES", id, "NO")
|
||||||
keys = MENU_KEY_1|MENU_KEY_2
|
keys = MENU_KEY_1|MENU_KEY_2
|
||||||
|
@ -6,6 +6,7 @@ public plugin_init()
|
|||||||
|
|
||||||
register_clcmd("menu_test1", "Test_Menu1")
|
register_clcmd("menu_test1", "Test_Menu1")
|
||||||
register_clcmd("menu_test2", "Test_Menu2")
|
register_clcmd("menu_test2", "Test_Menu2")
|
||||||
|
register_clcmd("menu_test3", "Test_Menu3")
|
||||||
}
|
}
|
||||||
|
|
||||||
public Test_Menu1(id, level, cid)
|
public Test_Menu1(id, level, cid)
|
||||||
@ -54,3 +55,38 @@ public Test_Menu1_Handler(id, menu, item)
|
|||||||
return PLUGIN_HANDLED
|
return PLUGIN_HANDLED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Test_Menu3(id)
|
||||||
|
{
|
||||||
|
new mHandleID = menu_create("Test Menu 3", "Test_Menu3_Handler")
|
||||||
|
menu_additem(mHandleID, "test1", "1", 0)
|
||||||
|
menu_additem(mHandleID, "test2", "2", 0)
|
||||||
|
menu_additem(mHandleID, "test3", "3", 0)
|
||||||
|
menu_additem(mHandleID, "test4", "4", 0)
|
||||||
|
menu_additem(mHandleID, "test5", "5", 0)
|
||||||
|
menu_additem(mHandleID, "test6", "6", 0)
|
||||||
|
menu_additem(mHandleID, "test7", "7", 0)
|
||||||
|
menu_additem(mHandleID, "test8", "8", 0)
|
||||||
|
menu_additem(mHandleID, "test9", "9", 0)
|
||||||
|
menu_additem(mHandleID, "test10", "10", 0)
|
||||||
|
menu_additem(mHandleID, "test11", "11", 0)
|
||||||
|
menu_addblank(mHandleID, 1) // add blank got problem
|
||||||
|
|
||||||
|
menu_display(id, mHandleID, 0)
|
||||||
|
|
||||||
|
return PLUGIN_HANDLED
|
||||||
|
}
|
||||||
|
|
||||||
|
public Test_Menu3_Handler(id, menu, item)
|
||||||
|
{
|
||||||
|
if (item == MENU_EXIT)
|
||||||
|
{
|
||||||
|
menu_destroy(menu)
|
||||||
|
return PLUGIN_HANDLED
|
||||||
|
}
|
||||||
|
|
||||||
|
client_print(id, print_chat, "item = %d", item)
|
||||||
|
|
||||||
|
menu_destroy(menu)
|
||||||
|
|
||||||
|
return PLUGIN_HANDLED
|
||||||
|
}
|
@ -15,6 +15,7 @@ public plugin_init()
|
|||||||
register_srvcmd("sqlx_test_old1", "SqlxTest_Old1")
|
register_srvcmd("sqlx_test_old1", "SqlxTest_Old1")
|
||||||
register_srvcmd("sqlx_test_old2", "SqlxTest_Old2")
|
register_srvcmd("sqlx_test_old2", "SqlxTest_Old2")
|
||||||
register_srvcmd("sqlx_test_thread_end", "SqlxTest_ThreadEnd")
|
register_srvcmd("sqlx_test_thread_end", "SqlxTest_ThreadEnd")
|
||||||
|
register_srvcmd("sqlx_test_bad", "SqlxTest_Bad")
|
||||||
|
|
||||||
new configsDir[64]
|
new configsDir[64]
|
||||||
get_configsdir(configsDir, 63)
|
get_configsdir(configsDir, 63)
|
||||||
@ -73,6 +74,22 @@ public plugin_cfg()
|
|||||||
g_DbInfo = SQL_MakeDbTuple(host, user, pass, db)
|
g_DbInfo = SQL_MakeDbTuple(host, user, pass, db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SqlxTest_Bad()
|
||||||
|
{
|
||||||
|
new errnum, error[255]
|
||||||
|
new Handle:tempinfo = SQL_MakeDbTuple("1.2.3.4", "asdf", "gasdf", "gaben", 2)
|
||||||
|
new Handle:db = SQL_Connect(tempinfo, errnum, error, 254)
|
||||||
|
|
||||||
|
if (db == Empty_Handle)
|
||||||
|
{
|
||||||
|
server_print(" --> Errored out! %d, %s", errnum, error)
|
||||||
|
} else {
|
||||||
|
server_print(" --> Something is wrong here.")
|
||||||
|
}
|
||||||
|
|
||||||
|
return PLUGIN_HANDLED
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note that this function works for both threaded and non-threaded queries.
|
* Note that this function works for both threaded and non-threaded queries.
|
||||||
*/
|
*/
|
||||||
@ -106,18 +123,22 @@ PrintQueryData(Handle:query)
|
|||||||
/**
|
/**
|
||||||
* Handler for when a threaded query is resolved.
|
* Handler for when a threaded query is resolved.
|
||||||
*/
|
*/
|
||||||
public GetMyStuff(failstate, Handle:query, error[], errnum, data[], size)
|
public GetMyStuff(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
|
||||||
{
|
{
|
||||||
server_print("Resolved query %d at: %f", data[0], get_gametime())
|
server_print(" --> Resolved query %d, took %f seconds", data[0], queuetime)
|
||||||
if (failstate)
|
if (failstate)
|
||||||
{
|
{
|
||||||
if (failstate == TQUERY_CONNECT_FAILED)
|
if (failstate == TQUERY_CONNECT_FAILED)
|
||||||
{
|
{
|
||||||
server_print("Connection failed!")
|
server_print(" --> Connection failed!")
|
||||||
} else if (failstate == TQUERY_QUERY_FAILED) {
|
} else if (failstate == TQUERY_QUERY_FAILED) {
|
||||||
server_print("Query failed!")
|
server_print(" --> Query failed!")
|
||||||
}
|
}
|
||||||
server_print("Error code: %d (Message: ^"%s^")", errnum, error)
|
server_print(" --> Error code: %d (Message: ^"%s^")", errnum, error)
|
||||||
|
|
||||||
|
new querystring[1024]
|
||||||
|
SQL_GetQueryString(query, querystring, 1023)
|
||||||
|
server_print(" --> Original query: %s", querystring)
|
||||||
} else {
|
} else {
|
||||||
PrintQueryData(query)
|
PrintQueryData(query)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user