Уроки pwn
| |
ak-74 | Дата: Четверг, 05.05.2011, 01:48 | Сообщение # 1 |
 Рядовой
Группа: Пользователи
Сообщений: 33
Статус: Offline
| НИМАНИЕ АВТОР СТАТЬИ Viru$174 Введение Качаем сервер (смотрите первое сообщение он там есть) >После того как скачали в папке с сервером будет папка pawno нужный нам pawno.exe - редактор скриптов А также нужные нам файлы: >samp-server.exe >server.cfg =========================================================================== PWN файлы - файлы скрипта, которые редактируются через прогу pawno AMX файлы - файлы скомпиллированные, т.е преобразованные из pwn в amx, эти файлы нельзя никак редактировать и используются они исключительно сервером как готовый сценарий. samp-server.exe - непосредственно сам сервер server.cfg - файл конфигурации сервера =========================================================================== Начнём с server.cfg; Открываем его и видим это: echo Executing Server Config... lanmode 0 rcon_password changeme maxplayers port 7777 hostname SA-MP 0.3 Server gamemode0 grandlarc 1 filterscripts base gl_actions gl_property gl_realtime announce 0 query 1 weburl www.sa-mp.com maxnpc 0 onfoot_rate 40 incar_rate 40 weapon_rate 40 stream_distance 300.0 stream_rate 1000 В строке "maxplayers" указывается максимальное количество игроков, которые могут присутствовать на сервере, в данном случае 50. port- порт соединения с сервером hostname - Название сервера, в данном случае "Unnamed Server". gamemode0 здесь указываеться скрипт сценариев, которые будет использовать сервер weburl - адрес вашего сайта rcon_password - пароль администратора _____________________ По умолчанию стоит сценарий grandlarc как показательный; Вообще можно найти в папке самп-сервера несколько уже написанных, готовых скриптов, правда, в них маленькая функциональнось=) Используемый файл сценария сервера имя.amx должен находится в папке gamemodes, и должен быть обьявлен в файле server.cfg. _____________________ После того как мы настроили и указали серверу какой скрипт использовать, запускаем файл samp-server.exe, откроется консоль сервера(закрывать её запрещено) и мы теперь можем входить в игру-) P.S: Чтобы войти на свой-же сервер нужно узнать свой ip адрес[font=Impact]
|
|
|
|
ak-74 | Дата: Четверг, 05.05.2011, 01:49 | Сообщение # 2 |
 Рядовой
Группа: Пользователи
Сообщений: 33
Статус: Offline
| Павно и скриптинг начало //это однострочный комментарий /*это многострочный комментарий*/ Кментарии игнорируюься pawno[/size] Давайте откроем павно и создаим новый проект: Зайдите в папку pawno там будет лежать файл new.pwn будем работать с ним После того как откроете файл увидете следующий код: Code #include <a_samp>
main() { print("\n----------------------------------"); print(" This is a nk GameModeScript"); print("----------------------------------\n"); }
public OnGameModeInit() { print("GameModeInit()"); SetGameModeText("nk Script"); AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; }
public OnPlayerRequestClass(playerid, classid) { printf("OnPlayerRequestClass(%d, %d)", 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 OnGameModeExit() { print("GameModeExit()"); return 1; }
public OnPlayerConnect(playerid) { printf("OnPlayerConnect(%d)", playerid); return 1; }
public OnPlayerDisconnect(playerid) { printf("OnPlayerDisconnect(%d)", playerid); return 1; }
public OnPlayerSpawn(playerid) { printf("OnPlayerSpawn(%d)", playerid); return 1; }
public OnPlayerDeath(playerid, killerid, reason) { printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason); return 1; }
public OnVehicleSpawn(vehicleid) { printf("OnVehicleSpawn(%d)", vehicleid); return 1; }
public OnVehicleDeath(vehicleid, killerid) { printf("OnVehicleDeath(%d, %d)", vehicleid, killerid); return 1; }
public OnPlayerText(playerid) { printf("OnPlayerText(%d)", playerid); return 1; }
public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp(cmdtext, "/mycommand", true)==0) { /* Do something here */ return 1; } return 0; }
public OnPlayerInfoChange(playerid) { printf("OnPlayerInfoChange(%d)"); return 1; }
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { printf("OnPlayerEnterVehicle(%d, %d, %d)", playerid, vehicleid, ispassenger); return 1; }
public OnPlayerExitVehicle(playerid, vehicleid) { printf("OnPlayerExitVehicle(%d, %d)", playerid, vehicleid); return 1; }
public OnPlayerStateChange(playerid, newstate, oldstate) { printf("OnPlayerStateChange(%d, %d, %d)", playerid, newstate, oldstate); return 1; }
public OnPlayerEnterCheckpoint(playerid) { printf("OnPlayerEnterCheckpoint(%d)", playerid); return 1; }
public OnPlayerLeaveCheckpoint(playerid) { printf("OnPlayerLeaveCheckpoint(%d)", playerid); return 1; } ========================== Приведу некоторые расшифровки: Код в основном строится по принципу: public Событие() { действие return 1; } ========================== В оригинале мы видим: Code #include <a_samp>
main() { print("\n----------------------------------"); print(" This is a nk GameModeScript"); print("----------------------------------\n"); } Псняю: Главная фунякция - это функция, с которой запускается сама программа. В консольном приложении (а сервер Sa-Mp консольное приложение) её имя - main() Code { print("\n----------------------------------"); print(" This is a nk GameModeScript"); /*здесь вы можете написать название вашего сервера вместо " This is a nk GameModeScript"*/ print("----------------------------------\n"); } ===================================== #include <a_samp> #include - это оператор компилятора (программы, которая преобразует исходный код в готовый для использования файл, в данном случае из pwn в amx) он включает в текст программного модуля файл, который указан в угловых скобках - <a_samp>; Сам же файл содержит описание различных функций, которые нужны нам для создания скрипта; В Pawno Перед списком определённый функций указывается файл, в котором находится описание этох функций. (Правое окошко pawno) Например нам нужна функция gettime, мы видим, что её описание находится в файле time.inc ; следовательно, мы должны включить этот файл в проект строкой #include <gettime> либо #include <gettime.inc>; ======================================
|
|
|
|
ak-74 | Дата: Четверг, 05.05.2011, 01:50 | Сообщение # 3 |
 Рядовой
Группа: Пользователи
Сообщений: 33
Статус: Offline
| Павно и скриптинг Продолжение Разберём следующий код: Code public OnGameModeInit() { print("GameModeInit()"); SetGameModeText("Blnk Script"); AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; } OnGameModeInit() - Событие: При старте игры делать : print("GameModeInit()"); - эта функция выводит инфу об игре; SetGameModeText("nk Script"); - это выводит информацию о моде игры - его вы называете сами, в данном случае - nk Script. ____ AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); Добавить скин в игру где (по порядку): 0 -номер (ID) скина; 1958.3783 - расположение спавна по в 3х мерной плоскости по координате X; 1343.1572 - расположение по координате Y; 15.3746 - расположение по координате Z; 269.1425 - угол поворота обьекта (всего соответственно 365 градусов) 0, 0, 0, 0, 0, 0 - оружие и патроны где: 0 - ID оружия №1 0 - количество патронов к оружию №1 0 - ID оружия №2 0 - количество патронов к оружию №2 0 - ID оружия №3 0 - количество патронов к оружию №3 ___________ В общем схематичном виде это выглядит так: AddPlayerClass(Player ID, X, Y, Z,Rotation, ID weapon1, Patrons to the weapon 1, ID weapon2, Patrons to the weapon 2, ID weapon 3, Patrons to the weapon 3); ___________________________ Типы и номера [ID] оружия: ID оружия: 0 Ничего 2 Гольф клюшка 3 Night Stick 4 нож 5 Бейсбольная бита 6 Лопата 7 Бильярдный кий 8 Катана 9 Бензопила 10 Фиолетовый фаллоимитатор 11 Белый фаллоимитатор 12 Длинный белый фаллоимитатор 13 Белый фаллоимитатор 2 14 Букет цветов 15 Трость 22 Пистолет 23 Пистолет с глушителем 24 Пустынный орёл (пистолет) 25 Ружьё 26 Обрезы 27 Боевое ружьё 28 Микро узи (Mac 10) 29 MP5 30 Калашников 31 M4 32 Tec9 33 Винтовка 41 Баллончик краски 42 Огнетушитель 44 Очки ночного видения 45 Инфракрасные очки 46 Парашют 38 Миниган __________________________ Помимо этого в этом же разделе добавляются Машины - AddStaticVehicle, и статические обьекты AddStaticPickup; Вид строки для добавления машины: AddStaticVehicle(445,2650.7654,-1998.9688,13.1893,270.4203,11,11); Где: AddStaticVehicle(ID машины,координата X,Y,Z,Rotation,цвет машины 1,цвет машины 2); _________________________ AddStaticPickup(342, 2, 2498.0862,-1683.8715,13.3885); Где: 342 - ID обьекта, в данном случае - граната; AddStaticPickup(ID model,type/тип,X,Y,Z); _________________________ Создадим строки, содержащие 2 скина, 3 машины, и 1 статический обьект: Code public OnGameModeInit() { print("GameModeInit()"); SetGameModeText("My Script"); //скины AddPlayerClass(52,2784.1335,-1814.6799,11.5077,195.3232,31,100,25,50,10,0); AddPlayerClass(181,1536.9807,-1478.1770,9.5000,172.4549,28,2000,5,0,22,50); //автомобили AddStaticVehicle(445,1584.4043,-1668.0411,6.0816,270.7025,0,1); AddStaticVehicle(510,874.2382,-1017.4599,31.9577,143.6482,39,39); AddStaticVehicle(416,1177.4802,-1308.7390,14.0072,269.3701,1,3); //стат. обьект AddStaticPickup(342, 2, 2784.1335,-1814.6799,11.5077); return 1; } ============================= Code public OnPlayerRequestClass(playerid, classid) { printf("OnPlayerRequestClass(%d, %d)", 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; } ________________ OnPlayerRequestClass Событие - если игрок выбирает класс скина; Действия: Code SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); Здесь указывается место, где находится (пролистываются) классы скинов; *playerid ВЕЗДЕ обозначает номер [ID] игрока в игре , это может быть любой номер - 3,45,80,99..., если же мы хотим задействовать данного, действующего (активного) игрока, вместо номера пишется слово playerid ____________________________ SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); Здесь указывается положение камеры при выборе класса скина; public OnGameModeExit() { print("GameModeExit()"); return 1; } OnGameModeExit - Событие - Если игрок входит из игры; __________________________________________________ _________ Code public OnPlayerConnect(playerid) { printf("OnPlayerConnect(%d)", playerid); return 1; } OnPlayerConnect - Событие - Если игрок подключается к серверу игры __________________________________________________ _________ Code public OnPlayerDisconnect(playerid) { printf("OnPlayerDisconnect(%d)", playerid); return 1; } OnPlayerDisconnect - Событие - Если игрок разьединился __________________________________________________ _________ А также: OnPlayerSpawn - если игрок находится (появился) на респауне; OnPlayerDeath - если игрок убил другого игрока; OnVehicleSpawn - автомобиль на спавне; OnVehicleDeath - если испортилась машина; OnPlayerEnterCheckpoint - вход на чекпоинт; OnPlayerLeaveCheckpoint - выход с чекпоинта; и.др... __________________________________________________ ________________
|
|
|
|
ak-74 | Дата: Четверг, 05.05.2011, 01:50 | Сообщение # 4 |
 Рядовой
Группа: Пользователи
Сообщений: 33
Статус: Offline
| Рассмотрим некоторые функции. SendClientMessage - отправить сообщение в чате игроку; Вид: SendClientMessage(playerid, color, const message[]); SendClientMessage(ID игрока, цвет сообщения,"сообщение"); Пример: SendClientMessage(playerid, 0xAA3333AA, "Здавайся, террорист!"); ======================================================= SendClientMessageToAll - отправить сообщение всем игрокам в чате; Вид: SendClientMessageToAll(color, const message[]); ======================================================= GameTextForPlayer - отправить сообщение на экран (только латинские быквы!) Вид: GameTextForPlayer(playerid,const string[],time,style); GameTextForPlayer(ID игрока,"сообщение",время показа сообщения (мс),стиль сообщения); Пример: GameTextForPlayer(playerid, "W E L C O M E !", 4000, 3); ======================================================= GameTextForAll - отправить сообщение на экран всем игрокам Вид: GameTextForAll(const string[],time,style); ======================================================= Kick(playerid);//кикнуть игрока с сервера, без комментариев Ban(playerid);//забанить игрока на сервере, без комментариев ======================================================= *Далее могут попадаться приставки Get и Set; Get - получить (какое-то значение), Set - установить данное значение ======================================================= SpawnPlayer - переместить игрока на спавн (приравнивается к функции /kill) Вид: SpawnPlayer(playerid); ======================================================= SetPlayerSkin - установить данному игроку данный скин; Вид: SetPlayerSkin(playerid, skinid); ======================================================= SetPlayerScore - установить данному игроку заданное количество очков (фрагов) Вид: SetPlayerScore(playerid,score); ======================================================= GetPlayerPos - получить текущее месторасположение игрока в трёхмерном пространстве; Вид: GetPlayerPos(playerid, &Float:x, &Float:y, &Float:z); Пример: GetPlayerPos(playerid, posx, posy, posz); posx,posy,posz - этотак называемые "переменные". Компилятор соотнесёт с этими именами определённые адреса в оперативной памяти компьютера, и начиная с этих адресов, выделит участки памяти (в байтах) в соответствии с тем, какого типа обьявлены переменные; В нашем случае переменные должны иметь тип Float, что значит дословно с плавающей точкой, не целое число. Чтобы можно было испольовать переменную её нужно обьявить, и дать ей имя. К примеру, нам нужно создать переменную типа Float с названием "coordinata"; Мы пишем (обьявляем) её после списка операторов #include, пример: Code #include <a_samp.inc> #include <core> new Float: coordinata; ======================================================= Где new Float: coordinata; - обьявление пременной (дословно: Новая_переменная С_плавающей_точкой: <с названием> coordinata; Пля более подробной инфы на эту тему читайте учебник Страуструпа ======================================================= SetPlayerPos - переместить данного игрока на данную позицию; Вид: SetPlayerPos(playerid, Float:x, Float:y, Float:z); ======================================================= GetPlayerHealth - Получить (прочесть) данные о количестве жизней в переменную Вид: GetPlayerHealth(playerid, &Float:health); Где &Float:health - переменная, пример: GetPlayerHealth(playerid, health); ======================================================= SetPlayerHealth- Дать данному игроку заданное количество жизней; Вид: SetPlayerHealth(playerid, Float:health); Пример: SetPlayerHealth(playerid, 2000); ======================================================= SetPlayerColor - установить заданный цвет данному игроку; Вид: SetPlayerColor(playerid,color); Пример: SetPlayerColor(playerid,0xDDDD2357); ======================================================= SetPlayerInterior - переключить игрока на заданный интерьер; Вид: SetPlayerInterior(playerid,interiorid); Пример: SetPlayerInterior(playerid,6); ======================================================= PlayerPlaySound - воспроизвести у игрока определённый звук; Вид: PlayerPlaySound(playerid, soundid, Float:x, Float:y, Float:z); Пример: PlayerPlaySound(playerid, 1053,100, 100,100); Где X,Y,Z - координаты "Происхождения" звука, 1053 - Id звука; ======================================================= GivePlayerMoney- дать игроку определённое количество денег; Вид: GivePlayerMoney(playerid,money); В pawno нет функции "Забрать деньги", для того чтобы отнять деньги нужно просто написать число в отрицательном виде; -Школьная математика: сто плюс минус пятьдесят равно пятьдесят ======================================================= ResetPlayerMoney - отнять у игрока (сбросить) все деньги; Вид: ResetPlayerMoney(playerid); ======================================================= GivePlayerWeapon - дать игроку оружие; Вид: GivePlayerWeapon(playerid, weaponid, ammo); Расшифровка: GivePlayerWeapon(ID игрока,ID оружия,Количество патронов к даваемому оружию); Пример: GivePlayerWeapon(10, 12, 5000); -Дать игроку под номером 10, оружие под номером 12, с количеством патронов равным 5000'ам; =======================================================
|
|
|
|
ak-74 | Дата: Четверг, 05.05.2011, 01:51 | Сообщение # 5 |
 Рядовой
Группа: Пользователи
Сообщений: 33
Статус: Offline
| Используем функции с умом; Павно и скриптинг продолжение Итак, рабочая область редактора скриптов pawno имеет 2 окна, в левом непосредственно сам программный код, в правом доступные для использования функции; ============================================================== *Для быстрой вставки функции в основное окно исходного кода, нужно нажать быстро 2 раза на нужную функцию при этом предварительно установив курсор мышки в нужное место, если выделить какую то функцию, то в строке состояния высвечиваются аргументы, необходимые для использования данной функции. ============================================================== Разберём на примерах внедрение различных функций; ============================================================== Например, зделаем так, чтобы при коннекте игрока ему выдавалось приветственное сообщение, для этого ищем строку: ============================================================== Code public OnPlayerConnect(playerid) Пишем: Code SendClientMessage(playerid, 0xFF0000AA, "Добро пожаловать на сервер!"); Получаеся слудующее: public OnPlayerConnect(playerid) { printf("OnPlayerConnect(%d)", playerid); //Пишем: SendClientMessage(playerid, 0xFF0000AA, "Добро пожаловать на сервер!"); return 1; } При коннекте игроку выдаётся сообщение - <Добро пожаловать на сервер!> ======================================================= Для старта добавим игроку немного денег для старта, и получим следующий код: Code public OnPlayerConnect(playerid) { printf("OnPlayerConnect(%d)", playerid); SendClientMessage(playerid, 0xFF0000AA, "Добро пожаловать на сервер!"); GivePlayerMoney(playerid, 5000);//даём 5000 $ игроку сразу после его коннекта return 1; } При коннекте игроку выдаётся сообщение - "Добро пожаловать на сервер!", а также выдаётся 5000$; ==================================================================== Зделаем награду за убийство игрока: Ищем строку: Code public OnPlayerDeath(playerid, killerid, reason) Пишем: GivePlayerMoney(killerid, 2200);//добавить игроку 2200$ за убийство SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);//добавить 1 очко (фраг) В итоге выходит: Code public OnPlayerDeath(playerid, killerid, reason) { GivePlayerMoney(killerid, 2200);//добавить игроку 2200$ за убийство SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);//добавить 1 очко (фраг) printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason); return 1; } По подобному принципу вы можете попробовать к примеру использовать функцию выдачи оружия за убийство, для этого в разделе ======================================================================= Code public OnPlayerDeath(playerid, killerid, reason) Воспользуемся функцией GivePlayerWeapon; Получаем: Code public OnPlayerDeath(playerid, killerid, reason) { GivePlayerMoney(killerid, 2200);//добавить игроку 2200$ за убийство SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);//добавить 1 очко (фраг) GivePlayerWeapon(10, 12, 5000);//даём оружие printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason); return 1; } Теперь сохраните этот скрипт, дальше мы продолжим с ним работать; ==========================================================================
|
|
|
|
|
|
Использование материалов, только с разрешения администрации
|
Вся информация
предоставленная на сайте, является собственностью авторов.
Любое копирование без размещения ссылки на источник запрещено!
Мы используем Сделать бесплатный сайт с uCoz
|
РИП скриптов данного сайта запрещен!
|
|