Raised This Month: $ Target: $400
 0% 

Creating Muzzle flashes and gun shots


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
eXist
Member
Join Date: Apr 2005
Old 12-20-2009 , 20:07   Creating Muzzle flashes and gun shots
Reply With Quote #1

Ok, so I have an npc that I've created. He has a model, and he has a weapon (2 different entities). Basically when a player types /decoy it creates a decoy of that player at the location hes looking at with the gun he's holding.

Now, when the decoy gets attacked I'd like him to look at the enemy, and "shoot back" or at least make it look like he's shooting back, but no bullets are really being shot. I already have code that lets me know if the decoy is taking damage, I just don't know how to imitate muzzle flashes.

He honestly doesn't even have to look at the enemy, since that requires an attacker, and the way I've done it, you might not be able to get the attacker. But I would like a few muzzles flashes to go off, and some gun shots to be played when his hp drops.

Here's my code:
Code:
#include <amxmodx> #include <cstrike> #include <engine> #define MAX_PLAYERS 33                          // Max number of players in the game new decoy[MAX_PLAYERS] = 0                      // Decoys stored for each player new decoyWeap[MAX_PLAYERS] = 0                  // Weap stored for each decoy new Float:decoy_frame[MAX_PLAYERS] = 0.0        // Used in server_frame() new Float:decoy_fstep[MAX_PLAYERS] = 0.0        // Frame step time new Float:last_frame = 0.0                      // Last server_frame saved new decoy_seq[MAX_PLAYERS] = 0                  // Current sequence for each decoy new bool:DoOnce[MAX_PLAYERS] = false            // Used for handling crouch mode new bool:decoyused[MAX_PLAYERS] = false         // Has decoy been used this round new bool:pIsDucking[MAX_PLAYERS] = false        // Is player crouching or not new Float:decoyHP[MAX_PLAYERS] = 0.0            // Used for checing DecoyHP new bool:decoyDied[MAX_PLAYERS] = false         // Check if Decoy died public plugin_init() {     register_plugin("Decoy Test", "1.0", "eXist")     register_clcmd("say /decoy", "make_decoy")     set_task(0.01, "check_duck", 0, "", 0, "b")         //register_think("decoy_entity","npc_think") } public plugin_precache() {    precache_model("models/player/leet/leet.mdl")    precache_model("models/player/arctic/arctic.mdl")    precache_model("models/player/guerilla/guerilla.mdl")    precache_model("models/player/terror/terror.mdl")    precache_model("models/player/gign/gign.mdl")    precache_model("models/player/sas/sas.mdl")    precache_model("models/player/gsg9/gsg9.mdl")    precache_model("models/player/urban/urban.mdl")    precache_model("models/player/vip/vip.mdl")    precache_model("models/guerilla.mdl")        //Weapons    precache_model("models/p_m4a1.mdl")    precache_model("models/p_ak47.mdl")    precache_model("models/p_aug.mdl")    precache_model("models/p_awp.mdl")    precache_model("models/p_c4.mdl")    precache_model("models/p_deagle.mdl")    precache_model("models/p_elite.mdl")    precache_model("models/p_famas.mdl")    precache_model("models/p_fiveseven.mdl")    precache_model("models/p_flashbang.mdl")    precache_model("models/p_g3sg1.mdl")    precache_model("models/p_galil.mdl")    precache_model("models/p_glock18.mdl")    precache_model("models/p_hegrenade.mdl")    precache_model("models/p_knife.mdl")    precache_model("models/p_m3.mdl")    precache_model("models/p_m3super90.mdl")    precache_model("models/p_m249.mdl")    precache_model("models/p_mac10.mdl")    precache_model("models/p_mp5.mdl")    precache_model("models/p_p90.mdl")    precache_model("models/p_p228.mdl")    precache_model("models/p_scout.mdl")    precache_model("models/p_sg550.mdl")    precache_model("models/p_sg552.mdl")    precache_model("models/p_shield.mdl")    precache_model("models/p_smokegrenade.mdl")    precache_model("models/p_tmp.mdl")    precache_model("models/p_ump45.mdl")    precache_model("models/p_usp.mdl")    precache_model("models/p_xm1014.mdl") } public make_decoy(id) {     if(decoyused[id] == true)     {         client_print(id, print_chat, "[WC3] You already have a decoy up")         return PLUGIN_CONTINUE     }             client_print(id, print_chat, "[WC3] Making decoy")             //Making Decoy start -- Copied from UWC3 Mod     new arg[64]     new Float:arg2[3]     new vec[3]     new aimvec[3]     new Float:b_orig[3]         get_user_origin(id, vec)     get_user_origin(id, aimvec, 2)         //Fix for people spawning decoys on other players to trap them     new sClass[32], target, body     get_user_aiming(id, target, body)     if ((0 < target <= MAX_PLAYERS))     {       entity_get_string(target, EV_SZ_classname, sClass, 32)       if (equal(sClass, "player")){          client_print(id, print_chat, "[WC3] You cannot create a Decoy on a player.")          return PLUGIN_HANDLED       }     }         b_orig[0] = float(aimvec[0])     b_orig[1] = float(aimvec[1])     b_orig[2] = float(aimvec[2] + 35)     entity_get_string(id, EV_SZ_classname, arg, 63)     new decoyEnt = create_entity("info_target")     entity_set_string(decoyEnt, EV_SZ_classname, "decoy_entity")         entity_set_origin(decoyEnt, b_orig)         entity_set_byte(decoyEnt, EV_BYTE_controller1, 127)         entity_get_vector(id,EV_VEC_absmin,arg2)     entity_set_vector(decoyEnt, EV_VEC_absmin, arg2)     entity_get_vector(id,EV_VEC_absmax,arg2)     entity_set_vector(decoyEnt, EV_VEC_absmax, arg2)     entity_get_vector(id,EV_VEC_mins,arg2)     entity_set_vector(decoyEnt, EV_VEC_mins, arg2)     entity_get_vector(id,EV_VEC_maxs,arg2)     entity_set_vector(decoyEnt, EV_VEC_maxs, arg2)     entity_get_vector(id, EV_VEC_size,arg2)     entity_set_vector(decoyEnt, EV_VEC_size, arg2)         //Decoy Think     //entity_set_float(decoyEnt,EV_FL_nextthink,halflife_time() + 0.01)     //-----------         //Additional size     new Float:maxs[3] = {16.0,16.0,36.0}     new Float:mins[3] = {-16.0,-16.0,-36.0}     entity_set_size(decoyEnt,mins,maxs)             new model[32]     new pmodel[128]         get_user_info(id,"model",model,31)     format(pmodel, 127, "models/player/%s/%s.mdl", model, model)         entity_set_model(decoyEnt, pmodel)     entity_set_float(decoyEnt, EV_FL_health,10150.0)     entity_set_float(decoyEnt, EV_FL_takedamage, 1.0)     entity_set_float(decoyEnt, EV_FL_dmg_take, 1.0)     entity_set_int(decoyEnt, EV_INT_movetype, 13)     entity_set_int(decoyEnt, EV_INT_solid, 2)     entity_set_int(decoyEnt, EV_INT_spawnflags, 0)     entity_set_int(decoyEnt, EV_INT_sequence, 1)         //Give it a weapon     new weapmodel[256]     entity_get_string(id, EV_SZ_weaponmodel, weapmodel, 255)         new entWeapon = create_entity("info_target")     entity_set_string(entWeapon, EV_SZ_classname, "npc_weapon")     entity_set_int(entWeapon, EV_INT_movetype, MOVETYPE_FOLLOW)     entity_set_int(entWeapon, EV_INT_solid, SOLID_NOT)     entity_set_edict(entWeapon, EV_ENT_aiment, decoyEnt)     entity_set_model(entWeapon, weapmodel)     //------------------         decoy[id] = decoyEnt     decoyWeap[id] = entWeapon     decoy_frame[id]=0.0     decoy_seq[id]=0     decoyused[id] = true     decoyHP[id] = 10150.0     //Used to get rid of decoy after ammount of time     new cargs[3]     cargs[0] = id     cargs[1] = decoyEnt     cargs[2] = entWeapon     set_task(15.0, "cleanup_decoy", 866, cargs, 3)     return PLUGIN_CONTINUE } public cleanup_decoy(args[]) {     new id = args[0]     new ent = args[1]     new weap = args[2]         if(decoyDied[id] == false)     {         //Remove gun entity         remove_entity(weap)                 new Float:orig[3]                 entity_get_vector(ent, EV_VEC_origin, orig)         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)         write_byte(11)         write_coord(floatround(orig[0]))         write_coord(floatround(orig[1]))         write_coord(floatround(orig[2]))         message_end()                     decoy[id] = 0         decoyused[id] = false                 remove_entity(ent)     }     else     {         decoy[id] = 0         decoyused[id] = false         decoyDied[id] = false     }     client_print(id, print_chat, "Your decoy has expired.") } //Used if decoy gets killed public kill_decoy(args[]) {     new id = args[0]     new ent = args[1]     new weap = args[2]         //Remove gun entity     remove_entity(weap)         new Float:orig[3]         entity_get_vector(ent, EV_VEC_origin, orig)     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)     write_byte(11)     write_coord(floatround(orig[0]))     write_coord(floatround(orig[1]))     write_coord(floatround(orig[2]))     message_end()         decoy[id] = 0;     decoyDied[id] = true         remove_entity(ent)     client_print(id, print_chat, "Your decoy has been killed!") } public check_duck() {    for(new i = 1; i <= MAX_PLAYERS; ++i) {       if (is_user_alive(i)) {          if (decoy[i]) {             //client_print(i, print_chat, "MIH2")             if (get_user_button(i)&IN_DUCK) {                if (!pIsDucking[i]) {                   //client_print(i, print_chat, "You are now ducking")                   pIsDucking[i]=true                   DoOnce[i]=true                 }             }else{                if (pIsDucking[i]) {                   //client_print(i, print_chat, "Stopped ducking")                   pIsDucking[i]=false                   DoOnce[i]=true                }             }          }       }    }    return PLUGIN_CONTINUE } public server_frame() {    new id    new Float:vel[3]    new Float:speed    new Float:new_frame = get_gametime()    new Float:newAngle[3]    new Float:orig[3]    new Float:framerate = 30.0;    new Float:MinBox[3]    new Float:MaxBox[3]    //new aimvec[3]    //new origin[3]    //new Float:temp[3]    //new avgFactor = 3    //new mVelo[3]    //new iNewVelocity[3]    //new ispeed = 300;    //new length, velocityvec[3]    if ( (new_frame - last_frame) < ( 1.0 / framerate) )       return PLUGIN_CONTINUE    last_frame = new_frame    for( id=0; id<MAX_PLAYERS; id++) {       if ( !decoy[id] || !is_user_connected(id) ) continue       new Float:health = entity_get_float(decoy[id],EV_FL_health)       if(health < 10000.0)       {          new cargs[3]          cargs[0] = id          cargs[1] = decoy[id]          cargs[2] = decoyWeap[id]          kill_decoy(cargs)          break       }             //Check health       if(health != decoyHP[id])       {           client_print(id, print_chat, "Decoy Health: Old %f New %f", decoyHP[id]-10000.0, health-10000.0)           decoyHP[id] = health       }       if (pIsDucking[id]) {          MinBox[0] = 0.0          MinBox[1] = 0.0          MinBox[2] = -20.0 //change to -40 for standing models          MaxBox[0] = 0.0          MaxBox[1] = 0.0          MaxBox[2] = 0.0       }else{          MinBox[0] = 0.0          MinBox[1] = 0.0          MinBox[2] = -40.0 //change to -20 for crouching models          MaxBox[0] = 0.0          MaxBox[1] = 0.0          MaxBox[2] = 0.0       }       entity_set_vector(decoy[id],EV_VEC_mins, MinBox)       new Float:vRetVector[3]       entity_get_vector(id, EV_VEC_v_angle, vRetVector)             vRetVector[0]=float(0)       entity_set_vector(decoy[id], EV_VEC_angles, vRetVector)       entity_get_vector(decoy[id], EV_VEC_velocity, vel)       //client_print(id,print_chat,"Beyonder velocity <%f %f %f> ", vel[0], vel[1], vel[2])       if( vel[0] != 0.0 && vel[1] != 0.0) {          vel[2] = 0.0          vector_to_angle(vel, newAngle);          //entity_set_vector(decoy[id], EV_VEC_angles, newAngle)       }       vel[2] = 0.0       speed = vector_length(vel)       //client_print(id,print_center,"Beyonder speed = %f ",speed)       if (speed <= 5 && pIsDucking[id]){          if (DoOnce[id]) {             entity_get_vector(decoy[id],EV_VEC_origin,orig)             orig[2]=orig[2] - 20             entity_set_vector(decoy[id],EV_VEC_origin,orig)             DoOnce[id]=false          }          decoy_seq[id] = 2          entity_set_int(decoy[id], EV_INT_sequence, 2)          MinBox[0] = -20.0          MinBox[1] = -20.0          MinBox[2] = -20.0          MaxBox[0] = 20.0          MaxBox[1] = 20.0          MaxBox[2] = 40.0          entity_set_vector(decoy[id],EV_VEC_mins, MinBox)          entity_set_vector(decoy[id],EV_VEC_maxs, MaxBox)          new Float:tmpVec[3]          tmpVec[0] = 40.0;   tmpVec[1] = 40.0; tmpVec[2] = 80.0          entity_set_vector(decoy[id],EV_VEC_size,tmpVec)       }else if (speed <= 5 && !pIsDucking[id]){          if (DoOnce[id]) {             entity_get_vector(decoy[id],EV_VEC_origin,orig)             orig[2]=orig[2] + 20             entity_set_vector(decoy[id],EV_VEC_origin,orig)             DoOnce[id]=false          }          decoy_seq[id] = 1          entity_set_int(decoy[id], EV_INT_sequence, 1)          MinBox[0] = -20.0          MinBox[1] = -20.0          MinBox[2] = -40.0          MaxBox[0] = 20.0          MaxBox[1] = 20.0          MaxBox[2] = 40.0          entity_set_vector(decoy[id],EV_VEC_mins, MinBox)          entity_set_vector(decoy[id],EV_VEC_maxs, MaxBox)          new Float:tmpVec[3]          tmpVec[0] = 40.0;   tmpVec[1] = 40.0; tmpVec[2] = 80.0          entity_set_vector(decoy[id],EV_VEC_size,tmpVec)        }       decoy_fstep[id] = 5.0       decoy_frame[id] += decoy_fstep[id]       if( decoy_frame[id] >= 254.0 ) decoy_frame[id] = 0.0       entity_set_float(decoy[id], EV_FL_frame, decoy_frame[id])    }    return PLUGIN_CONTINUE }

Last edited by eXist; 12-20-2009 at 20:15.
eXist is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 04:13.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode