Меню сайта
Форма входа
Категории раздела
Уроки по программированию в PAWNO [1]
Поиск
Пятница, 19.09.2025, 02:55
Приветствую Вас Гость

Каталог статей

Главная » Статьи » PAWNO » Уроки по программированию в PAWNO

Уроки по PAWNO
Урок PAWNO 1
ПРИВЕТ УЧЕНИЧЕК))) 
СЕГОДНЯ Я НАУЧУ ТЕБЯ ПОЛЬЗОВАТЬСЯ В pawno 
Начинаем первый урок. Скриптинг са мп происходит в PAWNO. PAWNO это программа компилируящая pwn (изменяемый файл будующего скрипта) в amx (сам скрипт) и для изменения первого. Открыв какойнибудь скрипт мы видим множество надписей и цыферок. Разберем что же они означают. Откроем new.pwn. Начнем разбирать самое простое. 
public OnGameModeInit() 

print("GameModeInit()"); 
SetGameModeText("Blank Script"); 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; 

{ и } это скобочки открытия/закрытия. 
printf("GameModeInit()"); это сообщение на сам сервер. 
SetGameModeText("Blank Script"); это установка название нашего режима. 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); Это добавление спавна ака скина. первый 0 это ID скина, следующие 4 числа это координаты, остальные 6 нулей это оружие и их патроны. 
return 1; это типа конец. 
public OnGameModeInit() это паблик в котором содержится все вышеперечисленное, их мы пока трогать не будем. 
Каждый паблик выполняет свою задачу, можно создавать свои паблики и сувать туда определенные действия и сделать чтобы они выполнялись в нужный момент. Это сложновато, поэтому небудем пока об этом. Можно задавать определенные действия например при конекте, спавне. Найдем 
public OnPlayerDeath(playerid, killerid, reason) 

printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason); 
return 1; 

Урок PAWNO 2
ИТак приветсвую тебя в классе ученик сегодня будет интересный урок 
Сейчас начнем осваивать координаты, где достать куда ставить. В папке San-Andreas'а ищем файл samp_debug.exe (желательно сделать ярлык и поставить его в папку сервера) и нажать кнопку Launch Debug. Начнет загружатся игра и вы окажетесь в Лос Сантосе. В этом режиме вы сможите находить нужные вам координаты. Используйте команды: /v 520 где 520 это ID транспорта, а точнее гидры. Список ID транспорта вы можете найти в файле vehicles.ide или на нашем сайте; /save <примечание> сохранение координат. Встаньте там где нужно сохранить координаты и используйте команду (так же сохраняет и координаты авто если вы в находитесь в нем); F11 и F12 прокрутка скинов вперед и назад соответственно. Далее находим файл savedpositions.txt в папке San Andreas'а (тоже желательно сделать ярлык в папку с сервером) и смотрим там: 
Если вы сохраняли координаты находясь пешком у вас должно быть: 
AddPlayerClass(0,1496.7302,1438.9197,10.8281,115.1 985,0,0,0,0,0,0); // spawn 
Если на авто: 
AddStaticVehicle(494,1505.4323,1450.9718,10.7365,3 57.1130,36,13); // hotring Дальше поставим координаты в наш скрипт: 
ищем 
public OnGameModeInit() 

print("GameModeInit()"); 
SetGameModeText("Blank Script"); 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); 
return 1; 

и переделываем на 
public OnGameModeInit() 

print("GameModeInit()"); 
SetGameModeText("Blank Script"); 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); 
return 1; 

ВНИМАНИЕ ставьте свои координаты из savedpositions.txt! 
Проверяем) 
На сегодня все) 

ОТДЫХАЙ!)

и переделаем на 
public OnPlayerDeath(playerid, killerid, reason) 

SendClientMessage(playerid, 0xFFFF00AA, "Вы погибли"); 
printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason); 
return 1; 

SendClientMessage(playerid, 0xFFFF00AA, "Вы погибли"); сработает как сообщение в чат "Вы погибли" (без кавычек) 0xFFFF00AA это цвет текста про него также напишу в следующих уроках. 
Далее ищем вверху синий треугольник и жмем на него. Должна произойти компиляция и появится текст: 
Pawn compiler 3.0.3367 Copyright © 1997-2005, ITB CompuPhase 
если надпись отличается то есть какието ошибки, в этой надписи будет указано в каких именно строчках есть таковые. Ну про это тоже позже. Дальше, заходим в папку с сервером и открываем server.CFG и меняем там строчку(и) gamemode0(или другие числа) на gamemode0(если другие числа то строчку можно удалить она нам не понадобится) new 1 и врубаем samp-server.exe. 
Дальше идем в папку сан андреаса и открываем samp_debug.exe и там жмем connect lokalhost и мы заходим на сервер и проверяем скрипт. Если все сделано верно то после смерти (можно написать /kill) мы увиим надпись в чате "Вы умерли" (бес скобок) жолтого цвета то все сделано верно, еслиже нет то внимательно проверьте скрипт. На сегодня все)
Урок PAWNO 3
Сегодня рассмотрим расставление оружия скинам и скриптовые каманды. 
Открываем new.pwn 
находим 
public OnGameModeInit() 

print("GameModeInit()"); 
SetGameModeText("Blank Script"); 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); 
return 1; 

смотрим 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); 
в конце 6 нулей, это оружие и его патроны. В данном случае у нас 3 кулака с 0лями патронов xD. Любое оружие имеет свой ID (который вы можете найти на сайте, в статьях по соседству). Это должно выглядеть так: 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, ID1, AMMO1, ID2, AMMO2, ID3, AMMO3); где: 
ID1: первое оружие 
AMMO1: патроны к первому оружию 
ID2: второе оружие 
AMMO2: патроны к нему 
ID3: ну и третье оружие 
AMMO3: и его патроны 
выглядеть должно примерно так: 
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 28, 100, 31, 100, 8, 1); 
Ну не все оружие можно давать в са мп 0.1 в 0.2 обесчали все отсинхрить ;). Ну можно поэкспирементировать. 
Далее команды сервера. 
Ищем 
public OnPlayerCommandText(playerid, cmdtext[]) 

if (strcmp(cmdtext, "/mycommand", true)==0) 

/* Do something here */ 
return 1; 

return 0; 

Это сам паблик каманд, а 
if (strcmp(cmdtext, "/mycommand", true)==0) 

/* Do something here */ 
return 1; 

сами команды. 
Начнем создавать свои команды. 
public OnPlayerCommandText(playerid, cmdtext[]) 

if (strcmp(cmdtext, "/kickme", true)==0) 

Kick(playerid); 
return 1; 

return 0; 

Ну цель этой команды проста, вы кикнете себя. Поставим вторую команду, например, на выскакивание текста. 
public OnPlayerCommandText(playerid, cmdtext[]) 

if (strcmp(cmdtext, "/kickme", true)==0) 

Kick(playerid); 
return 1; 

if (strcmp(cmdtext, "/text", true)==0) 

GameTextForAll("kakoyto text", 9000, 1); 
return 1; 

return 0; 

Про каманду текста для всех, там можно только латинские символы. Цыфры это время (в милисекундах) и тип текста, с этим сами поэксперементируйте. На этом пока все =) 
Урок PAWNO 4
Сегодня мы создадим простенькое меню,а точнее научимся делать. 
Сначала создайте глобальную переменную Код: 
new Menu:menu1; 
Потом в паблике OnGameModeInit пропишите: 

Code 
200 ? '200px':''+(this.scrollHeight+5)+'px')"menu1 == teleportmenu = CreateMenu("Menu", 1, 200.0, 100.0, 150.0, 150.0); 
А теперь почешем репу и подумаем что есть что...и вот что это есть: 
Code 
200 ? '200px':''+(this.scrollHeight+5)+'px')"CreateMenu(название, кол-во колон, положение по Х-координате, положение по У-координате, ширина первой колонны,ширина второй колонны); 
два последнего значения я и сам не понял что означают(инфу брал с википедии) 
после menu1 ==... добавляем 

Code 
200 ? '200px':''+(this.scrollHeight+5)+'px')"AddMenuItem(menu1,0,"тут пишем название"); 
Вот что это все означает: 

Code 
200 ? '200px':''+(this.scrollHeight+5)+'px')"AddMenuItem(ид меню(в данном случае мы используем переменную),номер колонны(начинается с нуля),название); 
вы можете добавить много Item'ов,сколько захотите 
Действия,которые происходит при выборе Item'а прописаны в паблике OnPlayerSelectMenuRow,в этом паблоике создаем переменную new 
Code 
200 ? '200px':''+(this.scrollHeight+5)+'px')"pmenu ==GetPlayerMenu(playerid); 
Далее делаем пару проверок: 
Code 
200 ? '200px':''+(this.scrollHeight+5)+'px')"if(pmenu == menu1) 

switch(row) 

тут делаем различные кейсы,соответствующие Item'ам,все ид кейсов начинаются с нуля,например: 
Code 
200 ? '200px':''+(this.scrollHeight+5)+'px')"case 0: 

действия 
return 1; 



Все,урок окончен
Урок PAWNO 5
И ТАК когда я разбирался с Race модами я смотрел и долго нечего не понимал ну и вообшем решил пока гонками не заниматся а создать мини миссию 
Ну как обычно износиловал все PAwno и вот что получилось 
(СКРИПТ) 

#define COLOR_RED 0xAA3333AA //определяем цвета 
#define CHECKPOINT_NONE 0 //убирает все чекпоинты 
#define CHECKPOINT_A 1 
#define CHECKPOINT_B 2 
#define CHECKPOINT_C 3 
#define CHECKPOINT_D 4 
#define CHECKPOINT_E 5 
#define CHECKPOINT_F 6 
#define CHECKPOINT_G 7 
#define CHECKPOINT_H 8 
#define CHECKPOINT_J 9 // Все эти команды определяют чекпоинты... 
Далее добавить в public: 
new gPlayerClass[MAX_PLAYERS]; 
new gPlayerCheckpointStatus[MAX_PLAYERS]; 
public OnPlayerSpawn(playerid) // Заменить ваш OnPlayerSpawn этим 

SetPlayerInterior(playerid,0); 
switch (gPlayerClass[playerid]) { 
case 0: 

gPlayerCheckpointStatus[playerid] = CHECKPOINT_A; 
SetPlayerCheckpoint(playerid,-1060.2656,-1205.3883,129.2188,2.0); 

case 1, 2, 3, 4, 5, 6, 7, 8, 9: 

gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE; 


return 1; 

Добавляем команду: 
public OnPlayerEnterCheckpoint(playerid) { 
switch (gPlayerCheckpointStatus[playerid]) { 
case CHECKPOINT_A: 

SetPlayerCheckpoint(playerid,-345.7894,-1046.6093,59.8125,2.0); 
IsPlayerInAnyVehicle(playerid); 
SendClientMessage(playerid,COLOR_WHITE,">Это твоё первое задание..."); 
SendClientMessage(playerid,COLOR_WHITE,">Едь на другой чекпоинт и возьми кейс!"); 
IsPlayerInAnyVehicle(playerid); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_B; 

case CHECKPOINT_B: 

SetPlayerCheckpoint(playerid,-262.8102,-2183.5281,28.9523,2.0); 
IsPlayerInAnyVehicle(playerid); 
SendClientMessage(playerid,COLOR_WHITE,">Отвези кейс на ферму!"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_C; 

case CHECKPOINT_C: 

SetPlayerCheckpoint(playerid,-1111.7607,-1621.2410,76.3739,2.0); 
GivePlayerMoney(playerid,3000); 
PlayerPlaySound(playerid,1062,-262.8102,-2183.5281,28.9523); 
SendClientMessage(playerid,COLOR_GREEN,">Молодец! Ты прошёл миссию получи 3000 баксов!"); 
SendClientMessage(playerid,COLOR_GREEN,">Следующая миссия на чекпоинте!"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_D; 

case CHECKPOINT_D: 

SetPlayerCheckpoint(playerid,-1827.6156,-1927.0413,90.7038,2.0); 
SendClientMessage(playerid,COLOR_YELLOW,">Найди самолёт и лети в Сан Фиерро!"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_E; 

case CHECKPOINT_E: 

SetPlayerInterior(playerid,1); 
SetPlayerPos(playerid,1.6297,23.8689,1199.5938); 
SendClientMessage(playerid,COLOR_YELLOW,">Ты летишь в Сан фиерро!"); 
SetPlayerCheckpoint(playerid,2.8139,33.0639,1199.5938,2.0); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_F; 

case CHECKPOINT_F: 

SetPlayerInterior(playerid,0); 
SetPlayerPos(playerid,-1384.7823,-345.2231,14.1484); 
SendClientMessage(playerid,COLOR_YELLOW,">Едь в парк и возьми пакет!"); 
SetPlayerCheckpoint(playerid,-2706.3647,376.2090,4.9686,2.0); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_G; 

case CHECKPOINT_G: 

SetPlayerCheckpoint(playerid,-1384.7823,-345.2231,14.1484,2.0); 
SendClientMessage(playerid,COLOR_YELLOW,">Едь в аэропорт!"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_H; 

case CHECKPOINT_H: 

SetPlayerInterior(playerid,1); 
SetPlayerPos(playerid,1.6297,23.8689,1199.5938); 
SendClientMessage(playerid,COLOR_WHITE,">Ты летишь обратно!"); 
SetPlayerCheckpoint(playerid,2.8139,33.0639,1199.5938,2.0); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_J; 

case CHECKPOINT_J: 

SetPlayerInterior(playerid,0); 
SetPlayerPos(playerid,-2318.4241,-1636.1868,1317.5997); 
ResetPlayerWeapons(playerid); 
SendClientMessage(playerid,COLOR_RED,">Тебя подставили и выкинули из самолёта!!!"); 
SendClientMessage(playerid,COLOR_GREEN,">Время умирать чувак! :)"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE; 
DisablePlayerCheckpoint(playerid); 


return 1; 
}
[code]
#define COLOR_RED 0xAA3333AA //определяем цвета 
#define CHECKPOINT_NONE 0 //убирает все чекпоинты 
#define CHECKPOINT_A 1 
#define CHECKPOINT_B 2 
#define CHECKPOINT_C 3 
#define CHECKPOINT_D 4 
#define CHECKPOINT_E 5 
#define CHECKPOINT_F 6 
#define CHECKPOINT_G 7 
#define CHECKPOINT_H 8 
#define CHECKPOINT_J 9 // Все эти команды определяют чекпоинты... 
Далее добавить в public: 
new gPlayerClass[MAX_PLAYERS]; 
new gPlayerCheckpointStatus[MAX_PLAYERS]; 
public OnPlayerSpawn(playerid) // Заменить ваш OnPlayerSpawn этим 

SetPlayerInterior(playerid,0); 
switch (gPlayerClass[playerid]) { 
case 0: 

gPlayerCheckpointStatus[playerid] = CHECKPOINT_A; 
SetPlayerCheckpoint(playerid,-1060.2656,-1205.3883,129.2188,2.0); 

case 1, 2, 3, 4, 5, 6, 7, 8, 9: 

gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE; 


return 1; 

Добавляем команду: 
public OnPlayerEnterCheckpoint(playerid) { 
switch (gPlayerCheckpointStatus[playerid]) { 
case CHECKPOINT_A: 

SetPlayerCheckpoint(playerid,-345.7894,-1046.6093,59.8125,2.0); 
IsPlayerInAnyVehicle(playerid); 
SendClientMessage(playerid,COLOR_WHITE,">Это твоё первое задание..."); 
SendClientMessage(playerid,COLOR_WHITE,">Едь на другой чекпоинт и возьми кейс!"); 
IsPlayerInAnyVehicle(playerid); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_B; 

case CHECKPOINT_B: 

SetPlayerCheckpoint(playerid,-262.8102,-2183.5281,28.9523,2.0); 
IsPlayerInAnyVehicle(playerid); 
SendClientMessage(playerid,COLOR_WHITE,">Отвези кейс на ферму!"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_C; 

case CHECKPOINT_C: 

SetPlayerCheckpoint(playerid,-1111.7607,-1621.2410,76.3739,2.0); 
GivePlayerMoney(playerid,3000); 
PlayerPlaySound(playerid,1062,-262.8102,-2183.5281,28.9523); 
SendClientMessage(playerid,COLOR_GREEN,">Молодец! Ты прошёл миссию получи 3000 баксов!"); 
SendClientMessage(playerid,COLOR_GREEN,">Следующая миссия на чекпоинте!"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_D; 

case CHECKPOINT_D: 

SetPlayerCheckpoint(playerid,-1827.6156,-1927.0413,90.7038,2.0); 
SendClientMessage(playerid,COLOR_YELLOW,">Найди самолёт и лети в Сан Фиерро!"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_E; 

case CHECKPOINT_E: 

SetPlayerInterior(playerid,1); 
SetPlayerPos(playerid,1.6297,23.8689,1199.5938); 
SendClientMessage(playerid,COLOR_YELLOW,">Ты летишь в Сан фиерро!"); 
SetPlayerCheckpoint(playerid,2.8139,33.0639,1199.5938,2.0); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_F; 

case CHECKPOINT_F: 

SetPlayerInterior(playerid,0); 
SetPlayerPos(playerid,-1384.7823,-345.2231,14.1484); 
SendClientMessage(playerid,COLOR_YELLOW,">Едь в парк и возьми пакет!"); 
SetPlayerCheckpoint(playerid,-2706.3647,376.2090,4.9686,2.0); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_G; 

case CHECKPOINT_G: 

SetPlayerCheckpoint(playerid,-1384.7823,-345.2231,14.1484,2.0); 
SendClientMessage(playerid,COLOR_YELLOW,">Едь в аэропорт!"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_H; 

case CHECKPOINT_H: 

SetPlayerInterior(playerid,1); 
SetPlayerPos(playerid,1.6297,23.8689,1199.5938); 
SendClientMessage(playerid,COLOR_WHITE,">Ты летишь обратно!"); 
SetPlayerCheckpoint(playerid,2.8139,33.0639,1199.5938,2.0); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_J; 

case CHECKPOINT_J: 

SetPlayerInterior(playerid,0); 
SetPlayerPos(playerid,-2318.4241,-1636.1868,1317.5997); 
ResetPlayerWeapons(playerid); 
SendClientMessage(playerid,COLOR_RED,">Тебя подставили и выкинули из самолёта!!!"); 
SendClientMessage(playerid,COLOR_GREEN,">Время умирать чувак! :)"); 
gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE; 
DisablePlayerCheckpoint(playerid); 


return 1; 
}

[/code]

НА СЕГОДНЯ ВСЕ ученичек 
в следуюшем уроке постараюсь обьяснить как создавать гонки
Урок PAWNO 6
ПРИВА УЧЕНИК ТЕПЕРЬ ДЕЛАЕМ ГОНКИ В ГЕЙМ МОД ЯКАНЕШ ПОКА ВСТАВИТЬ НЕ МОГУ НО В ВИДЕ ФС ГОНКИ ВЫГЛЯДЯТ ТАК

[code]#include <a_samp> 
#define COLOR_GREY 0xAFAFAFAA 
#define COLOR_GREEN 0x33AA33AA 
#define COLOR_RED 0xAA3333AA 
#define COLOR_YELLOW 0xFFFF00AA 
#define COLOR_WHITE 0xFFFFFFAA 
#define COLOR_LAVENDER 0xFF00FFAA 
#define COLOR_BLUE 0x0000BBAA 
#define COLOR_LIGHTBLUE 0x33CCFFAA 
#define COLOR_LIGHTBLUEA 0xB5EAFCAA 
#define COLOR_ORANGE 0xFF9900AA 
#define COLOR_TEAL 0x3BAAC2AA 
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z); 
forward CheckpointUpdate(); 
forward GPRaceCountdown(); 
forward GPTimer(); 
//forward SaveTimes(); 
//forward LoadTimes(); 
forward UpdateList(playerid,TimeRec); 
new Mototime[MAX_PLAYERS] =0; 
new Motocountdown[MAX_PLAYERS] =-1; 
new MotoGP[MAX_PLAYERS] = 0; 
new MotoGate[MAX_PLAYERS]=0; 
#define MAX_POINTS 1//СТАРТ ПОИНТ 
#define MAX_RACE_POINTS 100//ЧИСЛО ГОНОЧНЫХ ПОИНТОВ 
new cps = MAX_RACE_POINTS - 1; 
#define TT_START 0 
enum kinfo{ 
Driver[24], 
Time 


new KartHS[5][kinfo]; 
new playerCheckpoint[MAX_PLAYERS]; 
new Float:checkpoints[MAX_POINTS][3] = {//ТУТ СТАРТОВЫЙ ЧЕКПОИНТ 
{1797.2352,2251.0757,4.9755} 
}; 
new Float:racecheckpoints[MAX_RACE_POINTS][3] = {//ТУТ //ГОНОЧНЫЙ ЧЕКПОИНТЫ КОТОРЫЕ ВО ВРЕМЯ ГОНКИ 
{1797.5144,1884.4104,6.6023}, 
{1797.4225,1594.3551,6.5990}, 
{1797.2001,1037.1470,6.5983}, 
{1798.2466,873.0827,10.5056}, 
{1622.680 4,843.2832,6.5982}, 
{1455.1434,833.6122,6.7112}, 
{956.8241,741.7051,10.7060}, 
{855.5547,703.4802,11.7664}, 
{649.3840,667.5455,7.0238}, 
{ 474.9632,725.6837,5.1012}, 
{262.4301,889.1722,22.1563}, 
{208.3201,1015.8774,25.4640}, 
{177.5087,1144.3633,14.1364}, 
{-45.9619,1260.6456, 9.2296}, 
{-219.7370,1238.8441,23.1402}, 
{-377.1374,1298.7002,24.7620}, 
{-431.9221,1412.6958,32.1904}, 
{-421.3441,1671.2706,37.3832}, 
{- 379.9946,1782.9468,46.7754}, 
{-432.1290,1879.7438,61.3342}, 
{-422.9137,1784.9297,70.9443}, 
{-466.8343,1788.7369,74.6976}, 
{-464.9256,196 9.0275,82.1220}, 
{-382.8337,2053.7739,61.7009}, 
{-419.7729,2064.5906,61.3606}, 
{-509.3027,1983.8544,60.0850}, 
{-646.8643,2054.9785,60.27 41}, 
{-837.4421,2021.8069,60.2786}, 
{-867.9402,1905.9733,60.1240}, 
{-908.3344,1790.4731,60.0592}, 
{-1033.2159,1852.7333,59.3001}, 
{-114 5.8105,1798.4552,40.3781}, 
{-1178.5577,1813.7426,40.9333}, 
{-1241.9475,1903.1709,42.1986}, 
{-1337.5841,2016.4515,54.1038}, 
{-1352.7341,2 171.2791,48.2466}, 
{-1423.9059,2336.1450,53.7300}, 
{-1431.6934,2472.4524,61.0890}, 
{-1351.1937,2631.4705,51.2857}, 
{-1412.7439,2714.7759 ,60.4720}, 
{-1633.9431,2728.4771,57.7567}, 
{-1799.4211,2693.7271,57.1111}, 
{-1913.2582,2617.7471,48.1832}, 
{-2195.0869,2676.2134,53.9009 }, 
{-2425.0469,2669.3765,60.9004}, 
{-2614.1509,2671.4880,76.8050}, 
{-2770.0366,2441.6501,92.3823}, 
{-2681.5408,2059.4980,56.1254}, 
{-26 81.1685,1756.4165,68.3772}, 
{-2681.5007,1367.2424,55.7080}, 
{-2679.5535,1239.2896,55.5204}, 
{-2464.9307,1104.8513,55.6742}, 
{-2286.8269, 1066.3125,55.6811}, 
{-1999.6361,1066.3679,55.4660}, 
{-1910.2255,1066.1985,47.5866}, 
{-1892.3218,988.5411,35.0888}, 
{-1898.7400,794.9924, 38.8297}, 
{-1897.8530,618.8192,34.9137}, 
{-1963.4152,605.6826,34.9150}, 
{-2001.6990,537.5637,34.9114}, 
{-2003.8684,353.3103,34.9113}, 
{ -2006.1154,97.0415,27.4348}, 
{-2005.6558,-106.2443,35.6536}, 
{-2010.5597,-288.2466,35.2158}, 
{-2155.9524,-341.7915,35.0796}, 
{-2372.5454 ,-334.8734,38.4070}, 
{-2754.2183,-438.3979,7.0646}, 
{-2820.9695,-443.0231,6.9347}, 
{-2812.4561,-310.5171,6.9269}, 
{-2808.9888,-179.3705, 6.9276}, 
{-2808.9644,2.2234,6.9277}, 
{-2810.2258,51.9202,6.9289}, 
{-2808.9358,139.8148,6.9265}, 
{-2765.1001,156.9801,6.9568}, 
{-2597.35 21,156.7976,4.0748}, 
{-2406.5889,251.8733,26.3285}, 
{-2208.2788,320.1814,35.0675}, 
{-2023.7981,324.1935,34.9411}, 
{-1935.6423,344.1543,3 2.3373}, 
{-1873.8748,402.7901,16.9899}, 
{-1839.1860,400.3513,16.9088}, 
{-1656.7661,555.5449,38.9824}, 
{-1511.4597,708.1401,45.6228}, 
{- 1342.0031,887.4564,46.9306}, 
{-1113.2859,1130.6921,37.4382}, 
{-912.4370,964.1341,17.8444}, 
{-821.1741,734.6368,18.6041}, 
{-595.8551,637. 3406,16.7214}, 
{-222.6646,565.2453,15.7750}, 
{280.7512,757.4127,6.1771}, 
{515.8831,703.0739,3.5536}, 
{966.9130,746.7089,10.7151}, 
{1142 .4872,837.7676,10.5735}, 
{1231.5911,1151.9949,6.7249}, 
{1217.0756,1280.3558,6.6020}, 
{1217.6578,1695.2532,6.6009}, 
{1216.2842,2108.6938, 6.5991}, 
{1593.5679,2456.3616,6.7015}, 
{1798.0892,2253.2261,5.0176}, 
{1797.2352,2251.0757,4.9755} 
}; 
new checkpointType[MAX_POINTS] = { 
TT_START 
}; 
public OnFilterScriptInit() 

print("\n Mode:RACE VITALAS[goDog] - делал Виталь.\n"); 
SetTimer("CheckpointUpdate",1000,1); 
SetTimer("GPRaceCountdown",1000,1); 
SetTimer("GPTimer",1000,1); 
for(new t=0; t<5; t++) 

strmid(KartHS[t][Driver], "None", 0, strlen("None"), 24); 
KartHS[t][Time]=100000; 

// if(!fexist("Петушиный ФрирайдTimes.cfg")) 
// SaveTimes(); 
// LoadTimes(); 
return 1; 

public OnFilterScriptExit() 

return 1; 

public OnPlayerCommandText(playerid, cmdtext[]) 

if(getCheckpointType(playerid)!=TT_START) 

SendClientMessage(playerid,COLOR_GREEN," Ты не в стартовой позиции."); 
return 1; 

if (strcmp("/start", cmdtext, true, 10) == 0) 
{//команда на старт гонки 
if(!IsVehicle(playerid)) 

new fstr[255]; 
format(fstr,sizeof(fstr),"You must be in a %s to participate in this."); 
SendClientMessage(playerid,COLOR_GREEN,fstr); 
return 1; 

SendClientMessage(playerid, COLOR_GREEN,"Старт..."); 
TogglePlayerControllable(playerid,0); 
Motocountdown[playerid] = 6; 
SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[0][0],racecheckpoints[0][1],racecheckpoints[0][2],racecheckpoints[1][0],racecheckpoints[1][1],racecheckpoints[1][2],25); 
DisablePlayerCheckpoint(playerid); 
return 1; 

if (strcmp("0", cmdtext, true, 10) == 0) 

new kstring[255]; 
SendClientMessage(playerid,COLOR_GREEN," 5 лучших по времени:"); 
for(new z=0; z<5; z++) 

new sec = KartHS[z][Time]%60; 
new mins = (KartHS[z][Time]/60)%60; 
if (strcmp("None",KartHS[z][Driver], true, 10) == 0) 

if(z==0) 
SendClientMessage(playerid,COLOR_GREY,"-No Times Recorded Yet-"); 
if(z>0) 
SendClientMessage(playerid,COLOR_GREY,"-End Of Time Sheet-"); 
return 1; 

if(strcmp("None",KartHS[z][Driver], true,10) != 0) 

if(sec > 9) {format(kstring,sizeof(kstring),"%d. %s - %d:%d",z+1,KartHS[z][Driver],mins,sec);} 
if(sec < 9) {format(kstring,sizeof(kstring),"%d. %s - %d:0%d",z+1,KartHS[z][Driver],mins,sec);} 
SendClientMessage(playerid,COLOR_GREY,kstring); 


return 1; 

return 0; 

public OnPlayerEnterRaceCheckpoint(playerid) 

new sec = Mototime[playerid]%60; 
new mins = (Mototime[playerid]/60)%60; 

if(MotoGP[playerid] == 1) 

MotoGate[playerid]++; 
new one = MAX_RACE_POINTS-2; 
new two = MAX_RACE_POINTS-1; 
if(MotoGate[playerid] < one) 

DisablePlayerRaceCheckpoint(playerid); 
SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[MotoGate[playerid]][0],racecheckpoints[MotoGate[playerid]][1],racecheckpoints[MotoGate[playerid]][2],racecheckpoints[MotoGate[playerid]+1][0],racecheckpoints[MotoGate[playerid]+1][1],racecheckpoints[MotoGate[playerid]+1][2],25); 


if(MotoGate[playerid] == one) 

DisablePlayerRaceCheckpoint(playerid); 
SetPlayerRaceCheckpoint(playerid,1,racecheckpoints[MotoGate[playerid]][0],racecheckpoints[MotoGate[playerid]][1],racecheckpoints[MotoGate[playerid]][2],racecheckpoints[MotoGate[playerid]+1][0],racecheckpoints[MotoGate[playerid]+1][1],racecheckpoints[MotoGate[playerid]+1][2],25); 

if(MotoGate[playerid] == two) 

new TimeRec; 
new Timestr[255]; 
new driver[24]; 
GetPlayerName(playerid,driver,sizeof(driver)); 
format(Timestr,sizeof(Timestr),"%s финишировал в гонке 2х Континентов за %d мин:%d сек",driver,mins,sec); 
GivePlayerMoney(playerid,1500) ; 
SendClientMessageToAll(COLOR_WHITE,Timestr); 
SendClientMessage(playerid,COLOR_WHITE,"Ты попал в 5-ку лучших по времени."); 
printf(Timestr); 
TimeRec=Mototime[playerid]; 
MotoGP[playerid] = 0; 
MotoGate[playerid] = 0; 
DisablePlayerRaceCheckpoint(playerid); 
Mototime[playerid]=0; 
UpdateList(playerid,TimeRec); 


return 1; 

public OnPlayerEnterCheckpoint(playerid) 

if(getCheckpointType(playerid)==TT_START) 

if(IsVehicle(playerid) == 1) 

SendClientMessage(playerid,COLOR_GREEN,"Нажми /start для старта ."); 
return 1; 

if(IsVehicle(playerid) == 0) 

SendClientMessage(playerid,COLOR_GREEN,"Ты не в машине!"); 
return 1; 


return 1; 


stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z) 

new Float:oldposx, Float:oldposy, Float:oldposz; 
new Float:tempposx, Float:tempposy, Float:tempposz; 
GetPlayerPos(playerid, oldposx, oldposy, oldposz); 
tempposx = (oldposx -x); 
tempposy = (oldposy -y); 
tempposz = (oldposz -z); 
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) 

return 1; 

return 0; 


public UpdateList(playerid, TimeRec) 

new driver[24]; 
GetPlayerName(playerid,driver,sizeof(driver)); 
if(KartHS[0][Time] > TimeRec) 

KartHS[4][Time] = KartHS[3][Time]; 
strmid(KartHS[4][Driver],KartHS[3][Driver],0,sizeof(driver),24); 
KartHS[3][Time] = KartHS[2][Time]; 
strmid(KartHS[3][Driver],KartHS[2][Driver],0,sizeof(driver),24); 
KartHS[2][Time] = KartHS[1][Time]; 
strmid(KartHS[2][Driver],KartHS[1][Driver],0,sizeof(driver),24); 
KartHS[1][Time] = KartHS[0][Time]; 
strmid(KartHS[1][Driver],KartHS[0][Driver],0,sizeof(driver),24); 
KartHS[0][Time] = TimeRec; 
strmid(KartHS[0][Driver],driver,0,sizeof(driver),24); 
SendClientMessage(playerid,COLOR_GREY,"Ты на 1-ом месте!"); 
GivePlayerMoney(playerid,10000); 

else if(KartHS[1][Time] > TimeRec) 

KartHS[4][Time] = KartHS[3][Time]; 
strmid(KartHS[4][Driver],KartHS[3][Driver],0,sizeof(driver),24); 
KartHS[3][Time] = KartHS[2][Time]; 
strmid(KartHS[3][Driver],KartHS[2][Driver],0,sizeof(driver),24); 
KartHS[2][Time] = KartHS[1][Time]; 
strmid(KartHS[2][Driver],KartHS[1][Driver],0,sizeof(driver),24); 
KartHS[1][Time] = TimeRec; 
strmid(KartHS[1][Driver],driver,0,sizeof(driver),24); 
SendClientMessage(playerid,COLOR_GREY,"Ты на 2-ом месте!"); 
GivePlayerMoney(playerid,7500); 

else if(KartHS[2][Time] > TimeRec) 

KartHS[4][Time] = KartHS[3][Time]; 
strmid(KartHS[4][Driver],KartHS[3][Driver],0,sizeof(driver),24); 
KartHS[3][Time] = KartHS[2][Time]; 
strmid(KartHS[3][Driver],KartHS[2][Driver],0,sizeof(driver),24); 
KartHS[2][Time] = TimeRec; 
strmid(KartHS[2][Driver],driver,0,sizeof(driver),24); 
SendClientMessage(playerid,COLOR_GREY,"Ты на 3-ем месте!"); 
GivePlayerMoney(playerid,5000); 

else if(KartHS[3][Time] > TimeRec) 

KartHS[4][Time] = KartHS[3][Time]; 
strmid(KartHS[4][Driver],KartHS[3][Driver],0,sizeof(driver),24); 
KartHS[3][Time] = TimeRec; 
strmid(KartHS[3][Driver],driver,0,sizeof(driver),24); 
SendClientMessage(playerid,COLOR_GREY,"Ты на 4 месте!"); 
GivePlayerMoney(playerid,2500); 

else if(KartHS[4][Time] > TimeRec) 

KartHS[4][Time] = TimeRec; 
strmid(KartHS[4][Driver],driver,0,sizeof(driver),24); 
SendClientMessage(playerid,COLOR_GREY,"Ты на 5-ом месте!"); 
GivePlayerMoney(playerid,1000); 

return 1; 


public CheckpointUpdate() 

for(new i; i<MAX_PLAYERS; i++) 

if(MotoGP[i] == 0) 

for(new j=0; j < 1; j++) { 
if(PlayerToPoint(25,i,checkpoints[j][0],checkpoints[j][1],checkpoints[j][2])) { 
if(playerCheckpoint[i]!=j) { 
DisablePlayerCheckpoint(i); 
SetPlayerCheckpoint(i, checkpoints[j][0],checkpoints[j][1],checkpoints[j][2],15); 
playerCheckpoint[i] = j; 

} else { 
if(playerCheckpoint[i]==j) { 
DisablePlayerCheckpoint(i); 
playerCheckpoint[i] = 100;//ХЗ 






stock IsVehicle(playerid) 

new model = GetPlayerVehicleID(playerid); 
// model = GetVehicleModel(model); 
// if(model == 573) 
return 1; 
// else 
return 0; 

stock getCheckpointType(playerID) { 
if(playerCheckpoint[playerID] != 100)//ХЗ 
return checkpointType[playerCheckpoint[playerID]]; 
else return -1; 


public GPRaceCountdown() 

for(new x=0; x<MAX_PLAYERS; x++) 

if(Motocountdown[x] > 0) 

new time[3]; 
Motocountdown[x]--; 
format(time,sizeof(time),"%d",Motocountdown[x]); 
GameTextForPlayer(x,time,1200,3); 

if(Motocountdown[x] == 0) 

GameTextForPlayer(x," GO GO GO!",1200,3); 
TogglePlayerControllable(x,1); 
Motocountdown[x]--; 
Mototime[x]=0; 
MotoGP[x]=1; 



public GPTimer() 

for(new i=0; i<MAX_PLAYERS; i++) 

new progress[255]; 
new sec = Mototime[i]%60; 
new mins = (Mototime[i]/60)%60; 
if(MotoGP[i] == 1) 

Mototime[i]++; 

if(sec > 9 ) { format(progress,sizeof(progress),"~b~Race %d/%d Checkpoints Achieved. Current Time: %d:%d",MotoGate[i],cps,mins,sec);}//~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~ 
if(sec <10 ) { format(progress,sizeof(progress),"~b~Race: %d/%d Checkpoints Achieved. Current Time: %d:0%d",MotoGate[i],cps,mins,sec);}//~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~ 
// GameTextForPlayer(i,progress,1200,3); 
new Text:Time = TextDrawCreate(320.0, 260.0, "i"); 



stock DelPrint(string1[]) 

strmid(string1, string1, 0, strlen(string1)-1, 255); 
printf("%s", string1); 
return 1; 

public OnPlayerDeath(playerid, killerid, reason) 

DisablePlayerRaceCheckpoint(playerid); 
return 1; 
}
[/code]
Категория: Уроки по программированию в PAWNO | Добавил: ProDiGy (28.04.2010)
Просмотров: 4928 | Комментарии: 1 | Рейтинг: 2.6/5
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените наш сервер по 5-ти бальной шкале
Всего ответов: 421
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0