Форум Pawn.Wiki - Воплоти мечту в реальность!: №1 Создание Deathmatch мода с new.pwn - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
№1 Создание Deathmatch мода с new.pwn
Оценка: ***** 1 Голосов

#1
Пользователь офлайн   Impulse99 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Здравствуйте пользователи и гости pawn-wiki сегодня я хочу написать урок о том как же создать Deathmatch мод c new.pwn урок №1
Для начала я думаю нам понадобиться сделать регистрацию игроков, чтобы при повторном входе на сервер, загружались данные такие как: пароль, админка, деньги, фраги.
Цель мода указана на wikipedia и наш мод будет называться Red Deathmatch.
Скачиваем чистый сервер на официальном сайте версии SA-MP 0.3z Windows Server или SA-MP 0.3z Linux Server (x86)
Создаем где удобно папку с сервером, с вашим название, допустим у меня будет назваться папка SERVER на диске C по пути C:\SERVER и извлекаем всё с архива в вашу папку.
Открываем файл server.cfg текстовым редактором, ищем rcon_password и меняем пароль вместо слова changeme, ищем filterscripts и убираем справа от него все строки, ищем gamemode0 grandlarc 1 и переделываем на gamemode0 RDM 1 сохраняем файл.
Удаляем всё с папки gamemodes чтобы не мешалось, заходим в папку pawno и открываем компилятор pawno.exe.
Нажимаем комбинацию клавиш Ctrl+N, создался new.pwn, убираем всё до строки #include <a_samp> и начиная от #if defined FILTERSCRIPT убрать до #else и найти #endif и тоже убрать, чтобы убрать функции filterscripts.
Скачаем инклуд: https://pawn.wiki/in...ic/12399-mxini/
Подключаем инклуд mxINI после #include <a_samp> добавить
#include <mxINI>

new PAccount[MAX_PLAYERS];
enum pInfo
{
    pPass[64],
    pAdmin,
    pMoney,
    pScore
}
new PlayerInfo[MAX_PLAYERS][pInfo];

В public OnPlayerConnect
    PlayerInfo[playerid][pAdmin] = 0;
    new playername[MAX_PLAYER_NAME];// Массив для имени игрока
    new string[128];// Путь до папки с именем игрока
    GetPlayerName(playerid,playername,sizeof(playername));// Узнаём имя игрока
    format(string,sizeof(string),"Gamers/%s.ini", playername);// Путь к файлу с аккаунтом
    if(fexist(string))// Проверка на файл, если он есть то выполняется следующее действие.
     {
        PAccount[playerid] = 1;// Аккаунт есть
    }
    else// Если файла с именем нет, то выполняется это действие.
    {
        PAccount[playerid] = 0;// Аккаунта нет
    }
    
	if(PAccount[playerid] == 1)// Если аккаунт есть
    {
        ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Login - Red Deathmatch","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. Стиль диалога выставляем на ввод текста.
    }
    else// Если аккаунта нет
    {
        ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Register - Red Deathmatch","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. Стиль диалога выставляем на ввод текста.
    }

В public OnPlayerDisconnect
    SavePlayer(playerid);// Сохраняем игрока

В public OnDialogResponse
	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Зарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации.
        }
    }

В самый конец мода
stock SavePlayer(playerid)
{
    new string[64];// Массив с путём для файла
    new playername[MAX_PLAYER_NAME];// Массив для получения имени игрока
    GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
    format(string, sizeof(string), "Gamers/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения
    new iniFile = ini_openFile(string);// Открываем файл по тому пути который указали.
    ini_setString(iniFile,"Pass",PlayerInfo[playerid][pPass]);// Записываем пароль игрока в файл
    ini_setInteger(iniFile,"Admin",PlayerInfo[playerid][pAdmin]);// Записываем уровень админа
    ini_setInteger(iniFile,"Money",PlayerInfo[playerid][pMoney]);// Записываем сколько денег
    ini_setInteger(iniFile,"Score",PlayerInfo[playerid][pScore]);// Записываем очки игрока
    ini_closeFile(iniFile);// Закрываем файл
}

stock OnPlayerRegister(playerid, password[])// Паблик регистрации
{
    if(IsPlayerConnected(playerid))// Проверка на подключение игрока
    {
        new string[64];// Массив с путём для файла
        new playername[MAX_PLAYER_NAME];// Массив для получения имени игрока
        GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
        format(string,sizeof(string), "Gamers/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения
        new iniFile = ini_createFile(string);// Создаём файл с именем игрока в папке players
        if(iniFile < 0)// Если Файла нет
        {
            iniFile = ini_openFile(string);// Открываем
        }
        if(iniFile >= 0)// Если файл есть
        {
            strmid(PlayerInfo[playerid][pPass],password,0,strlen(password),255);// Присваиваем массиву pPass, значение password[]
            ini_setString(iniFile,"Pass",PlayerInfo[playerid][pPass]);// Записываем пароль игрока в файл
            ini_closeFile(iniFile);// Закрываем файл
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
        }
    }
    return 1;
}

stock 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), "Gamers/%s.ini", playername);// Добавляем имя игрока, в путь для загрузки
        new iniFile = ini_openFile(string);// Открываем файл
        ini_getString(iniFile,"Pass",pass,64);// Загружаем пароль
        if(strcmp(pass,password,true) == 0)// Если введёный пароль, соответсвует паролю при регистрации, то загружаем акк
        {
             ini_getString(iniFile,"Pass",PlayerInfo[playerid][pPass],64);// Загружаем пароль
             ini_getInteger(iniFile,"Admin",PlayerInfo[playerid][pAdmin]);// Загружаем уровень админа
             ini_getInteger(iniFile,"Money",PlayerInfo[playerid][pMoney]);// Загружаем деньги
             ini_getInteger(iniFile,"Score",PlayerInfo[playerid][pScore]);// Загружаем очки игрока
             ini_closeFile(iniFile);// Закрываем файл
        }
        else// Если пароль не верен..
        {
            ini_closeFile(iniFile);// Закрываем файл
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
            return 1;
        }
        SendClientMessage(playerid,0xFF00000,"Добро пожаловать на Red Deathmatch");// Выводим игрок сообщение
        SpawnPlayer(playerid);// Спавним игрока
    }
    return 1;
}

