PDA

Просмотр полной версии : [Вопрос] Уходят в минус материалы фракций



Andrik851
05.04.2019, 09:56
Доброго времени суток !
Подскажите пожалуйста какой нужно прописать параметр в код чтобы при взятии фракцией оружия материалы не уходили в минус

код:



case 0:
{
if(GetPlayerWeapon(playerid) == 24 && GetPlayerAmmo(playerid) >= 75) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
GiveWeapon(playerid, 24, 75);
DisablePlayerCheckpoint(playerid);
Mats[1] -=75;
SetOtherInt("lspdmats", Mats[1]);
Action(playerid, "взял Desert Eagle из шкафчика");
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}

Xeno
05.04.2019, 14:14
Я так понимаю, что у тебя все оружие по 75 матов, то добавь


if(GetPlayerWeapon(playerid) == 24 && GetPlayerAmmo(playerid) >= 75) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
//Вот эту проверку
if((Mats[1]-75) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Недостаточно материалов, чтобы взять оружие.");

Andrik851
05.04.2019, 15:00
Я так понимаю, что у тебя все оружие по 75 матов, то добавь


if(GetPlayerWeapon(playerid) == 24 && GetPlayerAmmo(playerid) >= 75) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
//Вот эту проверку
if((Mats[1]-75) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Недостаточно материалов, чтобы взять оружие.");


Нет у меня на каждое оружие разные маты 75 150 200

Xeno
05.04.2019, 16:57
Понял, делай значит в остальных проверку и устанавливай вместо 75 нужное число. В case 1, case 2 и т.д.

if((Mats[1]-150) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Недостаточно материалов, чтобы взять оружие.");

if((Mats[1]-200) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Недостаточно материалов, чтобы взять оружие.");

Andrik851
05.04.2019, 17:24
Понял, делай значит в остальных проверку и устанавливай вместо 75 нужное число. В case 1, case 2 и т.д.

if((Mats[1]-150) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Недостаточно материалов, чтобы взять оружие.");

if((Mats[1]-200) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Недостаточно материалов, чтобы взять оружие.");

я понял спасибо просто всмотрелся в проверку и догался что можно исправить числовое значение на нужное

- - - Добавлено - - -

Сделал как вы и посоветовали но оружие всеровно берется с заявленными в коде патронами
у меня 26 материалов а автомат со 150 патронами взялся выводится только сообщении что нет материалов а так все берется

и еще такой вопрос подскажите пожалуйста у меня база обновляется только после выхода из игры или рестарте сервера может быть есть какойто таймер который делает запрос в базу для обновления

Xeno
05.04.2019, 17:51
Можешь полностью case1 скинуть, я так понимаю он ак выдает со 150 патронами

Andrik851
05.04.2019, 18:04
вот полностью весь диалог



case D_GUNS://боекомплект полиция
{
if(response)
{
switch(listitem)
{
case 0:
{
if(GetPlayerWeapon(playerid) == 24 && GetPlayerAmmo(playerid) >= 75) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
GiveWeapon(playerid, 24, 75);
if((Mats[1]-75) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] На складе нет боеприпасов.");
DisablePlayerCheckpoint(playerid);
Mats[1] -=75;
SetOtherInt("lspdmats", Mats[1]);
Action(playerid, "взял Desert Eagle из шкафчика");
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}
case 1:
{
if(GetPlayerWeapon(playerid) == 30 && GetPlayerAmmo(playerid) >= 150) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
GiveWeapon(playerid, 30, 150);
if((Mats[1]-150) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] На складе нет боеприпасов.");
DisablePlayerCheckpoint(playerid);
Mats[1] -=150;
SetOtherInt("lspdmats", Mats[1]);
Action(playerid, "взял AK-47 из шкафчика");
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}
case 2:
{
if(GetPlayerWeapon(playerid) == 29 && GetPlayerAmmo(playerid) >= 200) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
GiveWeapon(playerid, 29, 200);
if((Mats[1]-200) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] На складе нет боеприпасов.");
DisablePlayerCheckpoint(playerid);
Mats[1] -=200;
SetOtherInt("lspdmats", Mats[1]);
Action(playerid, "взял MP5 из шкафчика");
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}
case 3:
{
SetHealth(playerid, 100);
SetArmour(playerid, 100);
Action(playerid, "взял бронежилет из шкафчика");
SetPlayerAttachedObject(playerid, 3,19142, 1, 0.0, 0.056, 0.0, 0, 0, 0,1.3,1.3,1.1);
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}
case 4:
{
if(GetPlayerWeapon(playerid) == 3) return SendClientMessage(playerid, COLOR_GREY, "[INFO] У Вас уже есть дубинка.");
GiveWeapon(playerid, 3, 1);
if((Mats[1]- 1) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] На складе нет боеприпасов.");
DisablePlayerCheckpoint(playerid);
Mats[1] -=1;
SetOtherInt("lspdmats", Mats[1]);
Action(playerid, "взял дубинку из шкафчика");
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}
case 5:
{
if(GetPlayerWeapon(playerid) == WEAPON_POLICE) return SendClientMessage(playerid, COLOR_GREY, "[INFO] У Вас уже есть балончик.");
GiveWeapon(playerid,WEAPON_POLICE,250);
Action(playerid, "взял балончик из шкафчика");
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}
case 6:
{
if(Shit[playerid] == 1) return SendClientMessage(playerid, COLOR_GREY, "[INFO] У Вас уже есть щит, используйте /shieldtake , чтобы снять его.");
SetPlayerAttachedObject(playerid, 6, 18637, 14, 0.0, 0.0, 0.0, 0.0, 180.0, 180.0);
Action(playerid, "взял щит из шкафчика");
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}
}
}
}


- - - Добавлено - - -

он выдает все что запросишь

Xeno
05.04.2019, 18:11
Смотри, потому что ты поставил проверку ниже выдачи оружия:


GiveWeapon(playerid, 30, 150);// Сначала выдаем
if((Mats[1]-150) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] На складе нет боеприпасов."); // потом проверяем
DisablePlayerCheckpoint(playerid);

Делай везде вот так


if(GetPlayerWeapon(playerid) == 24 && GetPlayerAmmo(playerid) >= 75) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
else if((Mats[1]-75) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] На складе нет боеприпасов.");
GiveWeapon(playerid, 24, 75);
//остальной код

Andrik851
05.04.2019, 18:25
Смотри, потому что ты поставил проверку ниже выдачи оружия:


GiveWeapon(playerid, 30, 150);// Сначала выдаем
if((Mats[1]-150) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] На складе нет боеприпасов."); // потом проверяем
DisablePlayerCheckpoint(playerid);

Делай везде вот так


if(GetPlayerWeapon(playerid) == 24 && GetPlayerAmmo(playerid) >= 75) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
else if((Mats[1]-75) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] На складе нет боеприпасов.");
GiveWeapon(playerid, 24, 75);
//остальной код


Все нормально работает

- - - Добавлено - - -

а как насчет базы можно как то это решить или это просто текст который мне показывает количесто материалов на складе не меняется

Xeno
05.04.2019, 18:41
Используй
Update3DTextLabelText(mylabel, 0xFFFFFFFF, "текст");

В предыдущей теме ты их создавал.


format(string, 60, "Боеприпасы: {FF9900}%i{ffffff} шт.", Mats[1]); //police
tPickup[34] = Create3DTextLabel(string,0xFFFFFFFF, 2562.8242, -2423.3005, 22.0044+0.5,5.0, 0, 0);

А обновлять будешь так:


format(string, 60, "Боеприпасы: {FF9900}%i{ffffff} шт.", Mats[1]); //police
Update3DTextLabelText(tPickup[34], 0xFFFFFFFF, string);


Делай обновление 3д текста сразу после взятия ганов и все.

Andrik851
05.04.2019, 18:45
это текст который будет отображать материалов на складе

Xeno
05.04.2019, 18:47
Я написал на той странице как обновлять надо. Пробуй переделывать под нужный 3д текст.

Andrik851
05.04.2019, 18:51
чтото я не понял мне нужно последний код вставить в case где берется оружие которое до этого делали

- - - Добавлено - - -

ты только не обижайся мне 9 лет и я пытаюсь этому научится что-то умею а что-то и нет вот и прошу здесь помощи и советов

Xeno
05.04.2019, 18:58
Да, нужно после того как взяли оружие вставить тот код.

Andrik851
05.04.2019, 19:04
Да, нужно после того как взяли оружие вставить тот код.

как я понял нужно сделать вот таким образом



case 0:
{
if(GetPlayerWeapon(playerid) == 24 && GetPlayerAmmo(playerid) >= 75) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Вы не можете унести больше оружия.");
else if((Mats[1]-75) < 0) return SendClientMessage(playerid, COLOR_GREY, "[INFO] Нет боеприпасов на складе.");
GiveWeapon(playerid, 24, 75);
DisablePlayerCheckpoint(playerid);
Mats[1] -=75;
SetOtherInt("lspdmats", Mats[1]);
Action(playerid, "взял Desert Eagle из шкафчика");
format(string, 60, "БОЕПРИПАСОВ: {FF9900}%i{ffffff} шт.", Mats[1]); //police
Update3DTextLabelText(tPickup[34], 0xFFFFFFFF, string);
ShowPlayerDialog(playerid, D_GUNS, DIALOG_STYLE_LIST, "Боекомплект полиции", "\
{FFFFF0}1. Взять {CD5C5C}Desert Deagle\n\
{FFFFF0}2. Взять {CD5C5C}AK-47\n\
{FFFFF0}3. Взять {CD5C5C}MP5\n\
{FFFFF0}4. Взять {CD5C5C}бронежилет\n\
{FFFFF0}5. Взять {CD5C5C}дубинку\n\
{FFFFF0}6. Взять {CD5C5C}газовый балончик\n\
{FFFFF0}7. Взять {CD5C5C}щит", "Выбрать", "Отмена");
}

Xeno
05.04.2019, 19:07
Да, проверь.

Andrik851
05.04.2019, 19:10
смотри а с этим моим что нужно сделать удалить или оставить



format(string, 60, "Боеприпасы: {FF9900}%i{ffffff} шт.", Mats[1]); //police
tPickup[34] = Create3DTextLabel(string,0xFFFFFFFF, 2562.8242, -2423.3005, 22.0044+0.5,5.0, 0, 0);


там ты еще самый первый код написал что нужно чтото заменить

Xeno
05.04.2019, 19:15
Это ты его создавал, это оставь.


format(string, 60, "Боеприпасы: {FF9900}%i{ffffff} шт.", Mats[1]); //police
tPickup[34] = Create3DTextLabel(string,0xFFFFFFFF, 2562.8242, -2423.3005, 22.0044+0.5,5.0, 0, 0);

И по идее ничего больше не нужно делать, и обновление ты уже вставил, если ошибок нету, то проверяй обновление.

Andrik851
05.04.2019, 19:54
Спасибо огромное все работает

- - - Добавлено - - -

Сможешь мне написать команду чтобы армейцы со своего склада загружали патроны и развозили по организациям.Я в долгу не останусь даже поддержу денежкой

Xeno
05.04.2019, 21:03
Отписал в лс тебе.