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ść.