Баннерообмен
Заказать рекламу
Реклама:



  • Страница 1 из 1
  • 1
Уроки pwn
ak-74Дата: Четверг, 05.05.2011, 01:48 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 33
Награды: 6
Репутация: 44
Статус: 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
Награды: 6
Репутация: 44
Статус: 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
Награды: 6
Репутация: 44
Статус: 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
Награды: 6
Репутация: 44
Статус: 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
Награды: 6
Репутация: 44
Статус: 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;   
   }

Теперь сохраните этот скрипт, дальше мы продолжим с ним работать;
==========================================================================
 
  • Страница 1 из 1
  • 1
Поиск:
Code


Мини-чат
crelgame.3dn.ru/ (c) Все права защищены! | 2010-2011 | 
Сайт оптимизирован под браузер Opera. Sitemap | Sitemap-forum.
Использование материалов, только с разрешения администрации Вся информация предоставленная на сайте, является собственностью авторов.
Любое копирование без размещения ссылки на источник запрещено!

Мы используем Сделать бесплатный сайт с uCoz
РИП скриптов данного сайта запрещен!