RSSy MYGO.pl Opublikowano Grudzień 1, 2020 o 01:26 RSSy Udostępnij Opublikowano Grudzień 1, 2020 o 01:26 PHP Code: #define VERSION "1.0b" #define CSTRIKE_MONEY 1 #include <amxmodx> #include <amxmisc> #include <fun> #include <fakemeta> #if CSTRIKE_MONEY #include <cstrike> #endif #define JUMP_HEIGHT 70.0 #define EXPLOSION_SIZE 500.0 #define HEALTH_OFFSET 100000.0 new bool:can_spawn[33] new bool:in_control[33] new car[33] new car_spec[33] new rc_maxspeed new rc_accel new rc_follow new rc_explode new rc_health new rc_delay new rc_extramodels new rc_admin #if CSTRIKE_MONEY new rc_buyzone new rc_buytime new rc_cost new Float:roundstart #endif 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("RC Car Mod","1.0","GHW_Chronic") register_concmd("say /rc","spawn_rc") register_concmd("say /norc","unspawn_rc") register_concmd("say_team /rc","spawn_rc") register_concmd("say_team /norc","unspawn_rc") rc_maxspeed = register_cvar("rc_maxspeed","600.0") //Maxspeed of RC rc_accel = register_cvar("rc_accel","10.0") //Acceleration (Units/Think) (Halved backwards) rc_follow = register_cvar("rc_follow","1") //1=View follows RC, 2=View from Player's Viewpoint rc_delay = register_cvar("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("rc_explode","1") //1 = explodable 0=not rc_health = register_cvar("rc_health","100.0") //HP of Car rc_admin = register_cvar("rc_adminonly","0") //0=Everyone | 1=Admin Only | 2=Free to admin but everyone can buy #if CSTRIKE_MONEY rc_cost = register_cvar("rc_cost","1000") //Cost for CS/CZ rc_buyzone = register_cvar("rc_buyzone","0") //0=Don't have to buy in buyzone | 1=Have to buy in buyzone | 2=Admin's can buy anywhere but everyone else must be in buyzone rc_buytime = register_cvar("rc_buytime","0") //0=Don't have to buy within buytime | 1=Have to buy within buytime | 2=Admin's can buy anytime but everyone else only during buytime #endif 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") } public plugin_precache() { precache_model(blank) precache_model(car1) precache_model(car2) if(get_pcvar_num(register_cvar("rc_extramodels","0"))) //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 spawn_rc(id) { if(pev_valid(car[id])) { client_print(id,print_center,"[AMXX] You already have an RC Car") return ; } if(!can_spawn[id]) { client_print(id,print_center,"[AMXX] You must wait before you can have another RC.") return ; } new admin_only = get_pcvar_num(rc_admin) if(admin_only==1) { if(!is_user_admin(id)) { return ; } } #if CSTRIKE_MONEY new money = cs_get_user_money(id) new cost = get_pcvar_num(rc_cost) if(admin_only==0 || (admin_only==2 && !is_user_admin(id))) { if(cs_get_user_money(id)<cost) { client_print(id,print_center,"[AMXX] You do not have enough money for an RC. Cost: $%d",cost) return ; } } new buyzone = get_pcvar_num(rc_buyzone) if(buyzone==1 || (buyzone==2 && !is_user_admin(id))) { if(!cs_get_user_buyzone(id)) { client_print(id,print_center,"[AMXX] Must be in a buyzone to buy an RC.") return ; } } new buytime = get_pcvar_num(rc_buytime) if(buytime==1 || (buytime==2 && !is_user_admin(id))) { if((get_gametime() - roundstart) / 60.0 > get_cvar_float("mp_buytime")) { client_print(id,print_center,"[AMXX] Buytime is over. Cannot buy an RC.") return ; } } cs_set_user_money(id,money - cost) #endif 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,"[AMXX] 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,"[AMXX] RC 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 } #if CSTRIKE_MONEY roundstart = get_gametime() + 5.0 #endif } 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 * 2, 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) } /* Jump - Removed 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; } needed to move this plugin to an extra item in zombie plague mode Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi