hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.29. 09:12



Jelenlévő felhasználók

Jelenleg 359 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 358 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Majestic-12 [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 5 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Jetpack VIPEKNEK [ZM]
HozzászólásElküldve: 2016.08.24. 12:55 
Offline
Jómunkásember

Csatlakozott: 2016.06.20. 10:23
Hozzászólások: 489
Megköszönt másnak: 47 alkalommal
Megköszönték neki: 15 alkalommal
Sziasztok van nekem egy ilyen jetpack, és ezt kellene be rakni vipeseknek csak!

Forrás:
  1. #include <amxmodx>
  2. #include <fun>
  3. #include <engine>
  4. #include <fakemeta>
  5. #include <hamsandwich>
  6. #include <zombieplague>
  7.  
  8. #define PLUGINNAME      "Jetpack+Bazoka"
  9. #define VERSION         "3.2"
  10. #define AUTHOR          "B!gBud"
  11.  
  12. #define ACCESS_LEVEL    ADMIN_LEVEL_A
  13. #define VOTE_ACCESS ADMIN_CFG
  14.  
  15. #define TE_EXPLOSION    3
  16. #define TE_BEAMFOLLOW   22
  17. #define TE_BEAMCYLINDER 21
  18.  
  19. #define JETPACK_COST 25 // set how may ammopacks the Jatpack+Rocket cost
  20.  
  21. new ROCKET_MDL[64] = "models/rpgrocket.mdl"
  22. new ROCKET_SOUND[64] = "weapons/rocketfire1.wav"
  23. new getrocket[64] = "items/9mmclip2.wav"
  24.  
  25. new bool:fly[33] = false
  26. new bool:rocket[33] = false
  27. new bool:rksound[33] = false
  28. new bool:shot[33] = false
  29.  
  30. new Float:gltime = 0.0
  31. new Float:last_Rocket[33] = 0.0
  32. new Float:jp_cal[33] = 0.0
  33. new Float:jp_soun[33] = 0.0
  34. new flame, explosion, trail, white
  35. new g_flyEnergy[33], hasjet[33]
  36. new cvar_jetpack, cvar_jetpackSpeed, cvar_jetpackUpSpeed, cvar_jetpackAcrate ,cvar_RocketDelay, cvar_RocketSpeed, cvar_RocketDmg, cvar_Dmg_range, cvar_fly_max_engery, cvar_fly_engery, cvar_regain_energy, g_item_jetpack, cvar_cal_time, cvar_oneround
  37.  
  38.  
  39. public plugin_init() {
  40.     register_plugin(PLUGINNAME, VERSION, AUTHOR)
  41.    
  42.     g_item_jetpack = zp_register_extra_item("Jetpack+Bazooka (one Round)", JETPACK_COST, ZP_TEAM_HUMAN)
  43.     register_clcmd("drop","cmdDrop")
  44.     register_clcmd("say /jphelp","cmdHelp",0,": Displays Jetpack help")
  45.    
  46.     new ver[64]
  47.     format(ver,63,"%s v%s",PLUGINNAME,VERSION)
  48.     register_cvar("zp_jp_version",ver,FCVAR_SERVER)
  49.    
  50.     cvar_jetpack = register_cvar("zp_jetpack", "2")
  51.    
  52.     cvar_jetpackSpeed=register_cvar("zp_jp_forward_speed","300.0")
  53.     cvar_jetpackUpSpeed=register_cvar("zp_jp_up_speed","35.0")
  54.     cvar_jetpackAcrate=register_cvar("zp_jp_accelerate","100.0")
  55.    
  56.     cvar_RocketDelay=register_cvar("zp_jp_rocket_delay","12.0")
  57.     cvar_RocketSpeed=register_cvar("zp_jp_rocket_speed","1500")
  58.     cvar_RocketDmg=register_cvar("zp_jp_rocket_damage","1500")
  59.     cvar_Dmg_range=register_cvar("zp_jp_damage_radius","350")
  60.    
  61.     cvar_fly_max_engery = register_cvar("zp_jp_max_engery", "100")
  62.     cvar_fly_engery = register_cvar("zp_jp_engery", "10")
  63.     cvar_regain_energy = register_cvar("zp_jp_regain_energy", "3")
  64.     cvar_cal_time = register_cvar("zp_jp_energy_cal", "1.0")
  65.     cvar_oneround = register_cvar("zp_jp_oneround", "0")
  66.  
  67.    
  68.     register_event("CurWeapon", "check_models", "be")
  69.     register_event("DeathMsg", "player_die", "a")
  70.     register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  71.    
  72.     register_forward(FM_StartFrame, "fm_startFrame")
  73.     register_forward(FM_EmitSound, "emitsound")
  74. }
  75.  
  76. public plugin_precache() {
  77.     precache_model("models/p_egon.mdl")
  78.     precache_model("models/v_egon.mdl")
  79.     precache_model("models/w_egon.mdl")
  80.     precache_sound("jetpack.wav")
  81.     precache_sound("jp_blow.wav")
  82.    
  83.     precache_model(ROCKET_MDL)
  84.     precache_sound(ROCKET_SOUND)
  85.     precache_sound(getrocket)
  86.    
  87.     explosion = precache_model("sprites/zerogxplode.spr")
  88.     trail = precache_model("sprites/smoke.spr")
  89.     flame = precache_model("sprites/xfireball3.spr")
  90.     white = precache_model("sprites/white.spr")
  91. }
  92.  
  93. public client_putinserver(id) {
  94.     fly[id] = false
  95.     rocket[id] = false
  96.     hasjet[id] = 0
  97.     g_flyEnergy[id] = 0
  98. }
  99.  
  100. public client_disconnect(id) {
  101.     fly[id] = false
  102.     rocket[id] = false
  103.     hasjet[id] = 0
  104.     g_flyEnergy[id] = 0
  105. }
  106.  
  107. public event_round_start()
  108. {
  109.     remove_jetpacks();
  110.     if (get_pcvar_num(cvar_oneround) == 1) {
  111.         for (new id; id <= 32; id++) hasjet[id] = 0, g_flyEnergy[id] = 0,   fly[id] = false;
  112.     }
  113. }
  114.  
  115. public fm_startFrame(){
  116.        
  117.     gltime = get_gametime()
  118.     static id
  119.     for (id = 1; id <= 32; id++)
  120.     {
  121.         jp_forward(id)
  122.     }
  123. }
  124.  
  125. public jp_forward(player) {
  126.    
  127.     if (!is_user_alive(player) && (zp_get_user_zombie(player) || zp_get_user_nemesis(player) || zp_get_user_survivor(player)))
  128.         return FMRES_IGNORED       
  129.        
  130.     if (!hasjet[player])
  131.         return FMRES_IGNORED
  132.    
  133.     if(jp_cal[player] < gltime){
  134.         jp_energy(player); jp_cal[player] = gltime + get_pcvar_float(cvar_cal_time)
  135.     }
  136.    
  137.     check_rocket(player)
  138.    
  139.     new clip,ammo
  140.     new wpnid = get_user_weapon(player,clip,ammo)
  141.     if (wpnid == CSW_KNIFE){
  142.         if(get_pcvar_num(cvar_jetpack) == 1){
  143.             if(!(pev(player, pev_flags)&FL_ONGROUND) && pev(player,pev_button)&IN_ATTACK){
  144.                 if((g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.3) && (g_flyEnergy[player] <= get_pcvar_num(cvar_fly_max_engery))){
  145.                     if(jp_soun[player] < gltime){
  146.                         emit_sound(player,CHAN_ITEM,"jetpack.wav",1.0,ATTN_NORM,1,PITCH_HIGH)
  147.                         jp_soun[player] = gltime + 1.0
  148.                     }
  149.                 }          
  150.                 else if((g_flyEnergy[player] > 0) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.3)){
  151.                     if(jp_soun[player] < gltime){
  152.                             emit_sound(player,CHAN_ITEM,"jp_blow.wav",1.0,ATTN_NORM,1,PITCH_HIGH)
  153.                             jp_soun[player] = gltime + 1.0
  154.                     }
  155.                 }
  156.             }
  157.             human_fly(player)
  158.             attack(player) 
  159.         }
  160.         if((pev(player,pev_button)&IN_ATTACK2)){
  161.                 attack2(player)
  162.             }  
  163.     }
  164.     if((get_pcvar_num(cvar_jetpack) == 2 && !(pev(player, pev_flags)&FL_ONGROUND)) && (pev(player,pev_button)&IN_JUMP && pev(player,pev_button)&IN_DUCK)){         
  165.         if((g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.3) && (g_flyEnergy[player] <= get_pcvar_num(cvar_fly_max_engery))){
  166.             if(jp_soun[player] < gltime){
  167.                 emit_sound(player,CHAN_ITEM,"jetpack.wav",1.0,ATTN_NORM,1,PITCH_HIGH)
  168.                 jp_soun[player] = gltime + 1.0
  169.             }
  170.         }                  
  171.         else if((g_flyEnergy[player] > 0) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.3)){
  172.             if(jp_soun[player] < gltime){
  173.                 emit_sound(player,CHAN_ITEM,"jp_blow.wav",1.0,ATTN_NORM,1,PITCH_HIGH)
  174.                 jp_soun[player] = gltime + 1.0
  175.             }
  176.         }
  177.         human_fly(player)
  178.         attack(player)
  179.     }
  180.     // Icon Show system
  181.     /*if (!is_user_alive(player) && zp_get_user_zombie(player) && zp_get_user_nemesis(player) && zp_get_user_survivor(player)) 
  182.         Icon_Energy({0, 255, 0}, 0, player);
  183.                 //Icon_Energy({128, 128, 0}, 0, player);
  184.                 //Icon_Energy({255, 255, 0}, 0, player);
  185.                        
  186.     }*/
  187.     if((g_flyEnergy[player] >= get_pcvar_num(cvar_fly_max_engery)*0.8) && (g_flyEnergy[player] <= get_pcvar_num(cvar_fly_max_engery))){
  188.         Icon_Energy({0, 255, 0}, 1, player); // Green
  189.     }
  190.     else if((g_flyEnergy[player] >= get_pcvar_num(cvar_fly_max_engery)*0.5) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.8)){
  191.         Icon_Energy({255, 255, 0}, 1, player); // yellow
  192.     }
  193.     else if((g_flyEnergy[player] >= get_pcvar_num(cvar_fly_max_engery)*0.3) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.5)){
  194.         Icon_Energy({255, 215, 0}, 2, player);
  195.     }
  196.     else if((g_flyEnergy[player] > 0) && (g_flyEnergy[player] < get_pcvar_num(cvar_fly_max_engery)*0.3)){
  197.         Icon_Energy({255, 0, 0}, 1, player);
  198.     }
  199.    
  200.     return FMRES_IGNORED
  201. }
  202.  
  203. public jp_energy(player) {
  204.            
  205.         if (!(pev(player, pev_flags)&FL_ONGROUND) && pev(player,pev_button)&IN_ATTACK) 
  206.         {
  207.             // Get our current velocity    
  208.             new clip,ammo
  209.             new wpnid = get_user_weapon(player,clip,ammo)
  210.             if (wpnid == CSW_KNIFE)
  211.             {
  212.             // flying
  213.             if(g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.09)
  214.                 g_flyEnergy[player] = g_flyEnergy[player] - get_pcvar_num(cvar_fly_engery);  // Increase distance counter      
  215.             }
  216.         }
  217.         else if ((get_pcvar_num(cvar_jetpack) == 2 && !(pev(player, pev_flags)&FL_ONGROUND)) && (pev(player,pev_button)&IN_JUMP && pev(player,pev_button)&IN_DUCK))
  218.         {
  219.             if(g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.09)
  220.                 g_flyEnergy[player] = g_flyEnergy[player] - get_pcvar_num(cvar_fly_engery);  // Increase distance counter  
  221.         }
  222.         // Walking/Runnig
  223.         if (pev(player, pev_flags) & FL_ONGROUND)  
  224.             g_flyEnergy[player] = g_flyEnergy[player] + get_pcvar_num(cvar_regain_energy);// Decrease distance counter
  225. }
  226.  
  227. public attack(player) {
  228. //code snippa from TS_Jetpack 1.0 - Jetpack plugin for The Specialists.
  229. //http://forums.alliedmods.net/showthread.php?s=3ea22295e3e5a292fa82899676583326&t=55709&highlight=jetpack
  230. //By: Bad_Bud
  231.     if(fly[player])
  232.     {  
  233.         static Float:JetpackData[3]
  234.         pev(player,pev_velocity,JetpackData)
  235.                    
  236.         new fOrigin[3],Float:Aim[3]
  237.         VelocityByAim(player, 10, Aim)
  238.         get_user_origin(player,fOrigin)
  239.         fOrigin[0] -= floatround(Aim[0])
  240.         fOrigin[1] -= floatround(Aim[1])
  241.         fOrigin[2] -= floatround(Aim[2])
  242.        
  243.        
  244.         if((pev(player,pev_button)&IN_FORWARD) && !(pev(player, pev_flags) & FL_ONGROUND))
  245.             {
  246.                
  247.                 message_begin(MSG_ALL,SVC_TEMPENTITY)
  248.                 write_byte(17)
  249.                 write_coord(fOrigin[0])
  250.                 write_coord(fOrigin[1])
  251.                 write_coord(fOrigin[2])
  252.                 write_short(flame)
  253.                 write_byte(10)
  254.                 write_byte(255)
  255.                 message_end()  
  256.                
  257.                 static Float:Speed
  258.                 Speed=floatsqroot(JetpackData[0]*JetpackData[0]+JetpackData[1]*JetpackData[1])
  259.                    
  260.                 if(Speed!=0.0)//Makes players only lay down if their speed isn't 0; if they are thrusting forward.
  261.                 {
  262.                     set_pev(player,pev_gaitsequence,0)
  263.                     set_pev(player,pev_sequence,111)
  264.                 }
  265.                    
  266.                 if(Speed<get_pcvar_float(cvar_jetpackSpeed))
  267.                     Speed+=get_pcvar_float(cvar_jetpackAcrate)
  268.                        
  269.                 static Float:JetpackData2[3]
  270.                 pev(player,pev_angles,JetpackData2)
  271.                 JetpackData2[2]=0.0//Remove the Z value/
  272.                    
  273.                 angle_vector(JetpackData2,ANGLEVECTOR_FORWARD,JetpackData2)
  274.                 JetpackData2[0]*=Speed
  275.                 JetpackData2[1]*=Speed
  276.                    
  277.                 JetpackData[0]=JetpackData2[0]
  278.                 JetpackData[1]=JetpackData2[1]
  279.             }
  280.            
  281.         if(JetpackData[2]<get_pcvar_float(cvar_jetpackSpeed)&&JetpackData[2]>0.0)//Jetpacks get more power on the way down -- it helps landing.
  282.                 JetpackData[2]+=get_pcvar_float(cvar_jetpackUpSpeed)
  283.             else if(JetpackData[2]<0.0)
  284.                 JetpackData[2]+=(get_pcvar_float(cvar_jetpackUpSpeed)*1.15)
  285.                    
  286.         set_pev(player,pev_velocity,JetpackData)
  287.     }
  288. }
  289.  
  290. public attack2(player) {
  291.        
  292.     if (rocket[player])
  293.     {
  294.        
  295.         new rocket = create_entity("info_target")
  296.         if(rocket == 0) return PLUGIN_CONTINUE
  297.        
  298.         entity_set_string(rocket, EV_SZ_classname, "zp_jp_rocket")
  299.         entity_set_model(rocket, ROCKET_MDL)
  300.        
  301.         entity_set_size(rocket, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  302.         entity_set_int(rocket, EV_INT_movetype, MOVETYPE_FLY)
  303.         entity_set_int(rocket, EV_INT_solid, SOLID_BBOX)
  304.        
  305.         new Float:vSrc[3]
  306.         entity_get_vector(player, EV_VEC_origin, vSrc)
  307.        
  308.         new Float:Aim[3],Float:origin[3]
  309.         VelocityByAim(player, 64, Aim)
  310.         entity_get_vector(player,EV_VEC_origin,origin)
  311.        
  312.         vSrc[0] += Aim[0]
  313.         vSrc[1] += Aim[1]
  314.         entity_set_origin(rocket, vSrc)
  315.        
  316.         new Float:velocity[3], Float:angles[3]
  317.         VelocityByAim(player, get_pcvar_num(cvar_RocketSpeed), velocity)
  318.        
  319.         entity_set_vector(rocket, EV_VEC_velocity, velocity)
  320.         vector_to_angle(velocity, angles)
  321.         entity_set_vector(rocket, EV_VEC_angles, angles)
  322.         entity_set_edict(rocket,EV_ENT_owner,player)
  323.         entity_set_float(rocket, EV_FL_takedamage, 1.0)
  324.        
  325.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  326.         write_byte(TE_BEAMFOLLOW)
  327.         write_short(rocket)
  328.         write_short(trail)
  329.         write_byte(25)
  330.         write_byte(5)
  331.         write_byte(224)
  332.         write_byte(224)
  333.         write_byte(255)
  334.         write_byte(255)
  335.         message_end()
  336.  
  337.         emit_sound(rocket, CHAN_WEAPON, ROCKET_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM)
  338.        
  339.         shot[player] = true
  340.         last_Rocket[player] = gltime + get_pcvar_num(cvar_RocketDelay)
  341.     }
  342.     return PLUGIN_CONTINUE
  343. }
  344.  
  345. public check_models(id) {
  346.  
  347.     if (zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_survivor(id))
  348.         return FMRES_IGNORED
  349.    
  350.     if(hasjet[id]) {
  351.         new clip,ammo
  352.         new wpnid = get_user_weapon(id,clip,ammo)
  353.        
  354.         if ( wpnid == CSW_KNIFE ) {
  355.             switchmodel(id)
  356.         }
  357.         return PLUGIN_CONTINUE
  358.     }
  359.     return PLUGIN_CONTINUE
  360. }
  361.  
  362. public switchmodel(id) {
  363.     entity_set_string(id,EV_SZ_viewmodel,"models/v_egon.mdl")
  364.     entity_set_string(id,EV_SZ_weaponmodel,"models/p_egon.mdl")
  365. }
  366.  
  367. public remove_jetpacks() {
  368.     new nextitem  = find_ent_by_class(-1,"zp_jp_jetpack")
  369.     while(nextitem) {
  370.         remove_entity(nextitem)
  371.         nextitem = find_ent_by_class(-1,"zp_jp_jetpack")
  372.     }
  373.     return PLUGIN_CONTINUE
  374. }
  375.  
  376. public emitsound(entity, channel, const sample[]) {
  377.     if(is_user_alive(entity)) {
  378.         new clip,ammo
  379.         new weapon = get_user_weapon(entity,clip,ammo)
  380.        
  381.         if(hasjet[entity] && weapon == CSW_KNIFE) {
  382.             if(equal(sample,"weapons/knife_slash1.wav")) return FMRES_SUPERCEDE
  383.             if(equal(sample,"weapons/knife_slash2.wav")) return FMRES_SUPERCEDE
  384.            
  385.             if(equal(sample,"weapons/knife_deploy1.wav")) return FMRES_SUPERCEDE
  386.             if(equal(sample,"weapons/knife_hitwall1.wav")) return FMRES_SUPERCEDE
  387.            
  388.             if(equal(sample,"weapons/knife_hit1.wav")) return FMRES_SUPERCEDE
  389.             if(equal(sample,"weapons/knife_hit2.wav")) return FMRES_SUPERCEDE
  390.             if(equal(sample,"weapons/knife_hit3.wav")) return FMRES_SUPERCEDE
  391.             if(equal(sample,"weapons/knife_hit4.wav")) return FMRES_SUPERCEDE
  392.            
  393.             if(equal(sample,"weapons/knife_stab.wav")) return FMRES_SUPERCEDE
  394.         }
  395.     }
  396.     return FMRES_IGNORED
  397. }
  398.  
  399. public Icon_Show(icon[], color[3], mode, player) {
  400.            
  401.     message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusIcon"), {0,0,0}, player);
  402.     write_byte(mode);   // status (0=hide, 1=show, 2=flash)
  403.     write_string(icon);     // sprite name
  404.     write_byte(color[0]);   // red
  405.     write_byte(color[1]);   // green
  406.     write_byte(color[2]);   // blue
  407.     message_end();
  408.  
  409. }
  410.  
  411. public Icon_Energy(color[3], mode, player) {
  412.    
  413.     Icon_Show("item_longjump", color, mode, player)
  414. }
  415.  
  416. public human_fly(player) {
  417.    
  418.     if (g_flyEnergy[player] <= get_pcvar_num(cvar_fly_max_engery)*0.1)
  419.     {
  420.         jp_off(player);
  421.     }
  422.     if (g_flyEnergy[player] > get_pcvar_num(cvar_fly_max_engery)*0.1)
  423.     {
  424.         jp_on(player);
  425.     }
  426. }
  427.  
  428. public jp_on(player) {
  429.  
  430.     fly[player] = true
  431.    
  432. }
  433.  
  434. public jp_off(player) {
  435.  
  436.     fly[player] = false
  437.    
  438. }
  439.  
  440. public check_rocket(player) {
  441.        
  442.     if (last_Rocket[player] > gltime)
  443.     {  
  444.         rk_forbidden(player)
  445.         rksound[player] = true
  446.     }
  447.     else
  448.     {  
  449.  
  450.         if (shot[player])
  451.         {
  452.             rksound[player] = false
  453.             shot[player] = false
  454.         }
  455.         rk_sound(player)
  456.         rk_allow(player)
  457.     }
  458.    
  459. }
  460.  
  461. public rk_allow(player) {
  462.        
  463.     rocket[player] = true
  464. }
  465.  
  466. public rk_forbidden(player) {
  467.  
  468.     rocket[player] = false
  469.    
  470. }
  471.  
  472. public rk_sound(player) {
  473.  
  474.     if (!rksound[player])
  475.     {
  476.         engfunc(EngFunc_EmitSound, player, CHAN_WEAPON, getrocket, 1.0, ATTN_NORM, 0, PITCH_NORM)
  477.         client_print(player, print_center, "*Bazooka Ujratoltve*")
  478.         rksound[player] = true
  479.     }
  480.     else if (rksound[player])
  481.     {
  482.        
  483.     }
  484.    
  485. }
  486.        
  487. public cmdHelp(id) {
  488.    
  489.     new g_max = get_pcvar_num(cvar_fly_max_engery)
  490.     new g_lost = get_pcvar_num(cvar_fly_engery)
  491.     new g_back = get_pcvar_num(cvar_regain_energy)
  492.     new g_dmg = get_pcvar_num(cvar_RocketDmg)
  493.     new g_delay = get_pcvar_num(cvar_RocketDelay)
  494.    
  495.     new jpmotd[2048], title[64], dpos = 0
  496.     format(title,63,"[ZP] %s ver.%s",PLUGINNAME,VERSION)
  497.    
  498.    
  499.     dpos += format(jpmotd[dpos],2047-dpos,"<html><head><style type=^"text/css^">pre{color:#FF0505;}body{background:#000000;margin-left:16px;margin-top:1px;}</style></head><pre><body>")
  500.     dpos += format(jpmotd[dpos],2047-dpos,"<b>%s</b>^n^n",title)
  501.    
  502.     dpos += format(jpmotd[dpos],2047-dpos,"Hogyan hasznaljuk:^n")
  503.     dpos += format(jpmotd[dpos],2047-dpos,"=============^n^n")
  504.     if(get_pcvar_num(cvar_jetpack) == 1) {
  505.         dpos += format(jpmotd[dpos],2047-dpos,"- Valts kersre a loveshez! Es jobb klick^n")
  506.         dpos += format(jpmotd[dpos],2047-dpos,"^n")
  507.         dpos += format(jpmotd[dpos],2047-dpos,"- Bazooka hasznalata Job klick!^n^n")
  508.     }
  509.     else if(get_pcvar_num(cvar_jetpack) == 2){
  510.         dpos += format(jpmotd[dpos],2047-dpos,"- A repuleshez nyomd a ctrl+spacet egybe!")
  511.         dpos += format(jpmotd[dpos],2047-dpos,"^n")
  512.         dpos += format(jpmotd[dpos],2047-dpos,"A raketa kiloveseert nyomd a Job kiclket^n^n")
  513.     }
  514.     dpos += format(jpmotd[dpos],2047-dpos,"INFO's^n")
  515.     dpos += format(jpmotd[dpos],2047-dpos,"Max energia : <b>%i Units</b>^n^n", g_max)
  516.     dpos += format(jpmotd[dpos],2047-dpos,"Jatpack repulesi sebessege %i 1masodperc. to work^n", g_lost)
  517.     dpos += format(jpmotd[dpos],2047-dpos,"Energia ujratoltese %i . (when you are on the ground)^n^n", g_back)
  518.     dpos += format(jpmotd[dpos],2047-dpos,"Raketa sebzese: <b>%i dmg</b>^n",g_dmg)
  519.     dpos += format(jpmotd[dpos],2047-dpos,"New Rocket comes ervry <b>%i Sec.</b>^n^n", g_delay )
  520.     dpos += format(jpmotd[dpos],2047-dpos,"-Hasznald egessegel!!^n")
  521.    
  522.  
  523.     show_motd(id,jpmotd,title)
  524. }
  525.  
  526. public player_die() {
  527.    
  528.     new id = read_data(2)
  529.     if(hasjet[id]) {
  530.         drop_jetpack(id)
  531.         hasjet[id] = 0
  532.         rocket[id] = false
  533.         g_flyEnergy[id] = 0
  534.     }
  535.    
  536.     return PLUGIN_CONTINUE
  537. }
  538.  
  539. public cmdDrop(id) {
  540.  
  541.     if(hasjet[id]) {
  542.         new clip,ammo
  543.         new weapon = get_user_weapon(id,clip,ammo)
  544.         if(weapon == CSW_KNIFE) {
  545.             drop_jetpack(id)
  546.             if(!zp_get_user_zombie(id)){
  547.                 entity_set_string(id,EV_SZ_viewmodel,"models/v_knife.mdl")
  548.                 entity_set_string(id,EV_SZ_weaponmodel,"models/p_knife.mdl")
  549.                 }
  550.             return PLUGIN_HANDLED
  551.         }
  552.     }
  553.     return PLUGIN_CONTINUE
  554. }
  555.  
  556. public drop_jetpack(player) {
  557.     if(hasjet[player]) {
  558.         new Float:Aim[3],Float:origin[3]
  559.         VelocityByAim(player, 64, Aim)
  560.         entity_get_vector(player,EV_VEC_origin,origin)
  561.        
  562.         origin[0] += Aim[0]
  563.         origin[1] += Aim[1]
  564.        
  565.         new jetpack = create_entity("info_target")
  566.         entity_set_string(jetpack,EV_SZ_classname,"zp_jp_jetpack")
  567.         entity_set_model(jetpack,"models/w_egon.mdl")  
  568.        
  569.         entity_set_size(jetpack,Float:{-16.0,-16.0,-16.0},Float:{16.0,16.0,16.0})
  570.         entity_set_int(jetpack,EV_INT_solid,1)
  571.        
  572.         entity_set_int(jetpack,EV_INT_movetype,6)
  573.        
  574.         entity_set_vector(jetpack,EV_VEC_origin,origin)
  575.        
  576.         Icon_Energy({255, 255, 0}, 0, player)
  577.         Icon_Energy({128, 128, 0}, 0, player )
  578.         Icon_Energy({0, 255, 0}, 0, player)
  579.        
  580.         hasjet[player] = 0
  581.         rocket[player] = false
  582.     }  
  583. }
  584.  
  585. public pfn_touch(ptr, ptd) {
  586.     if(is_valid_ent(ptr)) {
  587.         new classname[32]
  588.         entity_get_string(ptr,EV_SZ_classname,classname,31)
  589.        
  590.         if(equal(classname, "zp_jp_jetpack")) {
  591.             if(is_valid_ent(ptd)) {
  592.                 new id = ptd
  593.                 if(id > 0 && id < 34) {
  594.                     if(!hasjet[id] && !zp_get_user_zombie(id) && is_user_alive(id)) {
  595.                        
  596.                         hasjet[id] = 1
  597.                         g_flyEnergy[id] = get_pcvar_num(cvar_fly_max_engery)
  598.                         rocket[id] = true
  599.                         client_cmd(id,"spk items/gunpickup2.wav")
  600.                         engclient_cmd(id,"weapon_knife")
  601.                         switchmodel(id)
  602.                         remove_entity(ptr)
  603.                     }
  604.                 }
  605.             }
  606.         }else if(equal(classname, "zp_jp_rocket")) {
  607.             new Float:fOrigin[3]
  608.             new iOrigin[3]
  609.             entity_get_vector(ptr, EV_VEC_origin, fOrigin)
  610.             FVecIVec(fOrigin,iOrigin)
  611.             jp_radius_damage(ptr)
  612.                
  613.             message_begin(MSG_BROADCAST,SVC_TEMPENTITY,iOrigin)
  614.             write_byte(TE_EXPLOSION)
  615.             write_coord(iOrigin[0])
  616.             write_coord(iOrigin[1])
  617.             write_coord(iOrigin[2])
  618.             write_short(explosion)
  619.             write_byte(30)
  620.             write_byte(15)
  621.             write_byte(0)
  622.             message_end()
  623.                
  624.             message_begin(MSG_ALL,SVC_TEMPENTITY,iOrigin)
  625.             write_byte(TE_BEAMCYLINDER)
  626.             write_coord(iOrigin[0])
  627.             write_coord(iOrigin[1])
  628.             write_coord(iOrigin[2])
  629.             write_coord(iOrigin[0])
  630.             write_coord(iOrigin[1])
  631.             write_coord(iOrigin[2]+200)
  632.             write_short(white)
  633.             write_byte(0)
  634.             write_byte(1)
  635.             write_byte(6)
  636.             write_byte(8)
  637.             write_byte(1)
  638.             write_byte(255)
  639.             write_byte(255)
  640.             write_byte(192)
  641.             write_byte(128)
  642.             write_byte(5)
  643.             message_end()
  644.            
  645.             if(is_valid_ent(ptd)) {
  646.                 new classname2[32]
  647.                 entity_get_string(ptd,EV_SZ_classname,classname2,31)
  648.                
  649.                 if(equal(classname2,"func_breakable"))
  650.                     force_use(ptr,ptd)
  651.             }
  652.            
  653.             remove_entity(ptr)
  654.         }
  655.     }
  656.     return PLUGIN_CONTINUE
  657. }
  658.  
  659. public zp_user_infected_pre(player, infector){
  660.    
  661.     Icon_Energy({0, 255, 0}, 0, player);
  662.     cmdDrop(player);
  663.     hasjet[player] = 0;
  664.     g_flyEnergy[player] = 0;
  665.     rocket[player] = false;
  666. }
  667.  
  668. public zp_extra_item_selected(player, itemid){
  669.    
  670.  
  671.     new clip,ammo
  672.     new weapon = get_user_weapon(player,clip,ammo)
  673.        
  674.     if (itemid == g_item_jetpack)
  675.     {
  676.         client_print(player, print_chat, "[New -Zombie] ird be hogy /jphelp a jetpack segicseghez")
  677.         hasjet[player] = 1
  678.         g_flyEnergy[player] = get_pcvar_num(cvar_fly_max_engery)
  679.         rocket[player] = true
  680.         client_cmd(player,"spk items/gunpickup2.wav")
  681.         if(weapon == CSW_KNIFE){
  682.             switchmodel(player)
  683.         }
  684.         else
  685.         {
  686.             engclient_cmd(player,"weapon_knife"),switchmodel(player)
  687.         }
  688.     }
  689. }
  690.  
  691. stock jp_radius_damage(entity) {
  692.     new id = entity_get_edict(entity,EV_ENT_owner)
  693.     for(new i = 1; i < 33; i++) {
  694.         if(is_user_alive(i)) {
  695.             new dist = floatround(entity_range(entity,i))
  696.            
  697.             if(dist <= get_pcvar_num(cvar_Dmg_range)) {
  698.                 new hp = get_user_health(i)
  699.                 new Float:damage = get_pcvar_float(cvar_RocketDmg)-(get_pcvar_float(cvar_RocketDmg)/get_pcvar_float(cvar_Dmg_range))*float(dist)
  700.                
  701.                 new Origin[3]
  702.                 get_user_origin(i,Origin)
  703.                
  704.                 if(zp_get_user_zombie(id) != zp_get_user_zombie(i)) {
  705.                         if(hp > damage)
  706.                             jp_take_damage(i,floatround(damage),Origin,DMG_BLAST)
  707.                         else
  708.                             log_kill(id,i,"Jetpack Rocket",0)
  709.                     }
  710.             }
  711.         }
  712.     }
  713. }
  714.  
  715. stock log_kill(killer, victim, weapon[], headshot)
  716. {
  717. // code from MeRcyLeZZ
  718.     set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
  719.     ExecuteHamB(Ham_Killed, victim, killer, 2) // set last param to 2 if you want victim to gib
  720.     set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
  721.  
  722.    
  723.     message_begin(MSG_BROADCAST, get_user_msgid("DeathMsg"))
  724.     write_byte(killer)
  725.     write_byte(victim)
  726.     write_byte(headshot)
  727.     write_string(weapon)
  728.     message_end()
  729. //
  730.    
  731.     if(get_user_team(killer)!=get_user_team(victim))
  732.         set_user_frags(killer,get_user_frags(killer) +1)
  733.     if(get_user_team(killer)==get_user_team(victim))
  734.         set_user_frags(killer,get_user_frags(killer) -1)
  735.        
  736.     new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10]
  737.  
  738.     get_user_name(killer, kname, 31)
  739.     get_user_team(killer, kteam, 9)
  740.     get_user_authid(killer, kauthid, 31)
  741.  
  742.     get_user_name(victim, vname, 31)
  743.     get_user_team(victim, vteam, 9)
  744.     get_user_authid(victim, vauthid, 31)
  745.        
  746.     log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
  747.     kname, get_user_userid(killer), kauthid, kteam,
  748.     vname, get_user_userid(victim), vauthid, vteam, weapon)
  749.  
  750.     return PLUGIN_CONTINUE;
  751. }
  752.  
  753. stock jp_take_damage(victim,damage,origin[3],bit) {
  754.     message_begin(MSG_ONE,get_user_msgid("Damage"),{0,0,0},victim)
  755.     write_byte(21)
  756.     write_byte(20)
  757.     write_long(bit)
  758.     write_coord(origin[0])
  759.     write_coord(origin[1])
  760.     write_coord(origin[2])
  761.     message_end()
  762.    
  763.     set_user_health(victim,get_user_health(victim)-damage)
  764. }


