Напиши режими с нула (MySQL r39-2) - Уроци

Глава I. Файловете, програми, необходими за нас

Променило? Но това не е всичко, приписват целия низ:

плъгини знаменца MySQL

- Това плъгини ще обяснят по-късно
Имаме нещо като това:






ехо Изпълнение сървър Config.
lanmode 0
rcon_password 12345
maxplayers 500
порт 7777
име на хост New RP | Client. 0.3x
gamemode0 нов 1
filterscripts
0 обяви
заявка 1
chatlogging 0
weburl WWW.
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0
logtimeformat # 91;% Н% M:% S # 93;
плъгини знаменца MySQL

Така че, ако искате си мод за да работи правилно, а след това на следните приставки:

вимпел
1. Streamer.inc, който се намира в pawno / включва папка хвърля да му pawno папка / включва вашия сървър.
2. Streamer.dll, който се намира в папката с приставките хвърля в една папка на приставки на вашия сървър. Забележка: Ако сървърът е Linux-ос, а след това хвърля Streamer.so, в server.cfg всички плъгини трябва да бъдат написани с разширение Така че.
Например: Streamer.so
Добре. Ние трябва само тези два файла.
MySQL R39-2 - Ще използваме приставка R39-2
1. a_mysql.inc хвърля да му pawno папка / включва вашия сървър.
2. mysql.dll хвърля в папка плъгини на вашия сървър.
3. libmysql.dll сигурност ще се хвърлят в една папка със сървъра
Денвър - И най-важното е, че Denwer (Denwer ни предоставите MySQL PhpMyAdmin база данни).
Задайте Denwer. Мисля, че нейните проблеми при инсталирането не възникнат.

Глава II. Първи стъпки

И така, ние създадохме Denwer. хвърли плъгини? Тогава да вървим.

За да започнете, отидете в папката на сървъра, ще видим има още една папка "pawno", отидете в нея. След това отидете на самата програма pawno.exe Да започнем писането на мода. Аз кликнете върху иконата, за много "Нова" на първо място. Ние създадохме нова мода, ако го държа под името "нови" в папката "gamemodes" Старт на сървъра и да отида при него (за влизането, използвайте IP: 127.0.0.1), можем да видим всичко познато Negro CJ в Лас Venturas, както виждаме това не е съвсем режими ролеви игри, така че нека най-накрая да започнат да правят! Pawno влезем и да започне работа. Първо, нека да се впише в нашия inkluda по следния начин:
След ред:

#include
#include

За да започнете, нека да премахнете нежелани редовете ни:

#if дефинирани FILTERSCRIPT

обществен OnFilterScriptExit ()
<
върне 1;
>

Основната ()
ако (mysql_errno ())
ФОРМАТ ( "Свързване към database`% s` не е успешна" mysql_db.);
още
ФОРМАТ ( "Свързване към database`% s` успешно" mysql_db.);
>

Между другото малко за основните ().
Както можете да видите печат функция при започване на модата ни покаже текста в конзолата, която се запознаваме. Можете да добавите още полета и пишат в тях нищо. Така е и с функция за печат, за да намерите грешки на мода. Например, можете да не използвате функцията, постепенно въведете кода в печат
Пример: (при тестване препоръчваме използването на печат)

наличност Some_Function (playerid)
<
печат ( "Проверете дали плейърът е свързан");
ако (IsPlayerConnected (playerid)) // Ако плейърът е свързан,
<
printr ( "основни проверки, пуснати на времето");
SetPlayerWeather (playerid 10); // Посочете това време номер 10
печат ( "Обществен е изпълнена успешно");
>
>

Малко история.
В режим, различни герои и променливи писане, анализира ги.

|| - което означава "или". например PlayerInfo # 91; playerid # 93; # 91; застъпник # 93; == 1 || PlayerInfo # 91; playerid # 93; # 91; pMember # 93; == 1 (Работа Фракция 1 или Фракция 1 лидер)






- което означава "и". например PlayerInfo # 91; playerid # 93; # 91; pMember # 93; == 1 PlayerInfo # 91; playerid # 93; # 91; шега # 93; == 3 (работен фракции 1 и 3 има степен)
. - това означава "не". Пример (! IsPlayerConnected) (играчът не е свързан)
ако - това означава "ако". пример
ако (! IsPlayerConnected)
<
ако PlayerInfo # 91; playerid # 93; # 91; pMember # 93; == 1 PlayerInfo # 91; playerid # 93; # 91; шега # 93; == 3; и така нататък
друго - това означава, че "по-различно." също така е израз на "друго, ако" - ако по друг начин

Но да се върнем на модата и това е така, извадете ред:

Изтрит? Добре, преминете към демонтирането на модата.

Нека първо да предпише данните на MySQL база данни. за това отстъпление един ред след inkluda и пише следното:

#define mysql_host "Localhost" // ако пуснете сървъра на компютъра си, след което се оставя
#define mysql_db "качамак" // име на MySQL база данни
# определят mysql_user "корен" // употреба Mysql
#define mysql_pass "" // парола за MySQL

