- Регистрация
- 11 Мар 2013
- Сообщения
- 111
- Лучшие ответы
- 0
- Репутация
- 22
Пишем мод с 0 самостоятельно.(Урок 1)
Здравствуйте, дорогие поситители и обитатели pawno-info.ru!
Это мой первый и я надеюсь не последний урок по созданию мода для samp.
Ну и ближе к теме.
Наш мод будет в так полюбившемся многим жанре Role Play.
Основной функционал будет на mxINI, потому что я в mySQL мало жу-жу.
//-----------------------------------------------------------------------------------------------------------------\\
Ну начнём!
Для начала нам надо скачать инклуд mxINI и официальный сервер samp.
Скачали? Продолжаем!
Открываем папку с нашим сервером, открываем с помощью блакнота фаил server.сfg и правим в нем всё по примеру ниже
Теперь в папке с нашим модом ищем папку "pawno", а в ней папку "include" кидаем наш инклуд mxINI туда.
Тепер в папку "pawno" открываем саму программу и тыкаем "File>New"
Это наш будующий мод, вы должны увидеть
Ладно, приступим, для начала удалим кое-что, потисачим из нашего мода что-нибудь!
НЕ партесь! Нам это ненужно, это для создания FS.
Далее.
Теперь сделаем наш мод более "НАШИМ" тобишь вставим наши названия!
Ищем
, а в нем ищем
Вместо "Blank Script" ставим наше название, это название нашего мода, у меня мод будет посвящен ушедшему, Стиву Джопсу
Поэтому у меня это будет выглядет так
Далее.
Сделаем наш мод более "РП-шным" В
Далее.
Перенесём спавн из LV в LS
ищем
Вместо этого ставим
Далее.
Теперь приступим к регистрации, ищем
После него пишем
Это объявление нашего инклуда mxINI.
Далее, после объявления нашего инклудо пишите это
Это информация об игроке, туда будем вставлять уровень админки, уровень и т.д.
А теперь в самый конец мода пишите это
Далее создадим сис-му регистрации.
НАм надо добавить
После нашего инклуда mxINI это нужно для того чтобы узнать, есть ли аккаунт на сервере
Далее в паблик OnPlayerConnect добавляем:
Теперь в паблик OnPlayerRequestClass ((он преднозначен для показа диалогов)) добавляем:
Теперь сис-ма которая сделает нам регистрацию и авторизацию, для этого пишем это в конец мода:
Теперь есть функции авторизации и регистрации, сделаем так чтобы это всё работало!
Для этого в паблик OnDialogResponse вставляем:
Ну я надеюсь, что помог, а модератор, не удоляйте тему, я очень долго писал всё это, если что не так, то исправте пожалуйста.
Новички, с любой проблемой пишите в этой теме! Я постараюсь помоч!
НЕ новички, оставляйте комментарии по уроку, пожалуйста!
Всем спасибо, пока!
Уроки по созданию мода с 0
//-----------------------------------------------------------------------------------------------------------------\\
Здравствуйте, дорогие поситители и обитатели pawno-info.ru!
Это мой первый и я надеюсь не последний урок по созданию мода для samp.
Ну и ближе к теме.
Наш мод будет в так полюбившемся многим жанре Role Play.
Основной функционал будет на mxINI, потому что я в mySQL мало жу-жу.
//-----------------------------------------------------------------------------------------------------------------\\
Ну начнём!
Для начала нам надо скачать инклуд mxINI и официальный сервер samp.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Открываем папку с нашим сервером, открываем с помощью блакнота фаил server.сfg и правим в нем всё по примеру ниже
echo Executing Server Config...
lanmode 0
rcon_password changeme 123321
maxplayers 50
port 7777
hostname pawno-info.ru
gamemode0 new
filterscripts
announce 0
query 1
chatlogging 0
weburl pawno-info.ru
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0
logtimeformat [%H:%M:%S]
lanmode 0
rcon_password changeme 123321
maxplayers 50
port 7777
hostname pawno-info.ru
gamemode0 new
filterscripts
announce 0
query 1
chatlogging 0
weburl pawno-info.ru
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0
logtimeformat [%H:%M:%S]
Теперь в папке с нашим модом ищем папку "pawno", а в ней папку "include" кидаем наш инклуд mxINI туда.
Тепер в папку "pawno" открываем саму программу и тыкаем "File>New"
Это наш будующий мод, вы должны увидеть
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT
#include <a_samp>
#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
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;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
public OnPlayerConnect(playerid)
{
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT
#include <a_samp>
#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
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;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
public OnPlayerConnect(playerid)
{
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
Ладно, приступим, для начала удалим кое-что, потисачим из нашего мода что-нибудь!
PHP:
#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
Далее.
Теперь сделаем наш мод более "НАШИМ" тобишь вставим наши названия!
Ищем
PHP:
public OnGameModeInit()
SetGameModeText("Blank Script");
Поэтому у меня это будет выглядет так
PHP:
SetGameModeText("StiveJobsRP");
Сделаем наш мод более "РП-шным" В
PHP:
public OnGameModeInit()
PHP:
добавляем DisableInteriorEnterExits();///Уберёт жёлтые пикапы входа
EnableStuntBonusForAll(0); /// Убирёт Stunt бонусы, небуду объяснять что это.
Перенесём спавн из LV в LS
ищем
PHP:
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
AddPlayerClass(3,1962.3774,-1183.7675,26.0280,269.0738,0,0,0,0,0,0);
Далее.
Теперь приступим к регистрации, ищем
PHP:
#include <a_samp>
PHP:
#include <mxINI>
Далее, после объявления нашего инклудо пишите это
PHP:
enum pInfo
{
pPass[64],// Пароль
}
new Player[MAX_PLAYERS][pInfo];
А теперь в самый конец мода пишите это
PHP:
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);// Закрывает файл
}
НАм надо добавить
PHP:
new PAccount[MAX_PLAYERS];
Далее в паблик OnPlayerConnect добавляем:
PHP:
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;// Аккаунта нет
}
PHP:
if(PAccount[playerid] == 1)// аккаунт есть
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВы зарегистрированы\nВведите свой пароль в окошко","Ввод","");// Диалог авторизации
}
else// или аккаунта нет
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВы не зарегистрированы.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// диалог регистрации
}
PHP:
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);
if(iniFile < 0)
{
iniFile = ini_openFile(string);
}
if(iniFile >= 0)
{
strmid(Player[playerid][pPass],password,0,strlen(password),255);
ini_setString(iniFile,"Pass",Player[playerid][pPass]);
ini_closeFile(iniFile);
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВы зарегистрированы\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
}
}
return 1;
}
PHP:
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,0x61ff0000,"Добро пожаловать на сервер");
SpawnPlayer(playerid);// Спавним
}
return 1;
}
Для этого в паблик OnDialogResponse вставляем:
PHP:
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
{
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
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВы не зарегистрированы\nЗарегистрируйтесь введя пароль в окошко","Ввод","");
}
}
Новички, с любой проблемой пишите в этой теме! Я постараюсь помоч!
НЕ новички, оставляйте комментарии по уроку, пожалуйста!
Всем спасибо, пока!
Последнее редактирование: