Всем привет, можно ли как то сделать так, чтобы доп патроны (explosive ammo) разрывные не использовались как дополнительные? Интересует, чтобы они выдавались как обычные и имели тот же подсчёт.
Возможно такой пример сгодится... не проверял... просто как идея...
public void Event_UpgradePackAdded(Event event, const char[] name, bool dontBroadcast)
{
int iUpgrade = event.GetInt("upgradeid");
if (!IsValid(iUpgrade)) return;
int client = GetClientOfUserId(event.GetInt("userid"));
if (client < 1) return;
int iSlot0 = GetPlayerWeaponSlot(client, 0);
if (!IsValid(iSlot0)) return;
int iAmmoOffset = GetEntProp(iSlot0, Prop_Send, "m_iPrimaryAmmoType") * 4;
if (iAmmoOffset < 0 || iAmmoOffset == 68 || iAmmoOffset == 24) return; // в данном случае отсёк грен и пулик
// зарядим дробовики тройной порцией спец. патронов, а остальное оружие 2-й порцией
int iMulti = 2;
switch (iAmmoOffset) {
case 28, 32: iMulti = 3; // дробовики
}
int iProp = FindSendPropInfo("CTerrorPlayer", "m_iAmmo");
int iSpecAmmo = GetEntProp(iSlot0, Prop_Send, "m_nUpgradedPrimaryAmmoLoaded");
int iAdd = iSpecAmmo * iMulti;
int iAmmoReserv = GetEntData(client, iProp + iAmmoOffset);
SetEntProp(iSlot0, Prop_Send, "m_iClip1", 0); // после зарядки патронами, пушку придётся перезарядить... заодно уходит баг, когда можно зарядить автодроб на 20 патронов, вместо 10
SetEntProp(iSlot0, Prop_Send, "m_nUpgradedPrimaryAmmoLoaded", iAdd); // запас спец. патронов
SetEntData(client, iProp + iAmmoOffset, iAmmoReserv + iAdd); // доп. патроны
RemoveEdict(iUpgrade);
}
stock bool IsValid(int &iEnt)
{
return iEnt > 0 && IsValidEntity(iEnt) && IsValidEdict(iEnt);
}
Сообщение отредактировал MixJay: 14 Сентябрь 2018 - 14:38