CS-bg.info - форумът на CS-bg :: Counter-Strike фен сайт

[Tutorials] [BG] SAMP Scripting - 1

Раздел за уроци, свързани със скриптирането при SA:MP

Модератори: Екип Развлечение, Помощник-модератори

[Tutorials] [BG] SAMP Scripting - 1

Мнениеот zepfiz » 06 Дек 2018, 22:21

Така, настанете се. Добре. Камера, светлина. Да започваме.
Добре дошли в първия епизод/тема/пост. В тези епизоди/теми/пости ще ви науча как да скриптирвате в самп.

Така единственото нещо което ще ви трябва е МНОГО МАЛКО знания за скриптирване. Просто да знаете как да отворите pawno. Ако знаете какво е това.

Нека да започнем.

Как се правят командите във самп сървърите?
Първо трябва да решите дали искате по лесния начин, или по по - сложния. За по лесния начин трябва да изтеглите така нареченият "include"(zcmd.inc) . За това няма да обяснявам тук.

Просто изтеглете го от тук: Download
и го вкарайте в папката pawno > include >

След това в гейммода ви трябва да има едно
Код: Избери целия код
#include <a_samp>


Просто под него напишете:

Код: Избери целия код
#include <zcmd>


За командите функцията се казва "OnPlayerCommandText"
Може да я намерите в вашия гейммод. (не г*й мод.)

По сложния начин командата трябва да изглежда ето така:

Код: Избери целия код
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp(cmdtext, "/example", true))
    {
        //Функция
        return 1;
    }
    return 0;
}


По лесния начин командата трябва да изглежда ето така:

Код: Избери целия код
CMD:example(playerid, params[])
{
     //Функция
     return 1;
}


Вие си преценете по кой начин искате да правите командите. (Аз лично бих избрал втория)

Така, ок. Това е командата, но това ли беше всичко?
Не. От долу на //Функция трябва да сложите функцията която командата да прави.
Да кажем примерно искаме да дадем на играча живот.

Лесния начин:

Код: Избери целия код
CMD:heal(playerid, params[])
{
     SetPlayerHealth(playerid, 100);
     return 1;
}


Това е. Толкова просто? Да. За сега е толкова просто.
Не разбрахте?
Нека да го направим малко по детайлно и ще обясня за всичко.
Така:

Код: Избери целия код
CMD:heal(playerid, params[])

Това ви е командата. След това
Код: Избери целия код
CMD:
идва името на командата, напишете каквото искате. Но да го запомните после.

Тези { } са много прости. Просто едното отваря командата, другото я затваря.

Другото след него е функцията. Нека да я "разбием" и да разберем какво има вътре.

1. SetPlayerHealth означава функцията която ни трябва за да зададем на някой живота. Буквално на български означава

Set - задай. Player - игрaч. Health - живот.

