Что такое pawno samp

Что такое pawno samp

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp

Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler
Форум » Pawno программирование SAMP » Уроки | FAQ » Введение в pawno. (Полезная статья для начинающих скриптеров в Pawno)

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp

Pawno – скриптовый язык сервера SA-MP. Кроме того, словом «Pawno» часто называют редактор этого языка, который поставляется вместе с SA-MP сервером. Это очень простой редактор, который можно предложить большинству людей. Такие возможности, как подсветка синтаксиса, базовые опции запуска и панель, показывающая встроенные функции, делает pawno замечательным редактором для людей, которые создают небольшие режимы игры или дополнительные скрипты, и для тех, кто хочет отредактировать несколько мелких мест в существующем режиме игры. Создатель Pawno известен под ником Spookie.

Имея под рукой Pawno можно при желании создать практически любой скрипт для SA-MP. Все зависит лишь от Вашего желания, навыков и наличия свободного времени. Необходимость последнего, в свою очередь, обратно пропорциональна величине навыков. Если вы ни разу не занимались созданием pawn-скрипта, эта статья как раз для вас. Кончено, хорошо бы иметь какие-нибудь познания в программировании.

Итак, запускаем Pawno, который находится в samp 0.3.7_R2_win32\pawno (зависит от версии сервера), и выбираем пункт File->New. В рабочем окне редактора отобразиться некий код. Это шаблон пустого фильтр-скрипта или гейм-мода. Посмотрим на него.

// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

#if defined FILTERSCRIPT

public OnFilterScriptExit()
<
return 1;
>

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;
>

Первые две строки являются комментариями. Комментарии начинаются с символов // и служат для подсказки программисту. Они игнорируются компилятором. Кроме того, комментарии используются для того, чтобы временно отключить какую-либо строчку кода (можно ее просто удалить, но тогда, при необходимости, придется писать заново). Так сделано в 3ей строке кода, чуть позднее разберем для чего.
В следующей строке директивой #include выполняется подключение к проекту файла a_samp.inc (из папки samp 0.3.7_R2_win32\pawno\include), содержащего основные функции, используемые в Pawno. Если интересно, можно посмотреть его содержимое, но менять ничего нельзя.

Ниже идет блок кода:

#if defined FILTERSCRIPT

public OnFilterScriptExit()
<
return 1;
>

Он реализует условное добавление в проект некого кода. Первая его строка означает, что если определена переменная FILTERSCRIPT, то в скрипт будут добавлены строки ниже до строки #else, а в противном случае – строки ниже #else и выше #endif. Переменная FILTERSCRIPT определяется строкой #define FILTERSCRIPT, которая была взята в комментарий (то есть по умолчанию она не определена, так как скрыта от компилятора символами //). Теперь о том, для чего это все делается. Если вы пишете гейм-мод, то вам нужны только строки от #else до #endif, переменную FILTERSCRIPT вы не определяете и эти строки добавляются в проект. Если же вы пишите фильтр-скрипт, то Вам нужны строки ниже #if и до #else, то есть необходимо объявить переменную FILTERSCRIPT, убрав знаки //. Можно поступить проще, просто убрав всю эту #if #esle #endif конструкцию и вручную вставив нужные строки, а можно и вовсе их не вставлять, если они вам не нужны. Теперь разберем, что именно мы вставляем. Функции public OnFilterScriptInit() и main() делают почти одно и то же, но первая выполняется при загрузке скрипта, а вторая – при загрузке мода. Команда
print(«мой текст»);

Печатает текст в кавычках в консоль сервера («\n” означает перевод курсора на следующую строку консоли).

Функция OnFilterScriptExit() выполняется при выгрузке скрипта из памяти.

Ниже идут все обработчики событий Pawno, называемые также пабликами (public). Когда в игре что-то происходит, например, игрок пишет сообщение в чат, вызывается соответствующий обработчик, в который через параметры передается нужная информация, например, ид игрока, написавшего в чат. При написании скрипта, даже большого, обычно не используются все обработчики, а лишь некоторые из них. В принципе, все написания скрипта сводится к написанию кода нужных обработчиков, ну и некоторых вспомогательных функций.

Чтобы не быть голословными, разберем пример. Напишем скрипт, который при вводе команды «!03 текст» печатает «ник: текст» красным цветом. Для этого определим код обработчика public OnPlayerText(playerid, text[]). Кроме того, определим функцию работы со строками strtok(const string[], &index), которая широко используется в pawno и ее код можно найти в сети, поэтому разбирать ее не будем. Отметим только, что она возвращает кусок строки string, который находится после символа с номером index и до ближайшего после index пробела. В нашем случае index равен 0, то есть функция вернет часть строки до первого пробела.

Полный код скрипта приведен ниже:

public OnPlayerText(playerid, text[])
<
new txt[256];
new idx;
txt = strtok(text, idx);
if(!strcmp(«!03», txt, true))
<
new mess[256];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
strmid(txt,text,4,strlen(text));
strcat(mess, name);
strcat(mess, «: «);
strcat(mess, txt);
SendClientMessageToAll(COLOR_RED,mess);
return 0;
>
return 1;
>

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp

Помогаю новичкам!
По всем вопросам пишите в лс.

Источник

Урок 1. Разбираемся в Pawno

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno sampАвторСообщение Admin
Admin

Итак, здравствуйте, я начинаю серию уроков про программировании в программе Pawno. Делать мы будем Rp мод, но принципы которые мы изучим помогут вам сделать свой мод на любую тематику. Но не будем тянуть кота за. а начнём.

Итак, сначала разберёмся что-же такое Pawno. Дак вот:

Pawno- это программа для создания и компилирования игрового мода для игры GTA SA-MP. Я думаю для тех, кто уже знаком хотя-бы с каким-то языком программирования будет всё очень хорошо понятно. (Даже HTML).

Итак, заходим в Pawno, а именно в new.pwn именно с него мы будем писать мод.

И разберём что-же мы там видим?
Код:

Чтобы активировать просто уберите //

Далее мы видим:
Код:

#if defined FILTERSCRIPT

это инклуды позднее я поясню для чего они нужны, а пока их лучше не трогать.

И последнее в этом паблике: это печать в консоль сервера

Чуть пониже видим:
Код:

Это то без чего не будет работать мод, это нужно оставить обязательно (текст можно менять)

Я думаю теперь разберём остальные паблики и хватит.

Следующий паблик:
Код:

когда игрок вводит команду

если игрок кликнул на игрока в Tab-MENU

Ну и на этом урок закончен, спасибо за внимание, в следующем уроке мы продолжим!

Источник

Учебник PAWN RU

From SA-MP Wiki

Contents

Учебник PAWN

Делаем простой deathmatch

Если всё правильно, то когда вы присоединитесь к своему серверу через клиент SA:MP и начнётся игра, вы должны появиться около казино в Лас Вентурасе. К сожалению, вы не сможете увидеть меню выбора персонажей (сейчас всего только один), но мы можем с лёгкостью изменить это потом. Также это не очень интересный deathmatch из-за отсутствия противников.

Классы

Это параметры класса, следуют они в таком порядке:

Теперь скопируйте эту строку:

и поместите её под той, которую вы нашли в скрипте. Теперь вы будете выбирать между СиДжеем с пустыми руками и Балласовцем с бейсбольной битой, пистолетом и Тек9.

Получение координат, направлений и id моделей

Вы наверняка захотите добавить дополнительные точки возрождения, поскольку если все будут появляться в одном и том же месте, то deathmatch будет скучным и кемпинг будет невероятно лёгким. Здесь в игру вступает режим отладки. Запустите «samp_debug.exe«, находящийся в корневой директории San Andreas. После того как запустится режим отладки, дойдите до той позиции, где вы хотите сделать точку возрождения и напечатайте «/save» в окне чата (чтобы вызвать окно чата нажмите «t» или тильду (

)). Эта команда сохранит ваше местоположение, направление и id модели игрока в текстовый файл «savedpositions.txt» в корневой директории SA.

Знакомство с функциями и вызываемыми функциями

Before we can continue you will need to be introduced to callbacks. These are the chunks of code already in your gamemode that look something like this:

This is the OnPlayerDisconnect callback, that means this section of code is run by the server whenever a player disconnects, so if you want to show a big message on the screen when a player leaves you would put the code for that here. All the callbacks the game uses (except 2, but they are used by filterscripts, not gamemodes and are not covered here) are in your file, you cannot make up your own. Most of them appear as the one above does, but some (i.e. «OnPlayerCommandText«, «OnPlayerRequestClass«, «OnGameModeInit» and «main» (which is not strictly a callback and never has more than your game title)) have other bits in already, either to make the game work or to show you what to do there. You may also use other, similar blocks (as we are about to) which look the same but are called functions, these have to be called by you yourself. Here is a function called «IMadeThis» (note the lack of spaces).

You may have also noticed a very quick introduction to comments there, everything on a line after «//» will be ignored, as will anything anywhere between «/*» and «*/«. As a function is not called by the game we need to call it ourselves from a callback, this is dead easy as most of the commands you use to code with are infact premade functions (commands are infact different), so if you placed:

in your OnPlayerDisconnect callback (it must be between the «<» and «>» and also before the «return 1;» it would run that function and print a message in the server window when you disconnected (remember the othr things in there are ignored). We don’t generally want to print things to the server window and all the «print» and «printf» functions already in the file are generally removed by the coder. Only things between the braces are in the function/callback (from now on function refers to callbacks aswell as they are a special case of function), the line above is the name of the function. «public» means the function can be run by any other bit of code, this basically means your code can be run when you call it, we’re not worried about private functions as they are not generally used in SA-MP (if at all). The brackets after the function name enclose the parameters list, we haven’t covered these yet but you can see an example of their usage in some of the callbacks in your blank file, note that those parameters are automatically passed when the game calls the function, if we are using a custom functions (i.e. not a callback) and we want to use some parameters we will need to pass them ourselves. One tiny other thing which should be mentioned is that all lines apart from lines with braces on (and even them in certain circumstances, but these will be covered later) and lines directly before an open brace (braces may be on the end of that line or, as shown here, on a new line), end with a semicolon to denote the end of a process.

Делаем командный deathmatch

OK, now you know how to make classes and place them about we will show you how to set teams, this will be the first bit of real coding but is fairly easy. I will just be using the two classes described on this page so if you have more remove them for now or start a new mode and make sure only those two are in. Classes are numbered in order from 0, so the first class in your file is 0, the second is 1 and so on (computers and programs nearly always start from 0 in counting (you will find that your playerid in a test game is 0)). We want to set the team based on which class they choose (either Grove or Balla), you may look at the callbacks and think that this would go in the OnPlayerRequestClass function, and you would be correct. When the select their class you want to set the team based on that, we can’t do it in the OnPlayerSpawn function as at that point we don’t know the class they have selected (that is a parameter and only parameters we are passed or which are global in your script (we will cover this later) can be used in any function). First we need to define our teams, under the «#include» line(s) at the top of your file add these lines:

If you want to alter the colors, that’s fine, just remember that the last two digits are the alpha and the lower that is the less you can see the color. Defines are purely replacements, now if you ever want to use the number 1 in your script you can use TEAM_GROVE instead, this is not a good idea for normal calculations as it makes them harder to read, but for using to denote teams, which are only denoted by a number, it makes it alot clearer what’s going on (and makes it very easy to change the teams around or modify later as you need only change the 1 in the define rather than all the instances of it throughout the code. When the code is compiled, all the «TEAM_GROVE«s will be replaced by 1, it is not like a variable, it is a constant, it doesn’t change. Now under those lines add:

This is called a global array. An array is basically lots of variables (places you store data to read and write) clumped together to store lots of data at once. The «MAX_PLAYERS» is a pre-defined constant (done in exactly the same way as we did our defines. MAX_PLAYERS is actually set at 100, so this means that our array can store up to 100 pieces of data. The g on the name means global, but that doesn’t make it global (it just makes it easier to tell what variables do what, defining it outside a function means it is global and can be used by all our functions. Any variable defined in a function is local to that function and it cann’t have the same name as another variable in the same function or a global variable (which is also why the g is useful), it can however have the same name as another variable in another function. All the «playerid» variables in your blank script are infact all independent variables, each local to a different function, however they are all passed the same data, but just remember that any functions you make won’t auomatically have that data. Now we have that set up we can set the teams:

Place that code OUTSIDE a function in your code (as it is a new function) and put these lines as the first things after the open curly braces in your OnPlayerRequestClass callback (notice the way the variables are not global so we are having to pass them to out function too):

This will save the players team to an array through our new function. Data in an array is referenced by a number, so array[0] is the first item of data, array[1] is the second and so on, as we are using gTeam[playerid], depending on which playerid we are passed will define where in the array to store the data, so for player 5 their data will be stored at array position 5 (remember, this is the 6th piece of data). Now copy this function:

And add the following line to OnPlayerSpawn:

We now have our teams, but what have we actually done?

In our first function, we check which class they chose (remember we said that the first class defined in your file was class 0?) «==» means «is equal to», a single equals sign simply sets the variable to the number given (as seen on the next line but one). The curly braces sepparate the functions between them from the rest of the code, bits in there are only executed if the selected class is 0 (cj), if it isn’t, the else command comes into play and executes insted (this executes whenever the «if» command is false (i.e. the class isn’t 0)), since we only have two classes to choose from this must mean we’re Balla:

We don’t need a return here as there is no data to return.

The second half set the players’ color when they spawn, so you can tell who’s on which team. As we saved their team to a global array, we can still access the data even though it is in a separate function.

Hopefully you can see what this is doing now, if the player who just spawned (as referenced by playerid) is in TEAM_GROVE, we set their color to TEAM_GROVEs color.

This next section is a little different, it could easilly have been done like this:

But the way it is done allows you to set their color to TEAM_BALLAs color only if the first part is false (as sorted by the ELSE) AND if they are in TEAM_BALLA, this allows you to add more options by adding more «else if ()» blocks to the end as one will only be executed if all the blocks before it weren’t.

Транспорт

Хорошо. Если вы читали предыдущие разделы, то у вас уже должен быть очень простой deathmatch или командный deathmatch с расставленными точками возрождения где вы хотите. Теперь давайте добавим транспорт. Большинство команд на PAWN делают именно то как они называются. Мы же хотим добавить транспорт, так давайте поищем нужные команды:

Если вы нажмёте на одну из них и посмотрите в статус окно (окно внизу редактора), вы увидите их синтаксис (какую информацию\параметры вам требуется дать для их работы):

Они очень похожи друг на друга, но вот здесь важно знать одну вещь: CreateVehicle создает авто ОДИН раз, а AddStaticVehicle создаёт точку возрождения данного авто. Они должны выполняться с начала игры, поэтому их следует поместить в вызываемую функцию «OnGameModeInit()«.

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp

Я получил такие координаты:

Note: These are called floats, 11.0 is a float despite being whole, any whole number being used as a float must have a trailing «.0» to denote it as a float. These numbers are in the english format of using a decimal point («.«), commas are used to separate parameters. Also remember the 4th number is angle, so if we now add the following line to the game mode in OnGameModeInit, recompile and test, we will get a bright pink infernus outside the casio which is the default spawn position for cj. Note: on a car which uses the secondary color (such as a cop car (id 596)) this would be a pink and blue car as that is the secondary color.

Ограничение игрового мира

А что, если нужно, чтобы игра происходила на определённой территории? В этом случае прибегнем к функции SetPlayerWorldBounds и, для начала, посмотрим её синтаксис:

Пора опробовать эту функцию на деле. Вставим эту функцию в вызываемую функцию OnPlayerSpawn:

И, наконец, скомпилируем функцию. Теперь вы можете прокатиться на велосипеде в пределах парка с рампами в Лос Сантосе.

Источник

SamPawno

5 уроков о Pawno

Описание: Основы скриптинга
Модератор: SJplayer

#1 Дим » 18 апреля 2013, 12:20

5 уроков о Pawno
Автор: Jul

Это скобочки открытия/закрытия :

Это сообщение на сам сервер:

Это установка название нашего режима:

SetGameModeText ( «Blank Script» );

Это паблик в котором содержится все вышеперечисленное, их мы пока трогать не будем.
Каждый паблик выполняет свою задачу, можно создавать свои паблики и засунуть туда определенные действия и сделать чтобы они выполнялись в нужный момент. Это сложновато, поэтому не будем пока об этом. Можно задавать определенные действия например при подключении, спавне.

Сработает как сообщение в чат:

«Вы погибли» ( без кавычек ) 0xFFFF00AA

Делаем телепорт, вообщем простенько но может кому пригодится.

И всё это вставляем в в паблик:

Расставим транспорт и респауны.

Если вы сохраняли координаты находясь пешком у вас должно быть:

Дальше поставим координаты в наш скрипт:

public SetPlayerToTeam Color ( playerid )

if( IsPlayerConnect ed ( playerid ))
<
SetPlayerColor

Чтобы сделать цвет банды нам надо просто добавить строки:

SetPlayerColor (( PlayerInfo [ playerid ][ pMember ]== 4 || PlayerInfo [ playerid ][ pLeader ] == 4 ), 0xFFFF00AA );

SetPlayerColor (( PlayerInfo [ playerid ][ pMember ]== 4 || PlayerInfo [ playerid ][ pLeader ] == 4 ) //какая фракциия (id) будет таким цветом

И так несколько раз( смотря для сколько банд вы поставите)

Телепорт по пикапу

Где все new (переменные) пишем:

Далее в поиске ищем:

Источник

Часто задаваемые вопросы

Что такое pawno samp. Смотреть фото Что такое pawno samp. Смотреть картинку Что такое pawno samp. Картинка про Что такое pawno samp. Фото Что такое pawno samp

Я новичок в pawn, с чего начать изучение?

Я сам начинал со вставки готовых скриптов в моды, и так постепенно научился, но рекомендую читать уроки:
Урок №1
Урок №2
Урок №3
Урок №4
Урок №5
Автовызываемые функции

А так же прочитать учебник: перейти и прочитать

Как обновить includes?

• Качаете с офф. сайта сервер, и меняете папку pawno Вот и все!
p.s. когда открывать мод будете, открывайте его через pawno/pawno.exe

Что обозначает каждая папка?

Заходите в pawno/pawno.exe, нажимаете на «New», все что появилось в коде, удаляете, пишите вверху:

Как из pwn сделать amx?

Чтобы из pwn сделать amx нужно открыть pawno/pawno.exe(это компилятор, с помощью которого вы будете компилировать мод из pwn в amx),
после открываете свой мод, и нажимаете F5.

Как убрать бонусы, которые мне даются при трюках.

В public OnGameModeInit вставляем:

У меня имеется инклюд, но при компиляции пишет что не найден, что делать?

Зайдите в pawno/pawno.exe и с помощью него откройте свой мод и скомпилируйте(убедитесь, что инклюд находится в pawno/includes).

Как сделать бесконечный азот?

Находите public OnPlayerKeyStateChange и туда вставляете:

Как при убийстве давай деньги?

Найдите public OnPlayerDeath и добавьте туда:

Как дать игроку деньги при начале игры?

Находите public OnPlayerConnect(playerid) и вставляете туда:

Как изменить дальновидность ника?

Находите public OnGameModeInit и туда вставляете:

Как сделать анимацию при выборе скина?

Находите public OnPlayerRequestClass и туда вставляете:

Отображение в чат вход/выход игроков, как такое сделать?

Сначало находите public OnPlayerConnect(playerid) и туда вставляете:

Потом ищите public OnPlayerDisconnect(playerid, reason) и туда вставляете:

Как перевести мод на актуальную версию клиента(на данный момент 0,3д)?

Сначало качаем программу Super Converter
После открываем ее и с помощью нее открываем вашу карту сделанную в мта:
Обычное расположение: C/Programm Files/MTA San Andreas/Server/Mods/deathmatch/resources/ваша папка/ваш файл.map
Нажимаем конвертировать и готово, после открываем ваш мод, находим public OnGameModeInit и вставляем туда ваши объекты.

Как подключить include?

Сначало поставьте ваш filtersctipt в папку filtersctipts, и в server.cfg пропишите напротив
filtersctipts название_вашего_скрипта
Готово!

Как подключить плагин?

Для начала поставьте ваш плагин в папку plugins(если ее нету, создайте). После откройте server.cfg
и пропишите ниже plugins название_плагина.

Как сделать чтобы справа показывало кто кого убил(ник, иконка)?

Все просто, в OnPlayerDeath(playerid, killerid, reason) вы добавляете следующее:

Куда вставлять команды?

Все команды сервера распологаются в public OnPlayerCommandText.

Как на команды поставить проверки на фракции/работы?

Делается это легко, вот например ваша команда:

И чтобы так сказать привязать команду, ставите соответствубщую проверку:

Как удалить стандартные объекты в Gta Sa и вставить код в samp?

Для начала вы читаете это: перейти, после готовый код, вы вставляете в public OnPlayerConnect(playerid)
получится примерно так:

Как убрать стандартные желтые пикапы с сервера?

Найдите в своем моде public OnGameModeInit и туда вставьте:

Как изменить названия рангов?

Открываете свой мод, с помощью ctrl + f находите название ранга(которого хотите изменить) и везде, где нашли, меняете на свое.

У меня прибавляются деньги, после отнимаются, что это и как исправить?

Если вы столкнулись с такой проблемой, значит у вас стоит античит, а там где вы берете деньги, там они выдаются стандартной функцией, вам необходимо найти ее, и заменить на функцию античита.

Как изменить респаун у фракции?

Перейти и посмотреть урок

Как создать диалог и какие виды диалогов бывают?

Копирование на посторонние ресурсы запрещено! ©

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *