PDA

Просмотр полной версии : [Вопрос] Обнулине оружия



Albert
07.01.2015, 17:27
Я придумал интересное решение для сохранения оружия после выхода и сильного античита на оружие.
Всё оружие которое игрок получает сохраняется в его базу данных.
Чтобы взять оружие наруки нужно "Достать обойму из разгрузки). Т. е. игрок нажимает Y. Выводится диалог с выбором оружия которое нужно зарядить. Если в "Разгрузке" оружие есть, то оно зарядится (1 обойма), сработает анимация и т. д.

Я хочу чтобы патронов нельзя было иметь "на руках" больше чем 1 обойма. Античит заключается в том что проверяет сколько у игрока на руках патронов. Если больше одной обоймы - кикает/банит и т. д.

Т. е. когда игрок заряжает дигл, то ему даётся 7 патронов. Второй раз заряжает и даётся вновь +7 патронов. Т, е. если он не потратил их, то будет уже 14 патронов.

Как жаль что нет команды SetPlayerWeapon. Чтобы устанавливало значение, а не добавляло.

Если я вначале ставлю -7 патронов, а потом выдаю 7 патронов, то как быть если игрок потратил патроны? У него становится патронов -7. Затем +7 и того при второй зарядке патронов 0, хотя зарядил новую обойму.

Я придумал выход из этой ситуации. Сделал систему "Разряжания оружия". Т. е. если игрок зарядил 1 обойму, то он не сможет зарядить вторую пока не разрядит.

Разрядка подразумевает обнуление количества патрон которое у игрока не на руках, а вообще при нём.

Т. е. игрок пострелял и у него осталось 3 патрона. Пистолет в руках не держит. Спрятал в карман. А для разряжания нужно обнулить эти патроны. Как жаль что нет команды "УСТАНОВИТЬ" колличество, а лишь прибавить либо отнять. Тут нужен сканер патронов.

Это функция GetPlayerWeaponData(playerid, слот, Ид оружия, колличество патронов);

Проблемма в том, что у меня не получается ею воспользоваться. Я пытаюсь сделать так:
Хочу сканировать сколько у игрока осталось патронов дигла и их отнять.

new ammo; // переменная, которая будет хранить колличество патронов в дигле
GetPlayerWeaponData(playerid, 2, 24, ammo); // сканирую игрока, второй солт, дигл и колличество патронов записывается в переменную

GivePlayerWeapon(playerid,24,-ammo); // Отнимается то количество патронов, которое было у игрока. Ведь если загнать количество в минус, то так и будет бегать с оружием в минусе. Ведь нет команды "УСТАНОВИТЬ", а не выдать количество патронов.

Выдаёт ошибку


error 035: argument type mismatch (argument 3)

На строку


GetPlayerWeaponData(playerid, 2, 24, ammo);

Подскажите как мне лучше поступить? Может вы мне подскажите создать STOCK который будет обнулять отдельное оружие.
Я использую только следующее оружие и мне не предётся делать систему разрядки. Просто вызов стока поставлю в заряжание дабы он обнулял прежде чем выдать новую обойму. Научите меня пожалуйста пользоватьс функцией GetPlayerWeaponData чтобы сканировать только определённое оружие.
Дигл, кольт, шотган, спас12, МП5, АК, М4, Рифл, Снайперка, РПГ

Quman
07.01.2015, 18:13
С данной функцией еще не разбирался, попробуй что нибудь придумать с функцией.

GetPlayerAmmo(playerid);

Albert
07.01.2015, 18:49
Перед обнулением всего оружия я сделал скрипт, который будет сохранять патроны имеющегося оружия в базу данных игрока. Сделал сток в конце. В нужный паблик ставлю его вызов. Ошибок не выдаёт. Однако оружие обнуляется, но не сохраняется.


начало стока:


stock SetPlayerReload(playerid) // Разрежание в разгрузку
{
new ammo;
new weap;
new slot;
GetPlayerWeaponData(playerid, slot, weap, ammo);
if (weap == 22) // если ид оружия кольт, то
{
pInfo[playerid][pRcolt] += ammo; // сохранение колличество патронов для кольта

}


Вот так в паблике:


SetPlayerReload(playerid); // вызываю сток
ResetPlayerWeapons(playerid); // анулирую всё оружие в руках
патроны не сохраняются в pRcolt. Не знаешь в чём может быть дело?

Quman
07.01.2015, 19:01
Проверь сохранение кольта.