Compare commits
1 Commits
amxmodx-1.
...
amxmodx-1.
Author | SHA1 | Date | |
---|---|---|---|
7e6cc572cf |
24
.hgignore
24
.hgignore
@ -1,24 +0,0 @@
|
|||||||
# Binaries
|
|
||||||
\.dll$
|
|
||||||
\.exe$
|
|
||||||
\.so$
|
|
||||||
|
|
||||||
# Files generated by Visual Studio
|
|
||||||
\.aps$
|
|
||||||
\.ncb$
|
|
||||||
\.sdf$
|
|
||||||
\.suo$
|
|
||||||
\.user$
|
|
||||||
|
|
||||||
# Build directories
|
|
||||||
/Debug.*
|
|
||||||
/Release.*
|
|
||||||
/JITDebug.*
|
|
||||||
/JITRelease.*
|
|
||||||
|
|
||||||
# Files generated by Mac OS X Finder
|
|
||||||
(^|/)\.DS_Store$
|
|
||||||
|
|
||||||
# Files generated by Windows Explorer
|
|
||||||
(^|/)Desktop\.ini$
|
|
||||||
(^|/)Thumbs\.db$
|
|
@ -124,6 +124,8 @@ CmdMngr::Command* CmdMngr::getCmd(long int id, int type, int access)
|
|||||||
|
|
||||||
int CmdMngr::getCmdNum(int type, int access)
|
int CmdMngr::getCmdNum(int type, int access)
|
||||||
{
|
{
|
||||||
|
if ((access == buf_access) && (type == buf_type))
|
||||||
|
return buf_num; // once calculated don't have to be done again
|
||||||
|
|
||||||
buf_access = access;
|
buf_access = access;
|
||||||
buf_type = type;
|
buf_type = type;
|
||||||
@ -153,7 +155,7 @@ void CmdMngr::setCmdLink(CmdLink** a, Command* c, bool sorted)
|
|||||||
{
|
{
|
||||||
int i = strcmp(c->getCommand(), (*a)->cmd->getCommand());
|
int i = strcmp(c->getCommand(), (*a)->cmd->getCommand());
|
||||||
|
|
||||||
if ((i < 0) || ((i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0)))
|
if ((i < 0) || (i == 0) && (strcmp(c->getArgument(), (*a)->cmd->getArgument()) < 0))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
a = &(*a)->next;
|
a = &(*a)->next;
|
||||||
|
@ -78,7 +78,7 @@ public:
|
|||||||
inline bool matchCommandLine(const char* cmd, const char* arg) { return (!stricmp(command.c_str() + prefix, cmd + prefix) && (argument.empty() || !stricmp(argument.c_str(), arg))); }
|
inline bool matchCommandLine(const char* cmd, const char* arg) { return (!stricmp(command.c_str() + prefix, cmd + prefix) && (argument.empty() || !stricmp(argument.c_str(), arg))); }
|
||||||
inline bool matchCommand(const char* cmd) { return (!strcmp(command.c_str(), cmd)); }
|
inline bool matchCommand(const char* cmd) { return (!strcmp(command.c_str(), cmd)); }
|
||||||
inline int getFunction() const { return function; }
|
inline int getFunction() const { return function; }
|
||||||
inline bool gotAccess(int f) const { return (!flags || ((flags & f) != 0)); }
|
inline bool gotAccess(int f) const { return (!flags || ((flags & f) == flags)); }
|
||||||
inline CPluginMngr::CPlugin* getPlugin() { return plugin; }
|
inline CPluginMngr::CPlugin* getPlugin() { return plugin; }
|
||||||
inline bool isViewable() const { return listable; }
|
inline bool isViewable() const { return listable; }
|
||||||
inline int getFlags() const { return flags; }
|
inline int getFlags() const { return flags; }
|
||||||
|
@ -1,418 +0,0 @@
|
|||||||
#include <time.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include "sh_list.h"
|
|
||||||
#include "CString.h"
|
|
||||||
|
|
||||||
#include "amxmodx.h"
|
|
||||||
|
|
||||||
#include "CFlagManager.h"
|
|
||||||
|
|
||||||
void CFlagManager::SetFile(const char *Filename)
|
|
||||||
{
|
|
||||||
|
|
||||||
m_strConfigFile.assign(g_mod_name.c_str());
|
|
||||||
m_strConfigFile.append("/");
|
|
||||||
m_strConfigFile.append(get_localinfo("amxx_configsdir","addons/amxmodx/configs"));
|
|
||||||
m_strConfigFile.append("/");
|
|
||||||
m_strConfigFile.append(Filename);
|
|
||||||
|
|
||||||
|
|
||||||
CreateIfNotExist();
|
|
||||||
}
|
|
||||||
|
|
||||||
const int CFlagManager::LoadFile(const int force)
|
|
||||||
{
|
|
||||||
CheckIfDisabled();
|
|
||||||
// If we're disabled get the hell out. now.
|
|
||||||
if (m_iDisabled)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
// if we're not forcing this, and NeedToLoad says we dont have to
|
|
||||||
// then just stop
|
|
||||||
if (!force && !NeedToLoad())
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
this->Clear();
|
|
||||||
|
|
||||||
|
|
||||||
// We need to load the file
|
|
||||||
|
|
||||||
FILE *File;
|
|
||||||
|
|
||||||
File=fopen(m_strConfigFile.c_str(),"r");
|
|
||||||
|
|
||||||
if (!File)
|
|
||||||
{
|
|
||||||
AMXXLOG_Log("[AMXX] FlagManager: Cannot open file \"%s\" (FILE pointer null!)",m_strConfigFile.c_str());
|
|
||||||
return -1;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Trying to copy this almost exactly as other configs are read...
|
|
||||||
String Line;
|
|
||||||
|
|
||||||
char Command[256];
|
|
||||||
char Flags[256];
|
|
||||||
|
|
||||||
String TempLine;
|
|
||||||
while (!feof(File))
|
|
||||||
{
|
|
||||||
|
|
||||||
Line._fread(File);
|
|
||||||
|
|
||||||
char *nonconst=const_cast<char *>(Line.c_str());
|
|
||||||
|
|
||||||
|
|
||||||
// Strip out comments
|
|
||||||
while (*nonconst)
|
|
||||||
{
|
|
||||||
if (*nonconst==';') // End the line at comments
|
|
||||||
{
|
|
||||||
*nonconst='\0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nonconst++;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Command[0]='\0';
|
|
||||||
Flags[0]='\0';
|
|
||||||
|
|
||||||
// Extract the command
|
|
||||||
TempLine.assign(Line.c_str());
|
|
||||||
|
|
||||||
nonconst=const_cast<char *>(TempLine.c_str());
|
|
||||||
|
|
||||||
char *start=NULL;
|
|
||||||
char *end=NULL;
|
|
||||||
|
|
||||||
// move up line until the first ", mark this down as the start
|
|
||||||
// then find the second " and mark it down as the end
|
|
||||||
while (*nonconst!='\0')
|
|
||||||
{
|
|
||||||
if (*nonconst=='"')
|
|
||||||
{
|
|
||||||
if (start==NULL)
|
|
||||||
{
|
|
||||||
start=nonconst+1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
end=nonconst;
|
|
||||||
goto done_with_command;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
nonconst++;
|
|
||||||
}
|
|
||||||
done_with_command:
|
|
||||||
|
|
||||||
// invalid line?
|
|
||||||
if (start==NULL || end==NULL)
|
|
||||||
{
|
|
||||||
// TODO: maybe warn for an invalid non-commented line?
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
*end='\0';
|
|
||||||
|
|
||||||
strncpy(Command,start,sizeof(Command)-1);
|
|
||||||
|
|
||||||
|
|
||||||
// Now do the same thing for the flags
|
|
||||||
nonconst=++end;
|
|
||||||
|
|
||||||
start=NULL;
|
|
||||||
end=NULL;
|
|
||||||
|
|
||||||
// move up line until the first ", mark this down as the start
|
|
||||||
// then find the second " and mark it down as the end
|
|
||||||
while (*nonconst!='\0')
|
|
||||||
{
|
|
||||||
if (*nonconst=='"')
|
|
||||||
{
|
|
||||||
if (start==NULL)
|
|
||||||
{
|
|
||||||
start=nonconst+1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
end=nonconst;
|
|
||||||
goto done_with_flags;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
nonconst++;
|
|
||||||
}
|
|
||||||
done_with_flags:
|
|
||||||
// invalid line?
|
|
||||||
if (start==NULL || end==NULL)
|
|
||||||
{
|
|
||||||
// TODO: maybe warn for an invalid non-commented line?
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
*end='\0';
|
|
||||||
|
|
||||||
strncpy(Flags,start,sizeof(Flags)-1);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//if (!isalnum(*Command))
|
|
||||||
if (*Command == '"' ||
|
|
||||||
*Command == '\0')
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Done sucking the command and flags out of the line
|
|
||||||
// now insert this command into the linked list
|
|
||||||
|
|
||||||
AddFromFile(const_cast<const char*>(&Command[0]),&Flags[0]);
|
|
||||||
|
|
||||||
nonconst=const_cast<char *>(Line.c_str());
|
|
||||||
*nonconst='\0';
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
fclose(File);
|
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This gets called from LoadFile
|
|
||||||
* Do NOT flag the entries as NeedToWrite
|
|
||||||
* No comment is passed from the file because
|
|
||||||
* this should never get written
|
|
||||||
*/
|
|
||||||
void CFlagManager::AddFromFile(const char *Command, const char *Flags)
|
|
||||||
{
|
|
||||||
|
|
||||||
CFlagEntry *Entry=new CFlagEntry;
|
|
||||||
|
|
||||||
Entry->SetName(Command);
|
|
||||||
Entry->SetFlags(Flags);
|
|
||||||
|
|
||||||
// Link it
|
|
||||||
m_FlagList.push_back(Entry);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void CFlagManager::LookupOrAdd(const char *Command, int &Flags, AMX *Plugin)
|
|
||||||
{
|
|
||||||
if (m_iDisabled) // if disabled in core.ini stop
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int TempFlags=Flags;
|
|
||||||
if (TempFlags==-1)
|
|
||||||
{
|
|
||||||
TempFlags=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<CFlagEntry *>::iterator iter;
|
|
||||||
List<CFlagEntry *>::iterator end;
|
|
||||||
|
|
||||||
iter=m_FlagList.begin();
|
|
||||||
end=m_FlagList.end();
|
|
||||||
|
|
||||||
while (iter!=end)
|
|
||||||
{
|
|
||||||
if (strcmp((*iter)->GetName()->c_str(),Command)==0)
|
|
||||||
{
|
|
||||||
CFlagEntry *Entry=(*iter);
|
|
||||||
|
|
||||||
if (Entry->IsHidden()) // "!" flag, exclude this function
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Found, byref the new flags
|
|
||||||
Flags=Entry->Flags();
|
|
||||||
|
|
||||||
// Move it to the back of the list for faster lookup for the rest
|
|
||||||
m_FlagList.erase(iter);
|
|
||||||
|
|
||||||
m_FlagList.push_back(Entry);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
iter++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// was not found, add it
|
|
||||||
|
|
||||||
CFlagEntry *Entry=new CFlagEntry;
|
|
||||||
|
|
||||||
Entry->SetName(Command);
|
|
||||||
Entry->SetFlags(TempFlags);
|
|
||||||
|
|
||||||
if (Plugin)
|
|
||||||
{
|
|
||||||
CPluginMngr::CPlugin* a = g_plugins.findPluginFast(Plugin);
|
|
||||||
|
|
||||||
if (a)
|
|
||||||
{
|
|
||||||
Entry->SetComment(a->getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This entry was added from a register_* native
|
|
||||||
// it needs to be written during map change
|
|
||||||
Entry->SetNeedWritten(1);
|
|
||||||
|
|
||||||
// Link it
|
|
||||||
m_FlagList.push_back(Entry);
|
|
||||||
|
|
||||||
}
|
|
||||||
void CFlagManager::WriteCommands(void)
|
|
||||||
{
|
|
||||||
List<CFlagEntry *>::iterator iter;
|
|
||||||
List<CFlagEntry *>::iterator end;
|
|
||||||
FILE *File;
|
|
||||||
int NeedToRead=0;
|
|
||||||
|
|
||||||
// First off check the modified time of this file
|
|
||||||
// if it matches the stored modified time, then update
|
|
||||||
// after we write so we do not re-read next map
|
|
||||||
struct stat TempStat;
|
|
||||||
|
|
||||||
stat(m_strConfigFile.c_str(),&TempStat);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (TempStat.st_mtime != m_Stat.st_mtime)
|
|
||||||
{
|
|
||||||
NeedToRead=1;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
File=fopen(m_strConfigFile.c_str(),"a");
|
|
||||||
|
|
||||||
if (!File)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
iter=m_FlagList.begin();
|
|
||||||
end=m_FlagList.end();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
while (iter!=end)
|
|
||||||
{
|
|
||||||
if ((*iter)->NeedWritten())
|
|
||||||
{
|
|
||||||
if ((*iter)->GetComment()->size())
|
|
||||||
{
|
|
||||||
fprintf(File,"\"%s\" \t\"%s\" ; %s\n",(*iter)->GetName()->c_str(),(*iter)->GetFlags()->c_str(),(*iter)->GetComment()->c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fprintf(File,"\"%s\" \t\"%s\"\n",(*iter)->GetName()->c_str(),(*iter)->GetFlags()->c_str());
|
|
||||||
}
|
|
||||||
(*iter)->SetNeedWritten(0);
|
|
||||||
}
|
|
||||||
++iter;
|
|
||||||
};
|
|
||||||
|
|
||||||
fclose(File);
|
|
||||||
|
|
||||||
|
|
||||||
// If NeedToRead was 0, then update the timestamp
|
|
||||||
// that was saved so we do not re-read this file
|
|
||||||
// next map
|
|
||||||
if (!NeedToRead)
|
|
||||||
{
|
|
||||||
stat(m_strConfigFile.c_str(),&TempStat);
|
|
||||||
|
|
||||||
m_Stat.st_mtime=TempStat.st_mtime;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int CFlagManager::ShouldIAddThisCommand(const AMX *amx, const cell *params, const char *cmdname) const
|
|
||||||
{
|
|
||||||
|
|
||||||
// If flagmanager is disabled then ignore this
|
|
||||||
if (m_iDisabled)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// If 5th param exists it was compiled after this change was made
|
|
||||||
// if it does not exist, try our logic at the end of this function
|
|
||||||
// 5th param being > 0 means explicit yes
|
|
||||||
// < 0 means auto detect (default is -1), treat it like there was no 5th param
|
|
||||||
// 0 means explicit no
|
|
||||||
|
|
||||||
if ((params[0] / sizeof(cell)) >= 5)
|
|
||||||
{
|
|
||||||
if (params[5]>0) // This command was explicitly told to be included
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (params[5]==0) // this command was explicitly told to NOT be used
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// auto detect if we should use this command
|
|
||||||
|
|
||||||
// if command access is -1 (default, not set to ADMIN_ALL or any other access), then no
|
|
||||||
if (params[3]==-1)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// if command is (or starts with) "say", then no
|
|
||||||
if (strncmp(cmdname,"say",3)==0)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// else use it
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void CFlagManager::Clear(void)
|
|
||||||
{
|
|
||||||
List<CFlagEntry *>::iterator iter;
|
|
||||||
List<CFlagEntry *>::iterator end;
|
|
||||||
|
|
||||||
iter=m_FlagList.begin();
|
|
||||||
end=m_FlagList.end();
|
|
||||||
|
|
||||||
while (iter!=end)
|
|
||||||
{
|
|
||||||
delete (*iter);
|
|
||||||
|
|
||||||
++iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_FlagList.clear();
|
|
||||||
};
|
|
||||||
|
|
||||||
void CFlagManager::CheckIfDisabled(void)
|
|
||||||
{
|
|
||||||
if (atoi(get_localinfo("disableflagman","0"))==0)
|
|
||||||
{
|
|
||||||
m_iDisabled=0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_iDisabled=1;
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,218 +0,0 @@
|
|||||||
#ifndef CFLAGMANAGER_H
|
|
||||||
#define CFLAGMANAGER_H
|
|
||||||
|
|
||||||
#include <time.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include "sh_list.h"
|
|
||||||
#include "CString.h"
|
|
||||||
|
|
||||||
#include "amxmodx.h"
|
|
||||||
|
|
||||||
class CFlagEntry
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
String m_strName; // command name ("amx_slap")
|
|
||||||
String m_strFlags; // string flags ("a","b")
|
|
||||||
String m_strComment; // comment to write ("; admincmd.amxx")
|
|
||||||
int m_iFlags; // bitmask flags
|
|
||||||
int m_iNeedWritten; // write this command on map change?
|
|
||||||
int m_iHidden; // set to 1 when the command is set to "!" access in
|
|
||||||
// the .ini file: this means do not process this command
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
CFlagEntry()
|
|
||||||
{
|
|
||||||
m_iNeedWritten=0;
|
|
||||||
m_iFlags=0;
|
|
||||||
m_iHidden=0;
|
|
||||||
};
|
|
||||||
const int NeedWritten(void) const
|
|
||||||
{
|
|
||||||
return m_iNeedWritten;
|
|
||||||
};
|
|
||||||
|
|
||||||
void SetNeedWritten(const int i=1)
|
|
||||||
{
|
|
||||||
m_iNeedWritten=i;
|
|
||||||
};
|
|
||||||
|
|
||||||
const String *GetName(void) const
|
|
||||||
{
|
|
||||||
return &m_strName;
|
|
||||||
};
|
|
||||||
|
|
||||||
const String *GetFlags(void) const
|
|
||||||
{
|
|
||||||
return &m_strFlags;
|
|
||||||
};
|
|
||||||
const String *GetComment(void) const
|
|
||||||
{
|
|
||||||
return &m_strComment;
|
|
||||||
};
|
|
||||||
|
|
||||||
const int Flags(void) const
|
|
||||||
{
|
|
||||||
return m_iFlags;
|
|
||||||
};
|
|
||||||
|
|
||||||
void SetName(const char *data)
|
|
||||||
{
|
|
||||||
m_strName.assign(data);
|
|
||||||
};
|
|
||||||
void SetFlags(const char *flags)
|
|
||||||
{
|
|
||||||
// If this is a "!" entry then stop
|
|
||||||
if (flags && flags[0]=='!')
|
|
||||||
{
|
|
||||||
SetHidden(1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_strFlags.assign(flags);
|
|
||||||
m_iFlags=UTIL_ReadFlags(flags);
|
|
||||||
};
|
|
||||||
void SetFlags(const int flags)
|
|
||||||
{
|
|
||||||
m_iFlags=flags;
|
|
||||||
|
|
||||||
char FlagsString[32];
|
|
||||||
UTIL_GetFlags(FlagsString, flags);
|
|
||||||
|
|
||||||
m_strFlags.assign(FlagsString);
|
|
||||||
};
|
|
||||||
void SetComment(const char *comment)
|
|
||||||
{
|
|
||||||
m_strComment.assign(comment);
|
|
||||||
};
|
|
||||||
void SetHidden(int i=1)
|
|
||||||
{
|
|
||||||
m_iHidden=i;
|
|
||||||
};
|
|
||||||
int IsHidden(void) const
|
|
||||||
{
|
|
||||||
return m_iHidden;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class CFlagManager
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
List<CFlagEntry *> m_FlagList;
|
|
||||||
String m_strConfigFile;
|
|
||||||
struct stat m_Stat;
|
|
||||||
int m_iForceRead;
|
|
||||||
int m_iDisabled;
|
|
||||||
|
|
||||||
|
|
||||||
void CreateIfNotExist(void) const
|
|
||||||
{
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
fp=fopen(m_strConfigFile.c_str(),"r");
|
|
||||||
|
|
||||||
if (!fp)
|
|
||||||
{
|
|
||||||
// File does not exist, create the header
|
|
||||||
fp=fopen(m_strConfigFile.c_str(),"a");
|
|
||||||
|
|
||||||
if (fp)
|
|
||||||
{
|
|
||||||
fprintf(fp,"; This file will store the commands used by plugins, and their access level\n");
|
|
||||||
fprintf(fp,"; To change the access of a command, edit the flags beside it and then\n");
|
|
||||||
fprintf(fp,"; change the server's map.\n;\n");
|
|
||||||
fprintf(fp,"; Example: If I wanted to change the amx_slap access to require\n");
|
|
||||||
fprintf(fp,"; RCON access (flag \"l\") I would change this:\n");
|
|
||||||
fprintf(fp,"; \"amx_slap\" \"e\" ; admincmd.amxx\n");
|
|
||||||
fprintf(fp,"; To this:\n");
|
|
||||||
fprintf(fp,"; \"amx_slap\" \"l\" ; admincmd.amxx\n;\n");
|
|
||||||
fprintf(fp,"; To disable a specific command from being used with the command manager\n");
|
|
||||||
fprintf(fp,"; and to only use the plugin-specified access set the flag to \"!\"\n;\n");
|
|
||||||
fprintf(fp,"; NOTE: The plugin name at the end is just for reference to what plugin\n");
|
|
||||||
fprintf(fp,"; uses what commands. It is ignored.\n\n");
|
|
||||||
fclose(fp);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/**
|
|
||||||
* Returns 1 if the timestamp for the file is different than the one we have loaded
|
|
||||||
* 0 otherwise
|
|
||||||
*/
|
|
||||||
inline int NeedToLoad(void)
|
|
||||||
{
|
|
||||||
struct stat TempStat;
|
|
||||||
|
|
||||||
stat(m_strConfigFile.c_str(),&TempStat);
|
|
||||||
|
|
||||||
// If the modified timestamp does not match the stored
|
|
||||||
// timestamp than we need to re-read this file.
|
|
||||||
// Otherwise, ignore the file.
|
|
||||||
if (TempStat.st_mtime != m_Stat.st_mtime)
|
|
||||||
{
|
|
||||||
// Save down the modified timestamp
|
|
||||||
m_Stat.st_mtime=TempStat.st_mtime;
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
|
|
||||||
CFlagManager()
|
|
||||||
{
|
|
||||||
memset(&m_Stat,0x0,sizeof(struct stat));
|
|
||||||
m_iDisabled=0;
|
|
||||||
m_iForceRead=0;
|
|
||||||
};
|
|
||||||
~CFlagManager()
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the filename in relation to amxmodx/configs
|
|
||||||
*/
|
|
||||||
void SetFile(const char *Filename="cmdaccess.ini");
|
|
||||||
|
|
||||||
const char *GetFile(void) const { return m_strConfigFile.c_str(); };
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse the file, and load all entries
|
|
||||||
* Returns 1 on success, 0 on refusal (no need to), and -1 on error
|
|
||||||
*/
|
|
||||||
const int LoadFile(const int force=0);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the command exists in the list
|
|
||||||
* If it does, it byrefs the flags for it
|
|
||||||
* If it does not, it adds it to the list
|
|
||||||
* These are added from register_*cmd calls
|
|
||||||
*/
|
|
||||||
void LookupOrAdd(const char *Command, int &Flags, AMX *Plugin);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write the commands back to the file
|
|
||||||
*/
|
|
||||||
void WriteCommands(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add this straight from the cmdaccess.ini file
|
|
||||||
*/
|
|
||||||
void AddFromFile(const char *Command, const char *Flags);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if this command should be added to flagman or not
|
|
||||||
* This is only checked when adding commands from the register_* natives
|
|
||||||
* If an admin manually adds a command to cmdaccess.ini it will be used
|
|
||||||
* regardless of whatever this function would say should be done with it
|
|
||||||
*/
|
|
||||||
int ShouldIAddThisCommand(const AMX *amx, const cell *params, const char *cmdname) const;
|
|
||||||
|
|
||||||
void Clear(void);
|
|
||||||
|
|
||||||
void CheckIfDisabled(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CFLAGMANAGER_H
|
|
@ -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, int fwd_type)
|
CForward::CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam *paramTypes)
|
||||||
{
|
{
|
||||||
m_FuncName = name;
|
m_FuncName = name;
|
||||||
m_ExecType = et;
|
m_ExecType = et;
|
||||||
@ -47,13 +47,6 @@ 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;
|
||||||
@ -130,7 +123,7 @@ cell CForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// exec
|
// exec
|
||||||
cell retVal = 0;
|
cell retVal;
|
||||||
#if defined BINLOG_ENABLED
|
#if defined BINLOG_ENABLED
|
||||||
g_BinLog.WriteOp(BinLog_CallPubFunc, (*iter).pPlugin->getId(), iter->func);
|
g_BinLog.WriteOp(BinLog_CallPubFunc, (*iter).pPlugin->getId(), iter->func);
|
||||||
#endif
|
#endif
|
||||||
@ -226,8 +219,6 @@ 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)
|
||||||
@ -238,8 +229,6 @@ 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)
|
||||||
@ -252,15 +241,13 @@ 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 || m_ToDelete)
|
if (!m_HasFunc)
|
||||||
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();
|
||||||
@ -362,20 +349,16 @@ 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 fwd_type)
|
int CForwardMngr::registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam * paramTypes)
|
||||||
{
|
{
|
||||||
int retVal = m_Forwards.size() << 1;
|
int retVal = m_Forwards.size() << 1;
|
||||||
CForward *tmp = new CForward(funcName, et, numParams, paramTypes, fwd_type);
|
CForward *tmp = new CForward(funcName, et, numParams, paramTypes);
|
||||||
|
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
{
|
|
||||||
return -1; // should be invalid
|
return -1; // should be invalid
|
||||||
}
|
|
||||||
|
|
||||||
m_Forwards.push_back(tmp);
|
m_Forwards.push_back(tmp);
|
||||||
|
|
||||||
@ -460,20 +443,7 @@ bool CForwardMngr::isIdValid(int id) const
|
|||||||
|
|
||||||
cell CForwardMngr::executeForwards(int id, cell *params)
|
cell CForwardMngr::executeForwards(int id, cell *params)
|
||||||
{
|
{
|
||||||
int retVal;
|
int retVal = (id & 1) ? m_SPForwards[id >> 1]->execute(params, m_TmpArrays) : m_Forwards[id >> 1]->execute(params, m_TmpArrays);
|
||||||
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;
|
||||||
@ -543,63 +513,20 @@ void CForwardMngr::unregisterSPForward(int id)
|
|||||||
{
|
{
|
||||||
//make sure the id is valid
|
//make sure the id is valid
|
||||||
if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree)
|
if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree)
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
CSPForward *fwd = m_SPForwards.at(id >> 1);
|
m_SPForwards.at(id >> 1)->isFree = true;
|
||||||
|
|
||||||
if (fwd->m_InExec)
|
|
||||||
{
|
|
||||||
fwd->m_ToDelete = true;
|
|
||||||
} else {
|
|
||||||
fwd->isFree = true;
|
|
||||||
m_FreeSPForwards.push(id);
|
m_FreeSPForwards.push(id);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int CForwardMngr::duplicateSPForward(int id)
|
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num)
|
||||||
{
|
|
||||||
if (!isIdValid(id) || m_SPForwards.at(id >> 1)->isFree)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
CSPForward *fwd = m_SPForwards.at(id >> 1);
|
|
||||||
|
|
||||||
return registerSPForward(fwd->m_Func, fwd->m_Amx, fwd->m_NumParams, fwd->m_ParamTypes);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CForwardMngr::isSameSPForward(int id1, int id2)
|
|
||||||
{
|
|
||||||
if (!isIdValid(id1) || !isIdValid(id2))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
CSPForward *fwd1 = m_SPForwards.at(id1 >> 1);
|
|
||||||
CSPForward *fwd2 = m_SPForwards.at(id2 >> 1);
|
|
||||||
|
|
||||||
if (fwd1->isFree || fwd2->isFree)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((fwd1->m_Amx == fwd2->m_Amx)
|
|
||||||
&& (fwd1->m_Func == fwd2->m_Func)
|
|
||||||
&& (fwd1->m_NumParams == fwd2->m_NumParams));
|
|
||||||
}
|
|
||||||
|
|
||||||
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, fwd_type);
|
return g_forwards.registerForward(funcName, et, num, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
int registerForward(const char *funcName, ForwardExecType et, ...)
|
int registerForward(const char *funcName, ForwardExecType et, ...)
|
||||||
|
@ -51,10 +51,6 @@
|
|||||||
|
|
||||||
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
|
||||||
@ -111,7 +107,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, int fwd_type=FORWARD_ALL);
|
CForward(const char *name, ForwardExecType et, int numParams, const ForwardParam * paramTypes);
|
||||||
CForward() {} // leaves everything unitialized'
|
CForward() {} // leaves everything unitialized'
|
||||||
|
|
||||||
cell execute(cell *params, ForwardPreparedArray *preparedArrays);
|
cell execute(cell *params, ForwardPreparedArray *preparedArrays);
|
||||||
@ -143,7 +139,7 @@ public:
|
|||||||
// Single plugin forward
|
// Single plugin forward
|
||||||
class CSPForward
|
class CSPForward
|
||||||
{
|
{
|
||||||
friend class CForwardMngr;
|
const char *m_FuncName;
|
||||||
int m_NumParams;
|
int m_NumParams;
|
||||||
|
|
||||||
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
|
ForwardParam m_ParamTypes[FORWARD_MAX_PARAMS];
|
||||||
@ -152,8 +148,6 @@ 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;
|
||||||
@ -209,15 +203,13 @@ public:
|
|||||||
|
|
||||||
// Interface
|
// Interface
|
||||||
// Register normal forward
|
// Register normal forward
|
||||||
int registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam *paramTypes, int fwd_type=FORWARD_ALL);
|
int registerForward(const char *funcName, ForwardExecType et, int numParams, const ForwardParam *paramTypes);
|
||||||
// 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);
|
||||||
|
|
||||||
// Unregister single plugin forward
|
// Unregister single plugin forward
|
||||||
void unregisterSPForward(int id);
|
void unregisterSPForward(int id);
|
||||||
int duplicateSPForward(int id);
|
|
||||||
int isSameSPForward(int id1, int id2);
|
|
||||||
|
|
||||||
// execute forward
|
// execute forward
|
||||||
cell executeForwards(int id, cell *params);
|
cell executeForwards(int id, cell *params);
|
||||||
@ -235,7 +227,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 fwd_type=FORWARD_ALL);
|
int registerForwardC(const char *funcName, ForwardExecType et, cell *list, size_t num);
|
||||||
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, ...);
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include "format.h"
|
#include "format.h"
|
||||||
#include "amxmod_compat.h"
|
#include "amxmod_compat.h"
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
#define _snprintf snprintf
|
#define _snprintf snprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ size_t CLangMngr::strip(char *str, char *newstr, bool makelower)
|
|||||||
int flag = 0;
|
int flag = 0;
|
||||||
size_t strln = strlen(str);
|
size_t strln = strlen(str);
|
||||||
|
|
||||||
for (i = strln - 1; i < strln; i--)
|
for (i = strln - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (str[i] == '\n' || str[i] == ' ' || str[i] == '\t')
|
if (str[i] == '\n' || str[i] == ' ' || str[i] == '\t')
|
||||||
{
|
{
|
||||||
|
@ -111,7 +111,7 @@ void LogEventsMngr::CLogEvent::registerFilter(char* filter)
|
|||||||
filters = new LogCond(cmp->pos, aa, filters);
|
filters = new LogCond(cmp->pos, aa, filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogEventsMngr::setLogString(const char* frmt, va_list& vaptr)
|
void LogEventsMngr::setLogString(char* frmt, va_list& vaptr)
|
||||||
{
|
{
|
||||||
++logCounter;
|
++logCounter;
|
||||||
int len = vsnprintf(logString, 255, frmt, vaptr);
|
int len = vsnprintf(logString, 255, frmt, vaptr);
|
||||||
@ -128,7 +128,7 @@ void LogEventsMngr::setLogString(const char* frmt, va_list& vaptr)
|
|||||||
logArgc = 0;
|
logArgc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogEventsMngr::setLogString(const char* frmt, ...)
|
void LogEventsMngr::setLogString(char* frmt, ...)
|
||||||
{
|
{
|
||||||
++logCounter;
|
++logCounter;
|
||||||
va_list logArgPtr;
|
va_list logArgPtr;
|
||||||
|
@ -141,8 +141,8 @@ public:
|
|||||||
CLogEvent* registerLogEvent(CPluginMngr::CPlugin* plugin, int func, int pos);
|
CLogEvent* registerLogEvent(CPluginMngr::CPlugin* plugin, int func, int pos);
|
||||||
inline bool logEventsExist() { return arelogevents; }
|
inline bool logEventsExist() { return arelogevents; }
|
||||||
|
|
||||||
void setLogString(const char* frmt, va_list& vaptr);
|
void setLogString(char* frmt, va_list& vaptr);
|
||||||
void setLogString(const char* frmt, ...);
|
void setLogString(char* frmt, ...);
|
||||||
void parseLogString();
|
void parseLogString();
|
||||||
void executeLogEvents();
|
void executeLogEvents();
|
||||||
|
|
||||||
|
@ -35,15 +35,13 @@
|
|||||||
// *****************************************************
|
// *****************************************************
|
||||||
// class MenuMngr
|
// class MenuMngr
|
||||||
// *****************************************************
|
// *****************************************************
|
||||||
MenuMngr::MenuCommand::MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f, bool new_menu)
|
MenuMngr::MenuCommand::MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f)
|
||||||
{
|
{
|
||||||
plugin = a;
|
plugin = a;
|
||||||
keys = k;
|
keys = k;
|
||||||
menuid = mi;
|
menuid = mi;
|
||||||
next = 0;
|
|
||||||
is_new_menu = new_menu;
|
|
||||||
|
|
||||||
function = f;
|
function = f;
|
||||||
|
next = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuMngr::~MenuMngr()
|
MenuMngr::~MenuMngr()
|
||||||
@ -63,47 +61,66 @@ int MenuMngr::findMenuId(const char* name, AMX* amx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MenuMngr::removeMenuId(int id)
|
||||||
|
{
|
||||||
|
MenuIdEle *n = headid;
|
||||||
|
MenuIdEle *l = NULL;
|
||||||
|
while (n)
|
||||||
|
{
|
||||||
|
if (n->id == id)
|
||||||
|
{
|
||||||
|
if (l)
|
||||||
|
l->next = n->next;
|
||||||
|
else
|
||||||
|
headid = n->next;
|
||||||
|
delete n;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
l = n;
|
||||||
|
n = n->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
MenuCommand *c = headcmd;
|
||||||
|
MenuCommand *lc = NULL;
|
||||||
|
MenuCommand *tmp;
|
||||||
|
while (c)
|
||||||
|
{
|
||||||
|
if (c->menuid == id)
|
||||||
|
{
|
||||||
|
if (lc)
|
||||||
|
lc->next = c->next;
|
||||||
|
else
|
||||||
|
headcmd = c->next;
|
||||||
|
tmp = c->next;
|
||||||
|
delete c;
|
||||||
|
c = tmp;
|
||||||
|
} else {
|
||||||
|
lc = c;
|
||||||
|
c = c->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int MenuMngr::registerMenuId(const char* n, AMX* a)
|
int MenuMngr::registerMenuId(const char* n, AMX* a)
|
||||||
{
|
{
|
||||||
int id = findMenuId(n, a);
|
int id = findMenuId(n, a);
|
||||||
|
|
||||||
if (id)
|
if (id)
|
||||||
{
|
|
||||||
return id;
|
return id;
|
||||||
}
|
|
||||||
|
|
||||||
headid = new MenuIdEle(n, a, headid);
|
headid = new MenuIdEle(n, a, headid);
|
||||||
|
|
||||||
|
if (!headid)
|
||||||
|
return 0; // :TODO: Better error report
|
||||||
|
|
||||||
return headid->id;
|
return headid->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuMngr::registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f, bool from_new_menu)
|
void MenuMngr::registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f)
|
||||||
{
|
{
|
||||||
MenuCommand **temp = &headcmd;
|
MenuCommand** temp = &headcmd;
|
||||||
if (from_new_menu)
|
while (*temp) temp = &(*temp)->next;
|
||||||
{
|
*temp = new MenuCommand(a, mi, k, f);
|
||||||
MenuCommand *ptr;
|
|
||||||
while (*temp)
|
|
||||||
{
|
|
||||||
ptr = *temp;
|
|
||||||
if (ptr->is_new_menu
|
|
||||||
&& ptr->plugin == a
|
|
||||||
&& ptr->menuid == mi)
|
|
||||||
{
|
|
||||||
if (g_forwards.isSameSPForward(ptr->function, f))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
temp = &(*temp)->next;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
while (*temp)
|
|
||||||
{
|
|
||||||
temp = &(*temp)->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*temp = new MenuCommand(a, mi, k, f, from_new_menu);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuMngr::clear()
|
void MenuMngr::clear()
|
||||||
@ -123,13 +140,4 @@ 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;
|
||||||
|
@ -66,34 +66,29 @@ private:
|
|||||||
int menuid;
|
int menuid;
|
||||||
int keys;
|
int keys;
|
||||||
int function;
|
int function;
|
||||||
int is_new_menu;
|
|
||||||
|
|
||||||
MenuCommand* next;
|
MenuCommand* next;
|
||||||
MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f, bool new_menu=false);
|
MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f);
|
||||||
public:
|
public:
|
||||||
inline int getFunction() { return function; }
|
inline int getFunction() { return function; }
|
||||||
inline CPluginMngr::CPlugin* getPlugin() { return plugin; }
|
inline CPluginMngr::CPlugin* getPlugin() { return plugin; }
|
||||||
inline bool matchCommand(int m, int k)
|
inline bool matchCommand(int m, int k) { return ((m == menuid) && (keys & k)); }
|
||||||
{
|
|
||||||
return ((m == menuid) && (keys & k));
|
|
||||||
}
|
|
||||||
} *headcmd;
|
} *headcmd;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MenuMngr() : m_watch_iter(end())
|
MenuMngr() { headid = 0; headcmd = 0; }
|
||||||
{ headid = NULL; headcmd = NULL; }
|
|
||||||
~MenuMngr();
|
~MenuMngr();
|
||||||
|
|
||||||
// Interface
|
// Interface
|
||||||
|
|
||||||
int findMenuId(const char* name, AMX* a = 0);
|
int findMenuId(const char* name, AMX* a = 0);
|
||||||
int registerMenuId(const char* n, AMX* a);
|
int registerMenuId(const char* n, AMX* a);
|
||||||
void registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f, bool from_new_menu=false);
|
void removeMenuId(int id);
|
||||||
|
void registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f);
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
class iterator
|
class iterator
|
||||||
{
|
{
|
||||||
friend class MenuMngr;
|
|
||||||
MenuCommand* a;
|
MenuCommand* a;
|
||||||
public:
|
public:
|
||||||
iterator(MenuCommand*aa) : a(aa) {}
|
iterator(MenuCommand*aa) : a(aa) {}
|
||||||
@ -106,13 +101,6 @@ 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;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern MenuMngr g_menucmds;
|
|
||||||
|
|
||||||
#endif //MENUS_H
|
#endif //MENUS_H
|
||||||
|
@ -40,6 +40,8 @@ void CPlayer::Init(edict_t* e, int i)
|
|||||||
pEdict = e;
|
pEdict = e;
|
||||||
initialized = false;
|
initialized = false;
|
||||||
ingame = false;
|
ingame = false;
|
||||||
|
bot_value = false;
|
||||||
|
bot_cached = false;
|
||||||
authorized = false;
|
authorized = false;
|
||||||
|
|
||||||
current = 0;
|
current = 0;
|
||||||
@ -87,6 +89,8 @@ void CPlayer::Disconnect()
|
|||||||
}
|
}
|
||||||
queries.clear();
|
queries.clear();
|
||||||
|
|
||||||
|
bot_value = false;
|
||||||
|
bot_cached = false;
|
||||||
menu = 0;
|
menu = 0;
|
||||||
newmenu = -1;
|
newmenu = -1;
|
||||||
}
|
}
|
||||||
@ -112,6 +116,8 @@ int CPlayer::NextHUDChannel()
|
|||||||
|
|
||||||
bool CPlayer::Connect(const char* connectname, const char* ipaddress)
|
bool CPlayer::Connect(const char* connectname, const char* ipaddress)
|
||||||
{
|
{
|
||||||
|
bot_value = false;
|
||||||
|
bot_cached = false;
|
||||||
name.assign(connectname);
|
name.assign(connectname);
|
||||||
ip.assign(ipaddress);
|
ip.assign(ipaddress);
|
||||||
time = gpGlobals->time;
|
time = gpGlobals->time;
|
||||||
|
104
amxmodx/CMisc.h
104
amxmodx/CMisc.h
@ -84,6 +84,8 @@ public:
|
|||||||
|
|
||||||
bool initialized;
|
bool initialized;
|
||||||
bool ingame;
|
bool ingame;
|
||||||
|
bool bot_cached;
|
||||||
|
bool bot_value;
|
||||||
bool authorized;
|
bool authorized;
|
||||||
bool vgui;
|
bool vgui;
|
||||||
|
|
||||||
@ -118,6 +120,7 @@ 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;
|
||||||
@ -130,18 +133,24 @@ public:
|
|||||||
|
|
||||||
inline bool IsBot()
|
inline bool IsBot()
|
||||||
{
|
{
|
||||||
if ((pEdict->v.flags & FL_FAKECLIENT) == FL_FAKECLIENT)
|
if (!bot_cached)
|
||||||
{
|
{
|
||||||
return true;
|
bot_value = false;
|
||||||
}
|
if (pEdict->v.flags & FL_FAKECLIENT)
|
||||||
|
{
|
||||||
|
bot_value = true;
|
||||||
|
bot_cached = true;
|
||||||
|
} else {
|
||||||
const char *auth = GETPLAYERAUTHID(pEdict);
|
const char *auth = GETPLAYERAUTHID(pEdict);
|
||||||
if (auth && (strcmp(auth, "BOT") == 0))
|
if (auth && (strcmp(auth, "BOT") == 0))
|
||||||
{
|
{
|
||||||
return true;
|
bot_value = true;
|
||||||
|
bot_cached = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return bot_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool IsAlive()
|
inline bool IsAlive()
|
||||||
@ -296,87 +305,4 @@ public:
|
|||||||
inline bool isNewTeam() { return newTeam ? true : false; }
|
inline bool isNewTeam() { return newTeam ? true : false; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class CAdminData
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
cell m_AuthData[44];
|
|
||||||
cell m_Password[32];
|
|
||||||
cell m_Flags;
|
|
||||||
cell m_Access;
|
|
||||||
public:
|
|
||||||
|
|
||||||
CAdminData()
|
|
||||||
{
|
|
||||||
m_AuthData[0]=0;
|
|
||||||
m_Password[0]=0;
|
|
||||||
m_Flags=0;
|
|
||||||
m_Access=0;
|
|
||||||
};
|
|
||||||
|
|
||||||
void SetAccess(cell Access)
|
|
||||||
{
|
|
||||||
m_Access=Access;
|
|
||||||
};
|
|
||||||
cell GetAccess(void) const
|
|
||||||
{
|
|
||||||
return m_Access;
|
|
||||||
};
|
|
||||||
|
|
||||||
void SetFlags(cell Flags)
|
|
||||||
{
|
|
||||||
m_Flags=Flags;
|
|
||||||
};
|
|
||||||
cell GetFlags(void) const
|
|
||||||
{
|
|
||||||
return m_Flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
void SetAuthID(const cell *Input)
|
|
||||||
{
|
|
||||||
unsigned int i=0;
|
|
||||||
while (i<sizeof(m_AuthData)-1)
|
|
||||||
{
|
|
||||||
if ((m_AuthData[i++]=*Input++)==0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_AuthData[arraysize(m_AuthData)-1]=0;
|
|
||||||
|
|
||||||
};
|
|
||||||
const cell *GetAuthID(void) const
|
|
||||||
{
|
|
||||||
return &m_AuthData[0];
|
|
||||||
};
|
|
||||||
|
|
||||||
void SetPass(const cell *Input)
|
|
||||||
{
|
|
||||||
unsigned int i=0;
|
|
||||||
while (i<sizeof(m_Password)-1)
|
|
||||||
{
|
|
||||||
if ((m_Password[i++]=*Input++)==0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Password[arraysize(m_Password)-1]=0;
|
|
||||||
|
|
||||||
};
|
|
||||||
const cell *GetPass(void) const
|
|
||||||
{
|
|
||||||
return &m_Password[0];
|
|
||||||
};
|
|
||||||
|
|
||||||
CAdminData & operator = (const CAdminData &src)
|
|
||||||
{
|
|
||||||
this->SetAccess(src.GetAccess());
|
|
||||||
this->SetFlags(src.GetFlags());
|
|
||||||
this->SetAuthID(src.GetAuthID());
|
|
||||||
this->SetPass(src.GetPass());
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#endif //CMISC_H
|
#endif //CMISC_H
|
||||||
|
@ -39,7 +39,6 @@
|
|||||||
// New
|
// New
|
||||||
typedef void* (*PFN_REQ_FNPTR)(const char * /*name*/);
|
typedef void* (*PFN_REQ_FNPTR)(const char * /*name*/);
|
||||||
typedef int (FAR *QUERYMOD_NEW)(int * /*ifvers*/, amxx_module_info_s * /*modInfo*/);
|
typedef int (FAR *QUERYMOD_NEW)(int * /*ifvers*/, amxx_module_info_s * /*modInfo*/);
|
||||||
typedef int (FAR *CHECKGAME_NEW)(const char *);
|
|
||||||
typedef int (FAR *ATTACHMOD_NEW)(PFN_REQ_FNPTR /*reqFnptrFunc*/);
|
typedef int (FAR *ATTACHMOD_NEW)(PFN_REQ_FNPTR /*reqFnptrFunc*/);
|
||||||
typedef int (FAR *DETACHMOD_NEW)(void);
|
typedef int (FAR *DETACHMOD_NEW)(void);
|
||||||
typedef void (FAR *PLUGINSLOADED_NEW)(void);
|
typedef void (FAR *PLUGINSLOADED_NEW)(void);
|
||||||
@ -220,9 +219,6 @@ bool CModule::queryModule()
|
|||||||
m_Handle = DLLOAD(m_Filename.c_str()); // load file
|
m_Handle = DLLOAD(m_Filename.c_str()); // load file
|
||||||
if (!m_Handle)
|
if (!m_Handle)
|
||||||
{
|
{
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
|
||||||
AMXXLOG_Log("[AMXX] Module \"%s\" failed to load (%s)", m_Filename.c_str(), dlerror());
|
|
||||||
#endif
|
|
||||||
m_Status = MODULE_BADLOAD;
|
m_Status = MODULE_BADLOAD;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -297,33 +293,6 @@ bool CModule::queryModule()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Lastly, check to see if this module is able to load on this game mod
|
|
||||||
CHECKGAME_NEW checkGame_New = (CHECKGAME_NEW)DLPROC(m_Handle, "AMXX_CheckGame");
|
|
||||||
|
|
||||||
if (checkGame_New)
|
|
||||||
{
|
|
||||||
// This is an optional check; do not fail modules that do not have it
|
|
||||||
int ret = checkGame_New(g_mod_name.c_str());
|
|
||||||
|
|
||||||
if (ret != AMXX_GAME_OK)
|
|
||||||
{
|
|
||||||
switch (ret)
|
|
||||||
{
|
|
||||||
case AMXX_GAME_BAD:
|
|
||||||
AMXXLOG_Log("[AMXX] Module \"%s\" (version \"%s\") reported that it cannot load on game \"%s\"", m_Filename.c_str(), getVersion(), g_mod_name.c_str());
|
|
||||||
m_Status = MODULE_BADGAME;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
AMXXLOG_Log("[AMXX] Module \"%s\" (version \"%s\") returned an unknown CheckGame code (value: %d)", m_Filename.c_str(), getVersion(), ret);
|
|
||||||
m_Status = MODULE_BADLOAD;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Status = MODULE_QUERY;
|
m_Status = MODULE_QUERY;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -431,7 +400,6 @@ const char* CModule::getStatus() const
|
|||||||
case MODULE_NEWER: return "newer";
|
case MODULE_NEWER: return "newer";
|
||||||
case MODULE_INTERROR: return "internal err";
|
case MODULE_INTERROR: return "internal err";
|
||||||
case MODULE_NOT64BIT: return "not 64bit";
|
case MODULE_NOT64BIT: return "not 64bit";
|
||||||
case MODULE_BADGAME: return "bad game";
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,8 +49,7 @@ enum MODULE_STATUS
|
|||||||
MODULE_NEWER, // newer interface
|
MODULE_NEWER, // newer interface
|
||||||
MODULE_INTERROR, // Internal error
|
MODULE_INTERROR, // Internal error
|
||||||
MODULE_FUNCNOTPRESENT, // Function not present
|
MODULE_FUNCNOTPRESENT, // Function not present
|
||||||
MODULE_NOT64BIT, // Not 64 bit compatible
|
MODULE_NOT64BIT // Not 64 bit compatible
|
||||||
MODULE_BADGAME, // Module cannot load on the current game mod
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct amxx_module_info_s
|
struct amxx_module_info_s
|
||||||
@ -69,9 +68,6 @@ struct amxx_module_info_s
|
|||||||
#define AMXX_PARAM 2 /* Invalid parameter */
|
#define AMXX_PARAM 2 /* Invalid parameter */
|
||||||
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
||||||
|
|
||||||
#define AMXX_GAME_OK 0 /* Module can load on this game. */
|
|
||||||
#define AMXX_GAME_BAD 1 /* Module cannot load on this game. */
|
|
||||||
|
|
||||||
#define AMXX_INTERFACE_VERSION 4
|
#define AMXX_INTERFACE_VERSION 4
|
||||||
|
|
||||||
class CModule
|
class CModule
|
||||||
|
@ -90,7 +90,7 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
|
|||||||
{
|
{
|
||||||
if (warn)
|
if (warn)
|
||||||
{
|
{
|
||||||
AMXXLOG_Error("[AMXX] Plugins list not found (file \"%s\")", filename);
|
AMXXLOG_Log("[AMXX] Plugins list not found (file \"%s\")", filename);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -153,11 +153,6 @@ 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)
|
||||||
@ -165,7 +160,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_Error("[AMXX] %s", plugin->getError());
|
AMXXLOG_Log("[AMXX] %s", plugin->getError());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,17 +231,6 @@ 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)
|
||||||
@ -274,7 +258,6 @@ 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);
|
||||||
@ -434,17 +417,15 @@ void CPluginMngr::CPlugin::pausePlugin()
|
|||||||
// Unpause a plugin
|
// Unpause a plugin
|
||||||
void CPluginMngr::CPlugin::unpausePlugin()
|
void CPluginMngr::CPlugin::unpausePlugin()
|
||||||
{
|
{
|
||||||
if (isValid() && (getStatusCode() != ps_stopped))
|
if (isValid())
|
||||||
{
|
{
|
||||||
// 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);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *CPluginMngr::ReadIntoOrFromCache(const char *file, size_t &bufsize)
|
char *CPluginMngr::ReadIntoOrFromCache(const char *file, size_t &bufsize)
|
||||||
|
@ -71,7 +71,6 @@ 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;
|
||||||
@ -99,11 +98,9 @@ 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);
|
||||||
|
@ -129,7 +129,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Added this for amxx inclusion
|
//Added this for amxx inclusion
|
||||||
bool empty() const
|
bool empty()
|
||||||
{
|
{
|
||||||
if (!v)
|
if (!v)
|
||||||
return true;
|
return true;
|
||||||
@ -140,7 +140,7 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size() const
|
size_t size()
|
||||||
{
|
{
|
||||||
if (v)
|
if (v)
|
||||||
return strlen(v);
|
return strlen(v);
|
||||||
@ -244,7 +244,7 @@ public:
|
|||||||
|
|
||||||
if (is_space(v[len-1]))
|
if (is_space(v[len-1]))
|
||||||
{
|
{
|
||||||
for (i=len-1; i<len; i--)
|
for (i=len-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
if (!is_space(v[i])
|
if (!is_space(v[i])
|
||||||
|| (is_space(v[i]) && i==0))
|
|| (is_space(v[i]) && i==0))
|
||||||
|
@ -37,20 +37,12 @@
|
|||||||
// Vector
|
// Vector
|
||||||
template <class T> class CVector
|
template <class T> class CVector
|
||||||
{
|
{
|
||||||
bool Grow(size_t amount)
|
bool Grow()
|
||||||
{
|
{
|
||||||
// automatic grow
|
// automatic grow
|
||||||
size_t newSize = m_Size * 2;
|
size_t newSize = m_Size * 2;
|
||||||
|
|
||||||
if (newSize == 0)
|
if (newSize == 0)
|
||||||
{
|
newSize = 8; // a good init value
|
||||||
newSize = 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (m_CurrentUsedSize + amount > newSize)
|
|
||||||
{
|
|
||||||
newSize *= 2;
|
|
||||||
}
|
|
||||||
T *newData = new T[newSize];
|
T *newData = new T[newSize];
|
||||||
if (!newData)
|
if (!newData)
|
||||||
return false;
|
return false;
|
||||||
@ -65,17 +57,13 @@ template <class T> class CVector
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GrowIfNeeded(size_t amount)
|
bool GrowIfNeeded()
|
||||||
{
|
{
|
||||||
if (m_CurrentUsedSize + amount >= m_Size)
|
if (m_CurrentUsedSize >= m_Size)
|
||||||
{
|
return Grow();
|
||||||
return Grow(amount);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool ChangeSize(size_t size)
|
bool ChangeSize(size_t size)
|
||||||
{
|
{
|
||||||
@ -341,13 +329,14 @@ public:
|
|||||||
|
|
||||||
bool push_back(const T & elem)
|
bool push_back(const T & elem)
|
||||||
{
|
{
|
||||||
if (!GrowIfNeeded(1))
|
++m_CurrentUsedSize;
|
||||||
|
if (!GrowIfNeeded())
|
||||||
{
|
{
|
||||||
|
--m_CurrentUsedSize;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Data[m_CurrentUsedSize++] = elem;
|
m_Data[m_CurrentUsedSize - 1] = elem;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,13 +434,13 @@ public:
|
|||||||
|
|
||||||
size_t ofs = where - begin();
|
size_t ofs = where - begin();
|
||||||
|
|
||||||
if (!GrowIfNeeded(1))
|
++m_CurrentUsedSize;
|
||||||
|
if (!GrowIfNeeded())
|
||||||
{
|
{
|
||||||
|
--m_CurrentUsedSize;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
++m_CurrentUsedSize;
|
|
||||||
|
|
||||||
where = begin() + ofs;
|
where = begin() + ofs;
|
||||||
|
|
||||||
// Move subsequent entries
|
// Move subsequent entries
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
165
amxmodx/Makefile
165
amxmodx/Makefile
@ -1,18 +1,18 @@
|
|||||||
# (C)2004-2013 AMX Mod X Development Team
|
#(C)2004-2005 AMX Mod X Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
###########################################
|
HLSDK = ../../hlsdk
|
||||||
### EDIT THESE PATHS FOR YOUR OWN SETUP ###
|
MM_ROOT = ../metamod/metamod
|
||||||
###########################################
|
|
||||||
|
|
||||||
HLSDK = ../../hlsdk/multiplayer
|
|
||||||
MM_ROOT = ../../metamod/metamod
|
|
||||||
|
|
||||||
#####################################
|
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
#####################################
|
|
||||||
|
|
||||||
PROJECT = amxmodx
|
OPT_FLAGS = -O2 -fno-strict-aliasing -funroll-loops -s -fomit-frame-pointer -pipe
|
||||||
|
DEBUG_FLAGS = -g -ggdb3
|
||||||
|
CPP = gcc-4.1
|
||||||
|
NAME = amxmodx
|
||||||
|
|
||||||
|
BIN_SUFFIX_32 = mm_i386.so
|
||||||
|
BIN_SUFFIX_64 = mm_amd64.so
|
||||||
|
|
||||||
OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules.cpp \
|
OBJECTS = meta_api.cpp CFile.cpp CVault.cpp vault.cpp float.cpp file.cpp modules.cpp \
|
||||||
CMisc.cpp CTask.cpp string.cpp amxmodx.cpp CEvent.cpp CCmd.cpp CLogEvent.cpp \
|
CMisc.cpp CTask.cpp string.cpp amxmodx.cpp CEvent.cpp CCmd.cpp CLogEvent.cpp \
|
||||||
@ -20,128 +20,99 @@ 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 nongpl_matches.cpp CFlagManager.cpp datastructs.cpp \
|
amxmod_compat.cpp
|
||||||
trie_natives.cpp
|
|
||||||
|
|
||||||
##############################################
|
LINK = -lgcc -static-libgcc
|
||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
|
||||||
##############################################
|
|
||||||
|
|
||||||
C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
|
INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared -I$(HLSDK)/game_shared \
|
||||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
-I$(MM_ROOT) -Lzlib -I$(HLSDK)/common
|
||||||
C_GCC4_FLAGS = -fvisibility=hidden
|
|
||||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
|
||||||
CPP = gcc
|
|
||||||
CPP_OSX = clang
|
|
||||||
|
|
||||||
LINK = -Lzlib
|
GCC_VERSION := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
||||||
|
|
||||||
INCLUDE = -I. -I$(HLSDK) -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/game_shared \
|
ifeq "$(GCC_VERSION)" "4"
|
||||||
-I$(MM_ROOT)
|
OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
|
||||||
|
|
||||||
################################################
|
|
||||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
|
||||||
################################################
|
|
||||||
|
|
||||||
OS := $(shell uname -s)
|
|
||||||
|
|
||||||
ifeq "$(OS)" "Darwin"
|
|
||||||
OBJECTS += JIT/amxexecn-darwin.o JIT/amxjitsn-darwin.o JIT/natives-darwin-x86.o \
|
|
||||||
JIT/helpers-darwin-x86.o
|
|
||||||
|
|
||||||
CPP = $(CPP_OSX)
|
|
||||||
LIB_EXT = dylib
|
|
||||||
LIB_SUFFIX = _mm
|
|
||||||
CFLAGS += -DOSX
|
|
||||||
LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 -Wl,-read_only_relocs,suppress -lz-darwin
|
|
||||||
else
|
|
||||||
OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o JIT/helpers-x86.o
|
|
||||||
|
|
||||||
LIB_EXT = so
|
|
||||||
LIB_SUFFIX = _mm_i386
|
|
||||||
CFLAGS += -DLINUX
|
|
||||||
LINK += -shared -lz
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
LINK += -m32 -lm -ldl
|
|
||||||
|
|
||||||
CFLAGS += -DAMX_NOPROPLIST -DPAWN_CELL_SIZE=32 -DJIT -DASM32 -DHAVE_STDINT_H -fno-strict-aliasing \
|
|
||||||
-m32 -Wall -Werror
|
|
||||||
CPPFLAGS += -fno-exceptions -fno-rtti
|
|
||||||
|
|
||||||
BINARY = $(PROJECT)$(LIB_SUFFIX).$(LIB_EXT)
|
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "true"
|
ifeq "$(DEBUG)" "true"
|
||||||
BIN_DIR = Debug
|
BIN_DIR = Debug
|
||||||
CFLAGS += $(C_DEBUG_FLAGS)
|
CFLAGS = $(DEBUG_FLAGS)
|
||||||
else
|
else
|
||||||
BIN_DIR = Release
|
BIN_DIR = Release
|
||||||
CFLAGS += $(C_OPT_FLAGS)
|
CFLAGS = $(OPT_FLAGS)
|
||||||
LINK += -s
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq "$(BINLOG)" "true"
|
ifeq "$(BINLOG)" "true"
|
||||||
LIB_SUFFIX := _bl$(LIB_SUFFIX)
|
NAME := $(NAME)_bl
|
||||||
BIN_DIR := $(BIN_DIR)BinLog
|
BIN_DIR := $(BIN_DIR)BinLog
|
||||||
OBJECTS += binlog.cpp
|
OBJECTS += binlog.cpp
|
||||||
CFLAGS += -DBINLOG_ENABLED
|
CFLAGS += -DBINLOG_ENABLED
|
||||||
endif
|
endif
|
||||||
|
|
||||||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
|
CFLAGS += -DLINUX -DNDEBUG -DAMX_NOPROPLIST -fPIC -Wall -Werror -DHAVE_STDINT_H -static-libgcc -fno-rtti -fno-exceptions
|
||||||
|
|
||||||
ifeq "$(IS_CLANG)" "1"
|
ifeq "$(AMD64)" "true"
|
||||||
CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
|
BINARY = $(NAME)_$(BIN_SUFFIX_64)
|
||||||
CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
|
CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -DAMD64 -m64
|
||||||
|
LINK += -lz64
|
||||||
|
OBJECTS += JIT/natives-amd64.o
|
||||||
else
|
else
|
||||||
CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
BINARY = $(NAME)_$(BIN_SUFFIX_32)
|
||||||
CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
|
OBJECTS += JIT/amxexecn.o JIT/amxjitsn.o JIT/natives-x86.o
|
||||||
|
OBJECTS += JIT/helpers-x86.o
|
||||||
|
CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
|
||||||
|
LINK += -lz
|
||||||
|
OPT_FLAGS += -march=i586
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Clang || GCC >= 4
|
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
||||||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
|
|
||||||
CFLAGS += $(C_GCC4_FLAGS)
|
|
||||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Clang >= 3 || GCC >= 4.7
|
|
||||||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
|
|
||||||
CFLAGS += -Wno-delete-non-virtual-dtor
|
|
||||||
endif
|
|
||||||
|
|
||||||
# OS is Linux and not using clang
|
|
||||||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
|
|
||||||
LINK += -static-libgcc
|
|
||||||
endif
|
|
||||||
|
|
||||||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
|
||||||
|
|
||||||
# This will break if we include other Makefiles, but is fine for now. It allows
|
|
||||||
# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
|
|
||||||
# or other changes without mucking up the original.
|
|
||||||
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
|
|
||||||
|
|
||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
all:
|
all:
|
||||||
mkdir -p $(BIN_DIR)
|
mkdir -p $(BIN_DIR)
|
||||||
$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
|
$(MAKE) amxmodx
|
||||||
|
|
||||||
|
amd64:
|
||||||
|
rm -f zlib/libz.a
|
||||||
|
$(MAKE) all AMD64=true
|
||||||
|
|
||||||
|
amd64_debug:
|
||||||
|
rm -f zlib/libz.a
|
||||||
|
$(MAKE) all AMD64=true DEBUG=true
|
||||||
|
|
||||||
|
amd64_binlog:
|
||||||
|
rm -f zlib/libz.a
|
||||||
|
$(MAKE) all AMD64=true BINLOG=true
|
||||||
|
|
||||||
|
amd64_binlog_debug:
|
||||||
|
rm -f zlib/libz.a
|
||||||
|
$(MAKE) all AMD64=true BINLOG=true DEBUG=true
|
||||||
|
|
||||||
binlog:
|
binlog:
|
||||||
$(MAKE) -f $(MAKEFILE_NAME) all BINLOG=true
|
$(MAKE) all BINLOG=true
|
||||||
|
|
||||||
binlog_debug:
|
binlog_debug:
|
||||||
$(MAKE) -f $(MAKEFILE_NAME) all BINLOG=true DEBUG=true
|
$(MAKE) all BINLOG=true DEBUG=true
|
||||||
|
|
||||||
$(PROJECT): $(OBJ_BIN)
|
amxmodx: $(OBJ_LINUX)
|
||||||
$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
|
$(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
debug:
|
debug:
|
||||||
$(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true
|
$(MAKE) all DEBUG=true
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(BIN_DIR)/*.o
|
rm -rf Release/*.o
|
||||||
rm -f $(BIN_DIR)/$(BINARY)
|
rm -rf Release/$(NAME)_$(BIN_SUFFIX_32)
|
||||||
|
rm -rf Release/$(NAME)_$(BIN_SUFFIX_64)
|
||||||
|
rm -rf ReleaseBinLog/*.o
|
||||||
|
rm -rf ReleaseBinLog/$(NAME)_bl_$(BIN_SUFFIX_32)
|
||||||
|
rm -rf ReleaseBinLog/$(NAME)_bl_$(BIN_SUFFIX_64)
|
||||||
|
rm -rf Debug/*.o
|
||||||
|
rm -rf Debug/$(NAME)_$(BIN_SUFFIX_32)
|
||||||
|
rm -rf Debug/$(NAME)_$(BIN_SUFFIX_64)
|
||||||
|
rm -rf DebugBinLog/*.o
|
||||||
|
rm -rf DebugBinLog/$(NAME)_bl_$(BIN_SUFFIX_32)
|
||||||
|
rm -rf DebugBinLog/$(NAME)_bl_$(BIN_SUFFIX_64)
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id: amx.cpp 3707 2008-04-14 19:56:31Z sawce $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define AMX_NODYNALOAD
|
#define AMX_NODYNALOAD
|
||||||
@ -48,7 +48,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "osdefs.h"
|
#include "osdefs.h"
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -436,7 +436,7 @@ int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params)
|
|||||||
hdr=(AMX_HEADER *)amx->base;
|
hdr=(AMX_HEADER *)amx->base;
|
||||||
assert(hdr->natives<=hdr->libraries);
|
assert(hdr->natives<=hdr->libraries);
|
||||||
#if defined AMX_NATIVETABLE
|
#if defined AMX_NATIVETABLE
|
||||||
if (index<0) {
|
if (index<NULL) {
|
||||||
assert(-(index+1)<(sizeof(AMX_NATIVETABLE)/sizeof(AMX_NATIVETABLE)[0]));
|
assert(-(index+1)<(sizeof(AMX_NATIVETABLE)/sizeof(AMX_NATIVETABLE)[0]));
|
||||||
f=(AMX_NATIVETABLE)[-(index+1)];
|
f=(AMX_NATIVETABLE)[-(index+1)];
|
||||||
} else {
|
} else {
|
||||||
@ -803,7 +803,7 @@ static void expand(unsigned char *code, long codesize, long memsize)
|
|||||||
do {
|
do {
|
||||||
codesize--;
|
codesize--;
|
||||||
/* no input byte should be shifted out completely */
|
/* no input byte should be shifted out completely */
|
||||||
assert(shift<static_cast<int>(8*sizeof(cell)));
|
assert(shift<8*sizeof(cell));
|
||||||
/* we work from the end of a sequence backwards; the final code in
|
/* we work from the end of a sequence backwards; the final code in
|
||||||
* a sequence may not have the continuation bit set */
|
* a sequence may not have the continuation bit set */
|
||||||
assert(shift>0 || (code[(size_t)codesize] & 0x80)==0);
|
assert(shift>0 || (code[(size_t)codesize] & 0x80)==0);
|
||||||
@ -932,7 +932,7 @@ int AMXAPI amx_Init(AMX *amx, void *program)
|
|||||||
|
|
||||||
#define ALIGN(addr) (addr)
|
#define ALIGN(addr) (addr)
|
||||||
|
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
|
|
||||||
/* Linux already has mprotect() */
|
/* Linux already has mprotect() */
|
||||||
/* But wants the address aligned! */
|
/* But wants the address aligned! */
|
||||||
@ -973,25 +973,27 @@ int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code)
|
|||||||
memcpy(native_code, amx->base, ((AMX_HEADER *)(amx->base))->cod);
|
memcpy(native_code, amx->base, ((AMX_HEADER *)(amx->base))->cod);
|
||||||
hdr = (AMX_HEADER *)native_code;
|
hdr = (AMX_HEADER *)native_code;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* JIT rulz! (TM) */
|
/* JIT rulz! (TM) */
|
||||||
/* MP: added check for correct compilation */
|
/* MP: added check for correct compilation */
|
||||||
//Fixed bug (thanks T(+)rget)
|
//Fixed bug (thanks T(+)rget)
|
||||||
if ((res = asm_runJIT(amx->base, reloc_table, native_code)) == 0)
|
if ((res = asm_runJIT(amx->base, reloc_table, native_code)) == 0)
|
||||||
{
|
{
|
||||||
|
/* update the required memory size (the previous value was a
|
||||||
|
* conservative estimate, now we know the exact size)
|
||||||
|
*/
|
||||||
|
amx->code_size = (hdr->dat + hdr->stp + 3) & ~3;
|
||||||
/* The compiled code is relocatable, since only relative jumps are
|
/* The compiled code is relocatable, since only relative jumps are
|
||||||
* used for destinations within the generated code and absoulute
|
* used for destinations within the generated code and absoulute
|
||||||
* addresses for jumps into the runtime, which is fixed in memory.
|
* addresses for jumps into the runtime, which is fixed in memory.
|
||||||
*/
|
*/
|
||||||
amx->base = (unsigned char*) native_code;
|
amx->base = (unsigned char*) native_code;
|
||||||
amx->cip = hdr->cip;
|
amx->cip = hdr->cip;
|
||||||
|
amx->hea = hdr->hea;
|
||||||
|
amx->stp = hdr->stp - sizeof(cell);
|
||||||
|
amx->hlw = hdr->hea;
|
||||||
/* also put a sentinel for strings at the top the stack */
|
/* also put a sentinel for strings at the top the stack */
|
||||||
*(cell *)((char*)native_code + hdr->dat + amx->stp - sizeof(cell)) = 0;
|
*(cell *)((char*)native_code + hdr->dat + hdr->stp - sizeof(cell)) = 0;
|
||||||
/* update the required memory size (the previous value was a
|
amx->stk = amx->stp;
|
||||||
* conservative estimate, now we know the exact size)
|
|
||||||
*/
|
|
||||||
amx->code_size = (hdr->dat + amx->stp + sizeof(cell)) & ~3;
|
|
||||||
} /* if */
|
} /* if */
|
||||||
|
|
||||||
return (res == 0) ? AMX_ERR_NONE : AMX_ERR_INIT_JIT;
|
return (res == 0) ? AMX_ERR_NONE : AMX_ERR_INIT_JIT;
|
||||||
@ -1014,10 +1016,10 @@ int AMXAPI amx_InitJIT(AMX *amx,void *compiled_program,void *reloc_table)
|
|||||||
#if defined AMX_CLEANUP
|
#if defined AMX_CLEANUP
|
||||||
int AMXAPI amx_Cleanup(AMX *amx)
|
int AMXAPI amx_Cleanup(AMX *amx)
|
||||||
{
|
{
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
|
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
typedef int (*AMX_ENTRY)(AMX *amx);
|
typedef int (*AMX_ENTRY)(AMX *amx);
|
||||||
#endif
|
#endif
|
||||||
AMX_HEADER *hdr;
|
AMX_HEADER *hdr;
|
||||||
@ -1027,7 +1029,7 @@ int AMXAPI amx_Cleanup(AMX *amx)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* unload all extension modules */
|
/* unload all extension modules */
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
||||||
hdr=(AMX_HEADER *)amx->base;
|
hdr=(AMX_HEADER *)amx->base;
|
||||||
assert(hdr->magic==AMX_MAGIC);
|
assert(hdr->magic==AMX_MAGIC);
|
||||||
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
||||||
@ -1040,14 +1042,14 @@ int AMXAPI amx_Cleanup(AMX *amx)
|
|||||||
strcat(funcname,"Cleanup");
|
strcat(funcname,"Cleanup");
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
|
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
|
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
|
||||||
#endif
|
#endif
|
||||||
if (libcleanup!=NULL)
|
if (libcleanup!=NULL)
|
||||||
libcleanup(amx);
|
libcleanup(amx);
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
FreeLibrary((HINSTANCE)lib->address);
|
FreeLibrary((HINSTANCE)lib->address);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
dlclose((void*)lib->address);
|
dlclose((void*)lib->address);
|
||||||
#endif
|
#endif
|
||||||
} /* if */
|
} /* if */
|
||||||
@ -3695,7 +3697,7 @@ int AMXAPI amx_GetAddr(AMX *amx,cell amx_addr,cell **phys_addr)
|
|||||||
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
|
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
|
||||||
|
|
||||||
assert(phys_addr!=NULL);
|
assert(phys_addr!=NULL);
|
||||||
if ((amx_addr>=amx->hea && amx_addr<amx->stk) || amx_addr<0 || amx_addr>=amx->stp) {
|
if (amx_addr>=amx->hea && amx_addr<amx->stk || amx_addr<0 || amx_addr>=amx->stp) {
|
||||||
*phys_addr=NULL;
|
*phys_addr=NULL;
|
||||||
return AMX_ERR_MEMACCESS;
|
return AMX_ERR_MEMACCESS;
|
||||||
} /* if */
|
} /* if */
|
||||||
@ -4094,7 +4096,7 @@ int AMXAPI amx_GetLibraries(AMX *amx)
|
|||||||
return numLibraries;
|
return numLibraries;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
#define _snprintf snprintf
|
#define _snprintf snprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -18,13 +18,13 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id: amx.h 3006 2006-08-28 11:08:18Z dvander $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined FREEBSD && !defined __FreeBSD__
|
#if defined FREEBSD && !defined __FreeBSD__
|
||||||
#define __FreeBSD__
|
#define __FreeBSD__
|
||||||
#endif
|
#endif
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
#if defined HAVE_STDINT_H
|
#if defined HAVE_STDINT_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#else
|
#else
|
||||||
#if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
|
#if defined __LCC__ || defined __DMC__ || defined LINUX
|
||||||
#if defined HAVE_INTTYPES_H
|
#if defined HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#else
|
#else
|
||||||
@ -190,7 +190,7 @@ typedef int (AMXAPI *AMX_NATIVE_FILTER)(struct tagAMX *amx, int index);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -442,7 +442,7 @@ int AMXAPI amx_GetStringOld(char *dest,const cell *source,int use_wchar);
|
|||||||
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=reset
|
#pragma options align=reset
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id: amxcore.cpp 1733 2005-07-25 06:03:43Z dvander $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
#if defined _UNICODE || defined __UNICODE__ || defined UNICODE
|
#if defined _UNICODE || defined __UNICODE__ || defined UNICODE
|
||||||
# if !defined UNICODE /* for Windows */
|
# if !defined UNICODE /* for Windows */
|
||||||
@ -180,7 +180,7 @@ static cell AMX_NATIVE_CALL setarg(AMX *amx, cell *params)
|
|||||||
/* adjust the address in "value" in case of an array access */
|
/* adjust the address in "value" in case of an array access */
|
||||||
value+=params[2]*sizeof(cell);
|
value+=params[2]*sizeof(cell);
|
||||||
/* verify the address */
|
/* verify the address */
|
||||||
if (value<0 || (value>=amx->hea && value<amx->stk))
|
if (value<0 || value>=amx->hea && value<amx->stk)
|
||||||
return 0;
|
return 0;
|
||||||
/* set the value indirectly */
|
/* set the value indirectly */
|
||||||
* (cell *)(data+(int)value) = params[3];
|
* (cell *)(data+(int)value) = params[3];
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id: amxdbg.cpp 2345 2006-02-10 19:47:09Z faluco $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -462,8 +462,8 @@ int AMXAPI dbg_GetVariable(AMX_DBG *amxdbg, const char *symname, ucell scopeaddr
|
|||||||
break;
|
break;
|
||||||
/* check the range, keep a pointer to the symbol with the smallest range */
|
/* check the range, keep a pointer to the symbol with the smallest range */
|
||||||
if (strcmp(amxdbg->symboltbl[index]->name, symname) == 0
|
if (strcmp(amxdbg->symboltbl[index]->name, symname) == 0
|
||||||
&& ((codestart == 0 && codeend == 0)
|
&& (codestart == 0 && codeend == 0
|
||||||
|| (amxdbg->symboltbl[index]->codestart >= codestart && amxdbg->symboltbl[index]->codeend <= codeend)))
|
|| amxdbg->symboltbl[index]->codestart >= codestart && amxdbg->symboltbl[index]->codeend <= codeend))
|
||||||
{
|
{
|
||||||
*sym = amxdbg->symboltbl[index];
|
*sym = amxdbg->symboltbl[index];
|
||||||
codestart = amxdbg->symboltbl[index]->codestart;
|
codestart = amxdbg->symboltbl[index]->codestart;
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id: amxdbg.h 2977 2006-08-27 02:17:18Z damagedsoul $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AMXDBG_H_INCLUDED
|
#ifndef AMXDBG_H_INCLUDED
|
||||||
@ -49,7 +49,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -156,7 +156,7 @@ int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX
|
|||||||
|
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=reset
|
#pragma options align=reset
|
||||||
|
@ -303,6 +303,14 @@
|
|||||||
%endif
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
|
|
||||||
|
%ifdef WIN32
|
||||||
|
section .data exec
|
||||||
|
%else
|
||||||
|
section .text
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
global asm_runJIT, _asm_runJIT
|
global asm_runJIT, _asm_runJIT
|
||||||
global amx_exec_jit, _amx_exec_jit
|
global amx_exec_jit, _amx_exec_jit
|
||||||
global getMaxCodeSize, _getMaxCodeSize
|
global getMaxCodeSize, _getMaxCodeSize
|
||||||
@ -428,6 +436,15 @@ reloc_done:
|
|||||||
pop ebp
|
pop ebp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
; GWMV:
|
||||||
|
; The code below modifies itself to store the arguments to the Pawn opcodes
|
||||||
|
; in the compiled code. This is fine, but the .text section in an ELF executable
|
||||||
|
; is usually marked read-only, that's why this code is in the .data section.
|
||||||
|
|
||||||
|
%ifndef WIN32
|
||||||
|
section .data exec
|
||||||
|
%endif
|
||||||
|
|
||||||
OP_LOAD_PRI:
|
OP_LOAD_PRI:
|
||||||
;nop;
|
;nop;
|
||||||
putval j_load_pri+2
|
putval j_load_pri+2
|
||||||
@ -1035,7 +1052,7 @@ OP_CALL:
|
|||||||
j_call:
|
j_call:
|
||||||
;call 12345678h ; tasm chokes on this out of a sudden
|
;call 12345678h ; tasm chokes on this out of a sudden
|
||||||
_PUSH 0
|
_PUSH 0
|
||||||
j_call_e8:
|
j_call_e8
|
||||||
db 0e8h, 0, 0, 0, 0
|
db 0e8h, 0, 0, 0, 0
|
||||||
CHECKCODESIZE j_call
|
CHECKCODESIZE j_call
|
||||||
|
|
||||||
@ -2574,4 +2591,4 @@ _amx_opcodelist_jit:
|
|||||||
DD OP_FLOAT_ROUND ; DA
|
DD OP_FLOAT_ROUND ; DA
|
||||||
DD OP_FLOAT_CMP ; DA
|
DD OP_FLOAT_CMP ; DA
|
||||||
|
|
||||||
END:
|
END
|
||||||
|
@ -31,37 +31,10 @@
|
|||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "CMenu.h"
|
|
||||||
#include "natives.h"
|
#include "natives.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "binlog.h"
|
#include "binlog.h"
|
||||||
#include "libraries.h"
|
#include "libraries.h"
|
||||||
#include "CFlagManager.h"
|
|
||||||
#include "nongpl_matches.h"
|
|
||||||
#include "format.h"
|
|
||||||
#include "svn_version.h"
|
|
||||||
|
|
||||||
extern CFlagManager FlagMan;
|
|
||||||
CVector<CAdminData *> DynamicAdmins;
|
|
||||||
char CVarTempBuffer[64];
|
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
@ -146,7 +119,7 @@ static cell AMX_NATIVE_CALL server_print(AMX *amx, cell *params) /* 1 param */
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL engclient_print(AMX *amx, cell *params) /* 3 param */
|
static cell AMX_NATIVE_CALL engclient_print(AMX *amx, cell *params) /* 3 param */
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len;
|
||||||
char *msg;
|
char *msg;
|
||||||
|
|
||||||
if (params[1] == 0)
|
if (params[1] == 0)
|
||||||
@ -481,7 +454,7 @@ static cell AMX_NATIVE_CALL is_dedicated_server(AMX *amx, cell *params)
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL is_linux_server(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL is_linux_server(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
return 1;
|
return 1;
|
||||||
#else
|
#else
|
||||||
return 0;
|
return 0;
|
||||||
@ -569,34 +542,21 @@ static cell AMX_NATIVE_CALL is_user_hltv(AMX *amx, cell *params) /* 1 param */
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern bool g_bmod_tfc;
|
|
||||||
static cell AMX_NATIVE_CALL is_user_alive(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL is_user_alive(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
|
|
||||||
if (index < 1 || index > gpGlobals->maxClients)
|
if (index < 1 || index > gpGlobals->maxClients)
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
|
CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
|
||||||
|
|
||||||
if (g_bmod_tfc)
|
|
||||||
{
|
|
||||||
edict_t *e = pPlayer->pEdict;
|
|
||||||
if (e->v.flags & FL_SPECTATOR ||
|
|
||||||
(!e->v.team || !e->v.playerclass))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((pPlayer->ingame && pPlayer->IsAlive()) ? 1 : 0);
|
return ((pPlayer->ingame && pPlayer->IsAlive()) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL get_amxx_verstring(AMX *amx, cell *params) /* 2 params */
|
static cell AMX_NATIVE_CALL get_amxx_verstring(AMX *amx, cell *params) /* 2 params */
|
||||||
{
|
{
|
||||||
return set_amxstring(amx, params[1], SVN_VERSION_STRING, params[2]);
|
return set_amxstring(amx, params[1], AMX_VERSION, params[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL get_user_frags(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL get_user_frags(AMX *amx, cell *params) /* 1 param */
|
||||||
@ -724,15 +684,8 @@ static cell AMX_NATIVE_CALL get_user_weapons(AMX *amx, cell *params) /* 3 param
|
|||||||
cell *cpNum = get_amxaddr(amx, params[3]);
|
cell *cpNum = get_amxaddr(amx, params[3]);
|
||||||
cell *cpIds = get_amxaddr(amx, params[2]);
|
cell *cpIds = get_amxaddr(amx, params[2]);
|
||||||
*cpIds = 0;
|
*cpIds = 0;
|
||||||
|
|
||||||
int weapons = pPlayer->pEdict->v.weapons & ~(1<<31); // don't count last element
|
int weapons = pPlayer->pEdict->v.weapons & ~(1<<31); // don't count last element
|
||||||
|
|
||||||
if (g_bmod_dod)
|
|
||||||
{
|
|
||||||
// Don't ignore that last element for dod
|
|
||||||
weapons = pPlayer->pEdict->v.weapons;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 1; i < MAX_WEAPONS; ++i)
|
for (int i = 1; i < MAX_WEAPONS; ++i)
|
||||||
{
|
{
|
||||||
if (weapons & (1<<i))
|
if (weapons & (1<<i))
|
||||||
@ -1005,7 +958,7 @@ static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) /* 3 param */
|
|||||||
|
|
||||||
if (params[3])
|
if (params[3])
|
||||||
{
|
{
|
||||||
const char *szTeam = "";
|
char *szTeam = "";
|
||||||
|
|
||||||
switch (iTeam)
|
switch (iTeam)
|
||||||
{
|
{
|
||||||
@ -1023,9 +976,7 @@ 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;
|
||||||
}
|
}
|
||||||
@ -1120,31 +1071,6 @@ 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1270,23 +1196,13 @@ static cell AMX_NATIVE_CALL register_concmd(AMX *amx, cell *params) /* 4 param *
|
|||||||
listable = false;
|
listable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FlagMan.ShouldIAddThisCommand(amx,params,temp)==1)
|
|
||||||
{
|
|
||||||
FlagMan.LookupOrAdd(temp,access,amx);
|
|
||||||
}
|
|
||||||
|
|
||||||
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 cmd->getId();
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 */
|
||||||
@ -1315,17 +1231,12 @@ static cell AMX_NATIVE_CALL register_clcmd(AMX *amx, cell *params) /* 4 param */
|
|||||||
listable = false;
|
listable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FlagMan.ShouldIAddThisCommand(amx,params,temp)==1)
|
|
||||||
{
|
|
||||||
FlagMan.LookupOrAdd(temp,access,amx);
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
cmd->setCmdType(CMD_ClientCommand);
|
cmd->setCmdType(CMD_ClientCommand);
|
||||||
|
|
||||||
return cmd->getId();
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 */
|
||||||
@ -1360,7 +1271,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 cmd->getId();
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 */
|
||||||
@ -1607,18 +1518,6 @@ 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;
|
||||||
|
|
||||||
@ -1677,19 +1576,6 @@ 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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1710,20 +1596,6 @@ 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);
|
||||||
@ -1738,8 +1610,8 @@ static cell AMX_NATIVE_CALL set_pcvar_float(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(CVarTempBuffer,sizeof(CVarTempBuffer)-1,"%f",amx_ctof(params[2]));
|
ptr->value = amx_ctof(params[2]);
|
||||||
(*g_engfuncs.pfnCvar_DirectSet)(ptr, &CVarTempBuffer[0]);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1766,18 +1638,6 @@ 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1790,8 +1650,7 @@ static cell AMX_NATIVE_CALL set_pcvar_num(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(CVarTempBuffer,sizeof(CVarTempBuffer)-1,"%d",params[2]);
|
ptr->value = (float)params[2];
|
||||||
(*g_engfuncs.pfnCvar_DirectSet)(ptr, &CVarTempBuffer[0]);
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1815,22 +1674,6 @@ static cell AMX_NATIVE_CALL set_cvar_string(AMX *amx, cell *params) /* 2 param *
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL set_pcvar_string(AMX *amx, cell *params) /* 2 param */
|
|
||||||
{
|
|
||||||
cvar_t *ptr = reinterpret_cast<cvar_t *>(params[1]);
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid CVAR pointer");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int len;
|
|
||||||
|
|
||||||
(*g_engfuncs.pfnCvar_DirectSet)(ptr, get_amxstring(amx,params[2],0,len));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL log_message(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL log_message(AMX *amx, cell *params) /* 1 param */
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
@ -2365,18 +2208,6 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2384,15 +2215,10 @@ 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();
|
||||||
@ -2559,7 +2385,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() && !plugin->isStopped())
|
if (plugin && plugin->isValid() && plugin->isPaused())
|
||||||
{
|
{
|
||||||
plugin->unpausePlugin();
|
plugin->unpausePlugin();
|
||||||
return 1;
|
return 1;
|
||||||
@ -2710,7 +2536,9 @@ static cell AMX_NATIVE_CALL precache_sound(AMX *amx, cell *params) /* 1 param */
|
|||||||
int len;
|
int len;
|
||||||
char* sptemp = get_amxstring(amx, params[1], 0, len);
|
char* sptemp = get_amxstring(amx, params[1], 0, len);
|
||||||
|
|
||||||
return PRECACHE_SOUND((char*)STRING(ALLOC_STRING(sptemp)));
|
PRECACHE_SOUND((char*)STRING(ALLOC_STRING(sptemp)));
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL precache_model(AMX *amx, cell *params) /* 1 param */
|
static cell AMX_NATIVE_CALL precache_model(AMX *amx, cell *params) /* 1 param */
|
||||||
@ -2900,20 +2728,6 @@ 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;
|
||||||
@ -3125,7 +2939,6 @@ static cell AMX_NATIVE_CALL is_module_loaded(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// native is_plugin_loaded(const name[]);
|
// native is_plugin_loaded(const name[]);
|
||||||
// 1.8 changed to: is_plugin_loaded(const name[], bool:usefilename=false);
|
|
||||||
static cell AMX_NATIVE_CALL is_plugin_loaded(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL is_plugin_loaded(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
// param1: name
|
// param1: name
|
||||||
@ -3133,10 +2946,6 @@ static cell AMX_NATIVE_CALL is_plugin_loaded(AMX *amx, cell *params)
|
|||||||
char *name = get_amxstring(amx, params[1], 0, len);
|
char *name = get_amxstring(amx, params[1], 0, len);
|
||||||
int id = 0;
|
int id = 0;
|
||||||
|
|
||||||
if (params[0] / sizeof(cell) == 1 || // compiled pre-1.8 - assume plugin's registered name
|
|
||||||
params[2] == 0) // compiled post 1.8 - wants plugin's registered name
|
|
||||||
{
|
|
||||||
// searching for registered plugin name
|
|
||||||
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
||||||
{
|
{
|
||||||
if (stricmp((*iter).getTitle(), name) == 0)
|
if (stricmp((*iter).getTitle(), name) == 0)
|
||||||
@ -3144,19 +2953,6 @@ static cell AMX_NATIVE_CALL is_plugin_loaded(AMX *amx, cell *params)
|
|||||||
|
|
||||||
++id;
|
++id;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// searching for filename
|
|
||||||
// filename search is case sensitive
|
|
||||||
for (CPluginMngr::iterator iter = g_plugins.begin(); iter; ++iter)
|
|
||||||
{
|
|
||||||
if (strcmp((*iter).getName(), name) == 0)
|
|
||||||
return id;
|
|
||||||
|
|
||||||
++id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -3425,30 +3221,19 @@ 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;
|
||||||
}
|
}
|
||||||
@ -3794,9 +3579,6 @@ static cell AMX_NATIVE_CALL register_dictionary(AMX *amx, cell *params)
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL plugin_flags(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL plugin_flags(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if ((params[0] / sizeof(cell)) == 1 || // compiled with old include file
|
|
||||||
params[2] < 0) // specifically want calling plugin's flags
|
|
||||||
{
|
|
||||||
if (params[1])
|
if (params[1])
|
||||||
{
|
{
|
||||||
AMX_HEADER *hdr;
|
AMX_HEADER *hdr;
|
||||||
@ -3805,24 +3587,6 @@ static cell AMX_NATIVE_CALL plugin_flags(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return amx->flags;
|
return amx->flags;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CPluginMngr::CPlugin* a = g_plugins.findPlugin((int)params[2]);
|
|
||||||
|
|
||||||
if (a == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (params[1])
|
|
||||||
{
|
|
||||||
AMX_HEADER *hdr;
|
|
||||||
hdr = (AMX_HEADER *)a->getAMX()->base;
|
|
||||||
return hdr->flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
return a->getAMX()->flags;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// lang_exists(const name[]);
|
// lang_exists(const name[]);
|
||||||
@ -3843,7 +3607,7 @@ static cell AMX_NATIVE_CALL amx_mkdir(AMX *amx, cell *params)
|
|||||||
char *path = get_amxstring(amx, params[1], 0, len);
|
char *path = get_amxstring(amx, params[1], 0, len);
|
||||||
char *realpath = build_pathname("%s", path);
|
char *realpath = build_pathname("%s", path);
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
return mkdir(realpath, 0700);
|
return mkdir(realpath, 0700);
|
||||||
#else
|
#else
|
||||||
return mkdir(realpath);
|
return mkdir(realpath);
|
||||||
@ -4112,21 +3876,6 @@ 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]);
|
||||||
@ -4396,8 +4145,7 @@ 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;
|
||||||
}
|
}
|
||||||
@ -4407,19 +4155,7 @@ 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)
|
||||||
{
|
{
|
||||||
cell value = params[2];
|
memset(get_amxaddr(amx, params[1]), params[2], params[3] * sizeof(cell));
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
@ -4487,127 +4223,9 @@ static cell AMX_NATIVE_CALL GetLangTransKey(AMX *amx, cell *params)
|
|||||||
return g_langMngr.GetKeyEntry(key);
|
return g_langMngr.GetKeyEntry(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL admins_push(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
// admins_push("SteamID","password",access,flags);
|
|
||||||
CAdminData *TempData=new CAdminData;;
|
|
||||||
|
|
||||||
TempData->SetAuthID(get_amxaddr(amx,params[1]));
|
|
||||||
TempData->SetPass(get_amxaddr(amx,params[2]));
|
|
||||||
TempData->SetAccess(params[3]);
|
|
||||||
TempData->SetFlags(params[4]);
|
|
||||||
|
|
||||||
DynamicAdmins.push_back(TempData);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
static cell AMX_NATIVE_CALL admins_flush(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
// admins_flush();
|
|
||||||
|
|
||||||
size_t iter=DynamicAdmins.size();
|
|
||||||
|
|
||||||
while (iter--)
|
|
||||||
{
|
|
||||||
delete DynamicAdmins[iter];
|
|
||||||
}
|
|
||||||
|
|
||||||
DynamicAdmins.clear();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
static cell AMX_NATIVE_CALL admins_num(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
// admins_num();
|
|
||||||
|
|
||||||
return static_cast<cell>(DynamicAdmins.size());
|
|
||||||
};
|
|
||||||
static cell AMX_NATIVE_CALL admins_lookup(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
// admins_lookup(Num, Property, Buffer[]={0}, BufferSize=-1);
|
|
||||||
|
|
||||||
if (params[1]>=static_cast<int>(DynamicAdmins.size()))
|
|
||||||
{
|
|
||||||
LogError(amx,AMX_ERR_NATIVE,"Invalid admins num");
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
int BufferSize;
|
|
||||||
cell *Buffer;
|
|
||||||
const cell *Input;
|
|
||||||
|
|
||||||
switch(params[2])
|
|
||||||
{
|
|
||||||
case Admin_Auth:
|
|
||||||
BufferSize=params[4];
|
|
||||||
Buffer=get_amxaddr(amx, params[3]);
|
|
||||||
Input=DynamicAdmins[params[1]]->GetAuthID();
|
|
||||||
|
|
||||||
while (BufferSize-->0)
|
|
||||||
{
|
|
||||||
if ((*Buffer++=*Input++)==0)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// hit max buffer size, terminate string
|
|
||||||
*Buffer=0;
|
|
||||||
return 0;
|
|
||||||
break;
|
|
||||||
case Admin_Password:
|
|
||||||
BufferSize=params[4];
|
|
||||||
Buffer=get_amxaddr(amx, params[3]);
|
|
||||||
Input=DynamicAdmins[params[1]]->GetPass();
|
|
||||||
|
|
||||||
while (BufferSize-->0)
|
|
||||||
{
|
|
||||||
if ((*Buffer++=*Input++)==0)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// hit max buffer size, terminate string
|
|
||||||
*Buffer=0;
|
|
||||||
return 0;
|
|
||||||
break;
|
|
||||||
case Admin_Access:
|
|
||||||
return DynamicAdmins[params[1]]->GetAccess();
|
|
||||||
break;
|
|
||||||
case Admin_Flags:
|
|
||||||
return DynamicAdmins[params[1]]->GetFlags();
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
|
|
||||||
// unknown property
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
// LookupLangKey(Output[], OutputSize, const Key[], const &id)
|
|
||||||
static cell AMX_NATIVE_CALL LookupLangKey(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
char *key=get_amxstring(amx,params[3],0,len);
|
|
||||||
const char *def=translate(amx,params[4],key);
|
|
||||||
|
|
||||||
if (def==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_amxstring(amx,params[1],def,params[2]);
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
static cell AMX_NATIVE_CALL is_rukia_a_hag(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
AMX_NATIVE_INFO amxmodx_Natives[] =
|
AMX_NATIVE_INFO amxmodx_Natives[] =
|
||||||
{
|
{
|
||||||
{"abort", amx_abort},
|
{"abort", amx_abort},
|
||||||
{"admins_flush", admins_flush},
|
|
||||||
{"admins_lookup", admins_lookup},
|
|
||||||
{"admins_num", admins_num},
|
|
||||||
{"admins_push", admins_push},
|
|
||||||
{"amxx_setpl_curweap", amxx_setpl_curweap},
|
{"amxx_setpl_curweap", amxx_setpl_curweap},
|
||||||
{"arrayset", arrayset},
|
{"arrayset", arrayset},
|
||||||
{"get_addr_val", get_addr_val},
|
{"get_addr_val", get_addr_val},
|
||||||
@ -4772,7 +4390,6 @@ AMX_NATIVE_INFO amxmodx_Natives[] =
|
|||||||
{"set_localinfo", set_localinfo},
|
{"set_localinfo", set_localinfo},
|
||||||
{"set_pcvar_flags", set_pcvar_flags},
|
{"set_pcvar_flags", set_pcvar_flags},
|
||||||
{"set_pcvar_float", set_pcvar_float},
|
{"set_pcvar_float", set_pcvar_float},
|
||||||
{"set_pcvar_string", set_pcvar_string},
|
|
||||||
{"set_pcvar_num", set_pcvar_num},
|
{"set_pcvar_num", set_pcvar_num},
|
||||||
{"set_task", set_task},
|
{"set_task", set_task},
|
||||||
{"set_user_flags", set_user_flags},
|
{"set_user_flags", set_user_flags},
|
||||||
@ -4793,15 +4410,12 @@ 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},
|
||||||
{"GetLangTransKey", GetLangTransKey},
|
{"GetLangTransKey", GetLangTransKey},
|
||||||
{"LibraryExists", LibraryExists},
|
{"LibraryExists", LibraryExists},
|
||||||
{"LookupLangKey", LookupLangKey},
|
|
||||||
{"PrepareArray", PrepareArray},
|
{"PrepareArray", PrepareArray},
|
||||||
{"ShowSyncHudMsg", ShowSyncHudMsg},
|
{"ShowSyncHudMsg", ShowSyncHudMsg},
|
||||||
{"is_rukia_a_hag", is_rukia_a_hag},
|
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#ifndef AMXMODX_H
|
#ifndef AMXMODX_H
|
||||||
#define AMXMODX_H
|
#define AMXMODX_H
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "sclinux.h"
|
#include "sclinux.h"
|
||||||
@ -65,6 +65,7 @@
|
|||||||
#include "CLogEvent.h"
|
#include "CLogEvent.h"
|
||||||
#include "CForward.h"
|
#include "CForward.h"
|
||||||
#include "CCmd.h"
|
#include "CCmd.h"
|
||||||
|
#include "CMenu.h"
|
||||||
#include "CEvent.h"
|
#include "CEvent.h"
|
||||||
#include "CLang.h"
|
#include "CLang.h"
|
||||||
#include "fakemeta.h"
|
#include "fakemeta.h"
|
||||||
@ -72,6 +73,7 @@
|
|||||||
|
|
||||||
#define AMXXLOG_Log g_log.Log
|
#define AMXXLOG_Log g_log.Log
|
||||||
#define AMXXLOG_Error g_log.LogError
|
#define AMXXLOG_Error g_log.LogError
|
||||||
|
#define AMX_VERSION "1.76"
|
||||||
|
|
||||||
extern AMX_NATIVE_INFO core_Natives[];
|
extern AMX_NATIVE_INFO core_Natives[];
|
||||||
extern AMX_NATIVE_INFO time_Natives[];
|
extern AMX_NATIVE_INFO time_Natives[];
|
||||||
@ -84,9 +86,8 @@ extern AMX_NATIVE_INFO vault_Natives[];
|
|||||||
extern AMX_NATIVE_INFO msg_Natives[];
|
extern AMX_NATIVE_INFO msg_Natives[];
|
||||||
extern AMX_NATIVE_INFO vector_Natives[];
|
extern AMX_NATIVE_INFO vector_Natives[];
|
||||||
extern AMX_NATIVE_INFO g_SortNatives[];
|
extern AMX_NATIVE_INFO g_SortNatives[];
|
||||||
extern AMX_NATIVE_INFO g_DataStructNatives[];
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#ifndef __linux__
|
||||||
#define DLLOAD(path) (DLHANDLE)LoadLibrary(path)
|
#define DLLOAD(path) (DLHANDLE)LoadLibrary(path)
|
||||||
#define DLPROC(m, func) GetProcAddress(m, func)
|
#define DLPROC(m, func) GetProcAddress(m, func)
|
||||||
#define DLFREE(m) FreeLibrary(m)
|
#define DLFREE(m) FreeLibrary(m)
|
||||||
@ -107,21 +108,13 @@ extern AMX_NATIVE_INFO g_DataStructNatives[];
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#ifndef __linux__
|
||||||
typedef HINSTANCE DLHANDLE;
|
typedef HINSTANCE DLHANDLE;
|
||||||
#else
|
#else
|
||||||
typedef void* DLHANDLE;
|
typedef void* DLHANDLE;
|
||||||
#define INFINITE 0xFFFFFFFF
|
#define INFINITE 0xFFFFFFFF
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
#define PATH_SEP_CHAR '\\'
|
|
||||||
#define ALT_SEP_CHAR '/'
|
|
||||||
#else
|
|
||||||
#define PATH_SEP_CHAR '/'
|
|
||||||
#define ALT_SEP_CHAR '\\'
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef GETPLAYERAUTHID
|
#ifndef GETPLAYERAUTHID
|
||||||
#define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId)
|
#define GETPLAYERAUTHID (*g_engfuncs.pfnGetPlayerAuthId)
|
||||||
#endif
|
#endif
|
||||||
@ -139,7 +132,7 @@ int UTIL_ReadFlags(const char* c);
|
|||||||
void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg);
|
void UTIL_ClientPrint(edict_t *pEntity, int msg_dest, char *msg);
|
||||||
void UTIL_FakeClientCommand(edict_t *pEdict, const char *cmd, const char *arg1 = NULL, const char *arg2 = NULL);
|
void UTIL_FakeClientCommand(edict_t *pEdict, const char *cmd, const char *arg1 = NULL, const char *arg2 = NULL);
|
||||||
void UTIL_GetFlags(char* flags, int flag);
|
void UTIL_GetFlags(char* flags, int flag);
|
||||||
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage);
|
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage);
|
||||||
void UTIL_IntToString(int value, char *output);
|
void UTIL_IntToString(int value, char *output);
|
||||||
void UTIL_ShowMOTD(edict_t *client, char *motd, int mlen, const char *name);
|
void UTIL_ShowMOTD(edict_t *client, char *motd, int mlen, const char *name);
|
||||||
void UTIL_ShowMenu(edict_t* pEntity, int slots, int time, char *menu, int mlen);
|
void UTIL_ShowMenu(edict_t* pEntity, int slots, int time, char *menu, int mlen);
|
||||||
@ -182,6 +175,7 @@ extern CList<CPlayer*> g_auth;
|
|||||||
extern EventsMngr g_events;
|
extern EventsMngr g_events;
|
||||||
extern Grenades g_grenades;
|
extern Grenades g_grenades;
|
||||||
extern LogEventsMngr g_logevents;
|
extern LogEventsMngr g_logevents;
|
||||||
|
extern MenuMngr g_menucmds;
|
||||||
extern CLangMngr g_langMngr;
|
extern CLangMngr g_langMngr;
|
||||||
extern String g_log_dir;
|
extern String g_log_dir;
|
||||||
extern String g_mod_name;
|
extern String g_mod_name;
|
||||||
@ -276,8 +270,8 @@ void modules_callPluginsUnloaded();
|
|||||||
void modules_callPluginsUnloading();
|
void modules_callPluginsUnloading();
|
||||||
|
|
||||||
cell* get_amxaddr(AMX *amx, cell amx_addr);
|
cell* get_amxaddr(AMX *amx, cell amx_addr);
|
||||||
char* build_pathname(const char *fmt, ...);
|
char* build_pathname(char *fmt, ...);
|
||||||
char* build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...);
|
char* build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...);
|
||||||
char* format_amxstring(AMX *amx, cell *params, int parm, int& len);
|
char* format_amxstring(AMX *amx, cell *params, int parm, int& len);
|
||||||
AMX* get_amxscript(int, void**, const char**);
|
AMX* get_amxscript(int, void**, const char**);
|
||||||
const char* get_amxscriptname(AMX* amx);
|
const char* get_amxscriptname(AMX* amx);
|
||||||
@ -292,8 +286,8 @@ int unload_amxscript(AMX* amx, void** program);
|
|||||||
|
|
||||||
void copy_amxmemory(cell* dest, cell* src, int len);
|
void copy_amxmemory(cell* dest, cell* src, int len);
|
||||||
void get_modname(char*);
|
void get_modname(char*);
|
||||||
void print_srvconsole(const char *fmt, ...);
|
void print_srvconsole(char *fmt, ...);
|
||||||
void report_error(int code, const char* fmt, ...);
|
void report_error(int code, char* fmt, ...);
|
||||||
void* alloc_amxmemory(void**, int size);
|
void* alloc_amxmemory(void**, int size);
|
||||||
void free_amxmemory(void **ptr);
|
void free_amxmemory(void **ptr);
|
||||||
// get_localinfo
|
// get_localinfo
|
||||||
@ -345,14 +339,6 @@ struct func_s
|
|||||||
const char *desc;
|
const char *desc;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum AdminProperty
|
|
||||||
{
|
|
||||||
Admin_Auth = 0,
|
|
||||||
Admin_Password,
|
|
||||||
Admin_Access,
|
|
||||||
Admin_Flags
|
|
||||||
};
|
|
||||||
|
|
||||||
extern enginefuncs_t *g_pEngTable;
|
extern enginefuncs_t *g_pEngTable;
|
||||||
|
|
||||||
#endif // AMXMODX_H
|
#endif // AMXMODX_H
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (c) ITB CompuPhase, 2001-2002
|
* Copyright (c) ITB CompuPhase, 2001-2002
|
||||||
* This file may be freely used. No warranties of any kind.
|
* This file may be freely used. No warranties of any kind.
|
||||||
*
|
*
|
||||||
* Version: $Id: amxtime.cpp 2511 2006-04-06 12:56:45Z damagedsoul $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
#define PACKED
|
#define PACKED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#if defined __linux__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#else
|
#else
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
@ -127,7 +127,7 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize)
|
|||||||
|
|
||||||
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
|
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
|
||||||
{
|
{
|
||||||
pe = &(m_Bh.plugins[(unsigned)i]);
|
pe = &(m_Bh.plugins[i]);
|
||||||
DATAREAD(&pe->cellsize, sizeof(mint8_t), 1);
|
DATAREAD(&pe->cellsize, sizeof(mint8_t), 1);
|
||||||
DATAREAD(&pe->disksize, sizeof(int32_t), 1);
|
DATAREAD(&pe->disksize, sizeof(int32_t), 1);
|
||||||
DATAREAD(&pe->imagesize, sizeof(int32_t), 1);
|
DATAREAD(&pe->imagesize, sizeof(int32_t), 1);
|
||||||
@ -137,7 +137,7 @@ CAmxxReader::CAmxxReader(const char *filename, int cellsize)
|
|||||||
|
|
||||||
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
|
for (mint8_t i = 0; i < m_Bh.numPlugins; i++)
|
||||||
{
|
{
|
||||||
pe = &(m_Bh.plugins[(unsigned)i]);
|
pe = &(m_Bh.plugins[i]);
|
||||||
|
|
||||||
if (pe->cellsize == m_CellSize)
|
if (pe->cellsize == m_CellSize)
|
||||||
{
|
{
|
||||||
|
@ -35,17 +35,15 @@
|
|||||||
// 3 = HL Logs
|
// 3 = HL Logs
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#if defined(_WIN32)
|
#ifndef __linux__
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#endif
|
#endif
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
|
||||||
#if defined(_WIN32WIN32)
|
#ifndef __linux__
|
||||||
#define vsnprintf _vsnprintf
|
#define vsnprintf _vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "svn_version.h"
|
|
||||||
|
|
||||||
CLog::CLog()
|
CLog::CLog()
|
||||||
{
|
{
|
||||||
m_LogType = 0;
|
m_LogType = 0;
|
||||||
@ -97,13 +95,11 @@ void CLog::CreateNewFile()
|
|||||||
tm *curTime = localtime(&td);
|
tm *curTime = localtime(&td);
|
||||||
|
|
||||||
char file[256];
|
char file[256];
|
||||||
char name[256];
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
snprintf(name, sizeof(name), "%s/L%02d%02d%03d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday, i);
|
build_pathname_r(file, sizeof(file)-1, "%s/L%02d%02d%03d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday, i);
|
||||||
build_pathname_r(file, sizeof(file)-1, "%s", name);
|
|
||||||
FILE *pTmpFile = fopen(file, "r"); // open for reading to check whether the file exists
|
FILE *pTmpFile = fopen(file, "r"); // open for reading to check whether the file exists
|
||||||
|
|
||||||
if (!pTmpFile)
|
if (!pTmpFile)
|
||||||
@ -122,7 +118,7 @@ void CLog::CreateNewFile()
|
|||||||
ALERT(at_logged, "[AMXX] Unexpected fatal logging error. AMXX Logging disabled.\n");
|
ALERT(at_logged, "[AMXX] Unexpected fatal logging error. AMXX Logging disabled.\n");
|
||||||
SET_LOCALINFO("amxx_logging", "0");
|
SET_LOCALINFO("amxx_logging", "0");
|
||||||
} else {
|
} else {
|
||||||
fprintf(fp, "AMX Mod X log file started (file \"%s\") (version \"%s\")\n", name, SVN_VERSION_STRING);
|
fprintf(fp, "AMX Mod X log file started (file \"%s/L%02d%02d%03d.log\") (version \"%s\")\n", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday, i, AMX_VERSION);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -137,7 +133,7 @@ void CLog::MapChange()
|
|||||||
{
|
{
|
||||||
// create dir if not existing
|
// create dir if not existing
|
||||||
char file[256];
|
char file[256];
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux
|
||||||
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()), 0700);
|
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()), 0700);
|
||||||
#else
|
#else
|
||||||
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()));
|
mkdir(build_pathname_r(file, sizeof(file)-1, "%s", g_log_dir.c_str()));
|
||||||
@ -204,7 +200,7 @@ void CLog::Log(const char *fmt, ...)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
build_pathname_r(file, sizeof(file)-1, "%s/L%04d%02d%02d.log", g_log_dir.c_str(), (curTime->tm_year + 1900), curTime->tm_mon + 1, curTime->tm_mday);
|
build_pathname_r(file, sizeof(file)-1, "%s/L%02d%02d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday);
|
||||||
pF = fopen(file, "a+");
|
pF = fopen(file, "a+");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +230,6 @@ void CLog::Log(const char *fmt, ...)
|
|||||||
void CLog::LogError(const char *fmt, ...)
|
void CLog::LogError(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
static char file[256];
|
static char file[256];
|
||||||
static char name[256];
|
|
||||||
|
|
||||||
if (m_FoundError)
|
if (m_FoundError)
|
||||||
{
|
{
|
||||||
@ -258,8 +253,7 @@ void CLog::LogError(const char *fmt, ...)
|
|||||||
va_end(arglst);
|
va_end(arglst);
|
||||||
|
|
||||||
FILE *pF = NULL;
|
FILE *pF = NULL;
|
||||||
snprintf(name, sizeof(name), "%s/error_%04d%02d%02d.log", g_log_dir.c_str(), curTime->tm_year + 1900, curTime->tm_mon + 1, curTime->tm_mday);
|
build_pathname_r(file, sizeof(file)-1, "%s/error_%02d%02d%02d.log", g_log_dir.c_str(), curTime->tm_mon + 1, curTime->tm_mday, curTime->tm_year - 100);
|
||||||
build_pathname_r(file, sizeof(file)-1, "%s", name);
|
|
||||||
pF = fopen(file, "a+");
|
pF = fopen(file, "a+");
|
||||||
|
|
||||||
if (pF)
|
if (pF)
|
||||||
@ -267,7 +261,7 @@ void CLog::LogError(const char *fmt, ...)
|
|||||||
if (!m_LoggedErrMap)
|
if (!m_LoggedErrMap)
|
||||||
{
|
{
|
||||||
fprintf(pF, "L %s: Start of error session.\n", date);
|
fprintf(pF, "L %s: Start of error session.\n", date);
|
||||||
fprintf(pF, "L %s: Info (map \"%s\") (file \"%s\")\n", date, STRING(gpGlobals->mapname), name);
|
fprintf(pF, "L %s: Info (map \"%s\") (logfile \"error_%02d%02d%02d.log\")\n", date, STRING(gpGlobals->mapname), curTime->tm_mon + 1, curTime->tm_mday, curTime->tm_year - 100);
|
||||||
m_LoggedErrMap = true;
|
m_LoggedErrMap = true;
|
||||||
}
|
}
|
||||||
fprintf(pF, "L %s: %s\n", date, msg);
|
fprintf(pF, "L %s: %s\n", date, msg);
|
||||||
|
@ -46,7 +46,7 @@ bool BinLog::Open()
|
|||||||
if (!DirExists(path))
|
if (!DirExists(path))
|
||||||
{
|
{
|
||||||
mkdir(path
|
mkdir(path
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#if defined __linux__
|
||||||
, 0755
|
, 0755
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
@ -1,608 +0,0 @@
|
|||||||
/* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "amxmodx.h"
|
|
||||||
#include "datastructs.h"
|
|
||||||
|
|
||||||
|
|
||||||
// Note: All handles start at 1. 0 and below are invalid handles.
|
|
||||||
// This way, a plugin that doesn't initialize a vector or
|
|
||||||
// string will not be able to modify another plugin's data
|
|
||||||
// on accident.
|
|
||||||
CVector<CellVector*> VectorHolder;
|
|
||||||
|
|
||||||
|
|
||||||
// Array:ArrayCreate(cellsize=1, reserved=32);
|
|
||||||
static cell AMX_NATIVE_CALL ArrayCreate(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
// params[1] (cellsize) is how big in cells each element is.
|
|
||||||
// this MUST be greater than 0!
|
|
||||||
int cellsize=params[1];
|
|
||||||
|
|
||||||
// params[2] (reserved) is how many elements to allocate
|
|
||||||
// immediately when the list is created.
|
|
||||||
// this MUST be greater than 0!
|
|
||||||
int reserved=params[2];
|
|
||||||
|
|
||||||
if (cellsize<=0)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid array size (%d)", cellsize);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (reserved<=0)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid reserved size (%d)", reserved);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scan through the vector list to see if any are NULL.
|
|
||||||
// NULL means the vector was previously destroyed.
|
|
||||||
for (unsigned int i=0; i < VectorHolder.size(); ++i)
|
|
||||||
{
|
|
||||||
if (VectorHolder[i]==NULL)
|
|
||||||
{
|
|
||||||
VectorHolder[i]=new CellVector(cellsize);
|
|
||||||
VectorHolder[i]->Grow(reserved);
|
|
||||||
return i + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// None are NULL, create a new vector
|
|
||||||
CellVector* NewVector=new CellVector(cellsize);
|
|
||||||
NewVector->Grow(reserved);
|
|
||||||
|
|
||||||
VectorHolder.push_back(NewVector);
|
|
||||||
|
|
||||||
return VectorHolder.size();
|
|
||||||
}
|
|
||||||
// ArrayClear(Array:which)
|
|
||||||
static cell AMX_NATIVE_CALL ArrayClear(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->Clear();
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArraySize(Array:which)
|
|
||||||
static cell AMX_NATIVE_CALL ArraySize(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return vec->Size();
|
|
||||||
}
|
|
||||||
// ArrayGetArray(Array:which, item, any:output[]);
|
|
||||||
static cell AMX_NATIVE_CALL ArrayGetArray(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vec->GetArray(params[2],get_amxaddr(amx, params[3]))!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayGetCell(Array:which, item, any:&output);
|
|
||||||
static cell AMX_NATIVE_CALL ArrayGetCell(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
cell ret;
|
|
||||||
if (vec->GetCell(params[2],&ret)!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
// ArrayGetString(Array:which, item, any:output[], size);
|
|
||||||
static cell AMX_NATIVE_CALL ArrayGetString(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vec->GetString(params[2],get_amxaddr(amx, params[3]),params[4])!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArraySetArray(Array:which, item, any:output[]);
|
|
||||||
static cell AMX_NATIVE_CALL ArraySetArray(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vec->SetArray(params[2],get_amxaddr(amx, params[3]))!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArraySetCell(Array:which, item, any:&output);
|
|
||||||
static cell AMX_NATIVE_CALL ArraySetCell(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vec->SetCell(params[2], params[3])!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArraySetString(Array:which, item, any:output[]);
|
|
||||||
static cell AMX_NATIVE_CALL ArraySetString(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vec->SetString(params[2],get_amxaddr(amx, params[3]))!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid cellvector handle provided (%d:%d:%d)", params[1], params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayPushArray(Array:which, any:output[]);
|
|
||||||
static cell AMX_NATIVE_CALL ArrayPushArray(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetArray(vec->Push(),get_amxaddr(amx, params[2]));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayPushCell(Array:which, &any:output);
|
|
||||||
static cell AMX_NATIVE_CALL ArrayPushCell(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetCell(vec->Push(), params[2]);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayPushString(Array:which, any:output[]);
|
|
||||||
static cell AMX_NATIVE_CALL ArrayPushString(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec==NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetString(vec->Push(),get_amxaddr(amx, params[2]));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
static cell AMX_NATIVE_CALL ArrayGetStringHandle(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (vec == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
cell* ptr=vec->GetCellPointer(params[2]);
|
|
||||||
|
|
||||||
if (ptr == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return reinterpret_cast<cell>(ptr);
|
|
||||||
|
|
||||||
}
|
|
||||||
// ArrayInsertArrayAfter(Array:which, item, const value[])
|
|
||||||
static cell AMX_NATIVE_CALL ArrayInsertArrayAfter(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int item=params[2]+1;
|
|
||||||
|
|
||||||
if (vec->ShiftUpFrom(item)!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertArrayAfter (%d:%d)", params[1], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetArray(item, get_amxaddr(amx, params[3]));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayInsertCellAfter(Array:which, item, value[])
|
|
||||||
static cell AMX_NATIVE_CALL ArrayInsertCellAfter(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int item=params[2]+1;
|
|
||||||
|
|
||||||
if (vec->ShiftUpFrom(item)!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertCellAfter (%d:%d)", params[1], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetCell(item, params[3]);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayInsertStringAfter(Array:which, item, const value[])
|
|
||||||
static cell AMX_NATIVE_CALL ArrayInsertStringAfter(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int item=params[2]+1;
|
|
||||||
|
|
||||||
if (vec->ShiftUpFrom(item)!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertStringAfter (%d:%d)", params[1], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetString(item, get_amxaddr(amx, params[3]));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayInsertArrayBefore(Array:which, item, const value[])
|
|
||||||
static cell AMX_NATIVE_CALL ArrayInsertArrayBefore(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int item=params[2];
|
|
||||||
|
|
||||||
if (item==vec->Size())
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertArrayBefore (%d:%d)", params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (vec->ShiftUpFrom(item)!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertArrayBefore (%d:%d)", params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetArray(item, get_amxaddr(amx, params[3]));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayInsertCellBefore(Array:which, item, const value)
|
|
||||||
static cell AMX_NATIVE_CALL ArrayInsertCellBefore(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int item=params[2];
|
|
||||||
|
|
||||||
if (item==vec->Size())
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertCellBefore (%d:%d)", params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (vec->ShiftUpFrom(item)!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertCellBefore (%d:%d)", params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetCell(item, params[3]);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// ArrayInsertStringBefore(Array:which, item, const value[])
|
|
||||||
static cell AMX_NATIVE_CALL ArrayInsertStringBefore(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int item=params[2];
|
|
||||||
|
|
||||||
if (item==vec->Size())
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertStringBefore (%d:%d)", params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (vec->ShiftUpFrom(item)!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayInsertStringBefore (%d:%d)", params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->SetString(item, get_amxaddr(amx, params[3]));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ArraySwap(Array:which, item1, item2)
|
|
||||||
static cell AMX_NATIVE_CALL ArraySwap(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (vec->Swap(params[2], params[3])!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArraySwap (%d , %d:%d)",params[2], params[3], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ArrayDeleteItem(Array:which, item);
|
|
||||||
static cell AMX_NATIVE_CALL ArrayDeleteItem(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
CellVector* vec=HandleToVector(amx, params[1]);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vec->Delete(params[2])!=1)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid item specified in ArrayDeleteItem (%d:%d)", params[2], vec->Size());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ArrayDestroy(Array:&which)
|
|
||||||
static cell AMX_NATIVE_CALL ArrayDestroy(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
// byref the handle here so we can zero it out after destroying
|
|
||||||
// this way they cannot accidentally reuse it
|
|
||||||
cell* handle=get_amxaddr(amx,params[1]);
|
|
||||||
CellVector* vec=HandleToVector(amx, *handle);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete vec;
|
|
||||||
|
|
||||||
VectorHolder[*handle-1]=NULL;
|
|
||||||
|
|
||||||
*handle=0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct ArraySort_s
|
|
||||||
{
|
|
||||||
int handle;
|
|
||||||
int forward;
|
|
||||||
cell data;
|
|
||||||
cell size;
|
|
||||||
|
|
||||||
} ArraySort_t;
|
|
||||||
|
|
||||||
static CStack<ArraySort_t *> ArraySortStack;
|
|
||||||
|
|
||||||
int SortArrayList(const void *itema, const void *itemb)
|
|
||||||
{
|
|
||||||
ArraySort_t *Info = ArraySortStack.front();
|
|
||||||
|
|
||||||
return executeForwards(Info->forward, Info->handle, *((int *)itema), *((int *)itemb), Info->data, Info->size);
|
|
||||||
|
|
||||||
}
|
|
||||||
// native ArraySort(Array:array, const comparefunc[], data[]="", data_size=0);
|
|
||||||
static cell AMX_NATIVE_CALL ArraySort(AMX* amx, cell* params)
|
|
||||||
{
|
|
||||||
int handle=params[1];
|
|
||||||
CellVector* vec=HandleToVector(amx, handle);
|
|
||||||
|
|
||||||
if (!vec)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is kind of a cheating way to go about this but...
|
|
||||||
// Create an array of integers as big as however many elements are in the vector.
|
|
||||||
// Pass that array to qsort
|
|
||||||
// After the array is sorted out, then create a NEW cellvector
|
|
||||||
// and copy in the old data in the order of what was sorted
|
|
||||||
int len;
|
|
||||||
char* FuncName=get_amxstring(amx, params[2], 0, len);
|
|
||||||
// MySortFunc(Array:array, item1, item2, const data[], data_size)
|
|
||||||
int Forward = registerSPForwardByName(amx, FuncName, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
|
|
||||||
if (Forward < 0)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "The public function \"%s\" was not found.", FuncName);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int *IntList=new int[vec->Size()];
|
|
||||||
|
|
||||||
for (int i=0; i< vec->Size(); i++)
|
|
||||||
{
|
|
||||||
IntList[i]=i;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArraySort_t *Info=new ArraySort_t;
|
|
||||||
|
|
||||||
Info->handle=handle;
|
|
||||||
Info->forward=Forward;
|
|
||||||
Info->data=params[3];
|
|
||||||
Info->size=params[4];
|
|
||||||
|
|
||||||
ArraySortStack.push(Info);
|
|
||||||
qsort(IntList, vec->Size(), sizeof(int), SortArrayList);
|
|
||||||
ArraySortStack.pop();
|
|
||||||
|
|
||||||
CellVector* newvec=new CellVector(vec->GetCellCount());
|
|
||||||
|
|
||||||
// Set the new vector's values
|
|
||||||
for (int i=0; i< vec->Size(); i++)
|
|
||||||
{
|
|
||||||
if (newvec->SetArray(newvec->Push(), vec->GetCellPointer(IntList[i]))!=1)
|
|
||||||
{
|
|
||||||
// This should never happen..
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Failed to SetArray in ArraySort (i=%d, IntList=%d)",i,IntList[i]);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete the old vector
|
|
||||||
delete vec;
|
|
||||||
|
|
||||||
// Now save the new vector in its handle location
|
|
||||||
VectorHolder[handle-1]=newvec;
|
|
||||||
|
|
||||||
// Cleanup
|
|
||||||
delete Info;
|
|
||||||
delete IntList;
|
|
||||||
|
|
||||||
unregisterSPForward(Forward);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AMX_NATIVE_INFO g_DataStructNatives[] =
|
|
||||||
{
|
|
||||||
{ "ArrayCreate", ArrayCreate },
|
|
||||||
{ "ArrayClear", ArrayClear },
|
|
||||||
{ "ArraySize", ArraySize },
|
|
||||||
{ "ArrayGetArray", ArrayGetArray },
|
|
||||||
{ "ArrayGetCell", ArrayGetCell },
|
|
||||||
{ "ArrayGetString", ArrayGetString },
|
|
||||||
{ "ArraySetArray", ArraySetArray },
|
|
||||||
{ "ArraySetCell", ArraySetCell },
|
|
||||||
{ "ArraySetString", ArraySetString },
|
|
||||||
{ "ArrayPushArray", ArrayPushArray },
|
|
||||||
{ "ArrayPushCell", ArrayPushCell },
|
|
||||||
{ "ArrayPushString", ArrayPushString },
|
|
||||||
{ "ArrayInsertArrayAfter", ArrayInsertArrayAfter },
|
|
||||||
{ "ArrayInsertCellAfter", ArrayInsertCellAfter },
|
|
||||||
{ "ArrayInsertStringAfter", ArrayInsertStringAfter },
|
|
||||||
{ "ArrayInsertArrayBefore", ArrayInsertArrayBefore },
|
|
||||||
{ "ArrayInsertCellBefore", ArrayInsertCellBefore },
|
|
||||||
{ "ArrayInsertStringBefore", ArrayInsertStringBefore },
|
|
||||||
{ "ArraySwap", ArraySwap },
|
|
||||||
{ "ArrayDeleteItem", ArrayDeleteItem },
|
|
||||||
{ "ArrayGetStringHandle", ArrayGetStringHandle },
|
|
||||||
{ "ArrayDestroy", ArrayDestroy },
|
|
||||||
{ "ArraySort", ArraySort },
|
|
||||||
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
@ -1,321 +0,0 @@
|
|||||||
/* 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 DATASTRUCTS_H
|
|
||||||
#define DATASTRUCTS_H
|
|
||||||
|
|
||||||
class CellVector
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
cell* data; // allocated with malloc
|
|
||||||
size_t cellcount; // how many cells per element
|
|
||||||
size_t cursize; // current size of the vector (maximum elements)
|
|
||||||
size_t count; // how many units of the vector are in use
|
|
||||||
|
|
||||||
public:
|
|
||||||
CellVector(): data(NULL), cellcount(0), cursize(0), count(0)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
CellVector(int cellsize): data(NULL), cellcount(cellsize), cursize(0), count(0)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
~CellVector()
|
|
||||||
{
|
|
||||||
if (data)
|
|
||||||
{
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
size_t GetCellCount()
|
|
||||||
{
|
|
||||||
return cellcount;
|
|
||||||
};
|
|
||||||
void Grow(size_t howmany)
|
|
||||||
{
|
|
||||||
cursize+=howmany;
|
|
||||||
if (data)
|
|
||||||
{
|
|
||||||
data=(cell*)realloc(data, (sizeof(cell) * cellcount) * cursize);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
data=(cell*)malloc((sizeof(cell) * cellcount) * cursize);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
void FreeUnused(void)
|
|
||||||
{
|
|
||||||
if (cursize != count &&
|
|
||||||
data != NULL)
|
|
||||||
{
|
|
||||||
cursize=count;
|
|
||||||
data=(cell*)realloc(data, cursize * (sizeof(cell) * cellcount));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// Returns 1 on success
|
|
||||||
// 0 on out of bounds.
|
|
||||||
int GetArray(size_t which, cell* output)
|
|
||||||
{
|
|
||||||
// make sure it is in bounds.
|
|
||||||
if (which >= count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
// align output data
|
|
||||||
cell* out=data + (cellcount * which);
|
|
||||||
|
|
||||||
memcpy(output, out, sizeof(cell) * cellcount);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
// Returns 1 on success
|
|
||||||
// 0 on out of bounds
|
|
||||||
int GetCell(size_t which, cell* output)
|
|
||||||
{
|
|
||||||
// check bounds
|
|
||||||
if (which >= count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
*output=*(data + (cellcount * which));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// Returns 1 on success
|
|
||||||
// 0 on out of bounds
|
|
||||||
int GetString(size_t which, cell* output, size_t size)
|
|
||||||
{
|
|
||||||
// check bounds
|
|
||||||
if (which >= count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
cell* out=data + (cellcount * which);
|
|
||||||
|
|
||||||
size_t count=cellcount;
|
|
||||||
|
|
||||||
while (size-- &&
|
|
||||||
count-- &&
|
|
||||||
(*output++=*out++)!='\0')
|
|
||||||
/* do nothing */ ;
|
|
||||||
|
|
||||||
// If size is zero here, then the string was never null terminated.
|
|
||||||
if (size==0)
|
|
||||||
{
|
|
||||||
*out='\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// Returns 1 on success
|
|
||||||
// 0 on out of bounds
|
|
||||||
int SetArray(size_t which, cell* output)
|
|
||||||
{
|
|
||||||
if (which >= count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
// align output
|
|
||||||
cell* out=data + (cellcount * which);
|
|
||||||
|
|
||||||
memcpy(out, output, sizeof(cell) * cellcount);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
// Returns 1 on success
|
|
||||||
// 0 on out of bounds
|
|
||||||
int SetCell(size_t which, cell output)
|
|
||||||
{
|
|
||||||
if (which >= count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
// align output
|
|
||||||
*(data + (cellcount * which))=output;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
// Returns 1 on success
|
|
||||||
// 0 on out of bounds
|
|
||||||
int SetString(size_t which, cell* output)
|
|
||||||
{
|
|
||||||
if (which >= count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
// align output
|
|
||||||
cell* out=data + (cellcount * which);
|
|
||||||
|
|
||||||
memcpy(out, output, sizeof(cell) * cellcount);
|
|
||||||
|
|
||||||
// now force a null terminator on the last entry.
|
|
||||||
out+=(cellcount - 1);
|
|
||||||
*out='\0';
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
int Push()
|
|
||||||
{
|
|
||||||
if (count >= cursize)
|
|
||||||
{
|
|
||||||
// Grow in 8s to cause less reallocation
|
|
||||||
this->Grow(8);
|
|
||||||
};
|
|
||||||
|
|
||||||
this->count++;
|
|
||||||
|
|
||||||
return this->count-1;
|
|
||||||
};
|
|
||||||
int Size()
|
|
||||||
{
|
|
||||||
return this->count;
|
|
||||||
};
|
|
||||||
void Clear()
|
|
||||||
{
|
|
||||||
free(data);
|
|
||||||
data=(cell*)malloc(sizeof(cell) * cellcount);
|
|
||||||
cursize=1;
|
|
||||||
count=0;
|
|
||||||
};
|
|
||||||
cell* GetCellPointer(size_t which)
|
|
||||||
{
|
|
||||||
if (which >= count)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return data + (which * cellcount);
|
|
||||||
};
|
|
||||||
// Shifts all items from this item, and including this item up 1.
|
|
||||||
int ShiftUpFrom(size_t which)
|
|
||||||
{
|
|
||||||
// No point shifting this.
|
|
||||||
if (which > this->count)
|
|
||||||
{
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
// First make a new item.
|
|
||||||
this->Push();
|
|
||||||
|
|
||||||
// If we got an InsertAfter(lastitem), then which will equal this->count - 1
|
|
||||||
// all we needed to do was Push()
|
|
||||||
if (which == this->count ||
|
|
||||||
which == this->count - 1)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allocate a temporary buffer to store data in
|
|
||||||
size_t tempbuffsize=(sizeof(cell) * cellcount) * (this->count - which);
|
|
||||||
|
|
||||||
cell* temp=(cell*)malloc(tempbuffsize);
|
|
||||||
|
|
||||||
// Copy old data to temp buffer
|
|
||||||
memcpy(temp, GetCellPointer(which), tempbuffsize);
|
|
||||||
|
|
||||||
// Now copy temp buffer to adjusted location
|
|
||||||
memcpy(GetCellPointer(which+1), temp, tempbuffsize);
|
|
||||||
|
|
||||||
// cleanup
|
|
||||||
free(temp);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
};
|
|
||||||
// Shifts all items from this item, and including this item down 1.
|
|
||||||
// This deletes the item specified.
|
|
||||||
int Delete(size_t which)
|
|
||||||
{
|
|
||||||
// No point shifting this.
|
|
||||||
if (which >= this->count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for (size_t i=which; i<this->count - 1; i++)
|
|
||||||
{
|
|
||||||
memcpy(GetCellPointer(i), GetCellPointer(i + 1), sizeof(cell) * cellcount);
|
|
||||||
}
|
|
||||||
this->count--;
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
int Swap(size_t item1, size_t item2)
|
|
||||||
{
|
|
||||||
if (item1 >= this->count ||
|
|
||||||
item2 >= this->count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make a temp buffer to store item2
|
|
||||||
cell* temp=(cell*)malloc(sizeof(cell) * cellcount);
|
|
||||||
memcpy(temp, GetCellPointer(item2), sizeof(cell) * cellcount);
|
|
||||||
|
|
||||||
// copy item1 to item2
|
|
||||||
memcpy(GetCellPointer(item2), GetCellPointer(item1), sizeof(cell) * cellcount);
|
|
||||||
|
|
||||||
// copy item2 to item1
|
|
||||||
memcpy(GetCellPointer(item1), temp, sizeof(cell) * cellcount);
|
|
||||||
|
|
||||||
// Cleanup
|
|
||||||
free(temp);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
extern CVector<CellVector*> VectorHolder;
|
|
||||||
|
|
||||||
|
|
||||||
inline CellVector* HandleToVector(AMX* amx, int handle)
|
|
||||||
{
|
|
||||||
if (handle <= 0 ||
|
|
||||||
handle > (int)VectorHolder.size())
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", handle);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
CellVector* ret=VectorHolder[handle-1];
|
|
||||||
|
|
||||||
if (ret == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid array handle provided (%d)", handle);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -289,7 +289,7 @@ void Debugger::BeginExec()
|
|||||||
{
|
{
|
||||||
Tracer *pTracer = new Tracer();
|
Tracer *pTracer = new Tracer();
|
||||||
m_pCalls.push_back(pTracer);
|
m_pCalls.push_back(pTracer);
|
||||||
assert(m_Top == static_cast<int>(m_pCalls.size() - 1));
|
assert(m_Top == (m_pCalls.size() - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pCalls[m_Top]->Reset();
|
m_pCalls[m_Top]->Reset();
|
||||||
@ -614,9 +614,9 @@ void Debugger::FmtGenericMsg(AMX *amx, int error, char buffer[], size_t maxLengt
|
|||||||
if (a)
|
if (a)
|
||||||
filename = (*a).getName();
|
filename = (*a).getName();
|
||||||
size_t len = strlen(filename);
|
size_t len = strlen(filename);
|
||||||
for (size_t i=len-1; i<len; i--)
|
for (size_t i=len-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
if ((filename[i] == '/' || filename[i] == '\\') && i != len - 1)
|
if (filename[i] == '/' || filename[i] == '\\' && i != len - 1)
|
||||||
{
|
{
|
||||||
filename = &(filename[i+1]);
|
filename = &(filename[i+1]);
|
||||||
break;
|
break;
|
||||||
|
@ -176,7 +176,7 @@ public:
|
|||||||
trace_info_t *GetTrace() const { return m_pTrace; }
|
trace_info_t *GetTrace() const { return m_pTrace; }
|
||||||
const char *GetFmtCache() { return m_FmtCache.c_str(); }
|
const char *GetFmtCache() { return m_FmtCache.c_str(); }
|
||||||
|
|
||||||
bool IsNativeFiltering() { return (m_iNatFunc > -1); }
|
bool IsNativeFiltering() { return (m_iNatFunc > 0); }
|
||||||
bool InNativeFilter() { return m_InNativeFilter; }
|
bool InNativeFilter() { return m_InNativeFilter; }
|
||||||
private:
|
private:
|
||||||
AMX *m_pAmx;
|
AMX *m_pAmx;
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "CMenu.h"
|
|
||||||
|
|
||||||
int gmsgAmmoPickup;
|
int gmsgAmmoPickup;
|
||||||
int gmsgAmmoX;
|
int gmsgAmmoX;
|
||||||
@ -93,10 +92,9 @@ void Client_ShowMenu(void* mValue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern bool g_bmod_tfc;
|
|
||||||
void Client_TeamInfo(void* mValue)
|
void Client_TeamInfo(void* mValue)
|
||||||
{
|
{
|
||||||
if (mPlayer && !g_bmod_tfc) return;
|
if (mPlayer) return;
|
||||||
static int index;
|
static int index;
|
||||||
|
|
||||||
switch (mState++)
|
switch (mState++)
|
||||||
@ -109,8 +107,6 @@ 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);
|
||||||
g_players[index].teamId = g_teamsIds.findTeamId(msg);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,15 +209,9 @@ void Client_CurWeapon(void* mValue)
|
|||||||
case 2:
|
case 2:
|
||||||
if (!mPlayer) return;
|
if (!mPlayer) return;
|
||||||
if (!iState || (iId < 1 || iId >= MAX_WEAPONS)) break;
|
if (!iState || (iId < 1 || iId >= MAX_WEAPONS)) break;
|
||||||
mPlayer->current = iId;
|
|
||||||
|
|
||||||
|
|
||||||
if (*(int*)mValue < mPlayer->weapons[iId].clip && // Only update the lastHit vector if the clip size is decreasing
|
|
||||||
*(int*)mValue != -1) // But not if it's a melee weapon
|
|
||||||
{
|
|
||||||
mPlayer->lastHit = mPlayer->lastTrace;
|
|
||||||
}
|
|
||||||
mPlayer->weapons[iId].clip = *(int*)mValue;
|
mPlayer->weapons[iId].clip = *(int*)mValue;
|
||||||
|
mPlayer->current = iId;
|
||||||
|
mPlayer->lastHit = mPlayer->lastTrace;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// header file for unlink()
|
// header file for unlink()
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#else
|
#else
|
||||||
#define WINDOWS_LEAN_AND_MEAN
|
#define WINDOWS_LEAN_AND_MEAN
|
||||||
@ -383,9 +383,8 @@ static cell AMX_NATIVE_CALL amx_fwrite_blocks(AMX *amx, cell *params)
|
|||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
char *a = new char[blocks];
|
char *a = new char[blocks];
|
||||||
char *ptr = a;
|
|
||||||
while (btmp--)
|
while (btmp--)
|
||||||
*ptr++ = static_cast<char>(*addr++);
|
*a++ = static_cast<char>(*addr++);
|
||||||
size_t res = fwrite(a, sizeof(char), blocks, fp);
|
size_t res = fwrite(a, sizeof(char), blocks, fp);
|
||||||
delete [] a;
|
delete [] a;
|
||||||
return res;
|
return res;
|
||||||
@ -393,9 +392,8 @@ static cell AMX_NATIVE_CALL amx_fwrite_blocks(AMX *amx, cell *params)
|
|||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
short *a = new short[blocks];
|
short *a = new short[blocks];
|
||||||
short *ptr = a;
|
|
||||||
while (btmp--)
|
while (btmp--)
|
||||||
*ptr++ = static_cast<short>(*addr++);
|
*a++ = static_cast<short>(*addr++);
|
||||||
size_t res = fwrite(a, sizeof(short), blocks, fp);
|
size_t res = fwrite(a, sizeof(short), blocks, fp);
|
||||||
delete [] a;
|
delete [] a;
|
||||||
return res;
|
return res;
|
||||||
@ -403,9 +401,8 @@ static cell AMX_NATIVE_CALL amx_fwrite_blocks(AMX *amx, cell *params)
|
|||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
int *a = new int[blocks];
|
int *a = new int[blocks];
|
||||||
int *ptr = a;
|
|
||||||
while (btmp--)
|
while (btmp--)
|
||||||
*ptr++ = static_cast<int>(*addr++);
|
*a++ = static_cast<int>(*addr++);
|
||||||
size_t res = fwrite(a, sizeof(int), blocks, fp);
|
size_t res = fwrite(a, sizeof(int), blocks, fp);
|
||||||
delete [] a;
|
delete [] a;
|
||||||
return res;
|
return res;
|
||||||
@ -438,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(int), 1, fp);
|
return fwrite(&c, sizeof(short), 1, fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -516,7 +513,7 @@ static cell AMX_NATIVE_CALL amx_fread_blocks(AMX *amx, cell *params)
|
|||||||
|
|
||||||
cell *addr = get_amxaddr(amx, params[2]);
|
cell *addr = get_amxaddr(amx, params[2]);
|
||||||
size_t blocks = params[3];
|
size_t blocks = params[3];
|
||||||
switch (params[4])
|
switch (params[3])
|
||||||
{
|
{
|
||||||
case 1: //char
|
case 1: //char
|
||||||
{
|
{
|
||||||
@ -784,7 +781,7 @@ static cell AMX_NATIVE_CALL amx_ungetc(AMX *amx, cell *params)
|
|||||||
return ungetc(static_cast<int>(params[2]), fp);
|
return ungetc(static_cast<int>(params[2]), fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#if defined __linux__
|
||||||
#define _rmdir rmdir
|
#define _rmdir rmdir
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -802,66 +799,16 @@ 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])
|
#if defined __linux__
|
||||||
{
|
return (rename(fold, fnew) == 0);
|
||||||
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__) || defined(__APPLE__)
|
|
||||||
return (rename(f_old_r, f_new_r) == 0);
|
|
||||||
#elif defined WIN32
|
#elif defined WIN32
|
||||||
return MoveFileA(f_old_r, f_new_r);
|
return MoveFileA(fold, fnew);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell LoadFileForMe(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
char *file = get_amxstring(amx, params[1], 0, len);
|
|
||||||
char path[256];
|
|
||||||
|
|
||||||
build_pathname_r(path, sizeof(path), "%s", file);
|
|
||||||
|
|
||||||
byte *addr = LOAD_FILE_FOR_ME(path, &len);
|
|
||||||
if (addr == NULL)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
cell *buffer = get_amxaddr(amx, params[2]);
|
|
||||||
cell maxlength = params[3];
|
|
||||||
cell *bytes_avail = get_amxaddr(amx, params[4]);
|
|
||||||
|
|
||||||
*bytes_avail = len;
|
|
||||||
|
|
||||||
cell count;
|
|
||||||
for (count = 0; count < len && count < maxlength; count++)
|
|
||||||
{
|
|
||||||
buffer[count] = addr[count];
|
|
||||||
}
|
|
||||||
|
|
||||||
FREE_FILE(addr);
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL amx_fflush(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
FILE *fp = (FILE *)params[1];
|
|
||||||
|
|
||||||
return fflush(fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMX_NATIVE_INFO file_Natives[] =
|
AMX_NATIVE_INFO file_Natives[] =
|
||||||
{
|
{
|
||||||
{"delete_file", delete_file},
|
{"delete_file", delete_file},
|
||||||
@ -897,7 +844,5 @@ AMX_NATIVE_INFO file_Natives[] =
|
|||||||
{"rmdir", amx_rmdir},
|
{"rmdir", amx_rmdir},
|
||||||
{"fputs", amx_fputs},
|
{"fputs", amx_fputs},
|
||||||
{"rename_file", amx_rename},
|
{"rename_file", amx_rename},
|
||||||
{"LoadFileForMe", LoadFileForMe},
|
|
||||||
{"fflush", amx_fflush},
|
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "format.h"
|
#include "format.h"
|
||||||
#include "datastructs.h"
|
|
||||||
#include "amxmod_compat.h"
|
#include "amxmod_compat.h"
|
||||||
|
|
||||||
//Adapted from Quake3's vsprintf
|
//Adapted from Quake3's vsprintf
|
||||||
@ -19,7 +18,6 @@
|
|||||||
#define SHORTINT 0x00000040 /* short integer */
|
#define SHORTINT 0x00000040 /* short integer */
|
||||||
#define ZEROPAD 0x00000080 /* zero (as opposed to blank) pad */
|
#define ZEROPAD 0x00000080 /* zero (as opposed to blank) pad */
|
||||||
#define FPT 0x00000100 /* floating point number */
|
#define FPT 0x00000100 /* floating point number */
|
||||||
#define UPPERDIGITS 0x00000200 /* make alpha digits uppercase */
|
|
||||||
#define to_digit(c) ((c) - '0')
|
#define to_digit(c) ((c) - '0')
|
||||||
#define is_digit(c) ((unsigned)to_digit(c) <= 9)
|
#define is_digit(c) ((unsigned)to_digit(c) <= 9)
|
||||||
#define to_char(n) ((n) + '0')
|
#define to_char(n) ((n) + '0')
|
||||||
@ -29,11 +27,6 @@
|
|||||||
return 0; \
|
return 0; \
|
||||||
}
|
}
|
||||||
|
|
||||||
template size_t atcprintf<cell, cell>(cell *, size_t, const cell *, AMX *, cell *, int *);
|
|
||||||
template size_t atcprintf<char, cell>(char *, size_t, const cell *, AMX *, cell *, int *);
|
|
||||||
template size_t atcprintf<cell, char>(cell *, size_t, const char *, AMX *, cell *, int *);
|
|
||||||
template size_t atcprintf<char, char>(char *, size_t, const char *, AMX *, cell *, int *);
|
|
||||||
|
|
||||||
THash<String, lang_err> BadLang_Table;
|
THash<String, lang_err> BadLang_Table;
|
||||||
|
|
||||||
static cvar_t *amx_mldebug = NULL;
|
static cvar_t *amx_mldebug = NULL;
|
||||||
@ -165,125 +158,71 @@ void AddString(U **buf_p, size_t &maxlen, const cell *string, int width, int pre
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename U>
|
template <typename U>
|
||||||
void AddFloat(U **buf_p, size_t &maxlen, double fval, int width, int prec, int flags)
|
void AddFloat(U **buf_p, size_t &maxlen, double fval, int width, int prec)
|
||||||
{
|
{
|
||||||
int digits; // non-fraction part digits
|
U text[32];
|
||||||
double tmp; // temporary
|
int digits;
|
||||||
U *buf = *buf_p; // output buffer pointer
|
double signedVal;
|
||||||
int val; // temporary
|
U *buf;
|
||||||
int sign = 0; // 0: positive, 1: negative
|
int val;
|
||||||
int fieldlength; // for padding
|
|
||||||
int significant_digits = 0; // number of significant digits written
|
|
||||||
const int MAX_SIGNIFICANT_DIGITS = 16;
|
|
||||||
|
|
||||||
// default precision
|
|
||||||
if (prec < 0)
|
|
||||||
{
|
|
||||||
prec = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get the sign
|
// get the sign
|
||||||
|
signedVal = fval;
|
||||||
if (fval < 0)
|
if (fval < 0)
|
||||||
{
|
|
||||||
fval = -fval;
|
fval = -fval;
|
||||||
sign = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// compute whole-part digits count
|
// write the float number
|
||||||
digits = (int)log10(fval) + 1;
|
digits = 0;
|
||||||
|
val = (int)fval;
|
||||||
|
do {
|
||||||
|
text[digits++] = '0' + val % 10;
|
||||||
|
val /= 10;
|
||||||
|
} while (val);
|
||||||
|
|
||||||
// Only print 0.something if 0 < fval < 1
|
if (signedVal < 0)
|
||||||
if (digits < 1)
|
text[digits++] = '-';
|
||||||
{
|
|
||||||
digits = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// compute the field length
|
buf = *buf_p;
|
||||||
fieldlength = digits + prec + ((prec > 0) ? 1 : 0) + sign;
|
|
||||||
|
|
||||||
// minus sign BEFORE left padding if padding with zeros
|
while (digits < width && maxlen)
|
||||||
if (sign && maxlen && (flags & ZEROPAD))
|
|
||||||
{
|
{
|
||||||
*buf++ = '-';
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
|
|
||||||
// right justify if required
|
|
||||||
if ((flags & LADJUST) == 0)
|
|
||||||
{
|
|
||||||
while ((fieldlength < width) && maxlen)
|
|
||||||
{
|
|
||||||
*buf++ = (flags & ZEROPAD) ? '0' : ' ';
|
|
||||||
width--;
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// minus sign AFTER left padding if padding with spaces
|
|
||||||
if (sign && maxlen && !(flags & ZEROPAD))
|
|
||||||
{
|
|
||||||
*buf++ = '-';
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
|
|
||||||
// write the whole part
|
|
||||||
tmp = pow(10.0, digits-1);
|
|
||||||
while ((digits--) && maxlen)
|
|
||||||
{
|
|
||||||
if (++significant_digits > MAX_SIGNIFICANT_DIGITS)
|
|
||||||
{
|
|
||||||
*buf++ = '0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
val = (int)(fval / tmp);
|
|
||||||
*buf++ = '0' + val;
|
|
||||||
fval -= val * tmp;
|
|
||||||
tmp *= 0.1;
|
|
||||||
}
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
|
|
||||||
// write the fraction part
|
|
||||||
if (maxlen && prec)
|
|
||||||
{
|
|
||||||
*buf++ = '.';
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp = pow(10.0, prec);
|
|
||||||
|
|
||||||
fval *= tmp;
|
|
||||||
while (prec-- && maxlen)
|
|
||||||
{
|
|
||||||
if (++significant_digits > MAX_SIGNIFICANT_DIGITS)
|
|
||||||
{
|
|
||||||
*buf++ = '0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tmp *= 0.1;
|
|
||||||
val = (int)(fval / tmp);
|
|
||||||
*buf++ = '0' + val;
|
|
||||||
fval -= val * tmp;
|
|
||||||
}
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
|
|
||||||
// left justify if required
|
|
||||||
if (flags & LADJUST)
|
|
||||||
{
|
|
||||||
while ((fieldlength < width) && maxlen)
|
|
||||||
{
|
|
||||||
// right-padding only with spaces, ZEROPAD is ignored
|
|
||||||
*buf++ = ' ';
|
*buf++ = ' ';
|
||||||
width--;
|
width--;
|
||||||
maxlen--;
|
maxlen--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (digits-- && maxlen)
|
||||||
|
{
|
||||||
|
*buf++ = text[digits];
|
||||||
|
maxlen--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update parent's buffer pointer
|
|
||||||
*buf_p = buf;
|
*buf_p = buf;
|
||||||
|
|
||||||
|
if (prec < 0)
|
||||||
|
prec = 6;
|
||||||
|
// write the fraction
|
||||||
|
digits = 0;
|
||||||
|
while (digits < prec)
|
||||||
|
{
|
||||||
|
fval -= (int) fval;
|
||||||
|
fval *= 10.0;
|
||||||
|
val = (int) fval;
|
||||||
|
text[digits++] = '0' + val % 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (digits > 0 && maxlen)
|
||||||
|
{
|
||||||
|
buf = *buf_p;
|
||||||
|
*buf++ = '.';
|
||||||
|
maxlen--;
|
||||||
|
for (prec = 0; maxlen && prec < digits; prec++)
|
||||||
|
{
|
||||||
|
*buf++ = text[prec];
|
||||||
|
maxlen--;
|
||||||
|
}
|
||||||
|
*buf_p = buf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename U>
|
template <typename U>
|
||||||
@ -387,66 +326,6 @@ void AddInt(U **buf_p, size_t &maxlen, int val, int width, int flags)
|
|||||||
*buf_p = buf;
|
*buf_p = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename U>
|
|
||||||
void AddHex(U **buf_p, size_t &maxlen, unsigned int val, int width, int flags)
|
|
||||||
{
|
|
||||||
U text[32];
|
|
||||||
int digits;
|
|
||||||
U *buf;
|
|
||||||
U digit;
|
|
||||||
int hexadjust;
|
|
||||||
|
|
||||||
if (flags & UPPERDIGITS)
|
|
||||||
{
|
|
||||||
hexadjust = 'A' - '9' - 1;
|
|
||||||
} else {
|
|
||||||
hexadjust = 'a' - '9' - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
digits = 0;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
digit = ('0' + val % 16);
|
|
||||||
if (digit > '9')
|
|
||||||
{
|
|
||||||
digit += hexadjust;
|
|
||||||
}
|
|
||||||
|
|
||||||
text[digits++] = digit;
|
|
||||||
val /= 16;
|
|
||||||
} while (val);
|
|
||||||
|
|
||||||
buf = *buf_p;
|
|
||||||
|
|
||||||
if( !(flags & LADJUST) )
|
|
||||||
{
|
|
||||||
while (digits < width && maxlen)
|
|
||||||
{
|
|
||||||
*buf++ = (flags & ZEROPAD) ? '0' : ' ';
|
|
||||||
width--;
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (digits-- && maxlen)
|
|
||||||
{
|
|
||||||
*buf++ = text[digits];
|
|
||||||
width--;
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & LADJUST)
|
|
||||||
{
|
|
||||||
while (width-- && maxlen)
|
|
||||||
{
|
|
||||||
*buf++ = (flags & ZEROPAD) ? '0' : ' ';
|
|
||||||
maxlen--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*buf_p = buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename D, typename S>
|
template <typename D, typename S>
|
||||||
size_t atcprintf(D *buffer, size_t maxlen, const S *format, AMX *amx, cell *params, int *param)
|
size_t atcprintf(D *buffer, size_t maxlen, const S *format, AMX *amx, cell *params, int *param)
|
||||||
{
|
{
|
||||||
@ -524,7 +403,6 @@ 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':
|
||||||
@ -540,35 +418,9 @@ reswitch:
|
|||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
CHECK_ARGS(0);
|
CHECK_ARGS(0);
|
||||||
AddFloat(&buf_p, llen, amx_ctof(*get_amxaddr(amx, params[arg])), width, prec, flags);
|
AddFloat(&buf_p, llen, amx_ctof(*get_amxaddr(amx, params[arg])), width, prec);
|
||||||
arg++;
|
arg++;
|
||||||
break;
|
break;
|
||||||
case 'X':
|
|
||||||
CHECK_ARGS(0);
|
|
||||||
flags |= UPPERDIGITS;
|
|
||||||
AddHex(&buf_p, llen, static_cast<unsigned int>(*get_amxaddr(amx, params[arg])), width, flags);
|
|
||||||
arg++;
|
|
||||||
break;
|
|
||||||
case 'x':
|
|
||||||
CHECK_ARGS(0);
|
|
||||||
AddHex(&buf_p, llen, static_cast<unsigned int>(*get_amxaddr(amx, params[arg])), width, flags);
|
|
||||||
arg++;
|
|
||||||
break;
|
|
||||||
case 'a':
|
|
||||||
{
|
|
||||||
CHECK_ARGS(0);
|
|
||||||
// %a is passed a pointer directly to a cell string.
|
|
||||||
cell* ptr=reinterpret_cast<cell*>(*get_amxaddr(amx, params[arg]));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid vector string handle provided (%d)", *get_amxaddr(amx, params[arg]));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
AddString(&buf_p, llen, ptr, width, prec);
|
|
||||||
arg++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 's':
|
case 's':
|
||||||
CHECK_ARGS(0);
|
CHECK_ARGS(0);
|
||||||
if (amx->flags & AMX_FLAG_OLDFILE)
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
|
@ -43,7 +43,7 @@ _amxx_CpuSupport:
|
|||||||
.fail:
|
.fail:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
|
|
||||||
.end:
|
.end
|
||||||
|
|
||||||
pop ebx
|
pop ebx
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ unsigned char *MD5::raw_digest(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const char *MD5::hex_digest(){
|
char *MD5::hex_digest(){
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
char *s= new char[33];
|
char *s= new char[33];
|
||||||
@ -205,7 +205,7 @@ const char *MD5::hex_digest(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *MD5::hex_digest(char buffer[33]){
|
char *MD5::hex_digest(char buffer[33]){
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -59,8 +59,8 @@ public:
|
|||||||
|
|
||||||
// methods to acquire finalized result
|
// methods to acquire finalized result
|
||||||
unsigned char *raw_digest (); // digest as a 16-byte binary array
|
unsigned char *raw_digest (); // digest as a 16-byte binary array
|
||||||
const char *hex_digest (); // digest as a 33-byte ascii-hex string
|
char * hex_digest (); // digest as a 33-byte ascii-hex string
|
||||||
const char *hex_digest (char buffer[33]); //same as above, passing buffer
|
char * hex_digest (char buffer[33]); //same as above, passing buffer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
|
|
||||||
Message Msg;
|
Message Msg;
|
||||||
//CVector<int> msgHooks[256];
|
CVector<int> msgHooks[256];
|
||||||
RegisteredMessage msgHooks[256];
|
|
||||||
int msgBlocks[256] = {BLOCK_NOT};
|
int msgBlocks[256] = {BLOCK_NOT};
|
||||||
int msgDest;
|
int msgDest;
|
||||||
int msgType;
|
int msgType;
|
||||||
@ -17,7 +16,7 @@ void ClearMessages()
|
|||||||
{
|
{
|
||||||
for (size_t i=0; i<MAX_MESSAGES; i++)
|
for (size_t i=0; i<MAX_MESSAGES; i++)
|
||||||
{
|
{
|
||||||
msgHooks[i].Clear();
|
msgHooks[i].clear();
|
||||||
msgBlocks[i] = BLOCK_NOT;
|
msgBlocks[i] = BLOCK_NOT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -201,7 +200,7 @@ void C_MessageBegin(int msg_dest, int msg_type, const float *pOrigin, edict_t *e
|
|||||||
inblock = true;
|
inblock = true;
|
||||||
msgType = msg_type;
|
msgType = msg_type;
|
||||||
RETURN_META(MRES_SUPERCEDE);
|
RETURN_META(MRES_SUPERCEDE);
|
||||||
} else if (msgHooks[msg_type].Hooked()) {
|
} else if (msgHooks[msg_type].size()) {
|
||||||
inhook = true;
|
inhook = true;
|
||||||
msgDest = msg_dest;
|
msgDest = msg_dest;
|
||||||
msgType = msg_type;
|
msgType = msg_type;
|
||||||
@ -319,8 +318,8 @@ void C_WriteEntity(int iValue)
|
|||||||
|
|
||||||
void C_MessageEnd(void)
|
void C_MessageEnd(void)
|
||||||
{
|
{
|
||||||
int mres = 0;
|
int mres = 0, mresB = 0;
|
||||||
|
unsigned int i = 0;
|
||||||
if (inblock)
|
if (inblock)
|
||||||
{
|
{
|
||||||
inblock = false;
|
inblock = false;
|
||||||
@ -330,17 +329,12 @@ void C_MessageEnd(void)
|
|||||||
}
|
}
|
||||||
RETURN_META(MRES_SUPERCEDE);
|
RETURN_META(MRES_SUPERCEDE);
|
||||||
} else if (inhook) {
|
} else if (inhook) {
|
||||||
|
|
||||||
mres = msgHooks[msgType].Execute((cell)msgType, (cell)msgDest, (cell)ENTINDEX(msgpEntity));
|
|
||||||
|
|
||||||
/*
|
|
||||||
for (i=0; i<msgHooks[msgType].size(); i++)
|
for (i=0; i<msgHooks[msgType].size(); i++)
|
||||||
{
|
{
|
||||||
mresB = executeForwards(msgHooks[msgType].at(i), (cell)msgType, (cell)msgDest, (cell)ENTINDEX(msgpEntity));
|
mresB = executeForwards(msgHooks[msgType].at(i), (cell)msgType, (cell)msgDest, (cell)ENTINDEX(msgpEntity));
|
||||||
if (mresB > mres)
|
if (mresB > mres)
|
||||||
mres = mresB;
|
mres = mresB;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
inhook = false;
|
inhook = false;
|
||||||
if (mres & 1)
|
if (mres & 1)
|
||||||
{
|
{
|
||||||
@ -483,7 +477,7 @@ static cell AMX_NATIVE_CALL register_message(AMX *amx, cell *params)
|
|||||||
int id = registerSPForwardByName(amx, name, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
|
int id = registerSPForwardByName(amx, name, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
|
||||||
if (id != -1)
|
if (id != -1)
|
||||||
{
|
{
|
||||||
msgHooks[params[1]].AddHook(id);
|
msgHooks[params[1]].push_back(id);
|
||||||
return id;
|
return id;
|
||||||
} else {
|
} else {
|
||||||
LogError(amx, AMX_ERR_NOTFOUND, "Could not find function \"%s\"", name);
|
LogError(amx, AMX_ERR_NOTFOUND, "Could not find function \"%s\"", name);
|
||||||
@ -494,29 +488,6 @@ static cell AMX_NATIVE_CALL register_message(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// unregister_message(msgid, msghandle)
|
|
||||||
static cell AMX_NATIVE_CALL unregister_message(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
if (!Msg.Ready())
|
|
||||||
Msg.Init();
|
|
||||||
|
|
||||||
if (params[1]>0 && params[1] < 256)
|
|
||||||
{
|
|
||||||
int id = params[2];
|
|
||||||
if (id != -1)
|
|
||||||
{
|
|
||||||
msgHooks[params[1]].RemoveHook(id);
|
|
||||||
return id;
|
|
||||||
} else {
|
|
||||||
LogError(amx, AMX_ERR_NOTFOUND, "Invalid registered message handle");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL set_msg_block(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_msg_block(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
int msgid = params[1];
|
int msgid = params[1];
|
||||||
@ -804,7 +775,6 @@ AMX_NATIVE_INFO msg_Natives[] =
|
|||||||
{"write_string", write_string},
|
{"write_string", write_string},
|
||||||
|
|
||||||
{"register_message", register_message},
|
{"register_message", register_message},
|
||||||
{"unregister_message", unregister_message},
|
|
||||||
|
|
||||||
{"set_msg_block", set_msg_block},
|
{"set_msg_block", set_msg_block},
|
||||||
{"get_msg_block", get_msg_block},
|
{"get_msg_block", get_msg_block},
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include "amx.h"
|
#include "amx.h"
|
||||||
#include "CVector.h"
|
#include "CVector.h"
|
||||||
#include "CString.h"
|
#include "CString.h"
|
||||||
#include "sh_stack.h"
|
|
||||||
|
|
||||||
#define MAX_MESSAGES 255
|
#define MAX_MESSAGES 255
|
||||||
|
|
||||||
@ -16,136 +15,6 @@
|
|||||||
#define BLOCK_ONCE 1
|
#define BLOCK_ONCE 1
|
||||||
#define BLOCK_SET 2
|
#define BLOCK_SET 2
|
||||||
|
|
||||||
class RegisteredMessage
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
CVector<int> m_Forwards;
|
|
||||||
CStack<int> m_InExecution;
|
|
||||||
bool m_Cleanup;
|
|
||||||
|
|
||||||
public:
|
|
||||||
RegisteredMessage() : m_Cleanup(false) { }
|
|
||||||
~RegisteredMessage() { this->Clear(); }
|
|
||||||
|
|
||||||
void AddHook(int fwd)
|
|
||||||
{
|
|
||||||
m_Forwards.push_back(fwd);
|
|
||||||
}
|
|
||||||
bool RemoveHook(int fwd)
|
|
||||||
{
|
|
||||||
// Don't erase a forward if we're in the middle of execution; this
|
|
||||||
// could throw off the iterator that is going through the forwards
|
|
||||||
// and executing them. Instead, unregister the forward and set it
|
|
||||||
// to -1 from within the vector.
|
|
||||||
if (m_InExecution.size())
|
|
||||||
{
|
|
||||||
this->m_Cleanup = true;
|
|
||||||
|
|
||||||
CVector<int>::iterator iter = m_Forwards.begin();
|
|
||||||
CVector<int>::iterator end = m_Forwards.end();
|
|
||||||
while (iter != end)
|
|
||||||
{
|
|
||||||
if (*iter == fwd)
|
|
||||||
{
|
|
||||||
if (*iter != -1)
|
|
||||||
{
|
|
||||||
unregisterSPForward(*iter);
|
|
||||||
}
|
|
||||||
*iter = -1;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CVector<int>::iterator iter = m_Forwards.begin();
|
|
||||||
CVector<int>::iterator end = m_Forwards.end();
|
|
||||||
while (iter != end)
|
|
||||||
{
|
|
||||||
if (*iter == fwd)
|
|
||||||
{
|
|
||||||
if (fwd != -1)
|
|
||||||
{
|
|
||||||
unregisterSPForward(fwd);
|
|
||||||
|
|
||||||
m_Forwards.erase(iter);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// -1 could be in here more than once
|
|
||||||
m_Forwards.erase(iter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Clear()
|
|
||||||
{
|
|
||||||
while (m_InExecution.size())
|
|
||||||
{
|
|
||||||
m_InExecution.pop();
|
|
||||||
}
|
|
||||||
for (size_t i = 0; i < m_Forwards.size(); i++)
|
|
||||||
{
|
|
||||||
int fwd = m_Forwards[i];
|
|
||||||
|
|
||||||
if (fwd != -1)
|
|
||||||
{
|
|
||||||
unregisterSPForward(m_Forwards[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Forwards.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
cell Execute(cell type, cell dest, cell entity)
|
|
||||||
{
|
|
||||||
m_InExecution.push(1);
|
|
||||||
cell res = 0;
|
|
||||||
cell thisres = 0;
|
|
||||||
for (size_t i = 0; i < m_Forwards.size(); i++)
|
|
||||||
{
|
|
||||||
int fwd = m_Forwards[i];
|
|
||||||
|
|
||||||
if (fwd != -1)
|
|
||||||
{
|
|
||||||
thisres = executeForwards(fwd, type, dest, entity);
|
|
||||||
if (thisres > res)
|
|
||||||
{
|
|
||||||
res = thisres;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_InExecution.pop();
|
|
||||||
|
|
||||||
if (m_InExecution.size() == 0 && m_Cleanup)
|
|
||||||
{
|
|
||||||
this->RemoveHook(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
bool Hooked() const
|
|
||||||
{
|
|
||||||
return m_Forwards.size() != 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
enum msgtype
|
enum msgtype
|
||||||
{
|
{
|
||||||
arg_byte = 1,
|
arg_byte = 1,
|
||||||
@ -207,7 +76,7 @@ void C_WriteString(const char *sz);
|
|||||||
void C_WriteEntity(int iValue);
|
void C_WriteEntity(int iValue);
|
||||||
void C_MessageEnd(void);
|
void C_MessageEnd(void);
|
||||||
|
|
||||||
extern RegisteredMessage msgHooks[256];
|
extern CVector<int> msgHooks[256];
|
||||||
extern int msgBlocks[256];
|
extern int msgBlocks[256];
|
||||||
|
|
||||||
void ClearMessages();
|
void ClearMessages();
|
||||||
|
@ -39,7 +39,6 @@
|
|||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "fakemeta.h"
|
#include "fakemeta.h"
|
||||||
#include "CMenu.h"
|
|
||||||
#include "newmenus.h"
|
#include "newmenus.h"
|
||||||
#include "natives.h"
|
#include "natives.h"
|
||||||
#include "binlog.h"
|
#include "binlog.h"
|
||||||
@ -48,21 +47,16 @@
|
|||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "amxmod_compat.h"
|
#include "amxmod_compat.h"
|
||||||
|
|
||||||
#include "datastructs.h"
|
|
||||||
#include "CFlagManager.h"
|
|
||||||
#include "svn_version.h"
|
|
||||||
#include "trie_natives.h"
|
|
||||||
|
|
||||||
plugin_info_t Plugin_info =
|
plugin_info_t Plugin_info =
|
||||||
{
|
{
|
||||||
META_INTERFACE_VERSION, // ifvers
|
META_INTERFACE_VERSION, // ifvers
|
||||||
"AMX Mod X", // name
|
"AMX Mod X", // name
|
||||||
SVN_VERSION_STRING, // version
|
AMX_VERSION, // version
|
||||||
__DATE__, // date
|
__DATE__, // date
|
||||||
"AMX Mod X Dev Team", // author
|
"AMX Mod X Dev Team", // author
|
||||||
"http://www.amxmodx.org", // url
|
"http://www.amxmodx.org", // url
|
||||||
"AMXX", // logtag
|
"AMXX", // logtag
|
||||||
PT_STARTUP, // (when) loadable
|
PT_ANYTIME, // (when) loadable
|
||||||
PT_ANYTIME, // (when) unloadable
|
PT_ANYTIME, // (when) unloadable
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -79,7 +73,6 @@ void (*function)(void*);
|
|||||||
void (*endfunction)(void*);
|
void (*endfunction)(void*);
|
||||||
|
|
||||||
extern List<AUTHORIZEFUNC> g_auth_funcs;
|
extern List<AUTHORIZEFUNC> g_auth_funcs;
|
||||||
extern CVector<CAdminData *> DynamicAdmins;
|
|
||||||
|
|
||||||
CLog g_log;
|
CLog g_log;
|
||||||
CForwardMngr g_forwards;
|
CForwardMngr g_forwards;
|
||||||
@ -93,7 +86,7 @@ CPlayer* mPlayer;
|
|||||||
CPluginMngr g_plugins;
|
CPluginMngr g_plugins;
|
||||||
CTaskMngr g_tasksMngr;
|
CTaskMngr g_tasksMngr;
|
||||||
CmdMngr g_commands;
|
CmdMngr g_commands;
|
||||||
CFlagManager FlagMan;
|
|
||||||
EventsMngr g_events;
|
EventsMngr g_events;
|
||||||
Grenades g_grenades;
|
Grenades g_grenades;
|
||||||
LogEventsMngr g_logevents;
|
LogEventsMngr g_logevents;
|
||||||
@ -103,7 +96,6 @@ String g_log_dir;
|
|||||||
String g_mod_name;
|
String g_mod_name;
|
||||||
XVars g_xvars;
|
XVars g_xvars;
|
||||||
|
|
||||||
bool g_bmod_tfc;
|
|
||||||
bool g_bmod_cstrike;
|
bool g_bmod_cstrike;
|
||||||
bool g_bmod_dod;
|
bool g_bmod_dod;
|
||||||
bool g_dontprecache;
|
bool g_dontprecache;
|
||||||
@ -198,7 +190,7 @@ void BuildPluginFileList(const char *initialdir, CStack<String *> & files)
|
|||||||
}
|
}
|
||||||
|
|
||||||
_findclose(handle);
|
_findclose(handle);
|
||||||
#elif defined(__linux__) || defined(__APPLE__)
|
#elif defined __linux__
|
||||||
build_pathname_r(path, sizeof(path)-1, "%s/", initialdir);
|
build_pathname_r(path, sizeof(path)-1, "%s/", initialdir);
|
||||||
struct dirent *ep;
|
struct dirent *ep;
|
||||||
DIR *dp;
|
DIR *dp;
|
||||||
@ -254,7 +246,7 @@ void LoadExtraPluginsFromDir(const char *initialdir)
|
|||||||
|
|
||||||
// Precache stuff from force consistency calls
|
// Precache stuff from force consistency calls
|
||||||
// or check for pointed files won't be done
|
// or check for pointed files won't be done
|
||||||
int C_PrecacheModel(const char *s)
|
int C_PrecacheModel(char *s)
|
||||||
{
|
{
|
||||||
if (!g_forcedmodules)
|
if (!g_forcedmodules)
|
||||||
{
|
{
|
||||||
@ -269,7 +261,7 @@ int C_PrecacheModel(const char *s)
|
|||||||
RETURN_META_VALUE(MRES_IGNORED, 0);
|
RETURN_META_VALUE(MRES_IGNORED, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int C_PrecacheSound(const char *s)
|
int C_PrecacheSound(char *s)
|
||||||
{
|
{
|
||||||
if (!g_forcedsounds)
|
if (!g_forcedsounds)
|
||||||
{
|
{
|
||||||
@ -323,20 +315,6 @@ const char* get_localinfo(const char* name, const char* def)
|
|||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* get_localinfo_r(const char *name, const char *def, char buffer[], size_t maxlength)
|
|
||||||
{
|
|
||||||
const char* b = LOCALINFO((char*)name);
|
|
||||||
|
|
||||||
if (b == 0 || *b == 0)
|
|
||||||
{
|
|
||||||
SET_LOCALINFO((char*)name, (char*)(b = def));
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(buffer, maxlength, "%s", b);
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Very first point at map load
|
// Very first point at map load
|
||||||
// Load AMX modules for new native functions
|
// Load AMX modules for new native functions
|
||||||
// Initialize AMX stuff and load it's plugins from plugins.ini list
|
// Initialize AMX stuff and load it's plugins from plugins.ini list
|
||||||
@ -358,22 +336,6 @@ int C_Spawn(edict_t *pent)
|
|||||||
hostname = CVAR_GET_POINTER("hostname");
|
hostname = CVAR_GET_POINTER("hostname");
|
||||||
mp_timelimit = CVAR_GET_POINTER("mp_timelimit");
|
mp_timelimit = CVAR_GET_POINTER("mp_timelimit");
|
||||||
|
|
||||||
// Fix for crashing on mods that do not have mp_timelimit
|
|
||||||
if (mp_timelimit == NULL)
|
|
||||||
{
|
|
||||||
static cvar_t timelimit_holder;
|
|
||||||
|
|
||||||
timelimit_holder.name = "mp_timelimit";
|
|
||||||
timelimit_holder.string = "0";
|
|
||||||
timelimit_holder.flags = 0;
|
|
||||||
timelimit_holder.value = 0.0;
|
|
||||||
|
|
||||||
CVAR_REGISTER(&timelimit_holder);
|
|
||||||
|
|
||||||
mp_timelimit = &timelimit_holder;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
g_forwards.clear();
|
g_forwards.clear();
|
||||||
|
|
||||||
g_log.MapChange();
|
g_log.MapChange();
|
||||||
@ -404,54 +366,22 @@ int C_Spawn(edict_t *pent)
|
|||||||
get_localinfo("amx_pluginsdir", "addons/amxmodx/plugins");
|
get_localinfo("amx_pluginsdir", "addons/amxmodx/plugins");
|
||||||
get_localinfo("amx_logdir", "addons/amxmodx/logs");
|
get_localinfo("amx_logdir", "addons/amxmodx/logs");
|
||||||
|
|
||||||
FlagMan.LoadFile();
|
|
||||||
|
|
||||||
for (unsigned int i=0; i<VectorHolder.size(); i++)
|
|
||||||
{
|
|
||||||
delete VectorHolder[i];
|
|
||||||
};
|
|
||||||
VectorHolder.clear();
|
|
||||||
|
|
||||||
g_TrieHandles.clear();
|
|
||||||
char map_pluginsfile_path[256];
|
char map_pluginsfile_path[256];
|
||||||
char prefixed_map_pluginsfile[256];
|
|
||||||
char configs_dir[256];
|
|
||||||
|
|
||||||
// ###### Load modules
|
// ###### Load modules
|
||||||
loadModules(get_localinfo("amxx_modules", "addons/amxmodx/configs/modules.ini"), PT_ANYTIME);
|
loadModules(get_localinfo("amxx_modules", "addons/amxmodx/configs/modules.ini"), PT_ANYTIME);
|
||||||
|
|
||||||
get_localinfo_r("amxx_configsdir", "addons/amxmodx/configs", configs_dir, sizeof(configs_dir)-1);
|
|
||||||
g_plugins.CALMFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
g_plugins.CALMFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
||||||
LoadExtraPluginsToPCALM(configs_dir);
|
LoadExtraPluginsToPCALM(get_localinfo("amxx_configsdir", "addons/amxmodx/configs"));
|
||||||
char temporaryMap[64], *tmap_ptr;
|
snprintf(map_pluginsfile_path, sizeof(map_pluginsfile_path)-1,
|
||||||
|
|
||||||
snprintf(temporaryMap, sizeof(temporaryMap), "%s", STRING(gpGlobals->mapname));
|
|
||||||
|
|
||||||
prefixed_map_pluginsfile[0] = '\0';
|
|
||||||
if ((tmap_ptr = strchr(temporaryMap, '_')) != NULL)
|
|
||||||
{
|
|
||||||
// this map has a prefix
|
|
||||||
|
|
||||||
*tmap_ptr = '\0';
|
|
||||||
snprintf(prefixed_map_pluginsfile,
|
|
||||||
sizeof(prefixed_map_pluginsfile),
|
|
||||||
"%s/maps/plugins-%s.ini",
|
"%s/maps/plugins-%s.ini",
|
||||||
configs_dir,
|
get_localinfo("amxx_configsdir", "addons/amxmodx/configs"),
|
||||||
temporaryMap);
|
|
||||||
g_plugins.CALMFromFile(prefixed_map_pluginsfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(map_pluginsfile_path,
|
|
||||||
sizeof(map_pluginsfile_path),
|
|
||||||
"%s/maps/plugins-%s.ini",
|
|
||||||
configs_dir,
|
|
||||||
STRING(gpGlobals->mapname));
|
STRING(gpGlobals->mapname));
|
||||||
g_plugins.CALMFromFile(map_pluginsfile_path);
|
g_plugins.CALMFromFile(map_pluginsfile_path);
|
||||||
|
|
||||||
int loaded = countModules(CountModules_Running); // Call after attachModules so all modules don't have pending stat
|
int loaded = countModules(CountModules_Running); // Call after attachModules so all modules don't have pending stat
|
||||||
|
|
||||||
// Set some info about amx version and modules
|
// Set some info about amx version and modules
|
||||||
CVAR_SET_STRING(init_amxmodx_version.name, SVN_VERSION_STRING);
|
CVAR_SET_STRING(init_amxmodx_version.name, AMX_VERSION);
|
||||||
char buffer[32];
|
char buffer[32];
|
||||||
sprintf(buffer, "%d", loaded);
|
sprintf(buffer, "%d", loaded);
|
||||||
CVAR_SET_STRING(init_amxmodx_modules.name, buffer);
|
CVAR_SET_STRING(init_amxmodx_modules.name, buffer);
|
||||||
@ -485,13 +415,8 @@ int C_Spawn(edict_t *pent)
|
|||||||
|
|
||||||
// ###### Load AMX Mod X plugins
|
// ###### Load AMX Mod X plugins
|
||||||
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
||||||
LoadExtraPluginsFromDir(configs_dir);
|
LoadExtraPluginsFromDir(get_localinfo("amxx_configsdir", "addons/amxmodx/configs"));
|
||||||
g_plugins.loadPluginsFromFile(map_pluginsfile_path, false);
|
g_plugins.loadPluginsFromFile(map_pluginsfile_path, false);
|
||||||
if (prefixed_map_pluginsfile[0] != '\0')
|
|
||||||
{
|
|
||||||
g_plugins.loadPluginsFromFile(prefixed_map_pluginsfile, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_plugins.Finalize();
|
g_plugins.Finalize();
|
||||||
g_plugins.InvalidateCache();
|
g_plugins.InvalidateCache();
|
||||||
|
|
||||||
@ -707,19 +632,10 @@ void C_ServerDeactivate_Post()
|
|||||||
|
|
||||||
ClearMessages();
|
ClearMessages();
|
||||||
|
|
||||||
// Flush the dynamic admins list
|
|
||||||
for (size_t iter=DynamicAdmins.size();iter--; )
|
|
||||||
{
|
|
||||||
delete DynamicAdmins[iter];
|
|
||||||
}
|
|
||||||
|
|
||||||
DynamicAdmins.clear();
|
|
||||||
for (unsigned int i=0; i<g_hudsync.size(); i++)
|
for (unsigned int i=0; i<g_hudsync.size(); i++)
|
||||||
delete [] g_hudsync[i];
|
delete [] g_hudsync[i];
|
||||||
g_hudsync.clear();
|
g_hudsync.clear();
|
||||||
|
|
||||||
FlagMan.WriteCommands();
|
|
||||||
|
|
||||||
// last memreport
|
// last memreport
|
||||||
#ifdef MEMORY_TEST
|
#ifdef MEMORY_TEST
|
||||||
if (g_memreport_enabled)
|
if (g_memreport_enabled)
|
||||||
@ -731,7 +647,7 @@ void C_ServerDeactivate_Post()
|
|||||||
time(&td);
|
time(&td);
|
||||||
tm *curTime = localtime(&td);
|
tm *curTime = localtime(&td);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
|
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
|
||||||
#else
|
#else
|
||||||
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
|
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
|
||||||
@ -740,7 +656,7 @@ void C_ServerDeactivate_Post()
|
|||||||
{
|
{
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
|
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
|
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
|
||||||
if (mkdir(build_pathname(buffer), 0700) < 0)
|
if (mkdir(build_pathname(buffer), 0700) < 0)
|
||||||
#else
|
#else
|
||||||
@ -966,63 +882,47 @@ void C_ClientCommand(edict_t *pEntity)
|
|||||||
int menuid = pPlayer->menu;
|
int menuid = pPlayer->menu;
|
||||||
pPlayer->menu = 0;
|
pPlayer->menu = 0;
|
||||||
|
|
||||||
/* First, do new menus */
|
MenuMngr::iterator a = g_menucmds.begin();
|
||||||
int func_was_executed = -1;
|
|
||||||
|
while (a)
|
||||||
|
{
|
||||||
|
if ((*a).matchCommand(menuid, bit_key) && (*a).getPlugin()->isExecutable((*a).getFunction()))
|
||||||
|
{
|
||||||
if (pPlayer->newmenu != -1)
|
if (pPlayer->newmenu != -1)
|
||||||
{
|
{
|
||||||
int menu = pPlayer->newmenu;
|
int menu = pPlayer->newmenu;
|
||||||
pPlayer->newmenu = -1;
|
pPlayer->newmenu = -1;
|
||||||
|
|
||||||
if (menu >= 0 && menu < (int)g_NewMenus.size() && g_NewMenus[menu])
|
if (menu >= 0 && menu < (int)g_NewMenus.size())
|
||||||
{
|
{
|
||||||
Menu *pMenu = g_NewMenus[menu];
|
Menu *pMenu = g_NewMenus[menu];
|
||||||
int item = pMenu->PagekeyToItem(pPlayer->page, pressed_key+1);
|
int item = pMenu->PagekeyToItem(pPlayer->page, pressed_key+1);
|
||||||
|
|
||||||
if (item == MENU_BACK)
|
if (item == MENU_BACK)
|
||||||
{
|
{
|
||||||
pMenu->Display(pPlayer->index, pPlayer->page - 1);
|
pMenu->Display(pPlayer->index, pPlayer->page - 1);
|
||||||
} else if (item == MENU_MORE) {
|
} else if (item == MENU_MORE) {
|
||||||
pMenu->Display(pPlayer->index, pPlayer->page + 1);
|
pMenu->Display(pPlayer->index, pPlayer->page + 1);
|
||||||
} else {
|
} else {
|
||||||
ret = executeForwards(pMenu->func, static_cast<cell>(pPlayer->index), static_cast<cell>(menu), static_cast<cell>(item));
|
ret = executeForwards((*a).getFunction(), static_cast<cell>(pPlayer->index), static_cast<cell>(menu), static_cast<cell>(item));
|
||||||
|
|
||||||
if (ret & 2)
|
if (ret & 2)
|
||||||
{
|
|
||||||
result = MRES_SUPERCEDE;
|
result = MRES_SUPERCEDE;
|
||||||
} else if (ret & 1) {
|
else if (ret & 1)
|
||||||
RETURN_META(MRES_SUPERCEDE);
|
RETURN_META(MRES_SUPERCEDE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
if (pPlayer->newmenu != -1)
|
||||||
* No matter what we marked it as executed, since the callback styles are
|
break;
|
||||||
* entirely different. After all, this is a backwards compat shim.
|
} else {
|
||||||
*/
|
|
||||||
func_was_executed = pMenu->func;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now, do old menus */
|
|
||||||
MenuMngr::iterator a = g_menucmds.begin();
|
|
||||||
|
|
||||||
while (a)
|
|
||||||
{
|
|
||||||
g_menucmds.SetWatchIter(a);
|
|
||||||
if ((*a).matchCommand(menuid, bit_key)
|
|
||||||
&& (*a).getPlugin()->isExecutable((*a).getFunction())
|
|
||||||
&& (func_was_executed == -1
|
|
||||||
|| !g_forwards.isSameSPForward(func_was_executed, (*a).getFunction()))
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ret = executeForwards((*a).getFunction(), static_cast<cell>(pPlayer->index),
|
ret = executeForwards((*a).getFunction(), static_cast<cell>(pPlayer->index),
|
||||||
static_cast<cell>(pressed_key), 0);
|
static_cast<cell>(pressed_key), 0);
|
||||||
|
|
||||||
if (ret & 2) result = MRES_SUPERCEDE;
|
if (ret & 2) result = MRES_SUPERCEDE;
|
||||||
if (ret & 1) RETURN_META(MRES_SUPERCEDE);
|
if (ret & 1) RETURN_META(MRES_SUPERCEDE);
|
||||||
}
|
}
|
||||||
if (g_menucmds.GetWatchIter() != a)
|
|
||||||
{
|
|
||||||
a = g_menucmds.GetWatchIter();
|
|
||||||
} else {
|
|
||||||
++a;
|
|
||||||
}
|
}
|
||||||
|
++a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1083,7 +983,7 @@ void C_StartFrame_Post(void)
|
|||||||
tm *curTime = localtime(&td);
|
tm *curTime = localtime(&td);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
|
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")), 0700);
|
||||||
#else
|
#else
|
||||||
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
|
mkdir(build_pathname("%s/memreports", get_localinfo("amxx_basedir", "addons/amxmodx")));
|
||||||
@ -1092,7 +992,7 @@ void C_StartFrame_Post(void)
|
|||||||
{
|
{
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
|
sprintf(buffer, "%s/memreports/D%02d%02d%03d", get_localinfo("amxx_basedir", "addons/amxmodx"), curTime->tm_mon + 1, curTime->tm_mday, i);
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
|
mkdir(build_pathname("%s", g_log_dir.c_str()), 0700);
|
||||||
if (mkdir(build_pathname(buffer), 0700) < 0)
|
if (mkdir(build_pathname(buffer), 0700) < 0)
|
||||||
#else
|
#else
|
||||||
@ -1138,6 +1038,20 @@ void C_MessageBegin_Post(int msg_dest, int msg_type, const float *pOrigin, edict
|
|||||||
{
|
{
|
||||||
if (ed)
|
if (ed)
|
||||||
{
|
{
|
||||||
|
if (gmsgBattery == msg_type && g_bmod_cstrike)
|
||||||
|
{
|
||||||
|
void* ptr = GET_PRIVATE(ed);
|
||||||
|
#ifdef __linux__
|
||||||
|
int *z = (int*)ptr + 0x171;
|
||||||
|
#else
|
||||||
|
int *z = (int*)ptr + 0x16C;
|
||||||
|
#endif
|
||||||
|
int stop = (int)ed->v.armorvalue;
|
||||||
|
|
||||||
|
*z = stop;
|
||||||
|
ed->v.armorvalue = (float)stop;
|
||||||
|
}
|
||||||
|
|
||||||
mPlayerIndex = ENTINDEX(ed);
|
mPlayerIndex = ENTINDEX(ed);
|
||||||
mPlayer = GET_PLAYER_POINTER_I(mPlayerIndex);
|
mPlayer = GET_PLAYER_POINTER_I(mPlayerIndex);
|
||||||
} else {
|
} else {
|
||||||
@ -1279,13 +1193,14 @@ 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 = ptr->vecEndPos;
|
pPlayer->lastTrace = pPlayer->thisTrace;
|
||||||
|
pPlayer->thisTrace = ptr->vecEndPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_META(MRES_IGNORED);
|
RETURN_META(MRES_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void C_AlertMessage(ALERT_TYPE atype, const char *szFmt, ...)
|
void C_AlertMessage(ALERT_TYPE atype, char *szFmt, ...)
|
||||||
{
|
{
|
||||||
if (atype != at_logged)
|
if (atype != at_logged)
|
||||||
{
|
{
|
||||||
@ -1329,7 +1244,7 @@ void C_AlertMessage(ALERT_TYPE atype, const char *szFmt, ...)
|
|||||||
RETURN_META(MRES_IGNORED);
|
RETURN_META(MRES_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void C_ChangeLevel(const char *map, const char *what)
|
void C_ChangeLevel(char *map, char *what)
|
||||||
{
|
{
|
||||||
int ret = executeForwards(FF_ChangeLevel, map);
|
int ret = executeForwards(FF_ChangeLevel, map);
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -1371,7 +1286,7 @@ void C_CvarValue2(const edict_t *pEdict, int requestId, const char *cvar, const
|
|||||||
RETURN_META(MRES_HANDLED);
|
RETURN_META(MRES_HANDLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
||||||
{
|
{
|
||||||
gpMetaUtilFuncs = pMetaUtilFuncs;
|
gpMetaUtilFuncs = pMetaUtilFuncs;
|
||||||
*pPlugInfo = &Plugin_info;
|
*pPlugInfo = &Plugin_info;
|
||||||
@ -1457,7 +1372,7 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
|
|||||||
|
|
||||||
// ###### Print short GPL
|
// ###### Print short GPL
|
||||||
print_srvconsole("\n AMX Mod X version %s Copyright (c) 2004-2006 AMX Mod X Development Team \n"
|
print_srvconsole("\n AMX Mod X version %s Copyright (c) 2004-2006 AMX Mod X Development Team \n"
|
||||||
" AMX Mod X comes with ABSOLUTELY NO WARRANTY; for details type `amxx gpl'.\n", SVN_VERSION_STRING);
|
" AMX Mod X comes with ABSOLUTELY NO WARRANTY; for details type `amxx gpl'.\n", AMX_VERSION);
|
||||||
print_srvconsole(" This is free software and you are welcome to redistribute it under \n"
|
print_srvconsole(" This is free software and you are welcome to redistribute it under \n"
|
||||||
" certain conditions; type 'amxx gpl' for details.\n \n");
|
" certain conditions; type 'amxx gpl' for details.\n \n");
|
||||||
|
|
||||||
@ -1486,8 +1401,6 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
|
|||||||
|
|
||||||
GET_HOOK_TABLES(PLID, &g_pEngTable, NULL, NULL);
|
GET_HOOK_TABLES(PLID, &g_pEngTable, NULL, NULL);
|
||||||
|
|
||||||
FlagMan.SetFile("cmdaccess.ini");
|
|
||||||
|
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1535,7 +1448,7 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
|
|||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
// linux prototype
|
// linux prototype
|
||||||
C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
|
C_DLLEXPORT void GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
|
||||||
{
|
{
|
||||||
@ -1658,7 +1571,6 @@ C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *inte
|
|||||||
} else {
|
} else {
|
||||||
g_bmod_cstrike = false;
|
g_bmod_cstrike = false;
|
||||||
g_bmod_dod = !stricmp(g_mod_name.c_str(), "dod");
|
g_bmod_dod = !stricmp(g_mod_name.c_str(), "dod");
|
||||||
g_bmod_tfc = !stricmp(g_mod_name.c_str(), "tfc");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_engfuncs.pfnCmd_Argc = C_Cmd_Argc;
|
meta_engfuncs.pfnCmd_Argc = C_Cmd_Argc;
|
||||||
|
@ -29,11 +29,8 @@
|
|||||||
* version.
|
* version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
#if defined(__linux__)
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include "sclinux.h"
|
#include "sclinux.h"
|
||||||
@ -52,7 +49,6 @@
|
|||||||
#include "libraries.h"
|
#include "libraries.h"
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "amxmod_compat.h"
|
#include "amxmod_compat.h"
|
||||||
#include "trie_natives.h"
|
|
||||||
|
|
||||||
CList<CModule, const char*> g_modules;
|
CList<CModule, const char*> g_modules;
|
||||||
CList<CScript, AMX*> g_loadedscripts;
|
CList<CScript, AMX*> g_loadedscripts;
|
||||||
@ -89,7 +85,7 @@ bool DirExists(const char *dir)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void report_error(int code, const char* fmt, ...)
|
void report_error(int code, char* fmt, ...)
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
char string[256];
|
char string[256];
|
||||||
@ -109,7 +105,7 @@ void report_error(int code, const char* fmt, ...)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_srvconsole(const char *fmt, ...)
|
void print_srvconsole(char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
static char string[384];
|
static char string[384];
|
||||||
@ -343,14 +339,11 @@ int load_amxscript(AMX *amx, void **program, const char *filename, char error[64
|
|||||||
if ((err = amx_InitJIT(amx, (void *)rt, (void *)np)) == AMX_ERR_NONE)
|
if ((err = amx_InitJIT(amx, (void *)rt, (void *)np)) == AMX_ERR_NONE)
|
||||||
{
|
{
|
||||||
//amx->base = (unsigned char FAR *)realloc(np, amx->code_size);
|
//amx->base = (unsigned char FAR *)realloc(np, amx->code_size);
|
||||||
#if defined(_WIN32)
|
#ifndef __linux__
|
||||||
amx->base = (unsigned char *)VirtualAlloc(NULL, amx->code_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
amx->base = (unsigned char *)VirtualAlloc(NULL, amx->code_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||||
#elif defined(__GNUC__)
|
#else
|
||||||
# if defined(__APPLE__)
|
//posix_memalign((void **)&(amx->base), sysconf(_SC_PAGESIZE), amx->code_size);
|
||||||
amx->base = (unsigned char *)valloc(amx->code_size);
|
|
||||||
# else
|
|
||||||
amx->base = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), amx->code_size);
|
amx->base = (unsigned char *)memalign(sysconf(_SC_PAGESIZE), amx->code_size);
|
||||||
# endif
|
|
||||||
mprotect((void *)amx->base, amx->code_size, PROT_READ|PROT_WRITE|PROT_EXEC);
|
mprotect((void *)amx->base, amx->code_size, PROT_READ|PROT_WRITE|PROT_EXEC);
|
||||||
#endif
|
#endif
|
||||||
if (amx->base)
|
if (amx->base)
|
||||||
@ -585,8 +578,6 @@ int set_amxnatives(AMX* amx, char error[128])
|
|||||||
amx_Register(amx, msg_Natives, -1);
|
amx_Register(amx, msg_Natives, -1);
|
||||||
amx_Register(amx, vector_Natives, -1);
|
amx_Register(amx, vector_Natives, -1);
|
||||||
amx_Register(amx, g_SortNatives, -1);
|
amx_Register(amx, g_SortNatives, -1);
|
||||||
amx_Register(amx, g_DataStructNatives, -1);
|
|
||||||
amx_Register(amx, trie_Natives, -1);
|
|
||||||
|
|
||||||
if (amx->flags & AMX_FLAG_OLDFILE)
|
if (amx->flags & AMX_FLAG_OLDFILE)
|
||||||
{
|
{
|
||||||
@ -607,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 plugin_natives. This is dangerous!");
|
AMXXLOG_Log("An error occurred in plugins_native. This is dangerous!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -647,7 +638,7 @@ int unload_amxscript(AMX* amx, void** program)
|
|||||||
return AMX_ERR_NONE;
|
return AMX_ERR_NONE;
|
||||||
|
|
||||||
#if defined JIT
|
#if defined JIT
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#if defined __linux__
|
||||||
if ((flags & AMX_FLAG_JITC) != AMX_FLAG_JITC)
|
if ((flags & AMX_FLAG_JITC) != AMX_FLAG_JITC)
|
||||||
{
|
{
|
||||||
delete [] prg;
|
delete [] prg;
|
||||||
@ -726,11 +717,17 @@ void get_modname(char* buffer)
|
|||||||
strcpy(buffer, g_mod_name.c_str());
|
strcpy(buffer, g_mod_name.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
char* build_pathname(const char *fmt, ...)
|
char* build_pathname(char *fmt, ...)
|
||||||
{
|
{
|
||||||
static char string[256];
|
static char string[256];
|
||||||
int b;
|
int b;
|
||||||
int a = b = snprintf(string, 255, "%s%c", g_mod_name.c_str(), PATH_SEP_CHAR);
|
int a = b = snprintf(string, 255,
|
||||||
|
#ifndef __linux__
|
||||||
|
"%s\\",
|
||||||
|
#else
|
||||||
|
"%s/",
|
||||||
|
#endif
|
||||||
|
g_mod_name.c_str());
|
||||||
|
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
va_start(argptr, fmt);
|
va_start(argptr, fmt);
|
||||||
@ -742,19 +739,26 @@ char* build_pathname(const char *fmt, ...)
|
|||||||
|
|
||||||
while (*path)
|
while (*path)
|
||||||
{
|
{
|
||||||
if (*path == ALT_SEP_CHAR)
|
#ifndef __linux__
|
||||||
{
|
if (*path == '/') *path = '\\';
|
||||||
*path = PATH_SEP_CHAR;
|
#else
|
||||||
}
|
if (*path == '\\') *path = '/';
|
||||||
|
#endif
|
||||||
++path;
|
++path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...)
|
char *build_pathname_r(char *buffer, size_t maxlen, char *fmt, ...)
|
||||||
{
|
{
|
||||||
snprintf(buffer, maxlen, "%s%c", g_mod_name.c_str(), PATH_SEP_CHAR);
|
snprintf(buffer, maxlen,
|
||||||
|
#ifdef __linux__
|
||||||
|
"%s/",
|
||||||
|
#else
|
||||||
|
"%s\\",
|
||||||
|
#endif
|
||||||
|
g_mod_name.c_str());
|
||||||
|
|
||||||
size_t len = strlen(buffer);
|
size_t len = strlen(buffer);
|
||||||
char *ptr = buffer + len;
|
char *ptr = buffer + len;
|
||||||
@ -766,10 +770,11 @@ char *build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...)
|
|||||||
|
|
||||||
while (*ptr)
|
while (*ptr)
|
||||||
{
|
{
|
||||||
if (*ptr == ALT_SEP_CHAR)
|
#ifndef __linux__
|
||||||
{
|
if (*ptr == '/') *ptr = '\\';
|
||||||
*ptr = PATH_SEP_CHAR;
|
#else
|
||||||
}
|
if (*ptr == '\\') *ptr = '/';
|
||||||
|
#endif
|
||||||
++ptr;
|
++ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -777,7 +782,7 @@ char *build_pathname_r(char *buffer, size_t maxlen, const char *fmt, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// build pathname based on addons dir
|
// build pathname based on addons dir
|
||||||
char* build_pathname_addons(const char *fmt, ...)
|
char* build_pathname_addons(char *fmt, ...)
|
||||||
{
|
{
|
||||||
static char string[256];
|
static char string[256];
|
||||||
|
|
||||||
@ -790,16 +795,23 @@ char* build_pathname_addons(const char *fmt, ...)
|
|||||||
|
|
||||||
while (*path)
|
while (*path)
|
||||||
{
|
{
|
||||||
if (*path == ALT_SEP_CHAR)
|
#ifndef __linux__
|
||||||
{
|
if (*path == '/') *path = '\\';
|
||||||
*path = PATH_SEP_CHAR;
|
#else
|
||||||
}
|
if (*path == '\\') *path = '/';
|
||||||
|
#endif
|
||||||
++path;
|
++path;
|
||||||
}
|
}
|
||||||
|
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined WIN32
|
||||||
|
#define SEPCHAR '\\'
|
||||||
|
#elif defined __linux__
|
||||||
|
#define SEPCHAR '/'
|
||||||
|
#endif
|
||||||
|
|
||||||
bool ConvertModuleName(const char *pathString, String &path)
|
bool ConvertModuleName(const char *pathString, String &path)
|
||||||
{
|
{
|
||||||
String local;
|
String local;
|
||||||
@ -817,7 +829,7 @@ bool ConvertModuleName(const char *pathString, String &path)
|
|||||||
/* run to filename instead of dir */
|
/* run to filename instead of dir */
|
||||||
char *ptr = tmpname;
|
char *ptr = tmpname;
|
||||||
ptr = tmpname + len - 1;
|
ptr = tmpname + len - 1;
|
||||||
while (ptr >= tmpname && *ptr != PATH_SEP_CHAR)
|
while (ptr >= tmpname && *ptr != SEPCHAR)
|
||||||
ptr--;
|
ptr--;
|
||||||
if (ptr >= tmpname)
|
if (ptr >= tmpname)
|
||||||
{
|
{
|
||||||
@ -878,10 +890,10 @@ bool ConvertModuleName(const char *pathString, String &path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
path.assign(orig_path);
|
path.assign(orig_path);
|
||||||
path.append(PATH_SEP_CHAR);
|
path.append(SEPCHAR);
|
||||||
path.append(tmpname);
|
path.append(tmpname);
|
||||||
path.append("_amxx");
|
path.append("_amxx");
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#if defined __linux__
|
||||||
#if defined AMD64 || PAWN_CELL_SIZE==64
|
#if defined AMD64 || PAWN_CELL_SIZE==64
|
||||||
path.append("_amd64");
|
path.append("_amd64");
|
||||||
#else
|
#else
|
||||||
@ -894,8 +906,6 @@ bool ConvertModuleName(const char *pathString, String &path)
|
|||||||
path.append(".dll");
|
path.append(".dll");
|
||||||
#elif defined __linux__
|
#elif defined __linux__
|
||||||
path.append(".so");
|
path.append(".so");
|
||||||
#elif defined __APPLE__
|
|
||||||
path.append(".dylib");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -966,9 +976,6 @@ bool LoadModule(const char *shortname, PLUG_LOADTIME now, bool simplify, bool no
|
|||||||
case MODULE_NOT64BIT:
|
case MODULE_NOT64BIT:
|
||||||
report_error(1, "[AMXX] Module \"%s\" is not 64 bit compatible.", path.c_str());
|
report_error(1, "[AMXX] Module \"%s\" is not 64 bit compatible.", path.c_str());
|
||||||
break;
|
break;
|
||||||
case MODULE_BADGAME:
|
|
||||||
report_error(1, "[AMXX] Module \"%s\" cannot load on game \"%s\"", path.c_str(), g_mod_name.c_str());
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
error = false;
|
error = false;
|
||||||
break;
|
break;
|
||||||
@ -1187,6 +1194,8 @@ void modules_callPluginsUnloading()
|
|||||||
// new functions
|
// new functions
|
||||||
int MNF_AddNatives(AMX_NATIVE_INFO* natives)
|
int MNF_AddNatives(AMX_NATIVE_INFO* natives)
|
||||||
{
|
{
|
||||||
|
CList<CModule, const char *>::iterator a = g_modules.begin();
|
||||||
|
|
||||||
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
|
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
|
||||||
return FALSE; // may only be called from attach
|
return FALSE; // may only be called from attach
|
||||||
|
|
||||||
@ -1197,6 +1206,8 @@ int MNF_AddNatives(AMX_NATIVE_INFO* natives)
|
|||||||
|
|
||||||
int MNF_AddNewNatives(AMX_NATIVE_INFO *natives)
|
int MNF_AddNewNatives(AMX_NATIVE_INFO *natives)
|
||||||
{
|
{
|
||||||
|
CList<CModule, const char *>::iterator a = g_modules.begin();
|
||||||
|
|
||||||
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
|
if (!g_CurrentlyCalledModule || g_ModuleCallReason != ModuleCall_Attach)
|
||||||
return FALSE; // may only be called from attach
|
return FALSE; // may only be called from attach
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include "amx.h"
|
#include "amx.h"
|
||||||
|
|
||||||
#undef DLLEXPORT
|
#undef DLLEXPORT
|
||||||
#if defined(_WIN32)
|
#ifndef __linux__
|
||||||
#define DLLEXPORT __declspec(dllexport)
|
#define DLLEXPORT __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define DLLEXPORT __attribute__((visibility("default")))
|
#define DLLEXPORT __attribute__((visibility("default")))
|
||||||
|
12
amxmodx/msvc/.cvsignore
Executable file
12
amxmodx/msvc/.cvsignore
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
amxmodx.sln
|
||||||
|
amxmodx.suo
|
||||||
|
amxmodx.aps
|
||||||
|
amxmodx.ncb
|
||||||
|
Debug
|
||||||
|
JITDebug
|
||||||
|
JITMemtestRelease
|
||||||
|
JITRelease
|
||||||
|
MaximalSpeed
|
||||||
|
MemtestDebug
|
||||||
|
MemtestRelease
|
||||||
|
Release
|
292
amxmodx/msvc/amxmodx_mm.dsp
Executable file
292
amxmodx/msvc/amxmodx_mm.dsp
Executable file
@ -0,0 +1,292 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="amxmodx_mm" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
|
||||||
|
|
||||||
|
CFG=amxmodx_mm - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "amxmodx_mm.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "amxmodx_mm.mak" CFG="amxmodx_mm - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "amxmodx_mm - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
|
!MESSAGE "amxmodx_mm - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
MTL=midl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "amxmodx_mm - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "release"
|
||||||
|
# PROP Intermediate_Dir "release"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "amxmodx_mm_EXPORTS" /YX /FD /c
|
||||||
|
# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\metamod\metamod" /I "..\..\hlsdk\sourcecode\common" /I "..\..\hlsdk\sourcecode\engine" /I "..\..\hlsdk\sourcecode\dlls" /I "..\..\hlsdk\sourcecode\pm_shared" /I "..\extra\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "amxmodx_mm_EXPORTS" /YX /FD /c
|
||||||
|
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /def:".\amxmodx_mm.def" /out:"release/amxx_mm.dll" /libpath:"..\extra\lib_win32"
|
||||||
|
# Begin Custom Build
|
||||||
|
TargetPath=.\release\amxx_mm.dll
|
||||||
|
TargetName=amxx_mm
|
||||||
|
InputPath=.\release\amxx_mm.dll
|
||||||
|
SOURCE="$(InputPath)"
|
||||||
|
|
||||||
|
"$(TargetName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
||||||
|
copy $(TargetPath) D:\SIERRA\Half-Life\cstrike\addons\amx\dlls
|
||||||
|
|
||||||
|
# End Custom Build
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "amxmodx_mm - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "debug"
|
||||||
|
# PROP Intermediate_Dir "debug"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "amxmodx_mm_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /Zp4 /MTd /W3 /Gm /GX /ZI /Od /I "..\..\metamod\metamod" /I "..\...\hlsdk\sourcecode\common" /I "..\...\hlsdk\sourcecode\engine" /I "..\...\hlsdk\sourcecode\dlls" /I "..\...\hlsdk\sourcecode\pm_shared" /I "..\extra\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "amxmodx_mm_EXPORTS" /YX /FD /GZ /c
|
||||||
|
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /def:".\amxmodx_mm.def" /out:"debug/amxx_mm.dll" /pdbtype:sept /libpath:"..\extra\lib_win32"
|
||||||
|
# SUBTRACT LINK32 /incremental:no /nodefaultlib
|
||||||
|
# Begin Custom Build
|
||||||
|
TargetPath=.\debug\amxx_mm.dll
|
||||||
|
TargetName=amxx_mm
|
||||||
|
InputPath=.\debug\amxx_mm.dll
|
||||||
|
SOURCE="$(InputPath)"
|
||||||
|
|
||||||
|
"$(TargetName)" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
||||||
|
copy $(TargetPath) D:\SIERRA\Half-Life\cstrike\addons\amx\dlls
|
||||||
|
|
||||||
|
# End Custom Build
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "amxmodx_mm - Win32 Release"
|
||||||
|
# Name "amxmodx_mm - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\amx.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\amxcore.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\amxmodx.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\amxtime.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\amxxlog.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CCmd.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CEvent.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CFile.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CForward.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CLogEvent.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CMenu.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CMisc.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CModule.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CPlugin.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CString.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CTask.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CVault.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\emsg.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\file.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\float.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\meta_api.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\modules.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\power.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\srvcmd.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\string.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\strptime.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\util.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\vault.cpp
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\amxmodx.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CCmd.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CEvent.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CFile.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CForward.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CList.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CLogEvent.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CMenu.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CMisc.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CModule.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CPlugin.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CString.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CTask.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\CVault.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\modules.h
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
29
amxmodx/msvc/amxmodx_mm.dsw
Executable file
29
amxmodx/msvc/amxmodx_mm.dsw
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "amxmodx_mm"=.\amxmodx_mm.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
27
amxmodx/msvc/amxmodx_mm.sln
Executable file
27
amxmodx/msvc/amxmodx_mm.sln
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "amxmodx", "amxmodx_mm.vcproj", "{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
|
JITDebug = JITDebug
|
||||||
|
JITDebugBinLog = JITDebugBinLog
|
||||||
|
JITRelease = JITRelease
|
||||||
|
JITReleaseBinLog = JITReleaseBinLog
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebug.ActiveCfg = JITDebug|Win32
|
||||||
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebug.Build.0 = JITDebug|Win32
|
||||||
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebugBinLog.ActiveCfg = JITDebugBinLog|Win32
|
||||||
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITDebugBinLog.Build.0 = JITDebugBinLog|Win32
|
||||||
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITRelease.ActiveCfg = JITRelease|Win32
|
||||||
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITRelease.Build.0 = JITRelease|Win32
|
||||||
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITReleaseBinLog.ActiveCfg = JITReleaseBinLog|Win32
|
||||||
|
{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}.JITReleaseBinLog.Build.0 = JITReleaseBinLog|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
682
amxmodx/msvc/amxmodx_mm.vcproj
Executable file
682
amxmodx/msvc/amxmodx_mm.vcproj
Executable file
@ -0,0 +1,682 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="amxmodx"
|
||||||
|
ProjectGUID="{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
||||||
|
RootNamespace="amxmodx"
|
||||||
|
SccProjectName=""
|
||||||
|
SccLocalPath="">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="JITDebug|Win32"
|
||||||
|
OutputDirectory="JITDebug"
|
||||||
|
IntermediateDirectory="JITDebug"
|
||||||
|
ConfigurationType="2"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="5"
|
||||||
|
StructMemberAlignment="3"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
PrecompiledHeaderThrough="amxmodx.h"
|
||||||
|
PrecompiledHeaderFile=".\jitdebug/amxmodx.pch"
|
||||||
|
AssemblerListingLocation=".\jitdebug/"
|
||||||
|
ObjectFile=".\jitdebug/"
|
||||||
|
ProgramDataBaseFileName=".\jitdebug/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
CompileAs="0"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/MACHINE:I386"
|
||||||
|
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
||||||
|
OutputFile="jitdebug/amxmodx_mm.dll"
|
||||||
|
Version="0.1"
|
||||||
|
LinkIncremental="2"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
AdditionalLibraryDirectories="..\extra\lib_win32"
|
||||||
|
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
||||||
|
ModuleDefinitionFile=""
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile=".\jitdebug/amxmodx_mm.pdb"
|
||||||
|
ImportLibrary=".\jitdebug/amxmodx_mm.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
MkTypLibCompatible="TRUE"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\debug/amxmodx.tlb"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
Culture="1033"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="JITRelease|Win32"
|
||||||
|
OutputDirectory="JITRelease"
|
||||||
|
IntermediateDirectory="JITRelease"
|
||||||
|
ConfigurationType="2"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
GlobalOptimizations="TRUE"
|
||||||
|
InlineFunctionExpansion="1"
|
||||||
|
EnableIntrinsicFunctions="TRUE"
|
||||||
|
FavorSizeOrSpeed="1"
|
||||||
|
OmitFramePointers="TRUE"
|
||||||
|
OptimizeForProcessor="0"
|
||||||
|
AdditionalIncludeDirectories="..\..\metamod\metamod,..\..\hlsdk\sourcecode\common,..\..\hlsdk\sourcecode\engine,..\..\hlsdk\sourcecode\dlls,..\..\hlsdk\sourcecode\pm_shared,..\extra\include"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32"
|
||||||
|
IgnoreStandardIncludePath="FALSE"
|
||||||
|
StringPooling="TRUE"
|
||||||
|
RuntimeLibrary="4"
|
||||||
|
EnableFunctionLevelLinking="TRUE"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
PrecompiledHeaderThrough="amxmodx.h"
|
||||||
|
PrecompiledHeaderFile=".\jitrelease/amxmodx.pch"
|
||||||
|
AssemblerListingLocation=".\jitrelease/"
|
||||||
|
ObjectFile=".\jitrelease/"
|
||||||
|
ProgramDataBaseFileName=".\jitrelease/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
CompileAs="0"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/MACHINE:I386"
|
||||||
|
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
||||||
|
OutputFile="jitrelease/amxmodx_mm.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
AdditionalLibraryDirectories="..\extra\lib_win32"
|
||||||
|
IgnoreDefaultLibraryNames="MSVCRT"
|
||||||
|
ModuleDefinitionFile=""
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile=".\jitrelease/amxmodx_mm.pdb"
|
||||||
|
GenerateMapFile="TRUE"
|
||||||
|
ImportLibrary=".\jitrelease/amxmodx_mm.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
MkTypLibCompatible="TRUE"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\release/amxmodx.tlb"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
Culture="1033"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="JITDebugBinLog|Win32"
|
||||||
|
OutputDirectory="$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="2"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;BINLOG_ENABLED"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="5"
|
||||||
|
StructMemberAlignment="3"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
PrecompiledHeaderThrough="amxmodx.h"
|
||||||
|
PrecompiledHeaderFile=".\jitdebugbinlog/amxmodx.pch"
|
||||||
|
AssemblerListingLocation=".\jitdebugbinlog/"
|
||||||
|
ObjectFile=".\jitdebugbinlog/"
|
||||||
|
ProgramDataBaseFileName=".\jitdebugbinlog/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
CompileAs="0"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/MACHINE:I386"
|
||||||
|
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
||||||
|
OutputFile="jitdebugbinlog/amxmodx_bl_mm.dll"
|
||||||
|
Version="0.1"
|
||||||
|
LinkIncremental="2"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
AdditionalLibraryDirectories="..\extra\lib_win32"
|
||||||
|
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
||||||
|
ModuleDefinitionFile=""
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile=".\jitdebugbinlog/amxmodx_bl_mm.pdb"
|
||||||
|
ImportLibrary=".\jitdebugbinlog/amxmodx_bl_mm.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
MkTypLibCompatible="TRUE"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\debug/amxmodx.tlb"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
Culture="1033"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="JITReleaseBinLog|Win32"
|
||||||
|
OutputDirectory="$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="2"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
GlobalOptimizations="TRUE"
|
||||||
|
InlineFunctionExpansion="1"
|
||||||
|
EnableIntrinsicFunctions="TRUE"
|
||||||
|
FavorSizeOrSpeed="1"
|
||||||
|
OmitFramePointers="TRUE"
|
||||||
|
OptimizeForProcessor="0"
|
||||||
|
AdditionalIncludeDirectories="..\..\metamod\metamod,..\..\hlsdk\sourcecode\common,..\..\hlsdk\sourcecode\engine,..\..\hlsdk\sourcecode\dlls,..\..\hlsdk\sourcecode\pm_shared,..\extra\include"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;BINLOG_ENABLED"
|
||||||
|
IgnoreStandardIncludePath="FALSE"
|
||||||
|
StringPooling="TRUE"
|
||||||
|
RuntimeLibrary="4"
|
||||||
|
EnableFunctionLevelLinking="TRUE"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
PrecompiledHeaderThrough="amxmodx.h"
|
||||||
|
PrecompiledHeaderFile=".\jitreleasebinlog/amxmodx.pch"
|
||||||
|
AssemblerListingLocation=".\jitreleasebinlog/"
|
||||||
|
ObjectFile=".\jitreleasebinlog/"
|
||||||
|
ProgramDataBaseFileName=".\jitreleasebinlog/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
CompileAs="0"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/MACHINE:I386"
|
||||||
|
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
||||||
|
OutputFile="jitreleasebinlog/amxmodx_bl_mm.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
AdditionalLibraryDirectories="..\extra\lib_win32"
|
||||||
|
IgnoreDefaultLibraryNames="MSVCRT"
|
||||||
|
ModuleDefinitionFile=""
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile=".\jitreleasebinlog/amxmodx_bl_mm.pdb"
|
||||||
|
GenerateMapFile="TRUE"
|
||||||
|
ImportLibrary=".\jitreleasebinlog/amxmodx_bl_mm.lib"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
MkTypLibCompatible="TRUE"
|
||||||
|
SuppressStartupBanner="TRUE"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\release/amxmodx.tlb"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
Culture="1033"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
|
||||||
|
<File
|
||||||
|
RelativePath="..\amx.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxcore.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxdbg.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxmod_compat.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxmodx.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxtime.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxxfile.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxxlog.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\binlog.cpp">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITDebug|Win32"
|
||||||
|
ExcludedFromBuild="TRUE">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITRelease|Win32"
|
||||||
|
ExcludedFromBuild="TRUE">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CCmd.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CEvent.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CFile.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CForward.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CLang.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CLogEvent.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CMenu.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CMisc.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CModule.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CPlugin.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CTask.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CVault.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\debugger.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\emsg.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\fakemeta.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\file.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\float.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\format.cpp">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITRelease|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AssemblerOutput="4"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITReleaseBinLog|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AssemblerOutput="4"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libraries.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\md5.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\messages.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\meta_api.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\modules.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\natives.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\newmenus.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\optimizer.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\power.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sorting.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\srvcmd.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\string.cpp">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITRelease|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AssemblerOutput="2"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITReleaseBinLog|Win32">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AssemblerOutput="2"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\strptime.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\util.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\vault.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\vector.cpp">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl">
|
||||||
|
<File
|
||||||
|
RelativePath="..\amx.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxdbg.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxmod_compat.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxmodx.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxxfile.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxxlog.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\binlog.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CCmd.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CEvent.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CFile.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CForward.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CLang.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CList.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CLogEvent.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CMenu.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CMisc.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CModule.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CPlugin.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CQueue.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CString.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CTask.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CVault.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CVector.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\debugger.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\fakemeta.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\format.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libraries.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\md5.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\menus.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\messages.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\modules.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\natives.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\newmenus.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\optimizer.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\resource.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sh_list.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sh_stack.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sh_tinyhash.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\zlib\zconf.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\zlib\zlib.h">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc">
|
||||||
|
<File
|
||||||
|
RelativePath="..\version.rc">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Assembly"
|
||||||
|
Filter="">
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxdefn.asm">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxexecn.asm">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxjitsn.asm">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\helpers-x86.asm">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\natives-amd64.asm">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\natives-x86.asm">
|
||||||
|
</File>
|
||||||
|
<Filter
|
||||||
|
Name="Builds"
|
||||||
|
Filter="">
|
||||||
|
<File
|
||||||
|
RelativePath="..\Jit\helpers-x86.obj">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="SDK"
|
||||||
|
Filter="">
|
||||||
|
<File
|
||||||
|
RelativePath="..\sdk\amxxmodule.cpp">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITDebug|Win32"
|
||||||
|
ExcludedFromBuild="TRUE">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITRelease|Win32"
|
||||||
|
ExcludedFromBuild="TRUE">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITDebugBinLog|Win32"
|
||||||
|
ExcludedFromBuild="TRUE">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITReleaseBinLog|Win32"
|
||||||
|
ExcludedFromBuild="TRUE">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sdk\amxxmodule.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sdk\moduleconfig.h">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
@ -1,439 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="JITDebugBinLog|Win32">
|
|
||||||
<Configuration>JITDebugBinLog</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="JITDebug|Win32">
|
|
||||||
<Configuration>JITDebug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="JITReleaseBinLog|Win32">
|
|
||||||
<Configuration>JITReleaseBinLog</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="JITRelease|Win32">
|
|
||||||
<Configuration>JITRelease</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}</ProjectGuid>
|
|
||||||
<RootNamespace>amxmodx</RootNamespace>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">true</LinkIncremental>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">false</LinkIncremental>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'">true</LinkIncremental>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">false</LinkIncremental>
|
|
||||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'" />
|
|
||||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'" />
|
|
||||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'" />
|
|
||||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'" />
|
|
||||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'" />
|
|
||||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'" />
|
|
||||||
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'" />
|
|
||||||
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'" />
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">
|
|
||||||
<Midl>
|
|
||||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<TargetEnvironment>Win32</TargetEnvironment>
|
|
||||||
<TypeLibraryName>.\debug/amxmodx.tlb</TypeLibraryName>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>$(METAMOD)\metamod;$(HLSDK)\multiplayer\common;$(HLSDK)\multiplayer\engine;$(HLSDK)\multiplayer\dlls;$(HLSDK)\multiplayer\pm_shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<StructMemberAlignment>4Bytes</StructMemberAlignment>
|
|
||||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<PrecompiledHeaderFile>amxmodx.h</PrecompiledHeaderFile>
|
|
||||||
<PrecompiledHeaderOutputFile>.\jitdebug/amxmodx.pch</PrecompiledHeaderOutputFile>
|
|
||||||
<AssemblerListingLocation>.\jitdebug/</AssemblerListingLocation>
|
|
||||||
<ObjectFileName>.\jitdebug/</ObjectFileName>
|
|
||||||
<ProgramDataBaseFileName>.\jitdebug/</ProgramDataBaseFileName>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
|
||||||
<CompileAs>Default</CompileAs>
|
|
||||||
</ClCompile>
|
|
||||||
<ResourceCompile>
|
|
||||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<Culture>0x0409</Culture>
|
|
||||||
</ResourceCompile>
|
|
||||||
<Link>
|
|
||||||
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
|
|
||||||
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<Version>0.1</Version>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
|
||||||
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
|
||||||
<ModuleDefinitionFile>
|
|
||||||
</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<ProgramDatabaseFile>.\jitdebug/amxx_mm.pdb</ProgramDatabaseFile>
|
|
||||||
<ImportLibrary>.\jitdebug/amxmodx_mm.lib</ImportLibrary>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">
|
|
||||||
<Midl>
|
|
||||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<TargetEnvironment>Win32</TargetEnvironment>
|
|
||||||
<TypeLibraryName>.\release/amxmodx.tlb</TypeLibraryName>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MaxSpeed</Optimization>
|
|
||||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
|
||||||
<AdditionalIncludeDirectories>$(METAMOD)\metamod;$(HLSDK)\multiplayer\common;$(HLSDK)\multiplayer\engine;$(HLSDK)\multiplayer\dlls;$(HLSDK)\multiplayer\pm_shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
|
|
||||||
<StringPooling>true</StringPooling>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<PrecompiledHeaderFile>amxmodx.h</PrecompiledHeaderFile>
|
|
||||||
<PrecompiledHeaderOutputFile>.\jitrelease/amxmodx.pch</PrecompiledHeaderOutputFile>
|
|
||||||
<AssemblerListingLocation>.\jitrelease/</AssemblerListingLocation>
|
|
||||||
<ObjectFileName>.\jitrelease/</ObjectFileName>
|
|
||||||
<ProgramDataBaseFileName>.\jitrelease/</ProgramDataBaseFileName>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
|
||||||
<CompileAs>Default</CompileAs>
|
|
||||||
<ShowIncludes>false</ShowIncludes>
|
|
||||||
</ClCompile>
|
|
||||||
<ResourceCompile>
|
|
||||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<Culture>0x0409</Culture>
|
|
||||||
</ResourceCompile>
|
|
||||||
<Link>
|
|
||||||
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
|
|
||||||
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
|
||||||
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
|
||||||
<ModuleDefinitionFile>
|
|
||||||
</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<ProgramDatabaseFile>.\jitrelease/amxmodx_mm.pdb</ProgramDatabaseFile>
|
|
||||||
<GenerateMapFile>true</GenerateMapFile>
|
|
||||||
<ImportLibrary>.\jitrelease/amxmodx_mm.lib</ImportLibrary>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'">
|
|
||||||
<Midl>
|
|
||||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<TargetEnvironment>Win32</TargetEnvironment>
|
|
||||||
<TypeLibraryName>.\debug/amxmodx.tlb</TypeLibraryName>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>$(METAMOD)\metamod;$(HLSDK)\multiplayer\common;$(HLSDK)\multiplayer\engine;$(HLSDK)\multiplayer\dlls;$(HLSDK)\multiplayer\pm_shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;BINLOG_ENABLED;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<StructMemberAlignment>4Bytes</StructMemberAlignment>
|
|
||||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<PrecompiledHeaderFile>amxmodx.h</PrecompiledHeaderFile>
|
|
||||||
<PrecompiledHeaderOutputFile>.\jitdebugbinlog/amxmodx.pch</PrecompiledHeaderOutputFile>
|
|
||||||
<AssemblerListingLocation>.\jitdebugbinlog/</AssemblerListingLocation>
|
|
||||||
<ObjectFileName>.\jitdebugbinlog/</ObjectFileName>
|
|
||||||
<ProgramDataBaseFileName>.\jitdebugbinlog/</ProgramDataBaseFileName>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
|
||||||
<CompileAs>Default</CompileAs>
|
|
||||||
</ClCompile>
|
|
||||||
<ResourceCompile>
|
|
||||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<Culture>0x0409</Culture>
|
|
||||||
</ResourceCompile>
|
|
||||||
<Link>
|
|
||||||
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
|
|
||||||
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<Version>0.1</Version>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
|
||||||
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
|
||||||
<ModuleDefinitionFile>
|
|
||||||
</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<ProgramDatabaseFile>.\jitdebugbinlog/amxmodx_bl_mm.pdb</ProgramDatabaseFile>
|
|
||||||
<ImportLibrary>.\jitdebugbinlog/amxmodx_bl_mm.lib</ImportLibrary>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">
|
|
||||||
<Midl>
|
|
||||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<TargetEnvironment>Win32</TargetEnvironment>
|
|
||||||
<TypeLibraryName>.\release/amxmodx.tlb</TypeLibraryName>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MaxSpeed</Optimization>
|
|
||||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
|
||||||
<AdditionalIncludeDirectories>$(METAMOD)\metamod;$(HLSDK)\multiplayer\common;$(HLSDK)\multiplayer\engine;$(HLSDK)\multiplayer\dlls;$(HLSDK)\multiplayer\pm_shared;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;BINLOG_ENABLED;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
|
|
||||||
<StringPooling>true</StringPooling>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<PrecompiledHeaderFile>amxmodx.h</PrecompiledHeaderFile>
|
|
||||||
<PrecompiledHeaderOutputFile>.\jitreleasebinlog/amxmodx.pch</PrecompiledHeaderOutputFile>
|
|
||||||
<AssemblerListingLocation>.\jitreleasebinlog/</AssemblerListingLocation>
|
|
||||||
<ObjectFileName>.\jitreleasebinlog/</ObjectFileName>
|
|
||||||
<ProgramDataBaseFileName>.\jitreleasebinlog/</ProgramDataBaseFileName>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
|
||||||
<CompileAs>Default</CompileAs>
|
|
||||||
</ClCompile>
|
|
||||||
<ResourceCompile>
|
|
||||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<Culture>0x0409</Culture>
|
|
||||||
</ResourceCompile>
|
|
||||||
<Link>
|
|
||||||
<AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
|
|
||||||
<AdditionalDependencies>..\zlib\zlib.lib;..\JIT\amxjitsn.obj;..\JIT\amxexecn.obj;..\JIT\natives-x86.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
|
||||||
<AdditionalLibraryDirectories>..\extra\lib_win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
|
||||||
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
|
||||||
<ModuleDefinitionFile>
|
|
||||||
</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<ProgramDatabaseFile>.\jitreleasebinlog/amxmodx_bl_mm.pdb</ProgramDatabaseFile>
|
|
||||||
<GenerateMapFile>true</GenerateMapFile>
|
|
||||||
<ImportLibrary>.\jitreleasebinlog/amxmodx_bl_mm.lib</ImportLibrary>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\amx.cpp" />
|
|
||||||
<ClCompile Include="..\amxcore.cpp" />
|
|
||||||
<ClCompile Include="..\amxdbg.cpp" />
|
|
||||||
<ClCompile Include="..\amxmod_compat.cpp" />
|
|
||||||
<ClCompile Include="..\amxmodx.cpp" />
|
|
||||||
<ClCompile Include="..\amxtime.cpp" />
|
|
||||||
<ClCompile Include="..\amxxfile.cpp" />
|
|
||||||
<ClCompile Include="..\amxxlog.cpp" />
|
|
||||||
<ClCompile Include="..\binlog.cpp">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CCmd.cpp" />
|
|
||||||
<ClCompile Include="..\CEvent.cpp" />
|
|
||||||
<ClCompile Include="..\CFile.cpp" />
|
|
||||||
<ClCompile Include="..\CFlagManager.cpp" />
|
|
||||||
<ClCompile Include="..\CForward.cpp" />
|
|
||||||
<ClCompile Include="..\CLang.cpp" />
|
|
||||||
<ClCompile Include="..\CLogEvent.cpp" />
|
|
||||||
<ClCompile Include="..\CMenu.cpp" />
|
|
||||||
<ClCompile Include="..\CMisc.cpp" />
|
|
||||||
<ClCompile Include="..\CModule.cpp" />
|
|
||||||
<ClCompile Include="..\CPlugin.cpp" />
|
|
||||||
<ClCompile Include="..\CTask.cpp" />
|
|
||||||
<ClCompile Include="..\CVault.cpp" />
|
|
||||||
<ClCompile Include="..\debugger.cpp" />
|
|
||||||
<ClCompile Include="..\emsg.cpp" />
|
|
||||||
<ClCompile Include="..\fakemeta.cpp" />
|
|
||||||
<ClCompile Include="..\file.cpp" />
|
|
||||||
<ClCompile Include="..\float.cpp" />
|
|
||||||
<ClCompile Include="..\format.cpp">
|
|
||||||
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">AssemblyAndSourceCode</AssemblerOutput>
|
|
||||||
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">AssemblyAndSourceCode</AssemblerOutput>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\libraries.cpp" />
|
|
||||||
<ClCompile Include="..\md5.cpp" />
|
|
||||||
<ClCompile Include="..\messages.cpp" />
|
|
||||||
<ClCompile Include="..\meta_api.cpp" />
|
|
||||||
<ClCompile Include="..\modules.cpp" />
|
|
||||||
<ClCompile Include="..\natives.cpp" />
|
|
||||||
<ClCompile Include="..\newmenus.cpp" />
|
|
||||||
<ClCompile Include="..\nongpl_matches.cpp" />
|
|
||||||
<ClCompile Include="..\optimizer.cpp" />
|
|
||||||
<ClCompile Include="..\power.cpp" />
|
|
||||||
<ClCompile Include="..\sorting.cpp" />
|
|
||||||
<ClCompile Include="..\srvcmd.cpp" />
|
|
||||||
<ClCompile Include="..\string.cpp">
|
|
||||||
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">All</AssemblerOutput>
|
|
||||||
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">All</AssemblerOutput>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\strptime.cpp" />
|
|
||||||
<ClCompile Include="..\trie_natives.cpp" />
|
|
||||||
<ClCompile Include="..\util.cpp" />
|
|
||||||
<ClCompile Include="..\vault.cpp" />
|
|
||||||
<ClCompile Include="..\vector.cpp" />
|
|
||||||
<ClCompile Include="..\datastructs.cpp" />
|
|
||||||
<ClCompile Include="..\sdk\amxxmodule.cpp">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITDebugBinLog|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITDebug|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITReleaseBinLog|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\amx.h" />
|
|
||||||
<ClInclude Include="..\amxdbg.h" />
|
|
||||||
<ClInclude Include="..\amxmod_compat.h" />
|
|
||||||
<ClInclude Include="..\amxmodx.h" />
|
|
||||||
<ClInclude Include="..\amxxfile.h" />
|
|
||||||
<ClInclude Include="..\amxxlog.h" />
|
|
||||||
<ClInclude Include="..\binlog.h" />
|
|
||||||
<ClInclude Include="..\CCmd.h" />
|
|
||||||
<ClInclude Include="..\CEvent.h" />
|
|
||||||
<ClInclude Include="..\CFile.h" />
|
|
||||||
<ClInclude Include="..\CFlagManager.h" />
|
|
||||||
<ClInclude Include="..\CForward.h" />
|
|
||||||
<ClInclude Include="..\CLang.h" />
|
|
||||||
<ClInclude Include="..\CList.h" />
|
|
||||||
<ClInclude Include="..\CLogEvent.h" />
|
|
||||||
<ClInclude Include="..\CMenu.h" />
|
|
||||||
<ClInclude Include="..\CMisc.h" />
|
|
||||||
<ClInclude Include="..\CModule.h" />
|
|
||||||
<ClInclude Include="..\CPlugin.h" />
|
|
||||||
<ClInclude Include="..\CQueue.h" />
|
|
||||||
<ClInclude Include="..\CString.h" />
|
|
||||||
<ClInclude Include="..\CTask.h" />
|
|
||||||
<ClInclude Include="..\CVault.h" />
|
|
||||||
<ClInclude Include="..\CVector.h" />
|
|
||||||
<ClInclude Include="..\datastructs.h" />
|
|
||||||
<ClInclude Include="..\debugger.h" />
|
|
||||||
<ClInclude Include="..\fakemeta.h" />
|
|
||||||
<ClInclude Include="..\format.h" />
|
|
||||||
<ClInclude Include="..\libraries.h" />
|
|
||||||
<ClInclude Include="..\md5.h" />
|
|
||||||
<ClInclude Include="..\messages.h" />
|
|
||||||
<ClInclude Include="..\modules.h" />
|
|
||||||
<ClInclude Include="..\natives.h" />
|
|
||||||
<ClInclude Include="..\newmenus.h" />
|
|
||||||
<ClInclude Include="..\nongpl_matches.h" />
|
|
||||||
<ClInclude Include="..\optimizer.h" />
|
|
||||||
<ClInclude Include="..\resource.h" />
|
|
||||||
<ClInclude Include="..\sh_list.h" />
|
|
||||||
<ClInclude Include="..\sh_stack.h" />
|
|
||||||
<ClInclude Include="..\sh_tinyhash.h" />
|
|
||||||
<ClInclude Include="..\svn_version.h" />
|
|
||||||
<ClInclude Include="..\trie_natives.h" />
|
|
||||||
<ClInclude Include="..\zlib\zconf.h" />
|
|
||||||
<ClInclude Include="..\zlib\zlib.h" />
|
|
||||||
<ClInclude Include="..\sdk\amxxmodule.h" />
|
|
||||||
<ClInclude Include="..\sdk\moduleconfig.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="..\version.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\amxdefn.asm" />
|
|
||||||
<None Include="..\amxexecn.asm" />
|
|
||||||
<None Include="..\amxjitsn.asm" />
|
|
||||||
<None Include="..\helpers-x86.asm" />
|
|
||||||
<None Include="..\natives-amd64.asm" />
|
|
||||||
<None Include="..\natives-x86.asm" />
|
|
||||||
<None Include="..\..\plugins\include\amxconst.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmisc.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmodx.inc" />
|
|
||||||
<None Include="..\..\plugins\include\core.inc" />
|
|
||||||
<None Include="..\..\plugins\include\file.inc" />
|
|
||||||
<None Include="..\..\plugins\include\float.inc" />
|
|
||||||
<None Include="..\..\plugins\include\lang.inc" />
|
|
||||||
<None Include="..\..\plugins\include\message_const.inc" />
|
|
||||||
<None Include="..\..\plugins\include\message_stocks.inc" />
|
|
||||||
<None Include="..\..\plugins\include\messages.inc" />
|
|
||||||
<None Include="..\..\plugins\include\sorting.inc" />
|
|
||||||
<None Include="..\..\plugins\include\string.inc" />
|
|
||||||
<None Include="..\..\plugins\include\svn_version.inc" />
|
|
||||||
<None Include="..\..\plugins\include\time.inc" />
|
|
||||||
<None Include="..\..\plugins\include\vault.inc" />
|
|
||||||
<None Include="..\..\plugins\include\vector.inc" />
|
|
||||||
<None Include="..\..\plugins\include\xs.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\amxmod.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\maths.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\mysql.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\translator.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\Vexd_Utilities.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\VexdUM.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\VexdUM_const.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\VexdUM_stock.inc" />
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\xtrafun.inc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Object Include="..\Jit\helpers-x86.obj" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
@ -1,426 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup>
|
|
||||||
<Filter Include="Source Files">
|
|
||||||
<UniqueIdentifier>{0d31fe96-c452-4d62-8c7c-0f0f8d69efa8}</UniqueIdentifier>
|
|
||||||
<Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Header Files">
|
|
||||||
<UniqueIdentifier>{6e1c49c6-6432-4873-bb9a-9d30996955b2}</UniqueIdentifier>
|
|
||||||
<Extensions>h;hpp;hxx;hm;inl</Extensions>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Resource Files">
|
|
||||||
<UniqueIdentifier>{721333c3-98b9-4888-a3ec-637a2bd46091}</UniqueIdentifier>
|
|
||||||
<Extensions>rc</Extensions>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Assembly">
|
|
||||||
<UniqueIdentifier>{e347f4b5-ec94-43d6-b45b-85ab3f146a45}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Assembly\Builds">
|
|
||||||
<UniqueIdentifier>{1cec296a-ddcc-44da-97c4-2a4d0f4d6fc7}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="SDK">
|
|
||||||
<UniqueIdentifier>{bbfaec3e-7d17-45ea-8b84-093fa5714022}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Pawn Includes">
|
|
||||||
<UniqueIdentifier>{4022451d-eb5f-4f14-b8d8-2ce23fec6e59}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Pawn Includes\AMX Mod Compat">
|
|
||||||
<UniqueIdentifier>{d4419052-0ddd-415e-bb16-4393b99751be}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\amx.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\amxcore.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\amxdbg.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\amxmod_compat.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\amxmodx.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\amxtime.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\amxxfile.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\amxxlog.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\binlog.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CCmd.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CEvent.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CFile.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CFlagManager.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CForward.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CLang.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CLogEvent.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CMenu.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CMisc.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CModule.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CPlugin.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CTask.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CVault.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\debugger.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\emsg.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\fakemeta.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\file.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\float.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\format.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\libraries.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\md5.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\messages.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\meta_api.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\modules.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\natives.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\newmenus.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\nongpl_matches.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\optimizer.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\power.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\sorting.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\srvcmd.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\string.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\strptime.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\trie_natives.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\util.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\vault.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\vector.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\datastructs.cpp">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\sdk\amxxmodule.cpp">
|
|
||||||
<Filter>SDK</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\amx.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\amxdbg.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\amxmod_compat.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\amxmodx.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\amxxfile.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\amxxlog.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\binlog.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CCmd.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CEvent.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CFile.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CFlagManager.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CForward.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CLang.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CList.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CLogEvent.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CMenu.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CMisc.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CModule.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CPlugin.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CQueue.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CString.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CTask.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CVault.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CVector.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\datastructs.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\debugger.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\fakemeta.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\format.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\libraries.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\md5.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\messages.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\modules.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\natives.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\newmenus.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\nongpl_matches.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\optimizer.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\resource.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\sh_list.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\sh_stack.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\sh_tinyhash.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\svn_version.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\trie_natives.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\zlib\zconf.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\zlib\zlib.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\sdk\amxxmodule.h">
|
|
||||||
<Filter>SDK</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\sdk\moduleconfig.h">
|
|
||||||
<Filter>SDK</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="..\version.rc">
|
|
||||||
<Filter>Resource Files</Filter>
|
|
||||||
</ResourceCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\amxdefn.asm">
|
|
||||||
<Filter>Assembly</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\amxexecn.asm">
|
|
||||||
<Filter>Assembly</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\amxjitsn.asm">
|
|
||||||
<Filter>Assembly</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\helpers-x86.asm">
|
|
||||||
<Filter>Assembly</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\natives-amd64.asm">
|
|
||||||
<Filter>Assembly</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\natives-x86.asm">
|
|
||||||
<Filter>Assembly</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxconst.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmisc.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmodx.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\core.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\file.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\float.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\lang.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\message_const.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\message_stocks.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\messages.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\sorting.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\string.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\svn_version.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\time.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\vault.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\vector.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\xs.inc">
|
|
||||||
<Filter>Pawn Includes</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\amxmod.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\maths.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\mysql.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\translator.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\Vexd_Utilities.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\VexdUM.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\VexdUM_const.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\VexdUM_stock.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\plugins\include\amxmod_compat\xtrafun.inc">
|
|
||||||
<Filter>Pawn Includes\AMX Mod Compat</Filter>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Object Include="..\Jit\helpers-x86.obj">
|
|
||||||
<Filter>Assembly\Builds</Filter>
|
|
||||||
</Object>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||||
# Visual Studio 2010
|
# Visual Studio 2005
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "amxmodx_mm", "amxmodx_mm.vcxproj", "{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "amxmodx_mm", "amxmodx_mm.vcproj", "{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
926
amxmodx/msvc8/amxmodx_mm.vcproj
Normal file
926
amxmodx/msvc8/amxmodx_mm.vcproj
Normal file
@ -0,0 +1,926 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="amxmodx_mm"
|
||||||
|
ProjectGUID="{2BF64D1A-AC89-41B0-9D02-FB8CB610F850}"
|
||||||
|
RootNamespace="amxmodx"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="JITDebug|Win32"
|
||||||
|
OutputDirectory="JITDebug"
|
||||||
|
IntermediateDirectory="JITDebug"
|
||||||
|
ConfigurationType="2"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\debug/amxmodx.tlb"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;_CRT_SECURE_NO_DEPRECATE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
StructMemberAlignment="3"
|
||||||
|
TreatWChar_tAsBuiltInType="true"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
PrecompiledHeaderThrough="amxmodx.h"
|
||||||
|
PrecompiledHeaderFile=".\jitdebug/amxmodx.pch"
|
||||||
|
AssemblerListingLocation=".\jitdebug/"
|
||||||
|
ObjectFile=".\jitdebug/"
|
||||||
|
ProgramDataBaseFileName=".\jitdebug/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
CompileAs="0"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
Culture="1033"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/MACHINE:I386"
|
||||||
|
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
||||||
|
OutputFile="jitdebug/amxmodx_mm.dll"
|
||||||
|
Version="0.1"
|
||||||
|
LinkIncremental="2"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories="..\extra\lib_win32"
|
||||||
|
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
||||||
|
ModuleDefinitionFile=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile=".\jitdebug/amxx_mm.pdb"
|
||||||
|
ImportLibrary=".\jitdebug/amxmodx_mm.lib"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="JITRelease|Win32"
|
||||||
|
OutputDirectory="JITRelease"
|
||||||
|
IntermediateDirectory="JITRelease"
|
||||||
|
ConfigurationType="2"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\release/amxmodx.tlb"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
InlineFunctionExpansion="1"
|
||||||
|
EnableIntrinsicFunctions="true"
|
||||||
|
FavorSizeOrSpeed="1"
|
||||||
|
OmitFramePointers="true"
|
||||||
|
AdditionalIncludeDirectories="..\..\metamod\metamod,..\..\hlsdk\sourcecode\common,..\..\hlsdk\sourcecode\engine,..\..\hlsdk\sourcecode\dlls,..\..\hlsdk\sourcecode\pm_shared,..\extra\include"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;_CRT_SECURE_NO_DEPRECATE"
|
||||||
|
IgnoreStandardIncludePath="false"
|
||||||
|
StringPooling="true"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
TreatWChar_tAsBuiltInType="true"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
PrecompiledHeaderThrough="amxmodx.h"
|
||||||
|
PrecompiledHeaderFile=".\jitrelease/amxmodx.pch"
|
||||||
|
AssemblerListingLocation=".\jitrelease/"
|
||||||
|
ObjectFile=".\jitrelease/"
|
||||||
|
ProgramDataBaseFileName=".\jitrelease/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
CompileAs="0"
|
||||||
|
ShowIncludes="false"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
Culture="1033"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/MACHINE:I386"
|
||||||
|
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
||||||
|
OutputFile="jitrelease/amxmodx_mm.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories="..\extra\lib_win32"
|
||||||
|
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
||||||
|
ModuleDefinitionFile=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile=".\jitrelease/amxmodx_mm.pdb"
|
||||||
|
GenerateMapFile="true"
|
||||||
|
ImportLibrary=".\jitrelease/amxmodx_mm.lib"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="JITDebugBinLog|Win32"
|
||||||
|
OutputDirectory="$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="2"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\debug/amxmodx.tlb"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
AdditionalIncludeDirectories=""
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;PAWN_CELL_SIZE=32;ASM32;JIT;BINLOG_ENABLED;_CRT_SECURE_NO_DEPRECATE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="1"
|
||||||
|
StructMemberAlignment="3"
|
||||||
|
TreatWChar_tAsBuiltInType="true"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
PrecompiledHeaderThrough="amxmodx.h"
|
||||||
|
PrecompiledHeaderFile=".\jitdebugbinlog/amxmodx.pch"
|
||||||
|
AssemblerListingLocation=".\jitdebugbinlog/"
|
||||||
|
ObjectFile=".\jitdebugbinlog/"
|
||||||
|
ProgramDataBaseFileName=".\jitdebugbinlog/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
CompileAs="0"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="_DEBUG"
|
||||||
|
Culture="1033"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/MACHINE:I386"
|
||||||
|
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
||||||
|
OutputFile="jitdebugbinlog/amxmodx_bl_mm.dll"
|
||||||
|
Version="0.1"
|
||||||
|
LinkIncremental="2"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories="..\extra\lib_win32"
|
||||||
|
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
||||||
|
ModuleDefinitionFile=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile=".\jitdebugbinlog/amxmodx_bl_mm.pdb"
|
||||||
|
ImportLibrary=".\jitdebugbinlog/amxmodx_bl_mm.lib"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="JITReleaseBinLog|Win32"
|
||||||
|
OutputDirectory="$(ConfigurationName)"
|
||||||
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
|
ConfigurationType="2"
|
||||||
|
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||||
|
UseOfMFC="0"
|
||||||
|
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
MkTypLibCompatible="true"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
TargetEnvironment="1"
|
||||||
|
TypeLibraryName=".\release/amxmodx.tlb"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="2"
|
||||||
|
InlineFunctionExpansion="1"
|
||||||
|
EnableIntrinsicFunctions="true"
|
||||||
|
FavorSizeOrSpeed="1"
|
||||||
|
OmitFramePointers="true"
|
||||||
|
AdditionalIncludeDirectories="..\..\metamod\metamod,..\..\hlsdk\sourcecode\common,..\..\hlsdk\sourcecode\engine,..\..\hlsdk\sourcecode\dlls,..\..\hlsdk\sourcecode\pm_shared,..\extra\include"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;amxmodx_EXPORTS;JIT;ASM32;PAWN_CELL_SIZE=32;BINLOG_ENABLED;_CRT_SECURE_NO_DEPRECATE"
|
||||||
|
IgnoreStandardIncludePath="false"
|
||||||
|
StringPooling="true"
|
||||||
|
RuntimeLibrary="0"
|
||||||
|
EnableFunctionLevelLinking="true"
|
||||||
|
TreatWChar_tAsBuiltInType="true"
|
||||||
|
RuntimeTypeInfo="false"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
PrecompiledHeaderThrough="amxmodx.h"
|
||||||
|
PrecompiledHeaderFile=".\jitreleasebinlog/amxmodx.pch"
|
||||||
|
AssemblerListingLocation=".\jitreleasebinlog/"
|
||||||
|
ObjectFile=".\jitreleasebinlog/"
|
||||||
|
ProgramDataBaseFileName=".\jitreleasebinlog/"
|
||||||
|
WarningLevel="3"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
CompileAs="0"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
PreprocessorDefinitions="NDEBUG"
|
||||||
|
Culture="1033"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalOptions="/MACHINE:I386"
|
||||||
|
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
|
||||||
|
OutputFile="jitreleasebinlog/amxmodx_bl_mm.dll"
|
||||||
|
LinkIncremental="1"
|
||||||
|
SuppressStartupBanner="true"
|
||||||
|
AdditionalLibraryDirectories="..\extra\lib_win32"
|
||||||
|
IgnoreDefaultLibraryNames="MSVCRT;LIBC"
|
||||||
|
ModuleDefinitionFile=""
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
ProgramDatabaseFile=".\jitreleasebinlog/amxmodx_bl_mm.pdb"
|
||||||
|
GenerateMapFile="true"
|
||||||
|
ImportLibrary=".\jitreleasebinlog/amxmodx_bl_mm.lib"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amx.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxcore.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxdbg.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxmod_compat.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxmodx.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxtime.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxxfile.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxxlog.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\binlog.cpp"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITDebug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITRelease|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CCmd.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CEvent.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CFile.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CForward.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CLang.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CLogEvent.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CMenu.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CMisc.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CModule.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CPlugin.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CTask.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CVault.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\debugger.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\emsg.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\fakemeta.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\file.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\float.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\format.cpp"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITRelease|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AssemblerOutput="4"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITReleaseBinLog|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AssemblerOutput="4"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libraries.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\md5.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\messages.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\meta_api.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\modules.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\natives.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\newmenus.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\optimizer.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\power.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sorting.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\srvcmd.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\string.cpp"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITRelease|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AssemblerOutput="2"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITReleaseBinLog|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
AssemblerOutput="2"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\strptime.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\util.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\vault.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\vector.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amx.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxdbg.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxmod_compat.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxmodx.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxxfile.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxxlog.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\binlog.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CCmd.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CEvent.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CFile.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CForward.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CLang.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CList.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CLogEvent.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CMenu.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CMisc.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CModule.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CPlugin.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CQueue.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CString.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CTask.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CVault.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\CVector.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\debugger.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\fakemeta.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\format.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\libraries.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\md5.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\menus.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\messages.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\modules.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\natives.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\newmenus.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\optimizer.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\resource.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sh_list.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sh_stack.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sh_tinyhash.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\zlib\zconf.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\zlib\zlib.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\version.rc"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Assembly"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxdefn.asm"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxexecn.asm"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\amxjitsn.asm"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\helpers-x86.asm"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\natives-amd64.asm"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\natives-x86.asm"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<Filter
|
||||||
|
Name="Builds"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\Jit\helpers-x86.obj"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="SDK"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sdk\amxxmodule.cpp"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITDebug|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITRelease|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITDebugBinLog|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="JITReleaseBinLog|Win32"
|
||||||
|
ExcludedFromBuild="true"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sdk\amxxmodule.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\sdk\moduleconfig.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
@ -35,11 +35,8 @@
|
|||||||
#include "libraries.h"
|
#include "libraries.h"
|
||||||
#include "format.h"
|
#include "format.h"
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
#if defined(__linux__)
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include "sclinux.h"
|
#include "sclinux.h"
|
||||||
@ -49,16 +46,12 @@
|
|||||||
//With the exception for param_convert, which was written by
|
//With the exception for param_convert, which was written by
|
||||||
// Julien "dJeyL" Laurent
|
// Julien "dJeyL" Laurent
|
||||||
|
|
||||||
|
CStack<int> g_ErrorStk;
|
||||||
CVector<regnative *> g_RegNatives;
|
CVector<regnative *> g_RegNatives;
|
||||||
|
CStack<regnative *> g_NativeStack;
|
||||||
static char g_errorStr[512] = {0};
|
static char g_errorStr[512] = {0};
|
||||||
bool g_Initialized = false;
|
bool g_Initialized = false;
|
||||||
|
|
||||||
/* Stack stuff */
|
|
||||||
regnative *g_pCurNative = NULL;
|
|
||||||
AMX *g_pCaller = NULL;
|
|
||||||
cell g_Params[CALLFUNC_MAXPARAMS];
|
|
||||||
int g_CurError = AMX_ERR_NONE;
|
|
||||||
|
|
||||||
int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (idx < 0 || idx >= (int)g_RegNatives.size())
|
if (idx < 0 || idx >= (int)g_RegNatives.size())
|
||||||
@ -86,55 +79,37 @@ int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save old values on ZE STACK */
|
if (pNative->caller)
|
||||||
AMX *pSaveCaller = g_pCaller;
|
|
||||||
cell saveParams[CALLFUNC_MAXPARAMS];
|
|
||||||
regnative *pSaveNative = g_pCurNative;
|
|
||||||
int saveError = g_CurError;
|
|
||||||
|
|
||||||
if (pSaveNative)
|
|
||||||
{
|
{
|
||||||
for (ucell i = 0; i <= g_Params[0] / sizeof(cell); i++)
|
LogError(amx, AMX_ERR_NATIVE, "Bug caught! Please contact the AMX Mod X Dev Team.");
|
||||||
{
|
return 0;
|
||||||
saveParams[i] = g_Params[i];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save current info */
|
//parameter stack
|
||||||
g_CurError = AMX_ERR_NONE;
|
//NOTE: it is possible that recursive register native calling
|
||||||
g_pCaller = amx;
|
// could potentially be somehow damaged here.
|
||||||
g_pCurNative = pNative;
|
//so, a :TODO: - make the stack unique, rather than a known ptr
|
||||||
|
pNative->caller = amx;
|
||||||
|
|
||||||
int err = 0;
|
int err = 0;
|
||||||
cell ret = 0;
|
cell ret = 0;
|
||||||
|
g_ErrorStk.push(0);
|
||||||
|
g_NativeStack.push(pNative);
|
||||||
if (pNative->style == 0)
|
if (pNative->style == 0)
|
||||||
{
|
{
|
||||||
amx_Push(pNative->amx, numParams);
|
amx_Push(pNative->amx, numParams);
|
||||||
amx_Push(pNative->amx, pPlugin->getId());
|
amx_Push(pNative->amx, pPlugin->getId());
|
||||||
for (int i=numParams; i>=0; i--)
|
for (int i=numParams; i>=0; i--)
|
||||||
{
|
pNative->params[i] = params[i];
|
||||||
g_Params[i] = params[i];
|
|
||||||
}
|
|
||||||
} else if (pNative->style == 1) {
|
} else if (pNative->style == 1) {
|
||||||
/**
|
//use dJeyL's system .. very clever!
|
||||||
* use dJeyL's system .. very clever!
|
|
||||||
* NOTE: clever, but doesn't work at all since the JIT does bounds checking
|
|
||||||
* this should REALLY be deprecated
|
|
||||||
*/
|
|
||||||
for (int i=numParams; i>=1; i--)
|
for (int i=numParams; i>=1; i--)
|
||||||
{
|
|
||||||
amx_Push(pNative->amx, params[i]);
|
amx_Push(pNative->amx, params[i]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Debugger *pDebugger = (Debugger *)pNative->amx->userdata[UD_DEBUGGER];
|
Debugger *pDebugger = (Debugger *)pNative->amx->userdata[UD_DEBUGGER];
|
||||||
if (pDebugger)
|
if (pDebugger)
|
||||||
{
|
|
||||||
pDebugger->BeginExec();
|
pDebugger->BeginExec();
|
||||||
}
|
|
||||||
|
|
||||||
err=amx_Exec(pNative->amx, &ret, pNative->func);
|
err=amx_Exec(pNative->amx, &ret, pNative->func);
|
||||||
|
|
||||||
if (err != AMX_ERR_NONE)
|
if (err != AMX_ERR_NONE)
|
||||||
{
|
{
|
||||||
if (pDebugger && pDebugger->ErrorExists())
|
if (pDebugger && pDebugger->ErrorExists())
|
||||||
@ -147,26 +122,15 @@ int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
|||||||
pNative->amx->error = AMX_ERR_NONE;
|
pNative->amx->error = AMX_ERR_NONE;
|
||||||
//furthermore, log an error in the parent plugin.
|
//furthermore, log an error in the parent plugin.
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Unhandled dynamic native error");
|
LogError(amx, AMX_ERR_NATIVE, "Unhandled dynamic native error");
|
||||||
} else if (g_CurError != AMX_ERR_NONE) {
|
} else if (g_ErrorStk.front()) {
|
||||||
LogError(amx, g_CurError, g_errorStr);
|
LogError(amx, g_ErrorStk.front(), g_errorStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pDebugger)
|
if (pDebugger)
|
||||||
{
|
|
||||||
pDebugger->EndExec();
|
pDebugger->EndExec();
|
||||||
}
|
g_NativeStack.pop();
|
||||||
|
g_ErrorStk.pop();
|
||||||
|
|
||||||
/* Restore everything */
|
pNative->caller = NULL;
|
||||||
g_pCurNative = pSaveNative;
|
|
||||||
g_CurError = saveError;
|
|
||||||
g_pCaller = pSaveCaller;
|
|
||||||
if (pSaveNative)
|
|
||||||
{
|
|
||||||
for (ucell i = 0; i <= saveParams[0] / sizeof(cell); i++)
|
|
||||||
{
|
|
||||||
g_Params[i] = saveParams[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -174,9 +138,7 @@ int amxx_DynaCallback(int idx, AMX *amx, cell *params)
|
|||||||
AMX_NATIVE_INFO *BuildNativeTable()
|
AMX_NATIVE_INFO *BuildNativeTable()
|
||||||
{
|
{
|
||||||
if (g_RegNatives.size() < 1)
|
if (g_RegNatives.size() < 1)
|
||||||
{
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
AMX_NATIVE_INFO *pNatives = new AMX_NATIVE_INFO[g_RegNatives.size() + 1];
|
AMX_NATIVE_INFO *pNatives = new AMX_NATIVE_INFO[g_RegNatives.size() + 1];
|
||||||
|
|
||||||
@ -202,7 +164,8 @@ static cell AMX_NATIVE_CALL log_error(AMX *amx, cell *params)
|
|||||||
char *err = format_amxstring(amx, params, 2, len);
|
char *err = format_amxstring(amx, params, 2, len);
|
||||||
|
|
||||||
_snprintf(g_errorStr, sizeof(g_errorStr), "%s", err);
|
_snprintf(g_errorStr, sizeof(g_errorStr), "%s", err);
|
||||||
g_CurError = params[1];
|
g_ErrorStk.pop();
|
||||||
|
g_ErrorStk.push(params[1]);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -210,12 +173,13 @@ static cell AMX_NATIVE_CALL log_error(AMX *amx, cell *params)
|
|||||||
//get_string(param, dest[], len)
|
//get_string(param, dest[], len)
|
||||||
static cell AMX_NATIVE_CALL get_string(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_string(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (g_pCurNative->style)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
if (pNative->style)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
@ -223,19 +187,20 @@ static cell AMX_NATIVE_CALL get_string(AMX *amx, cell *params)
|
|||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
char *str = get_amxstring(g_pCaller, g_Params[p], 0, len);
|
char *str = get_amxstring(pNative->caller, pNative->params[p], 0, len);
|
||||||
return set_amxstring(amx, params[2], str, params[3]);
|
return set_amxstring(amx, params[2], str, params[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//set_string(param, source[], maxlen)
|
//set_string(param, source[], maxlen)
|
||||||
static cell AMX_NATIVE_CALL set_string(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_string(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (g_pCurNative->style)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
if (pNative->style)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
@ -245,44 +210,46 @@ static cell AMX_NATIVE_CALL set_string(AMX *amx, cell *params)
|
|||||||
int len;
|
int len;
|
||||||
char *str = get_amxstring(amx, params[2], 0, len);
|
char *str = get_amxstring(amx, params[2], 0, len);
|
||||||
|
|
||||||
return set_amxstring(g_pCaller, g_Params[p], str, params[3]);
|
return set_amxstring(pNative->caller, pNative->params[p], str, params[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//get a byvalue parameter
|
//get a byvalue parameter
|
||||||
//get_param(num)
|
//get_param(num)
|
||||||
static cell AMX_NATIVE_CALL get_param(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_param(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (g_pCurNative->style)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
if (pNative->style)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
return g_Params[p];
|
return pNative->params[p];
|
||||||
}
|
}
|
||||||
|
|
||||||
//get_param_byref(num)
|
//get_param_byref(num)
|
||||||
static cell AMX_NATIVE_CALL get_param_byref(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_param_byref(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (g_pCurNative->style)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
if (pNative->style)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
cell *addr = get_amxaddr(g_pCaller, g_Params[p]);
|
cell *addr = get_amxaddr(pNative->caller, pNative->params[p]);
|
||||||
|
|
||||||
return addr[0];
|
return addr[0];
|
||||||
}
|
}
|
||||||
@ -290,19 +257,20 @@ static cell AMX_NATIVE_CALL get_param_byref(AMX *amx, cell *params)
|
|||||||
//set_param_byref(num, val)
|
//set_param_byref(num, val)
|
||||||
static cell AMX_NATIVE_CALL set_param_byref(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_param_byref(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (g_pCurNative->style)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
if (pNative->style)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
cell *addr = get_amxaddr(g_pCaller, g_Params[p]);
|
cell *addr = get_amxaddr(pNative->caller, pNative->params[p]);
|
||||||
|
|
||||||
addr[0] = params[2];
|
addr[0] = params[2];
|
||||||
|
|
||||||
@ -312,19 +280,20 @@ static cell AMX_NATIVE_CALL set_param_byref(AMX *amx, cell *params)
|
|||||||
//get_array(param, dest[], size)
|
//get_array(param, dest[], size)
|
||||||
static cell AMX_NATIVE_CALL get_array(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL get_array(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (g_pCurNative->style)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
if (pNative->style)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
cell *source = get_amxaddr(g_pCaller, g_Params[p]);
|
cell *source = get_amxaddr(pNative->caller, pNative->params[p]);
|
||||||
cell *dest = get_amxaddr(amx, params[2]);
|
cell *dest = get_amxaddr(amx, params[2]);
|
||||||
|
|
||||||
int size = params[3];
|
int size = params[3];
|
||||||
@ -337,19 +306,20 @@ static cell AMX_NATIVE_CALL get_array(AMX *amx, cell *params)
|
|||||||
//set_array(param, source[], size)
|
//set_array(param, source[], size)
|
||||||
static cell AMX_NATIVE_CALL set_array(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_array(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (g_pCurNative->style)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
if (pNative->style)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int p = params[1];
|
int p = params[1];
|
||||||
|
|
||||||
cell *dest = get_amxaddr(g_pCaller, g_Params[p]);
|
cell *dest = get_amxaddr(pNative->caller, pNative->params[p]);
|
||||||
cell *source = get_amxaddr(amx, params[2]);
|
cell *source = get_amxaddr(amx, params[2]);
|
||||||
|
|
||||||
int size = params[3];
|
int size = params[3];
|
||||||
@ -361,13 +331,15 @@ static cell AMX_NATIVE_CALL set_array(AMX *amx, cell *params)
|
|||||||
|
|
||||||
static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_pCurNative->style)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
|
||||||
|
if (pNative->style)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
@ -376,7 +348,10 @@ static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
|||||||
int vargPos = static_cast<int>(params[4]);
|
int vargPos = static_cast<int>(params[4]);
|
||||||
int fargPos = static_cast<int>(params[3]);
|
int fargPos = static_cast<int>(params[3]);
|
||||||
|
|
||||||
cell max = g_Params[0] / sizeof(cell);
|
/** get the parent parameter array */
|
||||||
|
cell *local_params = pNative->params;
|
||||||
|
|
||||||
|
cell max = local_params[0] / sizeof(cell);
|
||||||
if (vargPos > (int)max + 1)
|
if (vargPos > (int)max + 1)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid vararg parameter passed: %d", vargPos);
|
LogError(amx, AMX_ERR_NATIVE, "Invalid vararg parameter passed: %d", vargPos);
|
||||||
@ -399,7 +374,7 @@ static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
fmt = get_amxaddr(amx, params[5]);
|
fmt = get_amxaddr(amx, params[5]);
|
||||||
} else {
|
} else {
|
||||||
fmt = get_amxaddr(g_pCaller, g_Params[fargPos]);
|
fmt = get_amxaddr(pNative->caller, pNative->params[fargPos]);
|
||||||
}
|
}
|
||||||
cell *realdest = get_amxaddr(amx, params[1]);
|
cell *realdest = get_amxaddr(amx, params[1]);
|
||||||
size_t maxlen = static_cast<size_t>(params[2]);
|
size_t maxlen = static_cast<size_t>(params[2]);
|
||||||
@ -410,7 +385,7 @@ static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
|||||||
dest = cpbuf;
|
dest = cpbuf;
|
||||||
|
|
||||||
/* perform format */
|
/* perform format */
|
||||||
size_t total = atcprintf(dest, maxlen, fmt, g_pCaller, g_Params, &vargPos);
|
size_t total = atcprintf(dest, maxlen, fmt, pNative->caller, local_params, &vargPos);
|
||||||
|
|
||||||
/* copy back */
|
/* copy back */
|
||||||
memcpy(realdest, dest, (total+1) * sizeof(cell));
|
memcpy(realdest, dest, (total+1) * sizeof(cell));
|
||||||
@ -424,19 +399,20 @@ static cell AMX_NATIVE_CALL vdformat(AMX *amx, cell *params)
|
|||||||
//I've no idea how he thought of this, but it's great. No idea how well it works.
|
//I've no idea how he thought of this, but it's great. No idea how well it works.
|
||||||
static cell AMX_NATIVE_CALL param_convert(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL param_convert(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
if (!g_pCurNative || (g_pCurNative->amx != amx))
|
if (!g_NativeStack.size())
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Not currently in a dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (g_pCurNative->style != 1)
|
regnative *pNative = g_NativeStack.front();
|
||||||
|
if (pNative->style != 1)
|
||||||
{
|
{
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
LogError(amx, AMX_ERR_NATIVE, "Wrong style of dynamic native");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
cell p = params[1];
|
cell p = params[1];
|
||||||
|
|
||||||
AMX *caller = g_pCaller;
|
AMX *caller = pNative->caller;
|
||||||
|
|
||||||
unsigned char *data =amx->base+(int)((AMX_HEADER *)amx->base)->dat;
|
unsigned char *data =amx->base+(int)((AMX_HEADER *)amx->base)->dat;
|
||||||
unsigned char *realdata = caller->base+(int)((AMX_HEADER *)caller->base)->dat;
|
unsigned char *realdata = caller->base+(int)((AMX_HEADER *)caller->base)->dat;
|
||||||
@ -478,20 +454,17 @@ static cell AMX_NATIVE_CALL register_native(AMX *amx, cell *params)
|
|||||||
regnative *pNative = new regnative;
|
regnative *pNative = new regnative;
|
||||||
pNative->amx = amx;
|
pNative->amx = amx;
|
||||||
pNative->func = idx;
|
pNative->func = idx;
|
||||||
|
pNative->caller = NULL;
|
||||||
|
|
||||||
//we'll apply a safety buffer too
|
//we'll apply a safety buffer too
|
||||||
//make our function
|
//make our function
|
||||||
int size = amxx_DynaCodesize();
|
int size = amxx_DynaCodesize();
|
||||||
#if defined(_WIN32)
|
#ifndef __linux__
|
||||||
DWORD temp;
|
DWORD temp;
|
||||||
pNative->pfn = new char[size + 10];
|
pNative->pfn = new char[size + 10];
|
||||||
VirtualProtect(pNative->pfn, size+10, PAGE_EXECUTE_READWRITE, &temp);
|
VirtualProtect(pNative->pfn, size+10, PAGE_EXECUTE_READWRITE, &temp);
|
||||||
#elif defined(__GNUC__)
|
#else
|
||||||
# if defined(__APPLE__)
|
|
||||||
pNative->pfn = (char *)valloc(size+10);
|
|
||||||
# else
|
|
||||||
pNative->pfn = (char *)memalign(sysconf(_SC_PAGESIZE), size+10);
|
pNative->pfn = (char *)memalign(sysconf(_SC_PAGESIZE), size+10);
|
||||||
# endif
|
|
||||||
mprotect((void *)pNative->pfn, size+10, PROT_READ|PROT_WRITE|PROT_EXEC);
|
mprotect((void *)pNative->pfn, size+10, PROT_READ|PROT_WRITE|PROT_EXEC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -50,7 +50,9 @@ struct regnative
|
|||||||
String name;
|
String name;
|
||||||
char *pfn;
|
char *pfn;
|
||||||
int func;
|
int func;
|
||||||
|
AMX *caller;
|
||||||
int style;
|
int style;
|
||||||
|
cell params[CALLFUNC_MAXPARAMS];
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C" void amxx_DynaInit(void *ptr);
|
extern "C" void amxx_DynaInit(void *ptr);
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "CMenu.h"
|
|
||||||
#include "newmenus.h"
|
#include "newmenus.h"
|
||||||
|
|
||||||
CVector<Menu *> g_NewMenus;
|
CVector<Menu *> g_NewMenus;
|
||||||
@ -38,15 +37,11 @@ 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)
|
||||||
@ -61,7 +56,7 @@ void validate_menu_text(char *str)
|
|||||||
str++;
|
str++;
|
||||||
char c = tolower(*str);
|
char c = tolower(*str);
|
||||||
if (c == 'r' || c == 'w'
|
if (c == 'r' || c == 'w'
|
||||||
|| c== 'y' || c == 'd')
|
|| c== 'w' || c == 'd')
|
||||||
{
|
{
|
||||||
str++;
|
str++;
|
||||||
offs += 2;
|
offs += 2;
|
||||||
@ -69,51 +64,42 @@ 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';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu::Menu(const char *title, AMX *amx, int fid) : m_Title(title), m_ItemColor("\\r"),
|
Menu::Menu(const char *title, int mid, int tid)
|
||||||
m_NeverExit(false), m_AutoColors(g_coloredmenus), thisId(0), func(fid),
|
|
||||||
isDestroying(false), items_per_page(7)
|
|
||||||
{
|
{
|
||||||
CPluginMngr::CPlugin *pPlugin = g_plugins.findPluginFast(amx);
|
m_Title.assign(title);
|
||||||
menuId = g_menucmds.registerMenuId(title, amx);
|
menuId = mid;
|
||||||
|
thisId = tid;
|
||||||
if (strcmp(pPlugin->getName(), "war3ft.amxx") == 0)
|
|
||||||
{
|
|
||||||
const char *version = pPlugin->getVersion();
|
|
||||||
if (strncmp(pPlugin->getVersion(), "3.0 RC", 6) == 0
|
|
||||||
&& atoi(&version[6]) <= 8)
|
|
||||||
{
|
|
||||||
g_menucmds.registerMenuCmd(
|
|
||||||
g_plugins.findPluginFast(amx),
|
|
||||||
menuId,
|
|
||||||
-1,
|
|
||||||
g_forwards.duplicateSPForward(fid),
|
|
||||||
true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_OptNames[abs(MENU_BACK)].assign("Back");
|
m_OptNames[abs(MENU_BACK)].assign("Back");
|
||||||
m_OptNames[abs(MENU_MORE)].assign("More");
|
m_OptNames[abs(MENU_MORE)].assign("More");
|
||||||
m_OptNames[abs(MENU_EXIT)].assign("Exit");
|
m_OptNames[abs(MENU_EXIT)].assign("Exit");
|
||||||
|
|
||||||
|
m_OptOrders[0] = MENU_BACK;
|
||||||
|
m_OptOrders[1] = MENU_MORE;
|
||||||
|
m_OptOrders[2] = MENU_EXIT;
|
||||||
|
|
||||||
|
m_AlwaysExit = false;
|
||||||
|
m_NeverExit = false;
|
||||||
|
m_AutoColors = g_coloredmenus;
|
||||||
|
|
||||||
|
items_per_page = 7;
|
||||||
|
func = 0;
|
||||||
|
padding = 0;
|
||||||
|
isDestroying = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
@ -153,9 +139,7 @@ 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));
|
||||||
}
|
}
|
||||||
@ -168,123 +152,34 @@ int Menu::PagekeyToItem(page_t page, item_t key)
|
|||||||
if (num_pages == 1 || !items_per_page)
|
if (num_pages == 1 || !items_per_page)
|
||||||
{
|
{
|
||||||
if (key > m_Items.size())
|
if (key > m_Items.size())
|
||||||
{
|
|
||||||
return MENU_EXIT;
|
return MENU_EXIT;
|
||||||
} else {
|
else
|
||||||
return key-1;
|
return key-1;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
//first page
|
//first page
|
||||||
if (page == 0)
|
if (page == 0)
|
||||||
{
|
{
|
||||||
/* The algorithm for spaces here is same as a middle page. */
|
if (key == items_per_page + 1)
|
||||||
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].EatNumber())
|
|
||||||
{
|
|
||||||
if (!new_key)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
new_key--;
|
|
||||||
}
|
|
||||||
if (!new_key)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
key = new_key;
|
|
||||||
if (key == items_per_page + 2)
|
|
||||||
{
|
|
||||||
return MENU_MORE;
|
return MENU_MORE;
|
||||||
} else if (key == items_per_page + 3) {
|
else if (key == items_per_page + 2)
|
||||||
|
return MENU_EXIT;
|
||||||
|
else
|
||||||
|
return (start + key - 1);
|
||||||
|
} else if (page == num_pages - 1) {
|
||||||
|
//last page
|
||||||
|
size_t remaining = m_Items.size() - start;
|
||||||
|
if (key == remaining + 1)
|
||||||
|
{
|
||||||
|
return MENU_BACK;
|
||||||
|
} else if (key == remaining + 2) {
|
||||||
return MENU_EXIT;
|
return MENU_EXIT;
|
||||||
} else {
|
} else {
|
||||||
return (start + key - 1);
|
return (start + key - 1);
|
||||||
}
|
}
|
||||||
} else if (page == num_pages - 1) {
|
|
||||||
//last page
|
|
||||||
item_t item_tracker = 0; // tracks how many valid items we have passed so far.
|
|
||||||
size_t remaining = m_Items.size() - start;
|
|
||||||
item_t new_key = key;
|
|
||||||
|
|
||||||
// For every item that takes up a slot (item or padded blank)
|
|
||||||
// we subtract one from new key.
|
|
||||||
// For every item (not blanks), we increase item_tracker.
|
|
||||||
// When new_key equals 0, item_tracker will then be set to
|
|
||||||
// whatever valid item was selected.
|
|
||||||
for (size_t i=m_Items.size() - remaining; i<m_Items.size(); i++)
|
|
||||||
{
|
|
||||||
item_tracker++;
|
|
||||||
|
|
||||||
if (new_key<=1) // If new_key is 0, or will be 0 after the next decrease
|
|
||||||
{
|
|
||||||
new_key=0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
new_key--;
|
|
||||||
|
|
||||||
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
|
|
||||||
{
|
|
||||||
if (m_Items[i]->blanks[j].EatNumber())
|
|
||||||
{
|
|
||||||
new_key--;
|
|
||||||
}
|
|
||||||
if (!new_key)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// If new_key doesn't equal zero, then a back/exit button was pressed.
|
|
||||||
if (new_key!=0)
|
|
||||||
{
|
|
||||||
if (key == items_per_page + 1)
|
|
||||||
{
|
|
||||||
return MENU_BACK;
|
|
||||||
}
|
|
||||||
else if (key == items_per_page + 3)
|
|
||||||
{
|
|
||||||
return MENU_EXIT;
|
|
||||||
}
|
|
||||||
// MENU_MORE should never happen here.
|
|
||||||
}
|
|
||||||
// otherwise our item is now start + item_tracker - 1
|
|
||||||
return (start + item_tracker - 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+items_per_page-1) && i<m_Items.size(); i++)
|
|
||||||
{
|
|
||||||
for (size_t j=0; j<m_Items[i]->blanks.size(); j++)
|
|
||||||
{
|
|
||||||
if (m_Items[i]->blanks[j].EatNumber())
|
|
||||||
{
|
|
||||||
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))
|
||||||
{
|
{
|
||||||
unsigned int num = key - items_per_page - 1;
|
return m_OptOrders[key-items_per_page-1];
|
||||||
static int map[] = {MENU_BACK, MENU_MORE, MENU_EXIT};
|
|
||||||
return map[num];
|
|
||||||
} else {
|
} else {
|
||||||
return (start + key - 1);
|
return (start + key - 1);
|
||||||
}
|
}
|
||||||
@ -345,10 +240,10 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
{
|
{
|
||||||
Display_Back = (1<<0),
|
Display_Back = (1<<0),
|
||||||
Display_Next = (1<<1),
|
Display_Next = (1<<1),
|
||||||
|
Display_Exit = (1<<2),
|
||||||
};
|
};
|
||||||
|
|
||||||
int flags = Display_Back|Display_Next;
|
int flags = Display_Back|Display_Next;
|
||||||
|
|
||||||
item_t start = page * items_per_page;
|
item_t start = page * items_per_page;
|
||||||
item_t end = 0;
|
item_t end = 0;
|
||||||
if (items_per_page)
|
if (items_per_page)
|
||||||
@ -360,18 +255,17 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
|
|||||||
} else {
|
} else {
|
||||||
end = start + items_per_page - 1;
|
end = start + items_per_page - 1;
|
||||||
}
|
}
|
||||||
|
if (!m_NeverExit && (m_AlwaysExit || (page == 0 || page == pages-1)))
|
||||||
|
flags |= Display_Exit;
|
||||||
} else {
|
} else {
|
||||||
end = numItems - 1;
|
end = numItems - 1;
|
||||||
if (end > 10)
|
if (end > 10)
|
||||||
{
|
|
||||||
end = 10;
|
end = 10;
|
||||||
}
|
flags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page == 0)
|
if (page == 0)
|
||||||
{
|
|
||||||
flags &= ~Display_Back;
|
flags &= ~Display_Back;
|
||||||
}
|
|
||||||
|
|
||||||
menuitem *pItem = NULL;
|
menuitem *pItem = NULL;
|
||||||
|
|
||||||
@ -380,66 +274,46 @@ 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++)
|
||||||
{
|
{
|
||||||
// reset enabled
|
|
||||||
enabled = true;
|
|
||||||
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());
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "%s%d.\\w %s\n", m_ItemColor.c_str(),option_display, pItem->name.c_str());
|
else
|
||||||
} else {
|
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", ++option, pItem->name.c_str());
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "%d. %s\n", option_display, pItem->name.c_str());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (m_AutoColors)
|
if (m_AutoColors)
|
||||||
{
|
{
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "\\d%d. %s\n\\w", option_display, pItem->name.c_str());
|
_snprintf(buffer, sizeof(buffer)-1, "\\d%d. %s\n\\w", ++option, 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++;
|
||||||
@ -451,121 +325,80 @@ 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].EatNumber())
|
if (pItem->blanks[j] == 1)
|
||||||
{
|
|
||||||
option++;
|
option++;
|
||||||
}
|
|
||||||
m_Text.append(pItem->blanks[j].GetDisplay());
|
|
||||||
m_Text.append("\n");
|
m_Text.append("\n");
|
||||||
slots++;
|
slots++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (items_per_page)
|
if (padding == 1 && items_per_page)
|
||||||
{
|
{
|
||||||
/* Pad spaces until we reach the end of the max possible items */
|
int pad = items_per_page;
|
||||||
for (unsigned int i=(unsigned)slots; i<items_per_page; i++)
|
if (flags & Display_Back)
|
||||||
|
pad--;
|
||||||
|
if (flags & Display_Next)
|
||||||
|
pad--;
|
||||||
|
if (flags & Display_Exit)
|
||||||
|
pad--;
|
||||||
|
for (int i=slots+1; i<=pad; i++)
|
||||||
{
|
{
|
||||||
m_Text.append("\n");
|
m_Text.append("\n");
|
||||||
option++;
|
option++;
|
||||||
}
|
}
|
||||||
/* Make sure there is at least one visual pad */
|
}
|
||||||
m_Text.append("\n");
|
|
||||||
|
|
||||||
/* Don't bother if there is only one page */
|
for (int i=0; i<3; i++)
|
||||||
if (pages > 1)
|
{
|
||||||
|
switch (m_OptOrders[i])
|
||||||
|
{
|
||||||
|
case MENU_BACK:
|
||||||
{
|
{
|
||||||
if (flags & Display_Back)
|
if (flags & Display_Back)
|
||||||
{
|
{
|
||||||
keys |= (1<<option++);
|
keys |= (1<<option++);
|
||||||
if (m_AutoColors)
|
|
||||||
{
|
|
||||||
_snprintf(buffer,
|
_snprintf(buffer,
|
||||||
sizeof(buffer)-1,
|
sizeof(buffer)-1,
|
||||||
"%s%d. \\w%s\n",
|
m_AutoColors ? "\\r%d. \\w%s\n" : "%d. %s\n",
|
||||||
m_ItemColor.c_str(),
|
option,
|
||||||
option == 10 ? 0 : option,
|
m_OptNames[abs(MENU_BACK)].c_str()
|
||||||
m_OptNames[abs(MENU_BACK)].c_str());
|
);
|
||||||
} else {
|
|
||||||
_snprintf(buffer,
|
|
||||||
sizeof(buffer)-1,
|
|
||||||
"%d. %s\n",
|
|
||||||
option == 10 ? 0 : option,
|
|
||||||
m_OptNames[abs(MENU_BACK)].c_str());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
option++;
|
|
||||||
if (m_AutoColors)
|
|
||||||
{
|
|
||||||
_snprintf(buffer,
|
|
||||||
sizeof(buffer)-1,
|
|
||||||
"\\d%d. %s\n\\w",
|
|
||||||
option == 10 ? 0 : option,
|
|
||||||
m_OptNames[abs(MENU_BACK)].c_str());
|
|
||||||
} else {
|
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "#. %s\n", m_OptNames[abs(MENU_BACK)].c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_Text.append(buffer);
|
m_Text.append(buffer);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MENU_MORE:
|
||||||
|
{
|
||||||
if (flags & Display_Next)
|
if (flags & Display_Next)
|
||||||
{
|
{
|
||||||
keys |= (1<<option++);
|
keys |= (1<<option++);
|
||||||
if (m_AutoColors)
|
|
||||||
{
|
|
||||||
_snprintf(buffer,
|
_snprintf(buffer,
|
||||||
sizeof(buffer)-1,
|
sizeof(buffer)-1,
|
||||||
"%s%d. \\w%s\n",
|
m_AutoColors ? "\\r%d. \\w%s\n" : "%d. %s\n",
|
||||||
m_ItemColor.c_str(),
|
option,
|
||||||
option == 10 ? 0 : option,
|
m_OptNames[abs(MENU_MORE)].c_str()
|
||||||
m_OptNames[abs(MENU_MORE)].c_str());
|
);
|
||||||
} else {
|
|
||||||
_snprintf(buffer,
|
|
||||||
sizeof(buffer)-1,
|
|
||||||
"%d. %s\n",
|
|
||||||
option == 10 ? 0 : option,
|
|
||||||
m_OptNames[abs(MENU_MORE)].c_str());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
option++;
|
|
||||||
if (m_AutoColors)
|
|
||||||
{
|
|
||||||
_snprintf(buffer,
|
|
||||||
sizeof(buffer)-1,
|
|
||||||
"\\d%d. %s\n\\w",
|
|
||||||
option == 10 ? 0 : option,
|
|
||||||
m_OptNames[abs(MENU_MORE)].c_str());
|
|
||||||
} else {
|
|
||||||
_snprintf(buffer, sizeof(buffer)-1, "#. %s\n", m_OptNames[abs(MENU_MORE)].c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_Text.append(buffer);
|
m_Text.append(buffer);
|
||||||
} else {
|
|
||||||
/* Keep padding */
|
|
||||||
option += 2;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
if (!m_NeverExit)
|
}
|
||||||
|
case MENU_EXIT:
|
||||||
|
{
|
||||||
|
if (flags & Display_Exit)
|
||||||
{
|
{
|
||||||
keys |= (1<<option++);
|
keys |= (1<<option++);
|
||||||
if (m_AutoColors)
|
|
||||||
{
|
|
||||||
_snprintf(buffer,
|
_snprintf(buffer,
|
||||||
sizeof(buffer)-1,
|
sizeof(buffer)-1,
|
||||||
"%s%d. \\w%s\n",
|
m_AutoColors ? "\\r%d. \\w%s\n" : "%d. %s\n",
|
||||||
m_ItemColor.c_str(),
|
option,
|
||||||
option == 10 ? 0 : option,
|
m_OptNames[abs(MENU_EXIT)].c_str()
|
||||||
m_OptNames[abs(MENU_EXIT)].c_str());
|
);
|
||||||
} else {
|
|
||||||
_snprintf(buffer,
|
|
||||||
sizeof(buffer)-1,
|
|
||||||
"%d. %s\n",
|
|
||||||
option == 10 ? 0 : option,
|
|
||||||
m_OptNames[abs(MENU_EXIT)].c_str());
|
|
||||||
}
|
|
||||||
m_Text.append(buffer);
|
m_Text.append(buffer);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_Text.c_str();
|
return m_Text.c_str();
|
||||||
@ -593,21 +426,27 @@ static cell AMX_NATIVE_CALL menu_create(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu *pMenu = new Menu(title, amx, func);
|
int id = g_menucmds.registerMenuId(title, amx);
|
||||||
|
g_menucmds.registerMenuCmd(g_plugins.findPluginFast(amx), id, 1023, func);
|
||||||
|
|
||||||
|
Menu *pMenu = new Menu(title, id, 0);
|
||||||
|
|
||||||
|
pMenu->func = func;
|
||||||
|
|
||||||
if (g_MenuFreeStack.empty())
|
if (g_MenuFreeStack.empty())
|
||||||
{
|
{
|
||||||
g_NewMenus.push_back(pMenu);
|
g_NewMenus.push_back(pMenu);
|
||||||
pMenu->thisId = (int)g_NewMenus.size() - 1;
|
pMenu->thisId = (int)g_NewMenus.size() - 1;
|
||||||
|
return (int)g_NewMenus.size() - 1;
|
||||||
} else {
|
} else {
|
||||||
int pos = g_MenuFreeStack.front();
|
int pos = g_MenuFreeStack.front();
|
||||||
g_MenuFreeStack.pop();
|
g_MenuFreeStack.pop();
|
||||||
g_NewMenus[pos] = pMenu;
|
g_NewMenus[pos] = pMenu;
|
||||||
pMenu->thisId = pos;
|
pMenu->thisId = pos;
|
||||||
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pMenu->thisId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL menu_addblank(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL menu_addblank(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
GETMENU(params[1]);
|
GETMENU(params[1]);
|
||||||
@ -625,51 +464,7 @@ static cell AMX_NATIVE_CALL menu_addblank(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
menuitem *item = pMenu->m_Items[pMenu->m_Items.size() - 1];
|
menuitem *item = pMenu->m_Items[pMenu->m_Items.size() - 1];
|
||||||
|
item->blanks.push_back(params[2]);
|
||||||
BlankItem a;
|
|
||||||
|
|
||||||
a.SetBlank();
|
|
||||||
|
|
||||||
if (params[2] == 1)
|
|
||||||
a.SetEatNumber(true);
|
|
||||||
|
|
||||||
else
|
|
||||||
a.SetEatNumber(false);
|
|
||||||
|
|
||||||
item->blanks.push_back(a);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
static cell AMX_NATIVE_CALL menu_addtext(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
GETMENU(params[1]);
|
|
||||||
|
|
||||||
if (params[2] && (!pMenu->items_per_page && pMenu->GetItemCount() >= 10))
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Non-paginated menus are limited to 10 items.");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pMenu->m_Items.size())
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Blanks can only be added after items.");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
menuitem *item = pMenu->m_Items[pMenu->m_Items.size() - 1];
|
|
||||||
|
|
||||||
BlankItem a;
|
|
||||||
|
|
||||||
int len;
|
|
||||||
a.SetText(get_amxstring(amx, params[2], 0, len));
|
|
||||||
|
|
||||||
if (params[3] == 1)
|
|
||||||
a.SetEatNumber(true);
|
|
||||||
|
|
||||||
else
|
|
||||||
a.SetEatNumber(false);
|
|
||||||
|
|
||||||
item->blanks.push_back(a);
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -729,36 +524,6 @@ static cell AMX_NATIVE_CALL menu_display(AMX *amx, cell *params)
|
|||||||
int page = params[3];
|
int page = params[3];
|
||||||
CPlayer* pPlayer = GET_PLAYER_POINTER_I(player);
|
CPlayer* pPlayer = GET_PLAYER_POINTER_I(player);
|
||||||
|
|
||||||
/* If the stupid handler keeps drawing menus,
|
|
||||||
* We need to keep cancelling them. But we put in a quick infinite loop
|
|
||||||
* counter to prevent this from going nuts.
|
|
||||||
*/
|
|
||||||
int menu;
|
|
||||||
int loops = 0;
|
|
||||||
while ((menu = pPlayer->newmenu) >= 0)
|
|
||||||
{
|
|
||||||
if ((size_t)menu >= g_NewMenus.size() || !g_NewMenus[menu])
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Menu *pOther = g_NewMenus[menu];
|
|
||||||
|
|
||||||
pPlayer->newmenu = -1;
|
|
||||||
pPlayer->menu = 0;
|
|
||||||
executeForwards(pOther->func,
|
|
||||||
static_cast<cell>(player),
|
|
||||||
static_cast<cell>(pOther->thisId),
|
|
||||||
static_cast<cell>(MENU_EXIT));
|
|
||||||
|
|
||||||
/* Infinite loop counter */
|
|
||||||
if (++loops >= 10)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Plugin called menu_display when item=MENU_EXIT");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This will set the expire time of the menu to infinite
|
// This will set the expire time of the menu to infinite
|
||||||
pPlayer->menuexpire = INFINITE;
|
pPlayer->menuexpire = INFINITE;
|
||||||
|
|
||||||
@ -887,13 +652,6 @@ static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
|
|||||||
|
|
||||||
switch (params[2])
|
switch (params[2])
|
||||||
{
|
{
|
||||||
case MPROP_SET_NUMBER_COLOR:
|
|
||||||
{
|
|
||||||
char *str = get_amxstring(amx, params[3], 0, len);
|
|
||||||
validate_menu_text(str);
|
|
||||||
pMenu->m_ItemColor.assign(str);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MPROP_PERPAGE:
|
case MPROP_PERPAGE:
|
||||||
{
|
{
|
||||||
cell count = *get_amxaddr(amx, params[3]);
|
cell count = *get_amxaddr(amx, params[3]);
|
||||||
@ -929,23 +687,51 @@ static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
|
|||||||
case MPROP_TITLE:
|
case MPROP_TITLE:
|
||||||
{
|
{
|
||||||
char *str = get_amxstring(amx, params[3], 0, len);
|
char *str = get_amxstring(amx, params[3], 0, len);
|
||||||
|
int old = pMenu->menuId;
|
||||||
|
g_menucmds.removeMenuId(old);
|
||||||
pMenu->m_Title.assign(str);
|
pMenu->m_Title.assign(str);
|
||||||
|
pMenu->menuId = g_menucmds.registerMenuId(str, amx);
|
||||||
|
g_menucmds.registerMenuCmd(
|
||||||
|
g_plugins.findPluginFast(amx),
|
||||||
|
pMenu->menuId,
|
||||||
|
1023,
|
||||||
|
pMenu->func);
|
||||||
|
CPlayer *pl;
|
||||||
|
/**
|
||||||
|
* NOTE - this is actually bogus
|
||||||
|
* the client's screen won't actually match the cmd here
|
||||||
|
* I think, this scenario needs to be tested.
|
||||||
|
*/
|
||||||
|
for (int i=1; i<=gpGlobals->maxClients; i++)
|
||||||
|
{
|
||||||
|
pl = GET_PLAYER_POINTER_I(i);
|
||||||
|
if (pl->menu == old)
|
||||||
|
pl->menu = pMenu->menuId;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MPROP_EXITALL:
|
case MPROP_EXITALL:
|
||||||
{
|
{
|
||||||
cell ans = *get_amxaddr(amx, params[3]);
|
cell ans = *get_amxaddr(amx, params[3]);
|
||||||
if (ans == 1 || ans == 0)
|
if (ans == 1)
|
||||||
{
|
{
|
||||||
|
pMenu->m_AlwaysExit = true;
|
||||||
|
pMenu->m_NeverExit = false;
|
||||||
|
} else if (ans == 0) {
|
||||||
|
pMenu->m_AlwaysExit = false;
|
||||||
pMenu->m_NeverExit = false;
|
pMenu->m_NeverExit = false;
|
||||||
} else if (ans == -1) {
|
} else if (ans == -1) {
|
||||||
pMenu->m_NeverExit = true;
|
pMenu->m_NeverExit = true;
|
||||||
|
pMenu->m_AlwaysExit = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MPROP_ORDER:
|
case MPROP_ORDER:
|
||||||
{
|
{
|
||||||
/* Ignored as of 1.8.0 */
|
cell *addr = get_amxaddr(amx, params[3]);
|
||||||
|
pMenu->m_OptOrders[0] = addr[0];
|
||||||
|
pMenu->m_OptOrders[1] = addr[1];
|
||||||
|
pMenu->m_OptOrders[2] = addr[2];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MPROP_NOCOLORS:
|
case MPROP_NOCOLORS:
|
||||||
@ -955,7 +741,7 @@ static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
case MPROP_PADMENU:
|
case MPROP_PADMENU:
|
||||||
{
|
{
|
||||||
/* Ignored as of 1.8.0 */
|
pMenu->padding = *get_amxaddr(amx, params[3]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -1011,12 +797,10 @@ static cell AMX_NATIVE_CALL menu_destroy(AMX *amx, cell *params)
|
|||||||
GETMENU_R(params[1]);
|
GETMENU_R(params[1]);
|
||||||
|
|
||||||
if (pMenu->isDestroying)
|
if (pMenu->isDestroying)
|
||||||
{
|
|
||||||
return 0; //prevent infinite recursion
|
return 0; //prevent infinite recursion
|
||||||
}
|
|
||||||
|
|
||||||
pMenu->isDestroying = true;
|
pMenu->isDestroying = true;
|
||||||
|
g_menucmds.removeMenuId(pMenu->menuId);
|
||||||
CPlayer *player;
|
CPlayer *player;
|
||||||
for (int i=1; i<=gpGlobals->maxClients; i++)
|
for (int i=1; i<=gpGlobals->maxClients; i++)
|
||||||
{
|
{
|
||||||
@ -1059,16 +843,8 @@ static cell AMX_NATIVE_CALL player_menu_info(AMX *amx, cell *params)
|
|||||||
*m = player->menu;
|
*m = player->menu;
|
||||||
*n = player->newmenu;
|
*n = player->newmenu;
|
||||||
|
|
||||||
if (params[0] / sizeof(cell) == 4)
|
|
||||||
{
|
|
||||||
cell *addr = get_amxaddr(amx, params[4]);
|
|
||||||
*addr = player->page;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (*m != 0 && *m != -1) || (*n != -1))
|
if ( (*m != 0 && *m != -1) || (*n != -1))
|
||||||
{
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1078,7 +854,6 @@ AMX_NATIVE_INFO g_NewMenuNatives[] =
|
|||||||
{"menu_create", menu_create},
|
{"menu_create", menu_create},
|
||||||
{"menu_additem", menu_additem},
|
{"menu_additem", menu_additem},
|
||||||
{"menu_addblank", menu_addblank},
|
{"menu_addblank", menu_addblank},
|
||||||
{"menu_addtext", menu_addtext},
|
|
||||||
{"menu_pages", menu_pages},
|
{"menu_pages", menu_pages},
|
||||||
{"menu_items", menu_items},
|
{"menu_items", menu_items},
|
||||||
{"menu_display", menu_display},
|
{"menu_display", menu_display},
|
||||||
|
@ -39,7 +39,6 @@
|
|||||||
#define ITEM_ENABLED 1
|
#define ITEM_ENABLED 1
|
||||||
#define ITEM_DISABLED 2
|
#define ITEM_DISABLED 2
|
||||||
|
|
||||||
#define MAX_MENU_ITEMS 10
|
|
||||||
|
|
||||||
#define MPROP_PERPAGE 1
|
#define MPROP_PERPAGE 1
|
||||||
#define MPROP_BACKNAME 2
|
#define MPROP_BACKNAME 2
|
||||||
@ -50,50 +49,9 @@
|
|||||||
#define MPROP_ORDER 7
|
#define MPROP_ORDER 7
|
||||||
#define MPROP_NOCOLORS 8
|
#define MPROP_NOCOLORS 8
|
||||||
#define MPROP_PADMENU 9
|
#define MPROP_PADMENU 9
|
||||||
#define MPROP_SET_NUMBER_COLOR 10
|
|
||||||
|
|
||||||
typedef int (*MENUITEM_CALLBACK)(int, int, int);
|
typedef int (*MENUITEM_CALLBACK)(int, int, int);
|
||||||
|
|
||||||
class BlankItem
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
char *m_text;
|
|
||||||
bool m_num;
|
|
||||||
public:
|
|
||||||
BlankItem() : m_text(NULL), m_num(false) { }
|
|
||||||
BlankItem(BlankItem &src) { this->copyFrom(src); }
|
|
||||||
~BlankItem() { free(m_text); }
|
|
||||||
|
|
||||||
void copyFrom(BlankItem &src)
|
|
||||||
{
|
|
||||||
m_text = src.m_text;
|
|
||||||
m_num = src.m_num;
|
|
||||||
src.m_text = NULL; // stop the src from freeing the buffer
|
|
||||||
}
|
|
||||||
BlankItem &operator = (const BlankItem &src) { this->copyFrom(const_cast<BlankItem&>(src)); return *this; }
|
|
||||||
|
|
||||||
/* is this text instead of a blank */
|
|
||||||
bool IsText() { return m_text != NULL; }
|
|
||||||
|
|
||||||
/* is this a blank instead of text */
|
|
||||||
bool IsBlank() { return m_text == NULL; }
|
|
||||||
|
|
||||||
/* does this item take up a number */
|
|
||||||
bool EatNumber() { return m_num; }
|
|
||||||
|
|
||||||
/* the text this item is to display */
|
|
||||||
const char *GetDisplay() { return m_text == NULL ? "" : m_text; }
|
|
||||||
|
|
||||||
/* sets this item to use a blank */
|
|
||||||
void SetBlank() { free(m_text); m_text = NULL; }
|
|
||||||
|
|
||||||
/* sets this item to display text */
|
|
||||||
void SetText(const char *text) { free(m_text); m_text = strdup(text); }
|
|
||||||
|
|
||||||
/* sets whether or not this item takes up a line */
|
|
||||||
void SetEatNumber(bool val) { m_num = val; }
|
|
||||||
|
|
||||||
};
|
|
||||||
struct menuitem
|
struct menuitem
|
||||||
{
|
{
|
||||||
String name;
|
String name;
|
||||||
@ -105,7 +63,7 @@ struct menuitem
|
|||||||
MENUITEM_CALLBACK pfn;
|
MENUITEM_CALLBACK pfn;
|
||||||
size_t id;
|
size_t id;
|
||||||
|
|
||||||
CVector<BlankItem> blanks;
|
CVector<int> blanks;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef unsigned int menu_t;
|
typedef unsigned int menu_t;
|
||||||
@ -115,7 +73,7 @@ typedef unsigned int page_t;
|
|||||||
class Menu
|
class Menu
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Menu(const char *title, AMX *amx, int fid);
|
Menu(const char *title, int menuId, int thisId);
|
||||||
~Menu();
|
~Menu();
|
||||||
|
|
||||||
menuitem *GetMenuItem(item_t item);
|
menuitem *GetMenuItem(item_t item);
|
||||||
@ -134,14 +92,16 @@ public:
|
|||||||
String m_Text;
|
String m_Text;
|
||||||
|
|
||||||
String m_OptNames[4];
|
String m_OptNames[4];
|
||||||
|
int m_OptOrders[3];
|
||||||
|
|
||||||
String m_ItemColor;
|
bool m_AlwaysExit;
|
||||||
bool m_NeverExit;
|
bool m_NeverExit;
|
||||||
bool m_AutoColors;
|
bool m_AutoColors;
|
||||||
|
|
||||||
int menuId;
|
int menuId;
|
||||||
int thisId;
|
int thisId;
|
||||||
int func;
|
int func;
|
||||||
|
int padding;
|
||||||
bool isDestroying;
|
bool isDestroying;
|
||||||
public:
|
public:
|
||||||
unsigned int items_per_page;
|
unsigned int items_per_page;
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
#include <string.h>
|
|
||||||
#include "nongpl_matches.h"
|
|
||||||
|
|
||||||
NONGPL_PLUGIN_T NONGPL_PLUGIN_LIST[] =
|
|
||||||
{
|
|
||||||
{"Live", "CZ Gun Game", "czgungame.amxx"},
|
|
||||||
{"Live", "AMXX 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},
|
|
||||||
};
|
|
@ -1,51 +0,0 @@
|
|||||||
/* 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_
|
|
@ -39,10 +39,6 @@
|
|||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined __APPLE__
|
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Linux NOW has these */
|
/* Linux NOW has these */
|
||||||
#if !defined BIG_ENDIAN
|
#if !defined BIG_ENDIAN
|
||||||
#define BIG_ENDIAN 4321
|
#define BIG_ENDIAN 4321
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
#define stricmp(a,b) strcasecmp(a,b)
|
#define stricmp(a,b) strcasecmp(a,b)
|
||||||
#define strnicmp(a,b,c) strncasecmp(a,b,c)
|
#define strnicmp(a,b,c) strncasecmp(a,b,c)
|
||||||
|
|
||||||
#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _snprintf
|
#if defined __linux__ && !defined _snprintf
|
||||||
#define _snprintf snprintf
|
#define _snprintf snprintf
|
||||||
#endif
|
#endif
|
||||||
#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _vsnprintf
|
#if defined __linux__ && !defined _vsnprintf
|
||||||
//#define _vsnprintf vsnprintf
|
//#define _vsnprintf vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -40,10 +40,6 @@
|
|||||||
*/
|
*/
|
||||||
#if !defined __BYTE_ORDER
|
#if !defined __BYTE_ORDER
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
# if defined __APPLE__
|
|
||||||
# include <sys/types.h>
|
|
||||||
# define __BYTE_ORDER BYTE_ORDER
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined __OpenBSD__
|
#if defined __OpenBSD__
|
||||||
|
@ -2240,7 +2240,7 @@ static META_FUNCTIONS g_MetaFunctions_Table =
|
|||||||
GetEngineFunctions_Post
|
GetEngineFunctions_Post
|
||||||
};
|
};
|
||||||
|
|
||||||
C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_t *pMetaUtilFuncs)
|
||||||
{
|
{
|
||||||
if ((int) CVAR_GET_FLOAT("developer") != 0)
|
if ((int) CVAR_GET_FLOAT("developer") != 0)
|
||||||
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
|
UTIL_LogPrintf("[%s] dev: called: Meta_Query; version=%s, ours=%s\n",
|
||||||
@ -2284,7 +2284,7 @@ C_DLLEXPORT int Meta_Query(const char *ifvers, plugin_info_t **pPlugInfo, mutil_
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FN_META_QUERY
|
#ifdef FN_META_QUERY
|
||||||
FN_META_QUERY();
|
return FN_META_QUERY();
|
||||||
#endif // FN_META_QUERY
|
#endif // FN_META_QUERY
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -2327,14 +2327,14 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FN_META_DETACH
|
#ifdef FN_META_DETACH
|
||||||
FN_META_DETACH();
|
return FN_META_DETACH();
|
||||||
#endif // FN_META_DETACH
|
#endif // FN_META_DETACH
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
// linux prototype
|
// linux prototype
|
||||||
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
|
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {
|
||||||
|
|
||||||
@ -2374,7 +2374,7 @@ C_DLLEXPORT void __stdcall GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine,
|
|||||||
gpGlobals = pGlobals;
|
gpGlobals = pGlobals;
|
||||||
// NOTE! Have to call logging function _after_ copying into g_engfuncs, so
|
// NOTE! Have to call logging function _after_ copying into g_engfuncs, so
|
||||||
// that g_engfuncs.pfnAlertMessage() can be resolved properly, heh. :)
|
// that g_engfuncs.pfnAlertMessage() can be resolved properly, heh. :)
|
||||||
// UTIL_LogPrintf("[%s] dev: called: GiveFnptrsToDll\n", Plugin_info.logtag);
|
UTIL_LogPrintf("[%s] dev: called: GiveFnptrsToDll\n", Plugin_info.logtag);
|
||||||
// --> ** Function core
|
// --> ** Function core
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
@ -2548,14 +2548,6 @@ C_DLLEXPORT int AMXX_Query(int *interfaceVersion, amxx_module_info_s *moduleInfo
|
|||||||
// request optional function
|
// request optional function
|
||||||
#define REQFUNC_OPT(name, fptr, type) fptr = (type)reqFnptrFunc(name)
|
#define REQFUNC_OPT(name, fptr, type) fptr = (type)reqFnptrFunc(name)
|
||||||
|
|
||||||
C_DLLEXPORT int AMXX_CheckGame(const char *game)
|
|
||||||
{
|
|
||||||
#ifdef FN_AMXX_CHECKGAME
|
|
||||||
return FN_AMXX_CHECKGAME(game);
|
|
||||||
#else
|
|
||||||
return AMXX_GAME_OK;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
|
C_DLLEXPORT int AMXX_Attach(PFN_REQ_FNPTR reqFnptrFunc)
|
||||||
{
|
{
|
||||||
// Check pointer
|
// Check pointer
|
||||||
@ -3050,7 +3042,7 @@ char* UTIL_VarArgs( char *format, ... )
|
|||||||
// UTIL_LogPrintf - Prints a logged message to console.
|
// UTIL_LogPrintf - Prints a logged message to console.
|
||||||
// Preceded by LOG: ( timestamp ) < message >
|
// Preceded by LOG: ( timestamp ) < message >
|
||||||
//=========================================================
|
//=========================================================
|
||||||
void UTIL_LogPrintf( const char *fmt, ... )
|
void UTIL_LogPrintf( char *fmt, ... )
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
static char string[1024];
|
static char string[1024];
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
// config
|
// config
|
||||||
#include "moduleconfig.h"
|
#include "moduleconfig.h"
|
||||||
|
|
||||||
#include <stddef.h> // size_t
|
|
||||||
// metamod include files
|
// metamod include files
|
||||||
#ifdef USE_METAMOD
|
#ifdef USE_METAMOD
|
||||||
#include <extdll.h>
|
#include <extdll.h>
|
||||||
@ -20,16 +19,11 @@
|
|||||||
|
|
||||||
// DLL Export
|
// DLL Export
|
||||||
#undef DLLEXPORT
|
#undef DLLEXPORT
|
||||||
#if defined(_WIN32)
|
#ifndef __linux__
|
||||||
#define DLLEXPORT __declspec(dllexport)
|
#define DLLEXPORT __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define DLLEXPORT __attribute__((visibility("default")))
|
#define DLLEXPORT __attribute__((visibility("default")))
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__linux__) && !defined(LINUX)
|
|
||||||
#define LINUX
|
#define LINUX
|
||||||
#elif defined(__APPLE__) && !defined(OSX)
|
|
||||||
#define OSX
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef C_DLLEXPORT
|
#undef C_DLLEXPORT
|
||||||
@ -61,9 +55,6 @@ struct amxx_module_info_s
|
|||||||
#define AMXX_PARAM 2 /* Invalid parameter */
|
#define AMXX_PARAM 2 /* Invalid parameter */
|
||||||
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
#define AMXX_FUNC_NOT_PRESENT 3 /* Function not present */
|
||||||
|
|
||||||
#define AMXX_GAME_OK 0 /* This module can load on the current game mod. */
|
|
||||||
#define AMXX_GAME_BAD 1 /* This module can not load on the current game mod. */
|
|
||||||
|
|
||||||
// *** Small stuff ***
|
// *** Small stuff ***
|
||||||
// The next section is copied from the amx.h file
|
// The next section is copied from the amx.h file
|
||||||
// Copyright (c) ITB CompuPhase, 1997-2005
|
// Copyright (c) ITB CompuPhase, 1997-2005
|
||||||
@ -71,7 +62,7 @@ struct amxx_module_info_s
|
|||||||
#if defined HAVE_STDINT_H
|
#if defined HAVE_STDINT_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#else
|
#else
|
||||||
#if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
|
#if defined __LCC__ || defined __DMC__ || defined LINUX
|
||||||
#if defined HAVE_INTTYPES_H
|
#if defined HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#else
|
#else
|
||||||
@ -313,7 +304,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -400,7 +391,7 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#if defined __linux__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#else
|
#else
|
||||||
#pragma pack(pop) /* reset previous packing */
|
#pragma pack(pop) /* reset previous packing */
|
||||||
@ -411,7 +402,7 @@ enum {
|
|||||||
// ***** declare functions *****
|
// ***** declare functions *****
|
||||||
|
|
||||||
#ifdef USE_METAMOD
|
#ifdef USE_METAMOD
|
||||||
void UTIL_LogPrintf( const char *fmt, ... );
|
void UTIL_LogPrintf( char *fmt, ... );
|
||||||
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
|
void UTIL_HudMessage(CBaseEntity *pEntity, const hudtextparms_t &textparms, const char *pMessage);
|
||||||
short FixedSigned16( float value, float scale );
|
short FixedSigned16( float value, float scale );
|
||||||
unsigned short FixedUnsigned16( float value, float scale );
|
unsigned short FixedUnsigned16( float value, float scale );
|
||||||
@ -838,11 +829,11 @@ int FN_AllowLagCompensation_Post(void);
|
|||||||
|
|
||||||
|
|
||||||
#ifdef FN_PrecacheModel
|
#ifdef FN_PrecacheModel
|
||||||
int FN_PrecacheModel(const char *s);
|
int FN_PrecacheModel(char *s);
|
||||||
#endif // FN_PrecacheModel
|
#endif // FN_PrecacheModel
|
||||||
|
|
||||||
#ifdef FN_PrecacheSound
|
#ifdef FN_PrecacheSound
|
||||||
int FN_PrecacheSound(const char *s);
|
int FN_PrecacheSound(char *s);
|
||||||
#endif // FN_PrecacheSound
|
#endif // FN_PrecacheSound
|
||||||
|
|
||||||
#ifdef FN_SetModel
|
#ifdef FN_SetModel
|
||||||
@ -862,7 +853,7 @@ void FN_SetSize(edict_t *e, const float *rgflMin, const float *rgflMax);
|
|||||||
#endif // FN_SetSize
|
#endif // FN_SetSize
|
||||||
|
|
||||||
#ifdef FN_ChangeLevel
|
#ifdef FN_ChangeLevel
|
||||||
void FN_ChangeLevel(const char *s1, const char *s2);
|
void FN_ChangeLevel(char *s1, char *s2);
|
||||||
#endif // FN_ChangeLevel
|
#endif // FN_ChangeLevel
|
||||||
|
|
||||||
#ifdef FN_GetSpawnParms
|
#ifdef FN_GetSpawnParms
|
||||||
@ -1086,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(void *pfile, char *szFmt, ...);
|
void FN_EngineFprintf(FILE *pfile, char *szFmt, ...);
|
||||||
#endif // FN_EngineFprintf
|
#endif // FN_EngineFprintf
|
||||||
|
|
||||||
#ifdef FN_PvAllocEntPrivateData
|
#ifdef FN_PvAllocEntPrivateData
|
||||||
@ -1150,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
|
||||||
uint32 FN_FunctionFromName(const char *pName);
|
unsigned long FN_FunctionFromName(const char *pName);
|
||||||
#endif // FN_FunctionFromName
|
#endif // FN_FunctionFromName
|
||||||
|
|
||||||
#ifdef FN_NameForFunction
|
#ifdef FN_NameForFunction
|
||||||
const char *FN_NameForFunction(uint32);
|
const char *FN_NameForFunction(unsigned long function);
|
||||||
#endif // FN_NameForFunction
|
#endif // FN_NameForFunction
|
||||||
|
|
||||||
#ifdef FN_ClientPrintf
|
#ifdef FN_ClientPrintf
|
||||||
@ -1198,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
|
||||||
int32 FN_RandomLong(int32 lLow, int32 lHigh);
|
long FN_RandomLong(long lLow, long lHigh);
|
||||||
#endif // FN_RandomLong
|
#endif // FN_RandomLong
|
||||||
|
|
||||||
#ifdef FN_RandomFloat
|
#ifdef FN_RandomFloat
|
||||||
@ -1266,19 +1257,19 @@ char *FN_GetInfoKeyBuffer(edict_t *e);
|
|||||||
#endif // FN_GetInfoKeyBuffer
|
#endif // FN_GetInfoKeyBuffer
|
||||||
|
|
||||||
#ifdef FN_InfoKeyValue
|
#ifdef FN_InfoKeyValue
|
||||||
char *FN_InfoKeyValue(char *infobuffer, const char *key);
|
char *FN_InfoKeyValue(char *infobuffer, char *key);
|
||||||
#endif // FN_InfoKeyValue
|
#endif // FN_InfoKeyValue
|
||||||
|
|
||||||
#ifdef FN_SetKeyValue
|
#ifdef FN_SetKeyValue
|
||||||
void FN_SetKeyValue(char *infobuffer, const char *key, const char *value);
|
void FN_SetKeyValue(char *infobuffer, char *key, char *value);
|
||||||
#endif // FN_SetKeyValue
|
#endif // FN_SetKeyValue
|
||||||
|
|
||||||
#ifdef FN_SetClientKeyValue
|
#ifdef FN_SetClientKeyValue
|
||||||
void FN_SetClientKeyValue(int clientIndex, char *infobuffer, const char *key, const char *value);
|
void FN_SetClientKeyValue(int clientIndex, char *infobuffer, char *key, char *value);
|
||||||
#endif // FN_SetClientKeyValue
|
#endif // FN_SetClientKeyValue
|
||||||
|
|
||||||
#ifdef FN_IsMapValid
|
#ifdef FN_IsMapValid
|
||||||
int FN_IsMapValid(const char *filename);
|
int FN_IsMapValid(char *filename);
|
||||||
#endif // FN_IsMapValid
|
#endif // FN_IsMapValid
|
||||||
|
|
||||||
#ifdef FN_StaticDecal
|
#ifdef FN_StaticDecal
|
||||||
@ -1286,7 +1277,7 @@ void FN_StaticDecal(const float *origin, int decalIndex, int entityIndex, int mo
|
|||||||
#endif // FN_StaticDecal
|
#endif // FN_StaticDecal
|
||||||
|
|
||||||
#ifdef FN_PrecacheGeneric
|
#ifdef FN_PrecacheGeneric
|
||||||
int FN_PrecacheGeneric(const char *s);
|
int FN_PrecacheGeneric(char *s);
|
||||||
#endif // FN_PrecacheGeneric
|
#endif // FN_PrecacheGeneric
|
||||||
|
|
||||||
#ifdef FN_GetPlayerUserId
|
#ifdef FN_GetPlayerUserId
|
||||||
@ -1419,11 +1410,11 @@ const char *FN_GetPlayerAuthId(edict_t *e);
|
|||||||
|
|
||||||
|
|
||||||
#ifdef FN_PrecacheModel_Post
|
#ifdef FN_PrecacheModel_Post
|
||||||
int FN_PrecacheModel_Post(const char *s);
|
int FN_PrecacheModel_Post(char *s);
|
||||||
#endif // FN_PrecacheModel_Post
|
#endif // FN_PrecacheModel_Post
|
||||||
|
|
||||||
#ifdef FN_PrecacheSound_Post
|
#ifdef FN_PrecacheSound_Post
|
||||||
int FN_PrecacheSound_Post(const char *s);
|
int FN_PrecacheSound_Post(char *s);
|
||||||
#endif // FN_PrecacheSound_Post
|
#endif // FN_PrecacheSound_Post
|
||||||
|
|
||||||
#ifdef FN_SetModel_Post
|
#ifdef FN_SetModel_Post
|
||||||
@ -1443,7 +1434,7 @@ void FN_SetSize_Post(edict_t *e, const float *rgflMin, const float *rgflMax);
|
|||||||
#endif // FN_SetSize_Post
|
#endif // FN_SetSize_Post
|
||||||
|
|
||||||
#ifdef FN_ChangeLevel_Post
|
#ifdef FN_ChangeLevel_Post
|
||||||
void FN_ChangeLevel_Post(const char *s1, const char *s2);
|
void FN_ChangeLevel_Post(char *s1, char *s2);
|
||||||
#endif // FN_ChangeLevel_Post
|
#endif // FN_ChangeLevel_Post
|
||||||
|
|
||||||
#ifdef FN_GetSpawnParms_Post
|
#ifdef FN_GetSpawnParms_Post
|
||||||
@ -1667,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(void *pfile, char *szFmt, ...);
|
void FN_EngineFprintf_Post(FILE *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, int32 cb);
|
void *FN_PvAllocEntPrivateData_Post(edict_t *pEdict, long cb);
|
||||||
#endif // FN_PvAllocEntPrivateData_Post
|
#endif // FN_PvAllocEntPrivateData_Post
|
||||||
|
|
||||||
#ifdef FN_PvEntPrivateData_Post
|
#ifdef FN_PvEntPrivateData_Post
|
||||||
@ -1731,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
|
||||||
uint32 FN_FunctionFromName_Post(const char *pName);
|
unsigned long 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(uint32);
|
const char *FN_NameForFunction_Post(unsigned long function);
|
||||||
#endif // FN_NameForFunction_Post
|
#endif // FN_NameForFunction_Post
|
||||||
|
|
||||||
#ifdef FN_ClientPrintf_Post
|
#ifdef FN_ClientPrintf_Post
|
||||||
@ -1779,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
|
||||||
int32 FN_RandomLong_Post(int32 lLow, int32 lHigh);
|
long FN_RandomLong_Post(long lLow, long lHigh);
|
||||||
#endif // FN_RandomLong_Post
|
#endif // FN_RandomLong_Post
|
||||||
|
|
||||||
#ifdef FN_RandomFloat_Post
|
#ifdef FN_RandomFloat_Post
|
||||||
@ -1847,19 +1838,19 @@ char *FN_GetInfoKeyBuffer_Post(edict_t *e);
|
|||||||
#endif // FN_GetInfoKeyBuffer_Post
|
#endif // FN_GetInfoKeyBuffer_Post
|
||||||
|
|
||||||
#ifdef FN_InfoKeyValue_Post
|
#ifdef FN_InfoKeyValue_Post
|
||||||
char *FN_InfoKeyValue_Post(char *infobuffer, const char *key);
|
char *FN_InfoKeyValue_Post(char *infobuffer, char *key);
|
||||||
#endif // FN_InfoKeyValue_Post
|
#endif // FN_InfoKeyValue_Post
|
||||||
|
|
||||||
#ifdef FN_SetKeyValue_Post
|
#ifdef FN_SetKeyValue_Post
|
||||||
void FN_SetKeyValue_Post(char *infobuffer, const char *key, const char *value);
|
void FN_SetKeyValue_Post(char *infobuffer, char *key, char *value);
|
||||||
#endif // FN_SetKeyValue_Post
|
#endif // FN_SetKeyValue_Post
|
||||||
|
|
||||||
#ifdef FN_SetClientKeyValue_Post
|
#ifdef FN_SetClientKeyValue_Post
|
||||||
void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, const char *key, const char *value);
|
void FN_SetClientKeyValue_Post(int clientIndex, char *infobuffer, char *key, char *value);
|
||||||
#endif // FN_SetClientKeyValue_Post
|
#endif // FN_SetClientKeyValue_Post
|
||||||
|
|
||||||
#ifdef FN_IsMapValid_Post
|
#ifdef FN_IsMapValid_Post
|
||||||
int FN_IsMapValid_Post(const char *filename);
|
int FN_IsMapValid_Post(char *filename);
|
||||||
#endif // FN_IsMapValid_Post
|
#endif // FN_IsMapValid_Post
|
||||||
|
|
||||||
#ifdef FN_StaticDecal_Post
|
#ifdef FN_StaticDecal_Post
|
||||||
@ -1867,7 +1858,7 @@ void FN_StaticDecal_Post(const float *origin, int decalIndex, int entityIndex, i
|
|||||||
#endif // FN_StaticDecal_Post
|
#endif // FN_StaticDecal_Post
|
||||||
|
|
||||||
#ifdef FN_PrecacheGeneric_Post
|
#ifdef FN_PrecacheGeneric_Post
|
||||||
int FN_PrecacheGeneric_Post(const char *s);
|
int FN_PrecacheGeneric_Post(char *s);
|
||||||
#endif // FN_PrecacheGeneric_Post
|
#endif // FN_PrecacheGeneric_Post
|
||||||
|
|
||||||
#ifdef FN_GetPlayerUserId_Post
|
#ifdef FN_GetPlayerUserId_Post
|
||||||
@ -2032,10 +2023,6 @@ int FN_ShouldCollide_Post(edict_t *pentTouched, edict_t *pentOther);
|
|||||||
void FN_AMXX_QUERY(void);
|
void FN_AMXX_QUERY(void);
|
||||||
#endif // FN_AMXX_QUERY
|
#endif // FN_AMXX_QUERY
|
||||||
|
|
||||||
#ifdef FN_AMXX_CHECKGAME
|
|
||||||
int FN_AMXX_CHECKGAME(const char *);
|
|
||||||
#endif // FN_AMXX_CHECKGAME
|
|
||||||
|
|
||||||
#ifdef FN_AMXX_ATTACH
|
#ifdef FN_AMXX_ATTACH
|
||||||
void FN_AMXX_ATTACH(void);
|
void FN_AMXX_ATTACH(void);
|
||||||
#endif // FN_AMXX_ATTACH
|
#endif // FN_AMXX_ATTACH
|
||||||
@ -2121,7 +2108,7 @@ typedef int (*PFN_ADD_NEW_NATIVES) (const AMX_NATIVE_INFO * /*list*/);
|
|||||||
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
|
typedef char * (*PFN_BUILD_PATHNAME) (const char * /*format*/, ...);
|
||||||
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
|
typedef char * (*PFN_BUILD_PATHNAME_R) (char * /*buffer*/, size_t /* maxlen */, const char * /* format */, ...);
|
||||||
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
|
typedef cell * (*PFN_GET_AMXADDR) (AMX * /*amx*/, cell /*offset*/);
|
||||||
typedef void (*PFN_PRINT_SRVCONSOLE) (const char * /*format*/, ...);
|
typedef void (*PFN_PRINT_SRVCONSOLE) (char * /*format*/, ...);
|
||||||
typedef const char * (*PFN_GET_MODNAME) (void);
|
typedef const char * (*PFN_GET_MODNAME) (void);
|
||||||
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
|
typedef const char * (*PFN_GET_AMXSCRIPTNAME) (int /*id*/);
|
||||||
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
|
typedef AMX * (*PFN_GET_AMXSCRIPT) (int /*id*/);
|
||||||
@ -2180,8 +2167,8 @@ typedef void (*PFN_DEALLOCATOR) (const char* /*filename*/, const unsigned i
|
|||||||
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
|
typedef int (*PFN_AMX_EXEC) (AMX* /*amx*/, cell* /*return val*/, int /*index*/);
|
||||||
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
|
typedef int (*PFN_AMX_EXECV) (AMX* /*amx*/, cell* /*return val*/, int /*index*/, int /*numparams*/, cell[] /*params*/);
|
||||||
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
|
typedef int (*PFN_AMX_ALLOT) (AMX* /*amx*/, int /*length*/, cell* /*amx_addr*/, cell** /*phys_addr*/);
|
||||||
typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
|
typedef int (*PFN_AMX_FINDPUBLIC) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
|
||||||
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, const char* /*func name*/, int* /*index*/);
|
typedef int (*PFN_AMX_FINDNATIVE) (AMX* /*amx*/, char* /*func name*/, int* /*index*/);
|
||||||
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
|
typedef int (*PFN_LOAD_AMXSCRIPT) (AMX* /*amx*/, void** /*code*/, const char* /*path*/, char[64] /*error info*/, int /* debug */);
|
||||||
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
|
typedef int (*PFN_UNLOAD_AMXSCRIPT) (AMX* /*amx*/,void** /*code*/);
|
||||||
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
|
typedef cell (*PFN_REAL_TO_CELL) (REAL /*x*/);
|
||||||
|
@ -54,12 +54,6 @@
|
|||||||
/** AMXX query */
|
/** AMXX query */
|
||||||
//#define FN_AMXX_QUERY OnAmxxQuery
|
//#define FN_AMXX_QUERY OnAmxxQuery
|
||||||
|
|
||||||
/** AMXX Check Game - module API is NOT available here.
|
|
||||||
* Return AMXX_GAME_OK if this module can load on the game, AMXX_GAME_BAD if it cannot.
|
|
||||||
* syntax: int AmxxCheckGame(const char *game)
|
|
||||||
*/
|
|
||||||
//#define FN_AMXX_CHECKGAME AmxxCheckGame
|
|
||||||
|
|
||||||
/** AMXX attach
|
/** AMXX attach
|
||||||
* Do native functions init here (MF_AddNatives)
|
* Do native functions init here (MF_AddNatives)
|
||||||
*/
|
*/
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <new>
|
#include <new>
|
||||||
#include <stdlib.h>
|
#include <malloc.h>
|
||||||
|
|
||||||
//namespace SourceHook
|
//namespace SourceHook
|
||||||
//{
|
//{
|
||||||
|
@ -54,12 +54,12 @@
|
|||||||
typedef List<THashNode *> * NodePtr;
|
typedef List<THashNode *> * NodePtr;
|
||||||
public:
|
public:
|
||||||
class const_iterator;
|
class const_iterator;
|
||||||
THash() : m_Buckets(NULL), m_numBuckets(0), m_percentUsed(0.0f)
|
THash() : m_Buckets(NULL), m_numBuckets(0), m_percentUsed(0.0f), m_items(0)
|
||||||
{
|
{
|
||||||
_Refactor();
|
_Refactor();
|
||||||
}
|
}
|
||||||
THash(const THash &other) : m_Buckets(new NodePtr[other.m_numBuckets]),
|
THash(const THash &other) : m_Buckets(new NodePtr[other.m_numBuckets]),
|
||||||
m_numBuckets(other.m_numBuckets), m_percentUsed(other.m_percentUsed)
|
m_numBuckets(other.m_numBuckets), m_percentUsed(other.m_percentUsed), m_items(0)
|
||||||
{
|
{
|
||||||
for (size_t i=0; i<m_numBuckets; i++)
|
for (size_t i=0; i<m_numBuckets; i++)
|
||||||
m_Buckets[i] = NULL;
|
m_Buckets[i] = NULL;
|
||||||
@ -82,6 +82,10 @@
|
|||||||
_Clear();
|
_Clear();
|
||||||
_Refactor();
|
_Refactor();
|
||||||
}
|
}
|
||||||
|
size_t size()
|
||||||
|
{
|
||||||
|
return m_items;
|
||||||
|
}
|
||||||
size_t GetBuckets()
|
size_t GetBuckets()
|
||||||
{
|
{
|
||||||
return m_numBuckets;
|
return m_numBuckets;
|
||||||
@ -118,6 +122,7 @@
|
|||||||
delete [] m_Buckets;
|
delete [] m_Buckets;
|
||||||
m_Buckets = NULL;
|
m_Buckets = NULL;
|
||||||
m_numBuckets = 0;
|
m_numBuckets = 0;
|
||||||
|
m_items = 0;
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
template <typename U>
|
template <typename U>
|
||||||
@ -224,6 +229,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
|
friend class iterator;
|
||||||
|
friend class const_iterator;
|
||||||
class iterator
|
class iterator
|
||||||
{
|
{
|
||||||
friend class THash;
|
friend class THash;
|
||||||
@ -297,6 +304,8 @@
|
|||||||
*this = tmp;
|
*this = tmp;
|
||||||
|
|
||||||
// :TODO: Maybe refactor to a lower size if required
|
// :TODO: Maybe refactor to a lower size if required
|
||||||
|
|
||||||
|
m_items--;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
void _Inc()
|
void _Inc()
|
||||||
@ -445,8 +454,6 @@
|
|||||||
const THash *hash;
|
const THash *hash;
|
||||||
bool end;
|
bool end;
|
||||||
};
|
};
|
||||||
friend class iterator;
|
|
||||||
friend class const_iterator;
|
|
||||||
public:
|
public:
|
||||||
iterator begin()
|
iterator begin()
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -265,7 +265,6 @@ static cell AMX_NATIVE_CALL SortCustom1D(AMX *amx, cell *params)
|
|||||||
qsort(array, array_size, sizeof(cell), sort1d_amx_custom);
|
qsort(array, array_size, sizeof(cell), sort1d_amx_custom);
|
||||||
g_AMXSortStack.pop();
|
g_AMXSortStack.pop();
|
||||||
|
|
||||||
unregisterSPForward(pfn);
|
|
||||||
delete pInfo;
|
delete pInfo;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
#include "svn_version.h"
|
|
||||||
|
|
||||||
void amx_command()
|
void amx_command()
|
||||||
{
|
{
|
||||||
@ -40,7 +39,7 @@ void amx_command()
|
|||||||
{
|
{
|
||||||
|
|
||||||
print_srvconsole("Currently loaded plugins:\n");
|
print_srvconsole("Currently loaded plugins:\n");
|
||||||
print_srvconsole(" %-23.22s %-11.10s %-17.16s %-16.15s %-9.8s\n", "name", "version", "author", "file", "status");
|
print_srvconsole(" %-23.22s %-8.7s %-17.16s %-16.15s %-9.8s\n", "name", "version", "author", "file", "status");
|
||||||
|
|
||||||
int plugins = 0;
|
int plugins = 0;
|
||||||
int running = 0;
|
int running = 0;
|
||||||
@ -53,7 +52,7 @@ void amx_command()
|
|||||||
if ((*a).isValid() && !(*a).isPaused())
|
if ((*a).isValid() && !(*a).isPaused())
|
||||||
++running;
|
++running;
|
||||||
|
|
||||||
print_srvconsole(" [%3d] %-23.22s %-11.10s %-17.16s %-16.15s %-9.8s\n", plugins, (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getName(), (*a).getStatus());
|
print_srvconsole(" [%3d] %-23.22s %-8.7s %-17.16s %-16.15s %-9.8s\n", plugins, (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getName(), (*a).getStatus());
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,29 +82,13 @@ void amx_command()
|
|||||||
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
|
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
|
||||||
|
|
||||||
if (plugin && plugin->isValid())
|
if (plugin && plugin->isValid())
|
||||||
{
|
|
||||||
if (plugin->isPaused())
|
|
||||||
{
|
|
||||||
if (plugin->isStopped())
|
|
||||||
{
|
|
||||||
print_srvconsole("Plugin \"%s\" is stopped and may not be paused.\n",plugin->getName());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print_srvconsole("Plugin \"%s\" is already paused.\n",plugin->getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
plugin->pausePlugin();
|
plugin->pausePlugin();
|
||||||
print_srvconsole("Paused plugin \"%s\"\n", plugin->getName());
|
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)
|
||||||
{
|
{
|
||||||
const char* sPlugin = CMD_ARGV(2);
|
const char* sPlugin = CMD_ARGV(2);
|
||||||
@ -113,22 +96,15 @@ void amx_command()
|
|||||||
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
|
CPluginMngr::CPlugin *plugin = g_plugins.findPlugin(sPlugin);
|
||||||
|
|
||||||
if (plugin && plugin->isValid() && plugin->isPaused())
|
if (plugin && plugin->isValid() && plugin->isPaused())
|
||||||
{
|
|
||||||
if (plugin->isStopped())
|
|
||||||
{
|
|
||||||
print_srvconsole("Plugin \"%s\" is stopped and may not be unpaused.\n", plugin->getName());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
plugin->unpausePlugin();
|
plugin->unpausePlugin();
|
||||||
print_srvconsole("Unpaused plugin \"%s\"\n", plugin->getName());
|
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.\n", sPlugin);
|
print_srvconsole("Plugin %s can't be unpaused right now.", sPlugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd, "cvars"))
|
else if (!strcmp(cmd, "cvars"))
|
||||||
@ -138,25 +114,10 @@ void amx_command()
|
|||||||
|
|
||||||
int ammount = 0;
|
int ammount = 0;
|
||||||
|
|
||||||
if (CMD_ARGC() > 2) // Searching for cvars registered to a plugin
|
|
||||||
{
|
|
||||||
const char* targetname = CMD_ARGV(2);
|
|
||||||
size_t len = strlen(targetname);
|
|
||||||
for (CList<CCVar>::iterator a = g_cvars.begin(); a; ++a)
|
|
||||||
{
|
|
||||||
if (strncmp((*a).getPluginName(), targetname, len) == 0)
|
|
||||||
{
|
|
||||||
print_srvconsole(" [%3d] %-24.23s %-24.23s %-16.15s\n", ++ammount, (*a).getName(), CVAR_GET_STRING((*a).getName()), (*a).getPluginName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // No search
|
|
||||||
{
|
|
||||||
for (CList<CCVar>::iterator a = g_cvars.begin(); a; ++a)
|
for (CList<CCVar>::iterator a = g_cvars.begin(); a; ++a)
|
||||||
{
|
{
|
||||||
print_srvconsole(" [%3d] %-24.23s %-24.23s %-16.15s\n", ++ammount, (*a).getName(), CVAR_GET_STRING((*a).getName()), (*a).getPluginName());
|
print_srvconsole(" [%3d] %-24.23s %-24.23s %-16.15s\n", ++ammount, (*a).getName(), CVAR_GET_STRING((*a).getName()), (*a).getPluginName());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
print_srvconsole("%d cvars\n", ammount);
|
print_srvconsole("%d cvars\n", ammount);
|
||||||
}
|
}
|
||||||
@ -170,29 +131,13 @@ void amx_command()
|
|||||||
|
|
||||||
CmdMngr::iterator a = g_commands.begin(CMD_ConsoleCommand);
|
CmdMngr::iterator a = g_commands.begin(CMD_ConsoleCommand);
|
||||||
|
|
||||||
if (CMD_ARGC() > 2) // Searching for commands registered to a plugin
|
|
||||||
{
|
|
||||||
const char* targetname = CMD_ARGV(2);
|
|
||||||
size_t len = strlen(targetname);
|
|
||||||
while (a)
|
|
||||||
{
|
|
||||||
if (strncmp((*a).getPlugin()->getName(), targetname, len) == 0)
|
|
||||||
{
|
|
||||||
UTIL_GetFlags(access, (*a).getFlags());
|
|
||||||
print_srvconsole(" [%3d] %-24.23s %-16.15s %-8.7s %-16.15s\n", ++ammount, (*a).getCmdLine(), access, (*a).getCmdType(), (*a).getPlugin()->getName());
|
|
||||||
}
|
|
||||||
++a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // No search
|
|
||||||
{
|
|
||||||
while (a)
|
while (a)
|
||||||
{
|
{
|
||||||
UTIL_GetFlags(access, (*a).getFlags());
|
UTIL_GetFlags(access, (*a).getFlags());
|
||||||
print_srvconsole(" [%3d] %-24.23s %-16.15s %-8.7s %-16.15s\n", ++ammount, (*a).getCmdLine(), access, (*a).getCmdType(), (*a).getPlugin()->getName());
|
print_srvconsole(" [%3d] %-24.23s %-16.15s %-8.7s %-16.15s\n", ++ammount, (*a).getCmdLine(), access, (*a).getCmdType(), (*a).getPlugin()->getName());
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
print_srvconsole("%d commands\n",ammount);
|
print_srvconsole("%d commands\n",ammount);
|
||||||
}
|
}
|
||||||
else if (!strcmp(cmd, "version"))
|
else if (!strcmp(cmd, "version"))
|
||||||
@ -201,9 +146,8 @@ void amx_command()
|
|||||||
print_srvconsole("Authors:\n\tDavid \"BAILOPAN\" Anderson, Pavol \"PM OnoTo\" Marko\n");
|
print_srvconsole("Authors:\n\tDavid \"BAILOPAN\" Anderson, Pavol \"PM OnoTo\" Marko\n");
|
||||||
print_srvconsole("\tFelix \"SniperBeamer\" Geyer, Jonny \"Got His Gun\" Bergstrom\n");
|
print_srvconsole("\tFelix \"SniperBeamer\" Geyer, Jonny \"Got His Gun\" Bergstrom\n");
|
||||||
print_srvconsole("\tLukasz \"SidLuke\" Wlasinski, Christian \"Basic-Master\" Hammacher\n");
|
print_srvconsole("\tLukasz \"SidLuke\" Wlasinski, Christian \"Basic-Master\" Hammacher\n");
|
||||||
print_srvconsole("\tBorja \"faluco\" Ferrer, Scott \"DS\" Ehlert\n");
|
print_srvconsole("\tBorja \"faluco\" Ferrer, Scott \"Damaged Soul\" Ehlert\n");
|
||||||
print_srvconsole("Compiled: %s\n", __DATE__ ", " __TIME__);
|
print_srvconsole("Compiled: %s\n", __DATE__ ", " __TIME__);
|
||||||
print_srvconsole("Build ID: %s\n", SVN_BUILD_ID);
|
|
||||||
#if defined JIT && !defined ASM32
|
#if defined JIT && !defined ASM32
|
||||||
print_srvconsole("Core mode: JIT Only\n");
|
print_srvconsole("Core mode: JIT Only\n");
|
||||||
#elif !defined JIT && defined ASM32
|
#elif !defined JIT && defined ASM32
|
||||||
@ -217,7 +161,7 @@ void amx_command()
|
|||||||
else if (!strcmp(cmd, "modules"))
|
else if (!strcmp(cmd, "modules"))
|
||||||
{
|
{
|
||||||
print_srvconsole("Currently loaded modules:\n");
|
print_srvconsole("Currently loaded modules:\n");
|
||||||
print_srvconsole(" %-23.22s %-11.10s %-20.19s %-11.10s\n", "name", "version", "author", "status");
|
print_srvconsole(" %-23.22s %-8.7s %-20.19s %-11.10s\n", "name", "version", "author", "status");
|
||||||
|
|
||||||
int running = 0;
|
int running = 0;
|
||||||
int modules = 0;
|
int modules = 0;
|
||||||
@ -230,7 +174,7 @@ void amx_command()
|
|||||||
++running;
|
++running;
|
||||||
++modules;
|
++modules;
|
||||||
|
|
||||||
print_srvconsole(" [%2d] %-23.22s %-11.10s %-20.19s %-11.10s\n", modules, (*a).getName(), (*a).getVersion(), (*a).getAuthor(), (*a).getStatus());
|
print_srvconsole(" [%2d] %-23.22s %-8.7s %-20.19s %-11.10s\n", modules, (*a).getName(), (*a).getVersion(), (*a).getAuthor(), (*a).getStatus());
|
||||||
++a;
|
++a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,8 +244,8 @@ void amx_command()
|
|||||||
print_srvconsole(" gpl - print the license\n");
|
print_srvconsole(" gpl - print the license\n");
|
||||||
print_srvconsole(" plugins - list plugins currently loaded\n");
|
print_srvconsole(" plugins - list plugins currently loaded\n");
|
||||||
print_srvconsole(" modules - list modules currently loaded\n");
|
print_srvconsole(" modules - list modules currently loaded\n");
|
||||||
print_srvconsole(" cvars [ plugin ] - list cvars registered by plugins\n");
|
print_srvconsole(" cvars - list cvars registered by plugins\n");
|
||||||
print_srvconsole(" cmds [ plugin ] - list commands registered by plugins\n");
|
print_srvconsole(" cmds - list commands registered by plugins\n");
|
||||||
print_srvconsole(" pause < plugin > - pause a running plugin\n");
|
print_srvconsole(" pause < plugin > - pause a running plugin\n");
|
||||||
print_srvconsole(" unpause < plugin > - unpause a previously paused plugin\n");
|
print_srvconsole(" unpause < plugin > - unpause a previously paused plugin\n");
|
||||||
}
|
}
|
||||||
|
@ -1035,7 +1035,7 @@ static cell AMX_NATIVE_CALL n_strfind(AMX *amx, cell *params)
|
|||||||
if (params[4] > len)
|
if (params[4] > len)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
char *find = strstr(str + params[4], sub);
|
char *find = strstr(str, sub);
|
||||||
|
|
||||||
if (!find)
|
if (!find)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
#define strnicmp strncasecmp
|
#define strnicmp strncasecmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -336,10 +336,8 @@ char *strptime(const char *buf, const char *fmt, struct tm *tm, short addthem)
|
|||||||
if (0 <= ti.qS) (*defoper) ( &tm->tm_sec , ti.qS );
|
if (0 <= ti.qS) (*defoper) ( &tm->tm_sec , ti.qS );
|
||||||
if (0 <= ti.qM) (*defoper) ( &tm->tm_min , ti.qM ); //tm->tm_min = ti.qM;
|
if (0 <= ti.qM) (*defoper) ( &tm->tm_min , ti.qM ); //tm->tm_min = ti.qM;
|
||||||
if (0 <= ti.qI)
|
if (0 <= ti.qI)
|
||||||
{
|
|
||||||
if (0 <= ti.qp) ti.qH = ti.qI % 12 + ti.qp * 12;
|
if (0 <= ti.qp) ti.qH = ti.qI % 12 + ti.qp * 12;
|
||||||
else (*defoper) ( &tm->tm_hour , ti.qI ); //tm->tm_hour = ti.qI;
|
else (*defoper) ( &tm->tm_hour , ti.qI ); //tm->tm_hour = ti.qI;
|
||||||
}
|
|
||||||
if (0 <= ti.qH) (*defoper) ( &tm->tm_hour , ti.qH ); //tm->tm_hour = ti.qH;
|
if (0 <= ti.qH) (*defoper) ( &tm->tm_hour , ti.qH ); //tm->tm_hour = ti.qH;
|
||||||
if (0 <= ti.qZ) (*defoper) ( &tm->tm_isdst , ti.qZ - 1 ); //tm->tm_isdst = ti.qZ - 1;
|
if (0 <= ti.qZ) (*defoper) ( &tm->tm_isdst , ti.qZ - 1 ); //tm->tm_isdst = ti.qZ - 1;
|
||||||
if (0 <= ti.qy) ti.qY = ti.qy;
|
if (0 <= ti.qy) ti.qY = ti.qy;
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
#ifndef _INCLUDE_SVN_VERSION_H_
|
|
||||||
#define _INCLUDE_SVN_VERSION_H_
|
|
||||||
|
|
||||||
#define SVN_VERSION_STRING "1.8.2-dev"
|
|
||||||
#define SVN_VERSION_DWORD 1,8,2,0
|
|
||||||
#define SVN_VERSION_PRODUCT "1.8.2"
|
|
||||||
#define SVN_BUILD_ID SVN_VERSION_STRING " 9:7ff502465eae"
|
|
||||||
|
|
||||||
#endif //_INCLUDE_SVN_VERSION_H_
|
|
@ -1,9 +0,0 @@
|
|||||||
#ifndef _INCLUDE_SVN_VERSION_H_
|
|
||||||
#define _INCLUDE_SVN_VERSION_H_
|
|
||||||
|
|
||||||
#define SVN_VERSION_STRING "$PMAJOR$.$PMINOR$.$PREVISION$$BUILD_STRING$"
|
|
||||||
#define SVN_VERSION_DWORD $PMAJOR$,$PMINOR$,$PREVISION$,0
|
|
||||||
#define SVN_VERSION_PRODUCT "$PMAJOR$.$PMINOR$.$PREVISION$"
|
|
||||||
#define SVN_BUILD_ID SVN_VERSION_STRING " $BUILD_ID$"
|
|
||||||
|
|
||||||
#endif //_INCLUDE_SVN_VERSION_H_
|
|
@ -1,316 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "amxmodx.h"
|
|
||||||
#include "sm_trie_tpl.h"
|
|
||||||
#include "trie_natives.h"
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
size_t trie_free_count = 0;
|
|
||||||
size_t trie_malloc_count = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TrieHandles g_TrieHandles;
|
|
||||||
typedef KTrie<TrieData> celltrie;
|
|
||||||
|
|
||||||
void triedata_dtor(TrieData *ptr)
|
|
||||||
{
|
|
||||||
ptr->freeCells();
|
|
||||||
}
|
|
||||||
// native Trie:TrieCreate();
|
|
||||||
static cell AMX_NATIVE_CALL TrieCreate(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
return static_cast<cell>(g_TrieHandles.create());
|
|
||||||
}
|
|
||||||
|
|
||||||
// native Trie::TrieClear(Trie:handle);
|
|
||||||
static cell AMX_NATIVE_CALL TrieClear(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
t->run_destructor(triedata_dtor);
|
|
||||||
t->clear();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// native TrieSetCell(Trie:handle, const key[], any:value);
|
|
||||||
static cell AMX_NATIVE_CALL TrieSetCell(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
TrieData *td = NULL;
|
|
||||||
int len;
|
|
||||||
const char *key = get_amxstring(amx, params[2], 0, len);
|
|
||||||
|
|
||||||
if ((td = t->retrieve(key)) == NULL)
|
|
||||||
{
|
|
||||||
TrieData dummy;
|
|
||||||
t->insert(key, dummy);
|
|
||||||
|
|
||||||
td = t->retrieve(key);
|
|
||||||
|
|
||||||
// should never, ever happen
|
|
||||||
if (td == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Couldn't KTrie::retrieve(), handle: %d", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
td->setCell(params[3]);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// native TrieSetString(Trie:handle, const key[], const data[]);
|
|
||||||
static cell AMX_NATIVE_CALL TrieSetString(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
TrieData *td = NULL;
|
|
||||||
int len;
|
|
||||||
const char *key = get_amxstring(amx, params[2], 0, len);
|
|
||||||
|
|
||||||
if ((td = t->retrieve(key)) == NULL)
|
|
||||||
{
|
|
||||||
TrieData dummy;
|
|
||||||
t->insert(key, dummy);
|
|
||||||
td = t->retrieve(key);
|
|
||||||
|
|
||||||
// should never, ever happen
|
|
||||||
if (td == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Couldn't KTrie::retrieve(), handle: %d", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
td->setString(get_amxaddr(amx, params[3]));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// native TrieSetArray(Trie:handle, const key[], const any:buffer[], buffsize)
|
|
||||||
static cell AMX_NATIVE_CALL TrieSetArray(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
TrieData *td = NULL;
|
|
||||||
int len;
|
|
||||||
const char *key = get_amxstring(amx, params[2], 0, len);
|
|
||||||
|
|
||||||
if ((td = t->retrieve(key)) == NULL)
|
|
||||||
{
|
|
||||||
TrieData dummy;
|
|
||||||
t->insert(key, dummy);
|
|
||||||
td = t->retrieve(key);
|
|
||||||
|
|
||||||
// should never, ever happen
|
|
||||||
if (td == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Couldn't KTrie::retrieve(), handle: %d", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
td->setArray(get_amxaddr(amx, params[3]), params[4]);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// native bool:TrieGetCell(Trie:handle, const key[], &any:value);
|
|
||||||
static cell AMX_NATIVE_CALL TrieGetCell(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TrieData *td = NULL;
|
|
||||||
int len;
|
|
||||||
const char *key = get_amxstring(amx, params[2], 0, len);
|
|
||||||
|
|
||||||
if ((td = t->retrieve(key)) == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
cell *ptr = get_amxaddr(amx, params[3]);
|
|
||||||
if (!td->getCell(ptr))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// native bool:TrieGetString(Trie:handle, const key[], buff[], len);
|
|
||||||
static cell AMX_NATIVE_CALL TrieGetString(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TrieData *td = NULL;
|
|
||||||
int len;
|
|
||||||
const char *key = get_amxstring(amx, params[2], 0, len);
|
|
||||||
|
|
||||||
if ((td = t->retrieve(key)) == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
cell *ptr = get_amxaddr(amx, params[3]);
|
|
||||||
if (!td->getString(ptr, params[4]))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// native bool:TrieGetArray(Trie:handle, const key[], any:buff[], len);
|
|
||||||
static cell AMX_NATIVE_CALL TrieGetArray(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TrieData *td = NULL;
|
|
||||||
int len;
|
|
||||||
const char *key = get_amxstring(amx, params[2], 0, len);
|
|
||||||
|
|
||||||
if ((td = t->retrieve(key)) == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
cell *ptr = get_amxaddr(amx, params[3]);
|
|
||||||
if (!td->getArray(ptr, params[4]))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
// native bool:TrieKeyExists(Trie:handle, const key[]);
|
|
||||||
static cell AMX_NATIVE_CALL TrieKeyExists(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int len;
|
|
||||||
const char *key = get_amxstring(amx, params[2], 0, len);
|
|
||||||
return t->retrieve(key) != NULL ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// native bool:TrieDeleteKey(Trie:handle, const key[]);
|
|
||||||
static cell AMX_NATIVE_CALL TrieDeleteKey(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
celltrie *t = g_TrieHandles.lookup(params[1]);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int len;
|
|
||||||
const char *key = get_amxstring(amx, params[2], 0, len);
|
|
||||||
TrieData *td = t->retrieve(key);
|
|
||||||
|
|
||||||
if (td != NULL)
|
|
||||||
{
|
|
||||||
td->freeCells();
|
|
||||||
}
|
|
||||||
return t->remove(key) ? 1 : 0;
|
|
||||||
}
|
|
||||||
//native TrieDestroy(&Trie:handle)
|
|
||||||
static cell AMX_NATIVE_CALL TrieDestroy(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
cell *ptr = get_amxaddr(amx, params[1]);
|
|
||||||
|
|
||||||
celltrie *t = g_TrieHandles.lookup(*ptr);
|
|
||||||
|
|
||||||
if (t == NULL)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
t->run_destructor(triedata_dtor);
|
|
||||||
if (g_TrieHandles.destroy(*ptr))
|
|
||||||
{
|
|
||||||
*ptr = 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
#ifndef NDEBUG
|
|
||||||
static cell AMX_NATIVE_CALL TrieMallocCount(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
return trie_malloc_count;
|
|
||||||
}
|
|
||||||
static cell AMX_NATIVE_CALL TrieFreeCount(AMX *amx, cell *params)
|
|
||||||
{
|
|
||||||
return trie_free_count;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
AMX_NATIVE_INFO trie_Natives[] =
|
|
||||||
{
|
|
||||||
{ "TrieCreate", TrieCreate },
|
|
||||||
{ "TrieClear", TrieClear },
|
|
||||||
|
|
||||||
{ "TrieSetCell", TrieSetCell },
|
|
||||||
{ "TrieSetString", TrieSetString },
|
|
||||||
{ "TrieSetArray", TrieSetArray },
|
|
||||||
|
|
||||||
{ "TrieGetCell", TrieGetCell },
|
|
||||||
{ "TrieGetString", TrieGetString },
|
|
||||||
{ "TrieGetArray", TrieGetArray },
|
|
||||||
|
|
||||||
{ "TrieDeleteKey", TrieDeleteKey },
|
|
||||||
{ "TrieKeyExists", TrieKeyExists },
|
|
||||||
{ "TrieDestroy", TrieDestroy },
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
{ "TrieMallocCount", TrieMallocCount },
|
|
||||||
{ "TrieFreeCount", TrieFreeCount },
|
|
||||||
#endif
|
|
||||||
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
@ -1,211 +0,0 @@
|
|||||||
#ifndef _TRIE_NATIVES_H_
|
|
||||||
#define _TRIE_NATIVES_H_
|
|
||||||
|
|
||||||
#include "amxmodx.h"
|
|
||||||
#include "sm_trie_tpl.h"
|
|
||||||
#include "CVector.h"
|
|
||||||
|
|
||||||
#define TRIE_DATA_UNSET 0
|
|
||||||
#define TRIE_DATA_CELL 1
|
|
||||||
#define TRIE_DATA_STRING 2
|
|
||||||
#define TRIE_DATA_ARRAY 3
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
extern size_t trie_malloc_count;
|
|
||||||
extern size_t trie_free_count;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class TrieData
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
cell *m_data;
|
|
||||||
cell m_cell;
|
|
||||||
cell m_cellcount;
|
|
||||||
int m_type;
|
|
||||||
|
|
||||||
void needCells(cell cellcount)
|
|
||||||
{
|
|
||||||
if (m_cellcount < cellcount)
|
|
||||||
{
|
|
||||||
if (m_data != NULL)
|
|
||||||
{
|
|
||||||
free(m_data);
|
|
||||||
#ifndef NDEBUG
|
|
||||||
trie_free_count++;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
size_t neededbytes = cellcount * sizeof(cell);
|
|
||||||
m_data = static_cast<cell *>(malloc(neededbytes));
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
trie_malloc_count++;
|
|
||||||
#endif
|
|
||||||
m_cellcount = cellcount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public:
|
|
||||||
void freeCells()
|
|
||||||
{
|
|
||||||
if (m_data)
|
|
||||||
{
|
|
||||||
#ifndef NDEBUG
|
|
||||||
trie_free_count++;
|
|
||||||
#endif
|
|
||||||
free(m_data);
|
|
||||||
m_data = NULL;
|
|
||||||
}
|
|
||||||
m_cellcount = 0;
|
|
||||||
}
|
|
||||||
TrieData() : m_data(NULL), m_cell(0), m_cellcount(0), m_type(TRIE_DATA_UNSET) { }
|
|
||||||
TrieData(const TrieData &src) : m_data(src.m_data),
|
|
||||||
m_cell(src.m_cell),
|
|
||||||
m_cellcount(src.m_cellcount),
|
|
||||||
m_type(src.m_type) { }
|
|
||||||
~TrieData() { }
|
|
||||||
|
|
||||||
int getType() { return m_type; }
|
|
||||||
|
|
||||||
void setCell(cell value)
|
|
||||||
{
|
|
||||||
freeCells();
|
|
||||||
|
|
||||||
m_cell = value;
|
|
||||||
m_type = TRIE_DATA_CELL;
|
|
||||||
}
|
|
||||||
void setString(cell *value)
|
|
||||||
{
|
|
||||||
cell len = 0;
|
|
||||||
|
|
||||||
cell *p = value;
|
|
||||||
|
|
||||||
while (*p++ != 0)
|
|
||||||
{
|
|
||||||
len++;
|
|
||||||
}
|
|
||||||
len += 1; // zero terminator
|
|
||||||
needCells(len);
|
|
||||||
memcpy(m_data, value, sizeof(cell) * len);
|
|
||||||
|
|
||||||
m_type = TRIE_DATA_STRING;
|
|
||||||
}
|
|
||||||
void setArray(cell *value, cell size)
|
|
||||||
{
|
|
||||||
if (size <= 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
needCells(size);
|
|
||||||
memcpy(m_data, value, sizeof(cell) * size);
|
|
||||||
|
|
||||||
m_type = TRIE_DATA_ARRAY;
|
|
||||||
}
|
|
||||||
bool getCell(cell *out)
|
|
||||||
{
|
|
||||||
if (m_type == TRIE_DATA_CELL)
|
|
||||||
{
|
|
||||||
*out = m_cell;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
bool getString(cell *out, cell max)
|
|
||||||
{
|
|
||||||
if (m_type == TRIE_DATA_STRING && max >= 0)
|
|
||||||
{
|
|
||||||
memcpy(out, m_data, (max > m_cellcount ? m_cellcount : max) * sizeof(cell));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
bool getArray(cell *out, cell max)
|
|
||||||
{
|
|
||||||
if (m_type == TRIE_DATA_ARRAY && max >= 0)
|
|
||||||
{
|
|
||||||
memcpy(out, m_data, (max > m_cellcount ? m_cellcount : max) * sizeof(cell));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
freeCells();
|
|
||||||
m_type = TRIE_DATA_UNSET;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class TrieHandles
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
CVector< KTrie< TrieData > *> m_tries;
|
|
||||||
|
|
||||||
public:
|
|
||||||
TrieHandles() { }
|
|
||||||
~TrieHandles()
|
|
||||||
{
|
|
||||||
this->clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < m_tries.size(); i++)
|
|
||||||
{
|
|
||||||
if (m_tries[i] != NULL)
|
|
||||||
{
|
|
||||||
delete m_tries[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_tries.clear();
|
|
||||||
}
|
|
||||||
KTrie<TrieData> *lookup(int handle)
|
|
||||||
{
|
|
||||||
handle--;
|
|
||||||
|
|
||||||
if (handle < 0 || handle >= static_cast<int>(m_tries.size()))
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return m_tries[handle];
|
|
||||||
}
|
|
||||||
int create()
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < m_tries.size(); i++)
|
|
||||||
{
|
|
||||||
if (m_tries[i] == NULL)
|
|
||||||
{
|
|
||||||
// reuse handle
|
|
||||||
m_tries[i] = new KTrie<TrieData>;
|
|
||||||
|
|
||||||
return static_cast<int>(i) + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_tries.push_back(new KTrie<TrieData>);
|
|
||||||
return m_tries.size();
|
|
||||||
}
|
|
||||||
bool destroy(int handle)
|
|
||||||
{
|
|
||||||
handle--;
|
|
||||||
|
|
||||||
if (handle < 0 || handle >= static_cast<int>(m_tries.size()))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_tries[handle] == NULL)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
delete m_tries[handle];
|
|
||||||
m_tries[handle] = NULL;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
extern TrieHandles g_TrieHandles;
|
|
||||||
extern AMX_NATIVE_INFO trie_Natives[];
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "amxmodx.h"
|
#include "amxmodx.h"
|
||||||
|
|
||||||
#if ( defined(__linux__) || defined(__APPLE__) ) && !defined _vsnprintf
|
#if defined __linux__ && !defined _vsnprintf
|
||||||
#define _vsnprintf vsnprintf
|
#define _vsnprintf vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -157,8 +157,8 @@ void UTIL_IntToString(int value, char *output)
|
|||||||
|
|
||||||
if (tho)
|
if (tho)
|
||||||
{
|
{
|
||||||
aaa += sprintf(&output[aaa], "%s", words[tho]);
|
aaa += sprintf(&output[aaa], words[tho]);
|
||||||
aaa += sprintf(&output[aaa], "%s", words[29]);
|
aaa += sprintf(&output[aaa], words[29]);
|
||||||
value = value % 1000;
|
value = value % 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,8 +166,8 @@ void UTIL_IntToString(int value, char *output)
|
|||||||
|
|
||||||
if (hun)
|
if (hun)
|
||||||
{
|
{
|
||||||
aaa += sprintf(&output[aaa], "%s", words[hun]);
|
aaa += sprintf(&output[aaa], words[hun]);
|
||||||
aaa += sprintf(&output[aaa], "%s", words[28]);
|
aaa += sprintf(&output[aaa], words[28]);
|
||||||
value = value % 100;
|
value = value % 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,10 +175,10 @@ void UTIL_IntToString(int value, char *output)
|
|||||||
int unit = value % 10;
|
int unit = value % 10;
|
||||||
|
|
||||||
if (ten)
|
if (ten)
|
||||||
aaa += sprintf(&output[aaa], "%s", words[(ten > 1) ? (ten + 18) : (unit + 10)]);
|
aaa += sprintf(&output[aaa], words[(ten > 1) ? (ten + 18) : (unit + 10)]);
|
||||||
|
|
||||||
if (ten != 1 && (unit || (!value && !hun && !tho)))
|
if (ten != 1 && (unit || (!value && !hun && !tho)))
|
||||||
sprintf(&output[aaa], "%s", words[unit]);
|
sprintf(&output[aaa], words[unit]);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* UTIL_SplitHudMessage(const char *src)
|
char* UTIL_SplitHudMessage(const char *src)
|
||||||
@ -242,7 +242,7 @@ short FixedSigned16(float value, float scale)
|
|||||||
return (short)output;
|
return (short)output;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const char *pMessage)
|
void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, char *pMessage)
|
||||||
{
|
{
|
||||||
if (pEntity)
|
if (pEntity)
|
||||||
MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, NULL, pEntity);
|
MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, NULL, pEntity);
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
// Microsoft Visual C++ generated resource script.
|
// Microsoft Visual C++ generated resource script.
|
||||||
//
|
//
|
||||||
|
|
||||||
#define APSTUDIO_READONLY_SYMBOLS
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Generated from the TEXTINCLUDE 2 resource.
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
//
|
//
|
||||||
#include "winres.h"
|
#include "winres.h"
|
||||||
#include "svn_version.h"
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
@ -26,8 +26,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION SVN_VERSION_DWORD
|
FILEVERSION 1,7,6,0
|
||||||
PRODUCTVERSION SVN_VERSION_DWORD
|
PRODUCTVERSION 1,7,6,0
|
||||||
FILEFLAGSMASK 0x17L
|
FILEFLAGSMASK 0x17L
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
@ -44,12 +44,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", SVN_VERSION_STRING
|
VALUE "FileVersion", "1.76"
|
||||||
VALUE "InternalName", "amxmodx"
|
VALUE "InternalName", "amxmodx"
|
||||||
VALUE "LegalCopyright", "Copyright (c) 2004-2007, 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", SVN_VERSION_PRODUCT
|
VALUE "ProductVersion", "1.76"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
Binary file not shown.
@ -1,9 +1,9 @@
|
|||||||
/* zconf.h -- configuration of the zlib compression library
|
/* zconf.h -- configuration of the zlib compression library
|
||||||
* Copyright (C) 1995-2005 Jean-loup Gailly.
|
* Copyright (C) 1995-2003 Jean-loup Gailly.
|
||||||
* For conditions of distribution and use, see copyright notice in zlib.h
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* @(#) $Id: zconf.h 3734 2008-08-16 09:48:39Z damagedsoul $ */
|
/* @(#) $Id$ */
|
||||||
|
|
||||||
#ifndef ZCONF_H
|
#ifndef ZCONF_H
|
||||||
#define ZCONF_H
|
#define ZCONF_H
|
||||||
@ -23,17 +23,15 @@
|
|||||||
# define deflateSetDictionary z_deflateSetDictionary
|
# define deflateSetDictionary z_deflateSetDictionary
|
||||||
# define deflateCopy z_deflateCopy
|
# define deflateCopy z_deflateCopy
|
||||||
# define deflateReset z_deflateReset
|
# define deflateReset z_deflateReset
|
||||||
|
# define deflatePrime z_deflatePrime
|
||||||
# define deflateParams z_deflateParams
|
# define deflateParams z_deflateParams
|
||||||
# define deflateBound z_deflateBound
|
# define deflateBound z_deflateBound
|
||||||
# define deflatePrime z_deflatePrime
|
|
||||||
# define inflateInit2_ z_inflateInit2_
|
# define inflateInit2_ z_inflateInit2_
|
||||||
# define inflateSetDictionary z_inflateSetDictionary
|
# define inflateSetDictionary z_inflateSetDictionary
|
||||||
# define inflateSync z_inflateSync
|
# define inflateSync z_inflateSync
|
||||||
# define inflateSyncPoint z_inflateSyncPoint
|
# define inflateSyncPoint z_inflateSyncPoint
|
||||||
# define inflateCopy z_inflateCopy
|
# define inflateCopy z_inflateCopy
|
||||||
# define inflateReset z_inflateReset
|
# define inflateReset z_inflateReset
|
||||||
# define inflateBack z_inflateBack
|
|
||||||
# define inflateBackEnd z_inflateBackEnd
|
|
||||||
# define compress z_compress
|
# define compress z_compress
|
||||||
# define compress2 z_compress2
|
# define compress2 z_compress2
|
||||||
# define compressBound z_compressBound
|
# define compressBound z_compressBound
|
||||||
@ -41,12 +39,7 @@
|
|||||||
# define adler32 z_adler32
|
# define adler32 z_adler32
|
||||||
# define crc32 z_crc32
|
# define crc32 z_crc32
|
||||||
# define get_crc_table z_get_crc_table
|
# define get_crc_table z_get_crc_table
|
||||||
# define zError z_zError
|
|
||||||
|
|
||||||
# define alloc_func z_alloc_func
|
|
||||||
# define free_func z_free_func
|
|
||||||
# define in_func z_in_func
|
|
||||||
# define out_func z_out_func
|
|
||||||
# define Byte z_Byte
|
# define Byte z_Byte
|
||||||
# define uInt z_uInt
|
# define uInt z_uInt
|
||||||
# define uLong z_uLong
|
# define uLong z_uLong
|
||||||
@ -68,10 +61,8 @@
|
|||||||
#if defined(_WINDOWS) && !defined(WINDOWS)
|
#if defined(_WINDOWS) && !defined(WINDOWS)
|
||||||
# define WINDOWS
|
# define WINDOWS
|
||||||
#endif
|
#endif
|
||||||
#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
|
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
|
||||||
# ifndef WIN32
|
|
||||||
# define WIN32
|
# define WIN32
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
|
#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
|
||||||
# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
|
# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
|
||||||
@ -302,7 +293,7 @@ typedef uLong FAR uLongf;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__OS400__)
|
#if defined(__OS400__)
|
||||||
# define NO_vsnprintf
|
#define NO_vsnprintf
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__MVS__)
|
#if defined(__MVS__)
|
||||||
|
Binary file not shown.
@ -1,107 +1,46 @@
|
|||||||
# (C)2004-2013 AMX Mod X Development Team
|
#(C)2004-2005 AMX Mod X Development Team
|
||||||
# Makefile written by David "BAILOPAN" Anderson
|
# Makefile written by David "BAILOPAN" Anderson
|
||||||
|
|
||||||
#####################################
|
|
||||||
### EDIT BELOW FOR OTHER PROJECTS ###
|
### EDIT BELOW FOR OTHER PROJECTS ###
|
||||||
#####################################
|
|
||||||
|
|
||||||
PROJECT = amxxpc
|
OPT_FLAGS = -O3 -funroll-loops -s -pipe -fno-strict-aliasing
|
||||||
|
DEBUG_FLAGS = -g -ggdb3
|
||||||
|
CPP = gcc-4.1
|
||||||
|
BINARY = amxxpc
|
||||||
|
|
||||||
OBJECTS = amx.cpp amxxpc.cpp Binary.cpp
|
OBJECTS = amx.cpp amxxpc.cpp Binary.cpp
|
||||||
|
|
||||||
##############################################
|
LINK = -lz /lib/libstdc++.a
|
||||||
### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ###
|
|
||||||
##############################################
|
|
||||||
|
|
||||||
C_OPT_FLAGS = -DNDEBUG -O2 -funroll-loops -fomit-frame-pointer -pipe
|
INCLUDE = -I. -L.
|
||||||
C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3
|
|
||||||
C_GCC4_FLAGS = -fvisibility=hidden
|
|
||||||
CPP_GCC4_FLAGS = -fvisibility-inlines-hidden
|
|
||||||
CPP = gcc
|
|
||||||
CPP_OSX = clang
|
|
||||||
|
|
||||||
LINK =
|
|
||||||
|
|
||||||
INCLUDE = -I.
|
|
||||||
|
|
||||||
################################################
|
|
||||||
### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ###
|
|
||||||
################################################
|
|
||||||
|
|
||||||
OS := $(shell uname -s)
|
|
||||||
|
|
||||||
ifeq "$(OS)" "Darwin"
|
|
||||||
CPP = $(CPP_OSX)
|
|
||||||
LIB_SUFFIX = _osx
|
|
||||||
CFLAGS += -DOSX
|
|
||||||
LINK += -lstdc++ -mmacosx-version-min=10.5 -lz-darwin
|
|
||||||
else
|
|
||||||
LIB_SUFFIX =
|
|
||||||
CFLAGS += -DLINUX
|
|
||||||
LINK += -lz /lib32/libstdc++.a
|
|
||||||
endif
|
|
||||||
|
|
||||||
LINK += -m32 -lm -ldl -L.
|
|
||||||
|
|
||||||
CFLAGS += -DAMX_ANSIONLY -DHAVE_STDINT_H -fno-strict-aliasing \
|
|
||||||
-m32 -Wall -Werror
|
|
||||||
CPPFLAGS += -fexceptions -fno-rtti
|
|
||||||
|
|
||||||
BINARY = $(PROJECT)$(LIB_SUFFIX)
|
|
||||||
|
|
||||||
ifeq "$(DEBUG)" "true"
|
ifeq "$(DEBUG)" "true"
|
||||||
BIN_DIR = Debug
|
BIN_DIR = Debug
|
||||||
CFLAGS += $(C_DEBUG_FLAGS)
|
CFLAGS = $(DEBUG_FLAGS)
|
||||||
else
|
else
|
||||||
BIN_DIR = Release
|
BIN_DIR = Release
|
||||||
CFLAGS += $(C_OPT_FLAGS)
|
CFLAGS = $(OPT_FLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0")
|
CFLAGS += -DLINUX -DNDEBUG -Wno-deprecated -fexceptions -DHAVE_STDINT_H -DAMX_ANSIONLY -fno-rtti -static-libgcc
|
||||||
|
|
||||||
ifeq "$(IS_CLANG)" "1"
|
OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
||||||
CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/")
|
|
||||||
CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/")
|
|
||||||
else
|
|
||||||
CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1)
|
|
||||||
CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Clang || GCC >= 4
|
|
||||||
ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1"
|
|
||||||
CFLAGS += $(C_GCC4_FLAGS)
|
|
||||||
CPPFLAGS += $(CPP_GCC4_FLAGS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Clang >= 3 || GCC >= 4.7
|
|
||||||
ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1"
|
|
||||||
CFLAGS += -Wno-delete-non-virtual-dtor
|
|
||||||
endif
|
|
||||||
|
|
||||||
# OS is Linux and not using clang
|
|
||||||
ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1"
|
|
||||||
LINK += -static-libgcc
|
|
||||||
endif
|
|
||||||
|
|
||||||
OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)
|
|
||||||
|
|
||||||
# This will break if we include other Makefiles, but is fine for now. It allows
|
|
||||||
# us to make a copy of this file that uses altered paths (ie. Makefile.mine)
|
|
||||||
# or other changes without mucking up the original.
|
|
||||||
MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
|
|
||||||
|
|
||||||
$(BIN_DIR)/%.o: %.cpp
|
$(BIN_DIR)/%.o: %.cpp
|
||||||
$(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
|
$(CPP) $(INCLUDE) $(CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
all:
|
all:
|
||||||
mkdir -p $(BIN_DIR)
|
mkdir -p $(BIN_DIR)
|
||||||
$(MAKE) -f $(MAKEFILE_NAME) $(PROJECT)
|
$(MAKE) amxxpc
|
||||||
|
|
||||||
$(PROJECT): $(OBJ_BIN)
|
amxxpc: $(OBJ_LINUX)
|
||||||
$(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY)
|
$(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -ldl -lm -o$(BIN_DIR)/$(BINARY)
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(BIN_DIR)/*.o
|
rm -rf Release/*.o
|
||||||
rm -f $(BIN_DIR)/$(BINARY)
|
rm -rf Release/$(BINARY)
|
||||||
|
rm -rf Debug/*.o
|
||||||
|
rm -rf Debug/$(BINARY)
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id: amx.cpp 1728 2005-07-25 00:01:54Z dvander $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if BUILD_PLATFORM == WINDOWS && BUILD_TYPE == RELEASE && BUILD_COMPILER == MSVC && PAWN_CELL_SIZE == 64
|
#if BUILD_PLATFORM == WINDOWS && BUILD_TYPE == RELEASE && BUILD_COMPILER == MSVC && PAWN_CELL_SIZE == 64
|
||||||
@ -42,7 +42,7 @@
|
|||||||
#include <stddef.h> /* for wchar_t */
|
#include <stddef.h> /* for wchar_t */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "osdefs.h"
|
#include "osdefs.h"
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
#if !defined AMX_NODYNALOAD
|
#if !defined AMX_NODYNALOAD
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
@ -815,12 +815,12 @@ static void expand(unsigned char *code, long codesize, long memsize)
|
|||||||
int AMXAPI amx_Init(AMX *amx,void *program)
|
int AMXAPI amx_Init(AMX *amx,void *program)
|
||||||
{
|
{
|
||||||
AMX_HEADER *hdr;
|
AMX_HEADER *hdr;
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
||||||
char libname[sNAMEMAX+8]; /* +1 for '\0', +3 for 'amx' prefix, +4 for extension */
|
char libname[sNAMEMAX+8]; /* +1 for '\0', +3 for 'amx' prefix, +4 for extension */
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
typedef int (FAR WINAPI *AMX_ENTRY)(AMX _FAR *amx);
|
typedef int (FAR WINAPI *AMX_ENTRY)(AMX _FAR *amx);
|
||||||
HINSTANCE hlib;
|
HINSTANCE hlib;
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
typedef int (*AMX_ENTRY)(AMX *amx);
|
typedef int (*AMX_ENTRY)(AMX *amx);
|
||||||
void *hlib;
|
void *hlib;
|
||||||
#endif
|
#endif
|
||||||
@ -965,7 +965,7 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
amx_BrowseRelocate(amx);
|
amx_BrowseRelocate(amx);
|
||||||
|
|
||||||
/* load any extension modules that the AMX refers to */
|
/* load any extension modules that the AMX refers to */
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
||||||
hdr=(AMX_HEADER *)amx->base;
|
hdr=(AMX_HEADER *)amx->base;
|
||||||
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
||||||
for (i=0; i<numlibraries; i++) {
|
for (i=0; i<numlibraries; i++) {
|
||||||
@ -981,7 +981,7 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
if (hlib<=HINSTANCE_ERROR)
|
if (hlib<=HINSTANCE_ERROR)
|
||||||
hlib=NULL;
|
hlib=NULL;
|
||||||
#endif
|
#endif
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
strcat(libname,".so");
|
strcat(libname,".so");
|
||||||
hlib=dlopen(libname,RTLD_NOW);
|
hlib=dlopen(libname,RTLD_NOW);
|
||||||
#endif
|
#endif
|
||||||
@ -995,7 +995,7 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
strcat(funcname,"Init");
|
strcat(funcname,"Init");
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
libinit=(AMX_ENTRY)GetProcAddress(hlib,funcname);
|
libinit=(AMX_ENTRY)GetProcAddress(hlib,funcname);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
libinit=(AMX_ENTRY)dlsym(hlib,funcname);
|
libinit=(AMX_ENTRY)dlsym(hlib,funcname);
|
||||||
#endif
|
#endif
|
||||||
if (libinit!=NULL)
|
if (libinit!=NULL)
|
||||||
@ -1029,7 +1029,7 @@ int AMXAPI amx_Init(AMX *amx,void *program)
|
|||||||
return !VirtualProtect(addr, len, p, &prev);
|
return !VirtualProtect(addr, len, p, &prev);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
|
|
||||||
/* Linux already has mprotect() */
|
/* Linux already has mprotect() */
|
||||||
|
|
||||||
@ -1104,10 +1104,10 @@ int AMXAPI amx_InitJIT(AMX *amx,void *compiled_program,void *reloc_table)
|
|||||||
#if defined AMX_CLEANUP
|
#if defined AMX_CLEANUP
|
||||||
int AMXAPI amx_Cleanup(AMX *amx)
|
int AMXAPI amx_Cleanup(AMX *amx)
|
||||||
{
|
{
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
|
typedef int (FAR WINAPI *AMX_ENTRY)(AMX FAR *amx);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
typedef int (*AMX_ENTRY)(AMX *amx);
|
typedef int (*AMX_ENTRY)(AMX *amx);
|
||||||
#endif
|
#endif
|
||||||
AMX_HEADER *hdr;
|
AMX_HEADER *hdr;
|
||||||
@ -1117,7 +1117,7 @@ int AMXAPI amx_Cleanup(AMX *amx)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* unload all extension modules */
|
/* unload all extension modules */
|
||||||
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__) && !defined AMX_NODYNALOAD
|
#if (defined _Windows || defined LINUX || defined __FreeBSD__ || defined __OpenBSD__) && !defined AMX_NODYNALOAD
|
||||||
hdr=(AMX_HEADER *)amx->base;
|
hdr=(AMX_HEADER *)amx->base;
|
||||||
assert(hdr->magic==AMX_MAGIC);
|
assert(hdr->magic==AMX_MAGIC);
|
||||||
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
numlibraries=NUMENTRIES(hdr,libraries,pubvars);
|
||||||
@ -1130,14 +1130,14 @@ int AMXAPI amx_Cleanup(AMX *amx)
|
|||||||
strcat(funcname,"Cleanup");
|
strcat(funcname,"Cleanup");
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
|
libcleanup=(AMX_ENTRY)GetProcAddress((HINSTANCE)lib->address,funcname);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
|
libcleanup=(AMX_ENTRY)dlsym((void*)lib->address,funcname);
|
||||||
#endif
|
#endif
|
||||||
if (libcleanup!=NULL)
|
if (libcleanup!=NULL)
|
||||||
libcleanup(amx);
|
libcleanup(amx);
|
||||||
#if defined _Windows
|
#if defined _Windows
|
||||||
FreeLibrary((HINSTANCE)lib->address);
|
FreeLibrary((HINSTANCE)lib->address);
|
||||||
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#elif defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
dlclose((void*)lib->address);
|
dlclose((void*)lib->address);
|
||||||
#endif
|
#endif
|
||||||
} /* if */
|
} /* if */
|
||||||
@ -1666,7 +1666,7 @@ int AMXAPI amx_PushString(AMX *amx, cell *amx_addr, cell **phys_addr, const char
|
|||||||
* fast "indirect threaded" interpreter.
|
* fast "indirect threaded" interpreter.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define NEXT(cip) goto *(const void *)*cip++
|
#define NEXT(cip) goto **cip++
|
||||||
|
|
||||||
int AMXAPI amx_Exec(AMX *amx, cell *retval, int index)
|
int AMXAPI amx_Exec(AMX *amx, cell *retval, int index)
|
||||||
{
|
{
|
||||||
@ -1846,14 +1846,14 @@ static const void * const amx_opcodelist[] = {
|
|||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_load_i:
|
op_load_i:
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
|
if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
pri= * (cell *)(data+(int)pri);
|
pri= * (cell *)(data+(int)pri);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_lodb_i:
|
op_lodb_i:
|
||||||
GETPARAM(offs);
|
GETPARAM(offs);
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
|
if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
switch (offs) {
|
switch (offs) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -1919,14 +1919,14 @@ static const void * const amx_opcodelist[] = {
|
|||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_stor_i:
|
op_stor_i:
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
*(cell *)(data+(int)alt)=pri;
|
*(cell *)(data+(int)alt)=pri;
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_strb_i:
|
op_strb_i:
|
||||||
GETPARAM(offs);
|
GETPARAM(offs);
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
switch (offs) {
|
switch (offs) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -1943,7 +1943,7 @@ static const void * const amx_opcodelist[] = {
|
|||||||
op_lidx:
|
op_lidx:
|
||||||
offs=pri*sizeof(cell)+alt;
|
offs=pri*sizeof(cell)+alt;
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if ((offs>=hea && offs<stk) || (ucell)offs>=(ucell)amx->stp)
|
if (offs>=hea && offs<stk || (ucell)offs>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
pri= * (cell *)(data+(int)offs);
|
pri= * (cell *)(data+(int)offs);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
@ -1951,7 +1951,7 @@ static const void * const amx_opcodelist[] = {
|
|||||||
GETPARAM(offs);
|
GETPARAM(offs);
|
||||||
offs=(pri << (int)offs)+alt;
|
offs=(pri << (int)offs)+alt;
|
||||||
/* verify address */
|
/* verify address */
|
||||||
if ((offs>=hea && offs<stk) || (ucell)offs>=(ucell)amx->stp)
|
if (offs>=hea && offs<stk || (ucell)offs>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
pri= * (cell *)(data+(int)offs);
|
pri= * (cell *)(data+(int)offs);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
@ -2388,13 +2388,13 @@ static const void * const amx_opcodelist[] = {
|
|||||||
/* verify top & bottom memory addresses, for both source and destination
|
/* verify top & bottom memory addresses, for both source and destination
|
||||||
* addresses
|
* addresses
|
||||||
*/
|
*/
|
||||||
if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
|
if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if (((pri+offs)>hea && (pri+offs)<stk) || (ucell)(pri+offs)>(ucell)amx->stp)
|
if ((pri+offs)>hea && (pri+offs)<stk || (ucell)(pri+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
|
if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
memcpy(data+(int)alt, data+(int)pri, (int)offs);
|
memcpy(data+(int)alt, data+(int)pri, (int)offs);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
@ -2403,22 +2403,22 @@ static const void * const amx_opcodelist[] = {
|
|||||||
/* verify top & bottom memory addresses, for both source and destination
|
/* verify top & bottom memory addresses, for both source and destination
|
||||||
* addresses
|
* addresses
|
||||||
*/
|
*/
|
||||||
if ((pri>=hea && pri<stk) || (ucell)pri>=(ucell)amx->stp)
|
if (pri>=hea && pri<stk || (ucell)pri>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if (((pri+offs)>hea && (pri+offs)<stk) || (ucell)(pri+offs)>(ucell)amx->stp)
|
if ((pri+offs)>hea && (pri+offs)<stk || (ucell)(pri+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
|
if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
pri=memcmp(data+(int)alt, data+(int)pri, (int)offs);
|
pri=memcmp(data+(int)alt, data+(int)pri, (int)offs);
|
||||||
NEXT(cip);
|
NEXT(cip);
|
||||||
op_fill:
|
op_fill:
|
||||||
GETPARAM(offs);
|
GETPARAM(offs);
|
||||||
/* verify top & bottom memory addresses */
|
/* verify top & bottom memory addresses */
|
||||||
if ((alt>=hea && alt<stk) || (ucell)alt>=(ucell)amx->stp)
|
if (alt>=hea && alt<stk || (ucell)alt>=(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
if (((alt+offs)>hea && (alt+offs)<stk) || (ucell)(alt+offs)>(ucell)amx->stp)
|
if ((alt+offs)>hea && (alt+offs)<stk || (ucell)(alt+offs)>(ucell)amx->stp)
|
||||||
ABORT(amx,AMX_ERR_MEMACCESS);
|
ABORT(amx,AMX_ERR_MEMACCESS);
|
||||||
for (i=(int)alt; offs>=(int)sizeof(cell); i+=sizeof(cell), offs-=sizeof(cell))
|
for (i=(int)alt; offs>=(int)sizeof(cell); i+=sizeof(cell), offs-=sizeof(cell))
|
||||||
*(cell *)(data+i) = pri;
|
*(cell *)(data+i) = pri;
|
||||||
@ -3592,7 +3592,7 @@ int AMXAPI amx_GetAddr(AMX *amx,cell amx_addr,cell **phys_addr)
|
|||||||
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
|
data=(amx->data!=NULL) ? amx->data : amx->base+(int)hdr->dat;
|
||||||
|
|
||||||
assert(phys_addr!=NULL);
|
assert(phys_addr!=NULL);
|
||||||
if ((amx_addr>=amx->hea && amx_addr<amx->stk) || amx_addr<0 || amx_addr>=amx->stp) {
|
if (amx_addr>=amx->hea && amx_addr<amx->stk || amx_addr<0 || amx_addr>=amx->stp) {
|
||||||
*phys_addr=NULL;
|
*phys_addr=NULL;
|
||||||
return AMX_ERR_MEMACCESS;
|
return AMX_ERR_MEMACCESS;
|
||||||
} /* if */
|
} /* if */
|
||||||
|
@ -18,13 +18,13 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id: amx.h 3736 2008-08-16 20:13:12Z damagedsoul $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined FREEBSD && !defined __FreeBSD__
|
#if defined FREEBSD && !defined __FreeBSD__
|
||||||
#define __FreeBSD__
|
#define __FreeBSD__
|
||||||
#endif
|
#endif
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
#include <sclinux.h>
|
#include <sclinux.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
#if defined HAVE_STDINT_H
|
#if defined HAVE_STDINT_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#else
|
#else
|
||||||
#if defined __LCC__ || defined __DMC__ || defined LINUX || defined __APPLE__
|
#if defined __LCC__ || defined __DMC__ || defined LINUX
|
||||||
#if defined HAVE_INTTYPES_H
|
#if defined HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#else
|
#else
|
||||||
@ -188,7 +188,7 @@ typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -212,7 +212,7 @@ typedef struct tagAMX_NATIVE_INFO {
|
|||||||
|
|
||||||
typedef struct tagAMX_FUNCSTUB {
|
typedef struct tagAMX_FUNCSTUB {
|
||||||
ucell address PACKED;
|
ucell address PACKED;
|
||||||
char name[sEXPMAX+1];
|
char name[sEXPMAX+1] PACKED;
|
||||||
} PACKED AMX_FUNCSTUB;
|
} PACKED AMX_FUNCSTUB;
|
||||||
|
|
||||||
typedef struct tagFUNCSTUBNT {
|
typedef struct tagFUNCSTUBNT {
|
||||||
@ -260,8 +260,8 @@ typedef struct tagAMX {
|
|||||||
typedef struct tagAMX_HEADER {
|
typedef struct tagAMX_HEADER {
|
||||||
int32_t size PACKED; /* size of the "file" */
|
int32_t size PACKED; /* size of the "file" */
|
||||||
uint16_t magic PACKED; /* signature */
|
uint16_t magic PACKED; /* signature */
|
||||||
char file_version; /* file format version */
|
char file_version PACKED; /* file format version */
|
||||||
char amx_version; /* required version of the AMX */
|
char amx_version PACKED; /* required version of the AMX */
|
||||||
int16_t flags PACKED;
|
int16_t flags PACKED;
|
||||||
int16_t defsize PACKED; /* size of a definition record */
|
int16_t defsize PACKED; /* size of a definition record */
|
||||||
int32_t cod PACKED; /* initial value of COD - code block */
|
int32_t cod PACKED; /* initial value of COD - code block */
|
||||||
@ -416,7 +416,7 @@ int AMXAPI amx_UTF8Put(char *string, char **endptr, int maxchars, cell value);
|
|||||||
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=reset
|
#pragma options align=reset
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
* misrepresented as being the original software.
|
* misrepresented as being the original software.
|
||||||
* 3. This notice may not be removed or altered from any source distribution.
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
*
|
*
|
||||||
* Version: $Id: amxdbg.h 3736 2008-08-16 20:13:12Z damagedsoul $
|
* Version: $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AMXDBG_H_INCLUDED
|
#ifndef AMXDBG_H_INCLUDED
|
||||||
@ -49,7 +49,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
#pragma pack(1) /* structures must be packed (byte-aligned) */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=mac68k
|
#pragma options align=mac68k
|
||||||
@ -65,8 +65,8 @@ extern "C" {
|
|||||||
typedef struct tagAMX_DBG_HDR {
|
typedef struct tagAMX_DBG_HDR {
|
||||||
int32_t size PACKED; /* size of the debug information chunk */
|
int32_t size PACKED; /* size of the debug information chunk */
|
||||||
uint16_t magic PACKED; /* signature, must be 0xf1ef */
|
uint16_t magic PACKED; /* signature, must be 0xf1ef */
|
||||||
char file_version; /* file format version */
|
char file_version PACKED; /* file format version */
|
||||||
char amx_version; /* required version of the AMX */
|
char amx_version PACKED; /* required version of the AMX */
|
||||||
int16_t flags PACKED; /* currently unused */
|
int16_t flags PACKED; /* currently unused */
|
||||||
int16_t files PACKED; /* number of entries in the "file" table */
|
int16_t files PACKED; /* number of entries in the "file" table */
|
||||||
int16_t lines PACKED; /* number of entries in the "line" table */
|
int16_t lines PACKED; /* number of entries in the "line" table */
|
||||||
@ -74,51 +74,51 @@ typedef struct tagAMX_DBG_HDR {
|
|||||||
int16_t tags PACKED; /* number of entries in the "tag" table */
|
int16_t tags PACKED; /* number of entries in the "tag" table */
|
||||||
int16_t automatons PACKED; /* number of entries in the "automaton" table */
|
int16_t automatons PACKED; /* number of entries in the "automaton" table */
|
||||||
int16_t states PACKED; /* number of entries in the "state" table */
|
int16_t states PACKED; /* number of entries in the "state" table */
|
||||||
} AMX_DBG_HDR;
|
} AMX_DBG_HDR PACKED;
|
||||||
#define AMX_DBG_MAGIC 0xf1ef
|
#define AMX_DBG_MAGIC 0xf1ef
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_FILE {
|
typedef struct tagAMX_DBG_FILE {
|
||||||
ucell address PACKED; /* address in the code segment where generated code (for this file) starts */
|
ucell address PACKED; /* address in the code segment where generated code (for this file) starts */
|
||||||
const char name[1]; /* ASCII string, zero-terminated */
|
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_FILE;
|
} AMX_DBG_FILE PACKED;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_LINE {
|
typedef struct tagAMX_DBG_LINE {
|
||||||
ucell address PACKED; /* address in the code segment where generated code (for this line) starts */
|
ucell address PACKED; /* address in the code segment where generated code (for this line) starts */
|
||||||
int32_t line PACKED; /* line number */
|
int32_t line PACKED; /* line number */
|
||||||
} AMX_DBG_LINE;
|
} AMX_DBG_LINE PACKED;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_SYMBOL {
|
typedef struct tagAMX_DBG_SYMBOL {
|
||||||
ucell address PACKED; /* address in the data segment or relative to the frame */
|
ucell address PACKED; /* address in the data segment or relative to the frame */
|
||||||
int16_t tag PACKED; /* tag for the symbol */
|
int16_t tag PACKED; /* tag for the symbol */
|
||||||
ucell codestart PACKED; /* address in the code segment from which this symbol is valid (in scope) */
|
ucell codestart PACKED; /* address in the code segment from which this symbol is valid (in scope) */
|
||||||
ucell codeend PACKED; /* address in the code segment until which this symbol is valid (in scope) */
|
ucell codeend PACKED; /* address in the code segment until which this symbol is valid (in scope) */
|
||||||
char ident; /* kind of symbol (function/variable) */
|
char ident PACKED; /* kind of symbol (function/variable) */
|
||||||
char vclass; /* class of symbol (global/local) */
|
char vclass PACKED; /* class of symbol (global/local) */
|
||||||
int16_t dim PACKED; /* number of dimensions */
|
int16_t dim PACKED; /* number of dimensions */
|
||||||
const char name[1]; /* ASCII string, zero-terminated */
|
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_SYMBOL;
|
} AMX_DBG_SYMBOL PACKED;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_SYMDIM {
|
typedef struct tagAMX_DBG_SYMDIM {
|
||||||
int16_t tag PACKED; /* tag for the array dimension */
|
int16_t tag PACKED; /* tag for the array dimension */
|
||||||
ucell size PACKED; /* size of the array dimension */
|
ucell size PACKED; /* size of the array dimension */
|
||||||
} AMX_DBG_SYMDIM;
|
} AMX_DBG_SYMDIM PACKED;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_TAG {
|
typedef struct tagAMX_DBG_TAG {
|
||||||
int16_t tag PACKED; /* tag id */
|
int16_t tag PACKED; /* tag id */
|
||||||
const char name[1]; /* ASCII string, zero-terminated */
|
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_TAG;
|
} AMX_DBG_TAG PACKED;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_MACHINE {
|
typedef struct tagAMX_DBG_MACHINE {
|
||||||
int16_t automaton PACKED; /* automaton id */
|
int16_t automaton PACKED; /* automaton id */
|
||||||
ucell address PACKED; /* address of state variable */
|
ucell address PACKED; /* address of state variable */
|
||||||
const char name[1]; /* ASCII string, zero-terminated */
|
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_MACHINE;
|
} AMX_DBG_MACHINE PACKED;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG_STATE {
|
typedef struct tagAMX_DBG_STATE {
|
||||||
int16_t state PACKED; /* state id */
|
int16_t state PACKED; /* state id */
|
||||||
int16_t automaton PACKED; /* automaton id */
|
int16_t automaton PACKED; /* automaton id */
|
||||||
const char name[1]; /* ASCII string, zero-terminated */
|
const char name[1] PACKED; /* ASCII string, zero-terminated */
|
||||||
} AMX_DBG_STATE;
|
} AMX_DBG_STATE PACKED;
|
||||||
|
|
||||||
typedef struct tagAMX_DBG {
|
typedef struct tagAMX_DBG {
|
||||||
AMX_DBG_HDR _FAR *hdr PACKED; /* points to the AMX_DBG header */
|
AMX_DBG_HDR _FAR *hdr PACKED; /* points to the AMX_DBG header */
|
||||||
@ -128,7 +128,7 @@ typedef struct tagAMX_DBG {
|
|||||||
AMX_DBG_TAG _FAR **tagtbl PACKED;
|
AMX_DBG_TAG _FAR **tagtbl PACKED;
|
||||||
AMX_DBG_MACHINE _FAR **automatontbl PACKED;
|
AMX_DBG_MACHINE _FAR **automatontbl PACKED;
|
||||||
AMX_DBG_STATE _FAR **statetbl PACKED;
|
AMX_DBG_STATE _FAR **statetbl PACKED;
|
||||||
} AMX_DBG;
|
} AMX_DBG PACKED;
|
||||||
|
|
||||||
#if !defined iVARIABLE
|
#if !defined iVARIABLE
|
||||||
#define iVARIABLE 1 /* cell that has an address and that can be fetched directly (lvalue) */
|
#define iVARIABLE 1 /* cell that has an address and that can be fetched directly (lvalue) */
|
||||||
@ -156,7 +156,7 @@ int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX
|
|||||||
|
|
||||||
|
|
||||||
#if !defined AMX_NO_ALIGN
|
#if !defined AMX_NO_ALIGN
|
||||||
#if defined LINUX || defined __FreeBSD__ || defined __APPLE__
|
#if defined LINUX || defined __FreeBSD__
|
||||||
#pragma pack() /* reset default packing */
|
#pragma pack() /* reset default packing */
|
||||||
#elif defined MACOS && defined __MWERKS__
|
#elif defined MACOS && defined __MWERKS__
|
||||||
#pragma options align=reset
|
#pragma options align=reset
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#if defined(__linux__) | defined (__APPLE__)
|
#ifdef __linux__
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#else
|
#else
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -12,13 +12,6 @@
|
|||||||
#include "amxxpc.h"
|
#include "amxxpc.h"
|
||||||
#include "Binary.h"
|
#include "Binary.h"
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
// MSVC8 - replace POSIX functions with ISO C++ conformant ones as they are deprecated
|
|
||||||
#if _MSC_VER >= 1400
|
|
||||||
#define unlink _unlink
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static PRINTF pc_printf = NULL;
|
static PRINTF pc_printf = NULL;
|
||||||
|
|
||||||
void ReadFileIntoPl(abl *pl, FILE *fp);
|
void ReadFileIntoPl(abl *pl, FILE *fp);
|
||||||
@ -29,29 +22,28 @@ void WriteBh(BinaryWriter *bw, BinPlugin *bh);
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct abl pl32;
|
struct abl pl32;
|
||||||
|
struct abl pl64;
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
printf("debug clamp\n");
|
printf("debug clamp\n");
|
||||||
getchar();
|
getchar();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__linux__)
|
#ifdef __linux__
|
||||||
HINSTANCE lib = NULL;
|
HINSTANCE lib = NULL;
|
||||||
if (FileExists("./amxxpc32.so"))
|
if (FileExists("./amxxpc32.so"))
|
||||||
lib = dlmount("./amxxpc32.so");
|
lib = dlmount("./amxxpc32.so");
|
||||||
else
|
else
|
||||||
lib = dlmount("amxxpc32.so");
|
lib = dlmount("amxxpc32.so");
|
||||||
#elif defined(__APPLE__)
|
|
||||||
HINSTANCE lib = dlmount("amxxpc32.dylib");
|
|
||||||
#else
|
#else
|
||||||
HINSTANCE lib = dlmount("amxxpc32.dll");
|
HINSTANCE lib = dlmount("amxxpc32.dll");
|
||||||
#endif
|
#endif
|
||||||
if (!lib)
|
if (!lib)
|
||||||
{
|
{
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
printf("compiler failed to instantiate: %s\n", dlerror());
|
printf("32bit compiler failed to instantiate: %s\n", dlerror());
|
||||||
#else
|
#else
|
||||||
printf("compiler failed to instantiate: %d\n", GetLastError());
|
printf("32bit compiler failed to instantiate: %d\n", GetLastError());
|
||||||
#endif
|
#endif
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
@ -61,16 +53,16 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (!sc32 || !pc_printf)
|
if (!sc32 || !pc_printf)
|
||||||
{
|
{
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
printf("compiler failed to link: %p.\n",sc32);
|
printf("32bit compiler failed to link: %p.\n",sc32);
|
||||||
#else
|
#else
|
||||||
printf("compiler failed to link: %d.\n", GetLastError());
|
printf("32bit compiler failed to link: %d.\n", GetLastError());
|
||||||
#endif
|
#endif
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
pc_printf("Welcome to the AMX Mod X %s Compiler.\n", VERSION_STRING);
|
pc_printf("Welcome to the AMX Mod X %s Compiler.\n", VERSION_STRING);
|
||||||
pc_printf("Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team\n\n");
|
pc_printf("Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team\n\n");
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
{
|
{
|
||||||
@ -113,12 +105,61 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
unlink(file);
|
unlink(file);
|
||||||
|
|
||||||
|
HINSTANCE lib64 = NULL;
|
||||||
|
#ifdef __linux__
|
||||||
|
if (FileExists("./amxxpc64.so"))
|
||||||
|
lib64 = dlmount("./amxxpc64.so");
|
||||||
|
else
|
||||||
|
lib64 = dlmount("amxxpc64.so");
|
||||||
|
#else
|
||||||
|
lib64 = dlmount("amxxpc64.dll");
|
||||||
|
#endif
|
||||||
|
if (!lib64)
|
||||||
|
{
|
||||||
|
pc_printf("64bit compiler failed to instantiate.\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
COMPILER sc64 = (COMPILER)dlsym(lib64, "Compile64");
|
||||||
|
|
||||||
|
if (!sc64)
|
||||||
|
{
|
||||||
|
#ifdef __linux__
|
||||||
|
pc_printf("64bit compiler failed to link: %s.\n", dlerror());
|
||||||
|
#else
|
||||||
|
pc_printf("64bit compiler failed to link: %d.\n", GetLastError());
|
||||||
|
#endif
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sc64(argc, argv);
|
||||||
|
|
||||||
|
dlclose(lib64);
|
||||||
|
|
||||||
|
if (file == NULL)
|
||||||
|
{
|
||||||
|
pc_printf("Could not locate the output file on second pass.\n");
|
||||||
|
exit(0);
|
||||||
|
} else {
|
||||||
|
FILE *fp = fopen(file, "rb");
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
pc_printf("Could not locate output file on second pass (compile failed).\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
ReadFileIntoPl(&pl64, fp);
|
||||||
|
pl64.cellsize = 8;
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
/////////////
|
/////////////
|
||||||
// COMPRSSION
|
// COMPRSSION
|
||||||
/////////////
|
/////////////
|
||||||
|
|
||||||
CompressPl(&pl32);
|
CompressPl(&pl32);
|
||||||
|
|
||||||
|
CompressPl(&pl64);
|
||||||
|
|
||||||
char *newfile = new char[strlen(file)+3];
|
char *newfile = new char[strlen(file)+3];
|
||||||
strcpy(newfile, file);
|
strcpy(newfile, file);
|
||||||
if (!strstr(file, ".amxx") && !strstr(file, ".AMXX"))
|
if (!strstr(file, ".amxx") && !strstr(file, ".AMXX"))
|
||||||
@ -131,33 +172,34 @@ int main(int argc, char **argv)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
BinPlugin bh32;
|
BinPlugin bh32, bh64;
|
||||||
|
|
||||||
Pl2Bh(&pl32, &bh32);
|
Pl2Bh(&pl32, &bh32);
|
||||||
|
Pl2Bh(&pl64, &bh64);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
static const int kEntries = 1;
|
|
||||||
|
|
||||||
//entry is 4 ints and a byte
|
|
||||||
static const int kEntrySize = (sizeof(int32_t) * 4) + sizeof(int8_t);
|
|
||||||
|
|
||||||
BinaryWriter bw(fp);
|
BinaryWriter bw(fp);
|
||||||
|
|
||||||
bw.WriteUInt32(MAGIC_HEADER2);
|
bw.WriteUInt32(MAGIC_HEADER2);
|
||||||
bw.WriteUInt16(MAGIC_VERSION);
|
bw.WriteUInt16(MAGIC_VERSION);
|
||||||
bw.WriteUInt8(kEntries);
|
bw.WriteUInt8(2);
|
||||||
|
|
||||||
//base header
|
//base header
|
||||||
int baseaddr = sizeof(int32_t) + sizeof(int16_t) + sizeof(int8_t);
|
int baseaddr = sizeof(int32_t) + sizeof(int16_t) + sizeof(int8_t);
|
||||||
//extend this by the entries we have
|
//entry is 4 ints and a byte
|
||||||
baseaddr += kEntrySize * kEntries;
|
int entrysize = (sizeof(int32_t) * 4) + sizeof(int8_t);
|
||||||
|
//extend this by the two entries we have
|
||||||
|
baseaddr += entrysize * 2;
|
||||||
|
|
||||||
bh32.offs = baseaddr;
|
bh32.offs = baseaddr;
|
||||||
|
bh64.offs = bh32.offs + bh32.disksize;
|
||||||
|
|
||||||
WriteBh(&bw, &bh32);
|
WriteBh(&bw, &bh32);
|
||||||
|
WriteBh(&bw, &bh64);
|
||||||
bw.WriteChars(pl32.cmp, pl32.cmpsize);
|
bw.WriteChars(pl32.cmp, pl32.cmpsize);
|
||||||
|
bw.WriteChars(pl64.cmp, pl64.cmpsize);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
unlink(file);
|
unlink(file);
|
||||||
@ -244,7 +286,7 @@ char *swiext(const char *file, const char *ext, int isO)
|
|||||||
int i = 0, pos = -1, j = 0;
|
int i = 0, pos = -1, j = 0;
|
||||||
int fileLen = strlen(file);
|
int fileLen = strlen(file);
|
||||||
int extLen = strlen(ext);
|
int extLen = strlen(ext);
|
||||||
int odirFlag = -1;
|
int max = 0, odirFlag = -1;
|
||||||
|
|
||||||
for (i=fileLen-1; i>=0; i--)
|
for (i=fileLen-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
@ -340,7 +382,7 @@ void show_help()
|
|||||||
printf("\t-r[name] write cross reference report to console or to specified file\n");
|
printf("\t-r[name] write cross reference report to console or to specified file\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
bool FileExists(const char *file)
|
bool FileExists(const char *file)
|
||||||
{
|
{
|
||||||
FILE *fp = fopen(file, "rb");
|
FILE *fp = fopen(file, "rb");
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#ifndef _AMXXSC_INCLUDE_H
|
#ifndef _AMXXSC_INCLUDE_H
|
||||||
#define _AMXXSC_INCLUDE_H
|
#define _AMXXSC_INCLUDE_H
|
||||||
|
|
||||||
#define VERSION_STRING "1.8.1-300"
|
#define VERSION_STRING "1.76-300"
|
||||||
#define MAGIC_HEADER2 0x414D5858
|
#define MAGIC_HEADER2 0x414D5858
|
||||||
#define MAGIC_VERSION 0x0300
|
#define MAGIC_VERSION 0x0300
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
# include <dlfcn.h>
|
# include <dlfcn.h>
|
||||||
#else
|
#else
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
# define dlmount(x) dlopen(x, RTLD_NOW|RTLD_GLOBAL)
|
# define dlmount(x) dlopen(x, RTLD_NOW|RTLD_GLOBAL)
|
||||||
typedef void* HINSTANCE;
|
typedef void* HINSTANCE;
|
||||||
#else
|
#else
|
||||||
@ -65,7 +65,7 @@ struct BinPlugin
|
|||||||
int32_t offs; //file offset
|
int32_t offs; //file offset
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
#ifdef __linux__
|
||||||
bool FileExists(const char *file);
|
bool FileExists(const char *file);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user