Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

/home/groups/n/no/noxwizard/cvs/src/amx/amxscript.h

Go to the documentation of this file.
00001 /*
00013     -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
00014     || NoX-Wizard UO Server Emulator (NXW)                 [http://www.noxwizard.com]  ||
00015     ||                                                                         ||
00016     || This software is free software released under GPL2 license.             ||
00017     || You can find detailed license information in nox-wizard.cpp file.       ||
00018     ||                                                                         ||
00019     || For any question post to NoX-Wizard forums or mail staff@noxwizard.com  ||
00020     -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
00021 
00022     CHANGELOG:
00023     -----------------------------------------------------------------------------
00024     DATE                                        DEVELOPER                               DESCRIPTION
00025     -----------------------------------------------------------------------------
00026 
00027  ***********************************************************************************
00028  */
00032 #ifndef __AMXSCRIPT_H__
00033 #define __AMXSCRIPT_H__
00034 //#include "amx_vm.h"
00035 //<Luxor>
00036 //typedef long int cell;
00037 #include "amx.h"
00038 #include "../typedefs.h"
00039 //</Luxor>
00040 
00041 
00046 class AmxProgram {
00047 private:
00048         void *m_ptrCode;
00049         int  m_nSize;
00050         bool _init(void *program);
00051         bool findNativeNotFound( void* program );
00052         struct __amx *m_AMX;
00053 public:
00054         void Load (const char *filename);
00055         cell CallFn (const char *fn);
00056         cell CallFn (int fn);
00057         cell CallFn (int fn, int param);
00058         cell CallFn (int fn, int param1, int param2);
00059         cell CallFn (int fn, int param1, int param2, int param3 );
00060         cell CallFn (int fn, int param1, int param2, int param3, int param4 );
00061         cell CallFn (int fn, int param1, int param2, int param3, int param4, int param5);
00062     cell CallFn (int fn, int param1, int param2, int param3, int param4, int param5, int param6);
00063         cell CallFn (int fn, int param1, int param2, int param3, int param4, int param5, int param6, int param7);
00064         cell CallFn (int fn, int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8);
00065         int getFnOrdinal (char *fn);
00066         explicit AmxProgram (const char *filename) { Load(filename); };
00067         AmxProgram () { m_ptrCode = NULL; }
00068         ~AmxProgram () { if (m_ptrCode!= NULL) delete static_cast<char*>(m_ptrCode); }
00069 };
00070 
00071 
00072 /*
00073 \brief Simple function API to small
00074 \author Endymion
00075 \todo remove funcName and add static funcNameMap based on funcidx
00076 */
00077 class AmxFunction {
00078 public:
00079         
00080         static AmxProgram* g_prgOverride; 
00081         
00082 private:
00083         std::string funcName; 
00084         FUNCIDX function; //function index
00085 
00086 public:
00087 
00088         AmxFunction( class AmxFunction& af );
00089         AmxFunction( char* funName );
00090         AmxFunction( FUNCIDX funIdx ); //ndEndy how i can obtain func name from idx?
00091 
00092 
00093         char* getFuncName();
00094         FUNCIDX getFuncIdx();
00095 
00096         void copy( class AmxFunction& af );
00097 
00098         cell Call( );
00099         cell Call( int param );
00100         cell Call( int param1, int param2 );
00101         cell Call( int param1, int param2, int param3 );
00102         cell Call( int param1, int param2, int param3, int param4 );
00103         cell Call( int param1, int param2, int param3, int param4, int param5 );
00104     cell Call( int param1, int param2, int param3, int param4, int param5, int param6 );
00105     cell Call( int param1, int param2, int param3, int param4, int param5, int param6, int params7 );
00106     cell Call( int param1, int param2, int param3, int param4, int param5, int param6, int params7, int params8 );
00107 
00108 
00109 };
00110 
00111 
00112 #ifdef  __cplusplus
00113 extern  "C" {
00114 #endif
00115 
00116 
00117         extern  char g_cAmxPrintBuffer[2000];
00118         extern  int  g_nAmxPrintPtr;
00119 
00120 #ifdef  __cplusplus
00121 }
00122 #endif
00123 
00125 // HERE THE OVERRIDE PART OF CODE :) - as always by xan :)
00127 
00128 #define AMX_NONE 0
00129 #define AMX_BEFORE 1
00130 #define AMX_AFTER 2
00131 #define AMX_FRAME 3
00132 #define AMX_SKIP 4
00133 #define AMX_BYPASS 5
00134 
00135 
00140 class AmxOverride {
00141         char *m_function;
00142         int   m_ordinal;
00143         int       m_mode;
00144 public: 
00145         bool Exec (int moment);
00146         bool Exec (int moment, int sock);
00147         bool ExecTarget(int moment, int sock);
00148         int  getOrdinal (void) {return m_ordinal; };
00149         AmxOverride(); 
00150         ~AmxOverride(); 
00151         void Load (char *fname);
00152         void Parse (char *line);
00153 };
00154 
00155 #define AMX_MAXTYPE 10
00156 #define AMX_MAXNUMBER 8192
00157 
00158 extern AmxOverride g_Scripts[AMX_MAXTYPE][AMX_MAXNUMBER];
00159 
00160 #define AMXEXEC(TYPE,NUMBER,RET,MOMENT) { if (g_Scripts[TYPE][NUMBER].Exec(MOMENT)) return RET; }
00161 #define AMXEXECV(TYPE,NUMBER,MOMENT) { if (g_Scripts[TYPE][NUMBER].Exec(MOMENT)) return; }
00162 #define AMXEXECS(SOCKET,TYPE,NUMBER,RET,MOMENT) { if (g_Scripts[TYPE][NUMBER].Exec(MOMENT,SOCKET)) return RET; }
00163 #define AMXEXECSV(SOCKET,TYPE,NUMBER,MOMENT) { if (g_Scripts[TYPE][NUMBER].Exec(MOMENT,SOCKET)) return; }
00164 #define AMXEXECSVNR(SOCKET,TYPE,NUMBER,MOMENT) { g_Scripts[TYPE][NUMBER].Exec(MOMENT,SOCKET); }
00165 #define AMXEXECSVTARGET(SOCKET,TYPE,NUMBER,MOMENT) { if (g_Scripts[TYPE][NUMBER].ExecTarget(MOMENT,SOCKET)) return; }
00166 
00167 
00168 #define AMXT_SKITARGS 0
00169 #define AMXT_SKILLS 1
00170 #define AMXT_SPEECH 2
00171 #define AMXT_NETRCV 3
00172 #define AMXT_TRIGGERS 4
00173 #define AMXT_MAGICSELECT 5
00174 #define AMXT_MAGICCAST 6
00175 #define AMXT_SPECIALS 7
00176 #define AMXT_GMCMD 8
00177 
00178 void LoadOverrides (void);
00179 
00180 extern bool g_bByPass;
00181 
00182 
00183 #endif //__AMXSCRIPT_H__
SourceForge.net Logo