На следващо място, нека да се върнем назад още един ред и поставете следния ред:

Също така отстъпи на един ред и да го поставите:

ENUM pInfo
<
ключ # 91; 128 # 93;, // променлива парола
Ниво // ниво играч
>;
новият PlayerInfo # 91; MAX_PLAYERS # 93; # 91; pInfo # 93 ;;

След това отидете малко по-ниско в публичния OnGameModeInit () и го поставете до следното:

mysql_variable = mysql_connect (mysql_host mysql_user mysql_db mysql_pass ...);
SetGameModeText ( "Регистър R39-2");

В резултат на това ние се обществено (публично):

обществен OnGameModeInit ()
mysql_variable = mysql_connect (mysql_host mysql_user mysql_db mysql_pass ...);
SetGameModeText ( "Регистър R39-2");
AddPlayerClass (0. 1958,3783 1343,1572 15,3746 269,1425 0. 0. 0. 0. 0. 0 ....);
върне 1;
>

На следващо място, по същия начин, по следния вложка обществен OnGameModeExit ():

Общественият OnPlayerConnect (playerid):

статично Конст
ул # 91; # 93; = "SELECT` Name` ОТ` Accounts` WHERE` Name` = '% S ";

конст
размер = sizeof (STR) - 2 + MAX_PLAYER_NAME;

нов
низ # 91; размер # 93 ;;

mysql_real_escape_string (Име (playerid) Име (playerid));
формат (низ sizeof (низ), ул Име (playerid) ..);
mysql_function_query (mysql_variable низ вярно "OnPlayerRegCheck" "г" playerid .....);

В рамките на общественото OnPlayerText (playerid, текст []):

В публичен OnDialogResponse (playerid, dialogid, отговор, Редовете, inputtext []):

В самия край на кода:

фондова OnPlayerRegister (стр. парола # 91; # 93)
статично Конст
ул # 91; # 93; = "INSERT INTO` Accounts` (` Name`, `Key`) стойности ("% S ","% S ")";

конст
размер = sizeof (STR) - 2 + MAX_PLAYER_NAME - 128 ± 2;

нов
низ # 91; размер # 93 ;;

формат (низ sizeof (низ), ул Име (п), парола ..);
mysql_function_query (. mysql_variable низ невярна "RegisterCallback" "г", стр ....);
върне 1;
>

обществен RegisterCallback (playerid);
обществен RegisterCallback (playerid)
SendClientMessage (. Playerid - 1. "Вие сте регистриран успешно!");
SetPVarInt (playerid "Активен" 1 ..);
SpawnPlayer (playerid);
върне 1;
>

SavePlayer (р)
ако (GetPVarInt (стр. "Активен")> 0)
статично Конст
str0 # 91; # 93; = "UPDATE` Accounts` SET` Key`, `Level` = '.",
str1 # 91; # 93; = "% S WHERE` Name` = '% S";

конст
size0 = sizeof (str0) - 128 2 + - 2 + 16
size1 = sizeof (str1) - 128 2 + - 2 + MAX_PLAYER_NAME;

#if size0> size1
#define размер size0
#else
#define размер size1
# endif
нов
низ # 91; размер # 93 ;;

формат (низ. sizeof (низ), str0. PlayerInfo # 91; р # 93; # 91; ключ # 93;, PlayerInfo # 91; р # 93; # 91; ниво # 93);
формат (низ низ Име (п) sizeof (низ), str1 ...);
mysql_query (mysql_variable низ невярна ..);
>
върне 1;
>

фондова OnPlayerLogin (т. с парола # 91; # 93)
статично Конст
ул # 91; # 93; = "SELECT * FROM` Accounts` КЪДЕТО` Name` = '% S' AND` Key` = '% S ";

конст
размер = sizeof (STR) - 2 + MAX_PLAYER_NAME - 128 ± 2;

нов
низ # 91; размер # 93 ;;

формат (низ sizeof (низ), ул Име (и), парола ..);
mysql_function_query (. mysql_variable низ вярно "LoginCallback" "DS" и парола .....);
върне 1;
>

обществен LoginCallback (т. с парола # 91; # 93);
обществен LoginCallback (т. с парола # 91; # 93)
статично Конст
ул # 91; # 93; = "Въвели сте неправилна парола (опити:% I / 3)";

нов
редове,
полета,
максимален # 91; 128 # 93;,
низ # 91; sizeof (STR) - 2 + 1 # 93 ;;

cache_get_data (редове полета.);
ако (! реда)
ако (GetPVarInt (т. "wrongPass") == 2)
върнете SendClientMessage -, Kick (и) (I 1. "Въвели сте грешна парола за 3 пъти ви изритаха ..".);

Създаване на таблица АКО НЕ СЪЩЕСТВУВА `Accounts`
(
`Name` VARCHAR (24) съпоставя cp1251_bin НЕ NULL.
`Key` VARCHAR (30) набор от символи НЕ utf8 NULL.
`Level` междинно съединение (3) НЕ NULL
)
ДВИГАТЕЛ = MyISA