Заменим public OnPlayerRequestSpawn на
public OnPlayerRequestSpawn(playerid) return false;

Чтобы стрелочки и кнопка spawn не работали, пока не авторизуешься.
Давайте еще добавим стандартных машин в мод из мода grandlarc
Ко всем #include
#include "../include/gl_common.inc"

В конец public OnGameModeInit
   // SPECIAL
   LoadStaticVehiclesFromFile("vehicles/trains.txt");
   LoadStaticVehiclesFromFile("vehicles/pilots.txt");
   // LAS VENTURAS
    LoadStaticVehiclesFromFile("vehicles/lv_law.txt");
    LoadStaticVehiclesFromFile("vehicles/lv_airport.txt");
    LoadStaticVehiclesFromFile("vehicles/lv_gen.txt");
    // SAN FIERRO
    LoadStaticVehiclesFromFile("vehicles/sf_law.txt");
    LoadStaticVehiclesFromFile("vehicles/sf_airport.txt");
    LoadStaticVehiclesFromFile("vehicles/sf_gen.txt");
    // LOS SANTOS
    LoadStaticVehiclesFromFile("vehicles/ls_law.txt");
    LoadStaticVehiclesFromFile("vehicles/ls_airport.txt");
    LoadStaticVehiclesFromFile("vehicles/ls_gen_inner.txt");
    LoadStaticVehiclesFromFile("vehicles/ls_gen_outer.txt");
    // OTHER AREAS
    LoadStaticVehiclesFromFile("vehicles/whetstone.txt");
    LoadStaticVehiclesFromFile("vehicles/bone.txt");
    LoadStaticVehiclesFromFile("vehicles/flint.txt");
    LoadStaticVehiclesFromFile("vehicles/tierra.txt");
    LoadStaticVehiclesFromFile("vehicles/red_county.txt");

В public OnPlayerUpdate
	GivePlayerMoney(playerid,PlayerInfo[playerid][pMoney]);//Выводит количество денег
	SetPlayerScore(playerid,PlayerInfo[playerid][pScore]);//Выводит количество очков (фрагов)

В public OnPlayerDeath
    SetPlayerScore(killerid,PlayerInfo[playerid][pScore]+1);
	SetPlayerScore(playerid,PlayerInfo[playerid][pScore]-1);
	SendDeathMessage(killerid, playerid, reason);

[ВАЖНО]Создать папку Gamers в папке scriptfiles
Пишите в эту тему что сделать в следующем уроке.
Скачать мод с Яндекс Диска
2

#2
Пользователь офлайн   Neshta 

  • Профессионал
  • Вставить ник
  • Раскрыть информацию
Какой крутой урок!!111!!11!!1 :biggrin:

Сообщение отредактировал Neshta: 24 февраля 2015 - 21:11

0

#3
Пользователь офлайн   .evoxxx 

  • Liberty Inc.
  • Вставить ник
  • Раскрыть информацию
The Best!Атвичаю!
0

#4
Пользователь офлайн   Impulse99 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Спасибо я старался!)
0

#5
Пользователь офлайн   IcsOne 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Эмм. Вот короч.
Изображение
0

#6
Пользователь офлайн   Impulse99 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияIcsOne (25 февраля 2015 - 17:14) писал:

Эмм. Вот короч.
Изображение

Обнови инклуды до версии 0.3z либо вы не зашли с павно который был с модом
0

#7
Пользователь офлайн   IcsOne 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияImpulse99 (26 февраля 2015 - 11:25) писал:

Обнови инклуды до версии 0.3z либо вы не зашли с павно который был с модом

Спасибо, помогло.
0

#8
Пользователь офлайн   IcsOne 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Баг. При авторизации можешь ввести любой код, все равно авторизуется.
0

#9
Пользователь офлайн   Impulse99 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
У меня данного бага нету, потому что пароль сохраняется, возможно у вас нету папки Gamers в папке scriptfiles
0

#10
Пользователь офлайн   IcsOne 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Все есть. Я просто пишу любой пароль у меня спавнится.
P.S: Мод скачал отсюда и ни чего не менял.
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика