McLuhan
Компетентный
Пишу для CRMP, а там версия последняя: 0.3e
Мне нужно ловить, когда игрок делает выстрел из любого оружия (вобщем полный аналог функции OnPlayerWeaponShot), но эта функция доступна с 0.3z. и обновлять количество этого оружия в инвентаре.
Я решил эту проблему с использованием OnPlayerUpdate, но думаю что буду погрешности всеровно, да и не хотелось бы его использовать в этих целях.
Может у кого есть какие соображения?
Моё решение:
Мне нужно ловить, когда игрок делает выстрел из любого оружия (вобщем полный аналог функции OnPlayerWeaponShot), но эта функция доступна с 0.3z. и обновлять количество этого оружия в инвентаре.
Я решил эту проблему с использованием OnPlayerUpdate, но думаю что буду погрешности всеровно, да и не хотелось бы его использовать в этих целях.
Может у кого есть какие соображения?
Моё решение:
PHP:
GiveWeapon(playerid, gunid, ammo, invslot)
{
new slot = GetSlotWeaponID(gunid);
if(slot == -1) return 1;
GivePlayerWeapon(playerid, gunid, ammo);
invinfo[playerid][invslot][i_value] += ammo;
invinfo[playerid][invslot][i_stuffid] = gunid;
WEAPON_INVSLOT[playerid][slot] = invslot;
return 1;
}
public OnPlayerUpdate(playerid)
{
for(new islot = 0; islot < INV_MAX_SLOT; islot++)
{
if(invinfo[playerid][islot][i_stuffid] < 1 || invinfo[playerid][islot][i_stuffid] > 46) continue;
new w = 0, a = 0, wslot = GetSlotWeaponID(invinfo[playerid][islot][i_stuffid]);
GetPlayerWeaponData(playerid, wslot, w, a);
printf("islot(%d), wslot(%d), weaponid(%d), w(%d), a(%d)", islot, wslot, invinfo[playerid][islot][i_stuffid], w, a);
if(invinfo[playerid][islot][i_value] == 0)
{
printf("i_value == 0 ====== ResetWeapon");
ResetWeapon(playerid, wslot);
}
if(a < 1) continue;
if(invinfo[playerid][islot][i_value] != a)
{
invinfo[playerid][islot][i_value] = a;
}
}
return 1;
}
