Post by teNsk- on Aug 31, 2021 11:43:23 GMT
Sure if you want to appear in extra item here my friend helped me to fix errors and let me tell you my friend its not same as Palankus they are really well coded and private as well
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>
#define JUMP_HEIGHT 70.0
#define EXPLOSION_SIZE 500.0
#define HEALTH_OFFSET 100000.0
#define ITEM_NAME "RC-Car Bomb"
#define ITEM_COST 60
new bool:can_spawn[33]
new bool:in_control[33]
new car[33]
new car_spec[33]
new g_itemid_Car
new rc_maxspeed
new rc_accel
new rc_follow
new rc_explode
new rc_health
new rc_delay
new rc_extramodels
new rc_damage
new Float:roundstart
new fire
new DeathMsg
static const car1[] = "models/RCcar-Red.mdl"
static const car2[] = "models/RCcar-Blue.mdl"
static const car3[] = "models/RCcar-Yellow.mdl"
static const car4[] = "models/RCcar-Green.mdl"
static const blank[] = "models/blank.mdl"
static const sound_fx[] = "RC-vroom.wav"
static const sound_hurt[] = "debris/metal3.wav"
static const sound_die[] = "debris/zap1.wav"
public plugin_init()
{
register_plugin("[ZP] Extra Item: Rc Car Bomb","1.0","ShaunCraft")
//GHW_Chronic: The Original Mader
//ShaunCraft: Support this plugin to ZP Mode, Added Damage Control
rc_maxspeed = register_cvar("zp_rc_maxspeed","500.0") //Maxspeed of RC
rc_accel = register_cvar("zp_rc_accel","10.0") //Acceleration (Units/Think) (Halved backwards)
rc_follow = register_cvar("zp_rc_follow","1") //1=View follows RC, 2=View from Player's Viewpoint
rc_delay = register_cvar("zp_rc_delay","0.0") //Delay before can spawn new RC after last RC spawn (time or 0=no delay -1=1 per round (cs/cz))
rc_explode = register_cvar("zp_rc_explode","1") //1 = explodable 0=not
rc_health = register_cvar("zp_rc_health","100.0") //HP of Car
rc_damage = register_cvar("zp_rc_damage_x","700")
register_forward(FM_Think,"Think_Hook")
register_forward(FM_PlayerPreThink,"PreThink_Hook")
register_event("DeathMsg","Hook_DeathMsg","a")
if(cstrike_running()) register_event("SendAudio","endround","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")
DeathMsg = get_user_msgid("DeathMsg")
g_itemid_Car = zp_register_extra_item(ITEM_NAME, ITEM_COST, ZP_TEAM_HUMAN);
}
public plugin_precache()
{
precache_model(blank)
precache_model(car1)
precache_model(car2)
if(get_pcvar_num(register_cvar("zp_rc_extramodels","1"))) //Enable this on mods with > 2 teams (IE: TFC)
{
rc_extramodels = 1
precache_model(car3)
precache_model(car4)
}
precache_sound(sound_fx)
precache_sound(sound_hurt)
precache_sound(sound_die)
fire = precache_model("sprites/explode1.spr")
}
public zp_extra_item_selected(id, itemid)
{
if(itemid == g_itemid_Car) spawn_rc(id)
if(car[id])
{
client_color_print(id, "")
return ZP_PLUGIN_HANDLED
}
return ZP_PLUGIN_HANDLED
}
public spawn_rc(id)
{
if(pev_valid(car[id]))
{
client_color_print(id, "!y[!gZP!y] You already Have !tRC Car!y")
return ;
}
if(!can_spawn[id])
{
client_color_print(id,"!y[!gZP!y] You must wait before you can have another RC.")
return ;
}
new ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent,pev_classname,"GHW_RC")
set_pev(ent,pev_owner,id)
new model[32]
switch(get_user_team(id))
{
case 2: format(model,31,car2)
case 3:
{
if(rc_extramodels) format(model,31,car3)
else format(model,31,car1)
}
case 4:
{
if(rc_extramodels) format(model,31,car4)
else format(model,31,car2)
}
default: format(model,31,car1)
}
set_pev(ent,pev_model,model)
engfunc(EngFunc_SetModel,ent,model)
new Float:origin[3]
pev(id,pev_origin,origin)
set_pev(ent,pev_origin,origin)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
set_pev(ent,pev_solid,SOLID_BBOX)
engfunc(EngFunc_SetSize,ent,Float:{-20.0,-20.0,-2.0},Float:{5.0,5.0,3.0})
set_pev(ent,pev_nextthink,get_gametime())
set_pev(ent,pev_health,HEALTH_OFFSET + get_pcvar_float(rc_health))
set_pev(ent,pev_max_health,HEALTH_OFFSET + get_pcvar_float(rc_health))
set_pev(ent,pev_takedamage,1.0)
origin[2] -= 10.0
set_pev(id,pev_origin,origin)
new ent2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(ent2,pev_classname,"GHW_RC_Spec")
set_pev(ent2,pev_owner,id)
set_pev(ent2,pev_model,blank)
engfunc(EngFunc_SetModel,ent2,blank)
get_offset_origin(ent,Float:{-60.0,0.0,40.0},origin)
set_pev(ent2,pev_origin,origin)
set_pev(ent2,pev_movetype,MOVETYPE_FLY)
set_pev(ent2,pev_solid,SOLID_NOT)
if(get_pcvar_num(rc_follow)) engfunc(EngFunc_SetView,id,ent2)
car_spec[id] = ent2
car[id] = ent
in_control[id] = true
new string[20]
if(get_pcvar_num(rc_explode)) format(string,19,"- Fire to Explode")
client_print(id,print_center,"[ZP] RC Created - Use Key to Quit %s",string)
new Float:delaytime = get_pcvar_float(rc_delay)
if(delaytime) can_spawn[id] = false
if(delaytime>0)
{
set_task(delaytime,"can_spawn_again",id)
}
return ;
}
public can_spawn_again(id) can_spawn[id]=true
public unspawn_rc(id)
{
if(pev_valid(car[id])) engfunc(EngFunc_RemoveEntity,car[id])
if(pev_valid(car_spec[id])) engfunc(EngFunc_RemoveEntity,car_spec[id])
car[id] = 0
car_spec[id] = 0
in_control[id] = false
if(is_user_connected(id))
{
if(is_user_alive(id))
{
new Float:origin[3]
pev(id,pev_origin,origin)
origin[2] += 15.0
set_pev(id,pev_origin,origin)
}
client_print(id,print_center,"[ZP] RC Car Exploded or Deleted")
engfunc(EngFunc_SetView,id,id)
}
}
public explode_rc(id)
{
if(pev_valid(car[id]))
{
new origin[3], Float:F_origin[3]
pev(car[id],pev_origin,F_origin)
FVecIVec(F_origin,origin)
message_begin(MSG_BROADCAST,SVC_TEMPENTITY,origin)
write_byte(TE_EXPLOSION)
write_coord(origin[0]) // start position
write_coord(origin[1])
write_coord(origin[2])
write_short(fire)
write_byte(20) // byte (scale in 0.1's) 188
write_byte(10) // byte (framerate)
write_byte(0) // byte flags (4 = no explode sound)
message_end()
new players[32], num, Float:distance
new team = get_user_team(id)
get_players(players,num,"ah")
new Float:P_origin[3]
for(new i=0;i<num;i++)
{
if(get_user_team(players[i])!=team)
{
pev(players[i],pev_origin,P_origin)
distance = get_distance_f(F_origin,P_origin)
if(distance<EXPLOSION_SIZE)
{
distance = EXPLOSION_SIZE * 5.0 / distance
new old_msgblock = get_msg_block(DeathMsg)
set_msg_block(DeathMsg,BLOCK_ONCE)
fm_fakedamage(players[i],id,distance,DMG_BURN)
set_msg_block(DeathMsg,old_msgblock)
if(!is_user_alive(players[i]))
{
make_deathmsg(id,players[i],0,"A RC Car")
set_user_frags(id,get_user_frags(id) + 1)
}
}
}
}
}
unspawn_rc(id)
}
public endround()
{
// new bool:boolholder=false
// if(get_pcvar_float(rc_delay)<0) boolholder=true
for(new i=0;i<33;i++)
{
if(pev_valid(car[i]))
{
unspawn_rc(i)
}
can_spawn[i] = true
}
roundstart = get_gametime() + 5.0
}
public Hook_DeathMsg()
{
new victim = read_data(2)
if(!is_user_alive(victim))
{
unspawn_rc(victim)
}
}
public client_disconnect(id) unspawn_rc(id)
public client_connect(id) can_spawn[id]=true
//VEN
stock fm_fakedamage(victim,attacker, Float:takedmgdamage, damagetype)
{
new entity = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"trigger_hurt"))
new value[16]
float_to_str(takedmgdamage * get_pcvar_float(rc_damage), value, sizeof value - 1)
set_kvd(0, KV_ClassName,"trigger_hurt")
set_kvd(0, KV_KeyName, "dmg")
set_kvd(0, KV_Value, value)
set_kvd(0, KV_fHandled, 0)
dllfunc(DLLFunc_KeyValue,entity,0)
num_to_str(damagetype, value, sizeof value - 1)
set_kvd(0, KV_ClassName,"trigger_hurt")
set_kvd(0, KV_KeyName, "damagetype")
set_kvd(0, KV_Value, value)
set_kvd(0, KV_fHandled, 0)
dllfunc(DLLFunc_KeyValue,entity,0)
set_kvd(0, KV_ClassName,"trigger_hurt")
set_kvd(0, KV_KeyName, "origin")
set_kvd(0, KV_Value, "8192 8192 8192")
set_kvd(0, KV_fHandled, 0)
dllfunc(DLLFunc_KeyValue,entity,0)
dllfunc(DLLFunc_Spawn,entity)
set_pev(entity,pev_classname,"Spell")
set_pev(entity,pev_owner,attacker)
dllfunc(DLLFunc_Touch,entity,victim)
engfunc(EngFunc_RemoveEntity,entity)
return 1
}
public PreThink_Hook(id)
{
if(in_control[id] && pev_valid(car[id]))
{
new buttons = pev(id,pev_button)
static bool:boostup
static Float:origin[3], Float:origin2[3], Float:velocity[3]
boostup = false
pev(car[id],pev_velocity,velocity)
pev(car[id],pev_origin,origin)
pev(car[id],pev_oldorigin,origin2)
set_pev(car[id],pev_oldorigin,origin)
if(pev(car[id],pev_euser4))
{
if(origin[0]==origin2[0] && origin[1]==origin2[1] && origin[2]==origin2[2])
{
boostup = true
}
}
origin2[0] = origin[0]
origin2[1] = origin[1]
origin2[2] = origin[2] - 25.0
new Float:hit2[3]
engfunc(EngFunc_TraceLine,origin,origin2,1,car[id],0)
get_tr2(0,TR_vecEndPos,hit2)
if(hit2[0]==origin2[0] && hit2[1]==origin2[1] && hit2[2]==origin2[2])
{
engfunc(EngFunc_DropToFloor,car[id])
}
set_pev(car[id],pev_euser4,0)
if(boostup)
{
velocity[0] = 0.0
velocity[1] = 0.0
velocity[2] = 50.0
}
else if((buttons & IN_FORWARD) && !(buttons & IN_BACK))
{
static Float:new_velo[3]
get_addedvelo(car[id],get_pcvar_float(rc_accel) + (vector_length(velocity) * 0.05),new_velo)
velocity[0] *= 0.95
velocity[1] *= 0.95
velocity[0] += new_velo[0]
velocity[1] += new_velo[1]
if(velocity[2] > 0)
velocity[2] -= 1.0
if(vector_length(velocity) >= get_pcvar_float(rc_maxspeed))
{
get_addedvelo(car[id],get_pcvar_float(rc_maxspeed),velocity)
}
static Float:hit[3]
hit[0] = 0.0
hit[1] = 0.0
hit[2] = 0.0
origin2[0] = 0.0
origin2[1] = 0.0
origin2[2] = 0.0
get_offset_origin(car[id],Float:{30.0,0.0,0.0},origin2)
engfunc(EngFunc_TraceLine,origin,origin2,1,car[id],0)
get_tr2(0,TR_vecEndPos,hit)
if(hit[0]!=origin2[0] || hit[1]!=origin2[1] || hit[2]!=origin2[2])
{
get_offset_origin(car[id],Float:{30.0,0.0,50.0},origin2)
engfunc(EngFunc_TraceLine,origin,origin2,1,car[id],0)
get_tr2(0,TR_vecEndPos,hit)
if(hit[0]==origin2[0] && hit[1]==origin2[1] && hit[2]==origin2[2])
{
get_speed_vector(origin,origin2,get_pcvar_float(rc_maxspeed),new_velo)
velocity[0] = new_velo[0]
velocity[1] = new_velo[1]
velocity[2] = new_velo[2]
}
}
set_pev(car[id],pev_velocity,velocity)
set_pev(car[id],pev_sequence,1)
set_pev(car[id],pev_euser4,1)
}
else if(!(buttons & IN_FORWARD) && (buttons & IN_BACK))
{
static Float:new_velo[3]
get_addedvelo(car[id],(get_pcvar_float(rc_accel) * -1.00) + (vector_length(velocity) * 0.05),new_velo)
velocity[0] *= 0.95
velocity[1] *= 0.95
velocity[0] += new_velo[0]
velocity[1] += new_velo[1]
if(vector_length(velocity) >= get_pcvar_float(rc_maxspeed))
{
get_addedvelo(car[id],get_pcvar_float(rc_maxspeed) * -1.0,velocity)
}
if(boostup)
{
velocity[0] = 0.0
velocity[1] = 0.0
velocity[2] = 50.0
}
set_pev(car[id],pev_velocity,velocity)
set_pev(car[id],pev_sequence,2)
set_pev(car[id],pev_euser4,1)
}
if((buttons & IN_MOVELEFT) && !(buttons & IN_MOVERIGHT))
{
static Float:vangle[3]
pev(car[id],pev_angles,vangle)
vangle[1] += 5.0
set_pev(car[id],pev_angles,vangle)
get_offset_origin(car[id],Float:{-60.0,0.0,40.0},vangle)
set_pev(car_spec[id],pev_origin,vangle)
}
else if(!(buttons & IN_MOVELEFT) && (buttons & IN_MOVERIGHT))
{
static Float:vangle[3]
pev(car[id],pev_angles,vangle)
vangle[1] -= 5.0
set_pev(car[id],pev_angles,vangle)
get_offset_origin(car[id],Float:{-60.0,0.0,40.0},vangle)
set_pev(car_spec[id],pev_origin,vangle)
}
if((buttons & IN_JUMP) && !(pev(id,pev_oldbuttons) & IN_JUMP) && (pev(car[id],pev_flags) & FL_ONGROUND))
{
velocity[2] += JUMP_HEIGHT
get_pcvar_float(rc_maxspeed)
static Float:new_velo[3]
get_addedvelo(car[id],get_pcvar_float(rc_accel),new_velo)
//velocity[0] += new_velo[0]
//velocity[1] += new_velo[1]
//if(vector_length(velocity) >= get_pcvar_float(rc_maxspeed))
//{
// get_addedvelo(car[id],get_pcvar_float(rc_maxspeed),velocity)
//}
set_pev(car[id],pev_velocity,velocity)
}
if(buttons & IN_USE)
{
unspawn_rc(id)
return ;
}
else if(get_pcvar_num(rc_explode) && (buttons & IN_ATTACK) && is_user_alive(id))
{
explode_rc(id)
return ;
}
set_pev(car[id],pev_framerate,vector_length(velocity) / 6.0)
if(pev_valid(car_spec[id]))
{
get_offset_origin(car[id],Float:{-60.0,0.0,40.0},origin)
pev(car_spec[id],pev_origin,origin2)
if(floatabs(origin[2] - origin2[2])>10.0 || get_distance_f(origin,origin2)>25.0)
set_pev(car_spec[id],pev_origin,origin)
set_pev(car_spec[id],pev_velocity,velocity)
static Float:vangle[3]
pev(car[id],pev_angles,vangle)
vangle[0] += 30.0
set_pev(car_spec[id],pev_angles,vangle)
}
}
return ;
}
public get_addedvelo(ent,Float:speed,Float:new_velo[3])
{
static Float:vangle[3]
pev(ent,pev_angles,vangle)
pev(ent,pev_velocity,new_velo)
angle_vector(vangle,1,new_velo)
new_velo[0] *= speed
new_velo[1] *= speed
}
public Think_Hook(ent)
{
if(!pev_valid(ent))
return ;
static classname[32]
pev(ent,pev_classname,classname,31)
if(equali(classname,"GHW_RC"))
{
new Float:health
new Float:oldhealth
pev(ent,pev_health,health)
pev(ent,pev_max_health,oldhealth)
if(health<oldhealth)
{
set_pev(ent,pev_max_health,health)
emit_sound(ent,CHAN_VOICE,sound_hurt,VOL_NORM, ATTN_NORM,0,PITCH_NORM)
static Float:F_origin[3], I_origin[3]
pev(ent,pev_origin,F_origin)
FVecIVec(F_origin,I_origin)
message_begin(MSG_BROADCAST,SVC_TEMPENTITY,I_origin)
write_byte(TE_SPARKS)
write_coord(I_origin[0])
write_coord(I_origin[1])
write_coord(I_origin[2])
message_end()
if(health<=HEALTH_OFFSET)
{
emit_sound(ent,CHAN_VOICE,sound_die,VOL_NORM, ATTN_NORM,0,PITCH_NORM)
unspawn_rc(pev(ent,pev_owner))
}
}
static Float:velocity[3]
pev(ent,pev_velocity,velocity)
if(velocity[0] > 5.0) velocity[0] -= 5.0
else if(velocity[0] < -5.0) velocity[0] += 5.0
else velocity[0] = 0.0
if(velocity[1] > 5.0) velocity[1] -= 5.0
else if(velocity[1] < -5.0) velocity[1] += 5.0
else velocity[1] = 0.0
if(!(pev(ent,pev_flags) & FL_ONGROUND)) velocity[2] -= 10.0
set_pev(ent,pev_velocity,velocity)
if(!velocity[2] && (pev(ent,pev_flags) & FL_ONGROUND)) engfunc(EngFunc_DropToFloor,ent)
if(!pev(ent,pev_team))
{
emit_sound(ent,CHAN_VOICE,sound_fx,VOL_NORM, ATTN_NORM,0,PITCH_NORM)
set_pev(ent,pev_team,1)
set_task(random_float(0.3,1.0),"vroom_again",ent)
}
new speccar = car_spec[pev(ent,pev_owner)]
if(pev_valid(speccar))
set_pev(speccar,pev_velocity,velocity)
set_pev(ent,pev_nextthink,1.0)
}
return ;
}
public vroom_again(ent) if(pev_valid(ent)) set_pev(ent,pev_team,0)
/******************
From chr_engine
******************/
get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num
return 1;
}
get_offset_origin(ent,const Float:offset[3],Float:origin[3])
{
if(!pev_valid(ent))
return 0;
new Float:angle[3]
pev(ent,pev_origin,origin)
pev(ent,pev_angles,angle)
origin[0] += floatcos(angle[1],degrees) * offset[0]
origin[1] += floatsin(angle[1],degrees) * offset[0]
origin[2] += floatsin(angle[0],degrees) * offset[0]
origin[0] += floatcos(angle[0],degrees) * offset[0]
origin[1] += floatcos(angle[1],degrees) * offset[1]
origin[0] -= floatsin(angle[1],degrees) * offset[1]
origin[2] += floatsin(angle[2],degrees) * offset[1]
origin[1] += floatcos(angle[2],degrees) * offset[1]
origin[2] += floatcos(angle[2],degrees) * offset[2]
origin[1] -= floatsin(angle[2],degrees) * offset[2]
origin[2] += floatcos(angle[0],degrees) * offset[2]
origin[0] -= floatsin(angle[0],degrees) * offset[2]
origin[0] -= offset[0]
origin[1] -= offset[1]
origin[2] -= offset[2]
return 1;
}
stock client_color_print(const id,const input[], any:...)
{
new msg[191], players[32], count = 1; vformat(msg,190,input,3);
replace_all(msg,190,"!g","^4"); // green
replace_all(msg,190,"!y","^1"); // normal
replace_all(msg,190,"!t","^3"); // team
if (id) players[0] = id; else get_players(players,count,"ch");
for (new i=0;i<count;i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]