Witam.
Zrobiłem w codzie klase i item który daje powiększenie maksymalnej ilości naboi w magazynku, jednak kod czasem działa a czasami nie, tzn. mając ten item czasami da nam standardową ilość ammo a czasami tyle ile trzeba. Jak w kod patrzyłem parę razy i niczego się nie dopatrzyłem, może ktoś z was pomoże ![]()
#define TASK_OFFSET 1500
const NOCLIP_WPN_BS = ((1<<2)|(1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
const SHOTGUNS_BS = ((1<<CSW_M3)|(1<<CSW_XM1014))
const m_pPlayer = 41
const m_iId = 43
const m_flTimeWeaponIdle = 48
const m_fInReload = 54
const m_flNextAttack = 83
stock const Float:g_fDelay[31] = {
0.00, 2.70, 0.00, 2.00, 0.00, 0.55, 0.00, 3.15, 3.30, 0.00, 4.50,
2.70, 3.50, 3.35, 2.45, 3.30, 2.70, 2.20, 2.50, 2.63, 4.70,
0.55, 3.05, 2.12, 3.50, 0.00, 2.20, 3.00, 2.45, 0.00, 3.40
}
plugin_init:
new szWeapon[17]
for(new i=1; i<=30; i++)
{
if( !(NOCLIP_WPN_BS & (1<<i)) && get_weaponname(i, szWeapon, charsmax(szWeapon)) )
{
if( !(SHOTGUNS_BS & (1<<i)) )
{
RegisterHam(Ham_Weapon_Reload, szWeapon, "Weapon_Reload_Post", 1)
}
}
}
Końcówka:
public Weapon_Reload_Post(iEnt)
{
new id = get_pdata_cbase(iEnt, m_pPlayer, 4)
if(task_exists(id+TASK_OFFSET))
return PLUGIN_HANDLED;
if(klasa_gracza[id] == Strzelec || klasa_gracza[id] == Sniper || klasa_gracza[id] == Swat || klasa_gracza[id] == Poszukiwacz || player_b_ammo[id] || player_b_reload[id])
{
new Float:przeladowanie = 1.0
switch(klasa_gracza[id])
{
case Strzelec:
{
if(moc_gracza1[id] == 3)
przeladowanie = 0.8
}
case Sniper:
{
if(moc_gracza1[id] == 3)
przeladowanie = 0.75
}
}
if(player_b_reload[id])
przeladowanie -= player_b_reload[id]
new Float:fDelay = g_fDelay[get_pdata_int(iEnt, m_iId, 4)] * przeladowanie
if( get_pdata_int(iEnt, m_fInReload, 4))
{
set_pdata_float(id, m_flNextAttack, fDelay, 5)
set_pdata_float(iEnt, m_flTimeWeaponIdle, fDelay + 0.5, 4)
}
set_task(fDelay,"Reload",id+TASK_OFFSET);
}
}
public Reload(id){
id-=TASK_OFFSET;
new ammo = maxClip[get_user_weapon(id)]
switch(klasa_gracza[id])
{
case Strzelec:
{
if(moc_gracza1[id] == 3)
ammo += 8
else if(moc_gracza1[id] >=2)
ammo += 5
}
case Sniper:
{
if(moc_gracza1[id] == 3)
ammo += 12
else if(moc_gracza1[id] == 2)
ammo += 6
}
case Poszukiwacz:
{
if(moc_gracza1[id] == 3)
ammo += 10
else if(moc_gracza1[id] == 2)
ammo += 5
}
case Swat:
{
if(moc_gracza2[id] == 2)
ammo += 8
else if(moc_gracza2[id] == 1)
ammo += 4
}
}
if(player_b_ammo[id])
{
ammo += player_b_ammo[id]
client_print(id, print_chat, "Zwracam player_b_ammo: %i", player_b_ammo[id])
}
set_user_clip(id, ammo)
return PLUGIN_HANDLED;
}
Dzięki za pomoc ![]()
Dodam jeszcze, po przeładowaniu daje zawsze tyle ammo ile powinno, ale później w ciągu ułamka sekundy zmienia na standardową ilość.


Dodatki SourceMod












