This compiles w/o errors or warnings ...
Code:
#include <amxmodx>
#include <amxmisc>
#include <engine>
new beam, boom
public Vexd_CreateMine(id,level,cid){
if (!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED
new Float:vOrigin[3]
new Float:vAngles[3]
entity_get_vector(id, EV_VEC_origin, vOrigin)
entity_get_vector(id, EV_VEC_v_angle, vAngles)
new NewEnt
NewEnt = create_entity("info_target")
if(NewEnt == 0) {
return PLUGIN_HANDLED_MAIN
}
entity_set_string(NewEnt, EV_SZ_classname, "vexd_tripmine")
entity_set_model(NewEnt, "models/v_tripmine.mdl")
entity_set_int(NewEnt, EV_INT_body, 3)
entity_set_int(NewEnt, EV_INT_sequence, 7) // 7 = TRIPMINE_WORLD
new Float:MinBox[3]
new Float:MaxBox[3]
MinBox[0] = -8.0
MinBox[1] = -8.0
MinBox[2] = -8.0
MaxBox[0] = 8.0
MaxBox[1] = 8.0
MaxBox[2] = 8.0
entity_set_vector(NewEnt, EV_VEC_mins, MinBox)
entity_set_vector(NewEnt, EV_VEC_maxs, MaxBox)
new Float:vNewOrigin[3]
new Float:vNormal[3]
new Float:vTraceDirection[3]
new Float:vTraceEnd[3]
new Float:vTraceResult[3]
new Float:vEntAngles[3]
VelocityByAim(id, 64, vTraceDirection)
vTraceEnd[0] = vTraceDirection[0] + vOrigin[0]
vTraceEnd[1] = vTraceDirection[1] + vOrigin[1]
vTraceEnd[2] = vTraceDirection[2] + vOrigin[2]
trace_line(id, vOrigin, vTraceEnd, vTraceResult)
if(trace_normal(id, vOrigin, vTraceEnd, vNormal) == 0) {
remove_entity(NewEnt)
console_print(id, "[TripMines] You must plant the tripmine on a wall!")
return PLUGIN_HANDLED_MAIN
}
vNewOrigin[0] = vTraceResult[0] + (vNormal[0] * 8.0)
vNewOrigin[1] = vTraceResult[1] + (vNormal[1] * 8.0)
vNewOrigin[2] = vTraceResult[2] + (vNormal[2] * 8.0)
entity_set_origin(NewEnt, vNewOrigin)
vector_to_angle(vNormal, vEntAngles)
entity_set_vector(NewEnt, EV_VEC_angles, vEntAngles)
new Float:vBeamEnd[3]
new Float:vTracedBeamEnd[3]
vBeamEnd[0] = vNewOrigin[0] + (vNormal[0] * 8192)
vBeamEnd[1] = vNewOrigin[1] + (vNormal[1] * 8192)
vBeamEnd[2] = vNewOrigin[2] + (vNormal[2] * 8192)
trace_line(-1, vNewOrigin, vBeamEnd, vTracedBeamEnd)
entity_set_vector(NewEnt, EV_VEC_vuser1, vTracedBeamEnd)
entity_set_int(NewEnt, EV_INT_solid, 2) //2 = Solid bbox. (const.h)
entity_set_int(NewEnt, EV_INT_movetype, 5) //5 = movetype_fly, No grav, but collides.
emit_sound(NewEnt, CHAN_WEAPON, "weapons/mine_deploy.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
emit_sound(NewEnt, CHAN_VOICE, "weapons/mine_charge.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_HANDLED_MAIN
}
public TripMineThink() {
new iCurrent
iCurrent = find_ent_by_class(-1, "vexd_tripmine")
while(iCurrent != -1) {
new Float:vOrigin[3]
entity_get_vector(iCurrent, EV_VEC_origin, vOrigin)
new Float:vEnd[3]
entity_get_vector(iCurrent, EV_VEC_vuser1, vEnd)
new Float:vTrace[3]
new iHit
iHit = trace_line(iCurrent, vOrigin, vEnd, vTrace)
if(iHit > 0) {
new szClassName[32]
entity_get_string(iHit, EV_SZ_classname, szClassName, 32);
if(equal(szClassName, "player")) {
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(99) //99 = KillBeam
write_short(iCurrent)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(floatround(vOrigin[0]))
write_coord(floatround(vOrigin[1]))
write_coord(floatround(vOrigin[2]))
write_short(boom)
write_byte(50)
write_byte(15)
write_byte(0)
message_end()
RadiusDamage(vOrigin, 1, 0)
remove_entity(iCurrent)
}
}
iCurrent = find_ent_by_class(iCurrent, "vexd_tripmine")
}
}
public LaserThink() {
new iCurrent
iCurrent = find_ent_by_class(-1, "vexd_tripmine")
while(iCurrent != -1) {
new Float:vOrigin[3]
entity_get_vector(iCurrent, EV_VEC_origin, vOrigin)
new Float:vEnd[3]
entity_get_vector(iCurrent, EV_VEC_vuser1, vEnd)
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(0)
write_coord(floatround(vOrigin[0]))
write_coord(floatround(vOrigin[1]))
write_coord(floatround(vOrigin[2]))
write_coord(floatround(vEnd[0])) //Random
write_coord(floatround(vEnd[1])) //Random
write_coord(floatround(vEnd[2])) //Random
write_short(beam)
write_byte(0)
write_byte(0)
write_byte(10) //Life
write_byte(5) //Width
write_byte(0)
write_byte(255) // r
write_byte(0) // g
write_byte(0) // b
write_byte(200)
write_byte(0)
message_end()
iCurrent = find_ent_by_class(iCurrent, "vexd_tripmine")
}
}
public plugin_init(){
register_plugin("Vexd Entity demo (TripMine)","1.00","Vexd port by Dygear")
register_concmd("amx_setmine","Vexd_CreateMine",ADMIN_KICK)
set_task(0.01, "TripMineThink", 0, "", 0, "b")
set_task(1.0, "LaserThink", 0, "", 0, "b")
return PLUGIN_CONTINUE
}
public plugin_precache() {
precache_sound("weapons/mine_deploy.wav")
precache_sound("weapons/mine_charge.wav")
precache_model("models/v_tripmine.mdl")
beam = precache_model("sprites/laserbeam.spr")
boom = precache_model("sprites/zerogxplode.spr")
return PLUGIN_CONTINUE
}