| padilha007 |
08-04-2010 03:41 |
Player In Zone
I made this plugin to check if player is in the zone. But some times the plugin fail, i dont have any ideia whats is the problem.
Tnx in advance.
PHP Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx> #include <amxmisc> #include <hamsandwich>
#define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "author"
#define ZonesMax 15 #define TASK_ID 1234
new ZonaFreeDayOne[ZonesMax][3]; new ZonaFreeDayTwo[ZonesMax][3];
new ZonaFreeDayAtual;
new sprite_zbeam;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd( "say /fdz", "clearyzona" ); RegisterHam( Ham_TakeDamage , "player" , "fwd_HamTake", 0); set_task(1.0, "PutVisual", TASK_ID, _, _, "b") }
public plugin_precache() { sprite_zbeam = precache_model("sprites/zbeam4.spr"); }
public fwd_HamTake( iClient, iInflictor, iAttacker, Float:fDamage, m_Damagebits ) { if( is_user_connected( iClient ) ) { if( !get_user_in_zone( iAttacker ) ) return HAM_SUPERCEDE; } return HAM_IGNORED; }
stock get_user_in_zone( id ) { new PlayerOrigem[3]; get_user_origin(id, PlayerOrigem, 0); for( new i = 0; i < ZonesMax; i++ ) { if( ZonaFreeDayOne[i][0] && ZonaFreeDayTwo[i][0] ) { if( PlayerOrigem[0] <= ZonaFreeDayOne[i][0] && PlayerOrigem[0] >= ZonaFreeDayTwo[i][0] ) { if( PlayerOrigem[1] <= ZonaFreeDayOne[i][1] && PlayerOrigem[1] >= ZonaFreeDayTwo[i][1] ) return 1; if( PlayerOrigem[1] >= ZonaFreeDayOne[i][1] && PlayerOrigem[1] <= ZonaFreeDayTwo[i][1] ) return 1; } } } return 0; }
public clearyzona(id) { new menu = menu_create("[ Clear Zone ]", "menu_fdzn"); menu_additem(menu, "\w Add Save Zone" , "1", 0); menu_additem(menu, "\w Remove Save Zones" , "2", 0); menu_additem(menu, "\w Exit" , "3", 0); menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER); menu_display(id, menu, 0); return PLUGIN_HANDLED; }
public menu_fdzn(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
new data[6], iName[64], iOrigin[3]; new access, callback; menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
switch(key) { case 1: { if( !ZonaFreeDayAtual ) ZonaFreeDayAtual = GetEmptyBaseIndex(); if( !ZonaFreeDayOne[ZonaFreeDayAtual][0] || !ZonaFreeDayOne[ZonaFreeDayAtual][1] || !ZonaFreeDayOne[ZonaFreeDayAtual][2] ) { get_user_origin(id, iOrigin, 0); ZonaFreeDayOne[ZonaFreeDayAtual][0] = iOrigin[0]; ZonaFreeDayOne[ZonaFreeDayAtual][1] = iOrigin[1]; ZonaFreeDayOne[ZonaFreeDayAtual][2] = iOrigin[2]; } else if( !ZonaFreeDayTwo[ZonaFreeDayAtual][0] || !ZonaFreeDayTwo[ZonaFreeDayAtual][1] || !ZonaFreeDayTwo[ZonaFreeDayAtual][2] ) { get_user_origin(id, iOrigin, 0); ZonaFreeDayTwo[ZonaFreeDayAtual][0] = iOrigin[0]; ZonaFreeDayTwo[ZonaFreeDayAtual][1] = iOrigin[1]; ZonaFreeDayTwo[ZonaFreeDayAtual][2] = iOrigin[2]; ZonaFreeDayAtual = 0; } } case 2: SaveZonas(); case 3: return PLUGIN_HANDLED; }
menu_destroy(menu); return PLUGIN_HANDLED; }
public SaveZonas( ) { new file = fopen(gszNewFile, "wt"); new szData[128];
for( new i = 0; i < ZonesMax; i++ ) { if( ZonaFreeDayOne[i][0] && ZonaFreeDayTwo[i][0] ) { formatex(szData, 128, "%d %d %d %d %d %d^n", ZonaFreeDayOne[i][0], ZonaFreeDayOne[i][1], ZonaFreeDayOne[i][2], ZonaFreeDayTwo[i][0], ZonaFreeDayTwo[i][1], ZonaFreeDayTwo[i][2]); fputs(file, szData); } }
fclose(file); }
public LoadZonas( ) { new Entidade; new O1[16], O2[16], O3[16], O4[16], O5[16], O6[16]; for ( new a = 0; a < file_size ( gszNewFile, 1 ); a ++ ) { new szText [ 64 ] new iLen read_file ( gszNewFile, a, szText, sizeof ( szText ) - 1, iLen )
if ( ( szText [ 0 ] != ';' ) && (szText [ 0 ] != '/' ) ) { Entidade = GetEmptyBaseIndex(); parse(szText, O1, 16, O2, 16, O3, 16, O4, 16, O5, 16, O6, 16); ZonaFreeDayOne[Entidade][0] = str_to_num(O1); ZonaFreeDayOne[Entidade][1] = str_to_num(O2); ZonaFreeDayOne[Entidade][2] = str_to_num(O3); ZonaFreeDayTwo[Entidade][0] = str_to_num(O4); ZonaFreeDayTwo[Entidade][1] = str_to_num(O5); ZonaFreeDayTwo[Entidade][2] = str_to_num(O6); } } }
GetEmptyBaseIndex() { for( new i = 1; i < ZonesMax; i++ ) { if( !ZonaFreeDayOne[i][0] && !ZonaFreeDayTwo[i][0] ) { return i; } } return 0; }
public PutVisual() { for( new i = 1; i < ZonesMax; i++ ) { for(new j = 1; j <= 4; j++) { if( ZonaFreeDayOne[i][0] && ZonaFreeDayTwo[i][0] ) { message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(0) switch( j ) { case 1: { write_coord(ZonaFreeDayOne[i][0]) write_coord(ZonaFreeDayOne[i][1]) write_coord(ZonaFreeDayOne[i][2]) write_coord(ZonaFreeDayOne[i][0]) write_coord(ZonaFreeDayTwo[i][1]) write_coord(ZonaFreeDayTwo[i][2]) } case 2: { write_coord(ZonaFreeDayTwo[i][0]) write_coord(ZonaFreeDayOne[i][1]) write_coord(ZonaFreeDayOne[i][2]) write_coord(ZonaFreeDayTwo[i][0]) write_coord(ZonaFreeDayTwo[i][1]) write_coord(ZonaFreeDayTwo[i][2]) } case 3: { write_coord(ZonaFreeDayOne[i][0]) write_coord(ZonaFreeDayOne[i][1]) write_coord(ZonaFreeDayOne[i][2]) write_coord(ZonaFreeDayTwo[i][0]) write_coord(ZonaFreeDayOne[i][1]) write_coord(ZonaFreeDayTwo[i][2]) } case 4: { write_coord(ZonaFreeDayOne[i][0]) write_coord(ZonaFreeDayTwo[i][1]) write_coord(ZonaFreeDayOne[i][2]) write_coord(ZonaFreeDayTwo[i][0]) write_coord(ZonaFreeDayTwo[i][1]) write_coord(ZonaFreeDayTwo[i][2]) } } write_short(sprite_zbeam) write_byte(0) write_byte(0) write_byte(30) write_byte(15) write_byte(0) write_byte(255) write_byte(0) write_byte(0) write_byte(100) write_byte(0) message_end() } } } }
|