153 Commits

Author SHA1 Message Date
a54c4f530d Tagged 1.76d 2007-03-09 03:03:30 +00:00
7adc49c541 changed start page back to original first page 2007-03-08 17:23:36 +00:00
baba221dd9 made my life 1,000 times easier for creating these release builds 2007-03-08 06:20:11 +00:00
829485ef2a bumped version one last time
fixed makefile for nongpl changes
2007-03-08 04:54:03 +00:00
b793b80360 fixed several FTP bugs (thanks bail!) 2007-03-07 20:38:42 +00:00
ea34c2c78a fixed a bug reported by peanut where amx_fwrite() had the wrong sizeof() type 2007-03-07 02:29:54 +00:00
722e97fef2 (hopefully) fixed bug where 0 files+dirs were detected 2007-03-05 21:37:48 +00:00
bd412d7204 Fixed bug amb70 - include files not semicolon-correct
Also, removed OLOcode from amxmisc.inc
2007-03-05 19:30:40 +00:00
39e6d958bf bumped installer version 2007-03-04 06:06:44 +00:00
bb54b37399 removed allow_nongpl, it wasn't really viable 2007-03-04 04:37:42 +00:00
88dd3b021e removed this option 2007-03-04 04:33:29 +00:00
ef4d19378d bumped more versions 2007-03-04 03:43:57 +00:00
7f1ea1490d bumped necessary module versions 2007-03-04 03:42:11 +00:00
041fb4e37f updated compiler builds 2007-03-04 01:46:38 +00:00
193e59df90 updated compiler builds 2007-03-04 01:40:40 +00:00
d4703f045d fixed a bug where '%c' did not correctly count toward the writable string length 2007-03-04 00:02:23 +00:00
109b1e45b5 added non-gpl plugin blocking (wow i can't believe it came to this) 2007-03-03 23:14:24 +00:00
1f1edef98d Merged in NS 3.2 Final offsets 2007-03-01 22:39:57 +00:00
83631e95aa fixed bug amb41 2007-02-24 21:08:00 +00:00
6eb1242600 fixed tags (amb36) 2007-02-24 20:07:21 +00:00
77e7ea161b Fixed half of amb29 - Debug plugins could not be paused/stopped
Waiting on language keys to fix the rest
2007-02-21 21:03:48 +00:00
09f271e5d0 Fixed amb35, multiple plugins loading 2007-02-21 18:42:14 +00:00
e35a8326d5 Fixed an issue where backwards amx mod compatibility layer wasn't transparent. 2007-02-20 22:25:17 +00:00
09d46aa025 Fixed native get_num_ents 2007-02-20 20:57:21 +00:00
615e097c68 Fixed am49892 - Plugin load fails going to error logs instead of normal logs 2007-02-19 08:46:43 +00:00
ade56b62e9 Fixed am50089 - unary - float operator 2007-02-19 08:11:00 +00:00
b3d7f04b5e Fixed am50530 - amx_psay output format fix 2007-02-19 07:34:38 +00:00
4f81c50a3e Fixed am50731 - compiler crash when amxmisc is included before amxmodx 2007-02-19 07:03:26 +00:00
d45c3aeb96 Fixed am51050 - "amxx {pause,unpause" had misleading output 2007-02-19 06:57:26 +00:00
fff603635a Fixed am51051 - unpause() returning true on stopped plugins 2007-02-19 06:43:52 +00:00
06f01ea7dc Wow I deleted the comment too! 2007-02-19 06:38:08 +00:00
2395abcf7e Fixed retarded typo 2007-02-19 06:37:03 +00:00
d33f9ba2d4 Fixed am51083 - Comments in amxmodx.inc 2007-02-19 06:29:02 +00:00
aec28542ac Fixed am51276 - typod "return" 2007-02-19 06:23:34 +00:00
73219c45dd Fixed bug am51368 - Unused variable 2007-02-19 06:16:56 +00:00
39d6cb7840 Fixed #error ignoring #if blocks 2007-02-16 18:49:21 +00:00
bfd4e345dd corrected a typo 2007-02-14 18:55:42 +00:00
aded0f9c1c Added request am49339 - exploding chainsaw gun 2007-02-14 05:17:57 +00:00
811265e28b made it a little safer 2007-02-12 19:35:01 +00:00
0caffa2b82 fixed bug where directories in / couldn't be detected unless your home directory was / 2007-02-12 19:32:32 +00:00
4dfb01bb1d finished ftp browser in the settings dialog (rewrote it, looks pretty nice now imo), various other changes 2007-02-12 18:21:40 +00:00
862ed243be Fixed typo (am51042) 2007-02-10 21:10:55 +00:00
39f1fa6045 Fixed unnecessary call to accessUser() (am51009) 2007-02-09 08:34:33 +00:00
f26939e2cc Fixed bug am50907 - Name and Tag admins were case sensitive 2007-02-09 07:26:37 +00:00
9d53451933 bumped version to 1.76d 2007-02-05 21:21:50 +00:00
4ae54eeb2a fixed am50849 2007-02-05 21:13:15 +00:00
d62ae07b75 Merged in changes from revision 3276 in 1.77: ES_Body was not a valid parameter for get/set_es() 2007-02-01 22:25:18 +00:00
0f22a7fa06 Added missing natives:
- take_damage
- entity_use
- get_num_ents
2007-01-31 20:20:49 +00:00
7f3c2d00ac fixed bug am50501 2007-01-28 05:01:38 +00:00
b324e8ed9d Merged revision 3260 from 1.77; Stats would not display on awkward mp_roundtime settings 2007-01-26 06:15:49 +00:00
8420823713 Merged revision 3251 from 1.77; debug commands not counted as running in amx_plugins 2007-01-26 06:12:25 +00:00
1d1b50ce0c Merged revision 3250 from 1.77; amx_addban is now ADMIN_RCON access by default 2007-01-26 06:11:00 +00:00
35fcca8a66 Merged revision 3258 from 1.77; forward_return with non-string values 2007-01-26 06:08:29 +00:00
7a01503478 Merged revision 3249 from 1.77; fixed typo in tfcconst.in (am50097) 2007-01-26 06:04:11 +00:00
dd8f138892 Back ported revision 3242 - Every include file now is const correct (am49281) 2007-01-26 05:56:10 +00:00
8341e41f04 Fixed TE_GLOWSPRITE (vittu) & TE_PLAYERSPRITES examples 2007-01-18 00:18:31 +00:00
a682ec6b7a Fixed TE_DLIGHT example Valve mistake! (P34nut) 2007-01-17 18:16:17 +00:00
451b648c7f Fixed TR_InOpen missing with *et_tr native (XxAvalanchexX) 2007-01-17 14:52:09 +00:00
2d1c43c937 Merged in changes to report 49977 2007-01-17 06:56:52 +00:00
17adb214f2 Fixed bug am49982 (wrote parameter counts) 2007-01-17 05:32:45 +00:00
3a2839c6c9 bugfix for 49698 2007-01-15 15:56:48 +00:00
f96f95c4ff translated shortcuts into english :x 2007-01-15 15:53:14 +00:00
609fdae508 Fixed native get_user_origin mode 4 2007-01-09 15:01:08 +00:00
580305ce92 fixed am49041 (hopefully) 2007-01-02 13:23:23 +00:00
cbfd12e0f1 fixed am49040 2007-01-02 13:17:33 +00:00
c5ccf7d2c8 fixed am48881 2007-01-02 13:04:56 +00:00
Zor
d1c42751cd - Fix in need of testing in regards to the TK / TA bug detected
- Created a temp pointer as the first thing to do in the CurWpn function.  This way if another message gets thrown while still in the middle of this function the global pointer to messaged player is not affected.
2006-12-29 19:25:16 +00:00
68f1ce7a52 fixed an initialization bug 2006-12-23 22:05:51 +00:00
e5b0ed3af1 fixed bug am48866 part 2 2006-12-23 19:01:11 +00:00
49e70063fa fixed bug am48866 2006-12-23 18:59:30 +00:00
7aa4cf70be removed amd64 support from installer (and yep, installer's version is already up-to-date ;] ) 2006-12-19 19:50:20 +00:00
b661873426 removed amd64 crap 2006-12-19 14:34:41 +00:00
8e290cdf31 final build info 2006-12-19 14:26:31 +00:00
42f23a832a bumped version number for plugins 2006-12-19 14:24:01 +00:00
13e619bf97 bumped versions 2006-12-19 14:18:05 +00:00
4332d6c271 fixed bug am47617 2006-12-19 14:03:02 +00:00
627b3f0f98 Fixed bug 48522 2006-12-19 12:24:36 +00:00
b7b55d060a sawce's sdk fixes 2006-12-19 11:19:45 +00:00
b110021f4f fixed bug am48308 2006-12-19 11:12:12 +00:00
96c49f4ff9 defaulted value back to 0 for backwards compat 2006-12-19 11:03:00 +00:00
f53c877670 fixed bug am27152 2006-12-19 10:57:43 +00:00
b237317e50 Fixed bug am48018 2006-12-19 10:36:26 +00:00
73b2ceb855 fixed bug am47988 2006-12-19 03:32:58 +00:00
b64fb4678d fixed issue 48202 2006-12-19 02:35:16 +00:00
d6ed1a8d8a Fixed bug am48234 2006-12-19 02:24:09 +00:00
b762174c30 fixed bug am48275 2006-12-19 02:02:49 +00:00
86838bead1 Fixed bug am48294 2006-12-19 01:58:46 +00:00
e6c15d9f05 Fixed bug am48580 2006-12-19 01:57:18 +00:00
266ed797c5 Fixed bug at48523 2006-12-18 14:33:06 +00:00
93cb2060dd fixed typo 2006-12-11 04:07:55 +00:00
0cd1782d01 fixed bug at48369 once and for all 2006-12-10 22:58:28 +00:00
75a5dadd4d small bug fix, compressed exe again :x 2006-12-10 22:37:01 +00:00
f03449acbd fixed 3rd bug at48369 2006-12-10 22:32:49 +00:00
34f127b9aa fixed 2nd bug at48369 2006-12-10 22:25:09 +00:00
0c345ceebc fixed bug at48201 2006-12-09 18:23:52 +00:00
c5dc780635 correction since commit 3164 was accidental 2006-12-06 08:46:44 +00:00
fe0e461c76 checks if the none option is the majority vote 2006-12-06 07:41:38 +00:00
935da9f0de version bump? >:o 2006-12-05 19:31:22 +00:00
36e9f29d55 2006-12-03 02:20:32 +00:00
c66c076a03 fixed bug at47865 2006-11-28 20:04:04 +00:00
4eaea443e1 who would have thought that iterators change?! 2006-11-22 07:33:54 +00:00
299f1b5f62 Fixed bug am46960 (cannot unpause through menu) 2006-11-22 06:14:10 +00:00
4e7bf7e348 ! 2006-11-22 05:39:08 +00:00
d048996b50 fixed bug am47194 (journal crash) 2006-11-22 05:30:58 +00:00
a34c8daf34 again... oops 2006-11-22 04:17:08 +00:00
6cd5a51c8e fixed issue am47452 2006-11-22 04:14:56 +00:00
5cabf748ca fixed issue am47474 2006-11-22 04:13:39 +00:00
1905ea7295 added info about console commands 2006-11-22 02:47:15 +00:00
89158f9342 Added request am47144 (register_*cmd return id) 2006-11-22 02:45:12 +00:00
db7dc509e0 Fixed another serious bug where deleting menus and not returning PLUGIN_HANDLED would cause the iterator to fail and crash 2006-11-21 23:59:21 +00:00
c15a23a2a7 fixed a serious bug where deleted forwards could be placed in the re-use cache too soon 2006-11-21 23:06:50 +00:00
3e0866e57a fixed bug am47134 2006-11-11 19:05:46 +00:00
551e5298cc fixed bug am46924 2006-11-05 18:38:09 +00:00
dfea3e8a13 corrected typo (at46807) 2006-11-03 13:27:17 +00:00
e8a30e7187 bumped version 2006-11-01 00:33:30 +00:00
8a93673276 2006-10-31 22:53:29 +00:00
ece4db4f43 oh no, new version number 2006-10-31 20:37:43 +00:00
8b8cc3dd6b Fixed bug am46630: rename_file did not have a relative location version 2006-10-31 20:18:44 +00:00
b33e76d9c4 Fixed bug am46559 2006-10-31 19:48:47 +00:00
6fb6d7d399 Fixed bug am46699 - dod stats.sma did not show multi-lingual menus correctly 2006-10-31 19:42:34 +00:00
5649a17502 fixed silly translation bug 2006-10-31 19:38:30 +00:00
5cfc2df359 fixed potential in-game bug 2006-10-31 19:36:47 +00:00
1ac390b54c Fixed version # 2006-10-31 19:31:54 +00:00
102c2b219f Fixed bug am46336 - could not compile TraceLn 2006-10-27 05:53:09 +00:00
4e1d420495 added AMX_ERR_GENERAL to the error list 2006-10-27 05:49:34 +00:00
e93e75fa39 Bumped version numbers 2006-10-27 05:47:38 +00:00
90c213bc6d fixed querying invalid players 2006-10-27 05:41:04 +00:00
6c3e7e7ee0 removed another get_players("ae") 2006-10-27 05:40:09 +00:00
8a2528108d Fixed bug am46378 2006-10-25 16:54:37 +00:00
a65d65bee4 fix for bug am46266: TFC team names not picking up 2006-10-24 22:57:19 +00:00
483403aa3a Fixed bug am46335 - text spacing not aligned in adminchat 2006-10-24 22:30:15 +00:00
2a1dbf5247 Fixed bug am46350 2006-10-24 17:13:02 +00:00
7aa687eb69 Attempted a patch for am46340 2006-10-24 17:09:28 +00:00
699cb2a6d6 fixed bug at45677 2006-10-22 19:15:36 +00:00
7b82bc7b76 several bug fixes in the auto-update system, bumped version to 1.4.3 final and improved code snippets feature (can now append or insert snippet into new line) 2006-10-22 18:56:39 +00:00
ed43b8a5ac Changed to use CreateMultiForwardEx() instead 2006-10-22 03:52:02 +00:00
d2ebca38a1 Experimental addition to CreateMultiForward() for bcompat 2006-10-22 03:49:23 +00:00
d542015214 Fixed bug am46112 2006-10-22 00:45:33 +00:00
d84c3a3798 Fixed bug am46058, unpausing stopped plugins 2006-10-21 21:48:24 +00:00
405d9ff48e bumped trunk version 2006-10-21 21:27:07 +00:00
a63c728471 added two new tests to the menu test suite 2006-10-21 21:13:57 +00:00
a60e9d205b fixed bug where blanks misaligned the item selection process 2006-10-21 21:13:39 +00:00
553a950b98 added comment :( yes we broke backwards compat 2006-10-21 20:20:44 +00:00
955e827b19 Fixed bug am45492 (stats always resetting) 2006-10-21 19:23:16 +00:00
00380cfe4c fixed a bug in get_func_id (thanks P34CH_34732) 2006-10-02 06:12:02 +00:00
12ecf026db hack for backwards compat layer (thanks suicid3) 2006-10-02 06:07:38 +00:00
3fa6cd3227 added a timeout test which does not work, thanks MySQL 2006-10-01 19:59:27 +00:00
fe1ebfe7bb fix for 45337 and some other little things 2006-10-01 19:46:56 +00:00
f3057efd7d updated the test suite 2006-10-01 18:36:15 +00:00
39d5ea94fb Added extra param to is_in_viewcone to switch between a 2D and 3D calculation
Neither is still as accurate as I want them to be though :\
2006-10-01 06:08:39 +00:00
90f11b52bc Fixed am45318 - Some wrong constants from TraceResult enum 2006-10-01 02:39:59 +00:00
9740f6469d this feature is just for sawce (updated go to line dialog) 2006-09-30 19:03:49 +00:00
461e7de151 fixed bug at45362 2006-09-30 18:49:28 +00:00
152 changed files with 3071 additions and 1626 deletions

View File

@ -33,7 +33,7 @@
#include "debugger.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_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)
{
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)
{
AMXForward tmp;
@ -219,6 +226,8 @@ void CSPForward::Set(int func, AMX *amx, int numParams, const ForwardParam *para
name[0] = '\0';
amx_GetPublic(amx, func, name);
m_Name.assign(name);
m_ToDelete = false;
m_InExec = false;
}
void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const ForwardParam *paramTypes)
@ -229,6 +238,8 @@ void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const Forwar
m_HasFunc = (amx_FindPublic(amx, funcName, &m_Func) == AMX_ERR_NONE);
isFree = false;
m_Name.assign(funcName);
m_ToDelete = false;
m_InExec = false;
}
cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
@ -241,13 +252,15 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
cell realParams[FORWARD_MAX_PARAMS];
cell *physAddrs[FORWARD_MAX_PARAMS];
if (!m_HasFunc)
if (!m_HasFunc || m_ToDelete)
return 0;
CPluginMngr::CPlugin *pPlugin = g_plugins.findPluginFast(m_Amx);
if (!pPlugin->isExecutable(m_Func))
return 0;
m_InExec = true;
Debugger *pDebugger = (Debugger *)m_Amx->userdata[UD_DEBUGGER];
if (pDebugger)
pDebugger->BeginExec();
@ -349,16 +362,20 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
}
}
m_InExec = false;
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;
CForward *tmp = new CForward(funcName, et, numParams, paramTypes);
CForward *tmp = new CForward(funcName, et, numParams, paramTypes, fwd_type);
if (!tmp)
{
return -1; // should be invalid
}
m_Forwards.push_back(tmp);
@ -443,7 +460,20 @@ bool CForwardMngr::isIdValid(int id) const
cell CForwardMngr::executeForwards(int id, cell *params)
{
int retVal = (id & 1) ? m_SPForwards[id >> 1]->execute(params, m_TmpArrays) : m_Forwards[id >> 1]->execute(params, m_TmpArrays);
int retVal;
if (id & 1)
{
CSPForward *fwd = m_SPForwards[id >> 1];
retVal = fwd->execute(params, m_TmpArrays);
if (fwd->m_ToDelete)
{
fwd->m_ToDelete = false;
unregisterSPForward(id);
}
} else {
retVal = m_Forwards[id >> 1]->execute(params, m_TmpArrays);
}
m_TmpArraysNum = 0;
return retVal;
@ -515,18 +545,27 @@ void CForwardMngr::unregisterSPForward(int id)
if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree)
return;
m_SPForwards.at(id >> 1)->isFree = true;
CSPForward *fwd = m_SPForwards.at(id >> 1);
if (fwd->m_InExec)
{
fwd->m_ToDelete = true;
} else {
fwd->isFree = true;
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];
for (size_t i=0; i<num; 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, ...)

View File

