Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- FileScrip name: Phone book system.
- Аuthor: St1muL
- */
- #include <a_samp>
- #include <mxINI05>
- //Дефайны:
- #undef MAX_PLAYERS
- #define MAX_PLAYERS (50)//Изменить на кол-во слотов сервера
- #define Loop(%0,%1) for(new %0; %0 != %1; %0++)//упрощенный цикл
- #define MAX_PBK 10//Максимальное число номеров в книжке
- #define MAX_PBK_LABEL 64//Максимум символов в пометке
- #define MAX_PBK_NUMBER 6//Максимум цифр в номере
- #define PBK_CMD "/phonebook"
- #define DLG_PBK 3757
- //Переменные:
- new PBK_Number[MAX_PLAYERS][MAX_PBK];//Номер телефона
- new PBK_Name[MAX_PLAYERS][MAX_PBK][MAX_PLAYER_NAME];//Владелец телефона
- new PBK_Label[MAX_PLAYERS][MAX_PBK][MAX_PBK_LABEL];//Пометка
- new PBK_Select[MAX_PLAYERS];//Выбор номера
- //Паблики:
- //Загрузка номеров
- forward PBK_Load(playerid);
- public PBK_Load(playerid)
- {
- //Cоздаём переменные
- new string[64], File;
- //Вводим путь к файлу
- format(string, sizeof(string), "phonebook/%s.ini", GN(playerid));
- //Открываем файл
- if (fexist(string))
- {
- //Если файл есть, открываем его
- File = ini_openFile(string);
- }
- else
- {
- //Если файла нет, создаём его
- File = ini_createFile(string);
- }
- //Если открыть/создать файл невозможно, выходим из загрузки
- if(File < 0)
- {
- return 1;
- }
- //Запускаем цикл чтобы загрузить данные
- Loop(pbkid, MAX_PBK)
- {
- //Загрузка номеров
- format(string, sizeof(string), "number_%d", pbkid);
- ini_getInteger(File, string, PBK_Number[playerid][pbkid]);
- //Загрузка имён
- format(string, sizeof(string), "name_%d", pbkid);
- ini_getString(File, string, PBK_Name[playerid][pbkid], MAX_PLAYER_NAME);
- //Загрузка пометок
- format(string, sizeof(string), "label_%d", pbkid);
- ini_getString(File, string, PBK_Label[playerid][pbkid], MAX_PBK_LABEL);
- }
- //Когда всё закончим, закрываем файл
- ini_closeFile(File);
- return 1;
- }
- forward PBK_Save(playerid);
- public PBK_Save(playerid)
- {
- //Cоздаём переменные
- new string[64], File;
- //Вводим путь к файлу
- format(string, sizeof(string), "phonebook/%s.ini", GN(playerid));
- //Открываем файл
- if (fexist(string))
- {
- //Если файл есть, открываем его
- File = ini_openFile(string);
- }
- else
- {
- //Если файла нет, создаём его
- File = ini_createFile(string);
- }
- //Если открыть/создать файл невозможно, выходим из загрузки
- if(File < 0)
- {
- return 1;
- }
- //Запускаем цикл чтобы загрузить данные
- Loop(pbkid, MAX_PBK)
- {
- //Загрузка номеров
- format(string, sizeof(string), "number_%d", pbkid);
- ini_setInteger(File, string, PBK_Number[playerid][pbkid]);
- //Загрузка имён
- format(string, sizeof(string), "name_%d", pbkid);
- ini_setString(File, string, PBK_Name[playerid][pbkid]);
- //Загрузка пометок
- format(string, sizeof(string), "label_%d", pbkid);
- ini_setString(File, string, PBK_Label[playerid][pbkid]);
- }
- //Когда всё закончим, закрываем файл
- ini_closeFile(File);
- return 1;
- }
- //Команда
- forward PBK_OnPlayerCommandText(playerid, cmdtext[]);
- public PBK_OnPlayerCommandText(playerid, cmdtext[])
- {
- if (strcmp(PBK_CMD, cmdtext, true, 10) == 0)
- {
- PBK_MainMenu(playerid);
- return 1;
- }
- return 0;
- }
- //Диалоги
- forward PBK_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
- public PBK_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- //Главный диалог
- case DLG_PBK:
- {
- //Ничего не делаем если нажали на "Выход"
- if(!response) return 1;
- //Запускаем новый диалог:
- PBK_Select[playerid] = listitem;
- //Выдаём следующее меню
- PBK_PhoneMenu(playerid);
- }
- //Диалог выбора действия
- case DLG_PBK+1:
- {
- //Отправляем в главное меню, если нажали на "Назад"
- if(!response) return PBK_MainMenu(playerid);
- new pbkid = PBK_Select[playerid];
- switch(listitem)
- {
- case 0:
- {
- //Если информация пустая:
- if(PBK_Number[playerid][pbkid] == 0 && !strlen(PBK_Name[playerid][pbkid]))
- {
- PBK_PhoneMenu(playerid);
- return 1;
- }
- //Если информация есть, то выводим меню с инфой
- PBK_Info(playerid);
- }
- case 1:
- {
- //Меню редактирования
- PBK_Edit(playerid);
- }
- }
- }
- //Диалог информации
- case DLG_PBK+2:
- {
- //Возвращаем назад
- PBK_PhoneMenu(playerid);
- }
- //Диалог редактирования
- case DLG_PBK+3:
- {
- //отправляем в выбор действия, если нажали на "Назад"
- if(!response) return PBK_PhoneMenu(playerid);
- new string[200];
- switch(listitem)
- {
- case 0:
- {
- format(string, sizeof(string), "{FFFFFF}Введите {FFCB77}номер{FFFFFF}:\n\
- {FFFFFF}( Пример: {FFCB77}684153 {FFFFFF})\n\
- {FFFFFF}( {FFCB77}1-%d {FFFFFF}символов )", MAX_PBK_NUMBER);
- ShowPlayerDialog(playerid, DLG_PBK+4, DIALOG_STYLE_INPUT, "Ввод номера", string, "Ввод", "Назад");
- }
- case 1:
- {
- format(string, sizeof(string), "{FFFFFF}Введите {FFCB77}имя владельца{FFFFFF}:\n\
- {FFFFFF}( Пример: {FFCB77}Vasya_Pupkin {FFFFFF})\n\
- {FFFFFF}( {FFCB77}1-%d {FFFFFF}символов )", MAX_PLAYER_NAME);
- ShowPlayerDialog(playerid, DLG_PBK+5, DIALOG_STYLE_INPUT, "Ввод имени владельца", string, "Ввод", "Назад");
- }
- case 2:
- {
- format(string, sizeof(string), "{FFFFFF}Введите {FFCB77}пометку{FFFFFF}:\n\
- {FFFFFF}( Пример: {FFCB77}Должен 1.000.000$ {FFFFFF})\n\
- {FFFFFF}( {FFCB77}1-%d {FFFFFF}символов )", MAX_PBK_LABEL);
- ShowPlayerDialog(playerid, DLG_PBK+6, DIALOG_STYLE_INPUT, "Ввод пометки", string, "Ввод", "Назад");
- }
- }
- }
- //Редактирование номера:
- case DLG_PBK+4:
- {
- //отправляем в редактирование, если нажали на "Назад"
- if(!response) return PBK_Edit(playerid);
- new pbkid = PBK_Select[playerid];
- if(!strlen(inputtext))
- {
- PBK_SetNumber(playerid, pbkid, 0);
- new string[50];
- format(string, sizeof(string), "{FFFFFF}Вы стёрли {FFCB77}номер");
- ShowPlayerDialog(playerid, DLG_PBK+7, DIALOG_STYLE_MSGBOX, "Ввод номера", string, "ОК", "");
- return 1;
- }
- PBK_SetNumber(playerid, pbkid, strval(inputtext));
- PBK_Edit(playerid);
- }
- case DLG_PBK+5:
- {
- //отправляем в редактирование, если нажали на "Назад"
- if(!response) return PBK_Edit(playerid);
- new pbkid = PBK_Select[playerid];
- if(!strlen(inputtext))
- {
- PBK_SetName(playerid, pbkid, "");
- new string[50];
- format(string, sizeof(string), "{FFFFFF}Вы стёрли {FFCB77}имя влательца");
- ShowPlayerDialog(playerid, DLG_PBK+7, DIALOG_STYLE_MSGBOX, "Ввод имения владельца", string, "ОК", "");
- return 1;
- }
- if(strlen(inputtext) > MAX_PLAYER_NAME)
- {
- PBK_Edit(playerid);
- return 1;
- }
- PBK_SetName(playerid, pbkid, inputtext);
- PBK_Edit(playerid);
- }
- case DLG_PBK+6:
- {
- //отправляем в редактирование, если нажали на "Назад"
- if(!response) return PBK_Edit(playerid);
- new pbkid = PBK_Select[playerid];
- if(!strlen(inputtext))
- {
- PBK_SetLabel(playerid, pbkid, "");
- new string[50];
- format(string, sizeof(string), "{FFFFFF}Вы стёрли {FFCB77}пометку");
- ShowPlayerDialog(playerid, DLG_PBK+7, DIALOG_STYLE_MSGBOX, "Ввод пометки", string, "ОК", "");
- return 1;
- }
- if(strlen(inputtext) > MAX_PBK_LABEL)
- {
- PBK_Edit(playerid);
- return 1;
- }
- PBK_SetLabel(playerid, pbkid, inputtext);
- PBK_Edit(playerid);
- }
- case DLG_PBK+7:
- {
- PBK_Edit(playerid);
- }
- }
- return 1;
- }
- forward PBK_SetNumber(playerid, pbkid, number);
- public PBK_SetNumber(playerid, pbkid, number)
- {
- PBK_Number[playerid][pbkid] = number;
- new string[64], File;
- //Вводим путь к файлу
- format(string, sizeof(string), "phonebook/%s.ini", GN(playerid));
- //Открываем файл
- if (fexist(string))
- {
- //Если файл есть, открываем его
- File = ini_openFile(string);
- }
- else
- {
- //Если файла нет, создаём его
- File = ini_createFile(string);
- }
- //Если открыть/создать файл невозможно, выходим из загрузки
- if(File < 0)
- {
- return 1;
- }
- format(string, sizeof(string), "number_%d", pbkid);
- ini_setInteger(File, string, PBK_Number[playerid][pbkid]);
- //Когда всё закончим, закрываем файл
- ini_closeFile(File);
- return 1;
- }
- forward PBK_SetName(playerid, pbkid, name[]);
- public PBK_SetName(playerid, pbkid, name[])
- {
- format(PBK_Name[playerid][pbkid], MAX_PLAYER_NAME, name);
- new string[64], File;
- //Вводим путь к файлу
- format(string, sizeof(string), "phonebook/%s.ini", GN(playerid));
- //Открываем файл
- if (fexist(string))
- {
- //Если файл есть, открываем его
- File = ini_openFile(string);
- }
- else
- {
- //Если файла нет, создаём его
- File = ini_createFile(string);
- }
- //Если открыть/создать файл невозможно, выходим из загрузки
- if(File < 0)
- {
- return 1;
- }
- format(string, sizeof(string), "name_%d", pbkid);
- ini_setString(File, string, PBK_Name[playerid][pbkid]);
- //Когда всё закончим, закрываем файл
- ini_closeFile(File);
- return 1;
- }
- forward PBK_SetLabel(playerid, pbkid, label[]);
- public PBK_SetLabel(playerid, pbkid, label[])
- {
- format(PBK_Label[playerid][pbkid], MAX_PBK_LABEL, label);
- new string[64], File;
- //Вводим путь к файлу
- format(string, sizeof(string), "phonebook/%s.ini", GN(playerid));
- //Открываем файл
- if (fexist(string))
- {
- //Если файл есть, открываем его
- File = ini_openFile(string);
- }
- else
- {
- //Если файла нет, создаём его
- File = ini_createFile(string);
- }
- //Если открыть/создать файл невозможно, выходим из загрузки
- if(File < 0)
- {
- return 1;
- }
- format(string, sizeof(string), "label_%d", pbkid);
- ini_setString(File, string, PBK_Label[playerid][pbkid]);
- //Когда всё закончим, закрываем файл
- ini_closeFile(File);
- return 1;
- }
- //Построение главного меню
- forward PBK_MainMenu(playerid);
- public PBK_MainMenu(playerid)
- {
- //Создаём переменные
- new string[(MAX_PLAYER_NAME + MAX_PBK_NUMBER + 60) * MAX_PBK];//(Имя игрока+номер+доп-ные сиволы)*Максимальной кол-во номеров
- //Запускаем цикл для построения меню
- Loop(pbkid, MAX_PBK)
- {
- //Автоматически переходим на другую строку
- if(pbkid > 0)
- {
- format(string, sizeof(string), "%s\n", string);
- }
- //Строим меню
- if(PBK_Number[playerid][pbkid] == 0)
- {
- format(string, sizeof(string), "%s{6f6f6f}Номер: [ - ].", string);
- }
- else if(PBK_Number[playerid][pbkid] > 0)
- {
- format(string, sizeof(string), "%sНомер: [ {FFCB77}%d {FFFFFF}].", string, PBK_Number[playerid][pbkid]);
- }
- if(strlen(PBK_Name[playerid][pbkid]) < 3)
- {
- format(string, sizeof(string), "%s {6f6f6f}Владелец: [ - ]", string);
- }
- else if(strlen(PBK_Name[playerid][pbkid]) >= 3)
- {
- format(string, sizeof(string), "%s Владелец: [ {FFCB77}%s {FFFFFF}]", string, PBK_Name[playerid][pbkid]);
- }
- //Выводим диалог игроку
- ShowPlayerDialog(playerid, DLG_PBK, DIALOG_STYLE_LIST, "Телефонная книжка", string, "Выбор", "Выход");
- }
- return 1;
- }
- //Построение меню действия
- forward PBK_PhoneMenu(playerid);
- public PBK_PhoneMenu(playerid)
- {
- //Создаём переменные
- new string[60], caption[MAX_PLAYER_NAME+MAX_PBK_NUMBER], pbkid = PBK_Select[playerid];
- //!strlen(PBK_Label[playerid][pbkid])
- //Строим меню действия
- if(PBK_Number[playerid][pbkid] == 0 && !strlen(PBK_Name[playerid][pbkid]))
- {
- format(string, sizeof(string), "Информация ( {FFCB77}Пусто {FFFFFF})");
- }
- else
- {
- format(string, sizeof(string), "Информация ( {FFCB77}Доступно {FFFFFF})");
- }
- format(string, sizeof(string), "%s\nРедактирование", string);
- //Вписываем кого выбрали
- format(caption, sizeof(caption), "%d - %s", PBK_Number[playerid][pbkid], PBK_Name[playerid][pbkid]);
- //Выводим диалог
- ShowPlayerDialog(playerid, DLG_PBK+1, DIALOG_STYLE_LIST, caption, string, "Выбор", "Назад");
- return 1;
- }
- forward PBK_Info(playerid);
- public PBK_Info(playerid)
- {
- //Создаём переменные
- new string[MAX_PLAYER_NAME+MAX_PBK_NUMBER+MAX_PBK_LABEL+100], pbkid = PBK_Select[playerid];
- //Вписываем номер телефона:
- if(PBK_Number[playerid][pbkid] == 0)
- {
- format(string, sizeof(string), "{FFFFFF}Номер: {FFCB77}Не указан");
- }
- else if(PBK_Number[playerid][pbkid] > 0)
- {
- format(string, sizeof(string), "{FFFFFF}Номер: {FFCB77}%d", PBK_Number[playerid][pbkid]);
- }
- //Вписываем владельца:
- if(!strlen(PBK_Name[playerid][pbkid]))
- {
- format(string, sizeof(string), "%s\n{FFFFFF}Владелец: {FFCB77}Не указан", string);
- }
- else if(strlen(PBK_Name[playerid][pbkid]) > 0)
- {
- format(string, sizeof(string), "%s\n{FFFFFF}Владелец: {FFCB77}%s", string, PBK_Name[playerid][pbkid]);
- }
- //Вписываем пометку:
- if(!strlen(PBK_Label[playerid][pbkid]))
- {
- format(string, sizeof(string), "%s\n{FFFFFF}Пометка: {FFCB77}Не указана", string);
- }
- else if(strlen(PBK_Label[playerid][pbkid]) > 0)
- {
- format(string, sizeof(string), "%s\n{FFFFFF}Пометка: {FFCB77}%s", string, PBK_Label[playerid][pbkid]);
- }
- //Выводим диалог
- ShowPlayerDialog(playerid, DLG_PBK+2, DIALOG_STYLE_MSGBOX, "Информация", string, "Назад", "");
- return 1;
- }
- forward PBK_Edit(playerid);
- public PBK_Edit(playerid)
- {
- //Создаём переменные
- new string[MAX_PLAYER_NAME+MAX_PBK_NUMBER+MAX_PBK_LABEL+100], pbkid = PBK_Select[playerid];
- //Вписываем номер телефона:
- if(PBK_Number[playerid][pbkid] == 0)
- {
- format(string, sizeof(string), "Номер: {FFCB77}Не указан");
- }
- else if(PBK_Number[playerid][pbkid] > 0)
- {
- format(string, sizeof(string), "Номер: {FFCB77}%d", PBK_Number[playerid][pbkid]);
- }
- //Вписываем владельца:
- if(!strlen(PBK_Name[playerid][pbkid]))
- {
- format(string, sizeof(string), "%s\nВладелец: {FFCB77}Не указан", string);
- }
- else if(strlen(PBK_Name[playerid][pbkid]) > 0)
- {
- format(string, sizeof(string), "%s\nВладелец: {FFCB77}%s", string, PBK_Name[playerid][pbkid]);
- }
- //Вписываем пометку:
- if(!strlen(PBK_Label[playerid][pbkid]))
- {
- format(string, sizeof(string), "%s\nПометка: {FFCB77}Не указана", string);
- }
- else if(strlen(PBK_Label[playerid][pbkid]) > 0)
- {
- //Если в пометке меньше 25 символов, вставляем полностью
- if(strlen(PBK_Label[playerid][pbkid]) < 25)
- {
- format(string, sizeof(string), "%s\nПометка: {FFCB77}%s", string, PBK_Label[playerid][pbkid]);
- }
- //Если в пометке больше 25 символов, укорачиваем до 24 и добавляем "..."
- else
- {
- new label[32];
- strmid(label, PBK_Label[playerid][pbkid], 0, 24);
- format(label, sizeof(label), "%s...", label);
- format(string, sizeof(string), "%s\nПометка: {FFCB77}%s", string, label);
- }
- }
- //Выводим диалог
- ShowPlayerDialog(playerid, DLG_PBK+3, DIALOG_STYLE_LIST, "Редактирование", string, "Выбор", "Назад");
- return 1;
- }
- //Стоки:
- stock GN(playerid)
- {
- new pName[MAX_PLAYER_NAME];
- GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
- return pName;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- PBK_Load(playerid);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- PBK_Save(playerid);
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- PBK_OnPlayerCommandText(playerid, cmdtext);
- return 0;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- case DLG_PBK .. DLG_PBK+7:
- {
- PBK_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
- return 1;
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement