|
Veteran Member
Join Date: Oct 2006
Location: Stockholm, Sweden
|

05-28-2008
, 10:02
Re: Grabbing Smoother
|
#6
|
Sry for double post but I have to get an answer.
I've remade Krot@ls / Spacedudes Ultimate Jedi Force Grab exactly but to amxx.
The only differences is the indention and this is fakemeta instead of engine.
I did it because all of my attempts to be able to move around a
map entity failed.
With map entities I mean as my previous posts, not players nor weapons but
map entities.
PHP Code:
new g_classnameToGrab[MAX_CLASSNAMES_TO_GRAB][] = { "weaponbox", "grenade", "func_breakable", "func_ladder", "csdm", "bullet", "rocket", "dookie", "piss_puddle" }
I installed Amxmod and tested this plugin and it worked excellent.
So I thought if I remade this plugin exactly as it was in the amxmod
version it shouldn't occur any problems.
In my first post you can see my attempt to move around an entity.
It sucked TBH.
In my second attempt the only thing I achieved was to make an
map entity transparent -_-
In this attempt it worked gallant to move around player and
weapon entities origin. But when I tried on an map entity it
was moving in lightning speed until it hit a wall.(non-usable FYI)
When I grabbed smaller map entities they went outside the map even when
this shouldn't be possible since they don't have move type "noclip".
So is it possible to move around map entities "usable" with Amxmod x ?
It feels kinda annoying with not achieving my goal when I sat
and indented and converted ≈ 2500 lines.
Here's the script if someone want to take a look at it (I only removed the saving part and the menu part)
NOTE: I would be glad if someone with more scripting experience than me would do an attempt
to move around map entities.
Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <fakemeta_util>
new const ACCESS_GRAB = ADMIN_LEVEL_B
new const ACCESS_GRAB_TOGGLE = ADMIN_LEVEL_B
new const ACCESS_GRAB2 = ADMIN_LEVEL_B
new const ACCESS_GRAB_TOGGLE2 = ADMIN_LEVEL_B
new const ACCESS_THROW = ADMIN_LEVEL_B
new const ACCESS_PULL = ADMIN_LEVEL_B
new const ACCESS_PUSH = ADMIN_LEVEL_B
new const ACCESS_UNDOMOVING = ADMIN_LEVEL_B
new const ACCESS_ENT_KILL = ADMIN_LEVEL_C
new const ACCESS_ENT_ROTATE = ADMIN_LEVEL_C
new const ACCESS_ENT_DROPTOFLOOR = ADMIN_LEVEL_C
new const ACCESS_ENT_SETKEYVALUE = ADMIN_LEVEL_C
new const ACCESS_ES_GRAB = ADMIN_LEVEL_C
new const ACCESS_ES_UNGRAB = ADMIN_LEVEL_C
new const ACCESS_ES_CANCEL = ADMIN_LEVEL_C
new const ACCESS_ES_SAVE = ADMIN_LEVEL_C
new const ACCESS_ES_LIST = ADMIN_LEVEL_C
new const ACCESS_ES_LISTALL = ADMIN_LEVEL_C
new const ACCESS_ES_LOAD = ADMIN_LEVEL_C
new const ACCESS_ENT_MM_GRAB = ADMIN_LEVEL_D
new const ACCESS_ENT_MM_START = ADMIN_LEVEL_D
new const ACCESS_ENT_MM_START2 = ADMIN_LEVEL_D
new const ACCESS_ENT_MM_END = ADMIN_LEVEL_D
new const ACCESS_ENT_GRABTYPE = ADMIN_LEVEL_D
new const ACCESS_ENT_STOPGRAB = ADMIN_LEVEL_D
new const ACCESS_COPYENT_TOGGLE = ADMIN_LEVEL_D
new const ACCESS_COPYENT = ADMIN_LEVEL_D
new const ACCESS_ENT_TELESTART = ADMIN_LEVEL_E
new const ACCESS_ENT_TELEEND = ADMIN_LEVEL_E
new const ACCESS_ENT_TELEDELETE = ADMIN_LEVEL_E
new const ACCESS_ENT_STACK = ADMIN_LEVEL_F
new const ACCESS_ENT_WALL = ADMIN_LEVEL_F
new const ACCESS_ENT_LOOKINGAT = ADMIN_LEVEL_G
new const ACCESS_ENT_SEARCH = ADMIN_LEVEL_G
new const ACCESS_ENT_SHOWAXIS = ADMIN_LEVEL_G
new const ACCESS_ENT_SHOWKEYVALUE = ADMIN_LEVEL_G
new const ACCESS_ENT_USE = ADMIN_LEVEL_H
new const ACCESS_JEDICHOKE = ADMIN_SLAY
new g_spriteTeleStart[] = "sprites/enter1.spr"
new g_spriteTeleEnd[] = "sprites/exit1.spr"
new g_grabBeam[] = "sprites/laserbeam.spr"
new g_PainSound[] = "player/PL_PAIN2.WAV"
#define MAX_ENTS 256
#define MAX_KEYVALUES 16
#define KEY_LENGTH 32
#define VALUE_LENGTH 32
#define MAX_CLASSNAMES_TO_GRAB 9
new g_classnameToGrab[MAX_CLASSNAMES_TO_GRAB][] =
{
"weaponbox",
"grenade",
"func_breakable",
"func_ladder",
"csdm",
"bullet",
"rocket",
"dookie",
"piss_puddle"
}
#define MAX_MODELS_TO_GRAB 1
new g_modelToGrab[MAX_MODELS_TO_GRAB][] = { "models/w_" }
#define MAX_MASSMOVE_ENTS 16
new g_key[MAX_ENTS][MAX_KEYVALUES][KEY_LENGTH]
new g_keyValueNum[MAX_ENTS]
new g_value[MAX_ENTS][MAX_KEYVALUES][VALUE_LENGTH]
new grabbed[33]
new grabbedIsBrush[33]
new grabbedNoClip[33]
new grabbedCopyEnt[33]
new grabbedOldMoveType[33][MAX_MASSMOVE_ENTS]
new grabbedOldSolid[33][MAX_MASSMOVE_ENTS]
new grabbedOldFlags[33][MAX_MASSMOVE_ENTS]
new grabbedOldRender[33][MAX_MASSMOVE_ENTS][6]
new grablength[33]
new bool:grabmodeon[33]
new g_massMoveEnts[33][MAX_MASSMOVE_ENTS]
new g_massMoveNum[33]
new bool:g_massMoveOn[33]
new Float:g_massMoveOldOrigin[33][3]
new g_saveEnts[33][MAX_MASSMOVE_ENTS]
new g_saveEntsNum[33]
new g_maxents
new g_maxplayers
new velocity_multiplier
new laserbeam
new g_msgidScreenShake, g_msgidDamage, g_msgidScreenFade
new const BOUNDS = 3
//Pcvars
new grab_force
new grab_glow
new grab_red
new grab_green
new grab_blue
new grab_transp
new grab_beam
new throw_force
new pushpull_speed
new speedkill
#if !defined ADMIN_SUPREME
#define ADMIN_SUPREME (1<<24)
#endif
public plugin_init()
{
register_plugin("Ultimate JediGrab", "1.2", "KRoT@L / SpaceDude")
grab_force = register_cvar("sv_grab_force", "10")
grab_glow = register_cvar("sv_grab_glow", "1")
grab_red = register_cvar("sv_grab_red", "0")
grab_green = register_cvar("sv_grab_green", "255")
grab_blue = register_cvar("sv_grab_blue", "128")
grab_transp = register_cvar("sv_grab_transp", "32")
grab_beam = register_cvar("sv_grab_beam", "1")
throw_force = register_cvar("sv_throw_force", "1500")
pushpull_speed = register_cvar("sv_pushpull_speed", "35")
speedkill = register_cvar("sv_speedkill", "2500")
register_clcmd("grab_toggle", "grab_toggle", ACCESS_GRAB_TOGGLE, "[entId/name/authid/#userid] Press once to grab and again to release.")
register_clcmd("+grab", "grab", ACCESS_GRAB, "Bind a key to +grab")
register_clcmd("-grab", "release", ACCESS_GRAB)
register_clcmd("grab_toggle2", "grab_toggle", ACCESS_GRAB_TOGGLE2, "[entId/name/authid/#userid] Press once to grab and again to release (noclip).")
register_clcmd("+grab2", "grab", ACCESS_GRAB2, "Bind a key to +grab2 (noclip)")
register_clcmd("-grab2", "release", ACCESS_GRAB2)
register_clcmd("throw", "throw", ACCESS_THROW, "Throws the grabee.")
register_clcmd("+pull", "startpull", ACCESS_PULL, "Bind a key to +pull")
register_clcmd("-pull", "stopdist", ACCESS_PULL)
register_clcmd("+push", "startpush", ACCESS_PUSH, "Bind a key to +push")
register_clcmd("-push", "stopdist", ACCESS_PUSH)
register_clcmd("ent_undomoving", "e_undo", ACCESS_UNDOMOVING, "Places the entity being looked at where it was.")
register_concmd("ent_kill", "e_kill", ACCESS_ENT_KILL, "[entity classname] [range] Kills the entity being looked at. You can specify an entity type and a range.")
register_concmd("ent_rotate", "e_rotate", ACCESS_ENT_ROTATE,"<y> <y> <z> [entId/name/authid/#userid] Rotates the entity being looked at. You can specify an entity id or a player id.")
register_concmd("ent_droptofloor", "e_droptofloor", ACCESS_ENT_DROPTOFLOOR, "[entId] Drops to floor the entity.")
register_concmd("ent_setkeyvalue", "e_setkeyvalue", ACCESS_ENT_SETKEYVALUE, "<key> <value> [entId/name/authid/#userid] Sets keyvalue on the entity being looked at or specified.")
register_clcmd("ent_es_grab", "es_grab", ACCESS_ES_GRAB, "[entId] Adds the entity to the save list.")
register_clcmd("ent_es_ungrab", "es_ungrab", ACCESS_ES_UNGRAB, "Removes the last entity added from the save list.")
register_clcmd("ent_es_cancel", "es_cancel", ACCESS_ES_CANCEL, "Removes all the entities added from the save list.")
register_clcmd("ent_es_save", "es_save", ACCESS_ES_SAVE, "<name> Saves all entities grabbed with the name specified.")
register_clcmd("ent_es_list", "es_list", ACCESS_ES_LIST, "Lists all entity saves for the current map.")
register_clcmd("ent_es_listall", "es_listall", ACCESS_ES_LISTALL, "Lists all entity saves on the server.")
register_concmd("ent_es_load", "es_load", ACCESS_ES_LOAD, "Loads the specified entity save. Saves can only be loaded on the map they were saved on.")
register_clcmd("ent_mm_grab", "mm_grab", ACCESS_ENT_MM_GRAB, "Selects an entity to be mass moved.")
register_clcmd("ent_mm_start", "mm_start", ACCESS_ENT_MM_START, "Starts the mass move process once all entities have been grabbed.")
register_clcmd("ent_mm_start2", "mm_start", ACCESS_ENT_MM_START2, "Starts the mass move process once all entities have been grabbed (noclip).")
register_clcmd("ent_mm_end", "mm_end", ACCESS_ENT_MM_END, "Releases all entities being mass moved.")
register_clcmd("ent_grabtype", "e_grabtype", ACCESS_ENT_GRABTYPE, "<entity classname> [range] Grabs a certain entity at a specified range (default 250).")
register_clcmd("ent_stopgrab", "e_stopgrab", ACCESS_ENT_STOPGRAB, "Used to stop moving an entity grabbed with amx_grabtype.")
register_clcmd("copyent_toggle", "copyent_toggle", ACCESS_COPYENT_TOGGLE, "Press once to copy and grab and again to release (noclip).")
register_clcmd("+copyent", "copyent", ACCESS_COPYENT, "Bind a key to +copyent")
register_clcmd("-copyent", "release", ACCESS_COPYENT)
register_concmd("ent_telestart", "e_telestart", ACCESS_ENT_TELESTART, "<name> [x] [y] [z] Creates a teleporter entrance that leads to the exit with the matching name.")
register_concmd("ent_teleend", "e_teleend", ACCESS_ENT_TELEEND, "<name> [x] [y] [z] Creates a teleporter exit that comes from the entrance with a matching name.")
register_concmd("ent_teledelete", "e_teledelete", ACCESS_ENT_TELEDELETE, "<name> Deletes the teleporter entrances and exit with the name specified.")
register_clcmd("ent_stack", "e_stack", ACCESS_ENT_STACK, "<amount> <offset x> <offset y> <offset z> Creates a certain amount of entities each offseted from the last the specified amount.")
register_clcmd("ent_wall", "e_wall", ACCESS_ENT_WALL, "<entId> <rowNum> <colNum> <rowOffset> <colOffset> Creates a wall made of the entity specified.")
register_clcmd("ent_lookingat", "e_lookingat", ACCESS_ENT_LOOKINGAT, "Gives information about the entity being looked at.")
register_clcmd("ent_search", "e_search", ACCESS_ENT_SEARCH, "Searches for entities within 100 cells of your location.")
register_clcmd("ent_showx", "showaxis", ACCESS_ENT_SHOWAXIS, "Creates a temporary line in the x direction.")
register_clcmd("ent_showy", "showaxis", ACCESS_ENT_SHOWAXIS, "Creates a temporary line in the y direction.")
register_clcmd("ent_showz", "showaxis", ACCESS_ENT_SHOWAXIS, "Creates a temporary line in the z direction.")
register_clcmd("ent_showkeyvalue", "e_showkeyvalue" ,ACCESS_ENT_SHOWKEYVALUE, "[entId/name/authid/#userid] Shows keyvalues of the entity being looked at or specified.")
register_clcmd("ent_use", "e_use", ACCESS_ENT_USE, "[name/authid/#userid] Makes you/the player use the entity you're looking at (open door, defuse bomb, ..).")
register_clcmd("jedichoke", "choke_func", ACCESS_JEDICHOKE, "Chokes the grabee.")
register_event("StatusValue","spec_event","be","1=2")
RegisterHam(Ham_Killed, "player", "death_event", 1)
RegisterHam(Ham_Spawn, "player", "fwd_Ham_Spawn_post", 1)
g_msgidScreenShake = get_user_msgid("ScreenShake")
g_msgidScreenFade = get_user_msgid("ScreenFade")
g_msgidDamage = get_user_msgid("Damage")
g_maxents = global_get(glb_maxEntities)
g_maxplayers = get_maxplayers()
new Float:ori[3], i
for(i = g_maxplayers+1; i <= g_maxents; i++)
{
if(pev_valid(i))
{
pev(i, pev_origin, ori)
if((pev(i, pev_solid) == SOLID_BSP && pev(i, pev_movetype) == MOVETYPE_PUSH)
|| (ori[0] == 0.0 && ori[1] == 0.0 && ori[2] == 0.0))
{
set_pev(i, pev_iuser4, 99)
}
}
}
}
public plugin_precache()
{
if(cvar_exists("amxmod_version"))
server_cmd("quit")
register_forward(FM_KeyValue, "fwd_KeyValue_Post", 1)
laserbeam = precache_model(g_grabBeam)
precache_sound(g_PainSound)
precache_model(g_spriteTeleStart)
precache_model(g_spriteTeleEnd)
}
Float:calcDamage(Float:vel[3])
{
return vector_length(vel) * (100.0 / get_pcvar_float(speedkill))
}
public entity_touch(entity1, entity2)
{
new Float:vel[3], Float:damage
if(entity1 > 0 && pev_valid(entity1) && is_user_alive(entity2))
{
new i
for(i = 1; i <= g_maxplayers; i++)
{
if(grabbed[i] == entity1)
{
pev(entity1, pev_velocity, vel)
damage = calcDamage(vel)
if(damage > 0.0)
{
new Float:ori[3]
pev(entity2, pev_origin, ori)
new classname[32]
pev(entity1, pev_classname, classname, 31)
fm_fakedamage(entity2, classname, damage, DMG_CRUSH)
//take_damage(entity2, i, ori, damage, DMG_CRUSH, classname, 0)
}
set_pev(entity2, pev_velocity, vel)
return 0
}
}
}
return 0
}
setOldRendering(id, ent, pos) fm_set_rendering(ent, grabbedOldRender[id][pos][0], grabbedOldRender[id][pos][1], grabbedOldRender[id][pos][2], grabbedOldRender[id][pos][3], grabbedOldRender[id][pos][4], grabbedOldRender[id][pos][5])
setMMGrabRendering(ent) fm_set_rendering(ent, kRenderFxNone, 0, 255, 0, kRenderTransColor, 96)
setSaveRendering(ent) fm_set_rendering(ent, kRenderFxNone, 255, 0, 100, kRenderTransColor, 96)
canCreateEntity()
{
if(fm_entity_count() < (g_maxents - 5 * g_maxplayers)) return 1
return 0
}
searchTarget(id, aiming)
{
new targetid=0, body, found=0
if(aiming == 1) get_user_aiming(id, targetid, body)
if(!targetid)
{
new iOrigin[3], Float:origin[3]
get_user_origin(id, iOrigin, 3)
IVecFVec(iOrigin, origin)
new string[64], i
targetid = fm_find_ent_in_sphere(id, origin, 8.0)
while(targetid > 0 && found == 0)
{
string[0] = '^0'
pev(targetid, pev_model, string, 63)
for(i = 0; i < MAX_MODELS_TO_GRAB; i++)
{
if(containi(string, g_modelToGrab[i]) != -1)
{
found = 1
break
}
}
string[0] = '^0'
pev(targetid, pev_classname, string, 63)
for(i = 0; i < MAX_CLASSNAMES_TO_GRAB; i++)
{
if(containi(string, g_classnameToGrab[i]) != -1)
{
found = 1
break
}
}
if(found == 0) targetid = fm_find_ent_in_sphere(targetid, origin, 8.0)
}
}
return targetid
}
makeBounds(Float:traceEnds[8][3], Float:origin[3])
{
traceEnds[0][0] = origin[0] - BOUNDS
traceEnds[0][1] = origin[1] - BOUNDS
traceEnds[0][2] = origin[2] - BOUNDS
traceEnds[1][0] = origin[0] - BOUNDS
traceEnds[1][1] = origin[1] - BOUNDS
traceEnds[1][2] = origin[2] + BOUNDS
traceEnds[2][0] = origin[0] + BOUNDS
traceEnds[2][1] = origin[1] - BOUNDS
traceEnds[2][2] = origin[2] + BOUNDS
traceEnds[3][0] = origin[0] + BOUNDS
traceEnds[3][1] = origin[1] - BOUNDS
traceEnds[3][2] = origin[2] - BOUNDS
traceEnds[4][0] = origin[0] - BOUNDS
traceEnds[4][1] = origin[1] + BOUNDS
traceEnds[4][2] = origin[2] - BOUNDS
traceEnds[5][0] = origin[0] - BOUNDS
traceEnds[5][1] = origin[1] + BOUNDS
traceEnds[5][2] = origin[2] + BOUNDS
traceEnds[6][0] = origin[0] + BOUNDS
traceEnds[6][1] = origin[1] + BOUNDS
traceEnds[6][2] = origin[2] + BOUNDS
traceEnds[7][0] = origin[0] + BOUNDS
traceEnds[7][1] = origin[1] + BOUNDS
traceEnds[7][2] = origin[2] - BOUNDS
return 1
}
makeCopyOf(entId)
{
if(canCreateEntity() == 0)
{
server_print("[AMXX] Too many entities on the map")
return 0
}
if(!pev_valid(entId) || is_user_connected(entId)) return 0
new classname[64]
pev(entId, pev_classname, classname, 63)
new copyId = fm_create_entity(classname)
if(copyId < 1) return 0
new oldEntId = 0
if(!g_key[entId][0][0])
{
oldEntId = entId
entId = pev(entId, pev_iuser3)
}
if(!g_key[entId][0][0]) return 0
new maxkeyvalues = g_keyValueNum[entId]
for(new i = 0; i < maxkeyvalues; i++)
{
fm_set_kvd(copyId, g_key[entId][i], g_value[entId][i])
}
fm_DispatchSpawn(copyId)
set_pev(copyId, pev_iuser3, entId)
set_pev(copyId, pev_iuser4, pev(entId, pev_iuser4))
new Float:vec[3]
pev((oldEntId == 0) ? entId : oldEntId, pev_absmin, vec)
set_pev(copyId, pev_absmin, vec)
pev((oldEntId == 0) ? entId : oldEntId, pev_absmax, vec)
set_pev(copyId, pev_absmax, vec)
return copyId
}
public fwd_KeyValue_Post(entity, kvd_handle)
{
if(entity >= 0 && pev_valid(entity) && entity < MAX_ENTS && g_keyValueNum[entity] < MAX_KEYVALUES)
{
new szClassName[32], szKeyName[KEY_LENGTH], szVal[VALUE_LENGTH]
get_kvd(kvd_handle, KV_ClassName, szClassName, 31)
get_kvd(kvd_handle, KV_KeyName, szKeyName, KEY_LENGTH - 1)
get_kvd(kvd_handle, KV_Value, szVal, VALUE_LENGTH - 1)
if(szKeyName[0] && szVal[0])
{
copy(g_key[entity][g_keyValueNum[entity]], KEY_LENGTH-1, szKeyName)
copy(g_value[entity][g_keyValueNum[entity]], VALUE_LENGTH-1, szVal)
g_keyValueNum[entity]++
}
}
}
public grabtask(parm[])
{
new id = parm[0]
if (!grabbed[id])
{
new targetid = 0
new body
get_user_aiming(id, targetid, body)
if(targetid)
{
if(grabbedCopyEnt[id] == 1)
{
new idCopy = makeCopyOf(targetid)
if(idCopy > 0) targetid = idCopy
}
set_grabbed(id, targetid)
}
else
{
new iOrigin[3], Float:origin[3]
get_user_origin(id, iOrigin, 3)
IVecFVec(iOrigin, origin)
new string[64], i
targetid = fm_find_ent_in_sphere(id, origin, 8.0)
while(targetid > 0)
{
string[0] = '^0'
pev(targetid, pev_model, string, 63)
for(i = 0; i < MAX_MODELS_TO_GRAB; i++)
{
if(containi(string, g_modelToGrab[i]) != -1)
{
if(grabbedCopyEnt[id] == 1)
{
new idCopy = makeCopyOf(targetid)
if(idCopy > 0) targetid = idCopy
}
set_grabbed(id, targetid)
return 0
}
}
string[0] = '^0'
pev(targetid, pev_classname, string, 63)
for(i = 0; i < MAX_CLASSNAMES_TO_GRAB; i++)
{
if(containi(string, g_classnameToGrab[i]) != -1)
{
if(grabbedCopyEnt[id] == 1)
{
new idCopy = makeCopyOf(targetid)
if(idCopy > 0) targetid = idCopy
}
}
set_grabbed(id, targetid)
return 0
}
}
targetid = fm_find_ent_in_sphere(targetid, origin, 8.0)
}
}
else
{
if(!pev_valid(grabbed[id]))
{
release(id, 0, 0)
return 0
}
new origin[3], look[3]
new direction[3], moveto[3]
new gborigin[3], Float:grabbedorigin[3]
new Float:velocity[3], length
get_user_origin(id, origin, 1)
get_user_origin(id, look, 3)
if(grabbedIsBrush[id] == 1)
fm_get_brush_entity_origin(grabbed[id], grabbedorigin)
else
pev(grabbed[id], pev_origin, grabbedorigin)
FVecIVec(grabbedorigin, gborigin)
direction[0] = look[0] - origin[0]
direction[1] = look[1] - origin[1]
direction[2] = look[2] - origin[2]
length = get_distance(look, origin)
if (!length) length = 1
moveto[0] = origin[0] + direction[0] * grablength[id] / length
moveto[1] = origin[1] + direction[1] * grablength[id] / length
moveto[2] = origin[2] + direction[2] * grablength[id] / length
if(get_pcvar_num(grab_beam))
{
message_begin(MSG_PVS, SVC_TEMPENTITY, gborigin)
write_byte(1)
write_short(id)
write_coord(gborigin[0])
write_coord(gborigin[1])
write_coord(gborigin[2])
write_short(laserbeam)
write_byte(1)
write_byte(1)
write_byte(1)
write_byte(6)
write_byte(0)
write_byte(255)
write_byte(0)
write_byte(0)
write_byte(128)
write_byte(0)
message_end()
}
velocity[0] = (moveto[0] - grabbedorigin[0]) * velocity_multiplier
velocity[1] = (moveto[1] - grabbedorigin[1]) * velocity_multiplier
velocity[2] = (moveto[2] - grabbedorigin[2]) * velocity_multiplier
new not_a_player
new Float:fmoveto[3]
IVecFVec(moveto, fmoveto)
if(g_massMoveOn[id] == true)
{
new ent, i
new num = g_massMoveNum[id]
new Float:grabbedorigin2[3]
for(i = 0; i < num; i++)
{
ent = g_massMoveEnts[id][i]
if(!pev_valid(ent)) continue
not_a_player = !is_user_connected(ent)
if(grabbedNoClip[id] == 1)
{
IVecFVec(moveto, fmoveto)
if(!not_a_player)
{
set_pev(ent, pev_solid, SOLID_NOT)
set_pev(ent, pev_movetype, MOVETYPE_NOCLIP)
if(i == 0)
fm_entity_set_origin(ent, fmoveto)
else
{
pev(ent, pev_origin, grabbedorigin2)
grabbedorigin2[0] += (grabbedorigin[0] - g_massMoveOldOrigin[id][0])
grabbedorigin2[1] += (grabbedorigin[1] - g_massMoveOldOrigin[id][1])
grabbedorigin2[2] += (grabbedorigin[2] - g_massMoveOldOrigin[id][2])
fm_entity_set_origin(ent, grabbedorigin2)
}
}
else
{
pev(ent, pev_origin, grabbedorigin2)
grabbedorigin2[0] += (grabbedorigin[0] - g_massMoveOldOrigin[id][0])
grabbedorigin2[1] += (grabbedorigin[1] - g_massMoveOldOrigin[id][1])
grabbedorigin2[2] += (grabbedorigin[2] - g_massMoveOldOrigin[id][2])
new Float:Min[3], Float:Max[3]
pev(grabbed[id], pev_mins, Min)
pev(grabbed[id], pev_maxs, Max)
grabbedorigin2[0] -= (Min[0] + Max[0]) * 0.5
grabbedorigin2[1] -= (Min[1] + Max[1]) * 0.5
grabbedorigin2[2] -= (Min[2] + Max[2]) * 0.5
fm_entity_set_origin(grabbed[id], grabbedorigin2)
}
continue
}
else if(not_a_player)
{
set_pev(ent, pev_solid, SOLID_BBOX)
set_pev(ent, pev_movetype, MOVETYPE_FLY)
}
set_pev(ent, pev_velocity, velocity)
}
g_massMoveOldOrigin[id][0] = grabbedorigin[0]
g_massMoveOldOrigin[id][1] = grabbedorigin[1]
g_massMoveOldOrigin[id][2] = grabbedorigin[2]
}
else
{
not_a_player = !is_user_connected(grabbed[id])
if(grabbedNoClip[id] == 1)
{
IVecFVec(moveto, fmoveto)
if(!not_a_player)
{
set_pev(grabbed[id], pev_solid, SOLID_NOT)
set_pev(grabbed[id], pev_movetype, MOVETYPE_NOCLIP)
fm_entity_set_origin(grabbed[id], fmoveto)
}
else
{
new Float:Min[3], Float:Max[3]
pev(grabbed[id], pev_mins, Min)
pev(grabbed[id], pev_maxs, Max)
fmoveto[0] -= (Min[0] + Max[0]) * 0.5
fmoveto[1] -= (Min[1] + Max[1]) * 0.5
fmoveto[2] -= (Min[2] + Max[2]) * 0.5
fm_entity_set_origin(grabbed[id], fmoveto)
}
return 0
}
else if(not_a_player)
{
set_pev(grabbed[id], pev_solid, SOLID_BBOX)
set_pev(grabbed[id], pev_movetype, MOVETYPE_FLY)
}
set_pev(grabbed[id], pev_velocity, velocity)
}
}
return 1
}
public release(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
if (grabmodeon[id])
{
new Float:origin[3], Float:traceEnds[8][3]
if(g_massMoveOn[id] == true)
{
new ent, i
new num = g_massMoveNum[id]
new goToNextEnt = 0
for(i = 0; i < num; i++)
{
ent = g_massMoveEnts[id][i]
if(!pev_valid(ent)) continue
if(grabbedNoClip[id] == 0 && !is_user_connected(ent) && pev(ent, pev_iuser4) != 99)
{
pev(ent, pev_origin, origin)
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(ent)
goToNextEnt = i + 1
break
}
}
}
if(goToNextEnt == i+1) continue
set_pev(ent, pev_flags, grabbedOldFlags[id][i])
set_pev(ent, pev_movetype, grabbedOldMoveType[id][i])
set_pev(ent, pev_solid, grabbedOldSolid[id][i])
setOldRendering(id, ent, i)
}
client_print(id,print_chat,"[AMXX] You have released something")
}
else if (grabbed[id])
{
if(pev_valid(grabbed[id]))
{
if(grabbedNoClip[id] == 0 && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
{
pev(grabbed[id], pev_origin, origin)
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
client_print(id, print_chat, "[AMXX] You can't release a TRIGGER entity inside something SOLID")
return 1
}
}
}
set_pev(grabbed[id], pev_flags, grabbedOldFlags[id][0])
set_pev(grabbed[id], pev_movetype, grabbedOldMoveType[id][0])
set_pev(grabbed[id], pev_solid, grabbedOldSolid[id][0])
setOldRendering(id, grabbed[id], 0)
client_print(id, print_chat, "[AMXX] You have released something")
}
}
grabmodeon[id] = false
grabbed[id] = 0
grabbedCopyEnt[id] = 0
remove_task(100 + id)
}
return 1
}
public grab_toggle(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
if (grabmodeon[id])
release(id, 0, 0)
else
{
new cmd[32]
read_argv(0, cmd, 31)
if(containi(cmd, "2") != -1)
grabbedNoClip[id] = 1
else
grabbedNoClip[id] = 0
if(read_argc() >= 2)
{
new arg[32]
read_argv(1, arg, 31)
new ent
if(is_str_num(arg))
ent = str_to_num(arg)
else
ent = cmd_target(id, arg, 5)
if(!pev_valid(ent) || ent == id)
{
console_print(id, "[AMXX] Entity invalid")
return 1
}
new range = 200
if(read_argc() == 3)
{
read_argv(2, arg, 31)
range = str_to_num(arg)
if(range <= 0)
{
console_print(id, "[AMXX] Incorrect range")
return 1
}
}
new parm[1]
parm[0] = id
velocity_multiplier = get_pcvar_num(grab_force)
grabmodeon[id] = true
set_task(0.1, "grabtask", 100 + id, parm, 1, "b")
set_grabbed(id, ent)
grablength[id] = range
}
grab(id, 0, 0)
}
return 1
}
public copyent_toggle(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
if(grabmodeon[id])
release(id, 0, 0)
else
{
grabbedNoClip[id] = 1
grabbedCopyEnt[id] = 1
grab(id, 0, 0)
}
return 1
}
public grab(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
if(level != 0 || cid != 0)
{
new cmd[32]
read_argv(0, cmd, 31)
if(containi(cmd, "2") != -1)
grabbedNoClip[id] = 1
else
grabbedNoClip[id] = 0
}
if (!grabmodeon[id])
{
new targetid=0, body
new parm[1]
parm[0] = id
velocity_multiplier = get_pcvar_num(grab_force)
grabmodeon[id]=true
set_task(0.1, "grabtask", 100 + id, parm, 1, "b")
get_user_aiming(id, targetid, body)
if (targetid)
{
if(grabbedCopyEnt[id] == 1)
{
new idCopy = makeCopyOf(targetid)
if(idCopy > 0) targetid = idCopy
}
set_grabbed(id, targetid)
return 1
}
else
{
new iOrigin[3]
new Float:origin[3]
get_user_origin(id, iOrigin, 3)
IVecFVec(iOrigin, origin)
new string[64], i
targetid = fm_find_ent_in_sphere(id, origin, 8.0)
while(targetid > 0)
{
string[0] = '^0'
pev(targetid, pev_model, string, 63)
for(i = 0; i < MAX_MODELS_TO_GRAB; i++)
{
if(containi(string, g_modelToGrab[i]) != -1)
{
if(grabbedCopyEnt[id] == 1)
{
new idCopy = makeCopyOf(targetid)
if(idCopy > 0) targetid = idCopy
}
set_grabbed(id, targetid)
return 0
}
}
string[0] = '^0'
pev(targetid, pev_classname, string, 63)
for(i = 0; i < MAX_CLASSNAMES_TO_GRAB; i++)
{
if(containi(string, g_classnameToGrab[i]) != -1)
{
if(grabbedCopyEnt[id] == 1)
{
new idCopy = makeCopyOf(targetid)
if(idCopy > 0) targetid = idCopy
}
set_grabbed(id, targetid)
return 0
}
}
targetid = fm_find_ent_in_sphere(targetid, origin, 8.0)
}
}
client_print(id, print_chat, "[AMXX] Searching for a target")
}
return 1
}
public copyent(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
grabbedCopyEnt[id] = 1
grab(id, 0, 0)
return 1
}
public throw(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
new Float:origin[3], Float:traceEnds[8][3]
new Float:pVelocity[3]
if(g_massMoveOn[id] == true)
{
velocity_by_aim(id, get_pcvar_num(throw_force), pVelocity)
new ent, i, num = g_massMoveNum[id], goToNextEnt = 0
for(i = 0; i < num; i++)
{
ent = g_massMoveEnts[id][i]
if(!pev_valid(ent)) continue
if(grabbedNoClip[id] == 0 && !is_user_connected(ent) && pev(ent, pev_iuser4) != 99)
{
pev(ent, pev_origin, origin)
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(ent)
goToNextEnt = i + 1
break
}
}
}
if(goToNextEnt == i+1) continue
set_pev(ent, pev_velocity, pVelocity)
set_pev(ent, pev_flags, grabbedOldFlags[id][i])
set_pev(ent, pev_movetype, grabbedOldMoveType[id][i])
set_pev(ent, pev_solid, grabbedOldSolid[id][i])
setOldRendering(id, ent, i)
}
grabbed[id] = 0
grabbedCopyEnt[id] = 0
grabmodeon[id] = false
remove_task(100 + id)
client_print(id,print_chat,"[AMXX] You have thrown something")
}
else if (grabbed[id])
{
if(pev_valid(grabbed[id]))
{
if(grabbedNoClip[id] == 0 && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
{
pev(grabbed[id], pev_origin, origin)
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
client_print(id, print_chat, "[AMXX] You can't release a TRIGGER entity inside something SOLID")
return 1
}
}
}
velocity_by_aim(id, get_pcvar_num(throw_force), pVelocity)
set_pev(grabbed[id], pev_velocity, pVelocity)
setOldRendering(id, grabbed[id], 0)
set_pev(grabbed[id], pev_flags, grabbedOldFlags[id][0])
set_pev(grabbed[id], pev_movetype, grabbedOldMoveType[id][0])
set_pev(grabbed[id], pev_solid, grabbedOldSolid[id][0])
}
grabbed[id] = 0
grabbedCopyEnt[id] = 0
grabmodeon[id] = false
remove_task(100 + id)
client_print(id, print_chat, "[AMXX] You have thrown something")
}
return 1
}
public spec_event(id)
{
new targetid = read_data(2)
if (!is_user_alive(targetid))
return 0
if (grabmodeon[id] && !grabbed[id])
set_grabbed(id, targetid)
return 0
}
public set_grabbed(id, targetid)
{
if(is_user_alive(targetid) && get_user_flags(targetid) & ADMIN_IMMUNITY && !(get_user_flags(id) & ADMIN_SUPREME))
{
grabmodeon[id] = false
grabbed[id] = 0
grabbedCopyEnt[id] = 0
remove_task(100 + id)
client_print(id, print_chat, "[AMXX] Player has immunity")
return 0
}
new origin1[3], origin2[3], Float:forigin2[3]
get_user_origin(id, origin1)
pev(targetid, pev_origin, forigin2)
if(!is_user_connected(targetid) && pev(targetid, pev_iuser4) == 99)
{
fm_get_brush_entity_origin(targetid, forigin2)
grabbedIsBrush[id] = 1
}
FVecIVec(forigin2, origin2)
g_massMoveOldOrigin[id][0] = forigin2[0]
g_massMoveOldOrigin[id][1] = forigin2[1]
g_massMoveOldOrigin[id][2] = forigin2[2]
grabbed[id] = targetid
grabbedOldMoveType[id][0] = pev(targetid, pev_movetype)
grabbedOldSolid[id][0] = pev(targetid, pev_solid)
grabbedOldFlags[id][0] = pev(targetid, pev_flags)
if(g_massMoveOn[id] == false)
{
new Float:color[3]
grabbedOldRender[id][0][0] = pev(targetid, pev_renderfx)
pev(targetid, pev_rendercolor, color)
grabbedOldRender[id][0][1] = floatround(color[0])
grabbedOldRender[id][0][2] = floatround(color[1])
grabbedOldRender[id][0][3] = floatround(color[2])
grabbedOldRender[id][0][4] = pev(targetid, pev_rendermode)
grabbedOldRender[id][0][5] = pev(targetid, pev_renderamt)
if(get_pcvar_num(grab_glow))
fm_set_rendering(targetid, kRenderFxGlowShell, get_pcvar_num(grab_red), get_pcvar_num(grab_green), get_pcvar_num(grab_blue), kRenderTransAlpha, get_pcvar_num(grab_transp))
}
grablength[id] = get_distance(origin1,origin2)
new classname[32]
pev(targetid, pev_classname, classname, 31)
client_print(id, print_chat, "[AMXX] You have grabbed something! (id=%d, classname=%s)", targetid, classname)
return 0
}
public disttask(parm[])
{
new id = parm[0]
if (grabbed[id])
{
if (parm[1] == 1)
grablength[id] -= get_pcvar_num(pushpull_speed)
else if (parm[1] == 2)
grablength[id] += get_pcvar_num(pushpull_speed)
}
}
public startpull(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
if (grabbed[id])
{
new parm[2]
parm[0] = id
parm[1] = 1
set_task(0.1, "disttask", 500 + id, parm, 2, "b")
}
return 1
}
public startpush(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
if (grabbed[id])
{
new parm[2]
parm[0] = id
parm[1] = 2
set_task(0.1, "disttask", 500 + id, parm, 2, "b")
}
return 1
}
public stopdist(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
if (grabbed[id])
remove_task(500 + id)
return 1
}
public choke_func(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return 1
if (is_user_alive(grabbed[id]) && !task_exists(id + 200))
{
new victim_name[33]
get_user_name(grabbed[id], victim_name, 32)
client_print(grabbed[id], print_chat, "*** You Are Being Choked By A Jedi ***")
client_print(id, print_chat, "*** You Are Choking %s ***", victim_name)
message_begin(MSG_ONE, g_msgidScreenShake , {0,0,0}, grabbed[id])
write_short(1<<14)
write_short(1<<14)
write_short(1<<14)
message_end()
message_begin(MSG_ONE, g_msgidScreenFade , {0,0,0}, grabbed[id])
write_short(1<<1)
write_short(1<<0)
write_short(0<<1)
write_byte(255)
write_byte(30)
write_byte(30)
write_byte(180)
message_end()
new vec[3]
get_user_origin(grabbed[id], vec)
message_begin(MSG_ONE, g_msgidDamage, {0,0,0}, grabbed[id])
write_byte(30)
write_byte(30)
write_long(1<<0)
write_coord(vec[0])
write_coord(vec[1])
write_coord(vec[2])
message_end()
new var[1],health
var[0] = id
set_task(1.0, "repeat_shake", id + 200, var, 1, "a", 8)
emit_sound(grabbed[id], CHAN_BODY, g_PainSound, 1.0,ATTN_NORM, 0, PITCH_NORM)
health = pev(grabbed[id], pev_health)
if(health>3)
set_pev(grabbed[id], pev_health, health - 3)
}
return 1
}
public repeat_shake(var[])
{
new id = var[0]
if (is_user_alive(grabbed[id]))
{
message_begin(MSG_ONE, g_msgidScreenShake , {0,0,0}, grabbed[id])
write_short(1<<14)
write_short(1<<14)
write_short(1<<14)
message_end()
message_begin(MSG_ONE, g_msgidScreenFade , {0,0,0}, grabbed[id])
write_short(1<<1)
write_short(1<<0)
write_short(0<<1)
write_byte(255)
write_byte(30)
write_byte(30)
write_byte(180)
message_end()
new vec[3]
get_user_origin(grabbed[id],vec)
message_begin(MSG_ONE, g_msgidDamage, {0,0,0}, grabbed[id])
write_byte(30)
write_byte(30)
write_long(1<<0)
write_coord(vec[0])
write_coord(vec[1])
write_coord(vec[2])
message_end()
new health = pev(grabbed[id], pev_health)
if(health>3)
set_pev(grabbed[id], health - 3)
emit_sound(grabbed[id], CHAN_BODY, g_PainSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else
{
if(task_exists(id + 200))
remove_task(id + 200)
}
return 0
}
public fwd_Ham_Spawn_post(id)
{
if(task_exists(100 + id))
remove_task(100 + id)
if(grabbed[id] > 0 && pev_valid(grabbed[id]))
setOldRendering(id, grabbed[id], 0)
grabbed[id] = 0
grabmodeon[id] = false
massrelease(id)
return HAM_IGNORED
}
public death_event()
{
new id = read_data(2)
if(!is_user_connected(id)) return 0
if(task_exists(100 + id))
remove_task(100 + id)
if(grabbed[id] > 0 && pev_valid(grabbed[id]))
{
if(pev_valid(grabbed[id]))
{
if(grabbedNoClip[id] == 0 && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
{
new Float:origin[3]
pev(grabbed[id], pev_origin, origin)
new Float:traceEnds[8][3]
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(grabbed[id])
break
}
}
}
if(pev_valid(grabbed[id]))
{
set_pev(grabbed[id], pev_flags, grabbedOldFlags[id][0])
set_pev(grabbed[id], pev_movetype, grabbedOldMoveType[id][0])
set_pev(grabbed[id], pev_solid, grabbedOldSolid[id][0])
setOldRendering(id, grabbed[id], 0)
}
}
if(g_massMoveOn[id] == true)
{
new ent, i, num = g_massMoveNum[id], goToNextEnt = 0
for(i = 0; i < num; i++)
{
ent = g_massMoveEnts[id][i]
if(!pev_valid(ent)) continue
if(grabbedNoClip[id] == 0 && !is_user_connected(ent) && pev(ent, pev_iuser4) != 99)
{
pev(ent, pev_origin, origin)
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(ent)
goToNextEnt = i + 1
break
}
}
}
if(goToNextEnt == i+1) continue
set_pev(ent, pev_flags, grabbedOldFlags[id][i])
set_pev(ent, pev_movetype, grabbedOldMoveType[id][i])
set_pev(ent, pev_solid, grabbedOldSolid[id][i])
setOldRendering(id, ent, i)
}
}
}
grabbed[id] = 0
grabmodeon[id] = false
new players[32], inum, player
get_players(players, inum)
for(new k = 0 ; k < inum ; k++)
{
player = players[k]
if(grabbed[player] == id)
{
if(task_exists(100 + player))
remove_task(100 + player)
grabbed[player] = 0
grabmodeon[player] = false
}
}
massrelease(id)
return 0
}
public client_kill(id)
{
if(task_exists(100 + id))
remove_task(100 + id)
if(grabbed[id] > 0 && pev_valid(grabbed[id]))
{
if(pev_valid(grabbed[id]))
{
if(grabbedNoClip[id] == 0 && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
{
new Float:origin[3]
pev(grabbed[id], pev_origin, origin)
new Float:traceEnds[8][3]
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(grabbed[id])
break
}
}
}
if(pev_valid(grabbed[id]))
{
set_pev(grabbed[id], pev_flags, grabbedOldFlags[id][0])
set_pev(grabbed[id], pev_movetype, grabbedOldMoveType[id][0])
set_pev(grabbed[id], pev_solid, grabbedOldSolid[id][0])
setOldRendering(id, grabbed[id], 0)
}
}
if(g_massMoveOn[id] == true)
{
new ent, i
new num = g_massMoveNum[id]
new goToNextEnt = 0
for(i = 0; i < num; i++)
{
ent = g_massMoveEnts[id][i]
if(!pev_valid(ent)) continue
if(grabbedNoClip[id] == 0 && !is_user_connected(ent) && pev(ent, pev_iuser4) != 99)
{
pev(ent, pev_origin, origin)
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(ent)
goToNextEnt = i + 1
break
}
}
}
if(goToNextEnt == i + 1) continue
set_pev(ent, pev_flags, grabbedOldFlags[id][i])
set_pev(ent, pev_movetype, grabbedOldMoveType[id][i])
set_pev(ent, pev_solid, grabbedOldSolid[id][i])
setOldRendering(id, ent, i)
}
}
}
grabbed[id] = 0
grabmodeon[id] = false
new players[32], inum, player
get_players(players, inum)
for(new k = 0 ; k < inum ; k++)
{
player = players[k]
if(grabbed[player] == id)
{
if(task_exists(100 + player))
remove_task(100 + player)
grabbed[player] = 0
grabmodeon[player] = false
}
}
massrelease(id)
return 0
}
public client_connect(id)
{
if(task_exists(100 + id))
remove_task(100 + id)
grabbed[id] = 0
grabmodeon[id] = false
}
public client_disconnect(id)
{
if(task_exists(100 + id))
remove_task(100 + id)
if(grabbed[id] > 0 && pev_valid(grabbed[id]))
{
if(pev_valid(grabbed[id]))
{
if(grabbedNoClip[id] == 0 && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
{
new Float:origin[3]
pev(grabbed[id], pev_origin, origin)
new Float:traceEnds[8][3]
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(grabbed[id])
break
}
}
}
if(pev_valid(grabbed[id]))
{
set_pev(grabbed[id], pev_flags, grabbedOldFlags[id][0])
set_pev(grabbed[id], pev_movetype, grabbedOldMoveType[id][0])
set_pev(grabbed[id], pev_solid, grabbedOldSolid[id][0])
setOldRendering(id, grabbed[id], 0)
}
}
if(g_massMoveOn[id] == true)
{
new ent, i
new num = g_massMoveNum[id]
new goToNextEnt = 0
for(i = 0; i < num; i++)
{
ent = g_massMoveEnts[id][i]
if(!pev_valid(ent)) continue
if(grabbedNoClip[id] == 0 && !is_user_connected(ent) && pev(ent, pev_iuser4) != 99)
{
pev(ent, pev_origin, origin)
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(ent)
goToNextEnt = i + 1
break
}
}
}
if(goToNextEnt == i + 1) continue
set_pev(ent, pev_flags, grabbedOldFlags[id][i])
set_pev(ent, pev_movetype, grabbedOldMoveType[id][i])
set_pev(ent, pev_solid, grabbedOldSolid[id][i])
setOldRendering(id, ent, i)
}
}
}
grabbed[id] = 0
grabmodeon[id] = false
massrelease(id)
}
public e_kill(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
if(read_argc() >= 2)
{
new class[64]
new Float:range = 250.0
if(read_argc() == 3)
{
read_argv(2, class, 63)
range = floatstr(class)
}
read_argv(1, class, 63)
new Float:origin[3]
if(id > 0) pev(id, pev_origin, origin)
new string[64], tempent
new targetid = fm_find_ent_in_sphere(id, origin, range)
while(targetid > 0)
{
tempent = fm_find_ent_in_sphere(targetid, origin, range)
string[0] = '^0'
pev(targetid, pev_classname, string, 63)
if(equali(string, class))
fm_remove_entity(targetid)
targetid = tempent
}
return 1
}
if(id <= 0) return 1
new targetid = searchTarget(id, 1)
if(targetid > 0)
{
if(!is_user_connected(targetid) && pev_valid(targetid))
{
fm_remove_entity(targetid)
console_print(id, "[AMXX] The entity %d has been removed", targetid)
return 1
}
}
console_print(id, "[AMXX] No entity or entity not valid")
return 1
}
public e_rotate(id, level, cid)
{
if(!cmd_access(id, level, cid, 4))
return 1
new targetid=0
if(read_argc() == 5)
{
new arg[32]
read_argv(4, arg, 31)
if(is_str_num(arg))
targetid = str_to_num(arg)
else
targetid = cmd_target(id, arg, 5)
if(!pev_valid(targetid) || targetid == id)
{
console_print(id, "[AMXX] Entity invalid")
return 1
}
}
else
targetid = searchTarget(id, 1)
if(targetid > 0)
{
if(pev_valid(targetid))
{
new Float:angles[3]
new Float:vangle[3]
pev(targetid, pev_angles, angles)
pev(targetid, pev_v_angle, vangle)
new i, arg[32]
for(i = 0; i < 3; i++)
{
read_argv(i + 1, arg, 31)
angles[i] += floatstr(arg)
vangle[i] += floatstr(arg)
}
set_pev(targetid, pev_angles, angles)
set_pev(targetid, pev_v_angle, vangle)
set_pev(targetid, pev_fixangle, 1)
console_print(id, "[AMXX] The entity %d has been rotated", targetid)
return 1
}
}
console_print(id, "[AMXX] No entity or entity not valid")
return 1
}
public e_droptofloor(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
new targetid = 0
if(read_argc() == 2)
{
new arg[32]
read_argv(1, arg, 31)
if(is_str_num(arg))
targetid = str_to_num(arg)
if(!pev_valid(targetid) || targetid <= g_maxplayers)
{
console_print(id, "[AMXX] Entity invalid")
return 1
}
}
else
targetid = searchTarget(id, 1)
if(targetid > 0)
{
if(pev_valid(targetid))
{
fm_drop_to_floor(targetid)
console_print(id, "[AMXX] The entity %d has been dropped to floor", targetid)
return 1
}
}
console_print(id, "[AMXX] No entity or entity not valid")
return 1
}
public e_telestart(id, level, cid)
{
if(!cmd_access(id,level,cid,2))
return 1
new arg[32]
read_argv(1, arg, 31)
new Float:origin[3]
if(read_argc() == 5)
{
new arg2[32]
read_argv(2, arg2, 31)
origin[0] = floatstr(arg2)
read_argv(3, arg2, 31)
origin[1] = floatstr(arg2)
read_argv(4, arg2, 31)
origin[2] = floatstr(arg2)
}
else
pev(id, pev_origin, origin)
if(canCreateEntity() == 0)
{
console_print(id, "[AMXX] Too many entities on the map.")
return 1
}
new ent = fm_create_entity("cycler_sprite")
if(ent > 0)
{
fm_set_kvd(ent, "classname", "cycler_sprite")
fm_set_kvd(ent, "model", g_spriteTeleStart)
fm_set_kvd(ent, "rendercolor", "0 0 0")
fm_set_kvd(ent, "framerate", "10")
fm_set_kvd(ent, "angles", "0 0 0")
fm_DispatchSpawn(ent)
set_pev(ent, pev_model, g_spriteTeleStart)
set_pev(ent, pev_size, Float:{-40.0, -40.0, -40.0}, Float:{40.0, 40.0, 40.0})
set_pev(ent, pev_rendermode, 5)
set_pev(ent, pev_renderamt, 175.0)
set_pev(ent, pev_solid, SOLID_NOT)
set_pev(ent, pev_origin, origin)
new ent2 = fm_create_entity("trigger_teleport")
if(ent2 > 0)
{
fm_set_kvd(ent2, "classname", "trigger_teleport")
fm_set_kvd(ent2, "style", "32")
fm_set_kvd(ent2, "target", arg)
fm_DispatchSpawn(ent2)
set_pev(ent2, pev_euser1, ent)
set_pev(ent2, pev_size, Float:{-10.0, -10.0, -10.0}, Float:{10.0, 10.0, 10.0})
set_pev(ent2, pev_origin, origin)
set_pev(ent2, pev_solid, SOLID_TRIGGER)
set_pev(ent2, pev_effects, EF_NODRAW)
console_print(id, "[AMXX] Teleporter start ^"%s^" has been created", arg)
return 1
}
}
console_print(id, "[AMXX] Couldn't create teleporter start")
return 1
}
public e_teleend(id, level, cid)
{
if(!cmd_access(id, level, cid, 2))
return 1
new arg[32]
read_argv(1, arg, 31)
new Float:origin[3]
if(read_argc() == 5)
{
new arg2[32]
read_argv(2, arg2, 31)
origin[0] = floatstr(arg2)
read_argv(3, arg2, 31)
origin[1] = floatstr(arg2)
read_argv(4, arg2, 31)
origin[2] = floatstr(arg2)
}
else
pev(id, pev_origin, origin)
if(canCreateEntity() == 0)
{
console_print(id, "[AMXX] Too many entities on the map")
return 1
}
new ent = fm_create_entity("cycler_sprite")
if(ent > 0)
{
fm_set_kvd(ent, "classname", "cycler_sprite")
fm_set_kvd(ent, "model", g_spriteTeleEnd)
fm_set_kvd(ent, "rendercolor", "0 0 0")
fm_set_kvd(ent, "framerate", "10")
fm_set_kvd(ent, "angles", "0 0 0")
fm_DispatchSpawn(ent)
set_pev(ent, pev_size, Float:{-40.0, -40.0, -40.0}, Float:{40.0, 40.0, 40.0})
set_pev(ent, pev_rendermode, 5)
set_pev(ent, pev_renderamt, 175.0)
set_pev(ent, pev_solid, SOLID_NOT)
set_pev(ent, pev_origin, origin)
new ent2 = fm_create_entity("info_teleport_destination")
if(ent2 > 0)
{
fm_set_kvd(ent2, "classname", "info_teleport_destination")
fm_set_kvd(ent2, "targetname", arg)
fm_set_kvd(ent2, "angles", "0 0 0")
fm_DispatchSpawn(ent2)
set_pev(ent2, pev_euser1, ent)
set_pev(ent2, pev_size, Float:{-1.0, -1.0, -1.0}, Float:{1.0, 1.0, 1.0})
set_pev(ent2, pev_origin, origin)
set_pev(ent2, pev_solid, SOLID_TRIGGER)
set_pev(ent2, pev_effects, EF_NODRAW)
console_print(id, "[AMXX] Teleporter end ^"%s^" has been created", arg)
return 1
}
}
console_print(id, "[AMXX] Couldn't create teleporter end")
return 1
}
public e_teledelete(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
return 1
new arg[32]
read_argv(1, arg, 31)
new ent2, tempent, target[32]
new ent = fm_find_ent_by_class(-1, "info_teleport_destination")
while(ent > 0)
{
tempent = fm_find_ent_by_class(ent, "info_teleport_destination")
pev(ent, pev_targetname, target, 31)
if(equal(target, arg))
{
ent2 = pev(ent, pev_euser1)
if(pev_valid(ent2)) fm_remove_entity(ent2)
fm_remove_entity(ent)
}
ent = tempent
}
ent = fm_find_ent_by_class(-1, "trigger_teleport")
while(ent > 0)
{
tempent = fm_find_ent_by_class(ent, "trigger_teleport")
pev(ent, pev_target, target, 31)
if(equal(target, arg))
{
ent2 = pev(ent, pev_euser1)
if(pev_valid(ent2)) fm_remove_entity(ent2)
fm_remove_entity(ent)
}
ent = tempent
}
console_print(id, "[AMXX] Teleporters ^"%s^" have been removed", arg)
return 1
}
massrelease(id)
{
g_massMoveOn[id] = false
new num = g_massMoveNum[id]
if(num > 1)
{
new i, ent
setOldRendering(id, ent, 0)
new Float:origin[3]
new Float:traceEnds[8][3], goToNextEnt = 0
for(i = 1; i < num; i++)
{
ent = g_massMoveEnts[id][i]
if(!pev_valid(ent)) continue
if(grabbedNoClip[id] == 0 && !is_user_connected(ent) && pev(ent, pev_iuser4) != 99)
{
pev(ent, pev_origin, origin)
makeBounds(traceEnds, origin)
for(new j = 0; j < 8; j++)
{
if(fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
{
fm_remove_entity(ent)
goToNextEnt = i + 1
break
}
}
}
if(goToNextEnt == i + 1) continue
set_pev(ent, pev_movetype, grabbedOldMoveType[id][i])
set_pev(ent, pev_solid, grabbedOldSolid[id][i])
set_pev(ent, pev_flags, grabbedOldFlags[id][i])
setOldRendering(id, ent, i)
}
}
g_massMoveNum[id] = 0
}
isGrabbed(id, ent)
{
new num = g_massMoveNum[id]
if(num < 1) return 0
new i
for(i = 0; i < num; i++)
{
if(g_massMoveEnts[id][i] == ent)
return 1
}
return 0
}
public mm_grab(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
if(g_massMoveNum[id] >= MAX_MASSMOVE_ENTS)
{
client_print(id, print_chat, "[AMXX] You can't grab any more entities")
return 1
}
new targetid=0, body
get_user_aiming(id, targetid, body)
if(is_user_alive(targetid) && get_user_flags(targetid) & ADMIN_IMMUNITY && !(get_user_flags(id) & ADMIN_SUPREME))
{
client_print(id, print_chat, "[AMXX] Player has immunity!")
return 1
}
if(!targetid)
targetid = searchTarget(id, 0)
if(targetid > 0)
{
if(pev_valid(targetid) && !isGrabbed(id, targetid))
{
new num = g_massMoveNum[id]
g_massMoveEnts[id][num] = targetid
new Float:color[3]
grabbedOldRender[id][num][0] = pev(targetid, pev_renderfx)
pev(targetid, pev_rendercolor, color)
grabbedOldRender[id][num][1] = floatround(color[0])
grabbedOldRender[id][num][2] = floatround(color[1])
grabbedOldRender[id][num][3] = floatround(color[2])
grabbedOldRender[id][num][4] = pev(targetid, pev_rendermode)
grabbedOldRender[id][num][5] = pev(targetid, pev_renderamt)
setMMGrabRendering(targetid)
g_massMoveNum[id]++
new class[32]
pev(targetid, pev_classname, class, 31)
client_print(id, print_chat, "[AMX] You grabbed entity %d (%s)", targetid, class)
return 1
}
}
client_print(id, print_chat, "[AMXX] No target found or entity already grabbed")
return 1
}
public mm_start(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
if(g_massMoveOn[id] == true)
return 1
new num = g_massMoveNum[id]
if(num <= 0)
{
client_print(id, print_chat, "[AMXX] You haven't grabbed any entity")
return 1
}
g_massMoveOn[id] = true
set_grabbed(id, g_massMoveEnts[id][0])
new i
for(i = 1; i < num; i++)
{
grabbedOldMoveType[id][i] = pev(g_massMoveEnts[id][i], pev_movetype)
grabbedOldSolid[id][i] = pev(g_massMoveEnts[id][i], pev_solid)
grabbedOldFlags[id][i] = pev(g_massMoveEnts[id][i], pev_flags)
}
velocity_multiplier = get_pcvar_num(grab_force)
new cmd[32]
read_argv(0, cmd, 31)
if(containi(cmd, "2") != -1)
grabbedNoClip[id] = 1
else
grabbedNoClip[id] = 0
grabmodeon[id] = true
new parm[1]
parm[0] = id
set_task(0.1, "grabtask", 100 + id, parm, 1, "b")
return 1
}
public mm_end(id,level,cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
if(g_massMoveOn[id] == false)
return 1
release(id, 0, 0)
massrelease(id)
return 1
}
public e_stack(id, level, cid)
{
if(!cmd_access(id, level, cid, 5))
return 1
new num
new arg[32]
read_argv(1, arg, 31)
num = str_to_num(arg)
if(num <= 0)
{
console_print(id, "[AMXX] Incorrect amount of entities")
return 1
}
new Float:offset[3]
read_argv(2, arg, 31)
offset[0] = floatstr(arg)
read_argv(3, arg, 31)
offset[1] = floatstr(arg)
read_argv(4, arg, 31)
offset[2] = floatstr(arg)
new targetid=0, body
get_user_aiming(id, targetid, body)
if(is_user_connected(targetid))
{
console_print(id, "[AMXX] You can't stack players")
return 1
}
if(!targetid)
targetid = searchTarget(id, 0)
if(targetid > 0)
{
if(pev_valid(targetid))
{
new i, copyId
new Float:targetOrigin[3]
new Float:copyOrigin[3]
pev(targetid, pev_origin, targetOrigin)
for(i = 1; i <= num; i++)
{
copyId = makeCopyOf(targetid)
copyOrigin[0] = targetOrigin[0] + (i*offset[0])
copyOrigin[1] = targetOrigin[1] + (i*offset[1])
copyOrigin[2] = targetOrigin[2] + (i*offset[2])
set_pev(copyId, pev_origin, copyOrigin)
}
client_print(id, print_chat, "[AMXX] Entity has been copied %d times", num)
return 1
}
}
client_print(id, print_chat, "[AMXX] No target found")
return 1
}
public e_lookingat(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
new targetid=0, body
get_user_aiming(id, targetid, body)
if(is_user_connected(targetid))
return 1
if(!targetid)
targetid = searchTarget(id, 0)
if(targetid > 0)
{
if(pev_valid(targetid))
{
new class[32]
pev(targetid, pev_classname, class, 31)
new Float:vecmins[3]
new Float:vecmaxs[3]
pev(targetid, pev_mins, vecmins)
pev(targetid, pev_maxs, vecmaxs)
console_print(id, "[AMXX] The entity you're looking at is:")
console_print(id, " Id: %d", targetid)
console_print(id, " ClassName: %s", class)
console_print(id, " Size on the X Axis: %d", floatround(vecmaxs[0] - vecmins[0]))
console_print(id, " Size on the Y Axis: %d", floatround(vecmaxs[1] - vecmins[1]))
console_print(id, " Size on the Z Axis: %d", floatround(vecmaxs[2] - vecmins[2]))
return 1
}
}
client_print(id, print_chat, "[AMXX] No target found")
return 1
}
public e_grabtype(id, level, cid)
{
if(!cmd_access(id, level, cid, 2))
return 1
new class[64]
new Float:range = 250.0
if(read_argc() == 3)
{
read_argv(2, class, 63)
range = floatstr(class)
}
read_argv(1, class, 63)
new Float:origin[3]
pev(id, pev_origin, origin)
new string[64]
new targetid = fm_find_ent_in_sphere(id, origin, range)
while(targetid > 0)
{
string[0] = '^0'
pev(targetid, pev_classname, string ,63)
if(equali(string, class))
break
targetid = fm_find_ent_in_sphere(targetid, origin, range)
}
if(targetid > 0)
{
grabbedNoClip[id] = 1
new parm[1]
parm[0] = id
velocity_multiplier = get_pcvar_num(grab_force)
grabmodeon[id] = true
set_task(0.1, "grabtask", 100 + id, parm, 1, "b")
set_grabbed(id, targetid)
}
client_print(id, print_chat, "[AMXX] No target found")
return 1
}
public e_stopgrab(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
release(id, 0, 0)
return 1
}
public showaxis(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
new cmd[32]
read_argv(0, cmd, 31)
new red, green, blue
new origin[3], origin2[3]
get_user_origin(id, origin)
origin2[0] = origin[0]
origin2[1] = origin[1]
origin2[2] = origin[2]
switch(cmd[8])
{
case 'x':
{
origin2[0] += 400
red = 255
}
case 'y':
{
origin2[1] += 400
green = 255
}
case 'z':
{
origin2[2] += 400
blue = 255
}
}
message_begin(MSG_ONE, SVC_TEMPENTITY, {0,0,0}, id)
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(laserbeam)
write_byte(0)
write_byte(0)
write_byte(600)
write_byte(40)
write_byte(0)
write_byte(red)
write_byte(green)
write_byte(blue)
write_byte(255)
write_byte(0)
message_end()
return 1
}
public e_showkeyvalue(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
new targetid=0
if(read_argc() == 2)
{
new arg[32]
read_argv(1, arg, 31)
if(is_str_num(arg))
targetid = str_to_num(arg)
else
targetid = cmd_target(id, arg, 0)
if(!pev_valid(targetid))
{
console_print(id, "[AMXX] Entity invalid")
return 1
}
}
else
targetid = searchTarget(id, 1)
if(targetid > 0)
{
if(pev_valid(targetid))
{
console_print(id, "KeyValues of entity %d:", targetid)
if(targetid > g_maxplayers)
{
if(!g_key[targetid][0][0])
targetid = pev(targetid, pev_iuser3)
}
new maxkeyvalues = g_keyValueNum[targetid]
for(new i = 0; i < maxkeyvalues; i++)
{
console_print(id, "Key=^"%s^", Value=^"%s^"", g_key[targetid][i], g_value[targetid][i])
}
return 1
}
}
console_print(id, "[AMXX] No entity or entity not valid")
return 1
}
public e_setkeyvalue(id,level,cid)
{
if(!cmd_access(id, level, cid, 3))
return 1
new targetid=0
if(read_argc() == 4)
{
new arg[32]
read_argv(1, arg, 31)
if(is_str_num(arg))
targetid = str_to_num(arg)
else
targetid = cmd_target(id, arg, 1)
if(!pev_valid(targetid))
{
console_print(id, "[AMXX] Entity invalid")
return 1
}
}
else
targetid = searchTarget(id, 1)
if(targetid > 0)
{
if(pev_valid(targetid))
{
new key[64], value[64]
read_argv(1, key, 63)
read_argv(2, value, 63)
fm_set_kvd(targetid, key, value)
if(targetid > g_maxplayers)
{
if(!g_key[targetid][0][0])
targetid = pev(targetid, pev_iuser3)
}
new maxkeyvalues = g_keyValueNum[targetid]
for(new i = 0; i < maxkeyvalues; i++)
{
if(equal(g_key[targetid][i], key))
{
copy(g_value[targetid][i], VALUE_LENGTH-1, value)
break
}
}
if(targetid > g_maxplayers) fm_DispatchSpawn(targetid)
console_print(id, "KeyValue set on entity %d.", targetid)
return 1
}
}
console_print(id, "[AMXX] No entity or entity not valid")
return 1
}
public e_use(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
new targetid = searchTarget(id, 1)
if(targetid > 0)
{
if(pev_valid(targetid))
{
new user
if(read_argc() == 2)
{
new arg[32]
read_argv(1, arg, 31)
user = cmd_target(id, arg, 5)
if(!user) return 1
}
else
user = id
fm_force_use(targetid, user)
new class[32]
pev(targetid, pev_classname, class, 31)
if(user != id)
{
new plname[32]
get_user_name(user, plname, 31)
client_print(id, print_chat, "[AMXX] %s ^"used^" entity %d (%s)", plname, targetid, class)
}
else
client_print(id, print_chat, "[AMX] You ^"used^" entity %d (%s)", targetid, class)
return 1
}
}
client_print(id, print_chat, "[AMXX] No target found")
return 1
}
public e_search(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
new Float:range = 200.0
new Float:origin[3]
pev(id, pev_origin, origin)
new class[64]
new targetid = fm_find_ent_in_sphere(id, origin, range)
if(targetid < 1)
{
console_print(id, "[AMXX] No entity found")
return 1
}
while(targetid > 0)
{
pev(targetid, pev_classname, class, 63)
console_print(id, "Entity found: Id = %d, ClassName = %s", targetid, class)
targetid = fm_find_ent_in_sphere(targetid, origin, range)
}
return 1
}
public e_undo(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
new targetid = searchTarget(id, 1)
if(targetid > 0)
{
if(pev_valid(targetid) && targetid > g_maxplayers)
{
set_pev(targetid, pev_origin, Float:{0.0, 0.0, 0.0})
return 1
}
}
client_print(id, print_chat, "[AMXX] No target found")
return 1
}
setBrushOrigin(ent, entId, Float:origin[3])
{
new Float:entorigin[3], Float:mins[3], Float:maxs[3], Float:absmin[3], Float:absmax[3]
new Float:sizeX, Float:sizeY, Float:sizeZ
pev(entId, pev_mins, mins)
pev(entId, pev_maxs, maxs)
sizeX = maxs[0] - mins[0]
sizeY = maxs[1] - mins[1]
sizeZ = maxs[2] - mins[2]
absmin[0] = origin[0] - (sizeX/2.0)
absmin[1] = origin[1] - (sizeY/2.0)
absmin[2] = origin[2]
absmax[0] = origin[0] + (sizeX/2.0)
absmax[1] = origin[1] + (sizeY/2.0)
absmax[2] = origin[2] + sizeZ
set_pev(ent, pev_absmin, absmin)
set_pev(ent, pev_absmax, absmax)
entorigin[0] = absmin[0] - mins[0]
entorigin[1] = absmin[1] - mins[1]
entorigin[2] = absmin[2] - mins[2]
fm_entity_set_origin(ent, entorigin)
}
public e_wall(id, level, cid)
{
if(!cmd_access(id, level, cid, 6))
return 1
new arg1[16],arg4[16], arg5[16]
new arg2[16],arg3[16]
read_argv(1, arg1, 15)
read_argv(2, arg2, 15)
read_argv(3, arg3, 15)
read_argv(4, arg4, 15)
read_argv(5, arg5, 15)
new entId = str_to_num(arg1)
if(!pev_valid(entId) || entId <= g_maxplayers)
{
console_print(id, "[AMXX] Entity not valid")
return 1
}
new iAimorigin[3], Float:aimorigin[3]
get_user_origin(id, iAimorigin, 3)
IVecFVec(iAimorigin, aimorigin)
new Float:angles[3]
pev(id, pev_v_angle, angles)
angles[0] = 0.0
new Float:entangles[3]
entangles[1] = angles[1] - 90.0
new rownums = str_to_num(arg3) - 1
new colnums = str_to_num(arg2)
new middleent = floatround(float(colnums)/2.0, floatround_floor)
new rowoffset = str_to_num(arg4)
new coloffset = str_to_num(arg5)
if(rownums <= 0 || colnums <= 0 || rowoffset < 0 || coloffset < 0)
{
console_print(id, "[AMX] A parameter is incorrect.")
return 1
}
new isBrush = 0
if(pev(entId, pev_iuser4) == 99)
isBrush = 1
new Float:entorigin[3]
new Float:velocity[3]
new ent
new i, j
for(i = -middleent ; i <= ((colnums%2 == 1) ? middleent : middleent - 1) ; i++)
{
ent = makeCopyOf(entId)
if(ent > 0)
{
if(isBrush == 1) setBrushOrigin(ent, entId, aimorigin)
else fm_entity_set_origin(ent, aimorigin)
set_pev(ent, pev_v_angle, entangles)
velocity_by_aim(ent, rowoffset*i, velocity)
entorigin[0] = aimorigin[0] + velocity[0]
entorigin[1] = aimorigin[1] + velocity[1]
entorigin[2] = aimorigin[2] + velocity[2]
if(isBrush == 1) setBrushOrigin(ent, entId, entorigin)
else fm_entity_set_origin(ent, entorigin)
if(isBrush == 0) set_pev(ent, pev_angles, angles)
for(j = 0 ; j < rownums ; j++)
{
ent = makeCopyOf(entId)
if(ent > 0)
{
entorigin[2] += float(coloffset)
if(isBrush == 1) setBrushOrigin(ent, entId, entorigin)
else fm_entity_set_origin(ent, entorigin)
if(isBrush == 0) set_pev(ent, pev_angles, angles)
}
}
}
}
client_print(id, print_chat, "[AMXX] Wall has been created.")
return 1
}
isSaved(id, ent)
{
new num = g_saveEntsNum[id]
if(num < 1) return 0
new i
for(i = 0; i < num; i++)
{
if(g_saveEnts[id][i] == ent)
return 1
}
return 0
}
public es_grab(id, level, cid)
{
if(!cmd_access(id,level,cid,1))
return 1
new targetid=0
if(read_argc() == 2)
{
new arg[32]
read_argv(1, arg, 31)
if(is_str_num(arg))
targetid = str_to_num(arg)
if(!pev_valid(targetid) || targetid <= g_maxplayers)
{
console_print(id, "[AMXX] Entity invalid")
return 1
}
}
else
targetid = searchTarget(id, 1)
if(targetid > 0)
{
if(pev_valid(targetid) && targetid > g_maxplayers && !isSaved(id, targetid))
{
new num = g_saveEntsNum[id]
g_saveEnts[id][num] = targetid
new Float:color[3]
grabbedOldRender[id][num][0] = pev(targetid, pev_renderfx)
pev(targetid, pev_rendercolor, color)
grabbedOldRender[id][num][1] = floatround(color[0])
grabbedOldRender[id][num][2] = floatround(color[1])
grabbedOldRender[id][num][3] = floatround(color[2])
grabbedOldRender[id][num][4] = pev(targetid, pev_rendermode)
grabbedOldRender[id][num][5] = pev(targetid, pev_renderamt)
setSaveRendering(targetid)
g_saveEntsNum[id]++
new class[32]
pev(targetid, pev_classname, class, 31)
client_print(id, print_chat, "[AMXX] You grabbed entity %d (%s)", targetid, class)
return 1
}
}
client_print(id, print_chat, "[AMXX] No target found")
return 1
}
public es_ungrab(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
if(g_saveEntsNum[id] > 0)
{
--g_saveEntsNum[id]
console_print(id, "[AMXX] Last entity added (%d) has been removed.", g_saveEnts[id][g_saveEntsNum[id]])
setOldRendering(id, g_saveEnts[id][g_saveEntsNum[id]], g_saveEntsNum[id])
return 1
}
console_print(id, "[AMXX] You haven't saved any entities")
return 1
}
public es_cancel(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return 1
if(g_saveEntsNum[id] > 0)
{
new maxnum = g_saveEntsNum[id]
for(new i = 0; i < maxnum; i++)
{
setOldRendering(id, g_saveEnts[id][i], i)
}
g_saveEntsNum[id] = 0
console_print(id, "[AMXX] All the entities added have been removed.")
return 1
}
console_print(id, "[AMXX] You haven't saved any entities.")
return PLUGIN_HANDLED
}
__________________
Last edited by atomen; 05-28-2008 at 10:16.
|
|