| Sziasztok. Valaki segítene megcsinálni azt, hogy mikor megfertőződik vagy meghal az ember fellehessen venni és legyen w_ modelja is és hogy következő körbe megmaradjon?
 Itt a SMA:
 
 Kód: /*======================================================*\
 ||      [ZP] Extra Item : Plasma Rifle                  ||
 ||      by Sh0oT3R      Forditotta:N4NDEE               ||
 \*======================================================*/
  
 #include <amxmodx>
 #include <amxmisc>
 #include <hamsandwich>
 #include <engine>
 #include <cstrike>
 #include <fakemeta>
 #include <xs>
 #include <zombieplague>
  
 #define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))
  
 #define VERSION "1.0"
 #define AUTHOR "Sh0oT3R"
  
 #define FIRERATE 0.2
 #define HITSD 1.0
 #define RELOADSPEED 1.0
 #define DAMAGE 20.0
 #define DAMAGE_MULTI 2.5
  
 #define CSW_WPN CSW_TMP
 new const weapon[] = "weapon_tmp"
  
 new const g_Cost = 0
 new const spr_beam[] = "sprites/dot.spr"
 new const spr_exp[] = "sprites/dot.spr"
 new const spr_blood[] = "sprites/blood.spr"
 new const snd_fire[][] = { "zombie_plague/plasma/plasma_fire.wav" }
 new const snd_reload[][] = { "zombie_plague/plasma/plasma_reload.wav" }
 new const snd_hit[][] = { "zombie_plague/plasma/plasma_hit.wav" }
  
 new bool:g_HasRifle[33]
 new g_iCurWpn[33], Float:g_flLastFireTime[33]
 new g_iItemId, g_sprBeam, g_sprExp, g_sprBlood, g_msgDamage, g_msgScreenFade, g_msgScreenShake
  
 const m_pPlayer =               41
 const m_fInReload =             54
 const m_pActiveItem =           373
 const m_flNextAttack =          83
 const m_flTimeWeaponIdle =      48
 const m_flNextPrimaryAttack =   46
 const m_flNextSecondaryAttack = 47
  
 const UNIT_SECOND =             (1<<12)
 const ENG_NULLENT =             -1
 const WPN_MAXCLIP =             25
 const ANIM_FIRE =               5
 const ANIM_DRAW =               10
 const ANIM_RELOAD =             9
 const EV_INT_WEAPONKEY =        EV_INT_impulse
 const WPNKEY =                  2816
  
 public plugin_init() 
 {
         register_plugin("[ZP] Extra Item: Plasma Rifle", VERSION, AUTHOR)
         
         register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
         register_event("CurWeapon", "event_CurWeapon", "b", "1=1")      
  
         register_forward(FM_CmdStart, "fw_CmdStart")
         register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
         
         RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
         RegisterHam(Ham_Item_Deploy, weapon, "fw_Deploy_Post", 1)
         RegisterHam(Ham_Item_AddToPlayer, weapon, "fw_AddToPlayer")
         RegisterHam(Ham_Weapon_Reload, weapon, "fw_Reload_Post", 1)
         RegisterHam(Ham_Item_PostFrame, weapon, "fw_PostFrame")
         
         g_iItemId = zp_register_extra_item("Plazma Puska", g_Cost, ZP_TEAM_HUMAN)
         
         g_msgDamage = get_user_msgid("Damage")
         g_msgScreenFade = get_user_msgid("ScreenFade")
         g_msgScreenShake = get_user_msgid("ScreenShake")
 }
  
 public plugin_precache()
 {
         precache_model("models/v_gauss.mdl")
         precache_model("models/p_gauss.mdl")
         precache_model("models/w_gauss.mdl")
  
         g_sprBlood = precache_model(spr_blood)
         g_sprBeam = precache_model(spr_beam)
         g_sprExp = precache_model(spr_exp)
         
         static i
         for(i = 0; i < sizeof snd_fire; i++)
                 precache_sound(snd_fire[i])
         for(i = 0; i < sizeof snd_hit; i++)
                 precache_sound(snd_hit[i])
         for(i = 0; i < sizeof snd_reload; i++)
                 precache_sound(snd_reload[i])   
 }
 public event_CurWeapon(id)
 {
         if(!is_user_alive(id))
         return PLUGIN_CONTINUE
                 
         g_iCurWpn[id] = read_data(2)
         
         if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
                 return PLUGIN_CONTINUE
                 
         if(!g_HasRifle[id] || g_iCurWpn[id] != CSW_WPN) 
                 return PLUGIN_CONTINUE
                 
         entity_set_string(id, EV_SZ_viewmodel, "models/v_gauss.mdl")
         entity_set_string(id, EV_SZ_weaponmodel, "models/p_gauss.mdl")
         return PLUGIN_CONTINUE
 }
 public zp_user_humanized_pre(id)
 {
         g_HasRifle[id] = false
 }
 public zp_user_infected_post(id)
 {
         g_HasRifle[id] = false
 }
 public fw_PlayerKilled(victim, attacker, shouldgib)
 {
         if(is_user_alive(victim))
         {
                 g_HasRifle[victim] = false
                 return HAM_HANDLED
         }
         return HAM_IGNORED
 }
  
 public Event_NewRound()
 {
         for (new i = 1; i <= get_maxplayers(); i++)
         {
                 g_HasRifle[i] = false
         }
 }
 public client_putinserver(id)
 {
         g_HasRifle[id] = false
 }
 public client_disconnect(id)
 {
         g_HasRifle[id] = false
 }
 public zp_extra_item_selected(id, itemid)
 {
         if(itemid == g_iItemId)
         {               
                 new bool:HasWpn = bool:user_has_weapon(id, CSW_WPN)
                 
                 if(!g_HasRifle[id] && !HasWpn)
                 {
                         g_HasRifle[id] = true   
                         fm_give_item(id, weapon)        
                         cs_set_user_bpammo(id, CSW_WPN, 100)    
                         engclient_cmd(id, weapon)
                 }
                 else
                 {
                         zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + g_Cost)
                         return PLUGIN_CONTINUE
                 }
         }
         return PLUGIN_CONTINUE
 }
 public fw_CmdStart(id, handle, seed)
 {
         if(!is_user_alive(id))
                 return FMRES_IGNORED
         
         if(!g_HasRifle[id])
                 return FMRES_IGNORED
                 
         if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
                 return FMRES_IGNORED
         
         if(g_iCurWpn[id] != CSW_WPN)
                 return FMRES_IGNORED
                 
         static iButton
         iButton = get_uc(handle, UC_Buttons)
         
         if(iButton & IN_ATTACK)
         {
                 set_uc(handle, UC_Buttons, iButton & ~IN_ATTACK)
                 
                 static Float:flCurTime
                 flCurTime = halflife_time()
                 
                 if(flCurTime - g_flLastFireTime[id] < FIRERATE)
                         return FMRES_IGNORED
                         
                 static iWpnID, iClip
                 iWpnID = get_pdata_cbase(id, m_pActiveItem, 5)
                 iClip = cs_get_weapon_ammo(iWpnID)
                 
                 if(get_pdata_int(iWpnID, m_fInReload, 4))
                         return FMRES_IGNORED
                 
                 set_pdata_float(iWpnID, m_flNextPrimaryAttack, FIRERATE, 4)
                 set_pdata_float(iWpnID, m_flNextSecondaryAttack, FIRERATE, 4)
                 set_pdata_float(iWpnID, m_flTimeWeaponIdle, FIRERATE, 4)
                 g_flLastFireTime[id] = flCurTime
                 if(iClip <= 0)
                 {
                         ExecuteHamB(Ham_Weapon_PlayEmptySound, iWpnID)
                         return FMRES_IGNORED
                 }
                 primary_attack(id)
                 make_punch(id, 50)
                 cs_set_weapon_ammo(iWpnID, --iClip)
                 
                 return FMRES_IGNORED
         }
         
         return FMRES_IGNORED
 }
 public fw_UpdateClientData_Post(id, sendweapons, handle)
 {
         if(!is_user_alive(id))
                 return FMRES_IGNORED
                 
         if(!g_HasRifle[id])
                 return FMRES_IGNORED
                 
         if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
                 return FMRES_IGNORED
         
         if(g_iCurWpn[id] != CSW_WPN)
                 return FMRES_IGNORED
                 
         set_cd(handle, CD_flNextAttack, halflife_time() + 0.001)
         return FMRES_HANDLED
 }
 public fw_Deploy_Post(wpn)
 {
         static id
         id = get_pdata_cbase(wpn, m_pPlayer, 4)
         
         if(is_user_connected(id) && g_HasRifle[id])
         {
                 set_wpnanim(id, ANIM_DRAW)
         }
         return HAM_IGNORED
 }
 public fw_AddToPlayer(wpn, id)
 {
         if(is_valid_ent(wpn) && is_user_connected(id) && entity_get_int(wpn, EV_INT_WEAPONKEY) == WPNKEY)
         {
                 g_HasRifle[id] = true
                 entity_set_int(wpn, EV_INT_WEAPONKEY, 0)
                 return HAM_HANDLED
         }
         return HAM_IGNORED
 }
 public fw_PostFrame(wpn)
 {
         static id
         id = get_pdata_cbase(wpn, m_pPlayer, 4)
  
         if(is_user_alive(id) && g_HasRifle[id])
         {
                 static Float:flNextAttack, iBpAmmo, iClip, iInReload
                 iInReload = get_pdata_int(wpn, m_fInReload, 4)
                 flNextAttack = get_pdata_float(id, m_flNextAttack, 5)
                 iBpAmmo = cs_get_user_bpammo(id, CSW_WPN)
                 iClip = cs_get_weapon_ammo(wpn)
                 
                 if(iInReload && flNextAttack <= 0.0)
                 {
                         new iRemClip = min(WPN_MAXCLIP - iClip, iBpAmmo)
                         cs_set_weapon_ammo(wpn, iClip + iRemClip)
                         cs_set_user_bpammo(id, CSW_WPN, iBpAmmo-iRemClip)
                         iInReload = 0
                         set_pdata_int(wpn, m_fInReload, 0, 4)
                 }
                 static iButton
                 iButton = get_user_button(id)
  
                 if((iButton & IN_ATTACK2 && get_pdata_float(wpn, m_flNextSecondaryAttack, 4) <= 0.0) || (iButton & IN_ATTACK && get_pdata_float(wpn, m_flNextPrimaryAttack, 4) <= 0.0))
                         return
                 
                 if(iButton & IN_RELOAD && !iInReload)
                 {
                         if(iClip >= WPN_MAXCLIP)
                         {
                                 entity_set_int(id, EV_INT_button, iButton & ~IN_RELOAD)
                                 set_wpnanim(id, 0)
                         }
                         else if(iClip == WPN_MAXCLIP)
                         {
                                 if(iBpAmmo)
                                 {
                                         reload(id, wpn, 1)
                                 }
                         }
                 }
         }
 }
 public fw_Reload_Post(wpn)
 {
         static id
         id = get_pdata_cbase(wpn, m_pPlayer, 4)
         
         if(is_user_alive(id) && g_HasRifle[id] && get_pdata_int(wpn, m_fInReload, 4))
         {               
                 reload(id, wpn)
         }
 }
 public primary_attack(id)
 {
         set_wpnanim(id, ANIM_FIRE)
         entity_set_vector(id, EV_VEC_punchangle, Float:{ -1.5, 0.0, 0.0 })
         emit_sound(id, CHAN_WEAPON, snd_fire[random_num(0, sizeof snd_fire - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  
         static iTarget, iBody, iEndOrigin[3], iStartOrigin[3]
         get_user_origin(id, iStartOrigin, 1) 
         get_user_origin(id, iEndOrigin, 3)
         fire_effects(iStartOrigin, iEndOrigin)
         get_user_aiming(id, iTarget, iBody)
         
         new iEnt = create_entity("info_target")
         
         static Float:flOrigin[3]
         IVecFVec(iEndOrigin, flOrigin)
         entity_set_origin(iEnt, flOrigin)
         remove_entity(iEnt)
         
         if(is_user_alive(iTarget))
         {       
                 if(HITSD > 0.0)
                 {
                         static Float:flVelocity[3]
                         get_user_velocity(iTarget, flVelocity)
                         xs_vec_mul_scalar(flVelocity, HITSD, flVelocity)
                         set_user_velocity(iTarget, flVelocity)  
                 }
                 if(zp_get_user_zombie(iTarget) || zp_get_user_nemesis(iTarget))
                 {
                         new iHp = pev(iTarget, pev_health)
                         new Float:iDamage, iBloodScale
                         if(iBody == HIT_HEAD)
                         {
                                 iDamage = DAMAGE
                                 iBloodScale = 10
                         }
                         else
                         {
                                 iDamage = DAMAGE*DAMAGE_MULTI
                                 iBloodScale = 25
                         }
                         if(iHp > iDamage) 
                         {
                                 make_blood(iTarget, iBloodScale)
                                 set_pev(iTarget, pev_health, iHp-iDamage)
                                 damage_effects(iTarget)
                         }
                         else if(iHp <= iDamage)
                         {
                                 ExecuteHamB(Ham_Killed, iTarget, id, 2)
                         }
                 }
         }
         else
         {
                 emit_sound(id, CHAN_WEAPON, snd_hit[random_num(0, sizeof snd_hit - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
         }
 }
 stock fire_effects(iStartOrigin[3], iEndOrigin[3])
 {
         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
         write_byte(0)    
         write_coord(iStartOrigin[0])
         write_coord(iStartOrigin[1])
         write_coord(iStartOrigin[2])
         write_coord(iEndOrigin[0])
         write_coord(iEndOrigin[1])
         write_coord(iEndOrigin[2])
         write_short(g_sprBeam)
         write_byte(1) 
         write_byte(5) 
         write_byte(10) 
         write_byte(25) 
         write_byte(0) 
         write_byte(0)     
         write_byte(128)      
         write_byte(255)      
         write_byte(100) 
         write_byte(0) 
         message_end()
         
         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
         write_byte(3)
         write_coord(iEndOrigin[0])
         write_coord(iEndOrigin[1])
         write_coord(iEndOrigin[2])
         write_short(g_sprExp)
         write_byte(10)
         write_byte(15)
         write_byte(4)
         message_end()   
 }
 stock reload(id, wpn, force_reload = 0)
 {
         set_pdata_float(id, m_flNextAttack, RELOADSPEED, 5)
         set_wpnanim(id, ANIM_RELOAD)
         emit_sound(id, CHAN_WEAPON, snd_reload[random_num(0, sizeof snd_reload - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
         
         if(force_reload)
                 set_pdata_int(wpn, m_fInReload, 1, 4)
 }
 stock damage_effects(id)
 {
         message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, _, id)
         write_byte(0)
         write_byte(0)
         write_long(DMG_NERVEGAS)
         write_coord(0) 
         write_coord(0)
         write_coord(0)
         message_end()
         
         message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, {0,0,0}, id)
         write_short(1<<13)
         write_short(1<<14)
         write_short(0x0000)
         write_byte(0)
         write_byte(255)
         write_byte(0)
         write_byte(100) 
         message_end()
                 
         message_begin(MSG_ONE, g_msgScreenShake, {0,0,0}, id)
         write_short(0xFFFF)
         write_short(1<<13)
         write_short(0xFFFF) 
         message_end()
 }
 stock make_blood(id, scale)
 {
         new Float:iVictimOrigin[3]
         pev(id, pev_origin, iVictimOrigin)
         
         message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
         write_byte(115)
         write_coord(floatround(iVictimOrigin[0]+random_num(-20,20))) 
         write_coord(floatround(iVictimOrigin[1]+random_num(-20,20))) 
         write_coord(floatround(iVictimOrigin[2]+random_num(-20,20))) 
         write_short(g_sprBlood)
         write_short(g_sprBlood) 
         write_byte(248) 
         write_byte(scale) 
         message_end()
 }
 stock set_wpnanim(id, anim)
 {
         entity_set_int(id, EV_INT_weaponanim, anim)
         message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
         write_byte(anim)
         write_byte(entity_get_int(id, EV_INT_body))
         message_end()
 }
 stock make_punch(id, velamount) 
 {
         static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
         velocity_by_aim(id, -velamount, flNewVelocity)
         get_user_velocity(id, flCurrentVelocity)
         xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
         set_user_velocity(id, flNewVelocity)    
 }
 stock fm_give_item(index, const item[])
 {
         if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
                 return 0;
  
         new ent = fm_create_entity(item);
         if (!pev_valid(ent))
                 return 0;
         
         new Float:origin[3];
         pev(index, pev_origin, origin);
         set_pev(ent, pev_origin, origin);
         set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
         dllfunc(DLLFunc_Spawn, ent);
         
         new save = pev(ent, pev_solid);
         dllfunc(DLLFunc_Touch, ent, index);
         if (pev(ent, pev_solid) != save)
                 return ent;
         
         engfunc(EngFunc_RemoveEntity, ent);
         
         return -1;
 }
  
 /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
 *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
 */
  
 |