PDA

Просмотр полной версии : [Мануал] Покупка оружия для банд (копия Vida-Virtual)



Mr_David
21.04.2014, 21:35
В данном уроке расскажу как сделать покупку оружия для банды идентично серверу Vida-Virtual.

Сначала мы объявим переменную (добавим ко всем new):

new pickup_aztecgun;

Создадим #define:

#define DIALOG_GUN 19851 // заменяет название диалога на его ид

Теперь создадим пикап на респе банды(Вставляем в public OnGameModeInit):

pickup_aztecgun = CreatePickup(1254,23,x,y,z);
aztecgun - название переменной объявленной в new (В начале)
CreatePickup - Функция создание пикапа
1254 - Ид пикапа(Тут можете выбрать любой)
23 - Тип пикапа (Наступаешь на пикап и он не пропадает а так же остаётся и работает дальше)
x - Это координаты пикапа по оси x
y - Это координаты пикапа по оси y
z - Это координаты пикапа по оси z



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

В public OnPlayerPickupPickup:

if(pickupid == pickup_aztecgun) // Если игрок на пикапе
{
if(PlayerInfo[playerid][pLeader] == 15 || PlayerInfo[playerid][pMember] == 15) // И он состоит в ацтеках (15 - ид фракции)
return ShowPlayerDialog(playerid,DIALOG_GUN,DIALOG_STYLE_LIST,"Выбор оружия","\nDeagle(24) \t\t\t{A020F0}2500$\nM4A1(250) \t\t\t{A020F0}7000$\nKnife \t\t\t{A020F0}50$\nShotGun(25) \t\t\t{A020F0}15000$\nMicro SMG(500) \t\t\t{A020F0}5000$","Далее","Нет"); // Выводим диалог с выбором
// Если игрок не в ацтеках, выводим сообщение
return SendClientMessage(playerid, COLOR_LIGHTRED2,"* Вы не состоите в Ацтеках!");
}
А теперь создадим сам диалог(public OnDialogResponse):


if(dialogid == DIALOG_GUN)
{
if(response == 0)
return 1;
switch(listitem)
{
case 0:
{
if(GetPlayerMoney(playerid) >= 2500)
{
GivePlayerMoney(playerid,-2500);
ServerGivePlayerWeapons(playerid,24,24);
return SendClientMessage(playerid,COLOR_GREEN,"Вы купили {A020F0}Deagle");
}
else return SendClientMessage(playerid,COLOR_BLUE,"Недостаточно денег");
}
case 1:
{
if(GetPlayerMoney(playerid) >= 6000)
{
GivePlayerMoney(playerid,-6000);
ServerGivePlayerWeapons(playerid,31,250);
return SendClientMessage(playerid,COLOR_GREEN,"Вы купили {A020F0}M4A1");
}
else return SendClientMessage(playerid,COLOR_BLUE,"Недостаточно денег");
}
case 2:
{
if(GetPlayerMoney(playerid) >= 50)
{
GivePlayerMoney(playerid,-50);
ServerGivePlayerWeapons(playerid,4,1);
return SendClientMessage(playerid,COLOR_GREEN,"Вы купили {A020F0}Нож");
}
else return SendClientMessage(playerid,COLOR_BLUE,"Недостаточно денег");
}
case 3:
{
if(GetPlayerMoney(playerid) >= 15000)
{
GivePlayerMoney(playerid,-15000);
ServerGivePlayerWeapons(playerid,25,25);
return SendClientMessage(playerid,COLOR_GREEN,"Вы купили {A020F0}Shotgun");
}
else return SendClientMessage(playerid,COLOR_BLUE,"Недостаточно денег");
}
case 4:
{
if(GetPlayerMoney(playerid) >= 5000)
{
GivePlayerMoney(playerid,-5000);
ServerGivePlayerWeapons(playerid,28,500);
return SendClientMessage(playerid,COLOR_GREEN,"Вы купили {A020F0}Micro SMG");
}
else return SendClientMessage(playerid,COLOR_BLUE,"Недостаточно денег");
}
}
return 1;
}
Теперь подробней:


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

Автор: Mr_David (http://pro-pawn.ru/member.php?64-Mr_David)

Unreal
13.08.2015, 14:27
пожалуйста скрин добавьте

$continue$
13.08.2015, 14:44
GetPlayerMoney(playerid) в переменную, религия не разрешает записать?

L0ndl3m
13.08.2015, 16:48
Для чего? Кейс срабатывает один раз.

Desulaid
14.08.2015, 14:04
Мне кажется, что все не так поняли DC, когда он писал про перенос return'а, он имел в виду, что когда условие длинное и не надо было бы листать в бок. А если оно не так уж и велико, то можно обойтись и в одну строку :)