PI
The world on the edge of reality
1. Для системы склада, или как по другому его называют "тайник", нам потребуется добавить несколько #define в самое начало мода (Они служат для диалогов):
Названия могут быть свои, цифры от названий обозначают ID диалогов. Взял у себя такие большие, ибо писал всё это в скачанный мод и незнаю какие там ID диалогов.
2. Далее добавляем Пикап в OnGameModeInit:
3. Далее создаём саму команду для вызова диалога склада:
4. Далее идём в OnPlayerKeyStateChange, чтобы сделать вызов диалога на клавишу 'ALT':
5. Итак, создаём сами диалоги в OnDialogResponse:
Далее:
Тут думаю всё понятно, идём далее:
Аналогично и с наркотиками
Далее, диалоги, чтобы взять со склада:
Аналогично и для наркотиков:
* Примечение:
Чуть не забыл, необходимо добавить 2 переменный в PlayerInfo, в OnPlayerRegister, в OnPlayerLogin и в OnPlayerUpdate (Или у кого где)
В PlayerInfo:
OnPlayerRegister и в OnPlayerUpdate:
В OnPlayerLogin:
Если у кого будут вопросы, задавайте, если у кого-то будут баги, говорите, может какую-то переменную упустил.
Автор: Ross
PHP:
#define DIALOG_TSAVE 1000
#define DIALOG_TINFO 1001
#define DIALOG_TINPUT 1002
#define DIALOG_TOUTPUT 1003
#define DIALOG_TINMATS 1004
#define DIALOG_TINDRUGS 1005
#define DIALOG_TOUTMATS 1006
#define DIALOG_TOUTDRUGS 1007
2. Далее добавляем Пикап в OnGameModeInit:
PHP:
AddStaticPickup(1239,23,121.9291,-294.3183,1.5781,0); // 1239 - Модель пикапа, 23 - тип пикапа, 121.9291,-294.3183,1.5781 - координаты пикапа, 0 - виртуальны мир.
PHP:
if(strcmp(cmd, "/tsave", true) == 0) //Сама команда, название можете указать своё, но вызов диалога будет осуществляться нажатием клавиши 'ALT'
{
if(IsPlayerConnected(playerid))
{
if(IsPlayerInRangeOfPoint(playerid, 5.0, 121.9291,-294.3183,1.5781)) //Проверка на Координаты игрока (Можете указать те же, которые были указаны в координатах пикапа
{
ShowPlayerDialog(playerid,DIALOG_TSAVE,DIALOG_STYLE_LIST,"Выберите функцию из списка (Хранилище):","* Информация\n* Положить вещи в хранилище\n* Достать вещи из хранилища","ACCEPT","CANCEL"); //Сам диалог. DIALOG_TSAVE - ID диалога, который мы указали в #define, DIALOG_STYLE_LIST - Стиль (Тип) диалога. Далее идёт само меню
}
}
return 1;
}
PHP:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (newkeys == 1024) //ID Клавиши
{
OnPlayerCommandText(playerid,"/tsave"); //Какая команда будет вызываться при нажатии на клавишу
}
return 1;
}
PHP:
if(dialogid == DIALOG_TSAVE) //ID диалога из #define
{
if(response)
{
if(listitem == 0)
{
new dptMats = PlayerInfo[playerid][ptMats]; //Объявляем новые переменны для ptMats и ptDrugs (Их можно и не добавлять)
new dptDrugs = PlayerInfo[playerid][ptDrugs];
format(string,sizeof(string),"Количество Материалов на Складе: %d\n\nКоличество Наркотиков на Складе: %d", dptMats,dptDrugs);
ShowPlayerDialog(playerid,DIALOG_TINFO,DIALOG_STYLE_MSGBOX,"Информация о Складе",string,"ACCEPT","");
}
if(listitem == 1)
{
ShowPlayerDialog(playerid,DIALOG_TINPUT,DIALOG_STYLE_INPUT,"Положить вещи в Склад","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
if(listitem == 2)
{
ShowPlayerDialog(playerid,DIALOG_TOUTPUT,DIALOG_STYLE_INPUT,"Взять вещи из Склада","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
}
}
PHP:
DIALOG_TINPUT, DIALOG_TOUTPUT и т.д. в дальнейшем будут браться из #define, которые мы указали в самом начале
PHP:
if(dialogid == DIALOG_TINPUT)
{
if(response)
{
if(!strlen(inputtext)) //Если ничего не введено, то...
{
ShowPlayerDialog(playerid,DIALOG_TINPUT,DIALOG_STYLE_INPUT,"Положить вещи в Склад","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
else if(!strcmp(inputtext, "Материалы", true)) //Если введено Материалы, то...
{
ShowPlayerDialog(playerid,DIALOG_TINMATS,DIALOG_STYLE_INPUT,"Положить Материалы на Склад","Введите кол-во материалов, которое вы хотите положить на склад","ACCEPT","BACK");
}
else if(!strcmp(inputtext, "Наркотики", true))//Если введено Наркотики, то...
{
ShowPlayerDialog(playerid,DIALOG_TINDRUGS,DIALOG_STYLE_INPUT,"Положить Наркотики на Склад","Введите кол-во наркотиков, которое вы хотите положить на склад","ACCEPT","BACK");
}
else //Если введена какая-то чушь, то....
{
ShowPlayerDialog(playerid,DIALOG_TINPUT,DIALOG_STYLE_INPUT,"Положить вещи в Склад","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
}
else ShowPlayerDialog(playerid,DIALOG_TSAVE,DIALOG_STYLE_LIST,"Выберите функцию из списка (Хранилище):","* Информация\n* Положить вещи в хранилище\n* Достать вещи из хранилища","ACCEPT","CANCEL");
}
if(dialogid == DIALOG_TOUTPUT)
{
if(response)
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_TOUTPUT,DIALOG_STYLE_INPUT,"Взять вещи из Склада","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
else if(!strcmp(inputtext, "Материалы", true))
{
ShowPlayerDialog(playerid,DIALOG_TOUTMATS,DIALOG_STYLE_INPUT,"Взять Материалы со Склада","Введите кол-во материалов, которое вы хотите взять со склада","ACCEPT","BACK");
}
else if(!strcmp(inputtext, "Наркотики", true))
{
ShowPlayerDialog(playerid,DIALOG_TOUTDRUGS,DIALOG_STYLE_INPUT,"Взять Наркотики со Склада","Введите кол-во наркотиков, которое вы хотите взять на склада","ACCEPT","BACK");
}
else
{
ShowPlayerDialog(playerid,DIALOG_TOUTPUT,DIALOG_STYLE_INPUT,"Взять вещи из Склада","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
}
else ShowPlayerDialog(playerid,DIALOG_TSAVE,DIALOG_STYLE_LIST,"Выберите функцию из списка (Хранилище):","* Информация\n* Положить вещи в хранилище\n* Достать вещи из хранилища","ACCEPT","CANCEL");
}
PHP:
if(dialogid == DIALOG_TINMATS)
{
if(response)
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_TINMATS,DIALOG_STYLE_INPUT,"Положить Материалы на Склад","Введите кол-во материалов, которое вы хотите положить на склад","ACCEPT","BACK");
}
new input = strval(inputtext); //Объявляем переменной input введённый текст
if(input > PlayerInfo[playerid][pMats] || input < 1) //Если введённый текст больше реального кол-во материалов у персонажа, то будет писать об ошибке
{
ShowPlayerDialog(playerid,DIALOG_TINMATS,DIALOG_STYLE_INPUT,"Положить Материалы на Склад","У вас нету столько Материалов. Повторите попытку","ACCEPT","");
}
else
{
PlayerInfo[playerid][pMats] -= input; //Отнимаем наркотики
PlayerInfo[playerid][ptMats] += input; //Добавляем их на склад
format(string,sizeof(string),"* Вы успешно положили %d материалов на склад. Всего материалов: %d", input,PlayerInfo[playerid][ptMats]);
SendClientMessage(playerid,COLOR_WHITE, string); //Сообщение об успешной опреции
}
}
else ShowPlayerDialog(playerid,DIALOG_TINPUT,DIALOG_STYLE_INPUT,"Положить вещи в Склад","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
PHP:
if(dialogid == DIALOG_TINDRUGS)
{
if(response)
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_TINDRUGS,DIALOG_STYLE_INPUT,"Положить Наркотики на Склад","Введите кол-во наркотиков, которое вы хотите положить на склад","ACCEPT","BACK");
}
new input = strval(inputtext);
if(input > PlayerInfo[playerid][pDrugs] || input < 1)
{
ShowPlayerDialog(playerid,DIALOG_TINDRUGS,DIALOG_STYLE_INPUT,"Положить Наркотики на Склад","У вас нету столько Наркотиков. Повторите попытку","ACCEPT","");
}
else
{
PlayerInfo[playerid][pDrugs] -= input;
PlayerInfo[playerid][ptDrugs] += input;
format(string,sizeof(string),"* Вы успешно положили %d наркотиков на склад. Всего наркотиков: %d", input,PlayerInfo[playerid][ptDrugs]);
SendClientMessage(playerid,COLOR_WHITE, string);
}
}
else ShowPlayerDialog(playerid,DIALOG_TINPUT,DIALOG_STYLE_INPUT,"Положить вещи в Склад","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
PHP:
if(dialogid == DIALOG_TOUTMATS)
{
if(response)
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_TOUTMATS,DIALOG_STYLE_INPUT,"Взять Материалы со Склада","Введите кол-во материалов, которое вы хотите взять со склада","ACCEPT","BACK");
}
new input = strval(inputtext);
if(input > PlayerInfo[playerid][ptMats] || input < 1) //Если введёные цифры больше того, сколько на складе, выдаст ошибку
{
ShowPlayerDialog(playerid,DIALOG_TOUTMATS,DIALOG_STYLE_INPUT,"Взять Материалы со Склада","У вас нету столько Материалов на Складе. Повторите Попытку","ACCEPT","");
}
else
{
PlayerInfo[playerid][pMats] += input; //Прибавляем материалов
PlayerInfo[playerid][ptMats] -= input; //Отнимает их со склада
format(string,sizeof(string),"* Вы успешно взяли %d материалов со склада. Материалов Осталось: %d", input,PlayerInfo[playerid][ptMats]);
SendClientMessage(playerid,COLOR_WHITE, string); //Сообщение об успешной операции
}
}
else ShowPlayerDialog(playerid,DIALOG_TOUTPUT,DIALOG_STYLE_INPUT,"Взять вещи из Склада","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
Аналогично и для наркотиков:
PHP:
if(dialogid == DIALOG_TOUTDRUGS)
{
if(response)
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_TOUTDRUGS,DIALOG_STYLE_INPUT,"Взять Наркотики со Склада","Введите кол-во наркотиков, которое вы хотите взять на склада","ACCEPT","BACK");
}
new input = strval(inputtext);
if(input > PlayerInfo[playerid][ptDrugs] || input < 1)
{
ShowPlayerDialog(playerid,DIALOG_TOUTDRUGS,DIALOG_STYLE_INPUT,"Взять Наркотики со Склада","У вас нету столько Наркотиков на Складе. Повторите Попытку","ACCEPT","");
}
else
{
PlayerInfo[playerid][pDrugs] += input;
PlayerInfo[playerid][ptDrugs] -= input;
format(string,sizeof(string),"* Вы успешно взяли %d наркотиков со склада. Наркотиков Осталось: %d", input,PlayerInfo[playerid][ptDrugs]);
SendClientMessage(playerid,COLOR_WHITE, string);
}
}
else ShowPlayerDialog(playerid,DIALOG_TOUTPUT,DIALOG_STYLE_INPUT,"Взять вещи из Склада","Введите наименование вещи (Наркотики/Материалы)","DONE","BACK");
}
Чуть не забыл, необходимо добавить 2 переменный в PlayerInfo, в OnPlayerRegister, в OnPlayerLogin и в OnPlayerUpdate (Или у кого где)
В PlayerInfo:
PHP:
ptMats,
ptDrugs,
PHP:
format(var, 32, "tMaterials=%d\n",PlayerInfo[playerid][ptMats]);fwrite(hFile, var);
format(var, 32, "tDrugs=%d\n",PlayerInfo[playerid][ptDrugs]);fwrite(hFile, var);
PHP:
if( strcmp( key , "tMaterials" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][ptMats] = strval( val ); }
if( strcmp( key , "tDrugs" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][ptDrugs] = strval( val ); }
Автор: Ross