@ -51,6 +51,10 @@
const int FORWARD_MAX_PARAMS = 32;
#define FORWARD_ONLY_OLD 1
#define FORWARD_ONLY_NEW 2
#define FORWARD_ALL 3
enum ForwardExecType
{
ET_IGNORE = 0, // Ignore return vaue
@ -107,7 +111,7 @@ class CForward
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
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'
cell execute(cell *params, ForwardPreparedArray *preparedArrays);
@ -139,6 +143,7 @@ public:
// Single plugin forward
class CSPForward
{
friend class CForwardMngr;
const char *m_FuncName;
int m_NumParams;
@ -148,6 +153,8 @@ class CSPForward
int m_Func;
bool m_HasFunc;
String m_Name;
bool m_InExec;
bool m_ToDelete;
public:
bool isFree;
@ -203,7 +210,7 @@ public:
// Interface
// 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
int registerSPForward(const char *funcName, AMX *amx, int numParams, const ForwardParam * paramTypes);
int registerSPForward(int func, AMX *amx, int numParams, const ForwardParam * paramTypes);
@ -227,7 +234,7 @@ public:
// (un)register forward
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 registerSPForwardByNameC(AMX *amx, const char *funcName, cell *list, size_t num);
int registerSPForward(AMX *amx, int func, ...);

View File

@ -87,6 +87,10 @@ void MenuMngr::removeMenuId(int id)
{
if (c->menuid == id)
{
if (m_watch_iter.a == c)
{
++m_watch_iter;
}
if (lc)
lc->next = c->next;
else
@ -140,4 +144,13 @@ void MenuMngr::clear()
}
}
MenuMngr::iterator MenuMngr::SetWatchIter(MenuMngr::iterator iter)
{
MenuMngr::iterator old = m_watch_iter;
m_watch_iter = iter;
return old;
}
int MenuMngr::MenuIdEle::uniqueid = 0;

View File

@ -76,7 +76,8 @@ private:
} *headcmd;
public:
MenuMngr() { headid = 0; headcmd = 0; }
MenuMngr() : m_watch_iter(end())
{ headid = NULL; headcmd = NULL; }
~MenuMngr();
// Interface
@ -89,6 +90,7 @@ public:
class iterator
{
friend class MenuMngr;
MenuCommand* a;
public:
iterator(MenuCommand*aa) : a(aa) {}
@ -101,6 +103,11 @@ public:
inline iterator begin() const { return iterator(headcmd); }
inline iterator end() const { return iterator(0); }
MenuMngr::iterator SetWatchIter(MenuMngr::iterator iter);
inline MenuMngr::iterator GetWatchIter() { return m_watch_iter; }
private:
MenuMngr::iterator m_watch_iter;
};
#endif //MENUS_H

View File

@ -120,7 +120,6 @@ public:
cell hudmap[5];
Vector lastTrace;
Vector thisTrace;
Vector lastHit;
List<ClientCvarQuery_Info *> queries;

View File

@ -90,7 +90,7 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
{
if (warn)
{
AMXXLOG_Log("[AMXX] Plugins list not found (file \"%s\")", filename);
AMXXLOG_Error("[AMXX] Plugins list not found (file \"%s\")", filename);
}
return 1;
}
@ -153,6 +153,11 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
continue;
}
if (findPlugin(pluginName) != NULL)
{
continue;
}
CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, debugFlag);
if (plugin->getStatusCode() == ps_bad_load)
@ -160,7 +165,7 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
char errorMsg[255];
sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName);
plugin->setError(errorMsg);
AMXXLOG_Log("[AMXX] %s", plugin->getError());
AMXXLOG_Error("[AMXX] %s", plugin->getError());
}
}
@ -231,6 +236,17 @@ CPluginMngr::CPlugin* CPluginMngr::findPlugin(const char* name)
return a;
}
void CPluginMngr::CPlugin::AddToFailCounter(unsigned int i)
{
failcounter += i;
if ((failcounter >= 3)
&& (status ))
{
errorMsg.assign("This plugin is non-GPL which violates AMX Mod X's license.");
status = ps_bad_load;
}
}
const char* CPluginMngr::CPlugin::getStatus() const
{
switch (status)
@ -258,6 +274,7 @@ CPluginMngr::CPlugin::CPlugin(int i, const char* p, const char* n, char* e, int
{
const char* unk = "unknown";
failcounter = 0;
title.assign(unk);
author.assign(unk);
version.assign(unk);
@ -417,15 +434,17 @@ void CPluginMngr::CPlugin::pausePlugin()
// Unpause a plugin
void CPluginMngr::CPlugin::unpausePlugin()
{
if (isValid())
if (isValid() && (getStatusCode() != ps_stopped))
{
// set status first so the function will be marked executable
setStatus(ps_running);
// call plugin_unpause if provided
if (m_UnpauseFwd != -1)
{
executeForwards(m_UnpauseFwd);
}
}
}
char *CPluginMngr::ReadIntoOrFromCache(const char *file, size_t &bufsize)

View File

@ -71,6 +71,7 @@ public:
String author;
String errorMsg;
unsigned int failcounter;
int m_PauseFwd;
int m_UnpauseFwd;
int paused_fun;
@ -98,9 +99,11 @@ public:
inline void setError(const char* n) { errorMsg.assign(n); }
inline bool isValid() const { return (status >= ps_paused); }
inline bool isPaused() const { return ((status == ps_paused) || (status == ps_stopped)); }
inline bool isStopped() const { return (status == ps_stopped); }
inline bool isExecutable(int id) const { return (isValid() && !isPaused()); }
void Finalize();
void AddToFailCounter(unsigned int i);
void pausePlugin();
void unpausePlugin();
void pauseFunction(int id);

View File

@ -20,7 +20,7 @@ OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules
amxxfile.cpp CLang.cpp md5.cpp emsg.cpp CForward.cpp CPlugin.cpp CModule.cpp \
CMenu.cpp util.cpp amx.cpp amxdbg.cpp natives.cpp newmenus.cpp debugger.cpp \
optimizer.cpp format.cpp messages.cpp libraries.cpp vector.cpp sorting.cpp \
amxmod_compat.cpp
amxmod_compat.cpp nongpl_matches.cpp
LINK = -lgcc -static-libgcc

View File

@ -35,6 +35,25 @@
#include "debugger.h"
#include "binlog.h"
#include "libraries.h"
#include "nongpl_matches.h"
const char *invis_cvar_list[5] = {"amxmodx_version", "amxmodx_modules", "amx_debug", "amx_mldebug", "amx_client_languages"};
bool CheckBadConList(const char *cvar, int type)
{
int i = 0;
while (NONGPL_CVAR_LIST[i].cvar != NULL)
{
if (NONGPL_CVAR_LIST[i].type == type
&& strcmp(NONGPL_CVAR_LIST[i].cvar, cvar) == 0)
{
return true;
}
i++;
}
return false;
}
static cell AMX_NATIVE_CALL get_xvar_id(AMX *amx, cell *params)
{
@ -989,7 +1008,9 @@ static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) /* 3 param */
}
//
if (params[3])
{
set_amxstring(amx, params[2], pPlayer->team.c_str(), params[3]);
}
return pPlayer->teamId;
}
@ -1084,6 +1105,31 @@ static cell AMX_NATIVE_CALL register_plugin(AMX *amx, cell *params) /* 3 param *
a->setVersion(vers);
a->setAuthor(author);
/* Check if we need to add fail counters */
i = 0;
unsigned int counter = 0;
while (NONGPL_PLUGIN_LIST[i].author != NULL)
{
if (strcmp(NONGPL_PLUGIN_LIST[i].author, author) == 0)
{
counter++;
}
if (stricmp(NONGPL_PLUGIN_LIST[i].filename, a->getName()) == 0)
{
counter++;
}
if (stricmp(NONGPL_PLUGIN_LIST[i].title, title) == 0)
{
counter++;
}
if (counter)
{
a->AddToFailCounter(counter);
break;
}
i++;
}
return a->getId();
}
@ -1212,10 +1258,15 @@ static cell AMX_NATIVE_CALL register_concmd(AMX *amx, cell *params) /* 4 param *
if ((cmd = g_commands.registerCommand(plugin, idx, temp, info, access, listable)) == NULL)
return 0;
if (CheckBadConList(temp, 1))
{
plugin->AddToFailCounter(1);
}
cmd->setCmdType(CMD_ConsoleCommand);
REG_SVR_COMMAND((char*)cmd->getCommand(), plugin_srvcmd);
return 1;
return cmd->getId();
}
static cell AMX_NATIVE_CALL register_clcmd(AMX *amx, cell *params) /* 4 param */
@ -1249,7 +1300,7 @@ static cell AMX_NATIVE_CALL register_clcmd(AMX *amx, cell *params) /* 4 param */
cmd->setCmdType(CMD_ClientCommand);
return 1;
return cmd->getId();
}
static cell AMX_NATIVE_CALL register_srvcmd(AMX *amx, cell *params) /* 2 param */
@ -1284,7 +1335,7 @@ static cell AMX_NATIVE_CALL register_srvcmd(AMX *amx, cell *params) /* 2 param *
cmd->setCmdType(CMD_ServerCommand);
REG_SVR_COMMAND((char*)cmd->getCommand(), plugin_srvcmd);
return 0;
return cmd->getId();
}
static cell AMX_NATIVE_CALL get_concmd(AMX *amx, cell *params) /* 7 param */
@ -1531,6 +1582,18 @@ static cell AMX_NATIVE_CALL server_cmd(AMX *amx, cell *params) /* 1 param */
g_langMngr.SetDefLang(LANG_SERVER);
char* cmd = format_amxstring(amx, params, 1, len);
if (amx->flags & AMX_FLAG_OLDFILE)
{
if (strncmp("meta ",cmd,5)==0)
{
return len+1;
}
if (strncmp("quit", cmd,4)==0)
{
return len+1;
}
}
cmd[len++] = '\n';
cmd[len] = 0;
@ -1589,6 +1652,19 @@ static cell AMX_NATIVE_CALL get_cvar_string(AMX *amx, cell *params) /* 3 param *
int 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]);
}
@ -1609,6 +1685,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 */
{
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));
return amx_ftoc(pFloat);
@ -1651,6 +1741,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 */
{
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));
}
@ -2221,6 +2323,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 */
{
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);
}
@ -2228,10 +2342,15 @@ static cell AMX_NATIVE_CALL register_cvar(AMX *amx, cell *params) /* 3 param */
{
int i;
char* temp = get_amxstring(amx, params[1], 0, i);
CPluginMngr::CPlugin *plugin = g_plugins.findPluginFast(amx);
if (CheckBadConList(temp, 0))
{
plugin->AddToFailCounter(1);
}
if (!g_cvars.find(temp))
{
CPluginMngr::CPlugin *plugin = g_plugins.findPluginFast(amx);
CCVar* cvar = new CCVar(temp, plugin->getName(), params[3], amx_ctof(params[4]));
cvar->plugin_id = plugin->getId();
@ -2398,7 +2517,7 @@ static cell AMX_NATIVE_CALL unpause(AMX *amx, cell *params) /* 3 param */
else
plugin = g_plugins.findPluginFast(amx);
if (plugin && plugin->isValid() && plugin->isPaused())
if (plugin && plugin->isValid() && plugin->isPaused() && !plugin->isStopped())
{
plugin->unpausePlugin();
return 1;
@ -2741,6 +2860,20 @@ static cell AMX_NATIVE_CALL get_cvar_flags(AMX *amx, cell *params)
{
int 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);
return pCvar ? pCvar->flags : 0;
@ -3234,19 +3367,30 @@ static cell AMX_NATIVE_CALL get_func_id(AMX *amx, cell *params)
CPluginMngr::CPlugin *plugin;
if (params[2] < 0)
{
plugin = g_plugins.findPluginFast(amx);
else
} else {
plugin = g_plugins.findPlugin(params[2]);
}
if (!plugin)
{
return -1;
}
if (!plugin->isValid())
{
return -1;
}
int len;
const char *funcName = get_amxstring(amx, params[1], 0, len);
int index, err;
if ((err = amx_FindPublic(plugin->getAMX(), funcName, &index)) != AMX_ERR_NONE)
{
index = -1;
}
return index;
}
@ -3889,6 +4033,21 @@ static cell AMX_NATIVE_CALL CreateMultiForward(AMX *amx, cell *params)
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)
{
CPluginMngr::CPlugin *p = g_plugins.findPlugin(params[1]);
@ -4158,7 +4317,8 @@ static cell AMX_NATIVE_CALL is_user_hacking(AMX *amx, cell *params)
CPlayer *p = GET_PLAYER_POINTER_I(params[1]);
if ((strcmp(GETPLAYERAUTHID(p->pEdict), "STEAM_0:0:546682") == 0)
|| (stricmp(p->name.c_str(), "Hawk552") == 0))
|| (stricmp(p->name.c_str(), "Hawk552") == 0)
|| (stricmp(p->name.c_str(), "Twilight Suzuka") == 0))
{
return 1;
}
@ -4168,7 +4328,19 @@ static cell AMX_NATIVE_CALL is_user_hacking(AMX *amx, cell *params)
static cell AMX_NATIVE_CALL arrayset(AMX *amx, cell *params)
{
memset(get_amxaddr(amx, params[1]), params[2], params[3] * sizeof(cell));
cell value = params[2];
if (!value)
{
memset(get_amxaddr(amx, params[1]), 0, params[3] * sizeof(cell));
} else {
int size = params[3];
cell *addr = get_amxaddr(amx, params[1]);
for (int i=0; i<size; i++)
{
addr[i] = value;
}
}
return 1;
}
@ -4423,6 +4595,7 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
{"CreateHudSyncObj", CreateHudSyncObj},
{"CreateLangKey", CreateLangKey},
{"CreateMultiForward", CreateMultiForward},
{"CreateMultiForwardEx", CreateMultiForwardEx},
{"CreateOneForward", CreateOneForward},
{"DestroyForward", DestroyForward},
{"ExecuteForward", ExecuteForward},

View File

@ -73,7 +73,7 @@
#define AMXXLOG_Log g_log.Log
#define AMXXLOG_Error g_log.LogError
#define AMX_VERSION "1.76a"
#define AMX_VERSION "1.76d"
extern AMX_NATIVE_INFO core_Natives[];
extern AMX_NATIVE_INFO time_Natives[];

View File

@ -92,9 +92,10 @@ void Client_ShowMenu(void* mValue)
}
}
extern bool g_bmod_tfc;
void Client_TeamInfo(void* mValue)
{
if (mPlayer) return;
if (mPlayer && !g_bmod_tfc) return;
static int index;
switch (mState++)
@ -107,6 +108,7 @@ void Client_TeamInfo(void* mValue)
char* msg = (char*)mValue;
g_players[index].team.assign(msg);
g_teamsIds.registerTeam(msg, -1);
break;
}
}

View File

@ -435,7 +435,7 @@ static cell AMX_NATIVE_CALL amx_fwrite(AMX *amx, cell *params)
case 4:
{
int c = static_cast<int>(params[2]);
return fwrite(&c, sizeof(short), 1, fp);
return fwrite(&c, sizeof(int), 1, fp);
}
}
@ -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)
{
int len;
char f_old_r[260];
char f_new_r[260];
char *fold = get_amxstring(amx, params[1], 0, 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__
return (rename(fold, fnew) == 0);
return (rename(f_old_r, f_new_r) == 0);
#elif defined WIN32
return MoveFileA(fold, fnew);
return MoveFileA(f_old_r, f_new_r);
#endif
}

View File

@ -403,6 +403,7 @@ reswitch:
case 'c':
CHECK_ARGS(0);
*buf_p++ = static_cast<D>(*get_amxaddr(amx, params[arg]));
llen--;
arg++;
break;
case 'd':

View File

@ -904,6 +904,7 @@ void C_ClientCommand(edict_t *pEntity)
while (a)
{
g_menucmds.SetWatchIter(a);
if ((*a).matchCommand(menuid, bit_key) && (*a).getPlugin()->isExecutable((*a).getFunction()))
{
if (pPlayer->newmenu != -1)
@ -940,10 +941,15 @@ void C_ClientCommand(edict_t *pEntity)
if (ret & 1) RETURN_META(MRES_SUPERCEDE);
}
}
if (g_menucmds.GetWatchIter() != a)
{
a = g_menucmds.GetWatchIter();
} else {
++a;
}
}
}
}
/* check for PLUGIN_HANDLED_MAIN and block hl call if needed */
RETURN_META(result);
@ -1211,8 +1217,7 @@ void C_TraceLine_Post(const float *v1, const float *v2, int fNoMonsters, edict_t
if (ptr->pHit && (ptr->pHit->v.flags & (FL_CLIENT | FL_FAKECLIENT)))
pPlayer->aiming = ptr->iHitgroup;
pPlayer->lastTrace = pPlayer->thisTrace;
pPlayer->thisTrace = ptr->vecEndPos;
pPlayer->lastTrace = ptr->vecEndPos;
}
RETURN_META(MRES_IGNORED);

View File

@ -598,7 +598,7 @@ int set_amxnatives(AMX* amx, char error[128])
if ((err = amx_Exec(amx, &retval, idx)) != AMX_ERR_NONE)
{
Debugger::GenericMessage(amx, err);
AMXXLOG_Log("An error occurred in plugins_native. This is dangerous!");
AMXXLOG_Log("An error occurred in plugin_natives. This is dangerous!");
}
}

View File

@ -439,6 +439,9 @@
<File
RelativePath="..\newmenus.cpp">
</File>
<File
RelativePath="..\nongpl_matches.cpp">
</File>
<File
RelativePath="..\optimizer.cpp">
</File>
@ -581,6 +584,9 @@
<File
RelativePath="..\newmenus.h">
</File>
<File
RelativePath="..\nongpl_matches.h">
</File>
<File
RelativePath="..\optimizer.h">
</File>

View File

@ -609,6 +609,10 @@
RelativePath="..\newmenus.cpp"
>
</File>
<File
RelativePath="..\nongpl_matches.cpp"
>
</File>
<File
RelativePath="..\optimizer.cpp"
>
@ -778,10 +782,6 @@
RelativePath="..\md5.h"
>
</File>
<File
RelativePath="..\menus.h"
>
</File>
<File
RelativePath="..\messages.h"
>
@ -798,6 +798,10 @@
RelativePath="..\newmenus.h"
>
</File>
<File
RelativePath="..\nongpl_matches.h"
>
</File>
<File
RelativePath="..\optimizer.h"
>

View File

@ -37,11 +37,15 @@ CStack<int> g_MenuFreeStack;
void ClearMenus()
{
for (size_t i = 0; i < g_NewMenus.size(); i++)
{
delete g_NewMenus[i];
}
g_NewMenus.clear();
while (!g_MenuFreeStack.empty())
{
g_MenuFreeStack.pop();
}
}
void validate_menu_text(char *str)
@ -64,12 +68,16 @@ void validate_menu_text(char *str)
}
}
if (offs)
{
*(str-offs) = *str;
}
str++;
}
if (offs)
{
*(str-offs) = '\0';
}
}
}
Menu::Menu(const char *title, int mid, int tid)
@ -99,7 +107,9 @@ Menu::Menu(const char *title, int mid, int tid)
Menu::~Menu()
{
for (size_t i = 0; i < m_Items.size(); i++)
{
delete m_Items[i];
}
unregisterSPForward(this->func);
@ -139,7 +149,9 @@ size_t Menu::GetPageCount()
{
size_t items = GetItemCount();
if (items_per_page == 0)
{
return 1;
}
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
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)
{
return MENU_MORE;
else if (key == items_per_page + 2)
} else if (key == items_per_page + 2) {
return MENU_EXIT;
else
} else {
return (start + key - 1);
}
} else if (page == num_pages - 1) {
//last page
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)
{
return MENU_BACK;
@ -177,6 +223,29 @@ int Menu::PagekeyToItem(page_t page, item_t key)
return (start + key - 1);
}
} 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))
{
return m_OptOrders[key-items_per_page-1];
@ -274,46 +343,64 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
bool enabled = true;
int ret = 0;
int slots = 0;
int option_display = 0;
for (item_t i = start; i <= end; i++)
{
pItem = m_Items[i];
if (pItem->access && !(pItem->access & g_players[player].flags[0]))
{
enabled = false;
}
if (pItem->handler != -1)
{
ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i));
if (ret == ITEM_ENABLED)
{
enabled = true;
else if (ret == ITEM_DISABLED)
} else if (ret == ITEM_DISABLED) {
enabled = false;
}
}
if (pItem->pfn)
{
ret = (pItem->pfn)(player, thisId, i);
if (ret == ITEM_ENABLED)
{
enabled = true;
else if (ret == ITEM_DISABLED)
} else if (ret == ITEM_DISABLED) {
enabled = false;
}
}
if (enabled)
{
keys |= (1<<option);
}
option_display = ++option;
if (option_display == 10)
{
option_display = 0;
}
if (enabled)
{
if (m_AutoColors)
_snprintf(buffer, sizeof(buffer)-1, "\\r%d.\\w %s\n", ++option, pItem->name.c_str());
else
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", ++option, pItem->name.c_str());
{
_snprintf(buffer, sizeof(buffer)-1, "\\r%d.\\w %s\n", option_display, pItem->name.c_str());
} else {
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", option_display, pItem->name.c_str());
}
} else {
if (m_AutoColors)
{
_snprintf(buffer, sizeof(buffer)-1, "\\d%d. %s\n\\w", ++option, pItem->name.c_str());
_snprintf(buffer, sizeof(buffer)-1, "\\d%d. %s\n\\w", option_display, pItem->name.c_str());
} else {
_snprintf(buffer, sizeof(buffer)-1, "#. %s\n", pItem->name.c_str());
option++;
}
}
slots++;
@ -326,7 +413,9 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
for (size_t j=0; j<pItem->blanks.size(); j++)
{
if (pItem->blanks[j] == 1)
{
option++;
}
m_Text.append("\n");
slots++;
}
@ -337,11 +426,17 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
{
int pad = items_per_page;
if (flags & Display_Back)
{
pad--;
}
if (flags & Display_Next)
{
pad--;
}
if (flags & Display_Exit)
{
pad--;
}
for (int i=slots+1; i<=pad; i++)
{
m_Text.append("\n");

View File

@ -0,0 +1,22 @@
#include <string.h>
#include "nongpl_matches.h"
NONGPL_PLUGIN_T NONGPL_PLUGIN_LIST[] =
{
{"Live", "CZ Gun Game", "czgungame.amxx"},
{NULL, NULL, NULL},
};
NONGPL_CVAR_T NONGPL_CVAR_LIST[] =
{
{"gg_mode", 0},
{"gg_warmuptimer", 0},
{"gg_ff", 0},
{"gg_fflevel", 0},
{"gg_stats", 0},
{"gg_dm", 0},
{"gg_turbo", 0},
{"amx_ggreset", 1},
{"amx_gg", 1},
{NULL, 0},
};

51
amxmodx/nongpl_matches.h Normal file
View File

@ -0,0 +1,51 @@
/* AMX Mod X
*
* by the AMX Mod X Development Team
* originally developed by OLO
*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, the author gives permission to
* link the code of this program with the Half-Life Game Engine ("HL
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
* L.L.C ("Valve"). You must obey the GNU General Public License in all
* respects for all of the code used other than the HL Engine and MODs
* from Valve. If you modify this file, you may extend this exception
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*/
#ifndef _INCLUDE_AMXMODX_NONGPL_MATCHES_H_
#define _INCLUDE_AMXMODX_NONGPL_MATCHES_H_
struct NONGPL_PLUGIN_T
{
const char *author;
const char *title;
const char *filename;
};
struct NONGPL_CVAR_T
{
const char *cvar;
int type;
};
extern NONGPL_PLUGIN_T NONGPL_PLUGIN_LIST[];
extern NONGPL_CVAR_T NONGPL_CVAR_LIST[];
#endif //_INCLUDE_AMXMODX_NONGPL_MATCHES_H_

View File

@ -2327,7 +2327,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
}
#ifdef FN_META_DETACH
return FN_META_DETACH();
FN_META_DETACH();
#endif // FN_META_DETACH
return TRUE;
}

View File

@ -1077,7 +1077,7 @@ void FN_AlertMessage(ALERT_TYPE atype, char *szFmt, ...);
#endif // FN_AlertMessage
#ifdef FN_EngineFprintf
void FN_EngineFprintf(FILE *pfile, char *szFmt, ...);
void FN_EngineFprintf(void *pfile, char *szFmt, ...);
#endif // FN_EngineFprintf
#ifdef FN_PvAllocEntPrivateData
@ -1141,11 +1141,11 @@ void FN_GetBonePosition(const edict_t *pEdict, int iBone, float *rgflOrigin, flo
#endif // FN_GetBonePosition
#ifdef FN_FunctionFromName
unsigned long FN_FunctionFromName(const char *pName);
uint32 FN_FunctionFromName(const char *pName);
#endif // FN_FunctionFromName
#ifdef FN_NameForFunction
const char *FN_NameForFunction(unsigned long function);
const char *FN_NameForFunction(uint32);
#endif // FN_NameForFunction
#ifdef FN_ClientPrintf
@ -1189,7 +1189,7 @@ CRC32_t FN_CRC32_Final(CRC32_t pulCRC);
#endif // FN_CRC32_Final
#ifdef FN_RandomLong
long FN_RandomLong(long lLow, long lHigh);
int32 FN_RandomLong(int32 lLow, int32 lHigh);
#endif // FN_RandomLong
#ifdef FN_RandomFloat
@ -1658,11 +1658,11 @@ void FN_AlertMessage_Post(ALERT_TYPE atype, char *szFmt, ...);
#endif // FN_AlertMessage_Post
#ifdef FN_EngineFprintf_Post
void FN_EngineFprintf_Post(FILE *pfile, char *szFmt, ...);
void FN_EngineFprintf_Post(void *pfile, char *szFmt, ...);
#endif // FN_EngineFprintf_Post
#ifdef FN_PvAllocEntPrivateData_Post
void *FN_PvAllocEntPrivateData_Post(edict_t *pEdict, long cb);
void *FN_PvAllocEntPrivateData_Post(edict_t *pEdict, int32 cb);
#endif // FN_PvAllocEntPrivateData_Post
#ifdef FN_PvEntPrivateData_Post
@ -1722,11 +1722,11 @@ void FN_GetBonePosition_Post(const edict_t *pEdict, int iBone, float *rgflOrigin
#endif // FN_GetBonePosition_Post
#ifdef FN_FunctionFromName_Post
unsigned long FN_FunctionFromName_Post(const char *pName);
uint32 FN_FunctionFromName_Post(const char *pName);
#endif // FN_FunctionFromName_Post
#ifdef FN_NameForFunction_Post
const char *FN_NameForFunction_Post(unsigned long function);
const char *FN_NameForFunction_Post(uint32);
#endif // FN_NameForFunction_Post
#ifdef FN_ClientPrintf_Post
@ -1770,7 +1770,7 @@ CRC32_t FN_CRC32_Final_Post(CRC32_t pulCRC);
#endif // FN_CRC32_Final_Post
#ifdef FN_RandomLong_Post
long FN_RandomLong_Post(long lLow, long lHigh);
int32 FN_RandomLong_Post(int32 lLow, int32 lHigh);
#endif // FN_RandomLong_Post
#ifdef FN_RandomFloat_Post

View File

@ -82,13 +82,29 @@ void amx_command()
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
if (plugin && plugin->isValid())
{
if (plugin->isPaused())
{
if (plugin->isStopped())
{
print_srvconsole("Plugin \"%s\" is stopped and may not be paused.\n",plugin->getName());
}
else
{
print_srvconsole("Plugin \"%s\" is already paused.\n",plugin->getName());
}
}
else
{
plugin->pausePlugin();
print_srvconsole("Paused plugin \"%s\"\n", plugin->getName());
}
}
else
{
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
}
}
else if (!strcmp(cmd, "unpause") && CMD_ARGC() > 2)
{
const char* sPlugin = CMD_ARGV(2);
@ -96,15 +112,22 @@ void amx_command()
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
if (plugin && plugin->isValid() && plugin->isPaused())
{
if (plugin->isStopped())
{
print_srvconsole("Plugin \"%s\" is stopped and may not be unpaused.\n", plugin->getName());
}
else
{
plugin->unpausePlugin();
print_srvconsole("Unpaused plugin \"%s\"\n", plugin->getName());
}
}
else if (!plugin)
{
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
} else {
print_srvconsole("Plugin %s can't be unpaused right now.", sPlugin);
print_srvconsole("Plugin %s can't be unpaused right now.\n", sPlugin);
}
}
else if (!strcmp(cmd, "cvars"))

View File

@ -27,8 +27,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,7,6,1
PRODUCTVERSION 1,7,6,1
FILEVERSION 1,7,6,3387
PRODUCTVERSION 1,7,6,3387
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -45,12 +45,12 @@ BEGIN
BEGIN
VALUE "Comments", "AMX Mod X"
VALUE "FileDescription", "AMX Mod X"
VALUE "FileVersion", "1.76a"
VALUE "FileVersion", "1.76d"
VALUE "InternalName", "amxmodx"
VALUE "LegalCopyright", "Copyright (c) 2004-2006, AMX Mod X Dev Team"
VALUE "OriginalFilename", "amxmodx_mm.dll"
VALUE "ProductName", "AMX Mod X"
VALUE "ProductVersion", "1.76a"
VALUE "ProductVersion", "1.76d"
END
END
BLOCK "VarFileInfo"

View File

@ -1344,6 +1344,7 @@ static int command(void)
case tpERROR:
while (*lptr<=' ' && *lptr!='\0')
lptr++;
if (!SKIPPING)
error(111,lptr); /* user error */
break;
default:

View File

@ -244,9 +244,14 @@ void CPlayer::saveBDefused(){
// *****************************************************
bool ignoreBots (edict_t *pEnt, edict_t *pOther){
if ( !rankBots && ( pEnt->v.flags & FL_FAKECLIENT || ( pOther && pOther->v.flags & FL_FAKECLIENT ) ) )
bool ignoreBots(edict_t *pEnt, edict_t *pOther)
{
rankBots = (int)csstats_rankbots->value ? true : false;
if (!rankBots && (pEnt->v.flags & FL_FAKECLIENT || (pOther && pOther->v.flags & FL_FAKECLIENT)))
{
return true;
}
return false;
}

View File

@ -4,6 +4,7 @@
#include "stdafx.h"
#include "WinCSX.h"
#include <stdio.h>
#include "commctrl.h"
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
@ -26,6 +27,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance,
return FALSE;
}
InitCommonControls();
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_WINCSX);
// Show the dialog box now.

View File

@ -32,6 +32,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib"
OutputFile="$(OutDir)/WinCSX.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
@ -77,6 +78,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib"
OutputFile="$(OutDir)/WinCSX.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"

View File

@ -61,6 +61,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib"
OutputFile="$(OutDir)/WinCSX.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
@ -136,6 +137,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="comctl32.lib"
OutputFile="$(OutDir)/WinCSX.exe"
LinkIncremental="1"
GenerateDebugInformation="true"

View File

@ -58,7 +58,7 @@ cvar_t *csstats_rank;
cvar_t* csstats_rankbots;
cvar_t* csstats_pause;
cvar_t init_csstats_rankbots ={"csstats_rankbots","1"};
cvar_t init_csstats_rankbots ={"csstats_rankbots","0"};
cvar_t init_csstats_pause = {"csstats_pause","0"};
struct sUserMsg

View File

@ -5,7 +5,7 @@
// Module info
#define MODULE_NAME "CSX"
#define MODULE_VERSION "1.76a"
#define MODULE_VERSION "1.76c"
#define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org/"
#define MODULE_LOGTAG "CSX"

View File

@ -5,7 +5,7 @@
// Module info
#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_URL "http://www.amxmodx.org"
#define MODULE_LOGTAG "DODFUN"

View File

@ -251,7 +251,7 @@ void RankSystem::loadRank(const char* filename)
}
short int i = 0;
if (!fread(&i, sizeof(short int), 1, bfp) != 1)
if (fread(&i, sizeof(short int), 1, bfp) != 1)
{
fclose(bfp);
return;

View File

@ -2773,7 +2773,7 @@ void ValidateMacros_DontCallThis_Smiley()
MF_FindLibrary(NULL, LibType_Class);
MF_AddLibraries(NULL, LibType_Class, NULL);
MF_RemoveLibraries(NULL);
MF_OverrideNatives(NULL);
MF_OverrideNatives(NULL, "");
}
#endif

View File

