hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.17. 01:41



Jelenlévő felhasználók

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

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: Bing [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  [2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: [ZP]AntiDoteGun
HozzászólásElküldve:2011.08.14. 14:25 
Offline
Senior Tag

Csatlakozott:2011.07.20. 13:38
Hozzászólások:205
Megköszönték neki: 8 alkalommal
Helló :D
letöltöttem az alapoldalon található [ZP]Antidotegun-t de valamiért nem indítja el szerverem.... :/

Kód:
[ 30] [ZP] Default Zombie Cl 4.3 MeRcyLeZZ zp_zclasses40.a running 
[ 31] Laser/Tripmine Entity 2.3 SandStriker lasermine_020.a running
[ 32] [ZP] Sub Plugin: Ultim 1.1 93()|29!/<, Rand zp_sub_bank.amx running
[ 33] unknown unknown unknown zp_extra_antido bad load
[ 34] [ZP] Bazooka + new mod 1.0 Vechta zp_bazooka_new. running
[ 35] [ZP] Extra: Golden Dea 1.1 AlejandroSk zp_extra_golden running
[ 36] [ZP] Extra: Arany M4A1 1.0 Dzsee zp_extra_arany_ running
( 33) Load fails: Invalid Plugin (plugin "zp_extra_antidotegun.amxx")



sma--->

Kód:
/*================================================================================

   [ZP] Extra Item: Advanced Antidote Gun
   Copyright (C) 2010 by meTaLiCroSS, Vińa del Mar, Chile
   
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
   
   In addition, as a special exception, the author gives permission to
   link the code of this program with the Half-Life Game Engine ("HL
   Engine") and Modified Game Libraries ("MODs") developed by Valve,
   L.L.C ("Valve"). You must obey the GNU General Public License in all
   respects for all of the code used other than the HL Engine and MODs
   from Valve. If you modify this file, you may extend this exception
   to your version of the file, but you are not obligated to do so. If
   you do not wish to do so, delete this exception statement from your
   version.
   
   ** Credits:
      
   - ConnorMcLeod: His MaxClip and Reload Speed plugin
   - KCE: His "Blocking weapon fire" tutorial
   - XxAvalanchexX: His "Beampoints from a player's weapon tip" tutorial

=================================================================================*/

#include <amxmodx>
#include <hamsandwich>
#include <fun>
#include <engine>
#include <cstrike>
#include <fakemeta>
#include <xs>
#include <zombieplague>

/*================================================================================
 [Customizations]
=================================================================================*/

// Item Cost
const antidotegun_ap_cost = 30

// Sprites
new const antidotegun_sprite_beam[] = "sprites/zbeam6.spr"
new const antidotegun_sprite_ring[] = "sprites/shockwave.spr"

// Weapon Fire Sound, you can add more than 1
new const antidotegun_firesound[][] = { "weapons/gauss2.wav" }

// Hit Sound, you can add more than 1
new const antidotegun_hitsound[][] = { "warcraft3/frostnova.wav" }

// Ammo bought Sound, you can add more than 1
new const antidotegun_ammopickupsound[][] = { "items/9mmclip1.wav" }

// Weaponbox Glow RGB Colors   R   G   B
new antidotegun_wb_color[] = {   0,    255,    255    }

// Uncomment this line if you want to add support to old ZP versions
// Use if it's necessary, from version 4.2 to below
// If you uncomment this line, this item can be buyed only in infection
// rounds, because the main disinfect native in old versions works
// only on infection rounds.
//#define OLD_VERSION_SUPPORT

/*================================================================================
 Customization ends here! Yes, that's it. Editing anything beyond
 here is not officially supported. Proceed at your own risk...
=================================================================================*/

// Booleans
new bool:g_bHasAntidoteGun[33], bool:g_bIsConnected[33], bool:g_bIsAlive[33]

// Cvar pointers
new cvar_enable, cvar_oneround, cvar_firerate, cvar_maxclip, cvar_maxbpammo, cvar_wboxglow,
cvar_buyindelay, cvar_reloadspeed, cvar_hitslowdown

// Arrays
new g_iCurrentWeapon[33], Float:g_flLastFireTime[33]

// Variables
new g_iItemID, g_iMaxPlayers, g_msgSayText, g_msgDeathMsg, g_msgCurWeapon, g_msgAmmoX,
g_msgAmmoPickup, g_msgScreenFade, g_sprBeam, g_sprRing, HamHook:g_iHhPostFrame_fw

// Offsets
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

// Some constants
const FFADE_IN =       0x0000
const ENG_NULLENT =       -1
const UNIT_SECOND =      (1<<12)
const AMMOID_GALIL =       4
const GALIL_DFT_MAXCLIP =   35
const V_GAUSS_ANIM_FIRE =    6
const V_GAUSS_ANIM_DRAW =    8
const V_GAUSS_ANIM_RELOAD =    2
const EV_INT_WEAPONKEY =    EV_INT_impulse
const ANTIDOTEGUN_WPNKEY =    2816

// Buy in delay cvar it's disabled
// for old versions
#if defined OLD_VERSION_SUPPORT
   #pragma unused cvar_buyindelay
#endif

// Cached cvars
new bool:g_bCvar_Enabled, bool:g_bCvar_BuyUntilMode, Float:g_flCvar_FireRate,
Float:g_flCvar_ReloadSpeed, Float:g_flCvar_HitSlowdown, g_iCvar_MaxClip, g_iCvar_MaxBPAmmo

// Plug info.
#define PLUG_VERSION "0.6"
#define PLUG_AUTH "meTaLiCroSS"

// Macros
#define is_user_valid_alive(%1)    (1 <= %1 <= g_iMaxPlayers && g_bIsAlive[%1])
#define is_user_valid_connected(%1)    (1 <= %1 <= g_iMaxPlayers && g_bIsConnected[%1])

/*================================================================================
 [Init and Precache]
=================================================================================*/

public plugin_init()
{
   // Plugin info
   register_plugin("[ZP] Extra Item: Advanced Antidote Gun", PLUG_VERSION, PLUG_AUTH)
   
   // Events
   register_event("CurWeapon", "event_CurWeapon", "b", "1=1")   
   register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0")
   
   // Fakemeta Forwards
   register_forward(FM_SetModel, "fw_SetModel")
   register_forward(FM_CmdStart, "fw_CmdStart")
   register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
   
   // Hamsandwich Forwards
   RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
   RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
   RegisterHam(Ham_Item_Deploy, "weapon_galil", "fw_Galil_Deploy_Post", 1)
   RegisterHam(Ham_Item_AddToPlayer, "weapon_galil", "fw_Galil_AddToPlayer")
   RegisterHam(Ham_Weapon_Reload, "weapon_galil", "fw_Galil_Reload_Post", 1)
   g_iHhPostFrame_fw = RegisterHam(Ham_Item_PostFrame, "weapon_galil", "fw_Galil_PostFrame")
   
   // Cvars
   cvar_enable = register_cvar("zp_antidotegun_enable", "1")
   cvar_oneround = register_cvar("zp_antidotegun_oneround", "0")
   cvar_firerate = register_cvar("zp_antidotegun_fire_rate", "0.6")
   cvar_maxclip = register_cvar("zp_antidotegun_max_clip", "3")
   cvar_maxbpammo = register_cvar("zp_antidotegun_max_bpammo", "25")
   cvar_reloadspeed = register_cvar("zp_antidotegun_reload_speed", "2.5")
   cvar_wboxglow = register_cvar("zp_antidotegun_wbox_glow", "1")
   cvar_buyindelay = register_cvar("zp_antidotegun_buy_before_modestart", "0")
   cvar_hitslowdown = register_cvar("zp_antidotegun_hit_slowdown", "0.4")
   
   static szCvar[30]
   formatex(szCvar, charsmax(szCvar), "v%s by %s", PLUG_VERSION, PLUG_AUTH)
   register_cvar("zp_extra_adv_antidotegun", szCvar, FCVAR_SERVER|FCVAR_SPONLY)
   
   // Variables
   g_iMaxPlayers = get_maxplayers()
   g_msgAmmoX = get_user_msgid("AmmoX")
   g_msgSayText = get_user_msgid("SayText")
   g_msgDeathMsg = get_user_msgid("DeathMsg")
   g_msgCurWeapon = get_user_msgid("CurWeapon")
   g_msgAmmoPickup = get_user_msgid("AmmoPickup")
   g_msgScreenFade = get_user_msgid("ScreenFade")
   g_iItemID = zp_register_extra_item("Antidote Gun", antidotegun_ap_cost, ZP_TEAM_HUMAN)
}

public plugin_precache()
{
   // Models
   precache_model("models/v_gauss.mdl")
   precache_model("models/p_gauss.mdl")
   precache_model("models/w_gauss.mdl")
   
   // Sprites
   g_sprBeam = precache_model(antidotegun_sprite_beam)
   g_sprRing = precache_model(antidotegun_sprite_ring)
   
   // Sounds
   static i
   for(i = 0; i < sizeof antidotegun_firesound; i++)
      precache_sound(antidotegun_firesound[i])
   for(i = 0; i < sizeof antidotegun_ammopickupsound; i++)
      precache_sound(antidotegun_ammopickupsound[i])
   for(i = 0; i < sizeof antidotegun_hitsound; i++)
      precache_sound(antidotegun_hitsound[i])
      
      
}

public plugin_cfg()
{
   // Cache some cvars after init is called
   cache_cvars()
   
   // Check the max clip cvar
   if(g_iCvar_MaxClip && g_iCvar_MaxClip != GALIL_DFT_MAXCLIP)
   {
      EnableHamForward(g_iHhPostFrame_fw)
   }
   else
   {
      // Should disable it if isn't necesary to check
      DisableHamForward(g_iHhPostFrame_fw)
   }
}

/*================================================================================
 [Main Events]
=================================================================================*/

public event_CurWeapon(id)
{
   // Not alive...
   if(!g_bIsAlive[id])
      return PLUGIN_CONTINUE
      
   // Updating weapon array
   g_iCurrentWeapon[id] = read_data(2)
   
   // Zombie or Survivor
   if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
      return PLUGIN_CONTINUE
      
   // Doesn't has an Antidote Gun and weapon isn't Galil
   if(!g_bHasAntidoteGun[id] || g_iCurrentWeapon[id] != CSW_GALIL)
      return PLUGIN_CONTINUE
      
   // Change his models
   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 event_RoundStart()
{
   // Some cvars cache on round start
   cache_cvars()
}

/*================================================================================
 [Zombie Plague Forwards]
=================================================================================*/

public zp_user_humanized_pre(id)
{
   // Update bool when was buyed an antidote
   g_bHasAntidoteGun[id] = false
}

public zp_user_infected_post(id)
{
   // Update bool when was infected
   g_bHasAntidoteGun[id] = false
}

public zp_extra_item_selected(id, itemid)
{
   // It's an antidote gun itemid
   if(itemid == g_iItemID)
   {
      // Should be enabled
      if(g_bCvar_Enabled)
      {
         // Buy until round starts?
         if (!zp_has_round_started() && !g_bCvar_BuyUntilMode)
         {
            client_printcolor(id, "/g[ZP]/y You must wait until the round starts")
            
            #if defined OLD_VERSION_SUPPORT
            zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
            return PLUGIN_CONTINUE
            #else
            return ZP_PLUGIN_HANDLED
            #endif
         }
         
         #if defined OLD_VERSION_SUPPORT
         // Check actual mode id
         if(zp_is_plague_round() || zp_is_swarm_round() || zp_is_nemesis_round() || zp_is_survivor_round())
         {
            client_printcolor(id, "/g[ZP]/y You can't buy this gun in this round")
            zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
            return PLUGIN_CONTINUE
         }
         #endif
         
         // Some vars with info
         new iWpnID, iAmmo, iBPAmmo, bool:bAlreadyHasGalil = bool:user_has_weapon(id, CSW_GALIL)
         
         // Already has this gun
         if(g_bHasAntidoteGun[id] && bAlreadyHasGalil)
         {
            // Update the current backpack ammo
            iBPAmmo = cs_get_user_bpammo(id, CSW_GALIL)
            
            // We can't give more ammo
            if(iBPAmmo >= g_iCvar_MaxBPAmmo)
            {
               client_printcolor(id, "/g[ZP]/y Your Antidote Gun backpack ammo it's full")
               
               #if defined OLD_VERSION_SUPPORT
               zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
               return PLUGIN_CONTINUE
               #else
               return ZP_PLUGIN_HANDLED
               #endif
            }

            // Get the new ammo it are going to be used by the player
            static iNewAmmo
            iNewAmmo = g_iCvar_MaxBPAmmo - iBPAmmo
            
            // Give the new amount of ammo
            cs_set_user_bpammo(id, CSW_GALIL, iBPAmmo + iNewAmmo)
            
            // Flash ammo in hud
            message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
            write_byte(AMMOID_GALIL) // ammo id
            write_byte(iNewAmmo) // ammo amount
            message_end()
            
            // Play clip purchase sound
            emit_sound(id, CHAN_ITEM, antidotegun_ammopickupsound[random_num(0, sizeof antidotegun_ammopickupsound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
         }
         else
         {   
            // We need to get if has an ordinary galil
            if(bAlreadyHasGalil)
               ham_strip_weapon(id, "weapon_galil")
               
            // Update player bool
            g_bHasAntidoteGun[id] = true
            
            // Give and store the weapon id
            iWpnID = give_item(id, "weapon_galil")
            
            // Set the normal weapon ammo
            if(g_iCvar_MaxClip && g_iCvar_MaxClip != GALIL_DFT_MAXCLIP)
               cs_set_weapon_ammo(iWpnID, g_iCvar_MaxClip)
               
            // Set the max bpammo
            cs_set_user_bpammo(id, CSW_GALIL, g_iCvar_MaxBPAmmo)
         }
         
         // We should update this var if isn't info into.
         if(!iWpnID) iWpnID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", id)
            
         // Yes or yes we need to update this vars with the current ammo amount
         iAmmo = cs_get_weapon_ammo(iWpnID)
         iBPAmmo = cs_get_user_bpammo(id, CSW_GALIL)
            
         // Force to change his gun
         engclient_cmd(id, "weapon_galil")
         
         // Update the player ammo
         update_ammo_hud(id, iAmmo, iBPAmmo)
      }
      else
      {
         // A message
         client_printcolor(id, "/g[ZP]/y Antidote Gun item has been disabled. /gContact Admin")
         
         #if defined OLD_VERSION_SUPPORT
         zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
         return PLUGIN_CONTINUE
         #else
         return ZP_PLUGIN_HANDLED
         #endif
      }
   }
   
   return PLUGIN_CONTINUE
}

/*================================================================================
 [Main Forwards]
=================================================================================*/

public client_putinserver(id)
{
   // Updating bools
   g_bIsConnected[id] = true
   g_bHasAntidoteGun[id] = false
}

public client_disconnect(id)
{
   // Updating bools
   g_bIsAlive[id] = false
   g_bIsConnected[id] = false
   g_bHasAntidoteGun[id] = false
}

public fw_PlayerSpawn_Post(id)
{
   // Not alive...
   if(!is_user_alive(id))
      return HAM_IGNORED
      
   // Player is alive
   g_bIsAlive[id] = true
   
   // Remove Weapon
   if(get_pcvar_num(cvar_oneround) || !g_bCvar_Enabled)
   {
      if(g_bHasAntidoteGun[id])
      {
         // Reset player vars
         g_bHasAntidoteGun[id] = false
         
         // Strip his galil
         ham_strip_weapon(id, "weapon_galil")
      }
   }
   
   return HAM_IGNORED
}

public fw_PlayerKilled(victim, attacker, shouldgib)
{
   // Player victim
   if(is_user_valid_connected(victim))
   {
      // Victim is not alive
      g_bIsAlive[victim] = false
      
      // Reset player vars
      g_bHasAntidoteGun[victim] = false
      
      return HAM_HANDLED
   }
   
   return HAM_IGNORED
}

public fw_CmdStart(id, handle, seed)
{
   // Skip not alive users
   if(!is_user_valid_alive(id))
      return FMRES_IGNORED
      
   // Without an antidote gun
   if(!g_bHasAntidoteGun[id])
      return FMRES_IGNORED
      
   // Not human
   if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
      return FMRES_IGNORED
   
   // Isn't holding a Galil
   if(g_iCurrentWeapon[id] != CSW_GALIL)
      return FMRES_IGNORED
      
   // Get Buttons
   static iButton
   iButton = get_uc(handle, UC_Buttons)
   
   // User pressing +attack Button
   if(iButton & IN_ATTACK)
   {
      // Buttons
      set_uc(handle, UC_Buttons, iButton & ~IN_ATTACK)
      
      // Some vars
      static Float:flCurrentTime
      flCurrentTime = halflife_time()
      
      // Fire rate not over yet
      if (flCurrentTime - g_flLastFireTime[id] < g_flCvar_FireRate)
         return FMRES_IGNORED
         
      // Another vars with info
      static iWpnID, iClip
      iWpnID = get_pdata_cbase(id, m_pActiveItem, 5)
      iClip = cs_get_weapon_ammo(iWpnID)
      
      // Skip if is in reload
      if(get_pdata_int(iWpnID, m_fInReload, 4))
         return FMRES_IGNORED
      
      // To don't reload instantly (bugfix)
      set_pdata_float(iWpnID, m_flNextPrimaryAttack, g_flCvar_FireRate, 4)
      set_pdata_float(iWpnID, m_flNextSecondaryAttack, g_flCvar_FireRate, 4)
      set_pdata_float(iWpnID, m_flTimeWeaponIdle, g_flCvar_FireRate, 4)
      
      // Update last fire time array
      g_flLastFireTime[id] = flCurrentTime
      
      // 0 bullets
      if(iClip <= 0)
      {
         // Play empty clip sound
         ExecuteHamB(Ham_Weapon_PlayEmptySound, iWpnID)

         return FMRES_IGNORED
      }
         
      // Process fire
      primary_attack(id)
      
      // Real fire push knockback
      launch_push(id, 40)
      
      // Update Ammo
      cs_set_weapon_ammo(iWpnID, --iClip)
      update_ammo_hud(id, iClip, cs_get_user_bpammo(id, CSW_GALIL))
      
      return FMRES_IGNORED
   }
   
   return FMRES_IGNORED
}

public fw_SetModel(entity, model[])
{
   // Entity is not valid
   if(!is_valid_ent(entity))
      return FMRES_IGNORED;
      
   // Entity model is not w_galil
   if(!equal(model, "models/w_galil.mdl"))
      return FMRES_IGNORED;
      
   // Get classname
   static szClassName[33]
   entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
      
   // Not a Weapon box
   if(!equal(szClassName, "weaponbox"))
      return FMRES_IGNORED
   
   // Some vars
   static iOwner, iStoredGalilID
   
   // Get owner
   iOwner = entity_get_edict(entity, EV_ENT_owner)
   
   // Get drop weapon index (galil) to use in fw_Galil_AddToPlayer forward
   iStoredGalilID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", entity)
   
   // Entity classname is weaponbox, and galil has founded
   if(g_bHasAntidoteGun[iOwner] && is_valid_ent(iStoredGalilID))
   {
      // Setting weapon options
      entity_set_int(iStoredGalilID, EV_INT_WEAPONKEY, ANTIDOTEGUN_WPNKEY)
      
      // Reset user vars
      g_bHasAntidoteGun[iOwner] = false
      
      // Set weaponbox new model
      entity_set_model(entity, "models/w_gauss.mdl")
      
      // Glow
      if(get_pcvar_num(cvar_wboxglow))
         set_rendering(entity, kRenderFxGlowShell, antidotegun_wb_color[0], antidotegun_wb_color[1], antidotegun_wb_color[2], kRenderNormal, 25)
      
      return FMRES_SUPERCEDE
   }
   
   return FMRES_IGNORED
}

public fw_UpdateClientData_Post(id, sendweapons, handle)
{
   // Skip not alive users
   if(!is_user_valid_alive(id))
      return FMRES_IGNORED
      
   // Without an antidote gun
   if(!g_bHasAntidoteGun[id])
      return FMRES_IGNORED
      
   // Not human
   if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
      return FMRES_IGNORED
   
   // Isn't holding a Galil
   if(g_iCurrentWeapon[id] != CSW_GALIL)
      return FMRES_IGNORED
      
   // Player can't attack with the AG
   set_cd(handle, CD_flNextAttack, halflife_time() + 0.001)

   return FMRES_HANDLED
}

public fw_Galil_Deploy_Post(galil)
{
   // Get galil owner
   static id
   id = get_pdata_cbase(galil, m_pPlayer, 4)
   
   // The current galil owner has an antidote gun?
   if(is_user_valid_connected(id) && g_bHasAntidoteGun[id])
   {
      // Update the current ammo
      update_ammo_hud(id, cs_get_weapon_ammo(galil), cs_get_user_bpammo(id, CSW_GALIL))
      
      // Send the draw animation
      set_user_weaponanim(id, V_GAUSS_ANIM_DRAW)
   }
   
   return HAM_IGNORED
}

public fw_Galil_AddToPlayer(galil, player)
{
   // Is an antidote gun?
   if(is_valid_ent(galil) && is_user_valid_connected(player) && entity_get_int(galil, EV_INT_WEAPONKEY) == ANTIDOTEGUN_WPNKEY)
   {
      // Set vars
      g_bHasAntidoteGun[player] = true
      
      // Reset weapon options
      entity_set_int(galil, EV_INT_WEAPONKEY, 0)
      
      return HAM_HANDLED
   }
   
   return HAM_IGNORED
}

public fw_Galil_PostFrame(galil)
{
   // Get galil owner
   static id
   id = get_pdata_cbase(galil, m_pPlayer, 4)
   
   // His owner has an antidote gun?
   if(is_user_valid_alive(id) && g_bHasAntidoteGun[id])
   {
      // Some vars
      static Float:flNextAttack, iBpAmmo, iClip, iInReload
      
      // Weapon is on middle reload
      iInReload = get_pdata_int(galil, m_fInReload, 4)
      
      // Next player attack
      flNextAttack = get_pdata_float(id, m_flNextAttack, 5)
      
      // Player back pack ammo
      iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL)
      
      // Current weapon clip
      iClip = cs_get_weapon_ammo(galil)
      
      // End of reload
      if(iInReload && flNextAttack <= 0.0)
      {
         // Get the minimun amount between maxclip sub. current clip
         // and the player backpack ammo
         new j = min(g_iCvar_MaxClip - iClip, iBpAmmo)
         
         // Set the new weapon clip
         cs_set_weapon_ammo(galil, iClip + j)
   
         // Set the new player backpack ammo
         cs_set_user_bpammo(id, CSW_GALIL, iBpAmmo-j)
         
         // Update the weapon offset "inreload" to 0 ("false")
         iInReload = 0
         set_pdata_int(galil, m_fInReload, 0, 4)
      }
   
      // Get the current player buttons
      static iButton
      iButton = get_user_button(id)
      
      // The player stills pressing the fire button
      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))
         return
   
      // Trying to reload pressing the reload button when isn't it
      if(iButton & IN_RELOAD && !iInReload)
      {
         // The current weapon clip exceed the new max clip
         if(iClip >= g_iCvar_MaxClip)
         {
            // Retrieve player reload button
            entity_set_int(id, EV_INT_button, iButton & ~IN_RELOAD)
            
            // Send idle animation
            set_user_weaponanim(id, 0)
         }
         // The current weapon clip it's the same like the old max weapon clip
         else if(iClip == GALIL_DFT_MAXCLIP)
         {
            // Has an amount of bpammo?
            if(iBpAmmo)
            {
               // Should make a reload
               antidotegun_reload(id, galil, 1)
            }
         }
      }
   }
   
   // Credits and thanks to ConnorMcLeod for his Weapon MaxClip plugin!
}

public fw_Galil_Reload_Post(galil)
{
   // Get galil owner
   static id
   id = get_pdata_cbase(galil, m_pPlayer, 4)
   
   // It's in reload and his owner has an antidote gun?
   if(is_user_valid_alive(id) && g_bHasAntidoteGun[id] && get_pdata_int(galil, m_fInReload, 4))
   {   
      // Change normal reload options
      antidotegun_reload(id, galil)
   }
}

/*================================================================================
 [Internal Functions]
=================================================================================*/

cache_cvars()
{
   // Some cvars
   g_bCvar_Enabled = bool:get_pcvar_num(cvar_enable)
   g_flCvar_FireRate = get_pcvar_float(cvar_firerate)
   g_flCvar_ReloadSpeed = get_pcvar_float(cvar_reloadspeed)
   g_flCvar_HitSlowdown = get_pcvar_float(cvar_hitslowdown)
   g_iCvar_MaxClip = clamp(get_pcvar_num(cvar_maxclip), 0, 120)
   g_iCvar_MaxBPAmmo = clamp(get_pcvar_num(cvar_maxbpammo), 1, 90)
   
   #if defined OLD_VERSION_SUPPORT
   g_bCvar_BuyUntilMode = false
   #else
   g_bCvar_BuyUntilMode = bool:get_pcvar_num(cvar_buyindelay)
   #endif
}

primary_attack(id)
{
   // Fire Effect
   set_user_weaponanim(id, V_GAUSS_ANIM_FIRE)
   entity_set_vector(id, EV_VEC_punchangle, Float:{ -1.5, 0.0, 0.0 })
   emit_sound(id, CHAN_WEAPON, antidotegun_firesound[random_num(0, sizeof antidotegun_firesound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
   
   // Some vars
   static iTarget, iBody, iEndOrigin[3]
   
   // Get end origin from eyes
   get_user_origin(id, iEndOrigin, 3)
   
   // Make gun beam
   beam_from_gun(id, iEndOrigin)
   
   // Get user aiming
   get_user_aiming(id, iTarget, iBody)
   
   // Do sound by a new entity
   new iEnt = create_entity("info_target")
   
   // Integer vector into a Float vector
   static Float:flOrigin[3]
   IVecFVec(iEndOrigin, flOrigin)
   
   // Set entity origin
   entity_set_origin(iEnt, flOrigin)
   
   // Sound
   emit_sound(iEnt, CHAN_WEAPON, antidotegun_hitsound[random_num(0, sizeof antidotegun_firesound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
   
   // Remove entity
   remove_entity(iEnt)
   
   // Aim target it's a player
   if(is_user_valid_alive(iTarget))
   {   
      // Hit slowdown, first should be enabled
      if(g_flCvar_HitSlowdown > 0.0)
      {
         // Get his current velocity vector
         static Float:flVelocity[3]
         get_user_velocity(iTarget, flVelocity)
         
         // Multiply his velocity by a number
         xs_vec_mul_scalar(flVelocity, g_flCvar_HitSlowdown, flVelocity)
         
         // Set his new velocity vector
         set_user_velocity(iTarget, flVelocity)   
      }
      
      // It's allowed to be disinfected
      if(zp_get_user_zombie(iTarget) && !zp_get_user_nemesis(iTarget) && !zp_get_user_last_zombie(iTarget))
      {
         // Disinfect user
         #if defined OLD_VERSION_SUPPORT
         zp_disinfect_user(iTarget)
         #else
         zp_disinfect_user(iTarget, 1)
         #endif
         
         // Death message
         message_begin(MSG_BROADCAST, g_msgDeathMsg)
         write_byte(id) // killer
         write_byte(iTarget) // victim
         write_byte(iBody == HIT_HEAD ? 1 : 0) // headshot flag
         write_string("antidote gun") // killer's weapon
         message_end()
         
         // Screen fade fx
         message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, iTarget)
         write_short(UNIT_SECOND*1) // duration
         write_short(UNIT_SECOND/2) // hold time
         write_short(FFADE_IN) // fade type
         write_byte(0) // r
         write_byte(255) // g
         write_byte(255) // b
         write_byte(227) // alpha
         message_end()
         
         // Beam Cylinder fx
         message_begin(MSG_PVS, SVC_TEMPENTITY, iEndOrigin)
         write_byte(TE_BEAMCYLINDER) // TE id
         write_coord(iEndOrigin[0]) // position.x
         write_coord(iEndOrigin[1]) // position.y
         write_coord(iEndOrigin[2]) // position.z
         write_coord(iEndOrigin[0]) // x axis
         write_coord(iEndOrigin[1]) // y axis
         write_coord(iEndOrigin[2] + 385) // z axis
         write_short(g_sprRing) // sprite
         write_byte(0) // startframe
         write_byte(0) // framerate
         write_byte(4) // life
         write_byte(30) // width
         write_byte(0) // noise
         write_byte(0) // red
         write_byte(255) // green
         write_byte(255) // blue
         write_byte(200) // brightness
         write_byte(0) // speed
         message_end()
      }
      // Can't be disinfected
      else
      {
         // Faster particles
         message_begin(MSG_PVS, SVC_TEMPENTITY, iEndOrigin)
         write_byte(TE_PARTICLEBURST) // TE id
         write_coord(iEndOrigin[0]) // position.x
         write_coord(iEndOrigin[1]) // position.y
         write_coord(iEndOrigin[2]) // position.z
         write_short(45) // radius
         write_byte(208) // particle color
         write_byte(10) // duration * 10 will be randomized a bit
         message_end()
      }
   }
   else
   {
      // Aim target entity it's valid and isn't worldspawn?
      if((iTarget > 0) && is_valid_ent(iTarget))
      {
         // Get aim target classname
         static szClassname[32]
         entity_get_string(iTarget, EV_SZ_classname, szClassname, charsmax(szClassname))
         
         // It's a breakable entity
         if(equal(szClassname, "func_breakable"))
         {
            // Get destroy this ent
            force_use(id, iTarget)
         }
      }
   }
}

antidotegun_reload(id, galil, force_reload = 0)
{
   // Next player attack time
   set_pdata_float(id, m_flNextAttack, g_flCvar_ReloadSpeed, 5)

   // Send to the player the reload animation
   set_user_weaponanim(id, V_GAUSS_ANIM_RELOAD)
   
   // Update the weapon offset "inreload" to 1 ("true")
   if(force_reload)
      set_pdata_int(galil, m_fInReload, 1, 4)

   // Next idle weapon time, soonest time ItemPostFrame will call WeaponIdle.
   set_pdata_float(galil, m_flTimeWeaponIdle, g_flCvar_ReloadSpeed + 0.5, 4)
   
   // I'll be honest, i don't know what do this.
   entity_set_float(id, EV_FL_frame, 200.0)
}

update_ammo_hud(id, iAmmoAmount, iBPAmmoAmount)
{
   // Display the new antidotegun bullets
   if(iAmmoAmount != -1)
   {
      message_begin(MSG_ONE_UNRELIABLE, g_msgCurWeapon, _, id)
      write_byte(1) // active
      write_byte(CSW_GALIL) // weapon
      write_byte(iAmmoAmount) // clip
      message_end()
   }
   
   // Display the new amount of BPAmmo
   if(iBPAmmoAmount != -1)
   {
      message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoX, _, id)
      write_byte(AMMOID_GALIL) // ammoid
      write_byte(iBPAmmoAmount) // ammo amount
      message_end()
   }
}

beam_from_gun(id, iEndOrigin[3])
{
   // Make a cool beam
   message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
   write_byte(TE_BEAMENTPOINT) // TE id
   write_short(id | 0x1000) // start entity
   write_coord(iEndOrigin[0]) // endposition.x
   write_coord(iEndOrigin[1]) // endposition.y
   write_coord(iEndOrigin[2]) // endposition.z
   write_short(g_sprBeam)    // sprite index
   write_byte(1)   // framestart
   write_byte(1)   // framerate
   write_byte(1)   // life in 0.1's
   write_byte(10)   // width
   write_byte(0)   // noise
   write_byte(0)   // r
   write_byte(255)   // g
   write_byte(255)   // b
   write_byte(200)   // brightness
   write_byte(0)   // speed
   message_end()
   
   // Dynamic Light
   message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iEndOrigin)
   write_byte(TE_DLIGHT) // TE id
   write_coord(iEndOrigin[0]) // position.x
   write_coord(iEndOrigin[1]) // position.y
   write_coord(iEndOrigin[2]) // position.z
   write_byte(30) // radius
   write_byte(0) // red
   write_byte(255) // green
   write_byte(255) // blue
   write_byte(10) // life
   write_byte(45) // decay rate
   message_end()
   
   // Sparks
   message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iEndOrigin)
   write_byte(TE_SPARKS) // TE id
   write_coord(iEndOrigin[0]) // position.x
   write_coord(iEndOrigin[1]) // position.y
   write_coord(iEndOrigin[2]) // position.z
   message_end()
}

/*================================================================================
 [Stocks]
=================================================================================*/

stock set_user_weaponanim(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 launch_push(id, velamount) // from my Nemesis Rocket Launcher plugin.
{
   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 ham_strip_weapon(id, weapon[])
{
   if(!equal(weapon,"weapon_",7))
      return 0
   
   new wId = get_weaponid(weapon)
   
   if(!wId) return 0
   
   new wEnt
   
   while((wEnt = find_ent_by_class(wEnt, weapon)) && entity_get_edict(wEnt, EV_ENT_owner) != id) {}
   
   if(!wEnt) return 0
   
   if(get_user_weapon(id) == wId)
      ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt);
   
   if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt))
      return 0
      
   ExecuteHamB(Ham_Item_Kill, wEnt)
   
   entity_set_int(id, EV_INT_weapons, entity_get_int(id, EV_INT_weapons) & ~(1<<wId))

   return 1
}

stock client_printcolor(id, const input[], any:...)
{
   static iPlayersNum[32], iCount; iCount = 1
   static szMsg[191]
   
   vformat(szMsg, charsmax(szMsg), input, 3)
   
   replace_all(szMsg, 190, "/g", "^4") // green txt
   replace_all(szMsg, 190, "/y", "^1") // orange txt
   replace_all(szMsg, 190, "/ctr", "^3") // team txt
   replace_all(szMsg, 190, "/w", "^0") // team txt
   
   if(id) iPlayersNum[0] = id
   else get_players(iPlayersNum, iCount, "ch")
      
   for (new i = 0; i < iCount; i++)
   {
      if (g_bIsConnected[iPlayersNum[i]])
      {
         message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayersNum[i])
         write_byte(iPlayersNum[i])
         write_string(szMsg)
         message_end()
      }
   }
}


Ha valaki tud segíteni, tegye azt :D lécci :)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [ZP]AntiDoteGun
HozzászólásElküldve:2011.08.14. 18:43 
Offline
Imperátor
Avatar

Csatlakozott:2009.04.21. 09:33
Hozzászólások:3991
Megköszönt másnak: 5 alkalommal
Megköszönték neki: 135 alkalommal
Mérete mekkora? ha >1 Mega, akkor az a para. Megoldás: compile-old le újra


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  [2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 24 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