Code:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fun>
#define MAX_SPAWNS 20
new carout[33]
new incar[33]
public loadSettings() {
new szFilename[64]
get_cvar_string("rp_carsfile",szFilename,63)
if (!file_exists(szFilename)) {
write_file(szFilename,"; CAR SPAWNS HERE",-1)
server_print("[AMXX] No ^"%s^" was found, so it has been created.", szFilename)
return PLUGIN_HANDLED
}
new szText[256]
new a, g_aNum, pos = 0
while ( g_aNum < MAX_SPAWNS && read_file(szFilename,pos++,szText,255,a) )
{
if ( szText[0] == ';' ) continue
server_cmd(szText)
++g_aNum
}
server_print("[AMXX] Loaded %i spawns", g_aNum )
return PLUGIN_HANDLED
}
public lock(id) {
if(incar[id] || !carout[id]) {
client_print(id,print_chat,"[CarMod] You must be outside your car to lock")
return PLUGIN_HANDLED
}
new origin[3]
get_user_origin(id,origin)
new authid[33]
get_user_authid(id,authid,32)
entity_set_string(carout[id],EV_SZ_target,authid)
return PLUGIN_HANDLED
}
public overhear(a,distance,Speech[])
{
new OriginA[3], OriginB[3]
get_user_origin(a,OriginA)
new players[32], num
get_players(players,num,"ac")
for(new b = 0; b < num;b++)
{
if(a!=players[b])
{
get_user_origin(players[b],OriginB)
if(distance == -1) {
client_print(players[b],print_chat,Speech)
}
else
{
if(get_distance(OriginA,OriginB) <= distance) {
client_print(players[b],print_chat,Speech)
}
}
}
}
return PLUGIN_HANDLED
}
public makecar(id) {
new item[32], orig1[6], orig2[6], orig3[6], angles1[6], Float:origin[3]
read_argv(1, item, 31)
read_argv(2, orig1, 5)
read_argv(3, orig2, 5)
read_argv(4, orig3, 5)
read_argv(5, angles1, 5)
origin[0] = float(str_to_num(orig1))
origin[1] = float(str_to_num(orig2))
origin[2] = float(str_to_num(orig3))
new Float:angles2 = float(str_to_num(angles1))
new car = create_entity("info_target")
if(!car) {
client_print(id,print_chat,"CAR WAS not created. Error.^n")
return PLUGIN_HANDLED
}
new Float:minbox[3] = { -2.5, -2.5, -2.5 }
new Float:maxbox[3] = { 2.5, 2.5, -2.5 }
new Float:angles[3] = { 0.0, 0.0, 0.0 }
angles[1] = angles2
entity_set_vector(car,EV_VEC_mins,minbox)
entity_set_vector(car,EV_VEC_maxs,maxbox)
entity_set_vector(car,EV_VEC_angles,angles)
entity_set_float(car,EV_FL_dmg,0.0)
entity_set_float(car,EV_FL_dmg_take,0.0)
entity_set_float(car,EV_FL_max_health,99999.0)
entity_set_float(car,EV_FL_health,99999.0)
entity_set_int(car,EV_INT_solid,SOLID_TRIGGER)
entity_set_int(car,EV_INT_movetype,MOVETYPE_NONE)
entity_set_string(car,EV_SZ_targetname,item)
entity_set_string(car,EV_SZ_classname,"item_car")
new damodel[64]
format(damodel,63,"models/player/%s/%s.mdl", item, item)
entity_set_model(car,damodel)
entity_set_origin(car,origin)
return PLUGIN_HANDLED
}
public plugin_precache()
{
precache_model("models/player/pietrekcar/pietrekcar.mdl")
precache_model("models/player/car_astra/car_astra.mdl")
precache_model("models/player/car_corolla/car_corolla.mdl")
precache_model("models/player/car_gto/car_gto.mdl")
precache_model("models/player/ambulance/ambulance.mdl")
precache_model("models/player/car_cookiepolice/car_cookiepolice.mdl")
precache_model("models/player/RRViper/RRViper.mdl")
precache_model("models/player/corvette/corvette.mdl")
precache_model("models/player/skyline/skyline.mdl")
precache_model("models/player/LambBlack/LambBlack.mdl")
precache_model("models/player/car_evo/car_evo.mdl")
precache_model("/models/player/PoliceLamb/policelamb.mdl")
precache_sound("phone/1.wav")
precache_sound("ambience/rd_warehouse.wav")
}
public plugin_init()
{
register_touch("item_car","player","setcar")
register_touch("player","player","crash")
register_clcmd("say /getout","uncar")
register_clcmd("say /honk","honk")
register_clcmd("say /lock","lock")
register_srvcmd("amx_makecar","makecar")
register_cvar("rp_carsfile", "carsfile.ini")
register_concmd("amx_createcar","purposedrop")
register_event("DeathMsg","death_msg","a")
set_task(5.0,"loadSettings")
return PLUGIN_HANDLED
}
new Float:oldspeed[33]
new Float:oldfric[33]
new oldmodel[33][33]
new carmodel[33][33]
new allow[33]
public crash(entid, id) {
if(allow[entid] == 1 || allow[id] == 1) return PLUGIN_HANDLED
if(incar[id] && incar[entid]) {
set_user_health(entid,0)
set_user_health(id,0)
emit_sound(id, CHAN_ITEM, "ambience/rd_warehouse.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
//drop_car(id)
//drop_car(entid)
return PLUGIN_HANDLED
}
if(incar[id]) {
new hp = get_user_health(entid)
new hp2 = get_user_health(id)
set_user_health(entid,(hp - 50))
set_user_health(id,(hp2 - 10))
emit_sound(id, CHAN_ITEM, "ambience/rd_warehouse.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
//if(get_user_health(id) <= 0) drop_car(id)
allow[id] = 1
set_task(10.0,"allowhim",id)
return PLUGIN_HANDLED
}
if(incar[entid]) {
new hp = get_user_health(id)
new hp2 = get_user_health(entid)
set_user_health(id,(hp - 50))
set_user_health(entid,(hp2 - 10))
emit_sound(entid, CHAN_ITEM, "ambience/rd_warehouse.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
//if(get_user_health(entid) <= 0) drop_car(entid)
allow[entid] = 1
set_task(10.0,"allowhim",entid)
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public honk(id) {
if(incar[id] != 1) return PLUGIN_HANDLED
emit_sound(id, CHAN_ITEM, "phone/1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_HANDLED
}
public client_PreThink(id)
{
if(incar[id] != 0)
{
new bufferstop = entity_get_int(id,EV_INT_button)
if(bufferstop != 0) {
entity_set_int(id,EV_INT_button,bufferstop & ~IN_ATTACK & ~IN_ATTACK2 & ~IN_ALT1 & ~IN_USE)
}
if((bufferstop & IN_JUMP) && (entity_get_int(id,EV_INT_flags) & ~FL_ONGROUND & ~FL_DUCKING)) {
entity_set_int(id,EV_INT_button,entity_get_int(id,EV_INT_button) & ~IN_JUMP)
}
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public setcar(entid,id) {
if(allow[id] != 0) return PLUGIN_HANDLED
if(incar[id] != 0) return PLUGIN_HANDLED
new locked[33], authid[33]
entity_get_string(entid,EV_SZ_target,locked,32)
get_user_authid(id,authid,32)
if(equal(locked,"") || equal(locked,authid)) {}
else return PLUGIN_HANDLED
new name[64]
get_user_name(id,name,63)
new message[300]
client_cmd(id, "cl_forwardspeed 5000");
client_cmd(id, "cl_sidespeed 5000");
client_cmd(id, "cl_backspeed 5000");
format(message,299,"[CarMod] %s has gotten into his car and started the engine.",name)
overhear(id,300,message)
client_print(id,print_chat,"[CarMod] You have gotten into your car and started the engine.")
get_user_info(id,"model",oldmodel[id], 32)
new itemstr[33]
entity_get_string(entid,EV_SZ_targetname,itemstr,31)
carmodel[id] = itemstr
set_user_info(id,"model",itemstr)
oldspeed[id] = get_user_maxspeed(id)
oldfric[id] = entity_get_float(id,EV_FL_friction)
set_user_maxspeed(id, 1000.0)
new carmodel[32]
get_user_info(id,"model",carmodel,31)
new Float:policelambspeed = 1500.0
new Float:LambBlackspeed = 1350.0
new Float:policespeed = 1250.0
new Float:RRViperspeed = 1200.0
new Float:corvettespeed = 1150.0
new Float:triscarspeed = 1100.0
new Float:ambulancespeed = 1000.0
new Float:evospeed = 1000.0
new Float:skylinespeed = 1000.0
new Float:corollaspeed = 700.0
new Float:astraspeed = 500.0
if(equali(carmodel,"car_astra")) {
set_user_maxspeed(id,Float:astraspeed)
}
if(equali(carmodel,"corvette")) {
set_user_maxspeed(id,Float:corvettespeed)
}
if(equali(carmodel,"skyline")) {
set_user_maxspeed(id,Float:skylinespeed)
}
if(equali(carmodel,"car_evo")) {
set_user_maxspeed(id,Float:evospeed)
}
if(equali(carmodel,"car_corolla")) {
set_user_maxspeed(id,Float:corollaspeed)
}
if(equali(carmodel,"car_ambulance")) {
set_user_maxspeed(id,Float:ambulancespeed)
}
if(equali(carmodel,"car_cookiepolice")) {
set_user_maxspeed(id,Float:policespeed)
}
if(equali(carmodel,"RRViper")) {
set_user_maxspeed(id,Float:RRViperspeed)
}
if(equali(carmodel,"triscar")) {
set_user_maxspeed(id,Float:triscarspeed)
}
if(equali(carmodel,"LambBlack")) {
set_user_maxspeed(id,Float:LambBlackspeed)
}
if(equali(carmodel,"policelamb")) {
set_user_maxspeed(id,Float:policelambspeed)
}
incar[id] = 1
carout[id] = 0
emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
remove_entity(entid)
return PLUGIN_HANDLED
}
new steamid[64]
new steamid2[64]
new carOwner[32]
new tryingToCar[32]
public leaveCar(id)
{
carOwner[id] = get_user_authid(id,steamid,43)
}
public getInCar(id)
{
tryingToCar[id] = get_user_authid(id,steamid2,43)
if( tryingToCar[id] == carOwner[id] )
{
letInCarFunction(id)
}
else
client_print(id,print_chat,"You'r not the owner of this vechile!")
}
public uncar(id) {
if(incar[id] != 1) return PLUGIN_HANDLED
new name[64]
get_user_name(id,name,63)
new message[300]
client_cmd(id, "cl_forwardspeed 320");
client_cmd(id, "cl_sidespeed 320");
client_cmd(id, "cl_backspeed 320");
client_cmd(id, "/lock");
format(message,299,"[CarMod] %s has turned off his engine and got out of the car.",name)
overhear(id,300,message)
client_print(id,print_chat,"[CarMod] You have turned off your engine and l got out of the car.")
set_user_maxspeed(id,oldspeed[id])
entity_set_float(id,EV_FL_friction,oldfric[id])
car_drop(id)
set_user_info(id,"model",oldmodel[id])
incar[id] = 0
return PLUGIN_HANDLED
}
public purposedrop(id)
{
if(!is_user_alive(id)) return PLUGIN_HANDLED
if(!access(id,ADMIN_RESERVATION)) return PLUGIN_HANDLED
new itemname[64], save1[6], szFilename[64]
read_argv(1, itemname, 31)
read_argv(2, save1, 5)
if(!access(id,ADMIN_RESERVATION)) {
client_print(id,print_console,"You do not have access to this command.")
return PLUGIN_HANDLED
}
if(equal(itemname, "") || equal(save1, "")) {
client_print(id,print_console,"Usage: amx_createcar <model> <save 1/0>")
return PLUGIN_HANDLED
}
new save = str_to_num(save1)
new origin[3], Float:originF[3]
get_user_origin(id,origin)
originF[0] = float(origin[0])
originF[1] = float(origin[1])
originF[2] = float(origin[2])
new car = create_entity("info_target")
if(!car) {
client_print(id,print_chat,"CAR WAS not created. Error.^n")
return PLUGIN_HANDLED
}
new Float:minbox[3] = { -2.5, -2.5, -2.5 }
new Float:maxbox[3] = { 2.5, 2.5, -2.5 }
new Float:angles[3] = { 0.0, 0.0, 0.0 }
new Float:pangles[3]
entity_get_vector(id,EV_VEC_angles,pangles)
angles[1] = pangles[1]
entity_set_vector(car,EV_VEC_mins,minbox)
entity_set_vector(car,EV_VEC_maxs,maxbox)
entity_set_vector(car,EV_VEC_angles,angles)
entity_set_float(car,EV_FL_dmg,0.0)
entity_set_float(car,EV_FL_dmg_take,0.0)
entity_set_float(car,EV_FL_max_health,99999.0)
entity_set_float(car,EV_FL_health,99999.0)
entity_set_int(car,EV_INT_solid,SOLID_TRIGGER)
entity_set_int(car,EV_INT_movetype,MOVETYPE_NONE)
entity_set_string(car,EV_SZ_targetname,itemname)
entity_set_string(car,EV_SZ_classname,"item_car")
new damodel[64]
format(damodel,63,"models/player/%s/%s.mdl", itemname, itemname)
entity_set_model(car,damodel)
entity_set_origin(car,originF)
if(save == 1 || equal(save1, "1")) {
get_cvar_string("rp_carsfile",szFilename,63)
if (!file_exists(szFilename)) return PLUGIN_HANDLED
new message[64]
format(message, 63, "amx_makecar %s %i %i %i 0", itemname, origin[0], origin[1], origin[2])
write_file(szFilename,message,-1)
}
allow[id] = 1
set_task(10.0,"allowhim",id)
return PLUGIN_HANDLED
}
public car_drop(id)
{
//if(!is_user_alive(id)) return PLUGIN_HANDLED
if(incar[id] != 1) return PLUGIN_HANDLED
new origin[3],Float:pangles[3],Float:originF[3]
get_user_origin(id,origin)
originF[0] = float(origin[0])
originF[1] = float(origin[1])
originF[2] = float(origin[2])
new car = create_entity("info_target")
if(!car) {
client_print(id,print_chat,"CAR WAS not created. Error.^n")
return PLUGIN_HANDLED
}
new Float:minbox[3] = { -2.5, -2.5, -2.5 }
new Float:maxbox[3] = { 2.5, 2.5, -2.5 }
new Float:angles[3] = { 0.0, 0.0, 0.0 }
entity_get_vector(id,EV_VEC_angles,pangles)
angles[1] = pangles[1]
entity_set_vector(car,EV_VEC_mins,minbox)
entity_set_vector(car,EV_VEC_maxs,maxbox)
entity_set_vector(car,EV_VEC_angles,angles)
entity_set_float(car,EV_FL_dmg,0.0)
entity_set_float(car,EV_FL_dmg_take,0.0)
entity_set_float(car,EV_FL_max_health,99999.0)
entity_set_float(car,EV_FL_health,99999.0)
entity_set_int(car,EV_INT_solid,SOLID_TRIGGER)
entity_set_int(car,EV_INT_movetype,MOVETYPE_NONE)
entity_set_string(car,EV_SZ_targetname,carmodel[id])
entity_set_string(car,EV_SZ_classname,"item_car")
new damodel[64]
format(damodel,63,"models/player/%s/%s.mdl", carmodel[id], carmodel[id])
entity_set_model(car,damodel)
entity_set_origin(car,originF)
carout[id] = car
allow[id] = 1
set_task(10.0,"allowhim",id)
return PLUGIN_HANDLED
}
public allowhim(id) {
allow[id] = 0
}
public client_infochanged(id)
{
if(incar[id] == 1) {
set_user_info(id,"model",carmodel[id])
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public client_disconnect(id) {
if(incar[id] == 1) {
car_drop(id)
incar[id] = 0
}
if(carout[id]) {
entity_set_string(carout[id],EV_SZ_target,"")
carout[id] = 0
}
return PLUGIN_CONTINUE
}
public death_msg() {
new id = read_data(2)
if(incar[id] == 1) {
set_user_maxspeed(id,oldspeed[id])
entity_set_float(id,EV_FL_friction,oldfric[id])
set_user_info(id,"model",oldmodel[id])
car_drop(id)
incar[id] = 0
}
return PLUGIN_CONTINUE
}