Мисля че тук разбрахте какво имам предвид.
след това идва скоба ( и след това идва "playerid" което означава ид-то на играча. Тоест самия играч. Като влезете в сървър ви дава ИД от 0 до ....
"playerid" означава играча който пише командата. (Сигурен съм, че ще има въпроси за това, защото не го обясних като хората, ако има питайте и ще отговоря)

и след това идва запетайка, и след това числото 100.
Тук можете да напишете каквото искате. Смисъл това означава колко живот искате да дадете на играча. Ако искате половин. Напишете 50.
(С това можете да направите още една команда която е /die която е да се самоубиеш. Просто направи същото. Преименувай командата и на цифрата сложи едно 0)

И след това затваряме скобата. И след това идва ; с това затваряме цялата функция.

След това идва "return 1;"
което означава на българския. Върни 1. Тук това означава да ви направи командата 1 път (ако тук не съм го обяснил както трябва ако има по добри от мен да го обяснят).

И това е командата.

Ако има въпроси, питайте.
zepfiz

Аватар
Потребител
Потребител
 
Регистриран на: 24 Ное 2018, 16:15
[ Профил в сайта ]

Re: [Tutorials] [BG] SAMP Scripting - 1

Мнениеот SprRayZ » 07 Дек 2018, 22:16

Щеше да бъде добре да обясниш как да се използва команда за дадено ID.
Та нека помогна с нещо и аз.
Започваме като задаваме командата нашият пример ще бъде "heal", като вие може да си го промените в зависимост какво ви устройва повече, може да е "sethealth" и така нататък.
Код: Избери целия код
CMD:heal(playerid, params[], help)

Отваряме една скоба, която отваря командата.
Код: Избери целия код
{

Трябва да зададем функция, която проверява дали играчът има админ права. В края съм обяснил по-подробно какво е това.
Код: Избери целия код
if(IsPlayerAdmin(playerid))

Отваряме скоба, която отваря функцията.
Код: Избери целия код
{

И сега следва по сложната част, но ще се опитам да обясня колкото се може повече за по лесно усвояване.
първо ако искаме всички функции да работят трябва да дефинираме.

Код: Избери целия код
new id;
new string[256];
new health;
new tname[24];
new pname[24];

Та чудите се какво дефинираме в момента?
id - ID-то на играча, който искаме да зададем кръвта.
string - това помага на съобщенията, който ще напишем след малко. препоръчително е да се използва така нареченият "string" защото с него можем да пратим съобщение при което се вижда кой използва командата и на кого я използва. Какво представляват тези скоби след "string, tname и pname"? Това задава колко знака може да се използват в съобщението, което ще направим следмалко.
health - това го дефинираме за да може командата да работи без проблем.
tname - накратко от "TargetName", това е името на играча върху, който ще използвате командата.
pname - накратко от "PlayerName", та може да се досетите това е вашето име, което по късно ще бъде използвано
Та нека започнем с направата на фукнцията. Тя проверява дали командата е правилно използвана. в противен случай изпраща съобщение, което показва как е правилно да се използва командата.
Код: Избери целия код
if(sscanf(params, "dd", id, health))

Код: Избери целия код
return SendClientMessage(playerid, COLOR_RED, "Използвайте: /heal [id] [health]");

Завършен вид на функцията за проверка на командата.
Код: Избери целия код
if(sscanf(params, "dd", id, health)) return SendClientMessage(playerid, COLOR_RED, "Използвайте: /heal [id] [health]");

След това трябва да зададем функцията, която добавя кръв на избрания играч. Тя задава кръвта на играча. id - това е играча на, когото използвате командата. health - това задава кръвта която сте избрали при използването на командата. Пример /heal 0(id-то на играча) 100 , това задава кръвта на играча да е 100.
Код: Избери целия код
SetPlayerHealth(id, health);

Нека вземем имената, който трябва да се показвам при използване на командата.
Код: Избери целия код
GetPlayerName(id, tname, sizeof(tname));
GetPlayerName(playerid, pname, sizeof(pname));

tname - е името на играча на ,когото бъде използвана командата.
pname - е вашето име.
Защо трябва да направим това? Отговора е защото трябва да се намерят имената на хората в противен случай няма да бъдат изписани в съобщението.
Сега нека да направим съобщението.

Код: Избери целия код
format(string, sizeof(string), "ADMIN: %s зададе кръвта на %d. Кръв[%d]!",pname , tname, health);
SendClientMessageToAll(0xFF0000, string);

Питате се какво е "%s" - това позволява да бъдат показани само БУКВИ в този случай име на играч.
А какво е "%d" - това позволява да бъдат показани само ЦИФРИ в този случай кръвта му.
Време е да затворим функциите отново със скоба.

Код: Избери целия код
}

Нека зададем какво да изписва, ако играч, който не е админ използва командата.
Код: Избери целия код
else SendClientMessage(playerid, 0xFF0000, "Вие не сте АДМИН!");

След него добавяме.
Код: Избери целия код
return 1;

Което подпомага за нормалната работа на командата.
Какво е "else"? При зададената проверка дали играча има админ права, това прави така, че ако играчът няма права да не му позволява да използва командата.
Слагаме последната скоба за да затворим командата.

Код: Избери целия код
}

И нашата команда е готова.
Функция на командата:
1. Задава кръвта на избран от вас човек.
2. Изпраща съобщение до всички играчи в сървъра с информация т.е "Кой е използвал командата, На кого е използвана командата и колко кръв е зададена на играча".

Краен вид на командата.
Код: Избери целия код
CMD:heal(playerid, params[], help)
{
      if(IsPlayerAdmin(playerid))
      {
            new id;
            new string[256];
            new health;
            new tname[24];
            new pname[24];
            if(sscanf(params, "dd", id, health)) return SendClientMessage(playerid, COLOR_RED, "Използвайте: /heal [id] [health]");
            SetPlayerHealth(id, health);
            GetPlayerName(id, tname, sizeof(tname));
            GetPlayerName(playerid, pname, sizeof(pname));
            format(string, sizeof(string), "ADMIN: %s зададе кръвта на %s. Кръв[%d]!",pname , tname, health);
            SendClientMessageToAll(0xFF0000, string);
      }
      else SendClientMessage(playerid, 0xFF0000, "Вие не сте АДМИН!");
      return 1;
}

Надявам се да съм бил достатъчно изчерпателен за да може по лесно да се усвой/научи писането на дадена команда.
Бих искал да добавя, че е препоръчително да се използва "ZCMD" като основа на командите, не съм съгласен с написаното от другия потребител, че "ZCMD" е по-лесно за писане от колкото "STRCMP". Долу горе еднакво е за писане зависи от това на кое от двете си свикнал. Плюса на "ZCMD" е ,че е много по бързо от "STRCMP", което е от голямо значение при голям проект в ,който има многобройни команди.

Поздрави.
SprRayZ

Аватар
V.I.P
V.I.P
 
Регистриран на: 06 Ное 2013, 17:13
Местоположение: Търговище, Шумен, Русе
Skype: N/A
[ Профил в сайта ]

Re: [Tutorials] [BG] SAMP Scripting - 1

Мнениеот zepfiz » 08 Дек 2018, 21:11

Да, но все пак това ми е първия "tutorial". Дано хората нещо са научили от това което обясних.

Също искам да попитам. Как искате да ви правя уроците?

За всеки урок нова тема или да поствам новите уроци ето тук.
zepfiz

Аватар
Потребител
Потребител
 
Регистриран на: 24 Ное 2018, 16:15
[ Профил в сайта ]

Re: [Tutorials] [BG] SAMP Scripting - 1

Мнениеот iVoka » 08 Дек 2018, 23:29

Може като нови теми, както и можеш да ги групираш по някакъв начин, за да не станат стотици примерно.
iVoka

Аватар
CS-bg.info Admin
CS-bg.info Admin
 
Регистриран на: 29 Юни 2007, 12:21
Skype: ivobg92
Профил в Steam
[ Профил в сайта ]

Re: [Tutorials] [BG] SAMP Scripting - 1

Мнениеот SprRayZ » 09 Дек 2018, 19:37

За съжаления я няма предишната активност по този раздел. Бих се радвал да се върне, но бавно по бавно ще стане. Хората, който в момента се занимават да помогнат на, някой писал в раздела се броят на пръсти... Ivaka ако няма нищо против може да добави Под-Раздел "Scripting Tutorials", който ще позволи на потребителите лесно да намерят каквото търсят :wink:
SprRayZ

Аватар
V.I.P
V.I.P
 
Регистриран на: 06 Ное 2013, 17:13
Местоположение: Търговище, Шумен, Русе
Skype: N/A
[ Профил в сайта ]

Re: [Tutorials] [BG] SAMP Scripting - 1

Мнениеот iVoka » 09 Дек 2018, 23:42

Готов е, щом имате желание да пишете уроци, нека бъде по-лесно намирането им. Благодаря и желая успех повече хора да ги четат и да се включат.
iVoka

Аватар
CS-bg.info Admin
CS-bg.info Admin
 
Регистриран на: 29 Юни 2007, 12:21
Skype: ivobg92
Профил в Steam
[ Профил в сайта ]



Днес, 18 окт 2018, стартирахме новите CS 1.6 сървъри на един от най-старите проекти за Counter-Strike в България.
Ето че в края на този месец се навършват точно 10 години от официалното пускане на българския CS фен сайт.
ESEA имат удоволствието да обявят сезон 25 на своята лига, който ще включва повече дивизии за някои региони, както и редица подобрения базирани на обратната връзка от сезон 24.

Назад към GTA SA:MP Scripting Tuts

Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани

Creative Commons License

Valve, Steam, поредицата Counter-Strike и логото на всяко от изброените са търговски марки и/или
регистрирани търговски марки на Valve Corporation. Всички други търговски марки са собственост на съответните им собственици.

Design: iVoka • Special thanks: VaRkOlAKA
За сайта | Екип | За реклама | Карта на сайта | За контакти

Powered by phpBB® Forum Software © phpBB Group | Theme by A1ex, edit by iVoka
Превод: Йоан Арнаудов | Корекции: Ивомир Петров
Условия за ползване | Политика на поверителност