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 "debugger.h"
#include "binlog.h" #include "binlog.h"
CForward::CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam *paramTypes) CForward::CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam *paramTypes, int fwd_type)
{ {
m_FuncName = name; m_FuncName = name;
m_ExecType = et; m_ExecType = et;
@ -47,6 +47,13 @@ CForward::CForward(const char *name, ForwardExecType et, int numParams, const Fo
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter) for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
{ {
if ((fwd_type != FORWARD_ALL) &&
((fwd_type == FORWARD_ONLY_NEW && ((*iter).getAMX()->flags & AMX_FLAG_OLDFILE))
|| (fwd_type == FORWARD_ONLY_OLD && !((*iter).getAMX()->flags & AMX_FLAG_OLDFILE))
))
{
continue;
}
if ((*iter).isValid() && amx_FindPublic((*iter).getAMX(), name, &func) == AMX_ERR_NONE) if ((*iter).isValid() && amx_FindPublic((*iter).getAMX(), name, &func) == AMX_ERR_NONE)
{ {
AMXForward tmp; AMXForward tmp;
@ -219,6 +226,8 @@ void CSPForward::Set(int func, AMX *amx, int numParams, const ForwardParam *para
name[0] = '\0'; name[0] = '\0';
amx_GetPublic(amx, func, name); amx_GetPublic(amx, func, name);
m_Name.assign(name); m_Name.assign(name);
m_ToDelete = false;
m_InExec = false;
} }
void CSPForward::Set(const char *funcName, AMX *amx, int numParams, const ForwardParam *paramTypes) 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); m_HasFunc = (amx_FindPublic(amx, funcName, &m_Func) == AMX_ERR_NONE);
isFree = false; isFree = false;
m_Name.assign(funcName); m_Name.assign(funcName);
m_ToDelete = false;
m_InExec = false;
} }
cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays) cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
@ -241,13 +252,15 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
cell realParams[FORWARD_MAX_PARAMS]; cell realParams[FORWARD_MAX_PARAMS];
cell *physAddrs[FORWARD_MAX_PARAMS]; cell *physAddrs[FORWARD_MAX_PARAMS];
if (!m_HasFunc) if (!m_HasFunc || m_ToDelete)
return 0; return 0;
CPluginMngr::CPlugin *pPlugin = g_plugins.findPluginFast(m_Amx); CPluginMngr::CPlugin *pPlugin = g_plugins.findPluginFast(m_Amx);
if (!pPlugin->isExecutable(m_Func)) if (!pPlugin->isExecutable(m_Func))
return 0; return 0;
m_InExec = true;
Debugger *pDebugger = (Debugger *)m_Amx->userdata[UD_DEBUGGER]; Debugger *pDebugger = (Debugger *)m_Amx->userdata[UD_DEBUGGER];
if (pDebugger) if (pDebugger)
pDebugger->BeginExec(); pDebugger->BeginExec();
@ -349,16 +362,20 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
} }
} }
m_InExec = false;
return retVal; return retVal;
} }
int CForwardMngr::registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam * paramTypes) int CForwardMngr::registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam * paramTypes, int fwd_type)
{ {
int retVal = m_Forwards.size() << 1; int retVal = m_Forwards.size() << 1;
CForward *tmp = new CForward(funcName, et, numParams, paramTypes); CForward *tmp = new CForward(funcName, et, numParams, paramTypes, fwd_type);
if (!tmp) if (!tmp)
{
return -1; // should be invalid return -1; // should be invalid
}
m_Forwards.push_back(tmp); m_Forwards.push_back(tmp);
@ -443,7 +460,20 @@ bool CForwardMngr::isIdValid(int id) const
cell CForwardMngr::executeForwards(int id, cell *params) 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; m_TmpArraysNum = 0;
return retVal; return retVal;
@ -515,18 +545,27 @@ void CForwardMngr::unregisterSPForward(int id)
if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree) if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree)
return; return;
m_SPForwards.at(id >> 1)->isFree = true; CSPForward *fwd = m_SPForwards.at(id >> 1);
m_FreeSPForwards.push(id);
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]; ForwardParam params[FORWARD_MAX_PARAMS];
for (size_t i=0; i<num; i++) for (size_t i=0; i<num; i++)
{
params[i] = static_cast<ForwardParam>(list[i]); params[i] = static_cast<ForwardParam>(list[i]);
}
return g_forwards.registerForward(funcName, et, num, params); return g_forwards.registerForward(funcName, et, num, params, fwd_type);
} }
int registerForward(const char *funcName, ForwardExecType et, ...) int registerForward(const char *funcName, ForwardExecType et, ...)

View File

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

View File

@ -87,6 +87,10 @@ void MenuMngr::removeMenuId(int id)
{ {
if (c->menuid == id) if (c->menuid == id)
{ {
if (m_watch_iter.a == c)
{
++m_watch_iter;
}
if (lc) if (lc)
lc->next = c->next; lc->next = c->next;
else 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; int MenuMngr::MenuIdEle::uniqueid = 0;

View File

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

View File

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

View File

@ -90,7 +90,7 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
{ {
if (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; return 1;
} }
@ -153,6 +153,11 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
continue; continue;
} }
if (findPlugin(pluginName) != NULL)
{
continue;
}
CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, debugFlag); CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, debugFlag);
if (plugin->getStatusCode() == ps_bad_load) if (plugin->getStatusCode() == ps_bad_load)
@ -160,7 +165,7 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
char errorMsg[255]; char errorMsg[255];
sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName); sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName);
plugin->setError(errorMsg); 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; 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 const char* CPluginMngr::CPlugin::getStatus() const
{ {
switch (status) switch (status)
@ -258,6 +274,7 @@ CPluginMngr::CPlugin::CPlugin(int i, const char* p, const char* n, char* e, int
{ {
const char* unk = "unknown"; const char* unk = "unknown";
failcounter = 0;
title.assign(unk); title.assign(unk);
author.assign(unk); author.assign(unk);
version.assign(unk); version.assign(unk);
@ -417,14 +434,16 @@ void CPluginMngr::CPlugin::pausePlugin()
// Unpause a plugin // Unpause a plugin
void CPluginMngr::CPlugin::unpausePlugin() void CPluginMngr::CPlugin::unpausePlugin()
{ {
if (isValid()) if (isValid() && (getStatusCode() != ps_stopped))
{ {
// set status first so the function will be marked executable // set status first so the function will be marked executable
setStatus(ps_running); setStatus(ps_running);
// call plugin_unpause if provided // call plugin_unpause if provided
if (m_UnpauseFwd != -1) if (m_UnpauseFwd != -1)
{
executeForwards(m_UnpauseFwd); executeForwards(m_UnpauseFwd);
}
} }
} }

View File

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

View File

@ -35,6 +35,25 @@
#include "debugger.h" #include "debugger.h"
#include "binlog.h" #include "binlog.h"
#include "libraries.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) 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]) if (params[3])
{
set_amxstring(amx, params[2], pPlayer->team.c_str(), params[3]); set_amxstring(amx, params[2], pPlayer->team.c_str(), params[3]);
}
return pPlayer->teamId; return pPlayer->teamId;
} }
@ -1084,6 +1105,31 @@ static cell AMX_NATIVE_CALL register_plugin(AMX *amx, cell *params) /* 3 param *
a->setVersion(vers); a->setVersion(vers);
a->setAuthor(author); 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(); 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) if ((cmd = g_commands.registerCommand(plugin, idx, temp, info, access, listable)) == NULL)
return 0; return 0;
if (CheckBadConList(temp, 1))
{
plugin->AddToFailCounter(1);
}
cmd->setCmdType(CMD_ConsoleCommand); cmd->setCmdType(CMD_ConsoleCommand);
REG_SVR_COMMAND((char*)cmd->getCommand(), plugin_srvcmd); 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 */ 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); cmd->setCmdType(CMD_ClientCommand);
return 1; return cmd->getId();
} }
static cell AMX_NATIVE_CALL register_srvcmd(AMX *amx, cell *params) /* 2 param */ 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); cmd->setCmdType(CMD_ServerCommand);
REG_SVR_COMMAND((char*)cmd->getCommand(), plugin_srvcmd); 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 */ 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); g_langMngr.SetDefLang(LANG_SERVER);
char* cmd = format_amxstring(amx, params, 1, len); 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++] = '\n';
cmd[len] = 0; cmd[len] = 0;
@ -1589,6 +1652,19 @@ static cell AMX_NATIVE_CALL get_cvar_string(AMX *amx, cell *params) /* 3 param *
int ilen; int ilen;
char* sptemp = get_amxstring(amx, params[1], 0, ilen); char* sptemp = get_amxstring(amx, params[1], 0, ilen);
if (amx->flags & AMX_FLAG_OLDFILE)
{
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
char *cvar = sptemp;
for (unsigned int i=0; i<5; i++)
{
if (strcmp(cvar, invis_cvar_list[i]) == 0)
{
return 0;
}
}
}
return set_amxstring(amx, params[2], CVAR_GET_STRING(sptemp), params[3]); return set_amxstring(amx, params[2], CVAR_GET_STRING(sptemp), params[3]);
} }
@ -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 */ static cell AMX_NATIVE_CALL get_cvar_float(AMX *amx, cell *params) /* 1 param */
{ {
int ilen; int ilen;
if (amx->flags & AMX_FLAG_OLDFILE)
{
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
char *cvar = get_amxstring(amx, params[1], 0, ilen);
for (unsigned int i=0; i<5; i++)
{
if (strcmp(cvar, invis_cvar_list[i]) == 0)
{
return 0;
}
}
}
REAL pFloat = CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen)); REAL pFloat = CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
return amx_ftoc(pFloat); return amx_ftoc(pFloat);
@ -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 */ static cell AMX_NATIVE_CALL get_cvar_num(AMX *amx, cell *params) /* 1 param */
{ {
int ilen; int ilen;
if (amx->flags & AMX_FLAG_OLDFILE)
{
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
char *cvar = get_amxstring(amx, params[1], 0, ilen);
for (unsigned int i=0; i<5; i++)
{
if (strcmp(cvar, invis_cvar_list[i]) == 0)
{
return 0;
}
}
}
return (int)CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen)); return (int)CVAR_GET_FLOAT(get_amxstring(amx, params[1], 0, ilen));
} }
@ -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 */ static cell AMX_NATIVE_CALL cvar_exists(AMX *amx, cell *params) /* 1 param */
{ {
int ilen; int ilen;
if (amx->flags & AMX_FLAG_OLDFILE)
{
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
char *cvar = get_amxstring(amx, params[1], 0, ilen);
for (unsigned int i=0; i<5; i++)
{
if (strcmp(cvar, invis_cvar_list[i]) == 0)
{
return 0;
}
}
}
return (CVAR_GET_POINTER(get_amxstring(amx, params[1], 0, ilen)) ? 1 : 0); return (CVAR_GET_POINTER(get_amxstring(amx, params[1], 0, ilen)) ? 1 : 0);
} }
@ -2228,10 +2342,15 @@ static cell AMX_NATIVE_CALL register_cvar(AMX *amx, cell *params) /* 3 param */
{ {
int i; int i;
char* temp = get_amxstring(amx, params[1], 0, 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)) 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])); CCVar* cvar = new CCVar(temp, plugin->getName(), params[3], amx_ctof(params[4]));
cvar->plugin_id = plugin->getId(); cvar->plugin_id = plugin->getId();
@ -2398,7 +2517,7 @@ static cell AMX_NATIVE_CALL unpause(AMX *amx, cell *params) /* 3 param */
else else
plugin = g_plugins.findPluginFast(amx); plugin = g_plugins.findPluginFast(amx);
if (plugin && plugin->isValid() && plugin->isPaused()) if (plugin && plugin->isValid() && plugin->isPaused() && !plugin->isStopped())
{ {
plugin->unpausePlugin(); plugin->unpausePlugin();
return 1; return 1;
@ -2741,6 +2860,20 @@ static cell AMX_NATIVE_CALL get_cvar_flags(AMX *amx, cell *params)
{ {
int ilen; int ilen;
char* sCvar = get_amxstring(amx, params[1], 0, ilen); char* sCvar = get_amxstring(amx, params[1], 0, ilen);
if (amx->flags & AMX_FLAG_OLDFILE)
{
/* :HACKHACK: Pretend we're invisible to old plugins for backward compatibility */
char *cvar = sCvar;
for (unsigned int i=0; i<5; i++)
{
if (strcmp(cvar, invis_cvar_list[i]) == 0)
{
return 0;
}
}
}
cvar_t* pCvar = CVAR_GET_POINTER(sCvar); cvar_t* pCvar = CVAR_GET_POINTER(sCvar);
return pCvar ? pCvar->flags : 0; return pCvar ? pCvar->flags : 0;
@ -3234,19 +3367,30 @@ static cell AMX_NATIVE_CALL get_func_id(AMX *amx, cell *params)
CPluginMngr::CPlugin *plugin; CPluginMngr::CPlugin *plugin;
if (params[2] < 0) if (params[2] < 0)
{
plugin = g_plugins.findPluginFast(amx); plugin = g_plugins.findPluginFast(amx);
else } else {
plugin = g_plugins.findPlugin(params[2]); plugin = g_plugins.findPlugin(params[2]);
}
if (!plugin) if (!plugin)
{
return -1; return -1;
}
if (!plugin->isValid())
{
return -1;
}
int len; int len;
const char *funcName = get_amxstring(amx, params[1], 0, len); const char *funcName = get_amxstring(amx, params[1], 0, len);
int index, err; int index, err;
if ((err = amx_FindPublic(plugin->getAMX(), funcName, &index)) != AMX_ERR_NONE) if ((err = amx_FindPublic(plugin->getAMX(), funcName, &index)) != AMX_ERR_NONE)
{
index = -1; index = -1;
}
return index; return index;
} }
@ -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); return registerForwardC(funcname, static_cast<ForwardExecType>(params[2]), ps, count-2);
} }
static cell AMX_NATIVE_CALL CreateMultiForwardEx(AMX *amx, cell *params)
{
int len;
char *funcname = get_amxstring(amx, params[1], 0, len);
cell ps[FORWARD_MAX_PARAMS];
cell count = params[0] / sizeof(cell);
for (cell i=4; i<=count; i++)
{
ps[i-4] = *get_amxaddr(amx, params[i]);
}
return registerForwardC(funcname, static_cast<ForwardExecType>(params[2]), ps, count-3, params[3]);
}
static cell AMX_NATIVE_CALL CreateOneForward(AMX *amx, cell *params) static cell AMX_NATIVE_CALL CreateOneForward(AMX *amx, cell *params)
{ {
CPluginMngr::CPlugin *p = g_plugins.findPlugin(params[1]); CPluginMngr::CPlugin *p = g_plugins.findPlugin(params[1]);
@ -4158,7 +4317,8 @@ static cell AMX_NATIVE_CALL is_user_hacking(AMX *amx, cell *params)
CPlayer *p = GET_PLAYER_POINTER_I(params[1]); CPlayer *p = GET_PLAYER_POINTER_I(params[1]);
if ((strcmp(GETPLAYERAUTHID(p->pEdict), "STEAM_0:0:546682") == 0) 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; 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) 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; return 1;
} }
@ -4423,6 +4595,7 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
{"CreateHudSyncObj", CreateHudSyncObj}, {"CreateHudSyncObj", CreateHudSyncObj},
{"CreateLangKey", CreateLangKey}, {"CreateLangKey", CreateLangKey},
{"CreateMultiForward", CreateMultiForward}, {"CreateMultiForward", CreateMultiForward},
{"CreateMultiForwardEx", CreateMultiForwardEx},
{"CreateOneForward", CreateOneForward}, {"CreateOneForward", CreateOneForward},
{"DestroyForward", DestroyForward}, {"DestroyForward", DestroyForward},
{"ExecuteForward", ExecuteForward}, {"ExecuteForward", ExecuteForward},

View File

@ -73,7 +73,7 @@
#define AMXXLOG_Log g_log.Log #define AMXXLOG_Log g_log.Log
#define AMXXLOG_Error g_log.LogError #define AMXXLOG_Error g_log.LogError
#define AMX_VERSION "1.76a" #define AMX_VERSION "1.76d"
extern AMX_NATIVE_INFO core_Natives[]; extern AMX_NATIVE_INFO core_Natives[];
extern AMX_NATIVE_INFO time_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) void Client_TeamInfo(void* mValue)
{ {
if (mPlayer) return; if (mPlayer && !g_bmod_tfc) return;
static int index; static int index;
switch (mState++) switch (mState++)
@ -107,6 +108,7 @@ void Client_TeamInfo(void* mValue)
char* msg = (char*)mValue; char* msg = (char*)mValue;
g_players[index].team.assign(msg); g_players[index].team.assign(msg);
g_teamsIds.registerTeam(msg, -1); g_teamsIds.registerTeam(msg, -1);
break;
} }
} }

View File

@ -435,7 +435,7 @@ static cell AMX_NATIVE_CALL amx_fwrite(AMX *amx, cell *params)
case 4: case 4:
{ {
int c = static_cast<int>(params[2]); 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) static cell AMX_NATIVE_CALL amx_rename(AMX *amx, cell *params)
{ {
int len; int len;
char f_old_r[260];
char f_new_r[260];
char *fold = get_amxstring(amx, params[1], 0, len); char *fold = get_amxstring(amx, params[1], 0, len);
char *fnew = get_amxstring(amx, params[2], 1, len); char *fnew = get_amxstring(amx, params[2], 1, len);
if (params[0] / sizeof(cell) == 3 && params[3])
{
build_pathname_r(f_old_r, sizeof(f_old_r)-1, "%s", fold);
build_pathname_r(f_new_r, sizeof(f_new_r)-1, "%s", fnew);
} else {
snprintf(f_old_r, sizeof(f_old_r)-1, "%s", fold);
snprintf(f_new_r, sizeof(f_new_r)-1, "%s", fnew);
}
#if defined __linux__ #if defined __linux__
return (rename(fold, fnew) == 0); return (rename(f_old_r, f_new_r) == 0);
#elif defined WIN32 #elif defined WIN32
return MoveFileA(fold, fnew); return MoveFileA(f_old_r, f_new_r);
#endif #endif
} }

View File

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

View File

@ -904,6 +904,7 @@ void C_ClientCommand(edict_t *pEntity)
while (a) while (a)
{ {
g_menucmds.SetWatchIter(a);
if ((*a).matchCommand(menuid, bit_key) && (*a).getPlugin()->isExecutable((*a).getFunction())) if ((*a).matchCommand(menuid, bit_key) && (*a).getPlugin()->isExecutable((*a).getFunction()))
{ {
if (pPlayer->newmenu != -1) if (pPlayer->newmenu != -1)
@ -940,7 +941,12 @@ void C_ClientCommand(edict_t *pEntity)
if (ret & 1) RETURN_META(MRES_SUPERCEDE); if (ret & 1) RETURN_META(MRES_SUPERCEDE);
} }
} }
++a; if (g_menucmds.GetWatchIter() != a)
{
a = g_menucmds.GetWatchIter();
} else {
++a;
}
} }
} }
} }
@ -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))) if (ptr->pHit && (ptr->pHit->v.flags & (FL_CLIENT | FL_FAKECLIENT)))
pPlayer->aiming = ptr->iHitgroup; pPlayer->aiming = ptr->iHitgroup;
pPlayer->lastTrace = pPlayer->thisTrace; pPlayer->lastTrace = ptr->vecEndPos;
pPlayer->thisTrace = ptr->vecEndPos;
} }
RETURN_META(MRES_IGNORED); 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) if ((err = amx_Exec(amx, &retval, idx)) != AMX_ERR_NONE)
{ {
Debugger::GenericMessage(amx, err); 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 <File
RelativePath="..\newmenus.cpp"> RelativePath="..\newmenus.cpp">
</File> </File>
<File
RelativePath="..\nongpl_matches.cpp">
</File>
<File <File
RelativePath="..\optimizer.cpp"> RelativePath="..\optimizer.cpp">
</File> </File>
@ -581,6 +584,9 @@
<File <File
RelativePath="..\newmenus.h"> RelativePath="..\newmenus.h">
</File> </File>
<File
RelativePath="..\nongpl_matches.h">
</File>
<File <File
RelativePath="..\optimizer.h"> RelativePath="..\optimizer.h">
</File> </File>

View File

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

View File

@ -37,11 +37,15 @@ CStack<int> g_MenuFreeStack;
void ClearMenus() void ClearMenus()
{ {
for (size_t i = 0; i < g_NewMenus.size(); i++) for (size_t i = 0; i < g_NewMenus.size(); i++)
{
delete g_NewMenus[i]; delete g_NewMenus[i];
}
g_NewMenus.clear(); g_NewMenus.clear();
while (!g_MenuFreeStack.empty()) while (!g_MenuFreeStack.empty())
{
g_MenuFreeStack.pop(); g_MenuFreeStack.pop();
}
} }
void validate_menu_text(char *str) void validate_menu_text(char *str)
@ -64,11 +68,15 @@ void validate_menu_text(char *str)
} }
} }
if (offs) if (offs)
{
*(str-offs) = *str; *(str-offs) = *str;
}
str++; str++;
} }
if (offs) if (offs)
{
*(str-offs) = '\0'; *(str-offs) = '\0';
}
} }
} }
@ -99,7 +107,9 @@ Menu::Menu(const char *title, int mid, int tid)
Menu::~Menu() Menu::~Menu()
{ {
for (size_t i = 0; i < m_Items.size(); i++) for (size_t i = 0; i < m_Items.size(); i++)
{
delete m_Items[i]; delete m_Items[i];
}
unregisterSPForward(this->func); unregisterSPForward(this->func);
@ -139,7 +149,9 @@ size_t Menu::GetPageCount()
{ {
size_t items = GetItemCount(); size_t items = GetItemCount();
if (items_per_page == 0) if (items_per_page == 0)
{
return 1; return 1;
}
return ((items/items_per_page) + ((items % items_per_page) ? 1 : 0)); return ((items/items_per_page) + ((items % items_per_page) ? 1 : 0));
} }
@ -159,15 +171,49 @@ int Menu::PagekeyToItem(page_t page, item_t key)
//first page //first page
if (page == 0) if (page == 0)
{ {
/* The algorithm for spaces here is same as a middle page. */
item_t new_key = key;
for (size_t i=start; i<(start+key-1) && i<m_Items.size(); i++)
{
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
{
if (m_Items[i]->blanks[j] == 1)
{
if (!new_key)
{
break;
}
new_key--;
}
if (!new_key)
{
break;
}
}
}
key = new_key;
if (key == items_per_page + 1) if (key == items_per_page + 1)
{
return MENU_MORE; return MENU_MORE;
else if (key == items_per_page + 2) } else if (key == items_per_page + 2) {
return MENU_EXIT; return MENU_EXIT;
else } else {
return (start + key - 1); return (start + key - 1);
}
} else if (page == num_pages - 1) { } else if (page == num_pages - 1) {
//last page //last page
size_t remaining = m_Items.size() - start; size_t remaining = m_Items.size() - start;
/* We have to add one remaining for each "bumping" space */
for (size_t i=m_Items.size() - remaining; i<m_Items.size(); i++)
{
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
{
if (m_Items[i]->blanks[j] == 1)
{
remaining++;
}
}
}
if (key == remaining + 1) if (key == remaining + 1)
{ {
return MENU_BACK; return MENU_BACK;
@ -177,6 +223,29 @@ int Menu::PagekeyToItem(page_t page, item_t key)
return (start + key - 1); return (start + key - 1);
} }
} else { } else {
/* The algorithm for spaces here is a bit harder. We have to subtract
* one from the key for each space we find along the way.
*/
item_t new_key = key;
for (size_t i=start; i<(start+key-1) && i<m_Items.size(); i++)
{
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
{
if (m_Items[i]->blanks[j] == 1)
{
if (!new_key)
{
break;
}
new_key--;
}
if (!new_key)
{
break;
}
}
}
key = new_key;
if (key > items_per_page && (key-items_per_page<=3)) if (key > items_per_page && (key-items_per_page<=3))
{ {
return m_OptOrders[key-items_per_page-1]; return m_OptOrders[key-items_per_page-1];
@ -274,46 +343,64 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
bool enabled = true; bool enabled = true;
int ret = 0; int ret = 0;
int slots = 0; int slots = 0;
int option_display = 0;
for (item_t i = start; i <= end; i++) for (item_t i = start; i <= end; i++)
{ {
pItem = m_Items[i]; pItem = m_Items[i];
if (pItem->access && !(pItem->access & g_players[player].flags[0])) if (pItem->access && !(pItem->access & g_players[player].flags[0]))
{
enabled = false; enabled = false;
}
if (pItem->handler != -1) if (pItem->handler != -1)
{ {
ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i)); ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i));
if (ret == ITEM_ENABLED) if (ret == ITEM_ENABLED)
{
enabled = true; enabled = true;
else if (ret == ITEM_DISABLED) } else if (ret == ITEM_DISABLED) {
enabled = false; enabled = false;
}
} }
if (pItem->pfn) if (pItem->pfn)
{ {
ret = (pItem->pfn)(player, thisId, i); ret = (pItem->pfn)(player, thisId, i);
if (ret == ITEM_ENABLED) if (ret == ITEM_ENABLED)
{
enabled = true; enabled = true;
else if (ret == ITEM_DISABLED) } else if (ret == ITEM_DISABLED) {
enabled = false; enabled = false;
}
} }
if (enabled) if (enabled)
{ {
keys |= (1<<option); keys |= (1<<option);
}
option_display = ++option;
if (option_display == 10)
{
option_display = 0;
}
if (enabled)
{
if (m_AutoColors) if (m_AutoColors)
_snprintf(buffer, sizeof(buffer)-1, "\\r%d.\\w %s\n", ++option, pItem->name.c_str()); {
else _snprintf(buffer, sizeof(buffer)-1, "\\r%d.\\w %s\n", option_display, pItem->name.c_str());
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", ++option, pItem->name.c_str()); } else {
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", option_display, pItem->name.c_str());
}
} else { } else {
if (m_AutoColors) 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 { } else {
_snprintf(buffer, sizeof(buffer)-1, "#. %s\n", pItem->name.c_str()); _snprintf(buffer, sizeof(buffer)-1, "#. %s\n", pItem->name.c_str());
option++;
} }
} }
slots++; 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++) for (size_t j=0; j<pItem->blanks.size(); j++)
{ {
if (pItem->blanks[j] == 1) if (pItem->blanks[j] == 1)
{
option++; option++;
}
m_Text.append("\n"); m_Text.append("\n");
slots++; slots++;
} }
@ -337,11 +426,17 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
{ {
int pad = items_per_page; int pad = items_per_page;
if (flags & Display_Back) if (flags & Display_Back)
{
pad--; pad--;
}
if (flags & Display_Next) if (flags & Display_Next)
{
pad--; pad--;
}
if (flags & Display_Exit) if (flags & Display_Exit)
{
pad--; pad--;
}
for (int i=slots+1; i<=pad; i++) for (int i=slots+1; i<=pad; i++)
{ {
m_Text.append("\n"); m_Text.append("\n");

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 #ifdef FN_META_DETACH
return FN_META_DETACH(); FN_META_DETACH();
#endif // FN_META_DETACH #endif // FN_META_DETACH
return TRUE; return TRUE;
} }

View File

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

View File

@ -83,11 +83,27 @@ void amx_command()
if (plugin && plugin->isValid()) if (plugin && plugin->isValid())
{ {
plugin->pausePlugin(); if (plugin->isPaused())
print_srvconsole("Paused plugin \"%s\"\n", plugin->getName()); {
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 else
{
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin); print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
}
} }
else if (!strcmp(cmd, "unpause") && CMD_ARGC() > 2) else if (!strcmp(cmd, "unpause") && CMD_ARGC() > 2)
{ {
@ -97,14 +113,21 @@ void amx_command()
if (plugin && plugin->isValid() && plugin->isPaused()) if (plugin && plugin->isValid() && plugin->isPaused())
{ {
plugin->unpausePlugin(); if (plugin->isStopped())
print_srvconsole("Unpaused plugin \"%s\"\n", plugin->getName()); {
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) else if (!plugin)
{ {
print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin); print_srvconsole("Couldn't find plugin matching \"%s\"\n", sPlugin);
} else { } 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")) else if (!strcmp(cmd, "cvars"))

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -58,7 +58,7 @@ cvar_t *csstats_rank;
cvar_t* csstats_rankbots; cvar_t* csstats_rankbots;
cvar_t* csstats_pause; 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"}; cvar_t init_csstats_pause = {"csstats_pause","0"};
struct sUserMsg struct sUserMsg

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -57,7 +57,6 @@ int iFTeamForward = -1;
int iFClassForward = -1; int iFClassForward = -1;
int gmsgCurWeapon; int gmsgCurWeapon;
int gmsgHealth;
int gmsgResetHUD; int gmsgResetHUD;
int gmsgObjScore; int gmsgObjScore;
int gmsgRoundState; int gmsgRoundState;
@ -66,6 +65,7 @@ int gmsgScoreShort;
int gmsgPTeam; int gmsgPTeam;
int gmsgAmmoX; int gmsgAmmoX;
int gmsgAmmoShort; int gmsgAmmoShort;
int gmsgHealth_End;
// Zors // Zors
//int gmsgWeaponList; //int gmsgWeaponList;
@ -90,22 +90,23 @@ struct sUserMsg {
int* id; int* id;
funEventCall func; funEventCall func;
bool endmsg; bool endmsg;
} g_user_msg[] = { } g_user_msg[] =
{ "CurWeapon",&gmsgCurWeapon,Client_CurWeapon,false }, {
{ "ObjScore",&gmsgObjScore,Client_ObjScore,false }, { "CurWeapon", &gmsgCurWeapon, Client_CurWeapon, false },
{ "RoundState",&gmsgRoundState,Client_RoundState,false }, { "ObjScore", &gmsgObjScore, Client_ObjScore, false },
{ "Health",&gmsgHealth,Client_Health_End,true }, { "RoundState", &gmsgRoundState, Client_RoundState, false },
{ "ResetHUD",&gmsgResetHUD,Client_ResetHUD_End,true }, { "ResetHUD", &gmsgResetHUD, Client_ResetHUD_End, true },
{ "TeamScore",&gmsgTeamScore,Client_TeamScore,false }, { "TeamScore", &gmsgTeamScore, Client_TeamScore, false },
{ "ScoreShort",&gmsgScoreShort,NULL,false }, { "AmmoX", &gmsgAmmoX, Client_AmmoX, false },
{ "PTeam",&gmsgPTeam,NULL,false }, { "AmmoShort", &gmsgAmmoShort, Client_AmmoShort, false },
{ "AmmoX",&gmsgAmmoX,Client_AmmoX,false}, { "Health", &gmsgHealth_End, Client_Health_End, true },
{ "AmmoShort",&gmsgAmmoShort,Client_AmmoShort,false},
{ "ScoreShort",&gmsgScoreShort,NULL,false },
//Zors //Zors
//{ "WeaponList",&gmsgWeaponList,WeaponList,true }, //{ "WeaponList", &gmsgWeaponList, WeaponList, true },
//{ "WeaponList",&gmsgWeaponList_End,WeaponList_End,true }, //{ "WeaponList", &gmsgWeaponList_End, WeaponList_End, true },
{ "PTeam", &gmsgPTeam, NULL, false },
{ "ScoreShort", &gmsgScoreShort, NULL, false },
{ 0,0,0,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); 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); 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); 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); 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); 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); 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 // Module info
#define MODULE_NAME "DoDX" #define MODULE_NAME "DoDX"
#define MODULE_VERSION "1.76" #define MODULE_VERSION "1.76b"
#define MODULE_AUTHOR "AMX Mod X Dev Team" #define MODULE_AUTHOR "AMX Mod X Dev Team"
#define MODULE_URL "http://www.amxmodx.org" #define MODULE_URL "http://www.amxmodx.org"
#define MODULE_LOGTAG "DODX" #define MODULE_LOGTAG "DODX"

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

View File

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

View File

@ -30,6 +30,12 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
return 1; return 1;
break; break;
} }
case TR_InOpen:
{
gfm_tr->fInOpen = *ptr;
return 1;
break;
}
case TR_InWater: case TR_InWater:
{ {
gfm_tr->fInWater = *ptr; gfm_tr->fInWater = *ptr;
@ -104,6 +110,11 @@ static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params)
return gfm_tr->fStartSolid; return gfm_tr->fStartSolid;
break; break;
} }
case TR_InOpen:
{
return gfm_tr->fInOpen;
break;
}
case TR_InWater: case TR_InWater:
{ {
return gfm_tr->fInWater; 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 = MF_GetAmxAddr(amx, params[3]);
*ptr = amx_ftoc(es->framerate); *ptr = amx_ftoc(es->framerate);
return 1; return 1;
case ES_Body:
return es->body;
case ES_Controller: case ES_Controller:
ptr = MF_GetAmxAddr(amx, params[3]); ptr = MF_GetAmxAddr(amx, params[3]);
ptr[0] = es->controller[0]; ptr[0] = es->controller[0];
@ -937,6 +939,9 @@ static cell AMX_NATIVE_CALL set_es(AMX *amx, cell *params)
case ES_FrameRate: case ES_FrameRate:
es->framerate = amx_ctof(*ptr); es->framerate = amx_ctof(*ptr);
return 1; return 1;
case ES_Body:
es->body = *ptr;
return 1;
case ES_Controller: case ES_Controller:
es->controller[0] = ptr[0]; es->controller[0] = ptr[0];
es->controller[1] = ptr[1]; es->controller[1] = ptr[1];

View File

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

View File

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

View File

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

View File

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

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->user = strdup(MF_GetAmxString(amx, params[2], 0, &len));
sql->pass = strdup(MF_GetAmxString(amx, params[3], 0, &len)); sql->pass = strdup(MF_GetAmxString(amx, params[3], 0, &len));
sql->db = strdup(MF_GetAmxString(amx, params[4], 0, &len)); sql->db = strdup(MF_GetAmxString(amx, params[4], 0, &len));
if (params[0] / sizeof(cell) >= 5)
{
sql->max_timeout = static_cast<unsigned int>(params[5]);
}
unsigned int num = MakeHandle(sql, Handle_Connection, FreeConnection); unsigned int num = MakeHandle(sql, Handle_Connection, FreeConnection);
@ -87,11 +91,12 @@ static cell AMX_NATIVE_CALL SQL_Connect(AMX *amx, cell *params)
nfo.pass = sql->pass; nfo.pass = sql->pass;
nfo.port = sql->port; nfo.port = sql->port;
nfo.host = sql->host; nfo.host = sql->host;
nfo.max_timeout = sql->max_timeout;
char buffer[512]; char buffer[512];
int errcode; int errcode;
IDatabase *pDb = g_Mysql.Connect(&nfo, &errcode, buffer, sizeof(buffer)-1); IDatabase *pDb = g_Mysql.Connect2(&nfo, &errcode, buffer, sizeof(buffer)-1);
if (!pDb) if (!pDb)
{ {
@ -378,13 +383,15 @@ static cell AMX_NATIVE_CALL SQL_GetQueryString(AMX *amx, cell *params)
{ {
AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query); AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query);
if (!qInfo || !qInfo->pQuery) if (!qInfo || (!qInfo->pQuery && !qInfo->opt_ptr))
{ {
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]); MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]);
return 0; return 0;
} }
return MF_SetAmxString(amx, params[2], qInfo->pQuery->GetQueryString(), params[3]); const char *ptr = qInfo->pQuery ? qInfo->pQuery->GetQueryString() : qInfo->opt_ptr;
return MF_SetAmxString(amx, params[2], ptr, params[3]);
} }
static cell AMX_NATIVE_CALL SQL_FieldNameToNum(AMX *amx, cell *params) static cell AMX_NATIVE_CALL SQL_FieldNameToNum(AMX *amx, cell *params)

View File

@ -134,11 +134,13 @@ namespace SourceMod
struct DatabaseInfo struct DatabaseInfo
{ {
DatabaseInfo() : max_timeout(0) { };
const char *host; const char *host;
const char *database; const char *database;
const char *user; const char *user;
const char *pass; const char *pass;
unsigned int port; unsigned int port;
unsigned int max_timeout;
}; };
class ISQLDriver class ISQLDriver
@ -147,6 +149,8 @@ namespace SourceMod
virtual ~ISQLDriver() { }; virtual ~ISQLDriver() { };
public: public:
virtual IDatabase *Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength) =0; virtual IDatabase *Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength) =0;
//Supports the timeout clause
virtual IDatabase *Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength) =0;
virtual const char *NameString() =0; virtual const char *NameString() =0;
virtual bool IsCompatDriver(const char *namestring) =0; virtual bool IsCompatDriver(const char *namestring) =0;
}; };

View File

@ -21,6 +21,16 @@ const char *MysqlDriver::NameString()
} }
IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength) IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength)
{
return _Connect(info, errcode, error, maxlength, false);
}
IDatabase *MysqlDriver::Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength)
{
return _Connect(info, errcode, error, maxlength, true);
}
IDatabase *MysqlDriver::_Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength, bool do_timeout)
{ {
MYSQL *mysql = mysql_init(NULL); MYSQL *mysql = mysql_init(NULL);
@ -35,6 +45,11 @@ IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, s
return false; return false;
} }
if (do_timeout && info->max_timeout)
{
mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&(info->max_timeout));
}
if (mysql_real_connect(mysql, if (mysql_real_connect(mysql,
info->host, info->host,
info->user, info->user,
@ -45,9 +60,13 @@ IDatabase *MysqlDriver::Connect(DatabaseInfo *info, int *errcode, char *error, s
0) == NULL) 0) == NULL)
{ {
if (errcode) if (errcode)
{
*errcode = mysql_errno(mysql); *errcode = mysql_errno(mysql);
}
if (error && maxlength) if (error && maxlength)
{
snprintf(error, maxlength, "%s", mysql_error(mysql)); snprintf(error, maxlength, "%s", mysql_error(mysql));
}
return false; return false;
} }

View File

@ -9,8 +9,11 @@ namespace SourceMod
{ {
public: public:
IDatabase *Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength); IDatabase *Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength);
IDatabase *Connect2(DatabaseInfo *info, int *errcode, char *error, size_t maxlength);
const char *NameString(); const char *NameString();
bool IsCompatDriver(const char *namestring); bool IsCompatDriver(const char *namestring);
public:
IDatabase *_Connect(DatabaseInfo *info, int *errcode, char *error, size_t maxlength, bool do_timeout);
}; };
}; };

View File

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

View File

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

View File

@ -58,7 +58,7 @@ static cell AMX_NATIVE_CALL SQL_ThreadQuery(AMX *amx, cell *params)
int len; int len;
const char *handler = MF_GetAmxString(amx, params[2], 0, &len); const char *handler = MF_GetAmxString(amx, params[2], 0, &len);
int fwd = MF_RegisterSPForwardByName(amx, handler, FP_CELL, FP_CELL, FP_STRING, FP_CELL, FP_ARRAY, FP_CELL, FP_DONE); int fwd = MF_RegisterSPForwardByName(amx, handler, FP_CELL, FP_CELL, FP_STRING, FP_CELL, FP_ARRAY, FP_CELL, FP_CELL, FP_DONE);
if (fwd < 1) if (fwd < 1)
{ {
MF_LogError(amx, AMX_ERR_NATIVE, "Function not found: %s", handler); MF_LogError(amx, AMX_ERR_NATIVE, "Function not found: %s", handler);
@ -76,7 +76,7 @@ static cell AMX_NATIVE_CALL SQL_ThreadQuery(AMX *amx, cell *params)
} }
g_QueueLock->Unlock(); g_QueueLock->Unlock();
kmThread->SetInfo(cn->host, cn->user, cn->pass, cn->db, cn->port); kmThread->SetInfo(cn->host, cn->user, cn->pass, cn->db, cn->port, cn->max_timeout);
kmThread->SetForward(fwd); kmThread->SetForward(fwd);
kmThread->SetQuery(MF_GetAmxString(amx, params[3], 1, &len)); kmThread->SetQuery(MF_GetAmxString(amx, params[3], 1, &len));
kmThread->SetCellData(MF_GetAmxAddr(amx, params[4]), (ucell)params[5]); kmThread->SetCellData(MF_GetAmxAddr(amx, params[4]), (ucell)params[5]);
@ -126,13 +126,15 @@ void MysqlThread::SetForward(int forward)
m_fwd = forward; m_fwd = forward;
} }
void MysqlThread::SetInfo(const char *host, const char *user, const char *pass, const char *db, int port) void MysqlThread::SetInfo(const char *host, const char *user, const char *pass, const char *db, int port, unsigned int max_timeout)
{ {
m_host.assign(host); m_host.assign(host);
m_user.assign(user); m_user.assign(user);
m_pass.assign(pass); m_pass.assign(pass);
m_db.assign(db); m_db.assign(db);
m_max_timeout = m_max_timeout;
m_port = port; m_port = port;
m_qrInfo.queue_time = gpGlobals->time;
} }
void MysqlThread::SetQuery(const char *query) void MysqlThread::SetQuery(const char *query)
@ -149,10 +151,15 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
info.user = m_user.c_str(); info.user = m_user.c_str();
info.host = m_host.c_str(); info.host = m_host.c_str();
info.port = m_port; info.port = m_port;
info.max_timeout = m_max_timeout;
float save_time = m_qrInfo.queue_time;
memset(&m_qrInfo, 0, sizeof(m_qrInfo)); memset(&m_qrInfo, 0, sizeof(m_qrInfo));
IDatabase *pDatabase = g_Mysql.Connect(&info, &m_qrInfo.amxinfo.info.errorcode, m_qrInfo.amxinfo.error, 254); m_qrInfo.queue_time = save_time;
IDatabase *pDatabase = g_Mysql.Connect2(&info, &m_qrInfo.amxinfo.info.errorcode, m_qrInfo.amxinfo.error, 254);
IQuery *pQuery = NULL; IQuery *pQuery = NULL;
if (!pDatabase) if (!pDatabase)
{ {
@ -172,14 +179,15 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
if (m_qrInfo.query_success && m_qrInfo.amxinfo.info.rs) if (m_qrInfo.query_success && m_qrInfo.amxinfo.info.rs)
{ {
m_atomicResult.CopyFrom(m_qrInfo.amxinfo.info.rs); m_atomicResult.CopyFrom(m_qrInfo.amxinfo.info.rs);
m_qrInfo.amxinfo.pQuery = pQuery;
m_qrInfo.amxinfo.info.rs = &m_atomicResult; m_qrInfo.amxinfo.info.rs = &m_atomicResult;
}
if (pQuery)
{
m_qrInfo.amxinfo.pQuery = pQuery;
} else { } else {
if (pQuery) m_qrInfo.amxinfo.opt_ptr = new char[m_query.size() + 1];
{ strcpy(m_qrInfo.amxinfo.opt_ptr, m_query.c_str());
pQuery->FreeHandle();
}
pQuery = NULL;
} }
if (pDatabase) if (pDatabase)
@ -231,31 +239,37 @@ void MysqlThread::Execute()
} else if (!m_qrInfo.query_success) { } else if (!m_qrInfo.query_success) {
state = -1; state = -1;
} }
float diff = gpGlobals->time - m_qrInfo.queue_time;
cell c_diff = amx_ftoc(diff);
unsigned int hndl = MakeHandle(&m_qrInfo.amxinfo, Handle_Query, NullFunc);
if (state != 0) if (state != 0)
{ {
MF_ExecuteForward(m_fwd, MF_ExecuteForward(m_fwd,
(cell)state, (cell)state,
(cell)0, (cell)hndl,
m_qrInfo.amxinfo.error, m_qrInfo.amxinfo.error,
m_qrInfo.amxinfo.info.errorcode, m_qrInfo.amxinfo.info.errorcode,
data_addr, data_addr,
m_datalen); m_datalen,
c_diff);
} else { } else {
unsigned int hndl = MakeHandle(&m_qrInfo.amxinfo, Handle_Query, NullFunc);
MF_ExecuteForward(m_fwd, MF_ExecuteForward(m_fwd,
(cell)0, (cell)0,
(cell)hndl, (cell)hndl,
"", "",
(cell)0, (cell)0,
data_addr, data_addr,
m_datalen); m_datalen,
/* this should always be true I think */ c_diff);
if (m_qrInfo.amxinfo.pQuery)
{
m_qrInfo.amxinfo.pQuery->FreeHandle();
}
FreeHandle(hndl);
} }
FreeHandle(hndl);
if (m_qrInfo.amxinfo.pQuery)
{
m_qrInfo.amxinfo.pQuery->FreeHandle();
m_qrInfo.amxinfo.pQuery = NULL;
}
delete [] m_qrInfo.amxinfo.opt_ptr;
m_qrInfo.amxinfo.opt_ptr = NULL;
} }
/***************** /*****************

View File

@ -12,6 +12,7 @@ struct QueuedResultInfo
AmxQueryInfo amxinfo; AmxQueryInfo amxinfo;
bool connect_success; bool connect_success;
bool query_success; bool query_success;
float queue_time;
}; };
class AtomicResult : class AtomicResult :
@ -59,7 +60,7 @@ public:
MysqlThread(); MysqlThread();
~MysqlThread(); ~MysqlThread();
public: public:
void SetInfo(const char *host, const char *user, const char *pass, const char *db, int port); void SetInfo(const char *host, const char *user, const char *pass, const char *db, int port, unsigned int max_timeout);
void SetQuery(const char *query); void SetQuery(const char *query);
void SetCellData(cell data[], ucell len); void SetCellData(cell data[], ucell len);
void SetForward(int forward); void SetForward(int forward);
@ -74,6 +75,7 @@ private:
SourceHook::String m_user; SourceHook::String m_user;
SourceHook::String m_pass; SourceHook::String m_pass;
SourceHook::String m_db; SourceHook::String m_db;
unsigned int m_max_timeout;
int m_port; int m_port;
cell *m_data; cell *m_data;
ucell m_datalen; ucell m_datalen;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -169,6 +169,8 @@ public:
} else { } else {
iter++; 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) static cell AMX_NATIVE_CALL SQL_GetQueryString(AMX *amx, cell *params)
{ {
AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query); AmxQueryInfo *qInfo = (AmxQueryInfo *)GetHandle(params[1], Handle_Query);
if (!qInfo)
if (!qInfo || (!qInfo->pQuery && !qInfo->opt_ptr))
{ {
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]); MF_LogError(amx, AMX_ERR_NATIVE, "Invalid query handle: %d", params[1]);
return 0; return 0;
} }
return MF_SetAmxString(amx, params[2], qInfo->pQuery->GetQueryString(), params[3]); const char *ptr = qInfo->pQuery ? qInfo->pQuery->GetQueryString() : qInfo->opt_ptr;
return MF_SetAmxString(amx, params[2], ptr, params[3]);
} }
static cell AMX_NATIVE_CALL SQL_FieldNameToNum(AMX *amx, cell *params) static cell AMX_NATIVE_CALL SQL_FieldNameToNum(AMX *amx, cell *params)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

Binary file not shown.

View File

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

View File

@ -176,7 +176,7 @@ begin
eTempIndent := eTempIndent +1; eTempIndent := eTempIndent +1;
end; end;
end end
else if (eStr[i] = 'else') or (Pos('else if', eStr[i]) = 1) and (Pos('{', eStr[i]) = 0) then else if (eStr[i] = 'else') or ((Pos('else if', eStr[i]) = 1) or (Pos('case', eStr[i]) = 1) or (Pos('switch', eStr[i]) = 1)) and (Pos('{', eStr[i]) = 0) then
eTempIndent := eTempIndent +1 eTempIndent := eTempIndent +1
else if (Pos('{', eStr[i]) = 0) and (Length(eStr[i]) > 6) then begin else if (Pos('{', eStr[i]) = 0) and (Length(eStr[i]) > 6) then begin
if (IsAtStart('stock', eStr[i], False)) or (IsAtStart('while', eStr[i], True)) then begin if (IsAtStart('stock', eStr[i], False)) or (IsAtStart('while', eStr[i], True)) then begin

View File

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

View File

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

View File

@ -63,6 +63,7 @@ var i, k: integer;
eTempResult: TPawnParseResult; eTempResult: TPawnParseResult;
eProcedureAdded: Boolean; eProcedureAdded: Boolean;
eCActive: Boolean; eCActive: Boolean;
eTempBool: Boolean;
begin begin
Result := TPawnParseResult.Create; Result := TPawnParseResult.Create;
if not IsRecursive then if not IsRecursive then
@ -101,30 +102,39 @@ begin
end; end;
{ Constants and Variables } { Constants and Variables }
if (IsAtStart('new', eString, False)) or (IsAtStart('stock', eString, False)) then begin // const or variable if (IsAtStart('new', eString, False)) or (IsAtStart('const', eString, False)) or (IsAtStart('stock', eString, False)) then begin // const or variable
if (eBracesOpen = 0) and (not IsRecursive) and (Pos('(', eString) = Pos(')', eString)) then begin if (eBracesOpen = 0) and (not IsRecursive) and (Pos('(', eString) = Pos(')', eString)) then begin
Delete(eString, 1, Pos(#32, eString));
eString := Trim(eString);
// we don't need braces so delete them... // we don't need braces so delete them...
while (CountChars(eString, '{') <> 0) and (CountChars(eString, '}') <> 0) and (Pos('{', eString) < Pos('}', eString)) do while (CountChars(eString, '{') <> 0) and (CountChars(eString, '}') <> 0) and (Pos('{', eString) < Pos('}', eString)) do
eString := StringReplace(eString, '{' + Between(eString, '{', '}') + '}', '', [rfReplaceAll]); eString := StringReplace(eString, '{' + Between(eString, '{', '}') + '}', '', [rfReplaceAll]);
while (CountChars(eString, '[') <> 0) and (CountChars(eString, ']') <> 0) and (Pos('[', eString) < Pos(']', eString)) do while (CountChars(eString, '[') <> 0) and (CountChars(eString, ']') <> 0) and (Pos('[', eString) < Pos(']', eString)) do
eString := StringReplace(eString, '[' + Between(eString, '[', ']') + ']', '', [rfReplaceAll]); eString := StringReplace(eString, '[' + Between(eString, '[', ']') + ']', '', [rfReplaceAll]);
// done? okay, split all items if there are more than one; and if not, it's okay... // done? okay, split all items if there are more than one; and if not, it's okay...
eStr.Text := StringReplace(eString, ',', #13, [rfReplaceAll]); eStr.Text := StringReplace(Copy(eString, Pos(#32, eString)+1, Length(eString)), ',', #13, [rfReplaceAll]);
for k := 0 to eStr.Count - 1 do begin for k := 0 to eStr.Count - 1 do begin
if (Trim(eStr[k]) <> '') and (eStr[k] <> '}') then begin if (Trim(eStr[k]) <> '') and (eStr[k] <> '}') then begin
eTemp := Trim(RemoveSemicolon(eStr[k])); eTemp := Trim(RemoveSemicolon(eStr[k]));
if Pos(':', eTemp) <> 0 then if (IsAtStart('const', eTemp, False)) then begin
Delete(eTemp, 1, 5);
eTemp := Trim(eTemp);
eTempBool := True;
end
else
eTempBool := (IsAtStart('const', eString, False));
if (Pos(':', eTemp) <> 0) then
eTemp := Copy(eTemp, Pos(':', eTemp) + 1, Length(eTemp)); eTemp := Copy(eTemp, Pos(':', eTemp) + 1, Length(eTemp));
if Pos('=', eTemp) <> 0 then begin // constant if (Pos('=', eTemp) <> 0) then begin // constant
Result.Constants.AddObject(Copy(eTemp, 1, Pos('=', eTemp) - 1), TObject(i)); Result.Constants.AddObject(Copy(eTemp, 1, Pos('=', eTemp) - 1), TObject(i));
Result.AutoComplete.Add(Copy(eTemp, 1, Pos('=', eTemp) - 1)); Result.AutoComplete.Add(Copy(eTemp, 1, Pos('=', eTemp) - 1));
end end
else begin // variable else begin // variable
Result.Variables.AddObject(eTemp, TObject(i)); if (eTempBool) then
Result.Constants.AddObject(eTemp, TObject(i))
else
Result.Variables.AddObject(eTemp, TObject(i));
Result.AutoComplete.Add(eTemp); Result.AutoComplete.Add(eTemp);
end; end;
end; end;
@ -229,7 +239,7 @@ begin
eStartLine := eStartLine - 1; eStartLine := eStartLine - 1;
eTemp := Trim(RemoveSemicolon(Trim(eCode[eStartLine]))); eTemp := Trim(RemoveSemicolon(Trim(eCode[eStartLine])));
// Analyze type // Analyze type
k := 0; k := 0;
if IsAtStart('public', eTemp) then if IsAtStart('public', eTemp) then
k := 1 k := 1
@ -243,7 +253,7 @@ begin
k := 5; k := 5;
// Remove type // Remove type
if Pos('@', eTemp) = 1 then begin if Pos('@', eTemp) = 1 then begin
eTemp := Copy(eTemp, 2, Length(eTemp)); eTemp := Copy(eTemp, 2, Length(eTemp));
k := 1; k := 1;
@ -258,7 +268,7 @@ begin
if eTemp[Length(eTemp)] = '{' then if eTemp[Length(eTemp)] = '{' then
eTemp := Trim(Copy(eTemp, 1, Length(eTemp) - 1)); eTemp := Trim(Copy(eTemp, 1, Length(eTemp) - 1));
// Remove return-type // Remove return-type
if (Pos(':', eTemp) <> 0) and (Pos(':', eTemp) < Pos('(', eTemp)) then if (Pos(':', eTemp) <> 0) and (Pos(':', eTemp) < Pos('(', eTemp)) then
Delete(eTemp, 1, Pos(':', eTemp)); Delete(eTemp, 1, Pos(':', eTemp));
@ -275,7 +285,7 @@ begin
4: Result.CallTips.Add(eTemp + '-> ' + FileName + ', forward'); 4: Result.CallTips.Add(eTemp + '-> ' + FileName + ', forward');
end; end;
end; end;
// Copy function-name // Copy function-name
if Pos('(', eTemp) <> 0 then if Pos('(', eTemp) <> 0 then
eTemp := Copy(eTemp, 1, Pos('(', eTemp) - 1); eTemp := Copy(eTemp, 1, Pos('(', eTemp) - 1);
eTemp := Trim(eTemp); eTemp := Trim(eTemp);

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

View File

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

View File

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

View File

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

View File

@ -277,6 +277,9 @@ type
procedure lvParamsDblClick(Sender: TObject); procedure lvParamsDblClick(Sender: TObject);
procedure cmdAddFunctionClick(Sender: TObject); procedure cmdAddFunctionClick(Sender: TObject);
procedure lstFunctionsClick(Sender: TObject); procedure lstFunctionsClick(Sender: TObject);
procedure txtCodeSnippetEnter(Sender: TObject);
procedure txtCodeSnippetExit(Sender: TObject);
procedure txtCodeSnippetChange(Sender: TObject);
public public
Foreground, Background: TColor; Foreground, Background: TColor;
CaretFore, CaretBack: TColor; CaretFore, CaretBack: TColor;
@ -339,9 +342,14 @@ begin
eReg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False); eReg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False);
{ AMXX } { AMXX }
AMXXDir := eReg.ReadString('ProgramFilesDir') + '\AMX Mod X\'; AMXXDir := eReg.ReadString('ProgramFilesDir') + '\AMX Mod X\';
if not DirectoryExists(AMXXDir) then if DirectoryExists(AMXXDir) then
AMXXDir := IncludeTrailingPathDelimiter(AMXXDir)
else
AMXXDir := ''; AMXXDir := '';
eReg.CloseKey; eReg.CloseKey;
{ Language Files }
if (DirectoryExists(AMXXDir + 'files\base\data\lang')) then
txtLangDir.Text := AMXXDir + 'files\base\data\lang';
{ Steam } { Steam }
if eReg.KeyExists('SOFTWARE\Valve\Steam') then begin if eReg.KeyExists('SOFTWARE\Valve\Steam') then begin
eReg.OpenKey('SOFTWARE\Valve\Steam', False); eReg.OpenKey('SOFTWARE\Valve\Steam', False);
@ -421,7 +429,7 @@ begin
eConfig.WriteString('Misc', 'DefaultPluginAuthor', GetUser); eConfig.WriteString('Misc', 'DefaultPluginAuthor', GetUser);
eConfig.WriteInteger('Misc', 'SaveNotesTo', 0); eConfig.WriteInteger('Misc', 'SaveNotesTo', 0);
eConfig.WriteInteger('Misc', 'CPUSpeed', 5); eConfig.WriteInteger('Misc', 'CPUSpeed', 5);
eConfig.WriteString('Misc', 'LangDir', ''); eConfig.WriteString('Misc', 'LangDir', txtLangDir.Text);
eConfig.WriteInteger('Misc', 'ShowStatusbar', 1); eConfig.WriteInteger('Misc', 'ShowStatusbar', 1);
eConfig.WriteInteger('Misc', 'WindowState', 0); eConfig.WriteInteger('Misc', 'WindowState', 0);
end; end;
@ -434,6 +442,8 @@ begin
2: frmMain.WindowState := wsMinimized; 2: frmMain.WindowState := wsMinimized;
end; end;
txtCodeSnippetExit(Sender);
PaintForeground(clBlack); PaintForeground(clBlack);
PaintBackground(clBlack); PaintBackground(clBlack);
PaintCaretFore(clBlack); PaintCaretFore(clBlack);
@ -778,6 +788,7 @@ begin
lstCodeSnippets.ItemIndex := lstCodeSnippets.Items.Add(eStr); lstCodeSnippets.ItemIndex := lstCodeSnippets.Items.Add(eStr);
AddSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], eStr, ''); AddSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], eStr, '');
txtCodeSnippet.Enabled := True; txtCodeSnippet.Enabled := True;
lstCodeSnippets.SetFocus;
lstCodeSnippetsClick(Sender); lstCodeSnippetsClick(Sender);
end end
else else
@ -805,7 +816,9 @@ procedure TfrmSettings.lstCodeSnippetsClick(Sender: TObject);
begin begin
cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1; cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1;
if cmdCSRemove.Enabled then if cmdCSRemove.Enabled then
txtCodeSnippet.Lines.Text := GetSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], lstCodeSnippets.Items[lstCodeSnippets.ItemIndex]); txtCodeSnippet.Lines.Text := GetSnippet(ftcCodeSnippets.Tabs[ftcCodeSnippets.ActiveTab], lstCodeSnippets.Items[lstCodeSnippets.ItemIndex])
else
txtCodeSnippetExit(Sender);
end; end;
procedure TfrmSettings.ftcCodeSnippetsTabChanged(Sender: TObject); procedure TfrmSettings.ftcCodeSnippetsTabChanged(Sender: TObject);
@ -815,8 +828,8 @@ begin
lstCodeSnippets.ItemIndex := 0 lstCodeSnippets.ItemIndex := 0
else else
txtCodeSnippet.Clear; txtCodeSnippet.Clear;
lstCodeSnippetsClick(Sender);
txtCodeSnippet.Enabled := lstCodeSnippets.Items.Count > 0; txtCodeSnippet.Enabled := lstCodeSnippets.Items.Count > 0;
lstCodeSnippetsClick(Sender);
cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1; cmdCSRemove.Enabled := lstCodeSnippets.ItemIndex <> -1;
end; end;
@ -1250,4 +1263,28 @@ begin
end; end;
end; end;
procedure TfrmSettings.txtCodeSnippetEnter(Sender: TObject);
begin
if (txtCodeSnippet.Font.Color = $008396A0) and ((ActiveControl = txtCodeSnippet) or (txtCodeSnippet.Enabled)) then begin
txtCodeSnippet.Font.Color := clWindowText;
txtCodeSnippet.Text := '';
end;
end;
procedure TfrmSettings.txtCodeSnippetExit(Sender: TObject);
begin
if (txtCodeSnippet.Text = '') then begin
txtCodeSnippet.Lines.Text := 'Use "!APPEND!" to append or'#13'"!INSERT!" to insert the code'#13'snippet into a new line on click...';
txtCodeSnippet.Font.Color := $008396A0;
end;
end;
procedure TfrmSettings.txtCodeSnippetChange(Sender: TObject);
begin
if (txtCodeSnippet.Font.Color = $008396A0) then
txtCodeSnippet.Font.Color := clWindowText
else if (txtCodeSnippet.Text = '') and (ActiveControl <> txtCodeSnippet) then
txtCodeSnippetExit(Sender);
end;
end. end.

View File

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

View File

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@ program AMXInstaller;
- Indy 9 (www.indyproject.org) - Indy 9 (www.indyproject.org)
- FlatStyle Components (www.torry.net) - 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) - JVCL Lib Pack 3.0 (jvcl.sourceforge.net)
AMXX Installer for AMX Mod X is developed under GNU Public License 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 interface
uses SysUtils, Classes, Windows, Graphics, Forms, ShellAPI, Controls, Messages, 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 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 AddStatus(Text: String; Color: TColor; ShowTime: Boolean = True);
procedure AddDone(Additional: String = ''); procedure AddDone(Additional: String = '');
procedure AddSkipped; procedure AddSkipped;
procedure AddFailed;
procedure AddNotFound; procedure AddNotFound;
procedure MakeDir(Dir: String); procedure MakeDir(Dir: String);
procedure DownloadFile(eFile: String; eDestination: String); procedure DownloadFile(eFile: String; eDestination: String);
@ -88,6 +89,17 @@ begin
Application.ProcessMessages; Application.ProcessMessages;
end; 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; procedure AddNotFound;
begin begin
frmMain.rtfDetails.SelStart := Length(frmMain.rtfDetails.Text); frmMain.rtfDetails.SelStart := Length(frmMain.rtfDetails.Text);
@ -173,8 +185,12 @@ begin
if frmMain.IdFTP.TransferType <> TransferType then if frmMain.IdFTP.TransferType <> TransferType then
frmMain.IdFTP.TransferType := TransferType; frmMain.IdFTP.TransferType := TransferType;
// upload the file // upload the file
frmMain.IdFTP.Put(eFile, eDestination); try
AddDone; frmMain.IdFTP.Put(eFile, eDestination);
AddDone;
except
AddFailed;
end;
end; end;
procedure FTPMakeDir(eDir: String); procedure FTPMakeDir(eDir: String);
@ -213,7 +229,7 @@ begin
if Pos('_amd64', ExtractFileName(eFile)) <> 0 then if Pos('_amd64', ExtractFileName(eFile)) <> 0 then
Result := True; Result := True;
end; end;
osLinux64: begin {osLinux64: begin
if ExtractFileExt(eFile) = '.dll' then if ExtractFileExt(eFile) = '.dll' then
Result := True; Result := True;
if ExtractFileExt(eFile) = '.exe' then if ExtractFileExt(eFile) = '.exe' then
@ -221,7 +237,7 @@ begin
if Pos('_i386', ExtractFileName(eFile)) <> 0 then if Pos('_i386', ExtractFileName(eFile)) <> 0 then
Result := True; Result := True;
end; end;}
end; end;
end; end;
@ -280,13 +296,13 @@ var eStr: TStringList;
UpdatePluginsIni: Boolean; UpdatePluginsIni: Boolean;
begin begin
AddStatus('Scanning for directories...', clBlack); 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; DirList.Text := Text;
Free; Free;
end; end;
AddDone('found ' + IntToStr(DirList.Count) + ' directories..'); AddDone('found ' + IntToStr(DirList.Count) + ' directories..');
AddStatus('Scanning for files...', clBlack); 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; FileList.Text := Text;
Free; Free;
end; end;
@ -327,9 +343,9 @@ begin
end; end;
for i := 0 to DirList.Count -1 do 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 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 } { liblist.gam }
if not FileExists(ePath + 'liblist.gam') then begin if not FileExists(ePath + 'liblist.gam') then begin
@ -350,10 +366,10 @@ begin
eStr[i] := '//' + eStr[i]; eStr[i] := '//' + eStr[i];
end; end;
eStr.Add('gamedll "addons\metamod\dlls\metamod.dll"'); eStr.Add('gamedll "addons\metamod\dlls\metamod.dll"');
if OS = osLinux64 then //if OS = osLinux64 then
eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_amd64.so"') // eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_amd64.so"')
else //else
eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_i386.so"'); eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_i386.so"');
FileSetAttr(ePath + 'liblist.gam', 0); FileSetAttr(ePath + 'liblist.gam', 0);
eStr.SaveToFile(ePath + 'liblist.gam'); eStr.SaveToFile(ePath + 'liblist.gam');
FileSetAttr(ePath + 'liblist.gam', faReadOnly); // important for listen servers FileSetAttr(ePath + 'liblist.gam', faReadOnly); // important for listen servers
@ -438,44 +454,44 @@ begin
if not IsForbidden(FileList[i], OS) then begin if not IsForbidden(FileList[i], OS) then begin
if Pos('base', FileList[i]) = 1 then begin if Pos('base', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 6, Length(FileList[i])), clBlack); 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; end;
case eMod of case eMod of
modCS: begin modCS: begin
if Pos('cstrike', FileList[i]) = 1 then begin if Pos('cstrike', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 9, Length(FileList[i])), clBlack); 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;
end; end;
modDoD: begin modDoD: begin
if Pos('dod', FileList[i]) = 1 then begin if Pos('dod', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), clBlack); 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;
end; end;
modTFC: begin modTFC: begin
if Pos('tfc', FileList[i]) = 1 then begin if Pos('tfc', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), clBlack); 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;
end; end;
modNS: begin modNS: begin
if Pos('ns', FileList[i]) = 1 then begin if Pos('ns', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), clBlack); 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;
end; end;
modTS: begin modTS: begin
if Pos('ts', FileList[i]) = 1 then begin if Pos('ts', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 4, Length(FileList[i])), clBlack); 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;
end; end;
modESF: begin modESF: begin
if Pos('esf', FileList[i]) = 1 then begin if Pos('esf', FileList[i]) = 1 then begin
AddStatus('Copying file: addons\amxmodx\' + Copy(FileList[i], 5, Length(FileList[i])), clBlack); 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; end;
end; end;
@ -596,7 +612,7 @@ begin
frmMain.IdFTP.Connect; frmMain.IdFTP.Connect;
Result := True; Result := True;
except 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; end;
end; end;
@ -614,10 +630,12 @@ begin
ePath := '/'; ePath := '/';
CurNode := frmMain.trvDirectories.Selected; CurNode := frmMain.trvDirectories.Selected;
repeat if (Assigned(CurNode)) then begin
ePath := '/' + CurNode.Text + ePath; repeat
CurNode := CurNode.Parent; ePath := '/' + CurNode.Text + ePath;
until (not Assigned(CurNode)); CurNode := CurNode.Parent;
until (not Assigned(CurNode));
end;
Screen.Cursor := crAppStart; Screen.Cursor := crAppStart;
frmMain.cmdCancel.Show; frmMain.cmdCancel.Show;
@ -625,13 +643,13 @@ begin
frmMain.cmdNext.Hide; frmMain.cmdNext.Hide;
Screen.Cursor := crHourGlass; Screen.Cursor := crHourGlass;
AddStatus('Scanning for directories...', clBlack); 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; DirList.Text := Text;
Free; Free;
end; end;
AddDone('found ' + IntToStr(DirList.Count) + ' directories..'); AddDone('found ' + IntToStr(DirList.Count) + ' directories..');
AddStatus('Scanning for files...', clBlack); 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; FileList.Text := Text;
Free; Free;
end; end;
@ -642,9 +660,9 @@ begin
frmMain.ggeItem.MaxValue := DirList.Count; frmMain.ggeItem.MaxValue := DirList.Count;
for i := 0 to DirList.Count -1 do 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 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; CopyConfig := True;
AddStatus('Checking for previous AMX Mod X installation...', clBlack); AddStatus('Checking for previous AMX Mod X installation...', clBlack);
@ -664,7 +682,7 @@ begin
// liblist.gam // liblist.gam
AddStatus('Editing liblist.gam...', clBlack); AddStatus('Editing liblist.gam...', clBlack);
eStr := TStringList.Create; 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 eStr.IndexOf('gamedll "addons\metamod\dlls\metamod.dll"') = -1 then begin
if Cancel then begin if Cancel then begin
AddStatus('', clBlack, False); AddStatus('', clBlack, False);
@ -682,8 +700,8 @@ begin
eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_i386.so"') eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_i386.so"')
else else
eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_amd64.so"'); eStr.Add('gamedll_linux "addons/metamod/dlls/metamod_amd64.so"');
FileSetAttr(ExtractFilePath(ParamStr(0)) + 'temp\liblist.gam', 0); FileSetAttr(ExtractFilePath(Application.ExeName) + 'temp\liblist.gam', 0);
eStr.SaveToFile(ExtractFilePath(ParamStr(0)) + 'temp\liblist.gam'); eStr.SaveToFile(ExtractFilePath(Application.ExeName) + 'temp\liblist.gam');
end; end;
eStr.Free; eStr.Free;
AddDone; AddDone;
@ -749,8 +767,8 @@ begin
if not IsForbidden(FileList[i], OS) then begin if not IsForbidden(FileList[i], OS) then begin
AddStatus('Uploading file: ' + FileList[i], clBlack); AddStatus('Uploading file: ' + FileList[i], clBlack);
if FileExists(ExtractFilePath(ParamStr(0)) + 'temp\' + FileList[i]) then begin if FileExists(ExtractFilePath(Application.ExeName) + 'temp\' + FileList[i]) then begin
frmMain.ggeItem.MaxValue := FSize(ExtractFilePath(ParamStr(0)) + 'temp\' + FileList[i]); frmMain.ggeItem.MaxValue := FSize(ExtractFilePath(Application.ExeName) + 'temp\' + FileList[i]);
UploadAgain: UploadAgain:
try try
eGoBack := False; eGoBack := False;
@ -762,7 +780,7 @@ begin
AddStatus('Warning: CHMOD not supported.', clMaroon); AddStatus('Warning: CHMOD not supported.', clMaroon);
end; end;
UploadFile(ExtractFilePath(ParamStr(0)) + 'temp\' + FileList[i], ePath + FileList[i], CopyConfig); UploadFile(ExtractFilePath(Application.ExeName) + 'temp\' + FileList[i], ePath + FileList[i], CopyConfig);
try try
if FileList[i] = 'liblist.gam' then if FileList[i] = 'liblist.gam' then
@ -805,8 +823,8 @@ begin
end; end;
AddStatus('', clBlack, False); AddStatus('', clBlack, False);
AddStatus('Cleaning up installation...', clBlack, False); AddStatus('Cleaning up installation...', clBlack, False);
if (DirectoryExists(ExtractFilePath(ParamStr(0)) + 'temp')) then if (DirectoryExists(ExtractFilePath(Application.ExeName) + 'temp')) then
DelTree(ExtractFilePath(ParamStr(0)) + 'temp'); DelTree(ExtractFilePath(Application.ExeName) + 'temp');
AddDone; AddDone;
frmMain.ggeAll.Progress := frmMain.ggeAll.MaxValue; frmMain.ggeAll.Progress := frmMain.ggeAll.MaxValue;

View File

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

View File

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

View File

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

View File

@ -60,22 +60,28 @@ public plugin_init()
public cmdSayChat(id) public cmdSayChat(id)
{ {
if (!access(id, ADMIN_CHAT)) if (!access(id, ADMIN_CHAT))
{
return PLUGIN_CONTINUE return PLUGIN_CONTINUE
}
new said[6], i = 0 new said[6], i = 0
read_argv(1, said, 5) read_argv(1, said, 5)
while (said[i] == '@') while (said[i] == '@')
{
i++ i++
}
if (!i || i > 3) if (!i || i > 3)
{
return PLUGIN_CONTINUE return PLUGIN_CONTINUE
}
new message[192], a = 0 new message[192], a = 0
read_args(message, 191) read_args(message, 191)
remove_quotes(message) remove_quotes(message)
switch(said[i]) switch (said[i])
{ {
case 'r': a = 1 case 'r': a = 1
case 'g': a = 2 case 'g': a = 2
@ -86,17 +92,32 @@ public cmdSayChat(id)
case 'o': a = 7 case 'o': a = 7
} }
new n, s = i
if (a)
{
n++
s++
}
while (said[s] && isspace(said[s]))
{
n++
s++
}
new name[32], authid[32], userid new name[32], authid[32], userid
get_user_authid(id, authid, 31) get_user_authid(id, authid, 31)
get_user_name(id, name, 31) get_user_name(id, name, 31)
userid = get_user_userid(id) userid = get_user_userid(id)
log_amx("Chat: ^"%s<%d><%s><>^" tsay ^"%s^"", name, userid, authid, message[i + 1]) log_amx("Chat: ^"%s<%d><%s><>^" tsay ^"%s^"", name, userid, authid, message[i + n])
log_message("^"%s<%d><%s><>^" triggered ^"amx_tsay^" (text ^"%s^") (color ^"%L^")", name, userid, authid, message[i + 1], "en", g_Colors[a]) log_message("^"%s<%d><%s><>^" triggered ^"amx_tsay^" (text ^"%s^") (color ^"%L^")", name, userid, authid, message[i + n], "en", g_Colors[a])
if (++g_msgChannel > 6 || g_msgChannel < 3) if (++g_msgChannel > 6 || g_msgChannel < 3)
{
g_msgChannel = 3 g_msgChannel = 3
}
new Float:verpos = g_Pos[i][1] + float(g_msgChannel) / 35.0 new Float:verpos = g_Pos[i][1] + float(g_msgChannel) / 35.0
@ -104,11 +125,11 @@ public cmdSayChat(id)
if (get_cvar_num("amx_show_activity") == 2) if (get_cvar_num("amx_show_activity") == 2)
{ {
show_hudmessage(0, "%s : %s", name, message[i + 1]) show_hudmessage(0, "%s : %s", name, message[i + n])
client_print(0, print_notify, "%s : %s", name, message[i + 1]) client_print(0, print_notify, "%s : %s", name, message[i + n])
} else { } else {
show_hudmessage(0, "%s", message[i + 1]) show_hudmessage(0, "%s", message[i + n])
client_print(0, print_notify, "%s", message[i + 1]) client_print(0, print_notify, "%s", message[i + n])
} }
return PLUGIN_HANDLED return PLUGIN_HANDLED
@ -215,6 +236,8 @@ public cmdPsay(id, level, cid)
if (!priv) if (!priv)
return PLUGIN_HANDLED return PLUGIN_HANDLED
get_user_name(priv, name, 31);
new length = strlen(name) + 1 new length = strlen(name) + 1
new message[192], name2[32], authid[32], authid2[32], userid, userid2 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_kick", "cmdKick", ADMIN_KICK, "<name or #userid> [reason]")
register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<name or #userid> <minutes> [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_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_unban", "cmdUnban", ADMIN_BAN, "<authid or ip>")
register_concmd("amx_slay", "cmdSlay", ADMIN_SLAY, "<name or #userid>") register_concmd("amx_slay", "cmdSlay", ADMIN_SLAY, "<name or #userid>")
register_concmd("amx_slap", "cmdSlap", ADMIN_SLAY, "<name or #userid> [power]") 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) 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) 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++ running++
} }
console_print(id, "%L", id, "PLUGINS_RUN", num, 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_PlayerModels[33][64]
new g_PlayerModeled[33] new g_PlayerModeled[33]
/* User Messages */
new g_msgDamage
new g_msgDeathMsg
new g_msgScoreInfo
new g_LastTrace = 0 new g_LastTrace = 0
VexdUM_Register() VexdUM_Register()
@ -40,17 +45,22 @@ VexdUM_Register()
register_forward(FM_ClientUserInfoChanged, "Hook_ClientUserInfoChanged") register_forward(FM_ClientUserInfoChanged, "Hook_ClientUserInfoChanged")
/* Global Forwards */ /* Global Forwards */
g_FwdTouch = CreateMultiForward("entity_touch", ET_STOP, FP_CELL, FP_CELL) g_FwdTouch = CreateMultiForwardEx("entity_touch", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_CELL)
g_FwdThink = CreateMultiForward("entity_think", ET_STOP, FP_CELL) g_FwdThink = CreateMultiForwardEx("entity_think", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
g_FwdSpawn = CreateMultiForward("entity_spawn", ET_STOP, FP_CELL) g_FwdSpawn = CreateMultiForwardEx("entity_spawn", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
g_FwdClientPreThink = CreateMultiForward("client_prethink", ET_IGNORE, FP_CELL) g_FwdClientPreThink = CreateMultiForwardEx("client_prethink", ET_IGNORE, FORWARD_ONLY_OLD, FP_CELL)
g_FwdClientPostThink = CreateMultiForward("client_postthink", ET_IGNORE, FP_CELL) g_FwdClientPostThink = CreateMultiForwardEx("client_postthink", ET_IGNORE, FORWARD_ONLY_OLD, FP_CELL)
g_FwdEmitSound = CreateMultiForward("emitsound", ET_STOP, FP_CELL, FP_STRING) g_FwdEmitSound = CreateMultiForwardEx("emitsound", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
g_FwdEmitAmbientSound = CreateMultiForward("emitambientsound", ET_STOP, FP_CELL, FP_STRING) g_FwdEmitAmbientSound = CreateMultiForwardEx("emitambientsound", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
g_FwdSetModel = CreateMultiForward("set_model", ET_STOP, FP_CELL, FP_STRING) g_FwdSetModel = CreateMultiForwardEx("set_model", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING)
g_FwdTraceLine = CreateMultiForward("traceline", ET_STOP, FP_CELL) g_FwdTraceLine = CreateMultiForwardEx("traceline", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
g_FwdSetCliKeyValue = CreateMultiForward("setclientkeyvalue", ET_STOP, FP_CELL, FP_STRING, FP_STRING) g_FwdSetCliKeyValue = CreateMultiForwardEx("setclientkeyvalue", ET_STOP, FORWARD_ONLY_OLD, FP_CELL, FP_STRING, FP_STRING)
g_FwdKeyValue = CreateMultiForward("keyvalue", ET_STOP, FP_CELL) g_FwdKeyValue = CreateMultiForwardEx("keyvalue", ET_STOP, FORWARD_ONLY_OLD, FP_CELL)
/* User Messages */
g_msgDamage = get_user_msgid("Damage")
g_msgDeathMsg = get_user_msgid("DeathMsg")
g_msgScoreInfo = get_user_msgid("ScoreInfo")
} }
VexdUM_Natives() VexdUM_Natives()
@ -73,6 +83,9 @@ VexdUM_Natives()
register_native("get_maxentities", "__get_maxentities") register_native("get_maxentities", "__get_maxentities")
register_native("PointContents", "__PointContents") register_native("PointContents", "__PointContents")
register_native("DispatchKeyValue", "__DispatchKeyValue") 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) if (g_ModType == MOD_CSTRIKE)
{ {
@ -102,6 +115,90 @@ GetClientKeyValue(id, const key[], value[], maxlen)
engfunc(EngFunc_InfoKeyValue, buffer, 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) public __is_entity(plid, num)
{ {
new ent = get_param(1) new ent = get_param(1)
@ -440,6 +537,57 @@ public __DispatchKeyValue(plid, num)
return 1 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 ********************* ***** HOOKS *********************

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