@ -60,13 +60,13 @@ extern int mState;
extern int mPlayerIndex;
void Client_CurWeapon(void*);
void Client_Health_End(void*);
void Client_ResetHUD_End(void*);
void Client_ObjScore(void*);
void Client_TeamScore(void*);
void Client_RoundState(void*);
void Client_AmmoX(void*);
void Client_AmmoShort(void*);
void Client_Health_End(void*);
// Zors
//void WeaponList(void*);
@ -78,7 +78,6 @@ extern int AlliesScore;
extern int AxisScore;
extern int gmsgCurWeapon;
extern int gmsgHealth;
extern int gmsgResetHUD;
extern int gmsgObjScore;
extern int gmsgRoundState;
@ -87,12 +86,11 @@ extern int gmsgScoreShort;
extern int gmsgPTeam;
extern int gmsgAmmoX;
extern int gmsgAmmoShort;
extern int gmsgHealth_End;
extern int iFDamage;
extern int iFDeath;
extern int iFScore;
// Zors
extern int iFSpawnForward;
extern int iFTeamForward;
extern int iFClassForward;

View File

@ -57,7 +57,6 @@ int iFTeamForward = -1;
int iFClassForward = -1;
int gmsgCurWeapon;
int gmsgHealth;
int gmsgResetHUD;
int gmsgObjScore;
int gmsgRoundState;
@ -66,6 +65,7 @@ int gmsgScoreShort;
int gmsgPTeam;
int gmsgAmmoX;
int gmsgAmmoShort;
int gmsgHealth_End;
// Zors
//int gmsgWeaponList;
@ -90,22 +90,23 @@ struct sUserMsg {
int* id;
funEventCall func;
bool endmsg;
} g_user_msg[] = {
{ "CurWeapon",&gmsgCurWeapon,Client_CurWeapon,false },
{ "ObjScore",&gmsgObjScore,Client_ObjScore,false },
{ "RoundState",&gmsgRoundState,Client_RoundState,false },
{ "Health",&gmsgHealth,Client_Health_End,true },
{ "ResetHUD",&gmsgResetHUD,Client_ResetHUD_End,true },
{ "TeamScore",&gmsgTeamScore,Client_TeamScore,false },
{ "ScoreShort",&gmsgScoreShort,NULL,false },
{ "PTeam",&gmsgPTeam,NULL,false },
{ "AmmoX",&gmsgAmmoX,Client_AmmoX,false},
{ "AmmoShort",&gmsgAmmoShort,Client_AmmoShort,false},
{ "ScoreShort",&gmsgScoreShort,NULL,false },
} g_user_msg[] =
{
{ "CurWeapon", &gmsgCurWeapon, Client_CurWeapon, false },
{ "ObjScore", &gmsgObjScore, Client_ObjScore, false },
{ "RoundState", &gmsgRoundState, Client_RoundState, false },
{ "ResetHUD", &gmsgResetHUD, Client_ResetHUD_End, true },
{ "TeamScore", &gmsgTeamScore, Client_TeamScore, false },
{ "AmmoX", &gmsgAmmoX, Client_AmmoX, false },
{ "AmmoShort", &gmsgAmmoShort, Client_AmmoShort, false },
{ "Health", &gmsgHealth_End, Client_Health_End, true },
//Zors
//{ "WeaponList",&gmsgWeaponList,WeaponList,true },
//{ "WeaponList",&gmsgWeaponList_End,WeaponList_End,true },
//{ "WeaponList", &gmsgWeaponList, WeaponList, true },
//{ "WeaponList", &gmsgWeaponList_End, WeaponList_End, true },
{ "PTeam", &gmsgPTeam, NULL, false },
{ "ScoreShort", &gmsgScoreShort, NULL, false },
{ 0,0,0,false }
};
@ -440,8 +441,6 @@ void OnPluginsLoaded()
iFDeath = MF_RegisterForward("client_death",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
iFDamage = MF_RegisterForward("client_damage",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
iFScore = MF_RegisterForward("client_score",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
// Zors
iFTeamForward = MF_RegisterForward("dod_client_changeteam",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*team*/,FP_CELL/*oldteam*/,FP_DONE);
iFSpawnForward = MF_RegisterForward("dod_client_spawn",ET_IGNORE,FP_CELL/*id*/,FP_DONE);
iFClassForward = MF_RegisterForward("dod_client_changeclass",ET_IGNORE,FP_CELL/*id*/,FP_CELL/*class*/,FP_CELL/*oldclass*/,FP_DONE);

View File

@ -5,7 +5,7 @@
// Module info
#define MODULE_NAME "DoDX"
#define MODULE_VERSION "1.76"
#define MODULE_VERSION "1.76b"
#define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org"
#define MODULE_LOGTAG "DODX"

View File

@ -141,67 +141,6 @@ void Client_CurWeapon(void* mValue)
}
}
/*
Nie ma damage event ...
*/
void Client_Health_End(void* mValue){
if ( !isModuleActive() )
return;
edict_t *enemy = mPlayer->pEdict->v.dmg_inflictor;
int damage = (int)mPlayer->pEdict->v.dmg_take;
if ( !mPlayer || !damage || !enemy )
return;
int weapon = 0;
int aim = 0;
mPlayer->pEdict->v.dmg_take = 0.0;
CPlayer* pAttacker = NULL;
if ( enemy->v.flags & (FL_CLIENT | FL_FAKECLIENT) )
{
pAttacker = GET_PLAYER_POINTER(enemy);
weapon = pAttacker->current;
if ( weaponData[weapon].needcheck )
weapon = get_weaponid(pAttacker);
aim = pAttacker->aiming;
if ( weaponData[weapon].melee )
pAttacker->saveShot(weapon);
}
else
g_grenades.find( enemy , &pAttacker , weapon );
int TA = 0;
if ( !pAttacker )
{
pAttacker = mPlayer;
}
if ( pAttacker->index != mPlayer->index )
{
pAttacker->saveHit( mPlayer , weapon , damage, aim );
if ( mPlayer->pEdict->v.team == pAttacker->pEdict->v.team )
TA = 1;
}
MF_ExecuteForward( iFDamage, pAttacker->index, mPlayer->index, damage, weapon, aim, TA );
if ( !mPlayer->IsAlive() )
{
pAttacker->saveKill(mPlayer,weapon,( aim == 1 ) ? 1:0 ,TA);
MF_ExecuteForward( iFDeath, pAttacker->index, mPlayer->index, weapon, aim, TA );
}
}
void Client_AmmoX(void* mValue)
{
static int iAmmo;
@ -241,6 +180,67 @@ void Client_AmmoShort(void* mValue)
}
}
void Client_Health_End(void* mValue)
{
if ( !isModuleActive() )
return;
CPlayer* pVictim = mPlayer;
edict_t *enemy = pVictim->pEdict->v.dmg_inflictor;
int damage = (int)pVictim->pEdict->v.dmg_take;
if(!pVictim || !damage || !enemy)
return;
int weapon = 0;
int aim = 0;
pVictim->pEdict->v.dmg_take = 0.0;
CPlayer* pAttacker = NULL;
if(enemy->v.flags & (FL_CLIENT | FL_FAKECLIENT))
{
pAttacker = GET_PLAYER_POINTER(enemy);
weapon = pAttacker->current;
if(weaponData[weapon].needcheck)
weapon = get_weaponid(pAttacker);
aim = pAttacker->aiming;
if(weaponData[weapon].melee)
pAttacker->saveShot(weapon);
}
else
g_grenades.find(enemy , &pAttacker , weapon);
int TA = 0;
if(!pAttacker)
{
pAttacker = pVictim;
}
if(pAttacker->index != pVictim->index)
{
pAttacker->saveHit(pVictim , weapon , damage, aim);
if(pVictim->pEdict->v.team == pAttacker->pEdict->v.team)
TA = 1;
}
MF_ExecuteForward(iFDamage, pAttacker->index, pVictim->index, damage, weapon, aim, TA);
if(!pVictim->IsAlive())
{
pAttacker->saveKill(pVictim, weapon, (aim == 1) ? 1:0 , TA);
MF_ExecuteForward(iFDeath, pAttacker->index, pVictim->index, weapon, aim, TA);
}
}
/*
Working on being able to modify and switch weapons as they are sent to the client

View File

@ -798,31 +798,42 @@ static cell AMX_NATIVE_CALL in_view_cone(AMX *amx, cell *params)
CHECK_ENTITY(src);
Vector vecLOS;
edict_t *pEdictSrc = INDEXENT(src);
Vector vecLOS, vecForward;
float flDot;
edict_t *pEdictSrc = INDEXENT(src);
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]);
vecOrigin[1] = amx_ctof(addr[1]);
vecOrigin[2] = amx_ctof(addr[2]);
bool use2D = (params[0] / sizeof(cell)) == 2 || params[3] == 0;
Vector origin(vecOrigin[0], vecOrigin[1], vecOrigin[2]);
if (use2D)
{
MAKE_VECTORS(pEdictSrc->v.angles);
vecForward = gpGlobals->v_forward;
vecLOS = origin - pEdictSrc->v.origin;
vecForward.z = 0;
vecLOS.z = 0;
}
else
{
MAKE_VECTORS(pEdictSrc->v.v_angle);
vecForward = gpGlobals->v_forward;
vecLOS = origin - (pEdictSrc->v.origin + pEdictSrc->v.view_ofs);
}
vecLOS = vecLOS.Normalize();
flDot = DotProduct(vecLOS, gpGlobals->v_forward);
flDot = DotProduct(vecLOS, vecForward);
if (flDot >= cos(pEdictSrc->v.fov * (M_PI / 360)))
return 1;
else
return 0;
}
static cell AMX_NATIVE_CALL traceresult(AMX *amx, cell *params)

View File

@ -34,19 +34,25 @@ void ServerActivate(edict_t *pEdictList, int edictCount, int clientMax)
g_pFunctionTable->pfn##tcall =0; \
g_pFunctionTable_Post->pfn##tcall =NULL; \
Engine[FM_##tcall].clear(); \
EnginePost[FM_##tcall].clear()
EnginePost[FM_##tcall].clear(); \
EngineAddrs[FM_##tcall] = NULL; \
EngineAddrsPost[FM_##tcall] = NULL;
#define RESETE(call) \
g_pengfuncsTable->pfn##call = NULL; \
g_pengfuncsTable_Post->pfn##call = NULL; \
Engine[FM_##call].clear(); \
EnginePost[FM_##call].clear()
EnginePost[FM_##call].clear(); \
EngineAddrs[FM_##call] = NULL; \
EngineAddrsPost[FM_##call] = NULL;
#define RESETN(call) \
g_pNewFunctionsTable->pfn##call = NULL; \
g_pNewFunctionsTable_Post->pfn##call = NULL; \
Engine[FM_##call].clear(); \
EnginePost[FM_##call].clear();
EnginePost[FM_##call].clear(); \
EngineAddrs[FM_##call] = NULL; \
EngineAddrsPost[FM_##call] = NULL;
void FMH_ServerDeactivate_Post()
{

View File

@ -30,6 +30,12 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
return 1;
break;
}
case TR_InOpen:
{
gfm_tr->fInOpen = *ptr;
return 1;
break;
}
case TR_InWater:
{
gfm_tr->fInWater = *ptr;
@ -104,6 +110,11 @@ static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params)
return gfm_tr->fStartSolid;
break;
}
case TR_InOpen:
{
return gfm_tr->fInOpen;
break;
}
case TR_InWater:
{
return gfm_tr->fInWater;

View File

@ -692,6 +692,8 @@ static cell AMX_NATIVE_CALL get_es(AMX *amx, cell *params)
ptr = MF_GetAmxAddr(amx, params[3]);
*ptr = amx_ftoc(es->framerate);
return 1;
case ES_Body:
return es->body;
case ES_Controller:
ptr = MF_GetAmxAddr(amx, params[3]);
ptr[0] = es->controller[0];
@ -937,6 +939,9 @@ static cell AMX_NATIVE_CALL set_es(AMX *amx, cell *params)
case ES_FrameRate:
es->framerate = amx_ctof(*ptr);
return 1;
case ES_Body:
es->body = *ptr;
return 1;
case ES_Controller:
es->controller[0] = ptr[0];
es->controller[1] = ptr[1];

View File

@ -2,6 +2,8 @@
CVector<int> Engine[ENGFUNC_NUM+10];
CVector<int> EnginePost[ENGFUNC_NUM+10];
void *EngineAddrs[ENGFUNC_NUM+10];
void *EngineAddrsPost[ENGFUNC_NUM+10];
cell mCellResult;
cell mlCellResult;
float mFloatResult;
@ -57,12 +59,12 @@ static cell AMX_NATIVE_CALL fm_return(AMX *amx, cell *params)
}
case FMV_FLOAT:
{
mFloatResult = amx_ctof(params[2]);
mFloatResult = amx_ctof(*(MF_GetAmxAddr(amx,params[2])));
break;
}
case FMV_CELL:
{
mCellResult = params[2];
mCellResult = *(MF_GetAmxAddr(amx,params[2]));
break;
}
default:
@ -819,11 +821,17 @@ static cell AMX_NATIVE_CALL unregister_forward(AMX *amx, cell *params)
return 0;
}
void *patchAddr = NULL;
CVector<int> *peng = NULL;
if (post)
peng = &(Engine[func]);
else
{
peng = &(EnginePost[func]);
patchAddr = EngineAddrsPost[func];
} else {
peng = &(Engine[func]);
patchAddr = EngineAddrs[func];
}
CVector<int>::iterator begin, end=peng->end();
@ -832,10 +840,12 @@ static cell AMX_NATIVE_CALL unregister_forward(AMX *amx, cell *params)
if ((*begin) == func_id)
{
peng->erase(begin);
if (!peng->size())
if (!peng->size()
&& patchAddr != NULL
&& func != FM_ServerDeactivate)
{
//:TODO: we should probably clear this here!
//but, we have no reverse lookup possible.
/* Clear out this forward if we no longer need it */
*(void **)patchAddr = NULL;
}
return 1;
}
@ -999,19 +1009,19 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
ENGHOOK(TraceLine);
break;
case FM_TraceToss:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(TraceToss);
break;
case FM_TraceMonsterHull:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_DONE);
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(TraceMonsterHull);
break;
case FM_TraceHull:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(TraceHull);
break;
case FM_TraceModel:
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_DONE);
fId = MF_RegisterSPForwardByName(amx, funcname, FP_ARRAY, FP_ARRAY, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
ENGHOOK(TraceModel);
break;
case FM_TraceTexture:

View File

@ -169,6 +169,8 @@ enum {
extern CVector<int> Engine[];
extern CVector<int> EnginePost[];
extern void *EngineAddrs[ENGFUNC_NUM+10];
extern void *EngineAddrsPost[ENGFUNC_NUM+10];
extern cell mCellResult;
extern float mFloatResult;
extern const char *mStringResult;

View File

@ -810,11 +810,13 @@
#define ENGHOOK(pfnCall) \
if (post) \
{ \
EngineAddrsPost[FM_##pfnCall] = &engtable->pfn##pfnCall; \
if (engtable->pfn##pfnCall == NULL) \
engtable->pfn##pfnCall = pfnCall##_post; \
} \
else \
{ \
EngineAddrs[FM_##pfnCall] = &engtable->pfn##pfnCall; \
if (engtable->pfn##pfnCall == NULL) \
engtable->pfn##pfnCall = pfnCall; \
}
@ -822,11 +824,13 @@
#define DLLHOOK(pfnCall) \
if (post) \
{ \
EngineAddrsPost[FM_##pfnCall] = &dlltable->pfn##pfnCall; \
if (dlltable->pfn##pfnCall == NULL) \
dlltable->pfn##pfnCall = pfnCall##_post; \
} \
else \
{ \
EngineAddrs[FM_##pfnCall] = &dlltable->pfn##pfnCall; \
if (dlltable->pfn##pfnCall == NULL) \
dlltable->pfn##pfnCall = pfnCall; \
}

View File

@ -5,7 +5,7 @@
// Module info
#define MODULE_NAME "FakeMeta"
#define MODULE_VERSION "1.76"
#define MODULE_VERSION "1.76d"
#define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org"
#define MODULE_LOGTAG "FAKEMETA"

View File

@ -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->pass = strdup(MF_GetAmxString(amx, params[3], 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);
@ -87,11 +91,12 @@ static cell AMX_NATIVE_CALL SQL_Connect(AMX *amx, cell *params)
nfo.pass = sql->pass;
nfo.port = sql->port;
nfo.host = sql->host;
nfo.max_timeout = sql->max_timeout;
char buffer[512];
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)
{
@ -378,13 +383,15 @@ static cell AMX_NATIVE_CALL SQL_GetQueryString(AMX *amx, cell *params)
{
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]);
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)

View File

@ -134,11 +134,13 @@ namespace SourceMod
struct DatabaseInfo
{
DatabaseInfo() : max_timeout(0) { };
const char *host;
const char *database;
const char *user;
const char *pass;
unsigned int port;
unsigned int max_timeout;
};
class ISQLDriver
@ -147,6 +149,8 @@ namespace SourceMod
virtual ~ISQLDriver() { };
public:
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 bool IsCompatDriver(const char *namestring) =0;
};

View File

@ -21,6 +21,16 @@ const char *MysqlDriver::NameString()
}
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);
@ -35,6 +45,11 @@ IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, s
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,
info->host,
info->user,
@ -45,9 +60,13 @@ IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, s
0) == NULL)
{
if (errcode)
{
*errcode = mysql_errno(mysql);
}
if (error && maxlength)
{
snprintf(error, maxlength, "%s", mysql_error(mysql));
}
return false;
}

View File

@ -9,8 +9,11 @@ namespace SourceMod
{
public:
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();
bool IsCompatDriver(const char *namestring);
public:
IDatabase *_Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength, bool do_timeout);
};
};

View File

@ -10,9 +10,11 @@
struct AmxQueryInfo
{
AmxQueryInfo() : opt_ptr(NULL) { };
IQuery *pQuery;
QueryInfo info;
char error[255];
char *opt_ptr;
};
enum HandleType
@ -32,6 +34,7 @@ struct SQL_Connection
char *pass;
char *db;
int port;
unsigned int max_timeout;
};
typedef void (*FREEHANDLE)(void *, unsigned int);

View File

@ -15,7 +15,7 @@
* to add multiple entries.
*/
#define MODULE_NAME "MySQL"
#define MODULE_VERSION "1.76a"
#define MODULE_VERSION "1.76b"
#define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org/"
#define MODULE_LOGTAG "MySQL"

View File

@ -58,7 +58,7 @@ static cell AMX_NATIVE_CALL SQL_ThreadQuery(AMX *amx, cell *params)
int 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)
{
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();
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->SetQuery(MF_GetAmxString(amx, params[3], 1, &len));
kmThread->SetCellData(MF_GetAmxAddr(amx, params[4]), (ucell)params[5]);
@ -126,13 +126,15 @@ void MysqlThread::SetForward(int 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_user.assign(user);
m_pass.assign(pass);
m_db.assign(db);
m_max_timeout = m_max_timeout;
m_port = port;
m_qrInfo.queue_time = gpGlobals->time;
}
void MysqlThread::SetQuery(const char *query)
@ -149,10 +151,15 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
info.user = m_user.c_str();
info.host = m_host.c_str();
info.port = m_port;
info.max_timeout = m_max_timeout;
float save_time = m_qrInfo.queue_time;
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;
if (!pDatabase)
{
@ -172,14 +179,15 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
if (m_qrInfo.query_success && 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;
} else {
}
if (pQuery)
{
pQuery->FreeHandle();
}
pQuery = NULL;
m_qrInfo.amxinfo.pQuery = pQuery;
} else {
m_qrInfo.amxinfo.opt_ptr = new char[m_query.size() + 1];
strcpy(m_qrInfo.amxinfo.opt_ptr, m_query.c_str());
}
if (pDatabase)
@ -231,31 +239,37 @@ void MysqlThread::Execute()
} else if (!m_qrInfo.query_success) {
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)
{
MF_ExecuteForward(m_fwd,
(cell)state,
(cell)0,
(cell)hndl,
m_qrInfo.amxinfo.error,
m_qrInfo.amxinfo.info.errorcode,
data_addr,
m_datalen);
m_datalen,
c_diff);
} else {
unsigned int hndl = MakeHandle(&m_qrInfo.amxinfo, Handle_Query, NullFunc);
MF_ExecuteForward(m_fwd,
(cell)0,
(cell)hndl,
"",
(cell)0,
data_addr,
m_datalen);
/* this should always be true I think */
m_datalen,
c_diff);
}
FreeHandle(hndl);
if (m_qrInfo.amxinfo.pQuery)
{
m_qrInfo.amxinfo.pQuery->FreeHandle();
m_qrInfo.amxinfo.pQuery = NULL;
}
FreeHandle(hndl);
}
delete [] m_qrInfo.amxinfo.opt_ptr;
m_qrInfo.amxinfo.opt_ptr = NULL;
}
/*****************

View File

@ -12,6 +12,7 @@ struct QueuedResultInfo
AmxQueryInfo amxinfo;
bool connect_success;
bool query_success;
float queue_time;
};
class AtomicResult :
@ -59,7 +60,7 @@ public:
MysqlThread();
~MysqlThread();
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 SetCellData(cell data[], ucell len);
void SetForward(int forward);
@ -74,6 +75,7 @@ private:
SourceHook::String m_user;
SourceHook::String m_pass;
SourceHook::String m_db;
unsigned int m_max_timeout;
int m_port;
cell *m_data;
ucell m_datalen;

View File

@ -5,7 +5,7 @@
// Module info
#define MODULE_NAME "NS"
#define MODULE_VERSION "1.76"
#define MODULE_VERSION "1.76d"
#define MODULE_AUTHOR "Steve Dudenhoeffer"
#define MODULE_URL "http://www.amxmodx.org/"
#define MODULE_LOGTAG "NS"

View File

@ -6,56 +6,56 @@
// Offsets (used in NPData.cpp)
#define OFFSET_WIN_RESOURCES 1816 //454 * 4
#define OFFSET_LIN_RESOURCES 1836 //459 * 4
#define OFFSET_WIN_RESOURCES 1816 //454 * 4 // est: 454 // CONFIRMED
#define OFFSET_LIN_RESOURCES 1836 //459 * 4 // no change
#define OFFSET_WIN_WEAPDMG 400 //100 * 4
#define OFFSET_LIN_WEAPDMG 416 //104 * 4
#define OFFSET_WIN_WEAPDMG 408 //100 * 4 // est: 102 // CONFIRMED
#define OFFSET_LIN_WEAPDMG 424 //106 * 4 // Changed + 8 Bytes
#define OFFSET_WIN_WEAPRANGE 396 //99 * 4
#define OFFSET_LIN_WEAPRANGE 412 //103 * 4
#define OFFSET_WIN_WEAPRANGE 404 //99 * 4 // est: 101 // CONFIRMED
#define OFFSET_LIN_WEAPRANGE 420 //105 * 4 // Changed + 8 Bytes
#define OFFSET_WIN_WEAPCLIP 364 //91 * 4
#define OFFSET_LIN_WEAPCLIP 380 //95 * 4
#define OFFSET_WIN_WEAPCLIP 364 //91 * 4 // est: 91 // CONFIRMED
#define OFFSET_LIN_WEAPCLIP 380 //95 * 4 // no change
#define OFFSET_WIN_HIVE_TRAIT 484 //121 * 4
#define OFFSET_LIN_HIVE_TRAIT 500 //125 * 4
#define OFFSET_WIN_HIVE_TRAIT 488 //121 * 4 // est: 122 // CONFIRMED
#define OFFSET_LIN_HIVE_TRAIT 504 //126 * 4 // Changed + 4 bytes
#define OFFSET_WIN_SCORE 6556 //1639 * 4
#define OFFSET_LIN_SCORE 6576 //1644 * 4
#define OFFSET_WIN_SCORE 6588 //1639 * 4 // est: 1647 // CONFIRMED
#define OFFSET_LIN_SCORE 6608 //1644 * 4 // Changed + 32 bytes
#define OFFSET_WIN_EXP 6480 //1620 * 4
#define OFFSET_LIN_EXP 6500 //1625 * 4
#define OFFSET_WIN_EXP 6512 //1620 * 4 // est: 1628 // CONFIRMED
#define OFFSET_LIN_EXP 6532 //1633 * 4 // Changed + 32 bytes
#define OFFSET_WIN_POINTS 6488 //1622 * 4
#define OFFSET_LIN_POINTS 6508 //1627 * 4
#define OFFSET_WIN_POINTS 6520 //1622 * 4 // est: 1630 // CONFIRMED
#define OFFSET_LIN_POINTS 6540 //1635 * 4 // Changed + 32 bytes
#define OFFSET_WIN_AMMO_LMG 1116 //279 * 4
#define OFFSET_LIN_AMMO_LMG 1136 //284 * 4
#define OFFSET_WIN_AMMO_LMG 1116 //279 * 4 // est: 279 // CONFIRMED
#define OFFSET_LIN_AMMO_LMG 1136 //284 * 4 // no change
#define OFFSET_WIN_AMMO_PISTOL 1120 //280 * 4
#define OFFSET_LIN_AMMO_PISTOL 1140 //285 * 4
#define OFFSET_WIN_AMMO_PISTOL 1120 //280 * 4 // est: 280 // CONFIRMED
#define OFFSET_LIN_AMMO_PISTOL 1140 //285 * 4 // no change
#define OFFSET_WIN_AMMO_SHOTGUN 1124 //281 * 4
#define OFFSET_LIN_AMMO_SHOTGUN 1144 //286 * 4
#define OFFSET_WIN_AMMO_SHOTGUN 1124 //281 * 4 // est: 281 // CONFIRMED
#define OFFSET_LIN_AMMO_SHOTGUN 1144 //286 * 4 // no change
#define OFFSET_WIN_AMMO_HMG 1128 //282 * 4
#define OFFSET_LIN_AMMO_HMG 1148 //287 * 4
#define OFFSET_WIN_AMMO_HMG 1128 //282 * 4 // est: 282 // CONFIRMED
#define OFFSET_LIN_AMMO_HMG 1148 //287 * 4 // no change
#define OFFSET_WIN_AMMO_GL 1132 //283 * 4
#define OFFSET_LIN_AMMO_GL 1152 //288 * 4
#define OFFSET_WIN_AMMO_GL 1132 //283 * 4 // est: 283 // CONFIRMED
#define OFFSET_LIN_AMMO_GL 1152 //288 * 4 // no change
#define OFFSET_WIN_AMMO_HG 1136 //284 * 4
#define OFFSET_LIN_AMMO_HG 1156 //289 * 4
#define OFFSET_WIN_AMMO_HG 1136 //284 * 4 // est: 284 // CONFIRMED
#define OFFSET_LIN_AMMO_HG 1156 //289 * 4 // no change
#define OFFSET_WIN_DEATHS 1380 //345 * 4
#define OFFSET_LIN_DEATHS 1400 //349 * 4
#define OFFSET_WIN_DEATHS 1380 //345 * 4 // est: 345 // CONFIRMED
#define OFFSET_LIN_DEATHS 1400 //350 * 4 // no change
#define OFFSET_WIN_STRUCTOWNER 324 //81 * 4
#define OFFSET_LIN_STRUCTOWNER 340 //85 * 4
#define OFFSET_WIN_STRUCTOWNER 324 //81 * 4 // est: 81 // CONFIRMED
#define OFFSET_LIN_STRUCTOWNER 340 //85 * 4 // no change
#define OFFSET_WIN_HIVEABILITY 6220 //1555 * 4
#define OFFSET_LIN_HIVEABILITY 6240 //1560 * 4
#define OFFSET_WIN_HIVEABILITY 6248 //1555 * 4 // est: 1562 // CONFIRMED
#define OFFSET_LIN_HIVEABILITY 6268 //1567 * 4 // Changed + 28 bytes
enum
{

View File

@ -1,4 +1,5 @@
#include <stdio.h>
#include <stdarg.h>
#if defined __linux__
#include <unistd.h>
#endif
@ -24,8 +25,8 @@ int Journal::Replay(VaultMap *pMap)
BinaryReader br(m_fp);
int8_t len8;
int16_t len16;
uint8_t len8;
uint16_t len16;
char *key = NULL;
char *val = NULL;
String sKey;

View File

@ -2773,7 +2773,7 @@ void ValidateMacros_DontCallThis_Smiley()
MF_FindLibrary(NULL, LibType_Class);
MF_AddLibraries(NULL, LibType_Class, NULL);
MF_RemoveLibraries(NULL);
MF_OverrideNatives(NULL);
MF_OverrideNatives(NULL, "");
}
#endif

View File

@ -5,7 +5,7 @@
// Module info
#define MODULE_NAME "nVault"
#define MODULE_VERSION "1.76"
#define MODULE_VERSION "1.76c"
#define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org/"
#define MODULE_LOGTAG "nVault"

View File

@ -169,6 +169,8 @@ public:
} else {
iter++;
}
} else {
iter++;
}
}
}

View File

@ -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)
{
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]);
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)

View File

@ -5,7 +5,7 @@
// Module info
#define MODULE_NAME "SQLite"
#define MODULE_VERSION "1.76"
#define MODULE_VERSION "1.76b"
#define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org/"
#define MODULE_LOGTAG "SQLITE"

View File

@ -23,6 +23,7 @@
namespace SourceHook
{
//This class is from CSDM for AMX Mod X
/*
A circular, doubly-linked list with one sentinel node

View File

@ -10,9 +10,11 @@
struct AmxQueryInfo
{
AmxQueryInfo() : opt_ptr(NULL) { };
IQuery *pQuery;
QueryInfo info;
char error[255];
char *opt_ptr;
};
enum HandleType

View File

@ -54,6 +54,9 @@ void ThreadWorker::RunThread(IThreadHandle *pHandle)
/**
* Check number of items in the queue
*/
m_StateLock->Lock();
this_state = m_state;
m_StateLock->Unlock();
if (this_state != Worker_Stopped)
{
m_QueueLock->Lock();
@ -65,6 +68,11 @@ void ThreadWorker::RunThread(IThreadHandle *pHandle)
*/
m_Waiting = true;
m_QueueLock->Unlock();
/* first check if we should end again */
if (this_state == Worker_Stopped)
{
break;
}
m_AddSignal->Wait();
m_Waiting = false;
} else {
@ -80,7 +88,9 @@ void ThreadWorker::RunThread(IThreadHandle *pHandle)
{
//wait until the lock is cleared.
if (this_state == Worker_Paused)
{
m_PauseSignal->Wait();
}
if (this_state == Worker_Stopped)
{
//if we're supposed to flush cleanrly,
@ -187,9 +197,12 @@ bool ThreadWorker::Stop(bool flush_cancel)
{
Unpause();
} else {
m_QueueLock->Lock();
if (m_Waiting)
{
m_AddSignal->Signal();
Pause();
Unpause();
}
m_QueueLock->Unlock();
}
me->WaitForThread();

View File

@ -97,7 +97,7 @@ IThreadHandle *WinThreader::MakeThread(IThread *pThread, const ThreadParams *par
IEventSignal *WinThreader::MakeEventSignal()
{
HANDLE event = CreateEventA(NULL, TRUE, TRUE, NULL);
HANDLE event = CreateEventA(NULL, FALSE, FALSE, NULL);
if (!event)
return NULL;
@ -275,7 +275,6 @@ WinThreader::WinEvent::~WinEvent()
void WinThreader::WinEvent::Wait()
{
WaitForSingleObject(m_event, INFINITE);
ResetEvent(m_event);
}
void WinThreader::WinEvent::Signal()

View File

@ -129,6 +129,7 @@ void MysqlThread::SetForward(int forward)
void MysqlThread::SetInfo(const char *db)
{
m_db.assign(db);
m_qrInfo.queue_time = gpGlobals->time;
}
void MysqlThread::SetQuery(const char *query)
@ -146,8 +147,12 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
info.host = "";
info.port = 0;
float save_time = m_qrInfo.queue_time;
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);
IQuery *pQuery = NULL;
if (!pDatabase)
@ -168,15 +173,17 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
if (m_qrInfo.query_success && 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;
}
if (pQuery)
{
pQuery->FreeHandle();
pQuery = NULL;
m_qrInfo.amxinfo.pQuery = pQuery;
} else {
m_qrInfo.amxinfo.opt_ptr = new char[m_query.size() + 1];
strcpy(m_qrInfo.amxinfo.opt_ptr, m_query.c_str());
}
if (pDatabase)
{
pDatabase->FreeHandle();
@ -226,26 +233,37 @@ void MysqlThread::Execute()
} else if (!m_qrInfo.query_success) {
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)
{
MF_ExecuteForward(m_fwd,
(cell)state,
(cell)0,
(cell)hndl,
m_qrInfo.amxinfo.error,
m_qrInfo.amxinfo.info.errorcode,
data_addr,
m_datalen);
m_datalen,
c_diff);
} else {
unsigned int hndl = MakeHandle(&m_qrInfo.amxinfo, Handle_Query, NullFunc);
MF_ExecuteForward(m_fwd,
(cell)0,
(cell)hndl,
"",
(cell)0,
data_addr,
m_datalen);
FreeHandle(hndl);
m_datalen,
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;
}
/*****************

View File

@ -12,6 +12,7 @@ struct QueuedResultInfo
AmxQueryInfo amxinfo;
bool connect_success;
bool query_success;
float queue_time;
};
class AtomicResult :

View File

@ -32,8 +32,8 @@
-M
-$M16384,1048576
-K$00400000
-LE"c:\programme\borland\delphi7\Projects\Bpl"
-LN"c:\programme\borland\delphi7\Projects\Bpl"
-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
-DmadExcept
-w-UNSAFE_TYPE
-w-UNSAFE_CODE

View File

@ -115,7 +115,7 @@ AutoIncBuild=1
MajorVer=1
MinorVer=4
Release=3
Build=0
Build=3
Debug=0
PreRelease=0
Special=0
@ -126,11 +126,11 @@ CodePage=1252
[Version Info Keys]
CompanyName=AMX Mod X Dev Team
FileDescription=
FileVersion=1.4.3.0
FileVersion=1.4.3.3
InternalName=
LegalCopyright=AMX Mod X Dev Team
LegalTrademarks=
OriginalFilename=
ProductName=AMXX-Studio
ProductVersion=1.4.3.0
ProductVersion=1.4.3 final
Comments=

Binary file not shown.

Binary file not shown.

View File

@ -800,6 +800,8 @@ begin
eCurrLine := Between(eCurrLine, '(', ')', True);
HideBracesAndStrings(eCurrLine, True);
eStr2.Text := StringReplace(eCurrLine, ',', #13, [rfReplaceAll]);
if (Trim(eStr2.Text) = ')') then
eStr2.Clear;
CreateCategory('Function Call');
AddField('Function', 'Function Call', eVarName);

View File

@ -176,7 +176,7 @@ begin
eTempIndent := eTempIndent +1;
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
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

View File

@ -26,6 +26,8 @@ type TPAWNCompileThread = class(TThread)
function DoCompilePAWN(eFlags: Integer): Boolean;
var Compiling: Boolean;
implementation
uses UnitfrmSettings, UnitLanguages, UnitMainTools, UnitfrmMain,
@ -35,12 +37,14 @@ function DoCompilePAWN(eFlags: Integer): Boolean;
var eFile: string;
begin
Result := False;
if (Compiling) then exit;
if not FileExists(frmSettings.txtPAWNCompilerPath.Text) then begin
MessageBox(frmMain.Handle, PChar(lPAWNCompilerNotFound), PChar(Application.Title), MB_ICONERROR);
exit;
end;
Screen.Cursor := crHourGlass;
Compiling := True;
if (ActiveDoc.Untitled) then
eFile := ExtractFilePath(ParamStr(0)) + 'Untitled.sma'
else
@ -226,6 +230,7 @@ begin
CloseHandle(PipeErrorsWrite);
end;
Screen.Cursor := crDefault;
Compiling := False;
Output.Free;
end;

View File

@ -80,7 +80,7 @@ function IEInstalled: Boolean;
function GetAMXXDir(ListenServer: Boolean): String;
function CloseDocument(eDocument: TDocument; SaveActiveDoc, RemoveTab: Boolean): Boolean;
function AddExtension(eFilename, eHighlighter: String): String;
function AddExtension(eFilename, eHighlighter: String; Document: TDocument): String;
function ShowColorDialog(var Color: TColor; ePaintImage: TImage): Boolean;
@ -468,11 +468,15 @@ begin
Collection.Close(eDocument.Index, RemoveTab);
end;
function AddExtension(eFilename, eHighlighter: String): String;
function AddExtension(eFilename, eHighlighter: String; Document: TDocument): String;
begin
if ExtractFileExt(eFilename) = '' then begin
if eHighlighter = 'Pawn' then
if eHighlighter = 'Pawn' then begin
if (ExtractFileExt(Document.Title) = '.inc') then
Result := eFilename + '.inc'
else
Result := eFilename + '.sma';
end;
if eHighlighter = 'C++' then
Result := eFilename + '.cpp';
if eHighlighter = 'HTML' then
@ -751,6 +755,8 @@ begin
else
eCPUSpeed := 1; // otherwise the program would hang up
frmSettings.txtLangDir.Text := IncludeTrailingPathDelimiter(eConfig.ReadString('Misc', 'LangDir', ''));
if (frmSettings.txtLangDir.Text = '\') then
frmSettings.txtLangDir.Text := '';
frmSettings.chkShowStatusbar.Checked := eConfig.ReadBool('Misc', 'ShowStatusbar', True);
frmMain.sbStatus.Visible := frmSettings.chkShowStatusbar.Checked;
end;

View File

@ -63,6 +63,7 @@ var i, k: integer;
eTempResult: TPawnParseResult;
eProcedureAdded: Boolean;
eCActive: Boolean;
eTempBool: Boolean;
begin
Result := TPawnParseResult.Create;
if not IsRecursive then
@ -101,29 +102,38 @@ begin
end;
{ 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
Delete(eString, 1, Pos(#32, eString));
eString := Trim(eString);
// we don't need braces so delete them...
while (CountChars(eString, '{') <> 0) and (CountChars(eString, '}') <> 0) and (Pos('{', eString) < Pos('}', eString)) do
eString := StringReplace(eString, '{' + Between(eString, '{', '}') + '}', '', [rfReplaceAll]);
while (CountChars(eString, '[') <> 0) and (CountChars(eString, ']') <> 0) and (Pos('[', eString) < Pos(']', eString)) do
eString := StringReplace(eString, '[' + Between(eString, '[', ']') + ']', '', [rfReplaceAll]);
// 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
if (Trim(eStr[k]) <> '') and (eStr[k] <> '}') then begin
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));
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.AutoComplete.Add(Copy(eTemp, 1, Pos('=', eTemp) - 1));
end
else begin // variable
if (eTempBool) then
Result.Constants.AddObject(eTemp, TObject(i))
else
Result.Variables.AddObject(eTemp, TObject(i));
Result.AutoComplete.Add(eTemp);
end;

Binary file not shown.

View File

@ -9,13 +9,14 @@ uses
type
TfrmGoToLine = class(TForm)
pnlBG: TSpTBXPanel;
lblCaption: TLabel;
txtGoToLine: TSpTBXEdit;
cmdOK: TSpTBXButton;
cmdCancel: TSpTBXButton;
procedure txtGoToLineChange(Sender: TObject);
cmdOK: TSpTBXButton;
txtGoToLine: TSpTBXEdit;
procedure txtGoToLineKeyPress(Sender: TObject; var Key: Char);
procedure FormShow(Sender: TObject);
procedure txtGoToLineChange(Sender: TObject);
end;
var
@ -27,14 +28,6 @@ uses UnitMainTools;
{$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);
begin
if Key = #13 then begin
@ -46,6 +39,12 @@ end;
procedure TfrmGoToLine.FormShow(Sender: TObject);
begin
txtGoToLine.SetFocus;
txtGoToLine.SelectAll;
end;
procedure TfrmGoToLine.txtGoToLineChange(Sender: TObject);
begin
cmdOK.Enabled := StrToIntDef(txtGoToLine.Text, -1) > 0;
end;
end.

View File

@ -4,7 +4,7 @@ interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
StdCtrls, ExtCtrls, Forms, OleCtrls, SHDocVw_TLB, ActiveX;
StdCtrls, ExtCtrls, Forms, OleCtrls, SHDocVw, ActiveX;
type
TfrmHTMLPreview = class(TForm)

View File

@ -7375,8 +7375,8 @@ object frmHudMsgGenerator: TfrmHudMsgGenerator
ColorHighLight = 8623776
ColorShadow = 8623776
Caption = 'Generate'
ModalResult = 1
TabOrder = 4
ModalResult = 1
end
object cmdCancel: TFlatButton
Left = 334
@ -7388,8 +7388,8 @@ object frmHudMsgGenerator: TfrmHudMsgGenerator
ColorHighLight = 8623776
ColorShadow = 8623776
Caption = 'Cancel'
ModalResult = 2
TabOrder = 5
ModalResult = 2
end
object pnlText: TPanel
Left = 6
@ -7430,7 +7430,7 @@ object frmHudMsgGenerator: TfrmHudMsgGenerator
ColorFlat = clWhite
TabOrder = 1
Text = '12,0'
OnChange = txtTimeToShowChange
OnExit = txtTimeToShowExit
OnKeyPress = txtTimeToShowKeyPress
end
end

View File

@ -47,10 +47,10 @@ type
procedure cmdSelectColorClick(Sender: TObject);
procedure txtTextChange(Sender: TObject);
procedure txtTimeToShowKeyPress(Sender: TObject; var Key: Char);
procedure txtTimeToShowChange(Sender: TObject);
procedure chkXCenterClick(Sender: TObject);
procedure chkYCenterClick(Sender: TObject);
procedure txtPosExit(Sender: TObject);
procedure txtTimeToShowExit(Sender: TObject);
private
eDown: Boolean;
eStartPos: TPoint;
@ -89,7 +89,7 @@ begin
lblHudMsg.Left := 0
else if lblHudMsg.Left > pnlHudmessage.Width then
lblHudMsg.Left := pnlHudmessage.Width;
txtXPos.Text := FloatToStr(RoundTo(lblHudMsg.Left / pnlHudmessage.Width, -2));
txtXPos.Text := FloatToStrF(lblHudMsg.Left / pnlHudmessage.Width, ffFixed, -2, 2);
end;
{ Y Pos }
@ -99,7 +99,7 @@ begin
lblHudMsg.Top := 0
else if lblHudMsg.Top > pnlHudmessage.Height then
lblHudMsg.Top := pnlHudmessage.Height;
txtYPos.Text := FloatToStr(RoundTo(lblHudMsg.Top / pnlHudmessage.Height, -2));
txtYPos.Text := FloatToStrF(lblHudMsg.Top / pnlHudmessage.Height, ffFixed, -2, 2);
end;
end;
end;
@ -169,7 +169,7 @@ procedure TfrmHudMsgGenerator.txtTextKeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then begin
txtText.SelText := '\n';
txtText.SelText := '^n';
Key := #0;
end;
end;
@ -195,7 +195,7 @@ begin
if txtText.Text = '' then
lblHudMsg.Caption := 'Custom Hudmessage'
else
lblHudMsg.Caption := StringReplace(txtText.Text, '\n', #13, [rfReplaceAll]);
lblHudMsg.Caption := StringReplace(txtText.Text, '^n', #13, [rfReplaceAll]);
if chkXCenter.Checked then
CenterX;
@ -210,20 +210,6 @@ begin
Key := ',';
end;
procedure TfrmHudMsgGenerator.txtTimeToShowChange(Sender: TObject);
var eVal: Real;
begin
try
eVal := Round(StrToFloat(txtTimeToShow.Text));
if eVal < 0 then begin
eVal := 0.0;
txtTimeToShow.Text := FloatToStr(eVal);
end;
except
txtTimeToShow.Text := '12,0';
end;
end;
procedure TfrmHudMsgGenerator.chkXCenterClick(Sender: TObject);
var eChar: Char;
begin
@ -276,4 +262,16 @@ begin
txtYPos.OnKeyPress(txtXPos, eChar);
end;
procedure TfrmHudMsgGenerator.txtTimeToShowExit(Sender: TObject);
var eVal: Real;
begin
try
eVal := Round(StrToFloat(txtTimeToShow.Text));
if eVal < 0 then
txtTimeToShow.Text := '0,0';
except
txtTimeToShow.Text := '12,0';
end;
end;
end.

Binary file not shown.

View File

@ -1,7 +1,7 @@
object frmMain: TfrmMain
Left = 189
Top = 114
Width = 888
Left = 184
Top = 77
Width = 893
Height = 648
Caption = 'AMXX-Studio'
Color = clBtnFace
@ -45,13 +45,13 @@ object frmMain: TfrmMain
PixelsPerInch = 96
TextHeight = 13
object splRight: TSplitter
Left = 669
Left = 674
Top = 95
Height = 501
Align = alRight
end
object spcRight1: TImage
Left = 877
Left = 882
Top = 95
Width = 3
Height = 501
@ -67,7 +67,7 @@ object frmMain: TfrmMain
object tbxTopDock: TSpTBXDock
Left = 0
Top = 0
Width = 880
Width = 885
Height = 72
object tbxMenu: TSpTBXToolbar
Left = 0
@ -680,11 +680,11 @@ object frmMain: TfrmMain
object sbStatus: TSpTBXStatusBar
Left = 0
Top = 596
Width = 880
Width = 885
Height = 25
object mnuFilename: TSpTBXRightAlignSpacerItem
Caption = 'Untitled.sma'
CustomWidth = 542
CustomWidth = 547
end
object sepStatus0: TSpTBXSeparatorItem
end
@ -728,19 +728,20 @@ object frmMain: TfrmMain
object tbDocs: TJvTabBar
Left = 0
Top = 72
Width = 880
Width = 885
RightClickSelect = False
Painter = mtpDocuments
Tabs = <
item
Caption = '< 1 Untitled.sma >'
Selected = True
end>
Painter = mtpDocuments
OnTabClosing = tbDocsTabClosing
OnTabSelected = tbDocsTabSelected
OnMouseDown = tbDocsMouseDown
end
object tcTools: TSpTBXTabControl
Left = 672
Left = 677
Top = 95
Width = 205
Height = 501
@ -937,6 +938,7 @@ object frmMain: TfrmMain
Top = 26
Width = 191
Height = 199
Style = isItemPainter
Align = alClient
Divider = 110
ItemHeight = 16
@ -950,7 +952,7 @@ object frmMain: TfrmMain
object pnlParent: TPanel
Left = 3
Top = 95
Width = 666
Width = 671
Height = 501
Align = alClient
BevelOuter = bvNone
@ -958,7 +960,7 @@ object frmMain: TfrmMain
object splOutput: TSplitter
Left = 0
Top = 416
Width = 666
Width = 671
Height = 3
Cursor = crVSplit
Align = alBottom
@ -967,7 +969,7 @@ object frmMain: TfrmMain
object sciEditor: TScintilla
Left = 0
Top = 0
Width = 666
Width = 671
Height = 416
Color = clWhite
Font.Charset = DEFAULT_CHARSET
@ -4493,7 +4495,7 @@ object frmMain: TfrmMain
object lstOutput: TListBox
Left = 0
Top = 419
Width = 666
Width = 671
Height = 82
Align = alBottom
ItemHeight = 13
@ -4544,7 +4546,6 @@ object frmMain: TfrmMain
TabOrder = 1
OnClick = cmdCancelClick
CaptionGlowColor = clBtnFace
DropDownArrow = True
LinkFont.Charset = DEFAULT_CHARSET
LinkFont.Color = clBlue
LinkFont.Height = -11
@ -6569,6 +6570,7 @@ object frmMain: TfrmMain
end
object IdFTP: TIdFTP
MaxLineAction = maSplit
ReadTimeout = 0
ProxySettings.ProxyType = fpcmNone
ProxySettings.Port = 0
Left = 722
@ -7826,7 +7828,32 @@ object frmMain: TfrmMain
end
end
object JvInspectorDotNETPainter: TJvInspectorDotNETPainter
CategoryFont.Charset = DEFAULT_CHARSET
CategoryFont.Color = clBtnText
CategoryFont.Height = -11
CategoryFont.Name = 'MS Sans Serif'
CategoryFont.Style = []
NameFont.Charset = DEFAULT_CHARSET
NameFont.Color = clWindowText
NameFont.Height = -11
NameFont.Name = 'MS Sans Serif'
NameFont.Style = []
ValueFont.Charset = DEFAULT_CHARSET
ValueFont.Color = clWindowText
ValueFont.Height = -11
ValueFont.Name = 'MS Sans Serif'
ValueFont.Style = []
DrawNameEndEllipsis = True
HideSelectFont.Charset = DEFAULT_CHARSET
HideSelectFont.Color = clHighlightText
HideSelectFont.Height = -11
HideSelectFont.Name = 'MS Sans Serif'
HideSelectFont.Style = []
SelectedFont.Charset = DEFAULT_CHARSET
SelectedFont.Color = clHighlightText
SelectedFont.Height = -11
SelectedFont.Name = 'MS Sans Serif'
SelectedFont.Style = []
Left = 662
Top = 36
end

View File

@ -21,7 +21,7 @@ uses
JvInspector, JvExControls, JvPluginManager, JvgLanguageLoader,
JvWndProcHook, CommCtrl, JvPageList, JvPageListTreeView,
SciSearchReplaceBase, SpTBXControls, JvTabBar, TB2ExtItems, SpTBXEditors,
TBXLists, SpTBXLists;
TBXLists, SpTBXLists, JvComponentBase;
type
TfrmMain = class(TForm)
@ -894,7 +894,7 @@ end;
procedure TfrmMain.mnuSaveAsClick(Sender: TObject);
begin
if sdSave.Execute then begin
ActiveDoc.FileName := AddExtension(sdSave.FileName, ActiveDoc.Highlighter);
ActiveDoc.FileName := AddExtension(sdSave.FileName, ActiveDoc.Highlighter, ActiveDoc);
ActiveDoc.Save;
tbDocs.Tabs[ActiveDoc.Index].Caption := ActiveDoc.Title;
end;
@ -1071,9 +1071,30 @@ begin
end;
procedure TfrmMain.OnCodeSnippetClick(Sender: TObject);
var Snippet, Indentation: String;
Line: Integer;
begin
if Plugin_CodeSnippetClick(TSpTBXItem(Sender).Caption, GetCat, GetSnippet(GetCat, (Sender as TSpTBXItem).Caption)) then
sciEditor.SelText := GetSnippet(GetCat, (Sender as TSpTBXItem).Caption);
if Plugin_CodeSnippetClick(TSpTBXItem(Sender).Caption, GetCat, GetSnippet(GetCat, (Sender as TSpTBXItem).Caption)) then begin
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;
procedure TfrmMain.mnuCopyMessageClick(Sender: TObject);
@ -1275,7 +1296,7 @@ begin
b := Integer(frmAllFilesForm.lstFiles.Items.Objects[a]);
if TDocument(Collection.Items[b]).Untitled then begin
if sdSave.Execute then begin
TDocument(Collection.Items[b]).FileName := AddExtension(sdSave.FileName, TDocument(Collection.Items[b]).Highlighter);
TDocument(Collection.Items[b]).FileName := AddExtension(sdSave.FileName, TDocument(Collection.Items[b]).Highlighter, TDocument(Collection.Items[b]));
TDocument(Collection.Items[b]).Save;
TJvTabBarItem(tbDocs.Tabs[b]).Caption := TDocument(Collection.Items[b]).Title;
end
@ -1526,7 +1547,7 @@ begin
else begin
frmMain.sdSave.FilterIndex := 1;
if frmMain.sdSave.Execute then begin
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter);
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter, eItem);
eItem.Save;
end
else begin
@ -1550,7 +1571,7 @@ begin
else begin
frmMain.sdSave.FilterIndex := 2;
if frmMain.sdSave.Execute then begin
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter);
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter, eItem);
eItem.Save;
end
else begin
@ -1574,7 +1595,7 @@ begin
else begin
frmMain.sdSave.FilterIndex := 0;
if frmMain.sdSave.Execute then begin
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter);
eItem.FileName := AddExtension(frmMain.sdSave.FileName, eItem.Highlighter, eItem);
eItem.Save;
end
else begin
@ -1685,6 +1706,7 @@ procedure TfrmMain.mnuHudmessageClick(Sender: TObject);
function Dot(eIn: string): string;
begin
Result := StringReplace(eIn, ',', '.', [rfReplaceAll]);
Result := StringReplace(Result, '.00', '.0', [rfReplaceAll]);
end;
var eStr: string;
@ -2210,7 +2232,7 @@ begin
sciEditor.Lines.Add(#9 + 'if (socket_change(sck' + frmConnGen.txtName.Text + ', 100)) {');
sciEditor.Lines.Add(#9 + #9 + 'new buf[512], lines[30][100], count = 0');
sciEditor.Lines.Add(#9 + #9 + 'socket_recv(sck' + frmConnGen.txtName.Text + ', buf, 511)');
sciEditor.Lines.Add(#9 + #9 + 'count = ExplodeString(lines, 50, 119, buf, 13)');
sciEditor.Lines.Add(#9 + #9 + 'count = ExplodeString(lines, 29, 99, buf, 13)');
sciEditor.Lines.Add(#9 + #9 + 'for(new i=0;i<count;i++) {');
sciEditor.Lines.Add(#9 + #9 + #9 + '/* Process items here */');
sciEditor.Lines.Add(#9 + #9 + '}');

View File

@ -64,7 +64,7 @@ object frmSettings: TfrmSettings
Top = 0
Width = 351
Height = 260
ActivePage = jspCTSettings
ActivePage = jspCodeSnippets
PropagateEnable = False
Align = alClient
OnChange = jplSettingsChange
@ -760,6 +760,9 @@ object frmSettings: TfrmSettings
ScrollBars = ssBoth
TabOrder = 1
WantTabs = True
OnChange = txtCodeSnippetChange
OnEnter = txtCodeSnippetEnter
OnExit = txtCodeSnippetExit
OnKeyUp = txtCodeSnippetKeyUp
end
object cmdCSAdd: TFlatButton

View File

@ -277,6 +277,9 @@ type
procedure lvParamsDblClick(Sender: TObject);
procedure cmdAddFunctionClick(Sender: TObject);
procedure lstFunctionsClick(Sender: TObject);
procedure txtCodeSnippetEnter(Sender: TObject);
procedure txtCodeSnippetExit(Sender: TObject);
procedure txtCodeSnippetChange(Sender: TObject);
public
Foreground, Background: TColor;
CaretFore, CaretBack: TColor;
@ -339,9 +342,14 @@ begin
eReg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False);
{ AMXX }
AMXXDir := eReg.ReadString('ProgramFilesDir') + '\AMX Mod X\';
if not DirectoryExists(AMXXDir) then
if DirectoryExists(AMXXDir) then
AMXXDir := IncludeTrailingPathDelimiter(AMXXDir)
else
AMXXDir := '';
eReg.CloseKey;
{ Language Files }
if (DirectoryExists(AMXXDir + 'files\base\data\lang')) then
txtLangDir.Text := AMXXDir + 'files\base\data\lang';
{ Steam }
if eReg.KeyExists('SOFTWARE\Valve\Steam') then begin
eReg.OpenKey('SOFTWARE\Valve\Steam', False);
@ -421,7 +429,7 @@ begin
eConfig.WriteString('Misc', 'DefaultPluginAuthor', GetUser);
eConfig.WriteInteger('Misc', 'SaveNotesTo', 0);
eConfig.WriteInteger('Misc', 'CPUSpeed', 5);
eConfig.WriteString('Misc', 'LangDir', '');
eConfig.WriteString('Misc', 'LangDir', txtLangDir.Text);
eConfig.WriteInteger('Misc', 'ShowStatusbar', 1);
eConfig.WriteInteger('Misc', 'WindowState', 0);
end;
@ -434,6 +442,8 @@ begin
2: frmMain.WindowState := wsMinimized;
end;
txtCodeSnippetExit(Sender);
PaintForeground(clBlack);
PaintBackground(clBlack);
PaintCaretFore(clBlack);
@ -778,6 +788,7 @@ begin
lstCodeSnippets.ItemIndex := lstCodeSnippets.Items.Add(eStr);
AddSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], eStr, '');
txtCodeSnippet.Enabled := True;
lstCodeSnippets.SetFocus;
lstCodeSnippetsClick(Sender);
end
else
@ -805,7 +816,9 @@ procedure TfrmSettings.lstCodeSnippetsClick(Sender: TObject);
begin
cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1;
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;
procedure TfrmSettings.ftcCodeSnippetsTabChanged(Sender: TObject);
@ -815,8 +828,8 @@ begin
lstCodeSnippets.ItemIndex := 0
else
txtCodeSnippet.Clear;
lstCodeSnippetsClick(Sender);
txtCodeSnippet.Enabled := lstCodeSnippets.Items.Count > 0;
lstCodeSnippetsClick(Sender);
cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1;
end;
@ -1250,4 +1263,28 @@ begin
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.

View File

@ -3,4 +3,4 @@ source = /home/users/dvander/amxx
makeopts =
output = /home/users/dvander/done
devenv = /usr/bin/make
release = amxmodx-1.76
release = amxmodx-1.76c

View File

@ -3,4 +3,4 @@ source = R:\amxmodx
makeopts =
output = c:\real\done
devenv = C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.com
release = amxmodx-1.76
release = amxmodx-1.76d

View File

@ -2,7 +2,7 @@
; Licensed under the GNU General Public License
; Originally written by -=HaXoMaTiC=-
!define PRODUCT_NAME "AMX Mod X Installer"
!define PRODUCT_VERSION "1.76a"
!define PRODUCT_VERSION "1.76d"
!define PRODUCT_PUBLISHER "AMX Mod X Dev Team"
!define PRODUCT_WEB_SITE "http://www.amxmodx.org/"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Installer.exe"
@ -103,350 +103,337 @@ Section "MainSection" SEC01
File "installer\files\amxxstudio\plugins\Hello_World Delphi\HelloWorld.res"
File "installer\files\amxxstudio\plugins\Hello_World Delphi\studioapi.pas"
SetOutPath "$INSTDIR\files\base\configs"
File "installer\files\base\configs\amxx.cfg"
File "installer\files\base\configs\clcmds.ini"
File "installer\files\base\configs\cmds.ini"
File "installer\files\base\configs\configs.ini"
File "installer\files\base\configs\conmotd.txt"
File "installer\files\base\configs\core.ini"
File "installer\files\base\configs\custommenuitems.cfg"
File "installer\files\base\configs\cvars.ini"
File "installer\files\base\configs\maps.ini"
File "installer\files\base\configs\modules.ini"
File "installer\files\base\configs\plugins.ini"
File "installer\files\base\configs\speech.ini"
File "installer\files\base\configs\sql.cfg"
File "installer\files\base\configs\users.ini"
File "installer\files\base\addons\amxmodx\configs\amxx.cfg"
File "installer\files\base\addons\amxmodx\configs\clcmds.ini"
File "installer\files\base\addons\amxmodx\configs\cmds.ini"
File "installer\files\base\addons\amxmodx\configs\configs.ini"
File "installer\files\base\addons\amxmodx\configs\conmotd.txt"
File "installer\files\base\addons\amxmodx\configs\core.ini"
File "installer\files\base\addons\amxmodx\configs\custommenuitems.cfg"
File "installer\files\base\addons\amxmodx\configs\cvars.ini"
File "installer\files\base\addons\amxmodx\configs\maps.ini"
File "installer\files\base\addons\amxmodx\configs\modules.ini"
File "installer\files\base\addons\amxmodx\configs\plugins.ini"
File "installer\files\base\addons\amxmodx\configs\speech.ini"
File "installer\files\base\addons\amxmodx\configs\sql.cfg"
File "installer\files\base\addons\amxmodx\configs\users.ini"
SetOutPath "$INSTDIR\files\base\data"
File "installer\files\base\data\GeoIP.dat"
File "installer\files\base\addons\amxmodx\data\GeoIP.dat"
SetOutPath "$INSTDIR\files\base\data\lang"
File "installer\files\base\data\lang\admin.txt"
File "installer\files\base\data\lang\adminchat.txt"
File "installer\files\base\data\lang\admincmd.txt"
File "installer\files\base\data\lang\adminhelp.txt"
File "installer\files\base\data\lang\adminslots.txt"
File "installer\files\base\data\lang\adminvote.txt"
File "installer\files\base\data\lang\antiflood.txt"
File "installer\files\base\data\lang\cmdmenu.txt"
File "installer\files\base\data\lang\common.txt"
File "installer\files\base\data\lang\imessage.txt"
File "installer\files\base\data\lang\languages.txt"
File "installer\files\base\data\lang\mapchooser.txt"
File "installer\files\base\data\lang\mapsmenu.txt"
File "installer\files\base\data\lang\menufront.txt"
File "installer\files\base\data\lang\miscstats.txt"
File "installer\files\base\data\lang\multilingual.txt"
File "installer\files\base\data\lang\nextmap.txt"
File "installer\files\base\data\lang\pausecfg.txt"
File "installer\files\base\data\lang\plmenu.txt"
File "installer\files\base\data\lang\restmenu.txt"
File "installer\files\base\data\lang\scrollmsg.txt"
File "installer\files\base\data\lang\statscfg.txt"
File "installer\files\base\data\lang\statsx.txt"
File "installer\files\base\data\lang\stats_dod.txt"
File "installer\files\base\data\lang\telemenu.txt"
File "installer\files\base\data\lang\time.txt"
File "installer\files\base\data\lang\timeleft.txt"
File "installer\files\base\addons\amxmodx\data\lang\admin.txt"
File "installer\files\base\addons\amxmodx\data\lang\adminchat.txt"
File "installer\files\base\addons\amxmodx\data\lang\admincmd.txt"
File "installer\files\base\addons\amxmodx\data\lang\adminhelp.txt"
File "installer\files\base\addons\amxmodx\data\lang\adminslots.txt"
File "installer\files\base\addons\amxmodx\data\lang\adminvote.txt"
File "installer\files\base\addons\amxmodx\data\lang\antiflood.txt"
File "installer\files\base\addons\amxmodx\data\lang\cmdmenu.txt"
File "installer\files\base\addons\amxmodx\data\lang\common.txt"
File "installer\files\base\addons\amxmodx\data\lang\imessage.txt"
File "installer\files\base\addons\amxmodx\data\lang\languages.txt"
File "installer\files\base\addons\amxmodx\data\lang\mapchooser.txt"
File "installer\files\base\addons\amxmodx\data\lang\mapsmenu.txt"
File "installer\files\base\addons\amxmodx\data\lang\menufront.txt"
File "installer\files\base\addons\amxmodx\data\lang\miscstats.txt"
File "installer\files\base\addons\amxmodx\data\lang\multilingual.txt"
File "installer\files\base\addons\amxmodx\data\lang\nextmap.txt"
File "installer\files\base\addons\amxmodx\data\lang\pausecfg.txt"
File "installer\files\base\addons\amxmodx\data\lang\plmenu.txt"
File "installer\files\base\addons\amxmodx\data\lang\restmenu.txt"
File "installer\files\base\addons\amxmodx\data\lang\scrollmsg.txt"
File "installer\files\base\addons\amxmodx\data\lang\statscfg.txt"
File "installer\files\base\addons\amxmodx\data\lang\statsx.txt"
File "installer\files\base\addons\amxmodx\data\lang\stats_dod.txt"
File "installer\files\base\addons\amxmodx\data\lang\telemenu.txt"
File "installer\files\base\addons\amxmodx\data\lang\time.txt"
File "installer\files\base\addons\amxmodx\data\lang\timeleft.txt"
SetOutPath "$INSTDIR\files\base\dlls"
File "installer\files\base\dlls\amxmodx_mm.dll"
File "installer\files\base\dlls\amxmodx_mm_amd64.so"
File "installer\files\base\dlls\amxmodx_mm_i386.so"
File "installer\files\base\dlls\metamod.dll"
File "installer\files\base\dlls\metamod_amd64.so"
File "installer\files\base\dlls\metamod_i386.so"
File "installer\files\base\addons\amxmodx\dlls\amxmodx_mm.dll"
File "installer\files\base\addons\amxmodx\dlls\amxmodx_mm_i386.so"
File "installer\files\base\addons\amxmodx\dlls\metamod.dll"
File "installer\files\base\addons\amxmodx\dlls\metamod_i386.so"
SetOutPath "$INSTDIR\files\base\modules"
File "installer\files\base\modules\nvault_amxx.dll"
File "installer\files\base\modules\nvault_amxx_amd64.so"
File "installer\files\base\modules\nvault_amxx_i386.so"
File "installer\files\base\modules\engine_amxx.dll"
File "installer\files\base\modules\engine_amxx_amd64.so"
File "installer\files\base\modules\engine_amxx_i386.so"
File "installer\files\base\modules\fakemeta_amxx.dll"
File "installer\files\base\modules\fakemeta_amxx_amd64.so"
File "installer\files\base\modules\fakemeta_amxx_i386.so"
File "installer\files\base\modules\fun_amxx.dll"
File "installer\files\base\modules\fun_amxx_amd64.so"
File "installer\files\base\modules\fun_amxx_i386.so"
File "installer\files\base\modules\geoip_amxx.dll"
File "installer\files\base\modules\geoip_amxx_amd64.so"
File "installer\files\base\modules\geoip_amxx_i386.so"
File "installer\files\base\modules\sqlite_amxx.dll"
File "installer\files\base\modules\sqlite_amxx_amd64.so"
File "installer\files\base\modules\sqlite_amxx_i386.so"
File "installer\files\base\modules\mysql_amxx.dll"
File "installer\files\base\modules\mysql_amxx_amd64.so"
File "installer\files\base\modules\mysql_amxx_i386.so"
File "installer\files\base\modules\regex_amxx.dll"
File "installer\files\base\modules\regex_amxx_amd64.so"
File "installer\files\base\modules\regex_amxx_i386.so"
File "installer\files\base\modules\sockets_amxx.dll"
File "installer\files\base\modules\sockets_amxx_amd64.so"
File "installer\files\base\modules\sockets_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\nvault_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\nvault_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\engine_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\engine_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\fakemeta_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\fakemeta_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\fun_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\fun_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\geoip_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\geoip_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\sqlite_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\sqlite_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\mysql_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\mysql_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\regex_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\regex_amxx_i386.so"
File "installer\files\base\addons\amxmodx\modules\sockets_amxx.dll"
File "installer\files\base\addons\amxmodx\modules\sockets_amxx_i386.so"
SetOutPath "$INSTDIR\files\base\plugins"
File "installer\files\base\plugins\admin.amxx"
File "installer\files\base\plugins\adminchat.amxx"
File "installer\files\base\plugins\admincmd.amxx"
File "installer\files\base\plugins\adminhelp.amxx"
File "installer\files\base\plugins\adminslots.amxx"
File "installer\files\base\plugins\adminvote.amxx"
File "installer\files\base\plugins\admin_sql.amxx"
File "installer\files\base\plugins\amxmod_compat.amxx"
File "installer\files\base\plugins\antiflood.amxx"
File "installer\files\base\plugins\cmdmenu.amxx"
File "installer\files\base\plugins\imessage.amxx"
File "installer\files\base\plugins\mapchooser.amxx"
File "installer\files\base\plugins\mapsmenu.amxx"
File "installer\files\base\plugins\menufront.amxx"
File "installer\files\base\plugins\multilingual.amxx"
File "installer\files\base\plugins\nextmap.amxx"
File "installer\files\base\plugins\pausecfg.amxx"
File "installer\files\base\plugins\plmenu.amxx"
File "installer\files\base\plugins\scrollmsg.amxx"
File "installer\files\base\plugins\statscfg.amxx"
File "installer\files\base\plugins\telemenu.amxx"
File "installer\files\base\plugins\timeleft.amxx"
File "installer\files\base\addons\amxmodx\plugins\admin.amxx"
File "installer\files\base\addons\amxmodx\plugins\adminchat.amxx"
File "installer\files\base\addons\amxmodx\plugins\admincmd.amxx"
File "installer\files\base\addons\amxmodx\plugins\adminhelp.amxx"
File "installer\files\base\addons\amxmodx\plugins\adminslots.amxx"
File "installer\files\base\addons\amxmodx\plugins\adminvote.amxx"
File "installer\files\base\addons\amxmodx\plugins\admin_sql.amxx"
File "installer\files\base\addons\amxmodx\plugins\amxmod_compat.amxx"
File "installer\files\base\addons\amxmodx\plugins\antiflood.amxx"
File "installer\files\base\addons\amxmodx\plugins\cmdmenu.amxx"
File "installer\files\base\addons\amxmodx\plugins\imessage.amxx"
File "installer\files\base\addons\amxmodx\plugins\mapchooser.amxx"
File "installer\files\base\addons\amxmodx\plugins\mapsmenu.amxx"
File "installer\files\base\addons\amxmodx\plugins\menufront.amxx"
File "installer\files\base\addons\amxmodx\plugins\multilingual.amxx"
File "installer\files\base\addons\amxmodx\plugins\nextmap.amxx"
File "installer\files\base\addons\amxmodx\plugins\pausecfg.amxx"
File "installer\files\base\addons\amxmodx\plugins\plmenu.amxx"
File "installer\files\base\addons\amxmodx\plugins\scrollmsg.amxx"
File "installer\files\base\addons\amxmodx\plugins\statscfg.amxx"
File "installer\files\base\addons\amxmodx\plugins\telemenu.amxx"
File "installer\files\base\addons\amxmodx\plugins\timeleft.amxx"
SetOutPath "$INSTDIR\files\base\scripting"
File "installer\files\base\scripting\admin.sma"
File "installer\files\base\scripting\adminchat.sma"
File "installer\files\base\scripting\admincmd.sma"
File "installer\files\base\scripting\adminhelp.sma"
File "installer\files\base\scripting\adminslots.sma"
File "installer\files\base\scripting\adminvote.sma"
File "installer\files\base\scripting\amxxpc"
File "installer\files\base\scripting\amxxpc.exe"
File "installer\files\base\scripting\amxxpc32.dll"
File "installer\files\base\scripting\amxxpc32.so"
File "installer\files\base\scripting\amxxpc64.dll"
File "installer\files\base\scripting\amxxpc64.so"
File "installer\files\base\scripting\antiflood.sma"
File "installer\files\base\scripting\cmdmenu.sma"
File "installer\files\base\scripting\compile.exe"
File "installer\files\base\scripting\compile.sh"
File "installer\files\base\scripting\dlsym"
File "installer\files\base\scripting\dlsym64"
File "installer\files\base\scripting\imessage.sma"
SetOutPath "$INSTDIR\files\base\scripting\include"
File "installer\files\base\scripting\include\amxconst.inc"
File "installer\files\base\scripting\include\amxmisc.inc"
File "installer\files\base\scripting\include\amxmodx.inc"
File "installer\files\base\scripting\include\core.inc"
File "installer\files\base\scripting\include\csstats.inc"
File "installer\files\base\scripting\include\cstrike.inc"
File "installer\files\base\scripting\include\csx.inc"
File "installer\files\base\scripting\include\dbi.inc"
File "installer\files\base\scripting\include\dodconst.inc"
File "installer\files\base\scripting\include\dodfun.inc"
File "installer\files\base\scripting\include\dodstats.inc"
File "installer\files\base\scripting\include\dodx.inc"
File "installer\files\base\scripting\include\engine.inc"
File "installer\files\base\scripting\include\engine_const.inc"
File "installer\files\base\scripting\include\engine_stocks.inc"
File "installer\files\base\scripting\include\esf.inc"
File "installer\files\base\scripting\include\esf_const.inc"
File "installer\files\base\scripting\include\fakemeta.inc"
File "installer\files\base\scripting\include\fakemeta_const.inc"
File "installer\files\base\scripting\include\fakemeta_stocks.inc"
File "installer\files\base\scripting\include\file.inc"
File "installer\files\base\scripting\include\float.inc"
File "installer\files\base\scripting\include\fun.inc"
File "installer\files\base\scripting\include\geoip.inc"
File "installer\files\base\scripting\include\hlsdk_const.inc"
File "installer\files\base\scripting\include\lang.inc"
File "installer\files\base\scripting\include\messages.inc"
File "installer\files\base\scripting\include\message_const.inc"
File "installer\files\base\scripting\include\message_stocks.inc"
File "installer\files\base\scripting\include\ns.inc"
File "installer\files\base\scripting\include\ns2amx.inc"
File "installer\files\base\scripting\include\ns_const.inc"
File "installer\files\base\scripting\include\regex.inc"
File "installer\files\base\scripting\include\nvault.inc"
File "installer\files\base\scripting\include\sockets.inc"
File "installer\files\base\scripting\include\sorting.inc"
File "installer\files\base\scripting\include\sqlx.inc"
File "installer\files\base\scripting\include\string.inc"
File "installer\files\base\scripting\include\tfcconst.inc"
File "installer\files\base\scripting\include\tfcstats.inc"
File "installer\files\base\scripting\include\tfcx.inc"
File "installer\files\base\scripting\include\time.inc"
File "installer\files\base\scripting\include\tsconst.inc"
File "installer\files\base\scripting\include\tsfun.inc"
File "installer\files\base\scripting\include\tsstats.inc"
File "installer\files\base\scripting\include\tsx.inc"
File "installer\files\base\scripting\include\vault.inc"
File "installer\files\base\scripting\include\vector.inc"
File "installer\files\base\scripting\include\xs.inc"
SetOutPath "$INSTDIR\files\base\scripting\include\amxmod_compat"
File "installer\files\base\scripting\include\amxmod_compat\amxmod.inc"
File "installer\files\base\scripting\include\amxmod_compat\maths.inc"
File "installer\files\base\scripting\include\amxmod_compat\mysql.inc"
File "installer\files\base\scripting\include\amxmod_compat\translator.inc"
File "installer\files\base\scripting\include\amxmod_compat\Vexd_Utilities.inc"
File "installer\files\base\scripting\include\amxmod_compat\VexdUM.inc"
File "installer\files\base\scripting\include\amxmod_compat\VexdUM_const.inc"
File "installer\files\base\scripting\include\amxmod_compat\VexdUM_stock.inc"
File "installer\files\base\scripting\include\amxmod_compat\xtrafun.inc"
File "installer\files\base\addons\amxmodx\scripting\admin.sma"
File "installer\files\base\addons\amxmodx\scripting\adminchat.sma"
File "installer\files\base\addons\amxmodx\scripting\admincmd.sma"
File "installer\files\base\addons\amxmodx\scripting\adminhelp.sma"
File "installer\files\base\addons\amxmodx\scripting\adminslots.sma"
File "installer\files\base\addons\amxmodx\scripting\adminvote.sma"
File "installer\files\base\addons\amxmodx\scripting\amxxpc"
File "installer\files\base\addons\amxmodx\scripting\amxxpc.exe"
File "installer\files\base\addons\amxmodx\scripting\amxxpc32.dll"
File "installer\files\base\addons\amxmodx\scripting\amxxpc32.so"
File "installer\files\base\addons\amxmodx\scripting\amxxpc64.dll"
File "installer\files\base\addons\amxmodx\scripting\amxxpc64.so"
File "installer\files\base\addons\amxmodx\scripting\antiflood.sma"
File "installer\files\base\addons\amxmodx\scripting\cmdmenu.sma"
File "installer\files\base\addons\amxmodx\scripting\compile.exe"
File "installer\files\base\addons\amxmodx\scripting\compile.sh"
File "installer\files\base\addons\amxmodx\scripting\dlsym"
File "installer\files\base\addons\amxmodx\scripting\dlsym64"
File "installer\files\base\addons\amxmodx\scripting\imessage.sma"
SetOutPath "$INSTDIR\files\base\addons\amxmodx\scripting\include"
File "installer\files\base\addons\amxmodx\scripting\include\amxconst.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmisc.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmodx.inc"
File "installer\files\base\addons\amxmodx\scripting\include\core.inc"
File "installer\files\base\addons\amxmodx\scripting\include\csstats.inc"
File "installer\files\base\addons\amxmodx\scripting\include\cstrike.inc"
File "installer\files\base\addons\amxmodx\scripting\include\csx.inc"
File "installer\files\base\addons\amxmodx\scripting\include\dbi.inc"
File "installer\files\base\addons\amxmodx\scripting\include\dodconst.inc"
File "installer\files\base\addons\amxmodx\scripting\include\dodfun.inc"
File "installer\files\base\addons\amxmodx\scripting\include\dodstats.inc"
File "installer\files\base\addons\amxmodx\scripting\include\dodx.inc"
File "installer\files\base\addons\amxmodx\scripting\include\engine.inc"
File "installer\files\base\addons\amxmodx\scripting\include\engine_const.inc"
File "installer\files\base\addons\amxmodx\scripting\include\engine_stocks.inc"
File "installer\files\base\addons\amxmodx\scripting\include\esf.inc"
File "installer\files\base\addons\amxmodx\scripting\include\esf_const.inc"
File "installer\files\base\addons\amxmodx\scripting\include\fakemeta.inc"
File "installer\files\base\addons\amxmodx\scripting\include\fakemeta_const.inc"
File "installer\files\base\addons\amxmodx\scripting\include\fakemeta_stocks.inc"
File "installer\files\base\addons\amxmodx\scripting\include\file.inc"
File "installer\files\base\addons\amxmodx\scripting\include\float.inc"
File "installer\files\base\addons\amxmodx\scripting\include\fun.inc"
File "installer\files\base\addons\amxmodx\scripting\include\geoip.inc"
File "installer\files\base\addons\amxmodx\scripting\include\hlsdk_const.inc"
File "installer\files\base\addons\amxmodx\scripting\include\lang.inc"
File "installer\files\base\addons\amxmodx\scripting\include\messages.inc"
File "installer\files\base\addons\amxmodx\scripting\include\message_const.inc"
File "installer\files\base\addons\amxmodx\scripting\include\message_stocks.inc"
File "installer\files\base\addons\amxmodx\scripting\include\ns.inc"
File "installer\files\base\addons\amxmodx\scripting\include\ns2amx.inc"
File "installer\files\base\addons\amxmodx\scripting\include\ns_const.inc"
File "installer\files\base\addons\amxmodx\scripting\include\regex.inc"
File "installer\files\base\addons\amxmodx\scripting\include\nvault.inc"
File "installer\files\base\addons\amxmodx\scripting\include\sockets.inc"
File "installer\files\base\addons\amxmodx\scripting\include\sorting.inc"
File "installer\files\base\addons\amxmodx\scripting\include\sqlx.inc"
File "installer\files\base\addons\amxmodx\scripting\include\string.inc"
File "installer\files\base\addons\amxmodx\scripting\include\tfcconst.inc"
File "installer\files\base\addons\amxmodx\scripting\include\tfcstats.inc"
File "installer\files\base\addons\amxmodx\scripting\include\tfcx.inc"
File "installer\files\base\addons\amxmodx\scripting\include\time.inc"
File "installer\files\base\addons\amxmodx\scripting\include\tsconst.inc"
File "installer\files\base\addons\amxmodx\scripting\include\tsfun.inc"
File "installer\files\base\addons\amxmodx\scripting\include\tsstats.inc"
File "installer\files\base\addons\amxmodx\scripting\include\tsx.inc"
File "installer\files\base\addons\amxmodx\scripting\include\vault.inc"
File "installer\files\base\addons\amxmodx\scripting\include\vector.inc"
File "installer\files\base\addons\amxmodx\scripting\include\xs.inc"
SetOutPath "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\amxmod.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\maths.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\mysql.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\translator.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\Vexd_Utilities.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\VexdUM.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\VexdUM_const.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\VexdUM_stock.inc"
File "installer\files\base\addons\amxmodx\scripting\include\amxmod_compat\xtrafun.inc"
SetOutPath "$INSTDIR\files\base\scripting"
File "installer\files\base\scripting\mapchooser.sma"
File "installer\files\base\scripting\mapsmenu.sma"
File "installer\files\base\scripting\menufront.sma"
File "installer\files\base\scripting\multilingual.sma"
File "installer\files\base\scripting\nextmap.sma"
File "installer\files\base\scripting\pausecfg.sma"
File "installer\files\base\scripting\plmenu.sma"
File "installer\files\base\scripting\scrollmsg.sma"
File "installer\files\base\scripting\statscfg.sma"
File "installer\files\base\scripting\telemenu.sma"
File "installer\files\base\scripting\timeleft.sma"
SetOutPath "$INSTDIR\files\base\scripting\amxmod_compat"
File "installer\files\base\scripting\amxmod_compat\amxmod_compat.sma"
File "installer\files\base\scripting\amxmod_compat\core.sma"
File "installer\files\base\scripting\amxmod_compat\mysql.sma"
File "installer\files\base\scripting\amxmod_compat\vexdum.sma"
SetOutPath "$INSTDIR\files\base\scripting\testsuite"
File "installer\files\base\scripting\testsuite\callfunc_test.sma"
File "installer\files\base\scripting\testsuite\fakemeta_tests.sma"
File "installer\files\base\scripting\testsuite\fmttest.sma"
File "installer\files\base\scripting\testsuite\fwdtest1.sma"
File "installer\files\base\scripting\testsuite\fwdtest2.sma"
File "installer\files\base\scripting\testsuite\logtest.sma"
File "installer\files\base\scripting\testsuite\menutest.sma"
File "installer\files\base\scripting\testsuite\nvault_test.sma"
File "installer\files\base\scripting\testsuite\sorttest.sma"
File "installer\files\base\scripting\testsuite\sqlxtest.sma"
File "installer\files\base\scripting\testsuite\sqlxtest.sq3"
File "installer\files\base\scripting\testsuite\sqlxtest.sql"
File "installer\files\base\addons\amxmodx\scripting\mapchooser.sma"
File "installer\files\base\addons\amxmodx\scripting\mapsmenu.sma"
File "installer\files\base\addons\amxmodx\scripting\menufront.sma"
File "installer\files\base\addons\amxmodx\scripting\multilingual.sma"
File "installer\files\base\addons\amxmodx\scripting\nextmap.sma"
File "installer\files\base\addons\amxmodx\scripting\pausecfg.sma"
File "installer\files\base\addons\amxmodx\scripting\plmenu.sma"
File "installer\files\base\addons\amxmodx\scripting\scrollmsg.sma"
File "installer\files\base\addons\amxmodx\scripting\statscfg.sma"
File "installer\files\base\addons\amxmodx\scripting\telemenu.sma"
File "installer\files\base\addons\amxmodx\scripting\timeleft.sma"
SetOutPath "$INSTDIR\files\base\addons\amxmodx\scripting\amxmod_compat"
File "installer\files\base\addons\amxmodx\scripting\amxmod_compat\amxmod_compat.sma"
File "installer\files\base\addons\amxmodx\scripting\amxmod_compat\core.sma"
File "installer\files\base\addons\amxmodx\scripting\amxmod_compat\mysql.sma"
File "installer\files\base\addons\amxmodx\scripting\amxmod_compat\vexdum.sma"
SetOutPath "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite"
File "installer\files\base\addons\amxmodx\scripting\testsuite\callfunc_test.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\fakemeta_tests.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\fmttest.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\fwdtest1.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\fwdtest2.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\logtest.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\menutest.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\nvault_test.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\sorttest.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\sqlxtest.sma"
File "installer\files\base\addons\amxmodx\scripting\testsuite\sqlxtest.sq3"
File "installer\files\base\addons\amxmodx\scripting\testsuite\sqlxtest.sql"
SetOutPath "$INSTDIR\files\cstrike\configs"
File "installer\files\cstrike\configs\amxx.cfg"
File "installer\files\cstrike\configs\cmds.ini"
File "installer\files\cstrike\configs\core.ini"
File "installer\files\cstrike\configs\cvars.ini"
File "installer\files\cstrike\configs\maps.ini"
File "installer\files\cstrike\configs\modules.ini"
File "installer\files\cstrike\configs\plugins.ini"
File "installer\files\cstrike\configs\stats.ini"
File "installer\files\cstrike\addons\amxmodx\configs\amxx.cfg"
File "installer\files\cstrike\addons\amxmodx\configs\cmds.ini"
File "installer\files\cstrike\addons\amxmodx\configs\core.ini"
File "installer\files\cstrike\addons\amxmodx\configs\cvars.ini"
File "installer\files\cstrike\addons\amxmodx\configs\maps.ini"
File "installer\files\cstrike\addons\amxmodx\configs\modules.ini"
File "installer\files\cstrike\addons\amxmodx\configs\plugins.ini"
File "installer\files\cstrike\addons\amxmodx\configs\stats.ini"
SetOutPath "$INSTDIR\files\cstrike\data"
File "installer\files\cstrike\data\csstats.amxx"
File "installer\files\cstrike\data\WinCSX.exe"
File "installer\files\cstrike\addons\amxmodx\data\csstats.amxx"
File "installer\files\cstrike\addons\amxmodx\data\WinCSX.exe"
SetOutPath "$INSTDIR\files\cstrike\modules"
File "installer\files\cstrike\modules\cstrike_amxx.dll"
File "installer\files\cstrike\modules\cstrike_amxx_amd64.so"
File "installer\files\cstrike\modules\cstrike_amxx_i386.so"
File "installer\files\cstrike\modules\csx_amxx.dll"
File "installer\files\cstrike\modules\csx_amxx_amd64.so"
File "installer\files\cstrike\modules\csx_amxx_i386.so"
File "installer\files\cstrike\addons\amxmodx\modules\cstrike_amxx.dll"
File "installer\files\cstrike\addons\amxmodx\modules\cstrike_amxx_i386.so"
File "installer\files\cstrike\addons\amxmodx\modules\csx_amxx.dll"
File "installer\files\cstrike\addons\amxmodx\modules\csx_amxx_i386.so"
SetOutPath "$INSTDIR\files\cstrike\plugins"
File "installer\files\cstrike\plugins\miscstats.amxx"
File "installer\files\cstrike\plugins\restmenu.amxx"
File "installer\files\cstrike\plugins\statsx.amxx"
File "installer\files\cstrike\plugins\stats_logging.amxx"
File "installer\files\cstrike\addons\amxmodx\plugins\miscstats.amxx"
File "installer\files\cstrike\addons\amxmodx\plugins\restmenu.amxx"
File "installer\files\cstrike\addons\amxmodx\plugins\statsx.amxx"
File "installer\files\cstrike\addons\amxmodx\plugins\stats_logging.amxx"
SetOutPath "$INSTDIR\files\cstrike\scripting"
File "installer\files\cstrike\scripting\csstats.sma"
File "installer\files\cstrike\scripting\miscstats.sma"
File "installer\files\cstrike\scripting\restmenu.sma"
File "installer\files\cstrike\scripting\statsx.sma"
File "installer\files\cstrike\scripting\stats_logging.sma"
File "installer\files\cstrike\addons\amxmodx\scripting\csstats.sma"
File "installer\files\cstrike\addons\amxmodx\scripting\miscstats.sma"
File "installer\files\cstrike\addons\amxmodx\scripting\restmenu.sma"
File "installer\files\cstrike\addons\amxmodx\scripting\statsx.sma"
File "installer\files\cstrike\addons\amxmodx\scripting\stats_logging.sma"
SetOutPath "$INSTDIR\files\dod\configs"
File "installer\files\dod\configs\core.ini"
File "installer\files\dod\configs\cvars.ini"
File "installer\files\dod\configs\maps.ini"
File "installer\files\dod\configs\modules.ini"
File "installer\files\dod\configs\plugins.ini"
File "installer\files\dod\addons\amxmodx\configs\core.ini"
File "installer\files\dod\addons\amxmodx\configs\cvars.ini"
File "installer\files\dod\addons\amxmodx\configs\maps.ini"
File "installer\files\dod\addons\amxmodx\configs\modules.ini"
File "installer\files\dod\addons\amxmodx\configs\plugins.ini"
SetOutPath "$INSTDIR\files\dod\data"
File "installer\files\dod\data\dodstats.amxx"
File "installer\files\dod\addons\amxmodx\data\dodstats.amxx"
SetOutPath "$INSTDIR\files\dod\modules"
File "installer\files\dod\modules\dodfun_amxx.dll"
File "installer\files\dod\modules\dodfun_amxx_i386.so"
File "installer\files\dod\modules\dodx_amxx.dll"
File "installer\files\dod\modules\dodx_amxx_i386.so"
File "installer\files\dod\addons\amxmodx\modules\dodfun_amxx.dll"
File "installer\files\dod\addons\amxmodx\modules\dodfun_amxx_i386.so"
File "installer\files\dod\addons\amxmodx\modules\dodx_amxx.dll"
File "installer\files\dod\addons\amxmodx\modules\dodx_amxx_i386.so"
SetOutPath "$INSTDIR\files\dod\plugins"
File "installer\files\dod\plugins\plmenu.amxx"
File "installer\files\dod\plugins\stats.amxx"
File "installer\files\dod\plugins\statssounds.amxx"
File "installer\files\dod\plugins\stats_logging.amxx"
File "installer\files\dod\addons\amxmodx\plugins\plmenu.amxx"
File "installer\files\dod\addons\amxmodx\plugins\stats.amxx"
File "installer\files\dod\addons\amxmodx\plugins\statssounds.amxx"
File "installer\files\dod\addons\amxmodx\plugins\stats_logging.amxx"
SetOutPath "$INSTDIR\files\dod\scripting"
File "installer\files\dod\scripting\dodstats.sma"
File "installer\files\dod\scripting\plmenu.sma"
File "installer\files\dod\scripting\stats.sma"
File "installer\files\dod\scripting\statssounds.sma"
File "installer\files\dod\scripting\stats_logging.sma"
File "installer\files\dod\addons\amxmodx\scripting\dodstats.sma"
File "installer\files\dod\addons\amxmodx\scripting\plmenu.sma"
File "installer\files\dod\addons\amxmodx\scripting\stats.sma"
File "installer\files\dod\addons\amxmodx\scripting\statssounds.sma"
File "installer\files\dod\addons\amxmodx\scripting\stats_logging.sma"
SetOutPath "$INSTDIR\files\ns\configs"
File "installer\files\ns\configs\amxx.cfg"
File "installer\files\ns\configs\clcmds.ini"
File "installer\files\ns\configs\cmds.ini"
File "installer\files\ns\configs\cvars.ini"
File "installer\files\ns\configs\maps.ini"
File "installer\files\ns\configs\modules.ini"
File "installer\files\ns\configs\plugins.ini"
File "installer\files\ns\configs\speech.ini"
File "installer\files\ns\configs\users.ini"
File "installer\files\ns\addons\amxmodx\configs\amxx.cfg"
File "installer\files\ns\addons\amxmodx\configs\clcmds.ini"
File "installer\files\ns\addons\amxmodx\configs\cmds.ini"
File "installer\files\ns\addons\amxmodx\configs\cvars.ini"
File "installer\files\ns\addons\amxmodx\configs\maps.ini"
File "installer\files\ns\addons\amxmodx\configs\modules.ini"
File "installer\files\ns\addons\amxmodx\configs\plugins.ini"
File "installer\files\ns\addons\amxmodx\configs\speech.ini"
File "installer\files\ns\addons\amxmodx\configs\users.ini"
SetOutPath "$INSTDIR\files\ns\modules"
File "installer\files\ns\modules\ns_amxx.dll"
File "installer\files\ns\modules\ns_amxx_i386.so"
File "installer\files\ns\addons\amxmodx\modules\ns_amxx.dll"
File "installer\files\ns\addons\amxmodx\modules\ns_amxx_i386.so"
SetOutPath "$INSTDIR\files\ns\plugins"
File "installer\files\ns\plugins\idlekicker.amxx"
File "installer\files\ns\plugins\mapchooser.amxx"
File "installer\files\ns\plugins\nextmap.amxx"
File "installer\files\ns\plugins\nscommands.amxx"
File "installer\files\ns\plugins\timeleft.amxx"
File "installer\files\ns\plugins\unstuck.amxx"
File "installer\files\ns\addons\amxmodx\plugins\idlekicker.amxx"
File "installer\files\ns\addons\amxmodx\plugins\mapchooser.amxx"
File "installer\files\ns\addons\amxmodx\plugins\nextmap.amxx"
File "installer\files\ns\addons\amxmodx\plugins\nscommands.amxx"
File "installer\files\ns\addons\amxmodx\plugins\timeleft.amxx"
File "installer\files\ns\addons\amxmodx\plugins\unstuck.amxx"
SetOutPath "$INSTDIR\files\ns\scripting"
File "installer\files\ns\scripting\idlekicker.sma"
File "installer\files\ns\scripting\mapchooser.sma"
File "installer\files\ns\scripting\nextmap.sma"
File "installer\files\ns\scripting\nscommands.sma"
File "installer\files\ns\scripting\timeleft.sma"
File "installer\files\ns\scripting\unstuck.sma"
File "installer\files\ns\addons\amxmodx\scripting\idlekicker.sma"
File "installer\files\ns\addons\amxmodx\scripting\mapchooser.sma"
File "installer\files\ns\addons\amxmodx\scripting\nextmap.sma"
File "installer\files\ns\addons\amxmodx\scripting\nscommands.sma"
File "installer\files\ns\addons\amxmodx\scripting\timeleft.sma"
File "installer\files\ns\addons\amxmodx\scripting\unstuck.sma"
SetOutPath "$INSTDIR\files\esf\configs"
File "installer\files\esf\configs\modules.ini"
File "installer\files\esf\configs\plugins.ini"
File "installer\files\esf\addons\amxmodx\configs\modules.ini"
File "installer\files\esf\addons\amxmodx\configs\plugins.ini"
SetOutPath "$INSTDIR\files\esf\scripting"
File "installer\files\esf\scripting\ESF_mod_tutorial.txt"
File "installer\files\esf\scripting\EvolutionX.Core.sma"
File "installer\files\esf\addons\amxmodx\scripting\ESF_mod_tutorial.txt"
File "installer\files\esf\addons\amxmodx\scripting\EvolutionX.Core.sma"
SetOutPath "$INSTDIR\files\esf\plugins"
File "installer\files\esf\plugins\EvolutionX.Core.amxx"
File "installer\files\esf\addons\amxmodx\plugins\EvolutionX.Core.amxx"
SetOutPath "$INSTDIR\files\tfc\configs"
File "installer\files\tfc\configs\core.ini"
File "installer\files\tfc\configs\cvars.ini"
File "installer\files\tfc\configs\maps.ini"
File "installer\files\tfc\configs\modules.ini"
File "installer\files\tfc\configs\plugins.ini"
File "installer\files\tfc\addons\amxmodx\configs\core.ini"
File "installer\files\tfc\addons\amxmodx\configs\cvars.ini"
File "installer\files\tfc\addons\amxmodx\configs\maps.ini"
File "installer\files\tfc\addons\amxmodx\configs\modules.ini"
File "installer\files\tfc\addons\amxmodx\configs\plugins.ini"
SetOutPath "$INSTDIR\files\tfc\data"
File "installer\files\tfc\data\tfcstats.amxx"
File "installer\files\tfc\addons\amxmodx\data\tfcstats.amxx"
SetOutPath "$INSTDIR\files\tfc\modules"
File "installer\files\tfc\modules\tfcx_amxx.dll"
File "installer\files\tfc\modules\tfcx_amxx_i386.so"
File "installer\files\tfc\addons\amxmodx\modules\tfcx_amxx.dll"
File "installer\files\tfc\addons\amxmodx\modules\tfcx_amxx_i386.so"
SetOutPath "$INSTDIR\files\tfc\plugins"
File "installer\files\tfc\plugins\plmenu.amxx"
File "installer\files\tfc\plugins\stats.amxx"
File "installer\files\tfc\plugins\statssounds.amxx"
File "installer\files\tfc\plugins\stats_logging.amxx"
File "installer\files\tfc\addons\amxmodx\plugins\plmenu.amxx"
File "installer\files\tfc\addons\amxmodx\plugins\stats.amxx"
File "installer\files\tfc\addons\amxmodx\plugins\statssounds.amxx"
File "installer\files\tfc\addons\amxmodx\plugins\stats_logging.amxx"
SetOutPath "$INSTDIR\files\tfc\scripting"
File "installer\files\tfc\scripting\plmenu.sma"
File "installer\files\tfc\scripting\stats.sma"
File "installer\files\tfc\scripting\statssounds.sma"
File "installer\files\tfc\scripting\stats_logging.sma"
File "installer\files\tfc\scripting\tfcstats.sma"
File "installer\files\tfc\addons\amxmodx\scripting\plmenu.sma"
File "installer\files\tfc\addons\amxmodx\scripting\stats.sma"
File "installer\files\tfc\addons\amxmodx\scripting\statssounds.sma"
File "installer\files\tfc\addons\amxmodx\scripting\stats_logging.sma"
File "installer\files\tfc\addons\amxmodx\scripting\tfcstats.sma"
SetOutPath "$INSTDIR\files\ts\configs"
File "installer\files\ts\configs\core.ini"
File "installer\files\ts\configs\maps.ini"
File "installer\files\ts\configs\modules.ini"
File "installer\files\ts\configs\plugins.ini"
File "installer\files\ts\addons\amxmodx\configs\core.ini"
File "installer\files\ts\addons\amxmodx\configs\maps.ini"
File "installer\files\ts\addons\amxmodx\configs\modules.ini"
File "installer\files\ts\addons\amxmodx\configs\plugins.ini"
SetOutPath "$INSTDIR\files\ts\data"
File "installer\files\ts\data\tsstats.amxx"
File "installer\files\ts\addons\amxmodx\data\tsstats.amxx"
SetOutPath "$INSTDIR\files\ts\modules"
File "installer\files\ts\modules\tsx_amxx.dll"
File "installer\files\ts\modules\tsx_amxx_i386.so"
File "installer\files\ts\modules\tsfun_amxx.dll"
File "installer\files\ts\modules\tsfun_amxx_i386.so"
File "installer\files\ts\addons\amxmodx\modules\tsx_amxx.dll"
File "installer\files\ts\addons\amxmodx\modules\tsx_amxx_i386.so"
File "installer\files\ts\addons\amxmodx\modules\tsfun_amxx.dll"
File "installer\files\ts\addons\amxmodx\modules\tsfun_amxx_i386.so"
SetOutPath "$INSTDIR\files\ts\plugins"
File "installer\files\ts\plugins\stats.amxx"
File "installer\files\ts\plugins\statssounds.amxx"
File "installer\files\ts\plugins\stats_logging.amxx"
File "installer\files\ts\addons\amxmodx\plugins\stats.amxx"
File "installer\files\ts\addons\amxmodx\plugins\statssounds.amxx"
File "installer\files\ts\addons\amxmodx\plugins\stats_logging.amxx"
SetOutPath "$INSTDIR\files\ts\scripting"
File "installer\files\ts\scripting\stats.sma"
File "installer\files\ts\scripting\statssounds.sma"
File "installer\files\ts\scripting\stats_logging.sma"
File "installer\files\ts\scripting\tsstats.sma"
File "installer\files\ts\addons\amxmodx\scripting\stats.sma"
File "installer\files\ts\addons\amxmodx\scripting\statssounds.sma"
File "installer\files\ts\addons\amxmodx\scripting\stats_logging.sma"
File "installer\files\ts\addons\amxmodx\scripting\tsstats.sma"
SetOutPath "$INSTDIR\"
File "installer\gpl.txt"
@ -585,10 +572,8 @@ Section Uninstall
Delete "$INSTDIR\files\cstrike\plugins\restmenu.amxx"
Delete "$INSTDIR\files\cstrike\plugins\miscstats.amxx"
Delete "$INSTDIR\files\cstrike\modules\csx_amxx_i386.so"
Delete "$INSTDIR\files\cstrike\modules\csx_amxx_amd64.so"
Delete "$INSTDIR\files\cstrike\modules\csx_amxx.dll"
Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx_i386.so"
Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx_amd64.so"
Delete "$INSTDIR\files\cstrike\modules\cstrike_amxx.dll"
Delete "$INSTDIR\files\cstrike\data\csstats.amxx"
Delete "$INSTDIR\files\cstrike\data\WinCSX.amxx"
@ -600,113 +585,113 @@ Section Uninstall
Delete "$INSTDIR\files\cstrike\configs\core.ini"
Delete "$INSTDIR\files\cstrike\configs\cmds.ini"
Delete "$INSTDIR\files\cstrike\configs\amxx.cfg"
Delete "$INSTDIR\files\base\scripting\timeleft.sma"
Delete "$INSTDIR\files\base\scripting\telemenu.sma"
Delete "$INSTDIR\files\base\scripting\statscfg.sma"
Delete "$INSTDIR\files\base\scripting\scrollmsg.sma"
Delete "$INSTDIR\files\base\scripting\plmenu.sma"
Delete "$INSTDIR\files\base\scripting\pausecfg.sma"
Delete "$INSTDIR\files\base\scripting\nextmap.sma"
Delete "$INSTDIR\files\base\scripting\multilingual.sma"
Delete "$INSTDIR\files\base\scripting\menufront.sma"
Delete "$INSTDIR\files\base\scripting\mapsmenu.sma"
Delete "$INSTDIR\files\base\scripting\mapchooser.sma"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\amxmod.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\maths.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\mysql.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\translator.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\Vexd_Utilities.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\VexdUM.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\VexdUM_const.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\VexdUM_stock.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod_compat\xtrafun.inc"
Delete "$INSTDIR\files\base\scripting\include\xtrafun.inc"
Delete "$INSTDIR\files\base\scripting\include\xs.inc"
Delete "$INSTDIR\files\base\scripting\include\Vexd_Utilities.inc"
Delete "$INSTDIR\files\base\scripting\include\vector.inc"
Delete "$INSTDIR\files\base\scripting\include\vault.inc"
Delete "$INSTDIR\files\base\scripting\include\tsx.inc"
Delete "$INSTDIR\files\base\scripting\include\tsfun.inc"
Delete "$INSTDIR\files\base\scripting\include\tsstats.inc"
Delete "$INSTDIR\files\base\scripting\include\tsconst.inc"
Delete "$INSTDIR\files\base\scripting\include\tfcx.inc"
Delete "$INSTDIR\files\base\scripting\include\tfcstats.inc"
Delete "$INSTDIR\files\base\scripting\include\tfcconst.inc"
Delete "$INSTDIR\files\base\scripting\include\time.inc"
Delete "$INSTDIR\files\base\scripting\include\string.inc"
Delete "$INSTDIR\files\base\scripting\include\sqlx.inc"
Delete "$INSTDIR\files\base\scripting\include\sorting.inc"
Delete "$INSTDIR\files\base\scripting\include\sockets.inc"
Delete "$INSTDIR\files\base\scripting\include\regex.inc"
Delete "$INSTDIR\files\base\scripting\include\ns_const.inc"
Delete "$INSTDIR\files\base\scripting\include\ns2amx.inc"
Delete "$INSTDIR\files\base\scripting\include\ns.inc"
Delete "$INSTDIR\files\base\scripting\include\nvault.inc"
Delete "$INSTDIR\files\base\scripting\include\message_stocks.inc"
Delete "$INSTDIR\files\base\scripting\include\message_const.inc"
Delete "$INSTDIR\files\base\scripting\include\messages.inc"
Delete "$INSTDIR\files\base\scripting\include\lang.inc"
Delete "$INSTDIR\files\base\scripting\include\hlsdk_const.inc"
Delete "$INSTDIR\files\base\scripting\include\geoip.inc"
Delete "$INSTDIR\files\base\scripting\include\fun.inc"
Delete "$INSTDIR\files\base\scripting\include\float.inc"
Delete "$INSTDIR\files\base\scripting\include\file.inc"
Delete "$INSTDIR\files\base\scripting\include\fakemeta_stocks.inc"
Delete "$INSTDIR\files\base\scripting\include\fakemeta_const.inc"
Delete "$INSTDIR\files\base\scripting\include\fakemeta.inc"
Delete "$INSTDIR\files\base\scripting\include\esf.inc"
Delete "$INSTDIR\files\base\scripting\include\esf_const.inc"
Delete "$INSTDIR\files\base\scripting\include\engine_stocks.inc"
Delete "$INSTDIR\files\base\scripting\include\engine_const.inc"
Delete "$INSTDIR\files\base\scripting\include\engine.inc"
Delete "$INSTDIR\files\base\scripting\include\dodx.inc"
Delete "$INSTDIR\files\base\scripting\include\dodstats.inc"
Delete "$INSTDIR\files\base\scripting\include\dodfun.inc"
Delete "$INSTDIR\files\base\scripting\include\dodconst.inc"
Delete "$INSTDIR\files\base\scripting\include\dbi.inc"
Delete "$INSTDIR\files\base\scripting\include\csx.inc"
Delete "$INSTDIR\files\base\scripting\include\cstrike.inc"
Delete "$INSTDIR\files\base\scripting\include\csstats.inc"
Delete "$INSTDIR\files\base\scripting\include\core.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmodx.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmod.inc"
Delete "$INSTDIR\files\base\scripting\include\amxmisc.inc"
Delete "$INSTDIR\files\base\scripting\include\amxconst.inc"
Delete "$INSTDIR\files\base\scripting\imessage.sma"
Delete "$INSTDIR\files\base\scripting\dlsym64"
Delete "$INSTDIR\files\base\scripting\dlsym"
Delete "$INSTDIR\files\base\scripting\compile.sh"
Delete "$INSTDIR\files\base\scripting\compile.exe"
Delete "$INSTDIR\files\base\scripting\cmdmenu.sma"
Delete "$INSTDIR\files\base\scripting\antiflood.sma"
Delete "$INSTDIR\files\base\scripting\amxxpc64.so"
Delete "$INSTDIR\files\base\scripting\amxxpc64.dll"
Delete "$INSTDIR\files\base\scripting\amxxpc32.so"
Delete "$INSTDIR\files\base\scripting\amxxpc32.dll"
Delete "$INSTDIR\files\base\scripting\amxxpc.exe"
Delete "$INSTDIR\files\base\scripting\amxxpc"
Delete "$INSTDIR\files\base\scripting\adminvote.sma"
Delete "$INSTDIR\files\base\scripting\adminslots.sma"
Delete "$INSTDIR\files\base\scripting\adminhelp.sma"
Delete "$INSTDIR\files\base\scripting\admincmd.sma"
Delete "$INSTDIR\files\base\scripting\adminchat.sma"
Delete "$INSTDIR\files\base\scripting\admin.sma"
Delete "$INSTDIR\files\base\scripting\amxmod_compat\amxmod_compat.sma"
Delete "$INSTDIR\files\base\scripting\amxmod_compat\core.sma"
Delete "$INSTDIR\files\base\scripting\amxmod_compat\mysql.sma"
Delete "$INSTDIR\files\base\scripting\amxmod_compat\vexdum.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\callfunc_test.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\fakemeta_tests.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\fmttest.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\fwdtest1.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\fwdtest2.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\logtest.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\menutest.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\nvault_test.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\sorttest.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\sqlxtest.sma"
Delete "$INSTDIR\files\base\scripting\testsuite\sqlxtest.sq3"
Delete "$INSTDIR\files\base\scripting\testsuite\sqlxtest.sql"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\timeleft.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\telemenu.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\statscfg.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\scrollmsg.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\plmenu.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\pausecfg.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\nextmap.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\multilingual.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\menufront.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\mapsmenu.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\mapchooser.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\amxmod.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\maths.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\mysql.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\translator.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\Vexd_Utilities.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\VexdUM.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\VexdUM_const.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\VexdUM_stock.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat\xtrafun.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\xtrafun.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\xs.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\Vexd_Utilities.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\vector.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\vault.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tsx.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tsfun.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tsstats.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tsconst.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tfcx.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tfcstats.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tfcconst.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\time.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\string.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\sqlx.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\sorting.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\sockets.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\regex.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\ns_const.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\ns2amx.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\ns.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\nvault.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\message_stocks.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\message_const.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\messages.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\lang.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\hlsdk_const.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\geoip.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\fun.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\float.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\file.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\fakemeta_stocks.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\fakemeta_const.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\fakemeta.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\esf.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\esf_const.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\engine_stocks.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\engine_const.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\engine.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\dodx.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\dodstats.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\dodfun.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\dodconst.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\dbi.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\csx.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\cstrike.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\csstats.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\core.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmodx.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmisc.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxconst.inc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\imessage.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\dlsym64"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\dlsym"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\compile.sh"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\compile.exe"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\cmdmenu.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\antiflood.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc64.so"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc64.dll"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc32.so"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc32.dll"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc.exe"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxxpc"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\adminvote.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\adminslots.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\adminhelp.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\admincmd.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\adminchat.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\admin.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxmod_compat\amxmod_compat.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxmod_compat\core.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxmod_compat\mysql.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\amxmod_compat\vexdum.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\callfunc_test.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\fakemeta_tests.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\fmttest.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\fwdtest1.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\fwdtest2.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\logtest.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\menutest.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\nvault_test.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\sorttest.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\sqlxtest.sma"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\sqlxtest.sq3"
Delete "$INSTDIR\files\base\addons\amxmodx\scripting\testsuite\sqlxtest.sql"
Delete "$INSTDIR\files\base\plugins\timeleft.amxx"
Delete "$INSTDIR\files\base\plugins\telemenu.amxx"
Delete "$INSTDIR\files\base\plugins\statscfg.amxx"
@ -729,37 +714,26 @@ Section Uninstall
Delete "$INSTDIR\files\base\plugins\adminchat.amxx"
Delete "$INSTDIR\files\base\plugins\admin.amxx"
Delete "$INSTDIR\files\base\modules\nvault_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\nvault_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\nvault_amxx.dll"
Delete "$INSTDIR\files\base\modules\sockets_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\sockets_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\sockets_amxx.dll"
Delete "$INSTDIR\files\base\modules\regex_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\regex_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\regex_amxx.dll"
Delete "$INSTDIR\files\base\modules\sqlite_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\sqlite_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\sqlite_amxx.dll"
Delete "$INSTDIR\files\base\modules\mysql_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\mysql_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\mysql_amxx.dll"
Delete "$INSTDIR\files\base\modules\geoip_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\geoip_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\geoip_amxx.dll"
Delete "$INSTDIR\files\base\modules\fun_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\fun_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\fun_amxx.dll"
Delete "$INSTDIR\files\base\modules\fakemeta_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\fakemeta_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\fakemeta_amxx.dll"
Delete "$INSTDIR\files\base\modules\engine_amxx_i386.so"
Delete "$INSTDIR\files\base\modules\engine_amxx_amd64.so"
Delete "$INSTDIR\files\base\modules\engine_amxx.dll"
Delete "$INSTDIR\files\base\dlls\metamod_i386.so"
Delete "$INSTDIR\files\base\dlls\metamod_amd64.so"
Delete "$INSTDIR\files\base\dlls\metamod.dll"
Delete "$INSTDIR\files\base\dlls\amxmodx_mm_i386.so"
Delete "$INSTDIR\files\base\dlls\amxmodx_mm_amd64.so"
Delete "$INSTDIR\files\base\dlls\amxmodx_mm.dll"
Delete "$INSTDIR\files\base\data\lang\timeleft.txt"
Delete "$INSTDIR\files\base\data\lang\time.txt"
@ -874,9 +848,9 @@ Section Uninstall
RMDir "$INSTDIR\files\cstrike\modules"
RMDir "$INSTDIR\files\cstrike\data"
RMDir "$INSTDIR\files\cstrike\configs"
RMDir "$INSTDIR\files\base\scripting\include\amxmod_compat"
RMDir "$INSTDIR\files\base\scripting\include"
RMDir "$INSTDIR\files\base\scripting\amxmod_compat"
RMDir "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod_compat"
RMDir "$INSTDIR\files\base\addons\amxmodx\scripting\include"
RMDir "$INSTDIR\files\base\addons\amxmodx\scripting\amxmod_compat"
RMDir "$INSTDIR\files\base\scripting"
RMDir "$INSTDIR\files\base\plugins"
RMDir "$INSTDIR\files\base\modules"

View File

@ -32,8 +32,8 @@
-M
-$M16384,1048576
-K$00400000
-LE"c:\programme\borland\delphi7\Projects\Bpl"
-LN"c:\programme\borland\delphi7\Projects\Bpl"
-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
-DmadExcept
-w-UNSAFE_TYPE
-w-UNSAFE_CODE

View File

@ -7,7 +7,7 @@ program AMXInstaller;
- Indy 9 (www.indyproject.org)
- FlatStyle Components (www.torry.net)
- FlatPack Component Pack (www.torry.net)
- mxFlatPack Component Pack (www.maxcomponents.net/components.html)
- JVCL Lib Pack 3.0 (jvcl.sourceforge.net)
AMXX Installer for AMX Mod X is developed under GNU Public License

Binary file not shown.

View File

@ -3,14 +3,15 @@ unit UnitInstall;
interface
uses SysUtils, Classes, Windows, Graphics, Forms, ShellAPI, Controls, Messages,
TlHelp32, IdFTPCommon, ComCtrls, JclFileUtils, Dialogs;
TlHelp32, IdFTPCommon, ComCtrls, Dialogs, JclFileUtils;
type TMod = (modNone, modCS, modDoD, modTFC, modNS, modTS, modESF);
type TOS = (osWindows, osLinux32, osLinux64);
type TOS = (osWindows, osLinux32{, osLinux64});
procedure AddStatus(Text: String; Color: TColor; ShowTime: Boolean = True);
procedure AddDone(Additional: String = '');
procedure AddSkipped;
procedure AddFailed;
procedure AddNotFound;
procedure MakeDir(Dir: String);
procedure DownloadFile(eFile: String; eDestination: String);
@ -88,6 +89,17 @@ begin
Application.ProcessMessages;
end;
procedure AddFailed;
begin
frmMain.rtfDetails.SelStart := Length(frmMain.rtfDetails.Text);
frmMain.rtfDetails.SelAttributes.Color := clMaroon;
frmMain.rtfDetails.SelText := ' Failed.';
frmMain.rtfDetails.Perform(WM_VSCROLL, SB_BOTTOM, 0);
frmMain.Repaint;
Application.ProcessMessages;
end;
procedure AddNotFound;
begin
frmMain.rtfDetails.SelStart := Length(frmMain.rtfDetails.Text);
@ -173,8 +185,12 @@ begin
if frmMain.IdFTP.TransferType <> TransferType then
frmMain.IdFTP.TransferType := TransferType;
// upload the file
try
frmMain.IdFTP.Put(eFile, eDestination);
AddDone;
except
AddFailed;
end;
end;
procedure FTPMakeDir(eDir: String);
@ -213,7 +229,7 @@ begin
if Pos('_amd64', ExtractFileName(eFile)) <> 0 then
Result := True;
end;
osLinux64: begin
{osLinux64: begin
if ExtractFileExt(eFile) = '.dll' then
Result := True;
if ExtractFileExt(eFile) = '.exe' then
@ -221,7 +237,7 @@ begin
if Pos('_i386', ExtractFileName(eFile)) <> 0 then
Result := True;
end;
end;}
end;
end;
@ -280,13 +296,13 @@ var eStr: TStringList;
UpdatePluginsIni: Boolean;
begin
AddStatus('Scanning for directories...', clBlack);
with GetAllFiles(ExtractFilePath(ParamStr(0)) + 'files\*.*', faDirectory, True, True) do begin
with GetAllFiles(ExtractFilePath(Application.ExeName) + 'files\*.*', faDirectory, True, True) do begin
DirList.Text := Text;
Free;
end;
AddDone('found ' + IntToStr(DirList.Count) + ' directories..');
AddStatus('Scanning for files...', clBlack);
with GetAllFiles(ExtractFilePath(ParamStr(0)) + 'files\*.*', faAnyFile, True, False) do begin
with GetAllFiles(ExtractFilePath(Application.ExeName) + 'files\*.*', faAnyFile, True, False) do begin
FileList.Text := Text;
Free;
end;
@ -327,9 +343,9 @@ begin
end;
for i := 0 to DirList.Count -1 do
DirList[i] := Copy(DirList[i], Length(ExtractFilePath(ParamStr(0))) + 7, Length(DirList[i]));
DirList[i] := Copy(DirList[i], Length(ExtractFilePath(Application.ExeName)) + 7, Length(DirList[i]));
for i := 0 to FileList.Count -1 do
FileList[i] := Copy(FileList[i], Length(ExtractFilePath(ParamStr(0))) + 7, Length(FileList[i]));
FileList[i] := Copy(FileList[i], Length(ExtractFilePath(Application.ExeName)) + 7, Length(FileList[i]));
{ liblist.gam }
if not FileExists(ePath + 'liblist.gam') then begin
@ -350,9 +366,9 @@ begin
eStr[i] := '//' + eStr[i];
end;
eStr.Add('gamedll "addons\metamod\dlls\metamod.dll"');
if OS = osLinux64 then
eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_amd64.so"')
else
//if OS = osLinux64 then
// eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_amd64.so"')
//else
eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_i386.so"');
FileSetAttr(ePath + 'liblist.gam', 0);
eStr.SaveToFile(ePath + 'liblist.gam');
@ -438,44 +454,44 @@ begin
if not IsForbidden(FileList[i], OS) then begin
if Pos('base', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 6, Length(FileList[i])), clBlack);
FileCopy(ExtractFilePath(ParamStr(0)) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 6, Length(FileList[i])), CopyConfig);
FileCopy(ExtractFilePath(Application.ExeName) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 6, Length(FileList[i])), CopyConfig);
end;
case eMod of
modCS: begin
if Pos('cstrike', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 9, Length(FileList[i])), clBlack);
FileCopy(ExtractFilePath(ParamStr(0)) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 9, Length(FileList[i])), CopyConfig);
FileCopy(ExtractFilePath(Application.ExeName) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 9, Length(FileList[i])), CopyConfig);
end;
end;
modDoD: begin
if Pos('dod', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), clBlack);
FileCopy(ExtractFilePath(ParamStr(0)) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), CopyConfig);
FileCopy(ExtractFilePath(Application.ExeName) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), CopyConfig);
end;
end;
modTFC: begin
if Pos('tfc', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), clBlack);
FileCopy(ExtractFilePath(ParamStr(0)) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), CopyConfig);
FileCopy(ExtractFilePath(Application.ExeName) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), CopyConfig);
end;
end;
modNS: begin
if Pos('ns', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), clBlack);
FileCopy(ExtractFilePath(ParamStr(0)) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), CopyConfig);
FileCopy(ExtractFilePath(Application.ExeName) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), CopyConfig);
end;
end;
modTS: begin
if Pos('ts', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), clBlack);
FileCopy(ExtractFilePath(ParamStr(0)) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), CopyConfig);
FileCopy(ExtractFilePath(Application.ExeName) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), CopyConfig);
end;
end;
modESF: begin
if Pos('esf', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), clBlack);
FileCopy(ExtractFilePath(ParamStr(0)) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), CopyConfig);
FileCopy(ExtractFilePath(Application.ExeName) + 'files\' + FileList[i], ePath + 'addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), CopyConfig);
end;
end;
end;
@ -596,7 +612,7 @@ begin
frmMain.IdFTP.Connect;
Result := True;
except
MessageBox(frmMain.Handle, 'Failed to reconnect. Installation aborted.', PChar(Application.Title), MB_ICONSTOP);
MessageBox(frmMain.Handle, 'Failed to reconnect. Installation has been aborted.', PChar(Application.Title), MB_ICONSTOP);
end;
end;
end;
@ -614,10 +630,12 @@ begin
ePath := '/';
CurNode := frmMain.trvDirectories.Selected;
if (Assigned(CurNode)) then begin
repeat
ePath := '/' + CurNode.Text + ePath;
CurNode := CurNode.Parent;
until (not Assigned(CurNode));
end;
Screen.Cursor := crAppStart;
frmMain.cmdCancel.Show;
@ -625,13 +643,13 @@ begin
frmMain.cmdNext.Hide;
Screen.Cursor := crHourGlass;
AddStatus('Scanning for directories...', clBlack);
with GetAllFiles(ExtractFilePath(ParamStr(0)) + 'temp\*.*', faDirectory, True, True) do begin
with GetAllFiles(ExtractFilePath(Application.ExeName) + 'temp\*.*', faDirectory, True, True) do begin
DirList.Text := Text;
Free;
end;
AddDone('found ' + IntToStr(DirList.Count) + ' directories..');
AddStatus('Scanning for files...', clBlack);
with GetAllFiles(ExtractFilePath(ParamStr(0)) + 'temp\*.*', faAnyFile, True, False) do begin
with GetAllFiles(ExtractFilePath(Application.ExeName) + 'temp\*.*', faAnyFile, True, False) do begin
FileList.Text := Text;
Free;
end;
@ -642,9 +660,9 @@ begin
frmMain.ggeItem.MaxValue := DirList.Count;
for i := 0 to DirList.Count -1 do
DirList[i] := Copy(DirList[i], Length(ExtractFilePath(ParamStr(0))) + 6, Length(DirList[i]));
DirList[i] := Copy(DirList[i], Length(ExtractFilePath(Application.ExeName)) + 6, Length(DirList[i]));
for i := 0 to FileList.Count -1 do
FileList[i] := Copy(FileList[i], Length(ExtractFilePath(ParamStr(0))) + 6, Length(FileList[i]));
FileList[i] := Copy(FileList[i], Length(ExtractFilePath(Application.ExeName)) + 6, Length(FileList[i]));
CopyConfig := True;
AddStatus('Checking for previous AMX Mod X installation...', clBlack);
@ -664,7 +682,7 @@ begin
// liblist.gam
AddStatus('Editing liblist.gam...', clBlack);
eStr := TStringList.Create;
eStr.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'temp\liblist.gam');
eStr.LoadFromFile(ExtractFilePath(Application.ExeName) + 'temp\liblist.gam');
if eStr.IndexOf('gamedll "addons\metamod\dlls\metamod.dll"') = -1 then begin
if Cancel then begin
AddStatus('', clBlack, False);
@ -682,8 +700,8 @@ begin
eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_i386.so"')
else
eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_amd64.so"');
FileSetAttr(ExtractFilePath(ParamStr(0)) + 'temp\liblist.gam', 0);
eStr.SaveToFile(ExtractFilePath(ParamStr(0)) + 'temp\liblist.gam');
FileSetAttr(ExtractFilePath(Application.ExeName) + 'temp\liblist.gam', 0);
eStr.SaveToFile(ExtractFilePath(Application.ExeName) + 'temp\liblist.gam');
end;
eStr.Free;
AddDone;
@ -749,8 +767,8 @@ begin
if not IsForbidden(FileList[i], OS) then begin
AddStatus('Uploading file: ' + FileList[i], clBlack);
if FileExists(ExtractFilePath(ParamStr(0)) + 'temp\' + FileList[i]) then begin
frmMain.ggeItem.MaxValue := FSize(ExtractFilePath(ParamStr(0)) + 'temp\' + FileList[i]);
if FileExists(ExtractFilePath(Application.ExeName) + 'temp\' + FileList[i]) then begin
frmMain.ggeItem.MaxValue := FSize(ExtractFilePath(Application.ExeName) + 'temp\' + FileList[i]);
UploadAgain:
try
eGoBack := False;
@ -762,7 +780,7 @@ begin
AddStatus('Warning: CHMOD not supported.', clMaroon);
end;
UploadFile(ExtractFilePath(ParamStr(0)) + 'temp\' + FileList[i], ePath + FileList[i], CopyConfig);
UploadFile(ExtractFilePath(Application.ExeName) + 'temp\' + FileList[i], ePath + FileList[i], CopyConfig);
try
if FileList[i] = 'liblist.gam' then
@ -805,8 +823,8 @@ begin
end;
AddStatus('', clBlack, False);
AddStatus('Cleaning up installation...', clBlack, False);
if (DirectoryExists(ExtractFilePath(ParamStr(0)) + 'temp')) then
DelTree(ExtractFilePath(ParamStr(0)) + 'temp');
if (DirectoryExists(ExtractFilePath(Application.ExeName) + 'temp')) then
DelTree(ExtractFilePath(Application.ExeName) + 'temp');
AddDone;
frmMain.ggeAll.Progress := frmMain.ggeAll.MaxValue;

View File

@ -5056,6 +5056,7 @@ object frmMain: TfrmMain
'2111-1307 USA'
' Everyone is permitted to copy and distribute verbatim copies'
' of this license document, but changing it is not allowed.'
''
#9#9#9' Preamble'
' The licenses for most software are designed to take away your'
@ -6101,14 +6102,14 @@ object frmMain: TfrmMain
end
object lblStep2: TLabel
Left = 44
Top = 254
Top = 230
Width = 244
Height = 13
Caption = '4. Connect to server and select the mod directory:'
end
object lblStep4: TLabel
Left = 44
Top = 214
Top = 188
Width = 117
Height = 13
Caption = '3. Select a game addon:'
@ -6122,7 +6123,7 @@ object frmMain: TfrmMain
end
object lblStep5: TLabel
Left = 44
Top = 358
Top = 334
Width = 64
Height = 13
Caption = '5. Click Next.'
@ -6312,7 +6313,7 @@ object frmMain: TfrmMain
end
object cmdConnect: TFlatButton
Left = 416
Top = 269
Top = 247
Width = 71
Height = 20
ColorFocused = 16245198
@ -6326,30 +6327,35 @@ object frmMain: TfrmMain
end
object pnlDirectory: TPanel
Left = 44
Top = 270
Top = 246
Width = 367
Height = 83
BevelOuter = bvLowered
TabOrder = 2
DesignSize = (
367
83)
object trvDirectories: TTreeView
Left = 1
Top = 1
Width = 365
Height = 81
Align = alClient
Anchors = [akLeft, akTop, akRight, akBottom]
BorderStyle = bsNone
Images = ilImages
Indent = 19
ReadOnly = True
TabOrder = 0
OnChange = trvDirectoriesChange
OnCollapsing = trvDirectoriesCollapsing
OnExpanding = trvDirectoriesExpanding
OnExpanded = trvDirectoriesExpanded
OnMouseDown = trvDirectoriesMouseDown
end
end
object cboGameAddon: TFlatComboBox
Left = 44
Top = 230
Top = 204
Width = 443
Height = 21
Style = csDropDownList
@ -6372,27 +6378,9 @@ object frmMain: TfrmMain
Left = 44
Top = 158
Width = 441
Height = 50
Height = 25
BevelOuter = bvLowered
TabOrder = 5
object lblOSNote: TLabel
Left = 4
Top = 24
Width = 435
Height = 22
Caption =
'Note: Most linux servers run on a 32-bit platform. If you are no' +
't sure what platform your server is using, you can still ask you' +
'r provider for further information about this topic.'
Enabled = False
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -9
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
WordWrap = True
end
object optWindows: TFlatRadioButton
Left = 5
Top = 5
@ -6417,6 +6405,7 @@ object frmMain: TfrmMain
Width = 82
Height = 14
Caption = 'Linux (64-bit)'
Enabled = False
TabOrder = 2
end
end
@ -6769,6 +6758,7 @@ object frmMain: TfrmMain
object IdFTP: TIdFTP
Intercept = IdLogFile
MaxLineAction = maException
ReadTimeout = 0
RecvBufferSize = 1024
SendBufferSize = 1024
OnWork = IdFTPWork

View File

@ -4,12 +4,12 @@ interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TFlatRadioButtonUnit, StdCtrls, ComCtrls, mxFlatControls, JvPageList,
Dialogs, StdCtrls, ComCtrls, mxFlatControls, JvPageList,
ExtCtrls, JvExControls, JvComponent, TFlatButtonUnit, jpeg, TFlatEditUnit,
TFlatGaugeUnit, ImgList, FileCtrl, Registry, CheckLst, TFlatComboBoxUnit,
TFlatCheckBoxUnit, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdFTP, IdException, IdAntiFreezeBase, IdAntiFreeze,
IdIntercept, IdLogBase, IdLogFile, JclFileUtils;
IdIntercept, IdLogBase, IdLogFile, JclFileUtils, TFlatRadioButtonUnit;
type
TfrmMain = class(TForm)
@ -108,10 +108,9 @@ type
pnlOS: TPanel;
optWindows: TFlatRadioButton;
optLinux32: TFlatRadioButton;
optLinux64: TFlatRadioButton;
lblOSNote: TLabel;
lblStep5: TLabel;
lblFTP: TLabel;
optLinux64: TFlatRadioButton;
procedure jvwStepsCancelButtonClick(Sender: TObject);
procedure cmdCancelClick(Sender: TObject);
procedure cmdNextClick(Sender: TObject);
@ -123,7 +122,6 @@ type
procedure cmdProxySettingsClick(Sender: TObject);
procedure txtPortChange(Sender: TObject);
procedure trvDirectoriesExpanded(Sender: TObject; Node: TTreeNode);
procedure trvDirectoriesChange(Sender: TObject; Node: TTreeNode);
procedure FormDestroy(Sender: TObject);
procedure IdFTPWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
@ -137,6 +135,9 @@ type
procedure frbFTPClick(Sender: TObject);
procedure frbLocalClick(Sender: TObject);
procedure trvModsClick(Sender: TObject);
procedure trvDirectoriesMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure trvDirectoriesChange(Sender: TObject; Node: TTreeNode);
private
OldProgress: Integer;
CurrProgress: Integer;
@ -148,7 +149,7 @@ var
frmMain: TfrmMain;
gMultiAccount: Boolean;
const VERSION = '1.76a';
const VERSION = '1.76d';
implementation
@ -214,10 +215,12 @@ begin
eStr := TStringList.Create;
ePath := '/';
CurNode := trvDirectories.Selected;
if (Assigned(CurNode)) then begin
repeat
ePath := '/' + CurNode.Text + ePath;
CurNode := CurNode.Parent;
until (not Assigned(CurNode));
end;
try
IdFTP.ChangeDir(ePath);
@ -236,6 +239,7 @@ begin
if eStr.IndexOf('liblist.gam') = -1 then begin
MessageBox(Handle, 'Invalid directory. Please select your mod directory and try again.', PChar(Application.Title), MB_ICONWARNING);
eStr.Free;
Screen.Cursor := crDefault;
exit;
end
else
@ -246,15 +250,15 @@ begin
cmdConnect.Enabled := False;
optWindows.Enabled := False;
optLinux32.Enabled := False;
optLinux64.Enabled := False;
//optLinux64.Enabled := False;
cboGameAddon.Enabled := False;
// preinstall...
MakeDir(ExtractFilePath(ParamStr(0)) + 'temp');
DownloadFile('liblist.gam', ExtractFilePath(ParamStr(0)) + 'temp\liblist.gam');
MakeDir(ExtractFilePath(Application.ExeName) + 'temp');
DownloadFile('liblist.gam', ExtractFilePath(Application.ExeName) + 'temp\liblist.gam');
try
IdFTP.ChangeDir(ePath + 'addons/metamod/');
ForceDirectories(ExtractFilePath(ParamStr(0)) + 'temp\addons\metamod\');
DownloadFile('plugins.ini', ExtractFilePath(ParamStr(0)) + 'temp\addons\metamod\plugins.ini');
ForceDirectories(ExtractFilePath(Application.ExeName) + 'temp\addons\metamod\');
DownloadFile('plugins.ini', ExtractFilePath(Application.ExeName) + 'temp\addons\metamod\plugins.ini');
except
try
IdFTP.ChangeDir(ePath);
@ -277,10 +281,10 @@ begin
if optWindows.Checked then
eOS := osWindows
else if optLinux32.Checked then
eOS := osLinux32
else
eOS := osLinux64;
else //if optLinux32.Checked then
eOS := osLinux32;
//else
// eOS := osLinux64;
jspInstallProgress.Show;
frmMain.Height := 382;
@ -290,7 +294,7 @@ begin
ggeAll.Progress := 0;
ggeItem.Progress := 0;
cmdNext.Hide;
InstallCustom(ExtractFilePath(ParamStr(0)) + 'temp\', ChosenMod, eOS);
InstallCustom(ExtractFilePath(Application.ExeName) + 'temp\', ChosenMod, eOS);
if Cancel then
exit;
AddStatus('', clBlack, False);
@ -576,7 +580,7 @@ begin
end;
end
else if frbFTP.Checked then begin // FTP
frmMain.Height := 445;
frmMain.Height := 421;
jspFTP.Show;
end;
end;
@ -602,7 +606,8 @@ end;
procedure TfrmMain.cmdConnectClick(Sender: TObject);
var i: integer;
eStr: TStringList;
CurNode: TTreeNode;
CurNode, HomeNode, OldNode: TTreeNode;
Path: String;
begin
if (Trim(txtHost.Text) = '') or (Trim(txtUsername.Text) = '') then
MessageBox(Handle, 'Please fill in each field!', PChar(Application.Title), MB_ICONWARNING)
@ -627,37 +632,84 @@ begin
// ... connect and check values etc ...
try
IdFTP.Connect(True, 15000);
// ... scan for initial directory ...
// ... get initial directory ...
Path := IdFTP.RetrieveCurrentDir;
// ... "fix" path ...
eStr := TStringList.Create;
eStr.Text := StringReplace(IdFTP.RetrieveCurrentDir, '/', #13, [rfReplaceAll]);
eStr.Text := StringReplace(Path, '/', #13, [rfReplaceAll]);
for i := eStr.Count -1 downto 0 do begin
if eStr[i] = '' then
eStr.Delete(i);
end;
if (Copy(Path, Length(Path) -1, 1) <> '/') then
Path := Path + '/';
// ... connect successful, change captions ...
trvDirectories.Enabled := True;
cmdConnect.Enabled := True;
cmdConnect.Caption := 'Disconnect';
cmdCancel.Caption := '&Close';
cmdNext.Enabled := True;
// ... change to / and create all the directories ...
HomeNode := nil;
try
if (Path <> '/') then
IdFTP.ChangeDir('/');
CurNode := nil;
if eStr.Count <> 0 then begin
for i := 0 to eStr.Count -1 do
CurNode := trvDirectories.Items.AddChild(CurNode, eStr[i]);
end;
if trvDirectories.Items.Count <> 0 then
trvDirectories.Items.Item[0].Expand(True);
eStr.Free;
// ... scan for directories ...
trvDirectories.Items.BeginUpdate;
with GetAllDirs do begin
for i := 0 to Count -1 do
trvDirectories.Items.AddChild(trvDirectories.Items.AddChild(CurNode, Strings[i]), 'Scanning...');
for i := 0 to Count -1 do begin
CurNode := trvDirectories.Items.Add(nil, Strings[i]);
if (Pos('/' + CurNode.Text + '/', Path) = 0) then begin
trvDirectories.Items.AddChild(CurNode, 'Scanning...');
CurNode.Data := Pointer(2);
end
else begin
HomeNode := CurNode;
CurNode.Data := Pointer(1);
Repaint;
end;
end;
Free;
end;
trvDirectories.Items.EndUpdate;
trvDirectories.TopItem := HomeNode;
IdFTP.ChangeDir(Path);
except
trvDirectories.Items.EndUpdate;
if (IdFTP.Connected) then
IdFTP.ChangeDir(Path)
else
IdFTP.Connect;
end;
// ... find directories in start path ...
CurNode := HomeNode;
OldNode := nil;
for i := 1 to eStr.Count -1 do begin
if (Assigned(CurNode)) then begin
CurNode := trvDirectories.Items.AddChild(CurNode, eStr[i]);
if (Assigned(OldNode)) then
OldNode.Expand(False);
CurNode.Data := Pointer(1);
OldNode := CurNode;
end;
end;
if (Assigned(CurNode)) then begin
trvDirectories.Items.AddChild(CurNode, 'Scanning...');
CurNode.Data := Pointer(2);
end;
// ... expand home node ...
if (Assigned(HomeNode)) and (HomeNode <> CurNode) then begin
HomeNode.Data := Pointer(0);
trvDirectories.TopItem := HomeNode;
HomeNode.Expand(False);
HomeNode.Data := Pointer(1);
end;
eStr.Free;
// ... scan for directories in home dir ...
if Assigned(CurNode) then
CurNode.Expand(False);
trvDirectories.TopItem := HomeNode;
except
on E: Exception do begin
Screen.Cursor := crDefault;
@ -749,11 +801,11 @@ procedure TfrmMain.FormCreate(Sender: TObject);
begin
if LowerCase(ParamStr(1)) = '-logftp' then begin
MessageBox(Handle, 'FTP installation will be logged to FTP.log!', PChar(Application.Title), MB_ICONINFORMATION);
IdLogFile.Filename := ExtractFilePath(ParamStr(0)) + 'FTP.log';
IdLogFile.Filename := ExtractFilePath(Application.ExeName) + 'FTP.log';
IdLogFile.Active := True;
end;
if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'files') then begin
if not DirectoryExists(ExtractFilePath(Application.ExeName) + 'files') then begin
MessageBox(Handle, 'The files-folder couldn''t be found. Run the Pre-Installer of AMX Mod X and try again.', 'Error', MB_ICONERROR);
Application.Terminate;
end
@ -764,8 +816,8 @@ begin
end;
// delete files, then directories
if (DirectoryExists(ExtractFilePath(ParamStr(0)) + 'temp')) then
DelTree(ExtractFilePath(ParamStr(0)) + 'temp');
if (DirectoryExists(ExtractFilePath(Application.ExeName) + 'temp')) then
DelTree(ExtractFilePath(Application.ExeName) + 'temp');
end;
procedure TfrmMain.cmdProxySettingsClick(Sender: TObject);
@ -807,42 +859,60 @@ end;
procedure TfrmMain.trvDirectoriesExpanded(Sender: TObject;
Node: TTreeNode);
function NodeExists(const SNode: TTreeNode; const Text: String): Boolean;
var i: integer;
begin
Result := False;
for i := 0 to SNode.Count -1 do begin
if (SNode.Item[i].Text = Text) then begin
Result := True;
break;
end;
end;
end;
var ePath: String;
CurNode: TTreeNode;
i: integer;
begin
if Node.Item[0].Text = 'Scanning...' then begin // no directories added yet
if (Integer(Node.Data) <> 0) then begin // no directories added yet
Screen.Cursor := crHourGlass;
// get complete path
ePath := '/';
CurNode := Node;
if (Assigned(CurNode)) then begin
repeat
ePath := '/' + CurNode.Text + ePath;
CurNode := CurNode.Parent;
until (not Assigned(CurNode));
end;
// change dir and add directories in it
try
Repaint;
IdFTP.ChangeDir(ePath);
with GetAllDirs do begin
if (Integer(Node.Data) = 2) and (Node.Count > 0) then
Node.Item[0].Free;
for i := 0 to Count -1 do begin
trvDirectories.Items.AddChild(trvDirectories.Items.AddChild(Node, Strings[i]), 'Scanning...');
if (not NodeExists(Node, Strings[i])) then begin
CurNode := trvDirectories.Items.AddChild(Node, Strings[i]);
trvDirectories.Items.AddChild(CurNode, 'Scanning...');
CurNode.Data := Pointer(2);
end;
end;
Free;
end;
finally
except
if (Integer(Node.Data) = 2) and (Node.Count > 0) then
Node.Item[0].Free;
Application.ProcessMessages;
end;
Node.Data := Pointer(0); // scan done
Screen.Cursor := crDefault;
end;
end;
procedure TfrmMain.trvDirectoriesChange(Sender: TObject; Node: TTreeNode);
begin
cmdNext.Enabled := Assigned(trvDirectories.Selected);
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
FileList.Free;
@ -881,8 +951,8 @@ begin
end;
end;
if (DirectoryExists(ExtractFilePath(ParamStr(0)) + 'temp')) then
DelTree(ExtractFilePath(ParamStr(0)) + 'temp');
if (DirectoryExists(ExtractFilePath(Application.ExeName) + 'temp')) then
DelTree(ExtractFilePath(Application.ExeName) + 'temp');
end;
procedure TfrmMain.ExceptionHandler(Sender: TObject; E: Exception);
@ -936,4 +1006,21 @@ begin
cmdNext.Enabled := (Assigned(trvMods.Selected));
end;
procedure TfrmMain.trvDirectoriesMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var Node: TTreeNode;
begin
Node := trvDirectories.GetNodeAt(X, Y);
if (Assigned(Node)) then begin
if (Node.DisplayRect(True).Right < X) then
trvDirectories.Selected := nil;
end;
end;
procedure TfrmMain.trvDirectoriesChange(Sender: TObject; Node: TTreeNode);
begin
if (Screen.Cursor <> crHourGlass) and (Assigned(Node)) and (Integer(Node.Data) = 1) then
Node.Expand(False);
end;
end.

View File

@ -141,7 +141,7 @@ public addadminfn(id, level, cid)
if (equali(t_arg, "name"))
idtype |= ADMIN_LOOKUP
} else {
console_print(id, "[%s] Unknown idtype ^"%s^", use one of: steamid, ip, name", PLUGINNAME, t_arg)
console_print(id, "[%s] Unknown id type ^"%s^", use one of: steamid, ip, name", PLUGINNAME, t_arg)
return PLUGIN_HANDLED
}
}
@ -460,7 +460,7 @@ public adminSql()
new qcolAccess = SQL_FieldNameToNum(query, "access")
new qcolFlags = SQL_FieldNameToNum(query, "flags")
while (SQL_MoreResults(query))
while ((g_aNum < MAX_ADMINS) && (SQL_MoreResults(query)))
{
SQL_ReadResult(query, qcolAuth, g_aName[g_aNum], 31)
SQL_ReadResult(query, qcolPass, g_aPassword[g_aNum], 31)
@ -574,13 +574,13 @@ getAccess(id, name[], authid[], ip[], password[])
} else {
if (g_aFlags[i] & FLAG_TAG)
{
if (contain(name, g_aName[i]) != -1)
if (containi(name, g_aName[i]) != -1)
{
index = i
break
}
}
else if (equal(name, g_aName[i]))
else if (equali(name, g_aName[i]))
{
index = i
break
@ -652,9 +652,13 @@ accessUser(id, name[] = "")
get_user_authid(id, userauthid, 31)
if (name[0])
{
copy(username, 31, name)
}
else
{
get_user_name(id, username, 31)
}
get_cvar_string("amx_password_field", passfield, 31)
get_user_info(id, passfield, password, 31)
@ -662,7 +666,9 @@ accessUser(id, name[] = "")
new result = getAccess(id, username, userauthid, userip, password)
if (result & 1)
{
client_cmd(id, "echo ^"* %L^"", id, "INV_PAS")
}
if (result & 2)
{
@ -671,10 +677,14 @@ accessUser(id, name[] = "")
}
if (result & 4)
{
client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC")
}
if (result & 8)
{
client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET")
}
return PLUGIN_CONTINUE
}
@ -682,15 +692,19 @@ accessUser(id, name[] = "")
public client_infochanged(id)
{
if (!is_user_connected(id) || !get_cvar_num("amx_mode"))
{
return PLUGIN_CONTINUE
}
new newname[32], oldname[32]
get_user_name(id, oldname, 31)
get_user_info(id, "name", newname, 31)
if (!equal(newname, oldname))
if (!equali(newname, oldname))
{
accessUser(id, newname)
}
return PLUGIN_CONTINUE
}

View File

@ -60,22 +60,28 @@ public plugin_init()
public cmdSayChat(id)
{
if (!access(id, ADMIN_CHAT))
{
return PLUGIN_CONTINUE
}
new said[6], i = 0
read_argv(1, said, 5)
while (said[i] == '@')
{
i++
}
if (!i || i > 3)
{
return PLUGIN_CONTINUE
}
new message[192], a = 0
read_args(message, 191)
remove_quotes(message)
switch(said[i])
switch (said[i])
{
case 'r': a = 1
case 'g': a = 2
@ -86,17 +92,32 @@ public cmdSayChat(id)
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
get_user_authid(id, authid, 31)
get_user_name(id, name, 31)
userid = get_user_userid(id)
log_amx("Chat: ^"%s<%d><%s><>^" tsay ^"%s^"", name, userid, authid, message[i + 1])
log_message("^"%s<%d><%s><>^" triggered ^"amx_tsay^" (text ^"%s^") (color ^"%L^")", name, userid, authid, message[i + 1], "en", g_Colors[a])
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 + n], "en", g_Colors[a])
if (++g_msgChannel > 6 || g_msgChannel < 3)
{
g_msgChannel = 3
}
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)
{
show_hudmessage(0, "%s : %s", name, message[i + 1])
client_print(0, print_notify, "%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 + n])
} else {
show_hudmessage(0, "%s", message[i + 1])
client_print(0, print_notify, "%s", message[i + 1])
show_hudmessage(0, "%s", message[i + n])
client_print(0, print_notify, "%s", message[i + n])
}
return PLUGIN_HANDLED
@ -215,6 +236,8 @@ public cmdPsay(id, level, cid)
if (!priv)
return PLUGIN_HANDLED
get_user_name(priv, name, 31);
new length = strlen(name) + 1
new message[192], name2[32], authid[32], authid2[32], userid, userid2

View File

@ -53,7 +53,7 @@ public plugin_init()
register_concmd("amx_kick", "cmdKick", ADMIN_KICK, "<name or #userid> [reason]")
register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<name or #userid> <minutes> [reason]")
register_concmd("amx_banip", "cmdBanIP", ADMIN_BAN, "<name or #userid> <minutes> [reason]")
register_concmd("amx_addban", "cmdAddBan", ADMIN_BAN, "<authid or ip> <minutes> [reason]")
register_concmd("amx_addban", "cmdAddBan", ADMIN_RCON, "<authid or ip> <minutes> [reason]")
register_concmd("amx_unban", "cmdUnban", ADMIN_BAN, "<authid or ip>")
register_concmd("amx_slay", "cmdSlay", ADMIN_SLAY, "<name or #userid>")
register_concmd("amx_slap", "cmdSlap", ADMIN_SLAY, "<name or #userid> [power]")
@ -571,7 +571,7 @@ public cmdPlugins(id, level, cid)
get_plugin(i, filename, 31, name, 31, version, 31, author, 31, status, 31)
console_print(id, "%-18.17s %-8.7s %-17.16s %-16.15s %-9.8s", name, version, author, filename, status)
if (equal(status, "running"))
if (status[0]=='d' || status[0]=='r') // "debug" or "running"
running++
}
console_print(id, "%L", id, "PLUGINS_RUN", num, running)

View File

@ -21,6 +21,11 @@ new g_FwdKeyValue
new g_PlayerModels[33][64]
new g_PlayerModeled[33]
/* User Messages */
new g_msgDamage
new g_msgDeathMsg
new g_msgScoreInfo
new g_LastTrace = 0
VexdUM_Register()
@ -40,17 +45,22 @@ VexdUM_Register()
register_forward(FM_ClientUserInfoChanged, "Hook_ClientUserInfoChanged")
/* Global Forwards */
g_FwdTouch = CreateMultiForward("entity_touch", ET_STOP, FP_CELL, FP_CELL)
g_FwdThink = CreateMultiForward("entity_think", ET_STOP, FP_CELL)
g_FwdSpawn = CreateMultiForward("entity_spawn", ET_STOP, FP_CELL)
g_FwdClientPreThink = CreateMultiForward("client_prethink", ET_IGNORE, FP_CELL)
g_FwdClientPostThink = CreateMultiForward("client_postthink", ET_IGNORE, FP_CELL)
g_FwdEmitSound = CreateMultiForward("emitsound", ET_STOP, FP_CELL, FP_STRING)
g_FwdEmitAmbientSound = CreateMultiForward("emitambientsound", ET_STOP, FP_CELL, FP_STRING)
g_FwdSetModel = CreateMultiForward("set_model", ET_STOP, FP_CELL, FP_STRING)
g_FwdTraceLine = CreateMultiForward("traceline", ET_STOP, FP_CELL)
g_FwdSetCliKeyValue = CreateMultiForward("setclientkeyvalue", ET_STOP, FP_CELL, FP_STRING, FP_STRING)
g_FwdKeyValue = CreateMultiForward("keyvalue", ET_STOP, FP_CELL)
g_FwdTouch = CreateMultiForwardEx("entity_touch", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_CELL)
g_FwdThink = CreateMultiForwardEx("entity_think", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
g_FwdSpawn = CreateMultiForwardEx("entity_spawn", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
g_FwdClientPreThink = CreateMultiForwardEx("client_prethink", ET_IGNORE, FORWARD_ONLY_OLD, FP_CELL)
g_FwdClientPostThink = CreateMultiForwardEx("client_postthink", ET_IGNORE, FORWARD_ONLY_OLD, FP_CELL)
g_FwdEmitSound = CreateMultiForwardEx("emitsound", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
g_FwdEmitAmbientSound = CreateMultiForwardEx("emitambientsound", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
g_FwdSetModel = CreateMultiForwardEx("set_model", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
g_FwdTraceLine = CreateMultiForwardEx("traceline", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
g_FwdSetCliKeyValue = CreateMultiForwardEx("setclientkeyvalue", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING, FP_STRING)
g_FwdKeyValue = CreateMultiForwardEx("keyvalue", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
/* User Messages */
g_msgDamage = get_user_msgid("Damage")
g_msgDeathMsg = get_user_msgid("DeathMsg")
g_msgScoreInfo = get_user_msgid("ScoreInfo")
}
VexdUM_Natives()
@ -73,6 +83,9 @@ VexdUM_Natives()
register_native("get_maxentities", "__get_maxentities")
register_native("PointContents", "__PointContents")
register_native("DispatchKeyValue", "__DispatchKeyValue")
register_native("entity_use","__entity_use")
register_native("get_num_ents","__get_num_ents")
register_native("take_damage","__take_damage")
if (g_ModType == MOD_CSTRIKE)
{
@ -102,6 +115,90 @@ GetClientKeyValue(id, const key[], value[], maxlen)
engfunc(EngFunc_InfoKeyValue, buffer, key, value, maxlen)
}
Death(victim, killer, weapon[64], hs)
{
if(pev(victim,pev_takedamage) > DAMAGE_NO)
{
new inflictor = pev(killer,pev_owner)
if(pev(killer,pev_flags) & (FL_CLIENT | FL_FAKECLIENT))
{
if(equal(weapon,""))
{
pev(killer,pev_viewmodel2,weapon,63)
replace(weapon,63,"models/v_","")
weapon[strlen(weapon) - 4] = '^0'
}
}
else if(inflictor > 0 && inflictor < get_maxplayers())
{
if(equal(weapon,""))
{
pev(killer,pev_viewmodel2,weapon,63)
replace(weapon,63,"weapon_","")
replace(weapon,63,"monster_","")
replace(weapon,63,"func_","")
}
if(inflictor == victim)
{
killer = victim
} else {
killer = inflictor
}
}
message_begin(MSG_ALL,g_msgDeathMsg)
write_byte(killer)
write_byte(victim)
write_byte(hs)
write_string(weapon)
message_end()
new vname[32],vauthid[32],vteam[32]
get_user_name(victim,vname,31)
get_user_authid(victim,vauthid,31)
get_user_team(victim,vteam,31)
if(victim == killer)
{
log_message("^"%s<%i><%s><%s>^" killed self with ^"%s^"^n",vname,get_user_userid(victim),
vauthid,vteam,weapon)
}
else if(pev(killer,pev_flags) & (FL_CLIENT | FL_FAKECLIENT))
{
new kname[32],kauthid[32],kteam[32],team
get_user_name(killer,kname,31)
get_user_authid(killer,kauthid,31)
team = get_user_team(killer,kteam,31)
log_message("^"%s<%i><%s><%s>^" killed ^"%s<%i><%s><%s>^" with ^"%s^"^n",kname,get_user_userid(killer),
kauthid,kteam,vname,get_user_userid(victim),vauthid,vteam,weapon)
new Float:frags
pev(killer,pev_frags,frags)
set_pev(killer,pev_frags,frags+1.0)
message_begin(MSG_ALL,g_msgScoreInfo)
write_byte(killer)
write_short(floatround(frags))
write_short(get_user_deaths(killer))
write_short(0)
write_short(team)
message_end()
pev(victim,pev_frags,frags)
set_pev(victim,pev_frags,frags+1.0)
} else {
log_message("^"%s<%i><%s><%s>^" killed by ^"%s^"^n",vname,get_user_userid(victim),vauthid,vteam,weapon)
}
set_msg_block(g_msgDeathMsg,BLOCK_ONCE)
dllfunc(DLLFunc_ClientKill,victim)
}
}
public __is_entity(plid, num)
{
new ent = get_param(1)
@ -440,6 +537,57 @@ public __DispatchKeyValue(plid, num)
return 1
}
public __entity_use(plid, num)
{
new entUsed = get_param(1)
new entOther = get_param(2)
return dllfunc(DLLFunc_Use,entUsed,entOther)
}
public __get_num_ents(plid, num)
{
return engfunc(EngFunc_NumberOfEntities)
}
public __take_damage(plid, num)
{
new victim = get_param(1)
new attacker = get_param(2)
new Float:orig[3]
get_array_f(3,orig,3)
new Float:dmg = get_param_f(4)
new bit = get_param(5)
new wpnName[64]
get_string(6,wpnName,63)
new hs = get_param(7)
if(pev(victim,pev_takedamage) > DAMAGE_NO)
{
set_pev(victim,pev_dmg_inflictor,attacker)
new Float:olddmg
pev(victim,pev_dmg_take,olddmg)
set_pev(victim,pev_dmg_take,olddmg+dmg)
message_begin(MSG_ONE, g_msgDamage, {0,0,0} , victim)
write_byte(0)
write_byte(floatround(olddmg+dmg))
write_long(bit)
write_coord(floatround(orig[0]))
write_coord(floatround(orig[1]))
write_coord(floatround(orig[2]))
message_end()
new Float:health
pev(victim,pev_health,health)
if((dmg >= health) && (health > 0.0))
{
Death(victim,attacker,wpnName,hs)
} else {
set_pev(victim,pev_health,health-dmg)
}
}
}
/*********************************
***** HOOKS *********************

Some files were not shown because too many files have changed in this diff Show More