PDA

Просмотр полной версии : [Вопрос] Ограничение патронов.



Jackal
28.05.2016, 11:22
#define WeaponRestrict(%0,%1,%2) \
GetPlayerWeapon(%0) == %1 && GetPlayerAmmo(%0) > %2 && GivePlayerWeapon(%0, %1, -GetPlayerAmmo(%0) + %2)




case 0://Desert Eagle
{
if(WeaponRestrict(playerid, 24, 21)) return SCM(playerid, COLOR_GREY, "Превышен предел боеприпасов [Desert Eagle]");
if(GunInfo[g][gSlot][0] < 1)
{
SCM(playerid, COLOR_GREY, "В сейфе нет Desert Eagle.");
SaveGun(playerid);
return 1;
}
GunInfo[g][gSlot][0] -= 1;
GivePlayerWeapon(playerid, 24, 7);
SCM(playerid, COLOR_GREEN, "Вы взяли из сейфа: 1 обойму Desert Eagle.");
}


Здравствуйте!

Выставлено ограничение патронов для Desert Eagle "21" патрон.
Нужно, чтобы возможно было брать до 21 патрона, в случае превышения - выставить игроку 21 патрон.

Проблема:
Возможно брать до "28" патронов.
Только после того, как игрок получает 28 патронов и берет ещё 1 обойму, производится нужная проверка и игроку выставляется 21 патрон.

Jackal
28.05.2016, 11:52
Прошу прощения (иногда надо высыпаться после суточной смены)



#define WeaponRestrict(%0,%1,%2) \
GetPlayerWeapon(%0) == %1 && GetPlayerAmmo(%0) >= %2 && GivePlayerWeapon(%0, %1, -GetPlayerAmmo(%0) + %2)


">="

ziggi
28.05.2016, 12:21
Ужасный макрос, очень медленный и содержит в себе огромное количество потенциальных ошибок.

stock WeaponRestrict(playerid, weaponid, ammo)
{
if (GetPlayerWeapon(playerid) == weaponid && GetPlayerAmmo(playerid) >= ammo) {
return SetPlayerAmmo(playerid, weaponid, ammo);
}
return 0;
}

Не нужно то, что должно быть функцией, делать макросом.