|
Member
|

05-28-2009
, 13:00
Help with Stealth Block [BCM4]
|
#1
|
Can someone fix that for me?
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fun>
#include <xs>
#pragma semicolon 1
#define OBJECT_BHOP 1
#define OBJECT_BLOCK 2
#define OBJECT_BOOSTBLOCK 3
#define OBJECT_ICEBHOP 4
#define OBJECT_DELAYEDBHOP 5
#define OBJECT_FALLBLOCK 6
#define OBJECT_TELEPORTBLOCK 7
#define OBJECT_FATALISBLOCK 8
#define OBJECT_TINKBLOCK 9
#define OBJECT_MAGICCARPET 10
#define OBJECT_DUCKBLOCK 11
#define OBJECT_SPEEDBLOCK 12
#define OBJECT_SLOWBLOCK 13
#define OBJECT_STEALTHBLOCK 14
#define MODEL_NORMAL 1
#define MODEL_WALLZ 2
#define MODEL_WALLX 3
#define MODEL_WALLY 4
#define MODEL_TINY 5
#define MODEL_TELESTART 6
#define MODEL_TELEDEST 7
#define TASK_ID_FALLBLOCK 101000
#define TASK_ID_RESETVELOCITY 202000
#define TASK_ID_UNSOLID 303000
#define TASK_ID_SOLID 404000
#define TASK_ID_SETVELOCITY 505000
#define TASK_ID_MAXSPEED 606000
#define TASK_ID_GRAB 707000
#define TASK_ID_SHOWXYZ 808000
#define TASK_ID_STEALTH 909000
new const gPLUGIN[] = "BCM";
new const gVERSION[] = "4";
new const gAUTHOR[] = "[email protected]";
new gDir[129] = "addons/amxmodx/data/kzm";
new const gTYPES[][] =
{
"",
"_bhop.",
"_block.",
"_boost.",
"_ice.",
"_delayedbhop.",
"_fall.",
"",
"_fatalis.",
"_tink.",
"_magiccarpet.",
"_duck.",
"_speed.",
"_slow.",
"_stealth."
};
new const gMODELTYPES[][] =
{
"",
"normal",
"wall",
"wall",
"wall",
"tiny",
"blue_",
"orange_"
};
new const gNORMALMODELS[][] =
{
"",
"models/bcm4/bcm4_normal_bhop.mdl",
"models/bcm4/bcm4_normal_block.mdl",
"models/bcm4/bcm4_normal_boost.mdl",
"models/bcm4/bcm4_normal_ice.mdl",
"models/bcm4/bcm4_normal_delayedbhop.mdl",
"models/bcm4/bcm4_normal_fall.mdl",
"",
"models/bcm4/bcm4_normal_fatalis.mdl",
"models/bcm4/bcm4_normal_tink.mdl",
"models/bcm4/bcm4_normal_magiccarpet.mdl",
"models/bcm4/bcm4_normal_duck.mdl",
"models/bcm4/bcm4_normal_speed.mdl",
"models/bcm4/bcm4_normal_slow.mdl",
"models/bcm4/bcm4_normal_stealth.mdl"
};
new const gTINYMODELS[][] =
{
"",
"models/bcm4/bcm4_tiny_bhop.mdl",
"models/bcm4/bcm4_tiny_block.mdl",
"models/bcm4/bcm4_tiny_boost.mdl",
"models/bcm4/bcm4_tiny_ice.mdl",
"models/bcm4/bcm4_tiny_delayedbhop.mdl",
"models/bcm4/bcm4_tiny_fall.mdl",
"",
"models/bcm4/bcm4_tiny_fatalis.mdl",
"models/bcm4/bcm4_tiny_tink.mdl",
"models/bcm4/bcm4_tiny_magiccarpet.mdl",
"models/bcm4/bcm4_tiny_duck.mdl",
"models/bcm4/bcm4_tiny_speed.mdl",
"models/bcm4/bcm4_tiny_slow.mdl",
"models/bcm4/bcm4_tiny_stealth.mdl"
};
new const gWALLMODELS[][] =
{
"",
"models/bcm4/bcm4_wall_bhop.mdl",
"models/bcm4/bcm4_wall_block.mdl",
"models/bcm4/bcm4_wall_boost.mdl",
"models/bcm4/bcm4_wall_ice.mdl",
"models/bcm4/bcm4_wall_delayedbhop.mdl",
"models/bcm4/bcm4_wall_fall.mdl",
"",
"models/bcm4/bcm4_wall_fatalis.mdl",
"models/bcm4/bcm4_wall_tink.mdl",
"models/bcm4/bcm4_wall_magiccarpet.mdl",
"models/bcm4/bcm4_wall_duck.mdl",
"models/bcm4/bcm4_wall_speed.mdl",
"models/bcm4/bcm4_wall_slow.mdl",
"models/bcm4/bcm4_wall_stealth.mdl"
};
new const gTELEPORTMODELS[][] =
{
"models/teleporter_blue_sprites.mdl",
"models/teleporter_orange_rings.mdl"
};
new const gGLOWS[][] =
{
{-1, -1, -1},// NULL
{0, 0, 0}, // BHOP
{0, 255, 0}, // BLOCK
{255, 255, 0}, // BOOSTBLOCK
{0, 255, 255}, // ICEBHOP
{255, 0, 0}, // DELAYEDBHOP 100,0,0
{0, 0, 255}, // FALLBLOCK
{255, 255, 0}, // TELEPORTBLOCK
{255, 255, 255}, // FATALISBLOCK
{148, 0, 211}, // TINKBLOCK
{50, 50, 100}, // MAGICCARPET
{255, 150, 150}, // DUCKBLOCK
{75, 200, 150}, // SPEEDBLOCK
{139, 69, 19}, // SLOWBLOCK
{0, 0, 0} // STEALTHBLOCK
};
new const Float:gMINS[][] =
{
{-1.0, -1.0, -1.0}, // NULL
{-32.0, -32.0, -4.0}, // Normal
{-64.0, -64.0, -4.0}, // Wall Z
{-64.0, -4.0, -64.0}, // Wall X
{-4.0, -64.0, -64.0}, // Wall Y
{-8.0, -8.0, -4.0}, // Tiny
{-16.0, -16.0, -16.0}, // Tele Start
{-16.0, -16.0, -16.0} // NULL (Tele Dest)
};
new const Float:gMAXS[][] =
{
{-1.0, -1.0, -1.0}, // NULL
{32.0, 32.0, 4.0}, // Normal
{64.0, 64.0, 4.0}, // Wall Z
{64.0, 4.0, 64.0}, // Wall X
{4.0, 64.0, 64.0}, // Wall Y
{8.0, 8.0, 4.0}, // Tiny
{16.0, 16.0, 16.0}, // Tele Start
{16.0, 16.0, 16.0} // Tele Dest
};
new const gOBJECTNAMES[][] =
{
"",
"Bhop - Regular Bhop",
"Block - Regular Block",
"Boost Block - Boosts you in the air",
"Ice Bhop - No slowdown when landing",
"Delayed Bhop - 1 sec disappear delay",
"Fall Block - No fall damage",
"Teleport",
"Fatalis Block - Damage 10hp/sec",
"Tink Block - Heal 2hp/sec",
"Magic Carpet Block - CT's can ride on it",
"Duck Block - Spams duck repeatedly",
"Speed Block - Gives speed boost",
"Slow Block - Slows you after 3 seconds",
"Stealth Block"
};
new gMainMenu;
new gBuildMenu;
new gMoveMenu;
new gModelMenu;
new gMsgSayText;
new gMaxPlayers;
new Float:gSlowedTime[33];
new gEntSlowed[33];
new gCvarLimit;
new gCvarAccessBuild;
new gCvarAccessMove;
new gCvarAccessDelete;
new gCvarAccessNoclip;
new gCvarAccessLoad;
new gCvarAccessNewConfig;
new gCvarAccessSave;
new gCvarAccessMagicCarpet;
new Float:gfStealthNextUse[33];
new Float:gfStealthTimeOut[33];
new Float:gSetVelocity[33][3];
new gChoseModel[33];
new gBeamSprite;
new gGrabLength[33];
new gCurConfig[33] = "default";
public plugin_precache()
{
for( new i = 1; i < sizeof(gNORMALMODELS); i++ )
{
if( i != OBJECT_TELEPORTBLOCK )
{
precache_model(gNORMALMODELS[i]);
}
}
for( new i = 1; i < sizeof(gTINYMODELS); i++ )
{
if( i != OBJECT_TELEPORTBLOCK )
{
precache_model(gTINYMODELS[i]);
}
}
for( new i = 1; i < sizeof(gWALLMODELS); i++ )
{
if( i != OBJECT_TELEPORTBLOCK )
{
precache_model(gWALLMODELS[i]);
}
}
for( new i = 0; i < sizeof(gTELEPORTMODELS); i++ )
{
precache_model(gTELEPORTMODELS[i]);
}
gBeamSprite = precache_model("sprites/zbeam4.spr");
return PLUGIN_CONTINUE;
}
public plugin_init()
{
register_plugin(gPLUGIN, gVERSION, gAUTHOR);
gCvarLimit = register_cvar("bcm_limit", "300", 0, 0.0);
register_cvar("bcm4", "kzmed", FCVAR_SERVER|FCVAR_SPONLY, 0.0);
register_cvar("bcm_stealthcooldown", "60.0");
register_cvar("bcm_stealthtime", "20.0");
gCvarAccessBuild = register_cvar("bcm_access_build", "c", FCVAR_SPONLY, 0.0);
gCvarAccessMove = register_cvar("bcm_access_move", "c", FCVAR_SPONLY, 0.0);
gCvarAccessDelete = register_cvar("bcm_access_delete", "c", FCVAR_SPONLY, 0.0);
gCvarAccessNoclip = register_cvar("bcm_access_noclip", "c", FCVAR_SPONLY, 0.0);
gCvarAccessLoad = register_cvar("bcm_access_load", "c", FCVAR_SPONLY, 0.0);
gCvarAccessNewConfig = register_cvar("bcm_access_newconfig", "c", FCVAR_SPONLY, 0.0);
gCvarAccessSave = register_cvar("bcm_access_save", "c", FCVAR_SPONLY, 0.0);
gCvarAccessMagicCarpet = register_cvar("bcm_access_magiccarpet", "c", FCVAR_SPONLY, 0.0);
new szAccessFlag[2];
get_pcvar_string(gCvarAccessBuild, szAccessFlag, 1);
new accessBuild = read_flags(szAccessFlag);
get_pcvar_string(gCvarAccessMove, szAccessFlag, 1);
new accessMove = read_flags(szAccessFlag);
get_pcvar_string(gCvarAccessDelete, szAccessFlag, 1);
new accessDelete = read_flags(szAccessFlag);
get_pcvar_string(gCvarAccessNoclip, szAccessFlag, 1);
new accessNoclip = read_flags(szAccessFlag);
get_pcvar_string(gCvarAccessNewConfig, szAccessFlag, 1);
new accessNewConfig = read_flags(szAccessFlag);
get_pcvar_string(gCvarAccessSave, szAccessFlag, 1);
new accessSave = read_flags(szAccessFlag);
get_pcvar_string(gCvarAccessMagicCarpet, szAccessFlag, 1);
new accessMagicCarpet = read_flags(szAccessFlag);
register_forward(FM_Touch, "fwdTouch", 0);
register_event("HLTV", "msgNewRound", "a", "1=0", "2=0");
register_forward(FM_PlayerPreThink, "fwdPlayerPreThink", 0);
gMsgSayText = get_user_msgid("SayText");
gMaxPlayers = get_maxplayers();
gMainMenu = menu_create("BCM4 by joker.", "mnuMain", 0);
menu_additem(gMainMenu, "Build Menu", "1", 0, -1);
menu_additem(gMainMenu, "Move Menu", "2", 0, -1);
menu_additem(gMainMenu, "Destroy", "3", accessDelete, -1);
menu_additem(gMainMenu, "Noclip", "4", accessNoclip, -1);
menu_additem(gMainMenu, "Load", "5", 0, -1);
menu_additem(gMainMenu, "Save", "6", accessSave, -1);
gBuildMenu = menu_create("Build Menu", "mnuBuild", 0);
menu_additem(gBuildMenu, "Bhop", "1", accessBuild, -1);
menu_additem(gBuildMenu, "Block", "2", accessBuild, -1);
menu_additem(gBuildMenu, "Boost Block", "3", accessBuild, -1);
menu_additem(gBuildMenu, "Ice Bhop", "4", accessBuild, -1);
menu_additem(gBuildMenu, "Delayed Bhop", "5", accessBuild, -1);
menu_additem(gBuildMenu, "Fall Block", "6", accessBuild, -1);
menu_additem(gBuildMenu, "Teleport", "7", accessBuild, -1);
menu_additem(gBuildMenu, "Fatalis Block", "8", accessBuild, -1);
menu_additem(gBuildMenu, "Tink Block", "9", accessBuild, -1);
menu_additem(gBuildMenu, "Magic Carpet", "10", accessMagicCarpet, -1);
menu_additem(gBuildMenu, "Duck Block", "11", accessBuild, -1);
menu_additem(gBuildMenu, "Speed Block", "12", accessBuild, -1);
menu_additem(gBuildMenu, "Slow Block", "13", accessBuild, -1);
menu_additem(gBuildMenu, "Stealth Block", "14", accessBuild, -1);
menu_setprop(gBuildMenu, MPROP_EXITNAME, "Main Menu");
gMoveMenu = menu_create("Move Menu", "mnuMove", 0);
menu_additem(gMoveMenu, "Z+ Green", "1", accessMove, -1);
menu_additem(gMoveMenu, "Z-", "2", accessMove, -1);
menu_additem(gMoveMenu, "X+ Red", "3", accessMove, -1);
menu_additem(gMoveMenu, "X-", "4", accessMove, -1);
menu_additem(gMoveMenu, "Y+ Blue", "5", accessMove, -1);
menu_additem(gMoveMenu, "Y-", "6", accessMove, -1);
menu_additem(gMoveMenu, "Z++", "7", accessMove, -1);
menu_setprop(gMoveMenu, MPROP_EXITNAME, "Main Menu");
gModelMenu = menu_create("Model Menu", "mnuModel", 0);
menu_additem(gModelMenu, "Normal", "1", 0, -1);
menu_additem(gModelMenu, "Wall Z (Green)", "2", 0, -1);
menu_additem(gModelMenu, "Wall X (Red)", "3", 0, -1);
menu_additem(gModelMenu, "Wall Y (Blue)", "4", 0, -1);
menu_additem(gModelMenu, "Tiny", "5", 0, -1);
menu_setprop(gMoveMenu, MPROP_EXITNAME, "Main Menu");
register_clcmd("say /bhopmenu", "cmdBhopMenu", -1, "");
register_clcmd("say /bcm", "cmdBhopMenu", -1, "");
register_clcmd("amx_bcm", "cmdBhopMenu", -1, "");
register_clcmd("bcm_newconfig", "cmdNewConfig", accessNewConfig, "");
register_clcmd("+bcmgrab", "cmdBCMGrabOn", accessMove, "");
register_clcmd("-bcmgrab", "cmdBCMGrabOff", accessMove, "");
register_srvcmd("bcm_backwardscompat2", "fnConvertFrom2", -1, "");
if( !dir_exists(gDir) )
{
mkdir(gDir);
}
add(gDir, 128, "/bcm", 0);
if( !dir_exists(gDir) )
{
mkdir(gDir);
}
new szMap[33];
get_mapname(szMap, 32);
format(gDir, 128, "%s/%s", gDir, szMap);
if( !dir_exists(gDir) )
{
mkdir(gDir);
}
fnBackwardsCompat3();
fnLoad("default");
set_task(2.0, "tskShowObjectInfo", 0, "", 0, "b", 0);
return PLUGIN_CONTINUE;
}
public cmdNewConfig(plr, level, cid)
{
if( !cmd_access(plr, level, cid, 2) )
{
return PLUGIN_HANDLED;
}
new szArg[33];
read_argv(1, szArg, 32);
if( !fnIsStringAlphaNumeric(szArg) )
{
fnGreenChat(plr, "[BCM] Config name must be alphanumeric.");
return PLUGIN_HANDLED;
}
new szPath[129];
format(szPath, 128, "%s/%s.txt", gDir, szArg);
if( !file_exists(szPath) )
{
new f = fopen(szPath, "wt");
fputs(f, "");
fclose(f);
new szName[32];
get_user_name(plr, szName, 32);
fnGreenChat(0, "[BCM] %s created config ^"%s^".", szName, szArg);
}
return PLUGIN_HANDLED;
}
fnBackwardsCompat3()
{
new szPath[129];
format(szPath, 128, "%s.txt", gDir);
if( file_exists(szPath) )
{
new szNewPath[129];
format(szNewPath, 128, "%s/default.txt", gDir);
new szData[129], f = fopen(szPath, "rt"), newf = fopen(szNewPath, "at");
while( !feof(f) )
{
fgets(f, szData, 128);
if( szData[0] == '^0' )
{
continue;
}
fputs(newf, szData);
}
fclose(f);
fclose(newf);
delete_file(szPath);
}
}
public cmdBCMGrabOn(plr, level, cid)
{
if( !cmd_access(plr, level, cid, 1) )
{
return PLUGIN_HANDLED;
}
new ent = fnGetAimEnt(plr);
new type = fnGetObjectType(ent);
if( type )
{
new szEnt[5];
num_to_str(ent, szEnt, 4);
new Float:vPlayerOrigin[3], Float:vEntOrigin[3];
pev(plr, pev_origin, vPlayerOrigin);
pev(ent, pev_origin, vEntOrigin);
gGrabLength[plr] = floatround(vector_distance(vPlayerOrigin, vEntOrigin));
set_task(0.1, "tskGrab", TASK_ID_GRAB + plr, szEnt, 4, "b", 0);
}
return PLUGIN_HANDLED_MAIN;
}
public cmdBCMGrabOff(plr, level, cid)
{
if( !cmd_access(plr, level, cid, 1) )
{
return PLUGIN_HANDLED;
}
remove_task(TASK_ID_GRAB + plr, 0);
return PLUGIN_HANDLED;
}
public tskGrab(const szEnt[], plr)
{
plr -= TASK_ID_GRAB;
static ent;
ent = str_to_num(szEnt);
static Float:vAim[3];
velocity_by_aim(plr, gGrabLength[plr], vAim);
static Float:vOrigin[3];
pev(plr, pev_origin, vOrigin);
vOrigin[0] += vAim[0];
vOrigin[1] += vAim[1];
vOrigin[2] += vAim[2];
fnSetOriginSnap(ent, vOrigin);
return PLUGIN_CONTINUE;
}
public cmdBhopMenu(plr, level, cid)
{
menu_display(plr, gMainMenu, 0);
return PLUGIN_CONTINUE;
}
public mnuMain(plr, menu, item)
{
if( item == MENU_EXIT )
{
return PLUGIN_CONTINUE;
}
new szCmd[3], _access, callback;
menu_item_getinfo(menu, item, _access, szCmd, 2, "", 0, callback);
switch( str_to_num(szCmd) )
{
case 1: // Build
{
menu_display(plr, gModelMenu, 0);
set_task(0.1, "tskShowXYZ", TASK_ID_SHOWXYZ + plr, "", 0, "b", 0);
return PLUGIN_CONTINUE;
}
case 2: // Move
{
menu_display(plr, gMoveMenu, 0);
set_task(0.1, "tskShowXYZ", TASK_ID_SHOWXYZ + plr, "", 0, "b", 0);
return PLUGIN_CONTINUE;
}
case 3: // Delete
{
new ent = fnGetAimEnt(plr);
new type = fnGetObjectType(ent);
if( type )
{
if( type != 99 )
{
engfunc(EngFunc_RemoveEntity, ent);
}
else
{
new szTarget[5];
pev(ent, pev_target, szTarget, 4);
new dest = engfunc(EngFunc_FindEntityByString, -1,
"targetname", szTarget);
engfunc(EngFunc_RemoveEntity, ent);
if( dest )
{
engfunc(EngFunc_RemoveEntity, dest);
}
}
}
}
case 4: // Noclip
{
if( get_user_flags(plr, 0)&ADMIN_KICK ) // quick fix for a bug that only happens on one person's server
{
set_pev(plr, pev_movetype, pev(plr, pev_movetype) == MOVETYPE_WALK ?
MOVETYPE_NOCLIP : MOVETYPE_WALK);
}
}
case 5: // Load
{
new szTitle[49];
format(szTitle, 48, "Load Menu - Current: %s", gCurConfig);
new menu = menu_create(szTitle, "mnuLoad", 0);
new szAccessFlag[2];
get_pcvar_string(gCvarAccessLoad, szAccessFlag, 1);
new accessLoad = read_flags(szAccessFlag);
new dir = open_dir(gDir, "", 0);
new szFileName[65];
while( next_file(dir, szFileName, 64) )
{
if( szFileName[0] == '.' )
{
continue;
}
replace(szFileName, 64, ".txt", "");
menu_additem(menu, szFileName, "", accessLoad, -1);
}
close_dir(dir);
menu_additem(menu, "\rNew Config", "1", 0, -1);
menu_setprop(menu, MPROP_EXITNAME, "Main Menu");
menu_display(plr, menu, 0);
return PLUGIN_CONTINUE;
/*new ent = fnGetAimEnt(plr);
new type = fnGetObjectType(ent);
if( type && type != 99 )
{
new szName[32];
pev(ent, pev_targetname, szName, 31);
if( szName[0] == '^0' )
{
copy(szName, 31, "Unknown");
}
fnGreenChat(plr, "[KzM] Creator: %s", szName);
}
else
{
fnGreenChat(plr, "[KzM] Aim at an object first.");
}*/
}
case 6: // Save
{
new szName[32];
get_user_name(plr, szName, 31);
fnGreenChat(0, "[BCM] %s saved config ^"%s^", %i objects.", szName,
gCurConfig, fnSave());
}
}
menu_display(plr, gMainMenu, 0);
return PLUGIN_CONTINUE;
}
public mnuLoad(plr, menu, item)
{
if( item == MENU_EXIT )
{
menu_destroy(menu);
menu_display(plr, gMainMenu, 0);
return PLUGIN_CONTINUE;
}
new szCmd[2], szItem[33], _access, callback;
menu_item_getinfo(menu, item, _access, szCmd, 1, szItem, 32, callback);
if( str_to_num(szCmd) )
{
fnGreenChat(plr, "[BCM] Type a name for the new config.");
client_cmd(plr, "messagemode bcm_newconfig");
menu_destroy(menu);
menu_display(plr, gMainMenu, 0);
return PLUGIN_CONTINUE;
}
new szName[32];
get_user_name(plr, szName, 32);
fnGreenChat(0, "[BCM] %s loaded config ^"%s^", %i objects.", szName, szItem, fnLoad(szItem));
menu_destroy(menu);
menu_display(plr, gMainMenu, 0);
return PLUGIN_CONTINUE;
}
public mnuBuild(plr, menu, item)
{
if( item == MENU_EXIT )
{
menu_display(plr, gMainMenu, 0);
return PLUGIN_CONTINUE;
}
new szCmd[3], _access, callback;
menu_item_getinfo(menu, item, _access, szCmd, 2, "", 0, callback);
new cmd = str_to_num(szCmd);
if( fnGetObjectCount() >= get_pcvar_num(gCvarLimit) )
{
fnGreenChat(plr, "[BCM] Object limit of %i reached.", get_pcvar_num(gCvarLimit));
menu_display(plr, gBuildMenu, cmd > 7 ? 1 : 0);
return PLUGIN_CONTINUE;
}
switch( cmd )
{
case 1..6, 8..14:
{
new Float:vOrigin[3];
fnGetAimOrigin(plr, vOrigin);
vOrigin[2] += 4.0;
new szName[32];
get_user_name(plr, szName, 31);
replace_all(szName, 31, " ", "_");
fnMakeObject(cmd, gChoseModel[plr], vOrigin, szName);
}
case OBJECT_TELEPORTBLOCK:
{
new Float:vOrigin[3];
fnGetAimOrigin(plr, vOrigin);
vOrigin[2] += 4.0;
static bool:alt[33], szRand[33][5];
if( !alt[plr] )
{
alt[plr] = true;
format(szRand[plr], 4, "%c%c%c%c",
random_num('a', 'z'),
random_num('a', 'z'),
random_num('a', 'z'),
random_num('a', 'z'));
fnMakeTeleport(vOrigin, szRand[plr], true);
}
else
{
alt[plr] = false;
fnMakeTeleport(vOrigin, szRand[plr], false);
}
}
}
menu_display(plr, gBuildMenu, cmd > 7 ? 1 : 0);
return PLUGIN_CONTINUE;
}
public mnuMove(plr, menu, item)
{
if( item == MENU_EXIT )
{
menu_display(plr, gMainMenu, 0);
remove_task(TASK_ID_SHOWXYZ + plr, 0);
return PLUGIN_CONTINUE;
}
new ent = fnGetAimEnt(plr);
if( !fnGetObjectType(ent) )
{
menu_display(plr, gMoveMenu, 0);
return PLUGIN_CONTINUE;
}
new Float:vOrigin[3];
pev(ent, pev_origin, vOrigin);
new szCmd[3], _access, callback;
menu_item_getinfo(menu, item, _access, szCmd, 2, "", 0, callback);
switch( str_to_num(szCmd) )
{
case 1:
{
vOrigin[2] += 8.0;
}
case 2:
{
vOrigin[2] -= 8.0;
}
case 3:
{
vOrigin[0] += 8.0;
}
case 4:
{
vOrigin[0] -= 8.0;
}
case 5:
{
vOrigin[1] += 8.0;
}
case 6:
{
vOrigin[1] -= 8.0;
}
case 7:
{
vOrigin[2] += 32.0;
}
}
fnSetOriginSnap(ent, vOrigin);
menu_display(plr, gMoveMenu, 0);
return PLUGIN_CONTINUE;
}
public mnuModel(plr, menu, item)
{
new szCmd[3], _access, callback;
menu_item_getinfo(menu, item, _access, szCmd, 2, "", 0, callback);
remove_task(TASK_ID_SHOWXYZ + plr, 0);
gChoseModel[plr] = str_to_num(szCmd);
menu_display(plr, gBuildMenu, 0);
return PLUGIN_CONTINUE;
}
public fwdTouch(ent, plr)
{
if( !is_user_alive(plr) )
{
return FMRES_IGNORED;
}
static szEntClass[6];
pev(ent, pev_classname, szEntClass, 5);
if( equal(szEntClass, "bcm_3", 0) )
{
new type = fnGetObjectType(ent);
switch( type )
{
case OBJECT_BHOP:
{
if( !task_exists(TASK_ID_UNSOLID + ent, 0)
&& !task_exists(TASK_ID_SOLID + ent, 0) )
{
set_task(0.1, "tskUnsolid", TASK_ID_UNSOLID + ent, "", 0, "", 0);
}
}
case OBJECT_BLOCK:
{
}
case OBJECT_BOOSTBLOCK:
{
pev(plr, pev_velocity, gSetVelocity[plr]);
gSetVelocity[plr][2] = 600.0;
if( !task_exists(TASK_ID_FALLBLOCK + plr, 0) )
{
set_pev(plr, pev_takedamage, 0.0);
set_task(0.0, "tskFallBlock", TASK_ID_FALLBLOCK + plr, "", 0, "", 0);
}
}
case OBJECT_ICEBHOP:
{
set_pev(plr, pev_fuser2, 0.0);
if( !task_exists(TASK_ID_UNSOLID + ent, 0)
&& !task_exists(TASK_ID_SOLID + ent, 0) )
{
set_task(0.1, "tskUnsolid", TASK_ID_UNSOLID + ent, "", 0, "", 0);
}
}
case OBJECT_DELAYEDBHOP:
{
if( !task_exists(TASK_ID_UNSOLID + ent, 0)
&& !task_exists(TASK_ID_SOLID + ent, 0) )
{
set_task(1.0, "tskUnsolid", TASK_ID_UNSOLID + ent, "", 0, "", 0);
}
}
case OBJECT_FALLBLOCK:
{
static Float:lastTouch[33];
if( get_gametime() - lastTouch[plr] < 1.0 )
{
return FMRES_IGNORED;
}
lastTouch[plr] = get_gametime();
if( !task_exists(TASK_ID_FALLBLOCK + plr, 0) )
{
set_pev(plr, pev_takedamage, 0.0);
set_task(0.0, "tskFallBlock", TASK_ID_FALLBLOCK + plr, "", 0, "", 0);
}
}
case OBJECT_TELEPORTBLOCK:
{
}
case OBJECT_FATALISBLOCK:
{
static Float:lastTouched[33];
if( get_gametime() - lastTouched[plr] > 1.0 )
{
new Float:health;
pev(plr, pev_health, health);
if( health > 10.0 )
{
if( pev(plr, pev_takedamage) )
{
set_pev(plr, pev_health, health - 10.0);
}
}
else
{
user_kill(plr, 0);
}
lastTouched[plr] = get_gametime();
}
}
case OBJECT_TINKBLOCK:
{
static Float:lastTouched[33];
if( get_gametime() - lastTouched[plr] > 1.0 )
{
new Float:health;
pev(plr, pev_health, health);
if( health <= 98.0 )
{
set_pev(plr, pev_health, health + 2.0);
}
lastTouched[plr] = get_gametime();
}
}
case OBJECT_MAGICCARPET:
{
if( get_user_team(plr, "", 0) == 2)
{
new Float:vVelocity[3];
pev(plr, pev_velocity, vVelocity);
vVelocity[2] = 0.0;
set_pev(ent, pev_velocity, vVelocity);
}
}
case OBJECT_DUCKBLOCK:
{
set_pev(plr, pev_bInDuck, 1);
}
case OBJECT_SPEEDBLOCK:
{
velocity_by_aim(plr, 1200, gSetVelocity[plr]);
gSetVelocity[plr][2] = 0.0;
}
case OBJECT_SLOWBLOCK:
{
if( get_gametime() - gSlowedTime[plr] < 3.0
&& gEntSlowed[plr] == ent )
{
set_pev(plr, pev_maxspeed, 75.0);
}
if( !task_exists(TASK_ID_MAXSPEED + plr, 0) )
{
new szEntId[5];
num_to_str(ent, szEntId, 4);
set_task(3.0, "tskMaxSpeed", TASK_ID_MAXSPEED + plr, szEntId, 4, "", 0);
}
}
case OBJECT_STEALTHBLOCK:
{
static Float:lastTouched[33];
new Float:fTime = get_gametime();
if ( get_gametime() - lastTouched[plr] > 1.0 )
{
set_user_rendering(plr, kRenderFxGlowShell, 0, 0, 0, kRenderTransColor, 0);
new Float:fTimeout = get_cvar_float("bcm_stealthtime");
set_task(fTimeout, "tskStealthRemove", TASK_ID_STEALTH + plr, "", 0, "a", 1);
set_hudmessage(255, 0, 0, 0.05, 0.65, 0, 2.0, 2.0, 0.5, 0.1, -1);
show_hudmessage (plr, "VOCE FICOU INVISIVEL POR 20s!!");
new szName[32];
get_user_name(plr, szName, 32);
fnGreenChat(0, "[BCM] Cuidado pois %s esta invisivel por 20s! .", szName);
lastTouched[plr] = get_gametime();
}
}
}
}
else if( equal(szEntClass, "bcm_t", 0) )
{
new szTarget[5];
pev(ent, pev_target, szTarget, 4);
new dest = engfunc(EngFunc_FindEntityByString, -1, "targetname", szTarget);
if( dest )
{
new Float:vOrigin[3];
pev(dest, pev_origin, vOrigin);
vOrigin[2] += 64.0;
if( !task_exists(TASK_ID_RESETVELOCITY + plr, 0) )
{
set_task(0.0, "tskResetVelocity", TASK_ID_RESETVELOCITY + plr, "", 0, "", 0);
}
engfunc(EngFunc_SetOrigin, plr, vOrigin);
}
}
return FMRES_IGNORED;
}
public tskMaxSpeed(const szEntId[], plr)
{
plr -= TASK_ID_MAXSPEED;
if( is_user_alive(plr) )
{
gSlowedTime[plr] = get_gametime();
gEntSlowed[plr] = str_to_num(szEntId);
set_pev(plr, pev_maxspeed, 250.0);
}
}
public tskStealthRemove(plr)
{
plr -= TASK_ID_STEALTH;
if (is_user_connected(plr))
{
set_user_rendering(plr, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 255);
}
}
public tskUnsolid(ent)
{
ent -= TASK_ID_UNSOLID;
set_pev(ent, pev_solid, SOLID_NOT);
set_pev(ent, pev_rendermode, kRenderTransAdd);
set_pev(ent, pev_renderamt, 100.0);
set_task(1.0, "tskSolid", TASK_ID_SOLID + ent, "", 0, "", 0);
}
public tskSolid(ent)
{
ent -= TASK_ID_SOLID;
set_pev(ent, pev_solid, SOLID_BBOX);
set_pev(ent, pev_rendermode, kRenderNormal);
}
public tskResetVelocity(plr)
{
plr -= TASK_ID_RESETVELOCITY;
set_pev(plr, pev_velocity, Float:{0.0, 0.0, 0.0});
}
public tskFallBlock(plr)
{
plr -= TASK_ID_FALLBLOCK;
set_pev(plr, pev_takedamage, 1.0);
}
public msgNewRound()
{
new ent, Float:vOrigin[3];
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_3")) )
{
if( fnGetObjectType(ent) == OBJECT_MAGICCARPET )
{
pev(ent, pev_v_angle, vOrigin);
set_pev(ent, pev_velocity, Float:{0.0, 0.0, 0.0});
engfunc(EngFunc_SetOrigin, ent, vOrigin);
}
}
}
fnMakeObject(object, model, Float:vOrigin[3], const szName[])
{
if( (vOrigin[0] == 0.0
&& vOrigin[1] == 0.0
&& vOrigin[2] == 0.0)
|| !fnIsOriginVacant(model, vOrigin) )
{
return 0;
}
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if( !pev_valid(ent) )
{
return 0;
}
set_pev(ent, pev_classname, "bcm_3");
set_pev(ent, pev_solid, SOLID_BBOX);
set_pev(ent, pev_movetype, MOVETYPE_NONE);
set_pev(ent, pev_targetname, szName);
switch( model )
{
case MODEL_NORMAL:
{
engfunc(EngFunc_SetModel, ent, gNORMALMODELS[object]);
}
case MODEL_WALLZ..MODEL_WALLY:
{
engfunc(EngFunc_SetModel, ent, gWALLMODELS[object]);
}
case MODEL_TINY:
{
engfunc(EngFunc_SetModel, ent, gTINYMODELS[object]);
}
}
engfunc(EngFunc_SetSize, ent, gMINS[model], gMAXS[model]);
if( model == MODEL_WALLY )
{
set_pev(ent, pev_angles, Float:{0.0, 90.0, 0.0});
}
else if( model == MODEL_WALLZ )
{
set_pev(ent, pev_angles, Float:{0.0, 0.0, 90.0});
}
fnSetOriginSnap(ent, vOrigin);
if( object == OBJECT_MAGICCARPET )
{
set_pev(ent, pev_movetype, MOVETYPE_FLY);
set_pev(ent, pev_v_angle, vOrigin);
}
else if (object == OBJECT_STEALTHBLOCK )
{
set_pev(ent, pev_rendermode, kRenderTransTexture);
set_pev(ent, pev_renderamt, 128.0);
}
return 1;
}
fnMakeTeleport(Float:vOrigin[3], const szTarget[], bool:mode)
{
if( (vOrigin[0] == 0.0 && vOrigin[1] == 0.0 && vOrigin[2] == 0.0)
|| !fnIsOriginVacant(MODEL_TELESTART, vOrigin)
|| (!mode && !engfunc(EngFunc_FindEntityByString, -1, "target", szTarget)) )
{
return 0;
}
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if( !pev_valid(ent) )
{
return 0;
}
set_pev(ent, pev_classname, mode ? "bcm_t" : "bcm_d");
set_pev(ent, pev_solid, SOLID_BBOX);
set_pev(ent, pev_movetype, MOVETYPE_NONE);
set_pev(ent, mode ? pev_target : pev_targetname, szTarget);
set_pev(ent, pev_framerate, 5.0);
set_pev(ent, pev_rendermode, kRenderTransAdd);
set_pev(ent, pev_renderamt, 255.0);
if( !mode )
{
set_pev(ent, pev_angles, Float:{0.0, 0.0, 90.0});
}
engfunc(EngFunc_SetModel, ent, mode ? gTELEPORTMODELS[0] : gTELEPORTMODELS[1]);
engfunc(EngFunc_SetSize, ent, gMINS[MODEL_TELESTART], gMAXS[MODEL_TELESTART]);
fnSetOriginSnap(ent, vOrigin);
return 1;
}
fnGetAimOrigin(plr, Float:vOrigin[3])
{
new Float:vStart[3], Float:vViewOfs[3], Float:vDest[3];
pev(plr, pev_origin, vStart);
pev(plr, pev_view_ofs, vViewOfs);
vStart[0] += vViewOfs[0];
vStart[1] += vViewOfs[1];
vStart[2] += vViewOfs[2];
pev(plr, pev_v_angle, vDest);
engfunc(EngFunc_MakeVectors, vDest);
global_get(glb_v_forward, vDest);
vDest[0] *= 9999.0;
vDest[1] *= 9999.0;
vDest[2] *= 9999.0;
vDest[0] += vStart[0];
vDest[1] += vStart[1];
vDest[2] += vStart[2];
engfunc(EngFunc_TraceLine, vStart, vDest, 0, plr, 0);
get_tr2(0, TR_vecEndPos, vOrigin);
return 1;
}
fnGetAimEnt(plr)
{
new Float:vStart[3], Float:vViewOfs[3], Float:vDest[3];
pev(plr, pev_origin, vStart);
pev(plr, pev_view_ofs, vViewOfs);
vStart[0] += vViewOfs[0];
vStart[1] += vViewOfs[1];
vStart[2] += vViewOfs[2];
pev(plr, pev_v_angle, vDest);
engfunc(EngFunc_MakeVectors, vDest);
global_get(glb_v_forward, vDest);
vDest[0] *= 9999.0;
vDest[1] *= 9999.0;
vDest[2] *= 9999.0;
vDest[0] += vStart[0];
vDest[1] += vStart[1];
vDest[2] += vStart[2];
engfunc(EngFunc_TraceLine, vStart, vDest, 0, plr, 0);
new ent = get_tr2(0, TR_pHit);
if( !pev_valid(ent) )
{
new Float:vOrigin[3];
fnGetAimOrigin(plr, vOrigin);
new szClass[6];
while( (ent = engfunc(EngFunc_FindEntityInSphere, ent, vOrigin, 1.0)) )
{
pev(ent, pev_classname, szClass, 5);
if( equal(szClass, "bcm_3", 0) )
{
return ent;
}
}
return 0;
}
return ent;
}
fnSetOriginSnap(ent, Float:vOrigin[3])
{
vOrigin[0] = float(floatround(vOrigin[0] / 8.0)) * 8.0;
vOrigin[1] = float(floatround(vOrigin[1] / 8.0)) * 8.0;
vOrigin[2] = float(floatround(vOrigin[2] / 8.0)) * 8.0;
new model = fnGetObjectModelType(ent);
if( !model )
{
return 0;
}
if( !fnIsOriginNearSpawn(vOrigin)
&& fnIsOriginVacant(model, vOrigin) )
{
engfunc(EngFunc_SetOrigin, ent, vOrigin);
if( model == MODEL_WALLX
|| model == MODEL_WALLY )
{
vOrigin[2] += 15.0;////
}
if( engfunc(EngFunc_PointContents, vOrigin) == -2 )
{
new type = fnGetObjectType(ent);
if( type && type != 99 )
{
fnSetRendering(ent, kRenderFxGlowShell, gGLOWS[type][0],
gGLOWS[type][1], gGLOWS[type][2], kRenderNormal, 64);
}
}
else
{
set_pev(ent, pev_renderfx, kRenderFxNone);
}
}
return 1;
}
bool:fnIsOriginNearSpawn(Float:vOrigin[3])
{
new ent;
new szClass[23];
while( (ent = engfunc(EngFunc_FindEntityInSphere, ent, vOrigin, 128.0)) )
{
pev(ent, pev_classname, szClass, 22);
if( equal(szClass, "info_player_start", 0)
|| equal(szClass,"info_player_deathmatch", 0) )
{
return true;
}
}
return false;
}
fnGetObjectType(ent)
{
new szClass[6];
pev(ent, pev_classname, szClass, 5);
if( equal(szClass, "bcm_t", 0)
|| equal(szClass, "bcm_d", 0) )
{
return 99;
}
else if( !equal(szClass, "bcm_3", 0) )
{
return 0;
}
/*new Float:vColor[3];
pev(ent, pev_rendercolor, vColor);
for( new i = 0; i < sizeof(gGLOWS); i++ )
{
if( vColor[0] == gGLOWS[i][0]
&& vColor[1] == gGLOWS[i][1]
&& vColor[2] == gGLOWS[i][2] )
{
return i;
}
}*/
new szModel[65];
pev(ent, pev_model, szModel, 64);
for( new i = 1; i < sizeof(gTYPES); i++ )
{
if( contain(szModel, gTYPES[i]) > -1 )
{
return i;
}
}
return 0;
}
fnGetObjectModelType(ent)
{
new szModel[65];
pev(ent, pev_model, szModel, 64);
for( new i = 1; i < sizeof(gMODELTYPES); i++ )
{
if( contain(szModel, gMODELTYPES[i]) > -1 )
{
switch( i )
{
case MODEL_WALLZ .. MODEL_WALLY:
{
new Float:vAngles[3];
pev(ent, pev_angles, vAngles);
if( vAngles[1] == 90.0 )
{
return MODEL_WALLY;
}
else if( vAngles[2] == 90.0 )
{
return MODEL_WALLZ;
}
else
{
return MODEL_WALLX;
}
}
default:
{
return i;
}
}
}
}
return 0;
}
fnSave()
{
new szPath[129];
format(szPath, 128, "%s/%s.txt", gDir, gCurConfig);
delete_file(szPath);
new f = fopen(szPath, "at");
new ent, type, szData[129], Float:vOrigin[3], szName[32], count, modelType;
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_3")) )
{
count++;
type = fnGetObjectType(ent);
pev(ent, pev_origin, vOrigin);
pev(ent, pev_targetname, szName, 31);
modelType = fnGetObjectModelType(ent);
format(szData, 128, "%i %f %f %f %s %i^n", type, vOrigin[0], vOrigin[1], vOrigin[2],
szName, modelType);
fputs(f, szData);
}
new Float:vOrigin2[3], dest, szTarget[5];
ent = 0;
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_t")) )
{
count++;
pev(ent, pev_origin, vOrigin);
pev(ent, pev_target, szTarget, 4);
dest = engfunc(EngFunc_FindEntityByString, -1, "targetname", szTarget);
if( !dest )
{
continue;
}
pev(dest, pev_origin, vOrigin2);
format(szData, 128, "99 %f %f %f %f %f %f^n", vOrigin[0], vOrigin[1], vOrigin[2],
vOrigin2[0], vOrigin2[1], vOrigin2[2]);
fputs(f, szData);
}
fclose(f);
return count;
}
fnLoad(const szConfigName[])
{
new ent;
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_3")) )
{
engfunc(EngFunc_RemoveEntity, ent);
}
ent = 0;
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_t")) )
{
engfunc(EngFunc_RemoveEntity, ent);
}
ent = 0;
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_d")) )
{
engfunc(EngFunc_RemoveEntity, ent);
}
new szData[129], szType[3], szX[13], szY[13], szZ[13], szName[32], szModelType[3];
new szX2[13], szY2[13], szZ2[13], szTarget[5];
new Float:vOrigin[3], Float:vOrigin2[3];
new type, modelType, count;
new szPath[129];
format(szPath, 128, "%s/%s.txt", gDir, szConfigName);
if( !file_exists(szPath) )
{
return 0;
}
copy(gCurConfig, 32, szConfigName);
new f = fopen(szPath, "rt");
while( !feof(f) )
{
fgets(f, szData,128);
if( !strlen(szData) )
{
continue;
}
parse(szData, szType, 2);
type = str_to_num(szType);
if( type != 99 )
{
parse(szData, "", 0, szX, 12, szY, 12, szZ, 12, szName, 31, szModelType, 2);
vOrigin[0] = str_to_float(szX);
vOrigin[1] = str_to_float(szY);
vOrigin[2] = str_to_float(szZ);
modelType = str_to_num(szModelType);
count++;
fnMakeObject(type, !modelType ? MODEL_NORMAL : modelType, vOrigin, szName);////
}
else
{
parse(szData, "", 0, szX, 12, szY, 12, szZ, 12, szX2, 12, szY2, 12, szZ2, 12);
vOrigin[0] = str_to_float(szX);
vOrigin[1] = str_to_float(szY);
vOrigin[2] = str_to_float(szZ);
vOrigin2[0] = str_to_float(szX2);
vOrigin2[1] = str_to_float(szY2);
vOrigin2[2] = str_to_float(szZ2);
format(szTarget, 4, "%c%c%c%c",
random_num('a', 'z'),
random_num('a', 'z'),
random_num('a', 'z'),
random_num('a', 'z'));
count++;
fnMakeTeleport(vOrigin, szTarget, true);
fnMakeTeleport(vOrigin2, szTarget, false);
}
}
fclose(f);
return count;
}
fnGreenChat(plr, const message[], {Float,Sql,Result,_}:...)
{
static msg[192];
msg[0] = 0x04;
vformat(msg[1], 190, message, 3);
if( plr > 0 && plr <= 32 )
{
message_begin(MSG_ONE, gMsgSayText, {0, 0, 0}, plr);
write_byte(plr);
write_string(msg);
message_end();
}
else if( plr == 0 )
{
for( new i = 1; i <= gMaxPlayers; i++ )
{
if( !is_user_connected(i) )
{
continue;
}
message_begin(MSG_ONE, gMsgSayText, {0, 0, 0}, i);
write_byte(i);
write_string(msg);
message_end();
}
}
return 1;
}
public tskShowObjectInfo()
{
for( new i = 1; i <= gMaxPlayers; i++ )
{
if( !is_user_connected(i) )
{
continue;
}
new ent = fnGetAimEnt(i);
new type = fnGetObjectType(ent);
if( type && type != 99 )
{
new szName[32];
pev(ent, pev_targetname, szName, 31);
if( szName[0] == '^0' )
{
copy(szName, 31, "Unknown");
}
set_hudmessage(255, 255, 0, -1.0, 0.75, 0, 0.0, 2.0, 0.0, 0.0, 4);
show_hudmessage(i, "Object Type: %s^nCreator: %s", gOBJECTNAMES[type], szName);
}
}
}
fnGetObjectCount()
{
new ent, i;
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_3")) )
{
i++;
}
ent = 0;
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_t")) )
{
i++;
}
ent = 0;
while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "bcm_t")) )
{
i++;
}
return i;
}
public fnConvertFrom2()
{
new szDir[] = "addons/amxmodx/configs/bcm";
new dir = open_dir(szDir, "", 0);
new szFile[65];
new szPath[129];
while( next_file(dir, szFile, 64) )
{
if( szFile[0] == '.' )
{
continue;
}
format(szPath, 128, "%s/%s", szDir, szFile);
new f = fopen(szPath, "rt");
new szData[129];
while( !feof(f) )
{
fgets(f, szData, 128);
replace(szData, 128, "S", "2");
replace(szData, 128, "B", "1");
replace(szData, 128, "E", "2");
replace(szFile, 64, ".cfg", "");
format(szPath, 128, "addons/amxmodx/data/kzm/bcm/%s.txt", szFile);
new f2 = fopen(szPath, "at");
fputs(f2, szData);
fclose(f2);
}
fclose(f);
}
close_dir(dir);
}
public fwdPlayerPreThink(plr)
{
// emp
if( (gSetVelocity[plr][0] != 0.0
|| gSetVelocity[plr][1] != 0.0
|| gSetVelocity[plr][2] != 0.0)
&& is_user_alive(plr) )
{
set_pev(plr, pev_velocity, gSetVelocity[plr]);
gSetVelocity[plr][0] = 0.0;
gSetVelocity[plr][1] = 0.0;
gSetVelocity[plr][2] = 0.0;
}
return FMRES_IGNORED;
}
public tskShowXYZ(plr)
{
plr -= TASK_ID_SHOWXYZ;
if( !is_user_connected(plr) )
{
remove_task(TASK_ID_SHOWXYZ + plr, 0);
return PLUGIN_CONTINUE;
}
static Float:vAim[3];
velocity_by_aim(plr, 64, vAim);
static Float:vOrigin[3];
pev(plr, pev_origin, vOrigin);
vOrigin[0] += vAim[0];
vOrigin[1] += vAim[1];
vOrigin[2] += vAim[2];
vOrigin[2] += 16.0;
static origin[3], origin2[3];
FVecIVec(vOrigin, origin);
origin2 = origin;
origin[0] += 16;
fnMakeSprite(plr, origin, origin2, {255, 0, 0});
origin[0] -= 16;
origin[1] += 16;
fnMakeSprite(plr, origin, origin2, {0, 0, 255});
origin[1] -= 16;
origin[2] += 16;
fnMakeSprite(plr, origin, origin2, {0, 255, 0});
return PLUGIN_CONTINUE;
}
fnMakeSprite(plr, origin[], origin2[], color[], stay=1, all=0)////
{
message_begin(all ? MSG_BROADCAST : MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, all ? 0 : plr);
write_byte(0);
write_coord(origin[0]);
write_coord(origin[1]);
write_coord(origin[2]);
write_coord(origin2[0]);
write_coord(origin2[1]);
write_coord(origin2[2]);
write_short(gBeamSprite);
write_byte(1);
write_byte(1);
write_byte(stay);
write_byte(4);
write_byte(0);
write_byte(color[0]);
write_byte(color[1]);
write_byte(color[2]);
write_byte(190);
write_byte(0);
message_end();
return 1;
}
fnIsOriginVacant(model, Float:vOrigin[3])
{
// woot bad code
static Float:vMins[3], Float:vMaxs[3];
vMins[0] = gMINS[model][0];
vMins[1] = gMINS[model][1];
vMins[2] = gMINS[model][2];
vMaxs[0] = gMAXS[model][0];
vMaxs[1] = gMAXS[model][1];
vMaxs[2] = gMAXS[model][2];
vMins[0] += 1.0;
vMins[1] += 1.0;
vMins[2] += 1.0;
vMaxs[0] += -1.0;
vMaxs[1] += -1.0;
vMaxs[2] += -1.0;
static Float:vOrigins[8][3];
vOrigins[0] = vOrigin;
vOrigins[1] = vOrigin;
vOrigins[2] = vOrigin;
vOrigins[3] = vOrigin;
vOrigins[4] = vOrigin;
vOrigins[5] = vOrigin;
vOrigins[6] = vOrigin;
vOrigins[7] = vOrigin;
vOrigins[0][0] += vMaxs[0];
vOrigins[0][1] += vMins[1];
vOrigins[0][2] += vMaxs[2];
vOrigins[1][0] += vMaxs[0];
vOrigins[1][1] += vMins[1];
vOrigins[1][2] += vMins[2];
vOrigins[2][0] += vMins[0];
vOrigins[2][1] += vMaxs[1];
vOrigins[2][2] += vMaxs[2];
vOrigins[3][0] += vMins[0];
vOrigins[3][1] += vMaxs[1];
vOrigins[3][2] += vMins[2];
vOrigins[4][0] += vMins[0];
vOrigins[4][1] += vMins[1];
vOrigins[4][2] += vMins[2];
vOrigins[5][0] += vMins[0];
vOrigins[5][1] += vMins[1];
vOrigins[5][2] += vMaxs[2];
vOrigins[6][0] += vMaxs[0];
vOrigins[6][1] += vMaxs[1];
vOrigins[6][2] += vMaxs[2];
vOrigins[7][0] += vMaxs[0];
vOrigins[7][1] += vMaxs[1];
vOrigins[7][2] += vMins[2];
/*new origins[8][3];
for( new i = 0; i < 8; i++ )
{
FVecIVec(vOrigins[i], origins[i]);
}
fnMakeSprite(0, origins[0], origins[1], {255, 255, 255}, 50, 1);
fnMakeSprite(0, origins[2], origins[3], {255, 255, 255}, 50, 1);
fnMakeSprite(0, origins[4], origins[5], {255, 255, 255}, 50, 1);
fnMakeSprite(0, origins[6], origins[7], {255, 255, 255}, 50, 1);*/
new j;
for( new i = 0; i <= 7; i++ )
{
if( engfunc(EngFunc_PointContents, vOrigins[i]) != -2 )
{
j++;
}
}
return j ? true : false;
}
public eventRoundRestart()
{
//iterate through all players
for (new plr = 1; plr <= 32; ++plr)
{
//reset all players timers
resetTimers(plr);
}
}
resetTimers(plr)
{
gfStealthTimeOut[plr] = 0.0;
gfStealthNextUse[plr] = 0.0;
new taskId = TASK_ID_STEALTH + plr;
if (task_exists(taskId))
{
remove_task(taskId);
}
if (is_user_connected(plr) )
{
set_user_rendering(plr, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 255);
}
}
fnSetRendering(ent, fx, r, g, b, rend, amt)
{
new Float:vColor[3];
vColor[0] = float(r);
vColor[1] = float(g);
vColor[2] = float(b);
set_pev(ent, pev_renderfx, fx);
set_pev(ent, pev_rendercolor, vColor);
set_pev(ent, pev_rendermode, rend);
set_pev(ent, pev_renderamt, float(amt));
return 1;
}
bool:fnIsStringAlphaNumeric(const szString[])
{
for( new i = 0; i < strlen(szString); i++ )
{
if( (szString[i] >= 'a' && szString[i] <= 'z')
|| (szString[i] >= 'A' && szString[i] <= 'Z')
|| (szString[i] >= '0' && szString[i] <= '9') )
{
continue;
}
else
{
return false;
}
}
return true;
}
|
|