#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
new const nazwa[] = "Elitarny zolnierz";
new const opis[] = "Ma dwie MP5 i Elite oraz zmniejszoną grawitację.";
new const bronie = (1<<CSW_MP5NAVY | 1<<CSW_ELITE);
new const zdrowie = 30;
new const kondycja = 30;
new const inteligencja = 0;
new const wytrzymalosc = 0;
new bool: ma_klase[33];
static Float:Last[33];
new const max_clip[31] = { -1, 13, -1, 10, 1, 7, 1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 };
public plugin_init()
{
register_plugin(nazwa, "1.0", "QTM_Peyote");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
RegisterHam(Ham_Spawn, "player", "Spawn", 1);
register_forward(FM_CmdStart, "CmdStart");
register_event("CurWeapon", "CurWeapon", "be", "1=1")
}
public cod_class_enabled(id)
{
ma_klase[id] = true;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
public Spawn(id)
{
if(ma_klase[id] && is_user_alive(id))
{
new weapon_id = find_ent_by_owner(-1, "weapon_mp5navy", id); //szuka id bytu broni ak47 u gracza o id == id
if(weapon_id) //jeżeli znaleziono broń - byt ma inną wartość niż 0
{
cs_set_weapon_ammo(weapon_id, 60); //ustaw broni 50 ammo
cs_set_user_bpammo(id, CSW_MP5NAVY, 200)
}
set_user_gravity(id, 0.75)
}
}
public plugin_precache()
{
precache_model("models/v_mp5dual.mdl");
//powyżej zmieniasz ścieżki do nowych modeli
}
public CurWeapon(id)
{
new weapon = read_data(2);
if(ma_klase[id]) //tutaj wstawiamy ma_klase lub ma_perk
{
if(weapon == CSW_MP5NAVY) //tutaj ustawiamy broń, jakiej model będziemy zmieniać
{
set_pev(id, pev_viewmodel2, "models/v_mp5dual.mdl")
//tu dajemy ścieżkę do nowego modeli v_
}
}
new iWeapon = read_data(2);
new iEnt;
static Float:fSpeedMultiplier = 0.7;
if(iWeapon == CSW_MP5NAVY)
{
iEnt = fm_find_ent_by_owner(-1, "weapon_mp5navy", id)
set_pdata_float( iEnt, 46, ( get_pdata_float(iEnt, 46, 4) * fSpeedMultiplier), 4 );
set_pdata_float( iEnt, 47, ( get_pdata_float(iEnt, 47, 4) * fSpeedMultiplier), 4 );
}
}
public CmdStart(id, uc_handle)
{
if(!is_user_alive(id) || !ma_klase[id])
return FMRES_IGNORED;
new buttons = get_uc(uc_handle, UC_Buttons);
new oldbuttons = pev(id, pev_oldbuttons);
new clip, ammo, weapon = get_user_weapon(id, clip, ammo);
if(max_clip[weapon] == -1 || !ammo)
return FMRES_IGNORED;
if((buttons & IN_RELOAD && !(oldbuttons & IN_RELOAD) && !(buttons & IN_ATTACK)) || !clip)
{
new Float:Now = get_gametime();
if((Now - Float:Last[id]) >= 2.8)
{
cs_set_user_bpammo(id, weapon, ammo-(max_clip[weapon]-clip));
new new_ammo = ((max_clip[weapon]+30) > ammo)? clip+ammo: (max_clip[weapon]+30)
set_user_clip(id, new_ammo);
Last[id] = Now;
}
}
return FMRES_IGNORED;
}
stock set_user_clip(id, ammo)
{
new weaponname[32], weaponid = -1, weapon = get_user_weapon(id, _, _);
get_weaponname(weapon, weaponname, 31);
while ((weaponid = engfunc(EngFunc_FindEntityByString, weaponid, "classname", weaponname)) != 0)
if (pev(weaponid, pev_owner) == id) {
set_pdata_int(weaponid, 51, ammo, 4);
return weaponid;
}
return 0;
}
tu wersja praawie działająca, dodałem zwinne palce które daja 60 ammo, próbowałem także dodać opóźnienie, ale nie do końca działa