- Код: Выделить всё
int CWeaponBox::GiveAmmo(int iCount, char *szName, int iMax, int *pIndex)
{
int i;
for (i = 1; i < MAX_AMMO_SLOTS && !FStringNull(m_rgiszAmmo[i]); i++)
{
if (!Q_stricmp(szName, STRING(m_rgiszAmmo[i])))
{
if (pIndex)
*pIndex = i;
int iAdd = Q_min(iCount, iMax - m_rgAmmo[i]);
if (iCount == 0 || iAdd > 0)
{
m_rgAmmo[i] += iAdd;
return i;
}
return -1;
}
}
if (i < MAX_AMMO_SLOTS)
{
if (pIndex)
*pIndex = i;
m_rgiszAmmo[i] = MAKE_STRING(szName);
m_rgAmmo[i] = iCount;
return i;
}
ALERT(at_console, "out of named ammo slots\n");
return i;
}
Он не логичный не так ли ?
Для чего 4й аргумент pIndex если мы все равно возврашаем индекс.
Короче можно ли просто упростить код вот так:
- Код: Выделить всё
int CWeaponBox::GiveAmmo(int iCount, char *szName, int iMax)
{
int iAmmoIndex = GetAmmoIndex(szName);
if (iAmmoIndex < 0 || iAmmoIndex >= MAX_AMMO_SLOTS)
{
ALERT(at_console, "out of named ammo slots\n");
return -1;
}
int iAdd = Q_min(iCount, iMax - m_rgAmmo[iAmmoIndex]);
if (iAdd < 1)
return iAmmoIndex;
m_rgAmmo[iAmmoIndex] += iAdd;
if (FStringNull(m_rgiszAmmo[iAmmoIndex])) {
m_rgiszAmmo[iAmmoIndex] = MAKE_STRING(szName);
}
return iAmmoIndex;
}
Теперь аммо хранит не в первой ячейке массива а "по человечески"
зы: я знаю что в веапонбокс можно упоковать больше чем одного оружие (в кс не юзается)
Добавлено спустя 15 минут 38 секунд:
вот наглядный пример как он вызывает путаницу
- Код: Выделить всё
stock WeaponBox_PackAmmo(const pWeaponBox, const iAmmoId, const iCount)
{
const MAX_AMMO_TYPES = 15
if (!(1 <= iAmmoId <= MAX_AMMO_TYPES) || iCount <= 0)
return
static const szAmmoTypes[MAX_AMMO_TYPES][] = {
"", "338Magnum", "762Nato", "556NatoBox", "556Nato", "buckshot", "45acp", "57mm",
"50AE", "357SIG", "9mm", "Flashbang", "HEGrenade", "SmokeGrenade", "C4"
}
set_member(pWeaponBox, m_WeaponBox_rgiszAmmo, szAmmoTypes[iAmmoId], 1 /*элемент*/)
set_member(pWeaponBox, m_WeaponBox_rgAmmo, iCount, 1 /*элемент*/)
#if defined PL_DEBUG
new szAmmoName[16]; get_member(pWeaponBox, m_WeaponBox_rgiszAmmo, szAmmoName, charsmax(szAmmoName), 1)
server_print("AmmoName: %s | AmmoID: %d | AmmoPacked: %d", szAmmoName, iAmmoId, iCount)
#endif
}