static cell AMX_NATIVE_CALL get_user_hitzones(AMX *amx, cell *params) // get_user_hitzones(index, target); = 2 arguments { int shooter = params[1]; CHECK_PLAYER(shooter); int target = params[2]; CHECK_PLAYER(target); return g_bodyhits[shooter][target]; }
// wid,att,vic,dmg,hp=0 static cell AMX_NATIVE_CALL cwpn_dmg(AMX *amx, cell *params) { int weapon = params[1]; // only for custom weapons if(weapon < DODMAX_WEAPONS-DODMAX_CUSTOMWPNS) { MF_LogError(amx, AMX_ERR_NATIVE, "Invalid custom weapon id %d", weapon); return 0; } int att = params[2]; CHECK_PLAYER(params[2]); int vic = params[3]; CHECK_PLAYER(params[3]); int dmg = params[4]; if(dmg<1) { MF_LogError(amx, AMX_ERR_NATIVE, "Invalid damage %d", dmg); return 0; } int aim = params[5]; if(aim < 0 || aim > 7) { MF_LogError(amx, AMX_ERR_NATIVE, "Invalid aim %d", aim); return 0; } CPlayer* pAtt = GET_PLAYER_POINTER_I(att); CPlayer* pVic = GET_PLAYER_POINTER_I(vic); pVic->pEdict->v.dmg_inflictor = NULL; if(pAtt->index != pVic->index) pAtt->saveHit(pVic , weapon , dmg, aim); if(!pAtt) pAtt = pVic; int TA = 0; if((pVic->pEdict->v.team == pAtt->pEdict->v.team) && (pVic != pAtt)) TA = 1; MF_ExecuteForward(iFDamage,pAtt->index, pVic->index, dmg, weapon, aim, TA); if(pVic->IsAlive()) return 1; pAtt->saveKill(pVic,weapon,( aim == 1 ) ? 1:0 ,TA); MF_ExecuteForward(iFDeath,pAtt->index, pVic->index, weapon, aim, TA); return 1; }
// ######## Natives: static cell AMX_NATIVE_CALL get_client_listening(AMX *amx, cell *params) // get_client_listening(receiver, sender); = 2 params { // Gets who can listen to who. // params[1] = receiver // params[2] = sender // Check receiver and sender validity. CHECK_PLAYER(params[1]); CHECK_PLAYER(params[2]); // GET- AND SETCLIENTLISTENING returns "qboolean", an int, probably 0 or 1... return GETCLIENTLISTENING(params[1], params[2]); }
static cell AMX_NATIVE_CALL esf_get_playerclass(AMX *amx, cell *params) // esf_get_playerclass(index); = 1 arg { // Get the player class // params[1] = index // --------------------- // If playerclass == /* ESF_CLASS_NONE = 0, ESF_CLASS_BUU = 1, ESF_CLASS_GOKU = 2, ESF_CLASS_GOHAN = 3, ESF_CLASS_KRILLIN = 4, ESF_CLASS_FRIEZA = 5, ESF_CLASS_PICCOLO = 6, ESF_CLASS_TRUNKS = 7, ESF_CLASS_VEGETA = 8, ESF_CLASS_CELL = 9 */ // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return pPlayer->v.playerclass; }
static cell AMX_NATIVE_CALL reset_user_wstats(AMX *amx, cell *params) /* 6 param */ { int index = params[1]; CHECK_PLAYER(index); GET_PLAYER_POINTER_I(index)->restartStats(); return 1; }
/* We want to get just the weapon of whichever type that the player is on him */ static cell AMX_NATIVE_CALL dod_weapon_type(AMX *amx, cell *params) /* 2 params */ { int index = params[1]; int type = params[2]; CHECK_PLAYER(index); if(type < DODWT_PRIMARY || type > DODWT_OTHER) { MF_LogError(amx, AMX_ERR_NATIVE, "Invalid weapon type id %d", type); return 0; } CPlayer* pPlayer = GET_PLAYER_POINTER_I(index); if(pPlayer->ingame) { int weaponsbit = pPlayer->pEdict->v.weapons & ~(1<<31); // don't count last element for(int x = 1; x < MAX_WEAPONS; ++x) { if((weaponsbit&(1<<x)) > 0) { if(weaponData[x].type == type) return x; } } } return 0; }
// player,wid static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) { int index = params[1]; CHECK_PLAYER(index); CPlayer* pPlayer = GET_PLAYER_POINTER_I(index); int iTeam = pPlayer->pEdict->v.team; if ( params[3] ) { const char *szTeam = ""; switch(iTeam) { case 1: szTeam = "Allies"; break; case 2: szTeam = "Axis"; break; } MF_SetAmxString(amx,params[2],szTeam,params[3]); } return iTeam; }
static cell AMX_NATIVE_CALL set_user_rendering(AMX *amx, cell *params) // set_user_rendering(index, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16); = 7 arguments { // Sets user rendering. // params[1] = index // params[2] = fx // params[3] = r // params[4] = g // params[5] = b // params[6] = render // params[7] = amount // Check index CHECK_PLAYER(params[1]); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict(params[1]); pPlayer->v.renderfx = params[2]; Vector newVector = Vector(float(params[3]), float(params[4]), float(params[5])); pPlayer->v.rendercolor = newVector; pPlayer->v.rendermode = params[6]; pPlayer->v.renderamt = params[7]; return 1; }
static cell AMX_NATIVE_CALL set_client_listening(AMX *amx, cell *params) // set_client_listening(receiver, sender, listen); = 3 params { // Sets who can listen to who. // params[1] = receiver // params[2] = sender // params[3] = listen // Check receiver and sender validity. CHECK_PLAYER(params[1]); CHECK_PLAYER(params[2]); // Make a check on params[3] here later, and call run time error when it's wrong. // To do: find out the possible values to set (0, 1?) // GET- AND SETCLIENTLISTENING returns "qboolean", an int, probably 0 or 1... return SETCLIENTLISTENING(params[1], params[2], params[3]); }
static cell AMX_NATIVE_CALL set_user_hitzones(AMX *amx, cell *params) // set_user_hitzones(index = 0, target = 0, body = 255); = 3 arguments { // Sets user hitzones. // params[1] = the one(s) who shoot(s), shooter int shooter = params[1]; // params[2] = the one getting hit int gettingHit = params[2]; // params[3] = specified hit zones int hitzones = params[3]; //set_user_hitzones(id, 0, 0) // Makes ID not able to shoot EVERYONE - id can shoot on 0 (all) at 0 //set_user_hitzones(0, id, 0) // Makes EVERYONE not able to shoot ID - 0 (all) can shoot id at 0 if (shooter == 0 && gettingHit == 0) { for (int i = 1; i <= gpGlobals->maxClients; i++) { for (int j = 1; j <= gpGlobals->maxClients; j++) { g_bodyhits[i][j] = hitzones; } //g_zones_toHit[i] = hitzones; //g_zones_getHit[i] = hitzones; } } else if (shooter == 0 && gettingHit != 0) { // "All" shooters, target (gettingHit) should be existing player id CHECK_PLAYER(gettingHit); // Where can all hit gettingHit? for (int i = 1; i <= gpGlobals->maxClients; i++) g_bodyhits[i][gettingHit] = hitzones; } else if (shooter != 0 && gettingHit == 0) { // Shooter can hit all in bodyparts. CHECK_PLAYER(shooter); for (int i = 1; i <= gpGlobals->maxClients; i++) g_bodyhits[shooter][i] = hitzones; } else { // Specified, where can player A hit player B? CHECK_PLAYER(shooter); CHECK_PLAYER(gettingHit); g_bodyhits[shooter][gettingHit] = hitzones; } return 1; }
// player,wid static cell AMX_NATIVE_CALL dod_get_user_team(AMX *amx, cell *params) { int index = params[1]; CHECK_PLAYER(index); CPlayer* pPlayer = GET_PLAYER_POINTER_I(index); return pPlayer->pEdict->v.team; }
static cell AMX_NATIVE_CALL get_user_pronestate(AMX *amx, cell *params) { int index = params[1]; CHECK_PLAYER(index); CPlayer* pPlayer = GET_PLAYER_POINTER_I(index); if (pPlayer->ingame) return pPlayer->pEdict->v.iuser3; return 0; }
static cell AMX_NATIVE_CALL get_user_score(AMX *amx, cell *params) { int index = params[1]; CHECK_PLAYER(index); CPlayer* pPlayer = GET_PLAYER_POINTER_I(index); if (pPlayer->ingame) return (cell)pPlayer->savedScore; return -1; }
static cell AMX_NATIVE_CALL esf_get_acpl(AMX *amx, cell *params) // esf_get_acpl(index); = 1 arg { // Get user actual powerlevel // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_ACPL_OFFSET); }
static cell AMX_NATIVE_CALL esf_get_freefall(AMX *amx, cell *params) // esf_get_freefall(index); = 1 arg { // Client is in freefall like after jumping of ground // params[1] = index // Check index CHECK_PLAYER(params[ 1 ]); // Fetch player pointer edict_t* pPlayer = MF_GetPlayerEdict(params[ 1 ]); return *((int *)pPlayer->pvPrivateData + ESFX_FREEFALL_OFFSET); }
static cell AMX_NATIVE_CALL esf_get_powerup(AMX *amx, cell *params) // esf_get_powerup(index); = 1 arg { // Check if player is charging his power // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_POWERUP_OFFSET); }
static cell AMX_NATIVE_CALL dod_clear_model(AMX *amx, cell *params) // player { int index = params[1]; CHECK_PLAYER(index); CPlayer* pPlayer = GET_PLAYER_POINTER_I(index); if(!pPlayer->ingame) return false; pPlayer->clearModel(); return true; }
static cell AMX_NATIVE_CALL esf_get_user_deaths(AMX *amx, cell *params) // esf_get_user_deaths(index); = 1 arg { // Return player deaths // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_DEATHS_OFFSET); // offset by ConnorMcLeod }
static cell AMX_NATIVE_CALL esf_get_wallground(AMX *amx, cell *params) // esf_get_wallground(index); = 1 arg { // Client has been thrown into Wall / on Ground // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_WALLGND_OFFSET); }
static cell AMX_NATIVE_CALL esf_get_block(AMX *amx, cell *params) // esf_get_block(index); = 1 arg { // Check if player is blocking an attack // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_BLOCK_OFFSET); }
static cell AMX_NATIVE_CALL esf_get_advancedmelee(AMX *amx, cell *params) // esf_get_advancedmelee(index); = 1 arg { // Check if player is in advanced melee // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_ADVMELEE_OFFSET); }
static cell AMX_NATIVE_CALL esf_get_swooping(AMX *amx, cell *params) // esf_get_swooping(index); = 1 arg { // Check if player is currently swoopin' // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_SWOOPING_OFFSET); }
static cell AMX_NATIVE_CALL esf_get_fly(AMX *amx, cell *params) // esf_get_fly(index); = 1 arg { // Check is player is flying // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_FLY_OFFSET ); }
static cell AMX_NATIVE_CALL esf_get_maxhealth(AMX *amx, cell *params) // esf_get_maxhealth(index); = 1 arg { // Get player maxhealth // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_MAXHEALTH_OFFSET); }
static cell AMX_NATIVE_CALL get_user_noclip(AMX *amx, cell *params) // get_user_noclip(index); = 1 argument { // Gets user noclip. // params[1] = index // Check index CHECK_PLAYER(params[1]); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict(params[1]); return pPlayer->v.movetype == MOVETYPE_NOCLIP; }
static cell AMX_NATIVE_CALL esf_get_throw(AMX *amx, cell *params) // esf_get_throw(index); = 1 arg { // Client is in Throw // params[1] = index // Check index CHECK_PLAYER(params[ 1 ]); // Fetch player pointer edict_t* pPlayer = MF_GetPlayerEdict(params[ 1 ]); return *((int *)pPlayer->pvPrivateData + ESFX_THROW_OFFSET); }
static cell AMX_NATIVE_CALL esf_get_swoopspeed(AMX *amx, cell *params) // esf_get_swoopspeed(index); = 1 arg { // Get player swoopspeed // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return pPlayer->v.fuser1; }
static cell AMX_NATIVE_CALL esf_get_beamjump(AMX *amx, cell *params) // esf_get_beamjump(index); = 1 arg { // Get when a player performs a BeamJump // params[1] = index // Check index CHECK_PLAYER(params[ 1 ]); // Fetch player pointer edict_t* pPlayer = MF_GetPlayerEdict(params[ 1 ]); return pPlayer->v.movetype == 15; }
static cell AMX_NATIVE_CALL esf_get_ki(AMX* amx, cell* params) // esf_get_ki(index); = 1 arg { // Get player kinetik energy (KI) // params[1] = index // Check index CHECK_PLAYER(params[ 1 ]); // Fetch player pointer edict_t* pPlayer = MF_GetPlayerEdict(params[ 1 ]); return pPlayer->v.fuser4; }
static cell AMX_NATIVE_CALL esf_get_turbo(AMX *amx, cell *params) // esf_get_turbo(index); = 1 arg { // Check if player has turbo on (T key); // params[1] = index // Check index CHECK_PLAYER( params[ 1 ] ); // Fetch player pointer edict_t *pPlayer = MF_GetPlayerEdict( params[ 1 ] ); return *((int *)pPlayer->pvPrivateData + ESFX_TURBO_OFFSET); }