﻿///////////////////////////////////////////////////////////////////
//
//Svens M203 40mm Grenade Launcher
//
///////////////////////////////////////////////////////////////////
//
//Svens M203 Attaches a 40mm Grenade Launcher to selected weapons
//
//Notes:
//Забиндите клавишу гранатомета bind "q" "+attack3"тока для М6 и калаша
//The m203 pulls its ammo from the HE Grenade
//
//Instalation: Extract to cstrike\addons\eventscripts\svens_m203
//
//Requires:
//Mattie Eventscripts 1.2 or higher
//Es_tools .416d or higher
//
///////////////////////////////////////////////////////////////////
//Configuration
///////////////////////////////////////////////////////////////////

block config
{
es_xsetinfo sm203_weapons "mp5navy m4a1 ak47"      //Weapons to attach and m203
es_xsetinfo sm203_power 100                        //Power of the 40mm grenade
es_xsetinfo sm203_radius 250                       //Radius of the 40mm grenade
}

///////////////////////////////////////////////////////////////////
//DO NOT Edit below this line
///////////////////////////////////////////////////////////////////

block load
{
es_xdoblock svens_m203/config
refcount increment eventscripts_noisy
es_keygroupcreate sm203
es_xsetinfo player_setup 0
es_xset _sp_dead 0
est_Loop player_setup #h es_xdoblock svens_m203/setup
es_xsetinfo sm203_version 1.2
es_makepublic sm203_version
es_regclientcmd +attack3 svens_m203/ready_fire "Fires an m203 grenade" 
es_regclientcmd -attack3 svens_m203/fire "Fires an m203 grenade" 
}
block unload
{
refcount decrement eventscripts_noisy
es_keygroupdelete sm203
}
event player_activate
{
es_setinfo player_setup event_var(userid)
es_xdoblock svens_m203/setup
}
block setup
{
es_xsetinfo botyn 0
es_isbot botyn server_var(player_setup)
if (server_var(botyn) equalto 0) do
    {
    es_keycreate sm203 server_var(player_setup)
    es_keysetvalue sm203 server_var(player_setup) fired 0
    es_keysetvalue sm203 server_var(player_setup) readytofire 0
    }
}
event round_start
{
//Remove any env_explosions already created
es_xsetinfo _sm203_exists 0 
es_xsetinfo _sm203_expindex 0 
es_xexists _sm203_exists keygroup _sm203_explosions 
if (server_var(_sm203_exists) = 1) then es_xkeygroupdelete _sm203_explosions 
es_xcreateentitylist _sm203_explosions env_explosion 
es_foreachkey _sm203_expindex in _sm203_explosions "es_remove server_var(_sm203_expindex)"
}
event player_spawn
{
if (event_var(es_steamid) notequalto "BOT") do
    {
    es_keysetvalue sm203 event_var(userid) fired 0
    es_keysetvalue sm203 event_var(userid) readytofire 1
    }
}
event player_death
{
if (event_var(es_steamid) notequalto "BOT") do
    {
    es_keysetvalue sm203 event_var(userid) fired 1
    }
}
event weapon_reload
{
es_keysetvalue sm203 event_var(userid) readytofire 0
es_delayed 3 es_keysetvalue sm203 event_var(userid) readytofire 1
}
event item_pickup
{
if (event_var(es_steamid) notequalto "BOT") do
    {
    if (event_var(item) in server_var(sm203_weapons)) do
        {
        es_tell event_var(userid) <<< ПРОПИШИТЕ В КОНСОЛИ  bind "q""+attack3" ЭТО ГРАНАТОМЕТ (РАБОТАЕТ ТОКА С АК47 и М16)>>>
        es_keysetvalue sm203 event_var(userid) readytofire 0
        es_delayed 3 es_keysetvalue sm203 event_var(userid) readytofire 1
        }
    }
}

block ready_fire
{
es_xsetinfo _sm_userid 0
es_getcmduserid _sm_userid
es_getplayerprop _sp_dead server_var(_sm_userid) CCSPlayer.baseclass.pl.deadflag
if (server_var(_sp_dead) equalto 0) do
    {
    es_xsetinfo sm203weapon 0
    es est_getgun sm203weapon server_var(_sm_userid)
    es_string sm203weapon replace weapon_
    if (server_var(sm203weapon) in server_var(sm203_weapons)) do
        {
        es_xsetinfo hasammo 0
        es_getplayerprop hasammo server_var(_sm_userid) "CCSPlayer.baseclass.localdata.m_iAmmo.011"
        if (server_var(hasammo) equalto 0) do
            {
            es_emitsound player server_var(_sm_userid) weapons\ClipEmpty_Rifle.wav 1 0.75
            }
        if (server_var(hasammo) notequalto 0) do
            {
            es_xsetinfo readytofire 0
            es_keygetvalue readytofire sm203 server_var(_sm_userid) readytofire
            if (server_var(readytofire) equalto 1) do
                {
                es_xsetinfo announcement 0
                if (event_var(es_userteam) equalto 3) then est_Loop announcement #c es_xdoblock svens_m203/fire_in_the_hole
                if (event_var(es_userteam) equalto 2) then est_Loop announcement #t es_xdoblock svens_m203/fire_in_the_hole
                es_keysetvalue sm203 server_var(_sm_userid) fired 1
                es_sexec server_var(_sm_userid) say_team  НА НАХ =)!
                }
            }
        }
    }
}

block fire
{
es_xsetinfo _sm_userid 0
es_getcmduserid _sm_userid
es_getplayerprop _sp_dead server_var(_sm_userid) CCSPlayer.baseclass.pl.deadflag
if (server_var(_sp_dead) equalto 0) do
    {
    es_xsetinfo sm203weapon 0
    es est_getgun sm203weapon server_var(_sm_userid)
    es_string sm203weapon replace weapon_
    if (server_var(sm203weapon) in server_var(sm203_weapons)) do
        {
        es_xsetinfo fired 0
        es_keygetvalue fired sm203 server_var(_sm_userid) fired
        if (server_var(fired) equalto 1) do
            {
            es est_RemoveWeapon server_var(_sm_userid) weapon_hegrenade
            es_setplayerprop server_var(_sm_userid) CCSPlayer.baseclass.localdata.m_iAmmo.011 0
            es_emitsound player server_var(_sm_userid) weapons\grenade_launcher1.wav 1 0.75
            es_setinfo _sm203_grenadeowner server_var(_sm_userid)
            es_keysetvalue sm203 server_var(_sm_userid) fired 0
            es_xdoblock svens_m203/explode
            }
        }
    }
}

block fire_in_the_hole
{
es_playsound server_var(announcement) radio\ct_fireinhole.wav 1
}
block explode
{
es_xsetinfo explode_x 0
es_xsetinfo explode_y 0
es_xsetinfo explode_z 0
es est_GetviewCoord server_var(_sm203_grenadeowner) explode_x explode_y explode_z

//random explosion sound 
es_xsetinfo soundrand 0 
es_rand soundrand 1 3 
if (server_var(soundrand) equalto 1) then es_xsetinfo explosionsound weapons\explode3.wav 
if (server_var(soundrand) equalto 2) then es_xsetinfo explosionsound weapons\explode4.wav 
if (server_var(soundrand) equalto 3) then es_xsetinfo explosionsound weapons\explode5.wav 

//set explosion variables
es_xsetinfo _sm203_primary_check 0
es_xsetinfo _sm203_secondary_check 0
es_xsetinfo _sm203_primary_mag 0
es_xsetinfo _sm203_primary_ammo 0
es_xsetinfo _sm203_secondary_mag 0
es_xsetinfo _sm203_secondary_ammo 0

//Make sure player has a weapon
es est_GetPrimary _sm203_primary_check server_var(_sm203_grenadeowner)
es est_GetSecondary _sm203_secondary_check server_var(_sm203_grenadeowner)

//Store players ammo/mag
if (server_var(_sm203_primary_check) notequalto 0) do
    {
    es est_getclipammo _sm203_primary_mag server_var(_sm203_grenadeowner) 1
    es est_getammo _sm203_primary_ammo server_var(_sm203_grenadeowner) 1
    }
if (server_var(_sm203_secondary_check) notequalto 0) do
    { 
    es est_getclipammo _sm203_secondary_mag server_var(_sm203_grenadeowner) 2
    es est_getammo _sm203_secondary_ammo server_var(_sm203_grenadeowner) 2
    }
//Give item
es_give server_var(_sm203_grenadeowner) env_explosion
//Reset players ammo/mag
if (server_var(_sm203_primary_check) notequalto 0) do
    {
    es est_setclipammo server_var(_sm203_grenadeowner) 1 server_var(_sm203_primary_mag)
    es est_setammo server_var(_sm203_grenadeowner) 1 server_var(_sm203_primary_ammo)
    }
if (server_var(_sm203_secondary_check) notequalto 0) do
    {
    es est_setclipammo server_var(_sm203_grenadeowner) 2 server_var(_sm203_secondary_mag)
    es est_setammo server_var(_sm203_grenadeowner) 2 server_var(_sm203_secondary_ammo)
    }

es_xsetinfo _sm203_format 0 
//Origin 
es_format _sm203_format "origin %1 %2 %3" server_var(explode_x) server_var(explode_y) server_var(explode_z) 
es_fire server_var(_sm203_grenadeowner) env_explosion addoutput server_var(_sm203_format)
es_format _sm203_format "%1,%2,%3" server_var(explode_x) server_var(explode_y) server_var(explode_z)
es_setindexprop server_var(eventscripts_lastgive) CBaseEntity.m_vecOrigin server_var(_sm203_format)
//Power 
es_format _sm203_format "imagnitude %1" server_var(sm203_power)
es_fire server_var(_sm203_grenadeowner) env_explosion addoutput server_var(_sm203_format)
//Range 
es_format _sm203_format "iradiusoverride %1" server_var(sm203_radius) 
es_fire server_var(_sm203_grenadeowner) env_explosion addoutput server_var(_sm203_format)

// Set the owner of the explosion. 
es_xsetinfo owner 0
es_getplayerhandle owner server_var(_sm203_grenadeowner)
es_setindexprop server_var(eventscripts_lastgive) CBaseEntity.m_hOwnerEntity server_var(owner)

// This is it... time to explode! 
es_delayed .1 es_emitsound entity server_var(eventscripts_lastgive) server_var(explosionsound) 1 0.60 
es_delayed .1 es_fire server_var(_sm203_grenadeowner) env_explosion explode
}