Itt egy vipes extra cuccis h ki tudjatok indulni !

Forrás:
  1. #include <amxmodx>
  2. #include <hamsandwich>
  3. #include <fun>
  4. #include <engine>
  5. #include <cstrike>
  6. #include <fakemeta>
  7. #include <xs>
  8. #include <zombieplague>
  9. #include <zmvip>
  10.  
  11. /*================================================================================
  12.  [Customizations]
  13. =================================================================================*/
  14.  
  15. // Item Cost
  16. const antidotegun_ap_cost = 30
  17.  
  18. // Sprites
  19. new const antidotegun_sprite_beam[] = "sprites/zbeam6.spr"
  20. new const antidotegun_sprite_ring[] = "sprites/shockwave.spr"
  21.  
  22. // Weapon Fire Sound, you can add more than 1
  23. new const antidotegun_firesound[][] = { "weapons/gauss2.wav" }
  24.  
  25. // Hit Sound, you can add more than 1
  26. new const antidotegun_hitsound[][] = { "warcraft3/frostnova.wav" }
  27.  
  28. // Ammo bought Sound, you can add more than 1
  29. new const antidotegun_ammopickupsound[][] = { "items/9mmclip1.wav" }
  30.  
  31. // Weaponbox Glow RGB Colors    R   G   B
  32. new antidotegun_wb_color[] = {  0,  255,    255     }
  33.  
  34. // Uncomment this line if you want to add support to old ZP versions
  35. // Use if it's necessary, from version 4.2 to below
  36. // If you uncomment this line, this item can be buyed only in infection
  37. // rounds, because the main disinfect native in old versions works
  38. // only on infection rounds.
  39. //#define OLD_VERSION_SUPPORT
  40.  
  41. /*================================================================================
  42.  Customization ends here! Yes, that's it. Editing anything beyond
  43.  here is not officially supported. Proceed at your own risk...
  44. =================================================================================*/
  45.  
  46. // Booleans
  47. new bool:g_bHasAntidoteGun[33], bool:g_bIsConnected[33], bool:g_bIsAlive[33]
  48.  
  49. // Cvar pointers
  50. new cvar_enable, cvar_oneround, cvar_firerate, cvar_maxclip, cvar_maxbpammo, cvar_wboxglow,
  51. cvar_buyindelay, cvar_reloadspeed, cvar_hitslowdown
  52.  
  53. // Arrays
  54. new g_iCurrentWeapon[33], Float:g_flLastFireTime[33]
  55.  
  56. // Variables
  57. new g_iItemID, g_iMaxPlayers, g_msgSayText, g_msgDeathMsg, g_msgCurWeapon, g_msgAmmoX,
  58. g_msgAmmoPickup, g_msgScreenFade, g_sprBeam, g_sprRing, HamHook:g_iHhPostFrame_fw
  59.  
  60. // Offsets
  61. const m_pPlayer =       41
  62. const m_fInReload =     54
  63. const m_pActiveItem =       373
  64. const m_flNextAttack =      83
  65. const m_flTimeWeaponIdle =  48
  66. const m_flNextPrimaryAttack =   46
  67. const m_flNextSecondaryAttack = 47
  68.  
  69. // Some constants
  70. const FFADE_IN =        0x0000
  71. const ENG_NULLENT =         -1
  72. const UNIT_SECOND =     (1<<12)
  73. const AMMOID_GALIL =        4
  74. const GALIL_DFT_MAXCLIP =   35
  75. const V_GAUSS_ANIM_FIRE =   6
  76. const V_GAUSS_ANIM_DRAW =   8
  77. const V_GAUSS_ANIM_RELOAD =     2
  78. const EV_INT_WEAPONKEY =    EV_INT_impulse
  79. const ANTIDOTEGUN_WPNKEY =  2816
  80.  
  81. // Buy in delay cvar it's disabled
  82. // for old versions
  83. #if defined OLD_VERSION_SUPPORT
  84.     #pragma unused cvar_buyindelay
  85. #endif
  86.  
  87. // Cached cvars
  88. new bool:g_bCvar_Enabled, bool:g_bCvar_BuyUntilMode, Float:g_flCvar_FireRate,
  89. Float:g_flCvar_ReloadSpeed, Float:g_flCvar_HitSlowdown, g_iCvar_MaxClip, g_iCvar_MaxBPAmmo
  90.  
  91. // Plug info.
  92. #define PLUG_VERSION "0.6"
  93. #define PLUG_AUTH "meTaLiCroSS"
  94.  
  95. // Macros
  96. #define is_user_valid_alive(%1)     (1 <= %1 <= g_iMaxPlayers && g_bIsAlive[%1])
  97. #define is_user_valid_connected(%1)     (1 <= %1 <= g_iMaxPlayers && g_bIsConnected[%1])
  98.  
  99. /*================================================================================
  100.  [Init and Precache]
  101. =================================================================================*/
  102.  
  103. public plugin_init()
  104. {
  105.     // Plugin info
  106.     register_plugin("[ZP] Extra Item: Advanced Antidote Gun", PLUG_VERSION, PLUG_AUTH)
  107.    
  108.     // Events
  109.     register_event("CurWeapon", "event_CurWeapon", "b", "1=1") 
  110.     register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0")
  111.    
  112.     // Fakemeta Forwards
  113.     register_forward(FM_SetModel, "fw_SetModel")
  114.     register_forward(FM_CmdStart, "fw_CmdStart")
  115.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  116.    
  117.     // Hamsandwich Forwards
  118.     RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
  119.     RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
  120.     RegisterHam(Ham_Item_Deploy, "weapon_galil", "fw_Galil_Deploy_Post", 1)
  121.     RegisterHam(Ham_Item_AddToPlayer, "weapon_galil", "fw_Galil_AddToPlayer")
  122.     RegisterHam(Ham_Weapon_Reload, "weapon_galil", "fw_Galil_Reload_Post", 1)
  123.     g_iHhPostFrame_fw = RegisterHam(Ham_Item_PostFrame, "weapon_galil", "fw_Galil_PostFrame")
  124.    
  125.     // Cvars
  126.     cvar_enable = register_cvar("zp_antidotegun_enable", "1")
  127.     cvar_oneround = register_cvar("zp_antidotegun_oneround", "0")
  128.     cvar_firerate = register_cvar("zp_antidotegun_fire_rate", "0.6")
  129.     cvar_maxclip = register_cvar("zp_antidotegun_max_clip", "3")
  130.     cvar_maxbpammo = register_cvar("zp_antidotegun_max_bpammo", "25")
  131.     cvar_reloadspeed = register_cvar("zp_antidotegun_reload_speed", "2.5")
  132.     cvar_wboxglow = register_cvar("zp_antidotegun_wbox_glow", "1")
  133.     cvar_buyindelay = register_cvar("zp_antidotegun_buy_before_modestart", "0")
  134.     cvar_hitslowdown = register_cvar("zp_antidotegun_hit_slowdown", "0.4")
  135.    
  136.     static szCvar[30]
  137.     formatex(szCvar, charsmax(szCvar), "v%s by %s", PLUG_VERSION, PLUG_AUTH)
  138.     register_cvar("zp_extra_adv_antidotegun", szCvar, FCVAR_SERVER|FCVAR_SPONLY)
  139.    
  140.     // Variables
  141.     g_iMaxPlayers = get_maxplayers()
  142.     g_msgAmmoX = get_user_msgid("AmmoX")
  143.     g_msgSayText = get_user_msgid("SayText")
  144.     g_msgDeathMsg = get_user_msgid("DeathMsg")
  145.     g_msgCurWeapon = get_user_msgid("CurWeapon")
  146.     g_msgAmmoPickup = get_user_msgid("AmmoPickup")
  147.     g_msgScreenFade = get_user_msgid("ScreenFade")
  148.     g_iItemID = zv_register_extra_item("Antidote Gun", "Desinfecting people", antidotegun_ap_cost, ZV_TEAM_HUMAN)
  149. }
  150.  
  151. public plugin_precache()
  152. {
  153.     // Models
  154.     precache_model("models/v_gauss.mdl")
  155.     precache_model("models/p_gauss.mdl")
  156.     precache_model("models/w_gauss.mdl")
  157.    
  158.     // Sprites
  159.     g_sprBeam = precache_model(antidotegun_sprite_beam)
  160.     g_sprRing = precache_model(antidotegun_sprite_ring)
  161.    
  162.     // Sounds
  163.     static i
  164.     for(i = 0; i < sizeof antidotegun_firesound; i++)
  165.         precache_sound(antidotegun_firesound[i])
  166.     for(i = 0; i < sizeof antidotegun_ammopickupsound; i++)
  167.         precache_sound(antidotegun_ammopickupsound[i])
  168.     for(i = 0; i < sizeof antidotegun_hitsound; i++)
  169.         precache_sound(antidotegun_hitsound[i])
  170.        
  171.        
  172. }
  173.  
  174. public plugin_cfg()
  175. {
  176.     // Cache some cvars after init is called
  177.     cache_cvars()
  178.    
  179.     // Check the max clip cvar
  180.     if(g_iCvar_MaxClip && g_iCvar_MaxClip != GALIL_DFT_MAXCLIP)
  181.     {
  182.         EnableHamForward(g_iHhPostFrame_fw)
  183.     }
  184.     else
  185.     {
  186.         // Should disable it if isn't necesary to check
  187.         DisableHamForward(g_iHhPostFrame_fw)
  188.     }
  189. }
  190.  
  191. /*================================================================================
  192.  [Main Events]
  193. =================================================================================*/
  194.  
  195. public event_CurWeapon(id)
  196. {
  197.     // Not alive...
  198.     if(!g_bIsAlive[id])
  199.         return PLUGIN_CONTINUE
  200.        
  201.     // Updating weapon array
  202.     g_iCurrentWeapon[id] = read_data(2)
  203.    
  204.     // Zombie or Survivor
  205.     if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
  206.         return PLUGIN_CONTINUE
  207.        
  208.     // Doesn't has an Antidote Gun and weapon isn't Galil
  209.     if(!g_bHasAntidoteGun[id] || g_iCurrentWeapon[id] != CSW_GALIL)
  210.         return PLUGIN_CONTINUE
  211.        
  212.     // Change his models
  213.     entity_set_string(id, EV_SZ_viewmodel, "models/v_gauss.mdl")
  214.     entity_set_string(id, EV_SZ_weaponmodel, "models/p_gauss.mdl")
  215.        
  216.     return PLUGIN_CONTINUE
  217. }
  218.  
  219. public event_RoundStart()
  220. {
  221.     // Some cvars cache on round start
  222.     cache_cvars()
  223. }
  224.  
  225. /*================================================================================
  226.  [Zombie Plague Forwards]
  227. =================================================================================*/
  228.  
  229. public zp_user_humanized_pre(id)
  230. {
  231.     // Update bool when was buyed an antidote
  232.     g_bHasAntidoteGun[id] = false
  233. }
  234.  
  235. public zp_user_infected_post(id)
  236. {
  237.     // Update bool when was infected
  238.     g_bHasAntidoteGun[id] = false
  239. }
  240.  
  241. public zv_extra_item_selected(id, itemid)
  242. {
  243.     // It's an antidote gun itemid
  244.     if(itemid == g_iItemID)
  245.     {
  246.         // Should be enabled
  247.         if(g_bCvar_Enabled)
  248.         {
  249.             // Buy until round starts?
  250.             if (!zp_has_round_started() && !g_bCvar_BuyUntilMode)
  251.             {
  252.                 client_printcolor(id, "/g[ZP]/y You must wait until the round starts")
  253.                
  254.                 #if defined OLD_VERSION_SUPPORT
  255.                 zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
  256.                 return PLUGIN_CONTINUE
  257.                 #else
  258.                 return ZV_PLUGIN_HANDLED
  259.                 #endif
  260.             }
  261.            
  262.             #if defined OLD_VERSION_SUPPORT
  263.             // Check actual mode id
  264.             if(zp_is_plague_round() || zp_is_swarm_round() || zp_is_nemesis_round() || zp_is_survivor_round())
  265.             {
  266.                 client_printcolor(id, "/g[ZP]/y You can't buy this gun in this round")
  267.                 zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
  268.                 return PLUGIN_CONTINUE
  269.             }
  270.             #endif
  271.            
  272.             // Some vars with info
  273.             new iWpnID, iAmmo, iBPAmmo, bool:bAlreadyHasGalil = bool:user_has_weapon(id, CSW_GALIL)
  274.            
  275.             // Already has this gun
  276.             if(g_bHasAntidoteGun[id] && bAlreadyHasGalil)
  277.             {
  278.                 // Update the current backpack ammo
  279.                 iBPAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  280.                
  281.                 // We can't give more ammo
  282.                 if(iBPAmmo >= g_iCvar_MaxBPAmmo)
  283.                 {
  284.                     client_printcolor(id, "/g[ZP]/y Your Antidote Gun backpack ammo it's full")
  285.                    
  286.                     #if defined OLD_VERSION_SUPPORT
  287.                     zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
  288.                     return PLUGIN_CONTINUE
  289.                     #else
  290.                     return ZV_PLUGIN_HANDLED
  291.                     #endif
  292.                 }
  293.  
  294.                 // Get the new ammo it are going to be used by the player
  295.                 static iNewAmmo
  296.                 iNewAmmo = g_iCvar_MaxBPAmmo - iBPAmmo
  297.                
  298.                 // Give the new amount of ammo
  299.                 cs_set_user_bpammo(id, CSW_GALIL, iBPAmmo + iNewAmmo)
  300.                
  301.                 // Flash ammo in hud
  302.                 message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
  303.                 write_byte(AMMOID_GALIL) // ammo id
  304.                 write_byte(iNewAmmo) // ammo amount
  305.                 message_end()
  306.                
  307.                 // Play clip purchase sound
  308.                 emit_sound(id, CHAN_ITEM, antidotegun_ammopickupsound[random_num(0, sizeof antidotegun_ammopickupsound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  309.             }
  310.             else
  311.             {  
  312.                 // We need to get if has an ordinary galil
  313.                 if(bAlreadyHasGalil)
  314.                     ham_strip_weapon(id, "weapon_galil")
  315.                    
  316.                 // Update player bool
  317.                 g_bHasAntidoteGun[id] = true
  318.                
  319.                 // Give and store the weapon id
  320.                 iWpnID = give_item(id, "weapon_galil")
  321.                
  322.                 // Set the normal weapon ammo
  323.                 if(g_iCvar_MaxClip && g_iCvar_MaxClip != GALIL_DFT_MAXCLIP)
  324.                     cs_set_weapon_ammo(iWpnID, g_iCvar_MaxClip)
  325.                    
  326.                 // Set the max bpammo
  327.                 cs_set_user_bpammo(id, CSW_GALIL, g_iCvar_MaxBPAmmo)
  328.             }
  329.            
  330.             // We should update this var if isn't info into.
  331.             if(!iWpnID) iWpnID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", id)
  332.                
  333.             // Yes or yes we need to update this vars with the current ammo amount
  334.             iAmmo = cs_get_weapon_ammo(iWpnID)
  335.             iBPAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  336.                
  337.             // Force to change his gun
  338.             engclient_cmd(id, "weapon_galil")
  339.            
  340.             // Update the player ammo
  341.             update_ammo_hud(id, iAmmo, iBPAmmo)
  342.         }
  343.         else
  344.         {
  345.             // A message
  346.             client_printcolor(id, "/g[ZP]/y Antidote Gun item has been disabled. /gContact Admin")
  347.            
  348.             #if defined OLD_VERSION_SUPPORT
  349.             zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
  350.             return PLUGIN_CONTINUE
  351.             #else
  352.             return ZV_PLUGIN_HANDLED
  353.             #endif
  354.         }
  355.     }
  356.    
  357.     return PLUGIN_CONTINUE
  358. }
  359.  
  360. /*================================================================================
  361.  [Main Forwards]
  362. =================================================================================*/
  363.  
  364. public client_putinserver(id)
  365. {
  366.     // Updating bools
  367.     g_bIsConnected[id] = true
  368.     g_bHasAntidoteGun[id] = false
  369. }
  370.  
  371. public client_disconnect(id)
  372. {
  373.     // Updating bools
  374.     g_bIsAlive[id] = false
  375.     g_bIsConnected[id] = false
  376.     g_bHasAntidoteGun[id] = false
  377. }
  378.  
  379. public fw_PlayerSpawn_Post(id)
  380. {
  381.     // Not alive...
  382.     if(!is_user_alive(id))
  383.         return HAM_IGNORED
  384.        
  385.     // Player is alive
  386.     g_bIsAlive[id] = true
  387.    
  388.     // Remove Weapon
  389.     if(get_pcvar_num(cvar_oneround) || !g_bCvar_Enabled)
  390.     {
  391.         if(g_bHasAntidoteGun[id])
  392.         {
  393.             // Reset player vars
  394.             g_bHasAntidoteGun[id] = false
  395.            
  396.             // Strip his galil
  397.             ham_strip_weapon(id, "weapon_galil")
  398.         }
  399.     }
  400.    
  401.     return HAM_IGNORED
  402. }
  403.  
  404. public fw_PlayerKilled(victim, attacker, shouldgib)
  405. {
  406.     // Player victim
  407.     if(is_user_valid_connected(victim))
  408.     {
  409.         // Victim is not alive
  410.         g_bIsAlive[victim] = false
  411.        
  412.         // Reset player vars
  413.         g_bHasAntidoteGun[victim] = false
  414.        
  415.         return HAM_HANDLED
  416.     }
  417.    
  418.     return HAM_IGNORED
  419. }
  420.  
  421. public fw_CmdStart(id, handle, seed)
  422. {
  423.     // Skip not alive users
  424.     if(!is_user_valid_alive(id))
  425.         return FMRES_IGNORED
  426.        
  427.     // Without an antidote gun
  428.     if(!g_bHasAntidoteGun[id])
  429.         return FMRES_IGNORED
  430.        
  431.     // Not human
  432.     if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
  433.         return FMRES_IGNORED
  434.    
  435.     // Isn't holding a Galil
  436.     if(g_iCurrentWeapon[id] != CSW_GALIL)
  437.         return FMRES_IGNORED
  438.        
  439.     // Get Buttons
  440.     static iButton
  441.     iButton = get_uc(handle, UC_Buttons)
  442.    
  443.     // User pressing +attack Button
  444.     if(iButton & IN_ATTACK)
  445.     {
  446.         // Buttons
  447.         set_uc(handle, UC_Buttons, iButton & ~IN_ATTACK)
  448.        
  449.         // Some vars
  450.         static Float:flCurrentTime
  451.         flCurrentTime = halflife_time()
  452.        
  453.         // Fire rate not over yet
  454.         if (flCurrentTime - g_flLastFireTime[id] < g_flCvar_FireRate)
  455.             return FMRES_IGNORED
  456.            
  457.         // Another vars with info
  458.         static iWpnID, iClip
  459.         iWpnID = get_pdata_cbase(id, m_pActiveItem, 5)
  460.         iClip = cs_get_weapon_ammo(iWpnID)
  461.        
  462.         // Skip if is in reload
  463.         if(get_pdata_int(iWpnID, m_fInReload, 4))
  464.             return FMRES_IGNORED
  465.        
  466.         // To don't reload instantly (bugfix)
  467.         set_pdata_float(iWpnID, m_flNextPrimaryAttack, g_flCvar_FireRate, 4)
  468.         set_pdata_float(iWpnID, m_flNextSecondaryAttack, g_flCvar_FireRate, 4)
  469.         set_pdata_float(iWpnID, m_flTimeWeaponIdle, g_flCvar_FireRate, 4)
  470.        
  471.         // Update last fire time array
  472.         g_flLastFireTime[id] = flCurrentTime
  473.        
  474.         // 0 bullets
  475.         if(iClip <= 0)
  476.         {
  477.             // Play empty clip sound
  478.             ExecuteHamB(Ham_Weapon_PlayEmptySound, iWpnID)
  479.  
  480.             return FMRES_IGNORED
  481.         }
  482.            
  483.         // Process fire
  484.         primary_attack(id)
  485.        
  486.         // Real fire push knockback
  487.         launch_push(id, 40)
  488.        
  489.         // Update Ammo
  490.         cs_set_weapon_ammo(iWpnID, --iClip)
  491.         update_ammo_hud(id, iClip, cs_get_user_bpammo(id, CSW_GALIL))
  492.        
  493.         return FMRES_IGNORED
  494.     }
  495.    
  496.     return FMRES_IGNORED
  497. }
  498.  
  499. public fw_SetModel(entity, model[])
  500. {
  501.     // Entity is not valid
  502.     if(!is_valid_ent(entity))
  503.         return FMRES_IGNORED;
  504.        
  505.     // Entity model is not w_galil
  506.     if(!equal(model, "models/w_galil.mdl"))
  507.         return FMRES_IGNORED;
  508.        
  509.     // Get classname
  510.     static szClassName[33]
  511.     entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  512.        
  513.     // Not a Weapon box
  514.     if(!equal(szClassName, "weaponbox"))
  515.         return FMRES_IGNORED
  516.    
  517.     // Some vars
  518.     static iOwner, iStoredGalilID
  519.    
  520.     // Get owner
  521.     iOwner = entity_get_edict(entity, EV_ENT_owner)
  522.    
  523.     // Get drop weapon index (galil) to use in fw_Galil_AddToPlayer forward
  524.     iStoredGalilID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", entity)
  525.    
  526.     // Entity classname is weaponbox, and galil has founded
  527.     if(g_bHasAntidoteGun[iOwner] && is_valid_ent(iStoredGalilID))
  528.     {
  529.         // Setting weapon options
  530.         entity_set_int(iStoredGalilID, EV_INT_WEAPONKEY, ANTIDOTEGUN_WPNKEY)
  531.        
  532.         // Reset user vars
  533.         g_bHasAntidoteGun[iOwner] = false
  534.        
  535.         // Set weaponbox new model
  536.         entity_set_model(entity, "models/w_gauss.mdl")
  537.        
  538.         // Glow
  539.         if(get_pcvar_num(cvar_wboxglow))
  540.             set_rendering(entity, kRenderFxGlowShell, antidotegun_wb_color[0], antidotegun_wb_color[1], antidotegun_wb_color[2], kRenderNormal, 25)
  541.        
  542.         return FMRES_SUPERCEDE
  543.     }
  544.    
  545.     return FMRES_IGNORED
  546. }
  547.  
  548. public fw_UpdateClientData_Post(id, sendweapons, handle)
  549. {
  550.     // Skip not alive users
  551.     if(!is_user_valid_alive(id))
  552.         return FMRES_IGNORED
  553.        
  554.     // Without an antidote gun
  555.     if(!g_bHasAntidoteGun[id])
  556.         return FMRES_IGNORED
  557.        
  558.     // Not human
  559.     if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
  560.         return FMRES_IGNORED
  561.    
  562.     // Isn't holding a Galil
  563.     if(g_iCurrentWeapon[id] != CSW_GALIL)
  564.         return FMRES_IGNORED
  565.        
  566.     // Player can't attack with the AG
  567.     set_cd(handle, CD_flNextAttack, halflife_time() + 0.001)
  568.  
  569.     return FMRES_HANDLED
  570. }
  571.  
  572. public fw_Galil_Deploy_Post(galil)
  573. {
  574.     // Get galil owner
  575.     static id
  576.     id = get_pdata_cbase(galil, m_pPlayer, 4)
  577.    
  578.     // The current galil owner has an antidote gun?
  579.     if(is_user_valid_connected(id) && g_bHasAntidoteGun[id])
  580.     {
  581.         // Update the current ammo
  582.         update_ammo_hud(id, cs_get_weapon_ammo(galil), cs_get_user_bpammo(id, CSW_GALIL))
  583.        
  584.         // Send the draw animation
  585.         set_user_weaponanim(id, V_GAUSS_ANIM_DRAW)
  586.     }
  587.    
  588.     return HAM_IGNORED
  589. }
  590.  
  591. public fw_Galil_AddToPlayer(galil, player)
  592. {
  593.     // Is an antidote gun?
  594.     if(is_valid_ent(galil) && is_user_valid_connected(player) && entity_get_int(galil, EV_INT_WEAPONKEY) == ANTIDOTEGUN_WPNKEY)
  595.     {
  596.         // Set vars
  597.         g_bHasAntidoteGun[player] = true
  598.        
  599.         // Reset weapon options
  600.         entity_set_int(galil, EV_INT_WEAPONKEY, 0)
  601.        
  602.         return HAM_HANDLED
  603.     }
  604.    
  605.     return HAM_IGNORED
  606. }
  607.  
  608. public fw_Galil_PostFrame(galil)
  609. {
  610.     // Get galil owner
  611.     static id
  612.     id = get_pdata_cbase(galil, m_pPlayer, 4)
  613.    
  614.     // His owner has an antidote gun?
  615.     if(is_user_valid_alive(id) && g_bHasAntidoteGun[id])
  616.     {
  617.         // Some vars
  618.         static Float:flNextAttack, iBpAmmo, iClip, iInReload
  619.        
  620.         // Weapon is on middle reload
  621.         iInReload = get_pdata_int(galil, m_fInReload, 4)
  622.        
  623.         // Next player attack
  624.         flNextAttack = get_pdata_float(id, m_flNextAttack, 5)
  625.        
  626.         // Player back pack ammo
  627.         iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  628.        
  629.         // Current weapon clip
  630.         iClip = cs_get_weapon_ammo(galil)
  631.        
  632.         // End of reload
  633.         if(iInReload && flNextAttack <= 0.0)
  634.         {
  635.             // Get the minimun amount between maxclip sub. current clip
  636.             // and the player backpack ammo
  637.             new j = min(g_iCvar_MaxClip - iClip, iBpAmmo)
  638.            
  639.             // Set the new weapon clip
  640.             cs_set_weapon_ammo(galil, iClip + j)
  641.    
  642.             // Set the new player backpack ammo
  643.             cs_set_user_bpammo(id, CSW_GALIL, iBpAmmo-j)
  644.            
  645.             // Update the weapon offset "inreload" to 0 ("false")
  646.             iInReload = 0
  647.             set_pdata_int(galil, m_fInReload, 0, 4)
  648.         }
  649.    
  650.         // Get the current player buttons
  651.         static iButton
  652.         iButton = get_user_button(id)
  653.        
  654.         // The player stills pressing the fire button
  655.         if((iButton & IN_ATTACK2 && get_pdata_float(galil, m_flNextSecondaryAttack, 4) <= 0.0) || (iButton & IN_ATTACK && get_pdata_float(galil, m_flNextPrimaryAttack, 4) <= 0.0))
  656.             return
  657.    
  658.         // Trying to reload pressing the reload button when isn't it
  659.         if(iButton & IN_RELOAD && !iInReload)
  660.         {
  661.             // The current weapon clip exceed the new max clip
  662.             if(iClip >= g_iCvar_MaxClip)
  663.             {
  664.                 // Retrieve player reload button
  665.                 entity_set_int(id, EV_INT_button, iButton & ~IN_RELOAD)
  666.                
  667.                 // Send idle animation
  668.                 set_user_weaponanim(id, 0)
  669.             }
  670.             // The current weapon clip it's the same like the old max weapon clip
  671.             else if(iClip == GALIL_DFT_MAXCLIP)
  672.             {
  673.                 // Has an amount of bpammo?
  674.                 if(iBpAmmo)
  675.                 {
  676.                     // Should make a reload
  677.                     antidotegun_reload(id, galil, 1)
  678.                 }
  679.             }
  680.         }
  681.     }
  682.    
  683.     // Credits and thanks to ConnorMcLeod for his Weapon MaxClip plugin!
  684. }
  685.  
  686. public fw_Galil_Reload_Post(galil)
  687. {
  688.     // Get galil owner
  689.     static id
  690.     id = get_pdata_cbase(galil, m_pPlayer, 4)
  691.    
  692.     // It's in reload and his owner has an antidote gun?
  693.     if(is_user_valid_alive(id) && g_bHasAntidoteGun[id] && get_pdata_int(galil, m_fInReload, 4))
  694.     {  
  695.         // Change normal reload options
  696.         antidotegun_reload(id, galil)
  697.     }
  698. }
  699.  
  700. /*================================================================================
  701.  [Internal Functions]
  702. =================================================================================*/
  703.  
  704. cache_cvars()
  705. {
  706.     // Some cvars
  707.     g_bCvar_Enabled = bool:get_pcvar_num(cvar_enable)
  708.     g_flCvar_FireRate = get_pcvar_float(cvar_firerate)
  709.     g_flCvar_ReloadSpeed = get_pcvar_float(cvar_reloadspeed)
  710.     g_flCvar_HitSlowdown = get_pcvar_float(cvar_hitslowdown)
  711.     g_iCvar_MaxClip = clamp(get_pcvar_num(cvar_maxclip), 0, 120)
  712.     g_iCvar_MaxBPAmmo = clamp(get_pcvar_num(cvar_maxbpammo), 1, 90)
  713.    
  714.     #if defined OLD_VERSION_SUPPORT
  715.     g_bCvar_BuyUntilMode = false
  716.     #else
  717.     g_bCvar_BuyUntilMode = bool:get_pcvar_num(cvar_buyindelay)
  718.     #endif
  719. }
  720.  
  721. primary_attack(id)
  722. {
  723.     // Fire Effect
  724.     set_user_weaponanim(id, V_GAUSS_ANIM_FIRE)
  725.     entity_set_vector(id, EV_VEC_punchangle, Float:{ -1.5, 0.0, 0.0 })
  726.     emit_sound(id, CHAN_WEAPON, antidotegun_firesound[random_num(0, sizeof antidotegun_firesound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  727.    
  728.     // Some vars
  729.     static iTarget, iBody, iEndOrigin[3]
  730.    
  731.     // Get end origin from eyes
  732.     get_user_origin(id, iEndOrigin, 3)
  733.    
  734.     // Make gun beam
  735.     beam_from_gun(id, iEndOrigin)
  736.    
  737.     // Get user aiming
  738.     get_user_aiming(id, iTarget, iBody)
  739.    
  740.     // Do sound by a new entity
  741.     new iEnt = create_entity("info_target")
  742.    
  743.     // Integer vector into a Float vector
  744.     static Float:flOrigin[3]
  745.     IVecFVec(iEndOrigin, flOrigin)
  746.    
  747.     // Set entity origin
  748.     entity_set_origin(iEnt, flOrigin)
  749.    
  750.     // Sound
  751.     emit_sound(iEnt, CHAN_WEAPON, antidotegun_hitsound[random_num(0, sizeof antidotegun_firesound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  752.    
  753.     // Remove entity
  754.     remove_entity(iEnt)
  755.    
  756.     // Aim target it's a player
  757.     if(is_user_valid_alive(iTarget))
  758.     {  
  759.         // Hit slowdown, first should be enabled
  760.         if(g_flCvar_HitSlowdown > 0.0)
  761.         {
  762.             // Get his current velocity vector
  763.             static Float:flVelocity[3]
  764.             get_user_velocity(iTarget, flVelocity)
  765.            
  766.             // Multiply his velocity by a number
  767.             xs_vec_mul_scalar(flVelocity, g_flCvar_HitSlowdown, flVelocity)
  768.            
  769.             // Set his new velocity vector
  770.             set_user_velocity(iTarget, flVelocity) 
  771.         }
  772.        
  773.         // It's allowed to be disinfected
  774.         if(zp_get_user_zombie(iTarget) && !zp_get_user_nemesis(iTarget) && !zp_get_user_last_zombie(iTarget))
  775.         {
  776.             // Disinfect user
  777.             #if defined OLD_VERSION_SUPPORT
  778.             zp_disinfect_user(iTarget)
  779.             #else
  780.             zp_disinfect_user(iTarget, 1)
  781.             #endif
  782.            
  783.             // Death message
  784.             message_begin(MSG_BROADCAST, g_msgDeathMsg)
  785.             write_byte(id) // killer
  786.             write_byte(iTarget) // victim
  787.             write_byte(iBody == HIT_HEAD ? 1 : 0) // headshot flag
  788.             write_string("antidote gun") // killer's weapon
  789.             message_end()
  790.            
  791.             // Screen fade fx
  792.             message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, iTarget)
  793.             write_short(UNIT_SECOND*1) // duration
  794.             write_short(UNIT_SECOND/2) // hold time
  795.             write_short(FFADE_IN) // fade type
  796.             write_byte(0) // r
  797.             write_byte(255) // g
  798.             write_byte(255) // b
  799.             write_byte(227) // alpha
  800.             message_end()
  801.            
  802.             // Beam Cylinder fx
  803.             message_begin(MSG_PVS, SVC_TEMPENTITY, iEndOrigin)
  804.             write_byte(TE_BEAMCYLINDER) // TE id
  805.             write_coord(iEndOrigin[0]) // position.x
  806.             write_coord(iEndOrigin[1]) // position.y
  807.             write_coord(iEndOrigin[2]) // position.z
  808.             write_coord(iEndOrigin[0]) // x axis
  809.             write_coord(iEndOrigin[1]) // y axis
  810.             write_coord(iEndOrigin[2] + 385) // z axis
  811.             write_short(g_sprRing) // sprite
  812.             write_byte(0) // startframe
  813.             write_byte(0) // framerate
  814.             write_byte(4) // life
  815.             write_byte(30) // width
  816.             write_byte(0) // noise
  817.             write_byte(0) // red
  818.             write_byte(255) // green
  819.             write_byte(255) // blue
  820.             write_byte(200) // brightness
  821.             write_byte(0) // speed
  822.             message_end()
  823.         }
  824.         // Can't be disinfected
  825.         else
  826.         {
  827.             // Faster particles
  828.             message_begin(MSG_PVS, SVC_TEMPENTITY, iEndOrigin)
  829.             write_byte(TE_PARTICLEBURST) // TE id
  830.             write_coord(iEndOrigin[0]) // position.x
  831.             write_coord(iEndOrigin[1]) // position.y
  832.             write_coord(iEndOrigin[2]) // position.z
  833.             write_short(45) // radius
  834.             write_byte(208) // particle color
  835.             write_byte(10) // duration * 10 will be randomized a bit
  836.             message_end()
  837.         }
  838.     }
  839.     else
  840.     {
  841.         // Aim target entity it's valid and isn't worldspawn?
  842.         if((iTarget > 0) && is_valid_ent(iTarget))
  843.         {
  844.             // Get aim target classname
  845.             static szClassname[32]
  846.             entity_get_string(iTarget, EV_SZ_classname, szClassname, charsmax(szClassname))
  847.            
  848.             // It's a breakable entity
  849.             if(equal(szClassname, "func_breakable"))
  850.             {
  851.                 // Get destroy this ent
  852.                 force_use(id, iTarget)
  853.             }
  854.         }
  855.     }
  856. }
  857.  
  858. antidotegun_reload(id, galil, force_reload = 0)
  859. {
  860.     // Next player attack time
  861.     set_pdata_float(id, m_flNextAttack, g_flCvar_ReloadSpeed, 5)
  862.  
  863.     // Send to the player the reload animation
  864.     set_user_weaponanim(id, V_GAUSS_ANIM_RELOAD)
  865.    
  866.     // Update the weapon offset "inreload" to 1 ("true")
  867.     if(force_reload)
  868.         set_pdata_int(galil, m_fInReload, 1, 4)
  869.  
  870.     // Next idle weapon time, soonest time ItemPostFrame will call WeaponIdle.
  871.     set_pdata_float(galil, m_flTimeWeaponIdle, g_flCvar_ReloadSpeed + 0.5, 4)
  872.    
  873.     // I'll be honest, i don't know what do this.
  874.     entity_set_float(id, EV_FL_frame, 200.0)
  875. }
  876.  
  877. update_ammo_hud(id, iAmmoAmount, iBPAmmoAmount)
  878. {
  879.     // Display the new antidotegun bullets
  880.     if(iAmmoAmount != -1)
  881.     {
  882.         message_begin(MSG_ONE_UNRELIABLE, g_msgCurWeapon, _, id)
  883.         write_byte(1) // active
  884.         write_byte(CSW_GALIL) // weapon
  885.         write_byte(iAmmoAmount) // clip
  886.         message_end()
  887.     }
  888.    
  889.     // Display the new amount of BPAmmo
  890.     if(iBPAmmoAmount != -1)
  891.     {
  892.         message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoX, _, id)
  893.         write_byte(AMMOID_GALIL) // ammoid
  894.         write_byte(iBPAmmoAmount) // ammo amount
  895.         message_end()
  896.     }
  897. }
  898.  
  899. beam_from_gun(id, iEndOrigin[3])
  900. {
  901.     // Make a cool beam
  902.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  903.     write_byte(TE_BEAMENTPOINT) // TE id
  904.     write_short(id | 0x1000) // start entity
  905.     write_coord(iEndOrigin[0]) // endposition.x
  906.     write_coord(iEndOrigin[1]) // endposition.y
  907.     write_coord(iEndOrigin[2]) // endposition.z
  908.     write_short(g_sprBeam)    // sprite index
  909.     write_byte(1)   // framestart
  910.     write_byte(1)   // framerate
  911.     write_byte(1)   // life in 0.1's
  912.     write_byte(10)  // width
  913.     write_byte(0)   // noise
  914.     write_byte(0)   // r
  915.     write_byte(255) // g
  916.     write_byte(255) // b
  917.     write_byte(200) // brightness
  918.     write_byte(0)   // speed
  919.     message_end()
  920.    
  921.     // Dynamic Light
  922.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iEndOrigin)
  923.     write_byte(TE_DLIGHT) // TE id
  924.     write_coord(iEndOrigin[0]) // position.x
  925.     write_coord(iEndOrigin[1]) // position.y
  926.     write_coord(iEndOrigin[2]) // position.z
  927.     write_byte(30) // radius
  928.     write_byte(0) // red
  929.     write_byte(255) // green
  930.     write_byte(255) // blue
  931.     write_byte(10) // life
  932.     write_byte(45) // decay rate
  933.     message_end()
  934.    
  935.     // Sparks
  936.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iEndOrigin)
  937.     write_byte(TE_SPARKS) // TE id
  938.     write_coord(iEndOrigin[0]) // position.x
  939.     write_coord(iEndOrigin[1]) // position.y
  940.     write_coord(iEndOrigin[2]) // position.z
  941.     message_end()
  942. }
  943.  
  944. /*================================================================================
  945.  [Stocks]
  946. =================================================================================*/
  947.  
  948. stock set_user_weaponanim(id, anim)
  949. {
  950.     entity_set_int(id, EV_INT_weaponanim, anim)
  951.     message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
  952.     write_byte(anim)
  953.     write_byte(entity_get_int(id, EV_INT_body))
  954.     message_end()
  955. }
  956.  
  957. stock launch_push(id, velamount) // from my Nemesis Rocket Launcher plugin.
  958. {
  959.     static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
  960.    
  961.     velocity_by_aim(id, -velamount, flNewVelocity)
  962.    
  963.     get_user_velocity(id, flCurrentVelocity)
  964.     xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
  965.    
  966.     set_user_velocity(id, flNewVelocity)   
  967. }
  968.  
  969. stock ham_strip_weapon(id, weapon[])
  970. {
  971.     if(!equal(weapon,"weapon_",7))
  972.         return 0
  973.    
  974.     new wId = get_weaponid(weapon)
  975.    
  976.     if(!wId) return 0
  977.    
  978.     new wEnt
  979.    
  980.     while((wEnt = find_ent_by_class(wEnt, weapon)) && entity_get_edict(wEnt, EV_ENT_owner) != id) {}
  981.    
  982.     if(!wEnt) return 0
  983.    
  984.     if(get_user_weapon(id) == wId)
  985.         ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt);
  986.    
  987.     if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt))
  988.         return 0
  989.        
  990.     ExecuteHamB(Ham_Item_Kill, wEnt)
  991.    
  992.     entity_set_int(id, EV_INT_weapons, entity_get_int(id, EV_INT_weapons) & ~(1<<wId))
  993.  
  994.     return 1
  995. }
  996.  
  997. stock client_printcolor(id, const input[], any:...)
  998. {
  999.     static iPlayersNum[32], iCount; iCount = 1
  1000.     static szMsg[191]
  1001.    
  1002.     vformat(szMsg, charsmax(szMsg), input, 3)
  1003.    
  1004.     replace_all(szMsg, 190, "/g", "^4") // green txt
  1005.     replace_all(szMsg, 190, "/y", "^1") // orange txt
  1006.     replace_all(szMsg, 190, "/ctr", "^3") // team txt
  1007.     replace_all(szMsg, 190, "/w", "^0") // team txt
  1008.    
  1009.     if(id) iPlayersNum[0] = id
  1010.     else get_players(iPlayersNum, iCount, "ch")
  1011.        
  1012.     for (new i = 0; i < iCount; i++)
  1013.     {
  1014.         if (g_bIsConnected[iPlayersNum[i]])
  1015.         {
  1016.             message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayersNum[i])
  1017.             write_byte(iPlayersNum[i])
  1018.             write_string(szMsg)
  1019.             message_end()
  1020.         }
  1021.     }
  1022. }

_________________
BfS* #Team ~Global Offensive IP: 217.144.54.193:27148

Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Jetpack VIPEKNEK [ZM]
HozzászólásElküldve: 2016.08.24. 15:21 
Offline
Nagyúr
Avatar

Csatlakozott: 2016.03.05. 20:56
Hozzászólások: 663
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 124 alkalommal
Szerintem használd inkább ezt, maga a plugin is jobb.

Mert ez elég bugos (Csak akkor sebez ha telibe találod a zombit)

Valamint beírtam neked:

  1. #define JOG ADMIN_LEVEL_H //Itt változtathatod milyen jog kelljen a használatához


GOMBOT ALKALMAZD HA SEGÍTETTEM!


Csatolmányok:
new_resource.zip [222.74 KiB]
Letöltve 58 alkalommal.

_________________
Global Offensive modok:

Global Offensive Mode 1.0
Global Offensive Mode 3.0
exodus Global Offensive 4.0


A hozzászólást 1 alkalommal szerkesztették, utoljára theglorious 2016.08.26. 16:15-kor.
Nem kötelező megköszönni, viszont úgy illene.

Ők köszönték meg exodus nek ezt a hozzászólást: adriansr14 (2016.08.24. 15:56)
  Népszerűség: 2.27%
Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Jetpack VIPEKNEK [ZM]
HozzászólásElküldve: 2016.08.24. 17:34 
Offline
Jómunkásember

Csatlakozott: 2016.06.20. 10:23
Hozzászólások: 489
Megköszönt másnak: 47 alkalommal
Megköszönték neki: 15 alkalommal
köszi

Edit:
de nem fut le

_________________
BfS* #Team ~Global Offensive IP: 217.144.54.193:27148

Kép


A hozzászólást 1 alkalommal szerkesztették, utoljára theglorious 2016.08.24. 18:01-kor.
Dupla


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Jetpack VIPEKNEK [ZM]
HozzászólásElküldve: 2016.08.24. 19:44 
Offline
Őstag
Avatar

Csatlakozott: 2015.07.27. 22:56
Hozzászólások: 1367
Megköszönt másnak: 28 alkalommal
Megköszönték neki: 351 alkalommal
Az azért nem fut le neked mert 5.0 ZP-hez van beálíltva, neked meg 4.0.2-es van fent a szerveren:
Idézet:
game_description Zombie Plague 4.0.2


A 7. sorban kommenteld ki a define-t:
  1. //#define USE_ZP50


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Jetpack VIPEKNEK [ZM]
HozzászólásElküldve: 2016.08.26. 09:31 
Offline
Jómunkásember

Csatlakozott: 2016.06.20. 10:23
Hozzászólások: 489
Megköszönt másnak: 47 alkalommal
Megköszönték neki: 15 alkalommal
regener írta:
Az azért nem fut le neked mert 5.0 ZP-hez van beálíltva, neked meg 4.0.2-es van fent a szerveren:
Idézet:
game_description Zombie Plague 4.0.2


A 7. sorban kommenteld ki a define-t:
  1. //#define USE_ZP50

Okes, meg probalom.

Edit:
Nem müködik... :cry:

_________________
BfS* #Team ~Global Offensive IP: 217.144.54.193:27148

Kép


A hozzászólást 1 alkalommal szerkesztették, utoljára theglorious 2016.08.26. 20:41-kor.
Dupla posztot kerüld!


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 5 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 10 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole