Lineage |
Дата: Вторник, 26.06.2012, 01:47 | Сообщение # 1
|
Боец
Сообщений: 123
Статус: Offline
|
Краткий план разработки на ближайшее время:
Основа Мода. - Система Регистрации - Загрузка сохранения аккаунта. - Система Домов - Система Бизнесов - Система Транспорта - Система Банка.
Действие Первое. Нужные файлы, и настройка сервера:
Качаем последнюю версию сервера sa-mp с офф. сайта. http://team.sa-mp.com/files/samp03dsvr_R2_win32.zip Распаковываем сервер в любую удобную для вас папку. Открываем server.cfg, и меняем rcon_password changename, на свой пароль, из строки filterscripts, убираем все FS которые включены. Меняем gamemode, на new. Качаем последнюю версию инклуда mxINI. http://rghost.ru/35987201
Открываем папку pawno, в папке с вашим сервером, папку include, и ложем инклуд mxINI, в эту папку. Заходи в папку gamemodes, и удаляем все моды которые там есть ( для удобства ). Заходим в папку pawno, и открываем программу pawno.exe. Слева, в углу, нажимаем на кнопку new. Пред вами то, что в ближайшее время, будет нашим модом. Нажимаем F5, и нам предлагают выбрать папку, и имя будущего мода. Выбираем папку gamemodes, в папке с вашим сервером, и имя файла задаём new . Пробуем запустить мод, зайдя в папку с сервером, и запустим файл samp-server.exe . Если сервер запустился, мы всё сделали правильно, настройка сервера закончена.
Действие второе. Удаление лишнего из мода:
Открываем наш мод. Первое что бросается нам в глаза, это Code #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #else main() { print("\n----------------------------------"); print(" Blank Gamemode by your name here"); print("----------------------------------\n"); } #endif Вот это нам не нужно. Удаляем. Находим паблик Code public OnGameModeInit() { // Don't use these lines if it's a filterscript SetGameModeText("Blank Script"); AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; } И после него, вставляем Code main() { print("\n----------------------------------"); print(" Название вашего мода, у меня будет pawno.ru"); print("----------------------------------\n"); } В самом начале мода, мы можем видеть такую строку.
Если подумать головой, то можно понять что это подгрузка инклудов в мод. После него добавим наш инклуд:
Нажимаем F5, и компилируем мод, если всё прошло без ошибок, значит вы всё сделали правильно.
Находим строку Code SetGameModeText("Blank Script"); Эта строка, устанавливает название мода, которое будет видно в клиенте. Меняем его на своё. Code SetGameModeText("Pawno.ru Mode"); Компилируем мод, и.. мы закончили с подготовкой мода. Теперь нас ждёт система регистрации.
Действие Третье. Сохранение аккаунта.
Переходим к созданию того, чем мы будет пользоваться постоянно. Это данные о аккаунте. После строки с добавлением нашего инклуда, создаём масив, с информацией о игроке. Code enum pInfo { pPass[64],// Масив с паролем } new Player[MAX_PLAYERS][pInfo];
Теперь мы можем записать пароль, определённого игрока, чем мы сейчас и займёмся.
Опускаемся в самый конец мода, и создаём там, вот это:
Code stock SavePlayer(playerid) { new string[64];// Масив с путём для файла new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока format(string, sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения iniFile = ini_openFile(string);// Открываем файл по тому пути который указали. ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл ini_closeFile(iniFile);// Закрываем файл }
Нажимаем F5, и мод компилируется. Если ошибок нет, то вы сделали всё правильно. Теперь нам надо зайти в папку с сервером, открыть папку scriptfiles, и в ней добавить папку players. Сохранение готово.
Действие Четвёртое. Создание регистрации и загрузки игрока.
Для создания регистрации, надо узнать, есть ли игрок с таким именем на сервере, для начала нужно после объявления нашего инклуда, вставить следующее:
Code new PAccount[MAX_PLAYERS];// Есть аккаунт, или нет
Далее ищем паблик OnPlayerConnect. И в него добавляем:
Code new playername[MAX_PLAYER_NAME];// Масив для имени игрока new string[128];// Путь до папки с именем игрока GetPlayerName(playerid,playername,sizeof(playername));// Узнаём имя игрока format(string,sizeof(string),"players/%s.ini", playername);// Путь к файлу с аккаунтом if(fexist(string))// Проверка на файл, если он есть то выполняется следующее действие. { PAccount[playerid] = 1;// Аккаунт есть } else// Если файла с именем нет, то выполняется это действие. { PAccount[playerid] = 0;// Аккаунта нет }
Теперь ищем паблик, OnPlayerRequestClass, он покажет нам диалог с логином, или регистрацией, в него добавляем.
Code if(PAccount[playerid] == 1)// Если аккаунт есть { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. Стиль диалога выставляем на ввод текста. } else// Если аккаунта нет { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. Стиль диалога выставляем на ввод текста. }
Диалоги мы показали, но теперь надо заставить его работать. Для этого нам надо сделать функцию загрузки и регистрации игрока. Этим мы и займёмся. В конец мода, вставляем.
Code forward OnPlayerRegister(playerid, password[]); public OnPlayerRegister(playerid, password[])// Паблик регистрации { if(IsPlayerConnected(playerid)) { new string[64];// Масив с путём для файла new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения new iniFile = ini_createFile(string);// Создаём файл с именем игрока в папке players if(iniFile < 0)// Если Файла нет { iniFile = ini_openFile(string);// Открываем } if(iniFile >= 0)// Если файл есть { strmid(Player[playerid][pPass],password,0,strlen(password),255);// Присваиваем масиву pPass, значение password[] ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл ini_closeFile(iniFile);// Закрываем файл ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. } } return 1; }
Функция которая зарегистрирует игрока, готова, теперь функция логина. В конец мода, добавляем.
Code forward OnPlayerLogin(playerid,password[]); public OnPlayerLogin(playerid,password[]) { if(IsPlayerConnected(playerid))// Проверка на подключение игрока { new string[64];// Масив с путём для файла new pass[64];// Масив с паролем new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для загрузки new iniFile = ini_openFile(string);// Открываем файл ini_getString(iniFile,"Pass",pass,64);// Загружаем пароль if(strcmp(pass,password,true) == 0)// Если введёный пароль, соответсвует паролю при регистрации, то загружаем акк { ini_getString(iniFile,"Pass",Player[playerid][pPass],64);// Загружаем пароль ini_closeFile(iniFile);// Закрываем файл } else// Если пароль не верен.. { ini_closeFile(iniFile);// Закрываем файл ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. return 1; } SendClientMessage(playerid,0xFF00000,"Добро пожаловать на наш сервер");// Выводим игрок сообщение SpawnPlayer(playerid);// Спавним игрока } return 1; }
Функция регистрации есть, логина есть, осталось заставить их работать, для этого находим паблик OnDialogResponse и вставляем в него:
Code if(dialogid == 1)// Ид диалога Для Логина { if(response)// Если игрок нажал первую кнопку входа { if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. return 1; } new pass[64];// Масив с паролем strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога OnPlayerLogin(playerid,pass);// Запускаем паблик входа } else// Если игрок нажал Esc, вернём ему диалог { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. } } if(dialogid == 2)// Ид диалога для регистрации { if(response)// Если игрок нажал первую кнопку { if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. return 1; } new pass[64];// Масив с паролем strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога OnPlayerRegister(playerid,pass);// Запускаем паблик регистрации } else// Если игрок нажал Esc, вернём ему диалог { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. } }
http://rghost.ru/35992750 - new.pwn
Автор:Vovan228
ZFS
Сообщение отредактировал Lineage - Вторник, 26.06.2012, 01:52 |
|
|
|