/*----------------------------------------------------------------------------*- ============================== y_als - Useful codes for ALS ============================== Description: Provides a number of macros for making ALS (Advanced Library System) callback hooking simpler. Legal: Version: MPL 1.1 The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is the SA:MP script information include. The Initial Developer of the Original Code is Alex "Y_Less" Cole. Portions created by the Initial Developer are Copyright (C) 2008 the Initial Developer. All Rights Reserved. Contributors: ZeeX, koolk Thanks: Peter, Cam - Support. ZeeX - Very productive conversations. koolk - IsPlayerinAreaEx code. TheAlpha - Danish translation. breadfish - German translation. Fireburn - Dutch translation. yom - French translation. 50p - Polish translation. Zamaroht - Spanish translation. Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes for me to strive to better. Pixels^ - Running XScripters where the idea was born. Matite - Pestering me to release it and using it. Very special thanks to: Thiadmer - PAWN. Kye/Kalcor - SA:MP. SA:MP Team past, present and future - SA:MP. Version: 1.0 Changelog: 21/10/10: First version -*----------------------------------------------------------------------------*/ #include // Allow multiple inclusions. #undef _inc_y_als #if !defined _Y_ALS_INCLUDED // This is an include guard with a purpose! #include #include enum ALS { Bit:ALS_OnGameModeInit, Bit:ALS_OnGameModeExit, Bit:ALS_OnFilterScriptInit, Bit:ALS_OnFilterScriptExit, Bit:ALS_OnPlayerConnect, Bit:ALS_OnPlayerDisconnect, Bit:ALS_OnPlayerSpawn, Bit:ALS_OnPlayerDeath, Bit:ALS_OnVehicleSpawn, Bit:ALS_OnVehicleDeath, Bit:ALS_OnPlayerText, Bit:ALS_OnPlayerCommandText, Bit:ALS_OnPlayerRequestClass, Bit:ALS_OnPlayerEnterVehicle, Bit:ALS_OnPlayerExitVehicle, Bit:ALS_OnPlayerStateChange, Bit:ALS_OnPlayerEnterCheckpoint, Bit:ALS_OnPlayerLeaveCheckpoint, Bit:ALS_OnPlayerEnterRaceCheckpoint, Bit:ALS_OnPlayerLeaveRaceCheckpoint, Bit:ALS_OnRconCommand, Bit:ALS_OnPlayerRequestSpawn, Bit:ALS_OnObjectMoved, Bit:ALS_OnPlayerObjectMoved, Bit:ALS_OnPlayerPickUpPickup, Bit:ALS_OnVehicleMod, Bit:ALS_OnEnterExitModShop, Bit:ALS_OnVehiclePaintjob, Bit:ALS_OnVehicleRespray, Bit:ALS_OnVehicleDamageStatusUpdate, Bit:ALS_OnPlayerSelectedMenuRow, Bit:ALS_OnPlayerExitedMenu, Bit:ALS_OnPlayerInteriorChange, Bit:ALS_OnPlayerKeyStateChange, Bit:ALS_OnRconLoginAttempt, Bit:ALS_OnPlayerUpdate, Bit:ALS_OnPlayerStreamIn, Bit:ALS_OnPlayerStreamOut, Bit:ALS_OnVehicleStreamIn, Bit:ALS_OnVehicleStreamOut, Bit:ALS_OnDialogResponse, Bit:ALS_OnPlayerClickPlayer } #define ALS_DATA<> static stock BitArray:gs_ALS<_:ALS>; #define ALS_DETECT<%0> if(funcidx(#ALS_PREFIX"_On"#%0)!=-1)Bit_Let(gs_ALS,_:ALS_On%0); //#define ALS_DETECT_SHORT if(funcidx(#ALS_PREFIX"_"#%0)!=-1)Bit_Let(gs_ALS,_:ALS_On%0); //#define ALS_CALL_INT<%0,%2>(%3) return Bit_GetBit(Bit:gs_ALS,_:ALS_On%0)?P@(#ALS_PREFIX"_On"#%0,#%2#x,%3):1; #define ALS_C_INT<%0,%1,%2>(%3) return Bit_GetBit(Bit:gs_ALS,_:ALS_On%0)?P@(#ALS_PREFIX"_On"#%0,#%2#x,%3):%1; #define ALS_F_INT<%0>(%1) forward On%0(%1); // Forward declarations. #define ALS_F_GameModeInit ALS_F_INT() #define ALS_F_GameModeExit ALS_F_INT() #define ALS_F_FilterScriptInit ALS_F_INT() #define ALS_F_FilterScriptExit ALS_F_INT() #define ALS_F_PlayerConnect ALS_F_INT(playerid) #define ALS_F_PlayerDisconnect ALS_F_INT(playerid,reason) #define ALS_F_PlayerSpawn ALS_F_INT(playerid) #define ALS_F_PlayerDeath ALS_F_INT(playerid,killerid,reason) #define ALS_F_VehicleSpawn ALS_F_INT(vehicleid) #define ALS_F_VehicleDeath ALS_F_INT(vehicleid,killerid) #define ALS_F_PlayerText ALS_F_INT(playerid,text[]) #define ALS_F_PlayerCommandText ALS_F_INT(playerid,cmdtext[]) #define ALS_F_PlayerRequestClass ALS_F_INT(playerid,classid) #define ALS_F_PlayerEnterVehicle ALS_F_INT(playerid,vehicleid,ispassenger) #define ALS_F_PlayerExitVehicle ALS_F_INT(playerid,vehicleid) #define ALS_F_PlayerStateChange ALS_F_INT(playerid,newstate,oldstate) #define ALS_F_PlayerEnterCheckpoint ALS_F_INT(playerid) #define ALS_F_PlayerLeaveCheckpoint ALS_F_INT(playerid) #define ALS_F_PlayerEnterRaceCheckpoint ALS_F_INT(playerid) #define ALS_F_PlayerLeaveRaceCheckpoint ALS_F_INT(playerid) #define ALS_F_RconCommand ALS_F_INT(cmd[]) #define ALS_F_PlayerRequestSpawn ALS_F_INT(playerid) #define ALS_F_ObjectMoved ALS_F_INT(objectid) #define ALS_F_PlayerObjectMoved ALS_F_INT(playerid,objectid) #define ALS_F_PlayerPickUpPickup ALS_F_INT(playerid,pickupid) #define ALS_F_VehicleMod ALS_F_INT(playerid,vehicleid,componentid) #define ALS_F_EnterExitModShop ALS_F_INT(playerid,enterexit,interiorid) #define ALS_F_VehiclePaintjob ALS_F_INT(playerid,vehicleid,paintjobid) #define ALS_F_VehicleRespray ALS_F_INT(playerid,vehicleid,color1,color2) #define ALS_F_VehicleDamageStatusUpdate ALS_F_INT(playerid,vehicleid) #define ALS_F_PlayerSelectedMenuRow ALS_F_INT(playerid,row) #define ALS_F_PlayerExitedMenu ALS_F_INT(playerid) #define ALS_F_PlayerInteriorChange ALS_F_INT(playerid,newinteriorid,oldinteriorid) #define ALS_F_PlayerKeyStateChange ALS_F_INT(playerid,newkeys,oldkeys) #define ALS_F_RconLoginAttempt ALS_F_INT(ip[],password[],success) #define ALS_F_PlayerUpdate ALS_F_INT(playerid) #define ALS_F_PlayerStreamIn ALS_F_INT(playerid,forplayerid) #define ALS_F_PlayerStreamOut ALS_F_INT(playerid,forplayerid) #define ALS_F_VehicleStreamIn ALS_F_INT(vehicleid,forplayerid) #define ALS_F_VehicleStreamOut ALS_F_INT(vehicleid,forplayerid) #define ALS_F_DialogResponse ALS_F_INT(playerid,dialogid,response,listitem,inputtext[]) #define ALS_F_PlayerClickPlayer ALS_F_INT(playerid,clickedplayerid,source) // Chain call declarations. #define ALS_C_GameModeInit ALS_C_INT() #define ALS_C_GameModeExit ALS_C_INT() #define ALS_C_FilterScriptInit ALS_C_INT() #define ALS_C_FilterScriptExit ALS_C_INT() #define ALS_C_PlayerConnect ALS_C_INT(playerid) #define ALS_C_PlayerDisconnect ALS_C_INT(playerid,reason) #define ALS_C_PlayerSpawn ALS_C_INT(playerid) #define ALS_C_PlayerDeath ALS_C_INT(playerid,killerid,reason) #define ALS_C_VehicleSpawn ALS_C_INT(vehicleid) #define ALS_C_VehicleDeath ALS_C_INT(vehicleid,killerid) #define ALS_C_PlayerText ALS_C_INT(playerid,text) #define ALS_C_PlayerCommandText ALS_C_INT(playerid,cmdtext) #define ALS_C_PlayerRequestClass ALS_C_INT(playerid,classid) #define ALS_C_PlayerEnterVehicle ALS_C_INT(playerid,vehicleid,ispassenger) #define ALS_C_PlayerExitVehicle ALS_C_INT(playerid,vehicleid) #define ALS_C_PlayerStateChange ALS_C_INT(playerid,newstate,oldstate) #define ALS_C_PlayerEnterCheckpoint ALS_C_INT(playerid) #define ALS_C_PlayerLeaveCheckpoint ALS_C_INT(playerid) #define ALS_C_PlayerEnterRaceCheckpoint ALS_C_INT(playerid) #define ALS_C_PlayerLeaveRaceCheckpoint ALS_C_INT(playerid) #define ALS_C_RconCommand ALS_C_INT(cmd) #define ALS_C_PlayerRequestSpawn ALS_C_INT(playerid) #define ALS_C_ObjectMoved ALS_C_INT(objectid) #define ALS_C_PlayerObjectMoved ALS_C_INT(playerid,objectid) #define ALS_C_PlayerPickUpPickup ALS_C_INT(playerid,pickupid) #define ALS_C_VehicleMod ALS_C_INT(playerid,vehicleid,componentid) #define ALS_C_EnterExitModShop ALS_C_INT(playerid,enterexit,interiorid) #define ALS_C_VehiclePaintjob ALS_C_INT(playerid,vehicleid,paintjobid) #define ALS_C_VehicleRespray ALS_C_INT(playerid,vehicleid,color1,color2) #define ALS_C_VehicleDamageStatusUpdate ALS_C_INT(playerid,playerid) #define ALS_C_PlayerSelectedMenuRow ALS_C_INT(playerid,row) #define ALS_C_PlayerExitedMenu ALS_C_INT(playerid) #define ALS_C_PlayerInteriorChange ALS_C_INT(playerid,newinteriorid,oldinteriorid) #define ALS_C_PlayerKeyStateChange ALS_C_INT(playerid,newkeys,oldkeys) #define ALS_C_RconLoginAttempt ALS_C_INT(ip,password,success) #define ALS_C_PlayerUpdate ALS_C_INT(playerid) #define ALS_C_PlayerStreamIn ALS_C_INT(playerid,forplayerid) #define ALS_C_PlayerStreamOut ALS_C_INT(playerid,forplayerid) #define ALS_C_VehicleStreamIn ALS_C_INT(vehicleid,forplayerid) #define ALS_C_VehicleStreamOut ALS_C_INT(vehicleid,forplayerid) //#define ALS_C_DialogResponse ALS_C_INT(playerid,dialogid,response,listitem,inputtext) #define ALS_C_PlayerClickPlayer ALS_C_INT(playerid,clickedplayerid,source) #define ALS_C_DialogResponse if(inputtext[0]){ALS_C_INT(playerid,dialogid,response,listitem,inputtext)}else{ALS_C_INT(playerid,dialogid,response,listitem,NULL)} #define ALS_CALL<%0> ALS_C_%0 #define ALS_FORWARD<%0> ALS_F_%0 #define _Y_ALS_INCLUDED #endif #if !defined ALS_PREFIX //#error You must define a callback prefix before including y_als. #define ALS_PREFIX Mode #endif