Добавление анимации к обьекту. Я раскажу как добавлять анимации к обьекту на примере ворот. Сначала с помошью MTA Race создаем 2 обьекта: 1.Ворота в закрытом состоянии 2.Ворота в открытом состоянии рисунок
Конвертируем в Advance Converterе и получаем 2 обьекта, например: CreateObject(969,999.401,-645.460,120.628,-0.859,1.719,24.924); CreateObject(969,999.466,-645.369,124.934,3.438,1.719,24.924);
Открываем Pawno вставляем код(дальше все ваши действия будут написаны в коментариях к коду):
Code
#include <a_samp>
#pragma tabsize 0 #define COLOR_YELLOW 0xFFFF00AA #define FILTERSCRIPT forward lockgate(); #if defined FILTERSCRIPT new gate;
public OnFilterScriptInit() { gate = CreateObject(969,999.401,-645.460,120.628,-0.859,1.719,24.924) ;//сюда вставляете координаты ворот в закрытом виде из Advance Convertera print("\n--------------------------------------"); print(" Gate by Pcix"); print("--------------------------------------\n"); return 1; }
public OnFilterScriptExit() { return 1; } #endif
public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp(cmdtext, "/vorota", true)==0)// вместо vorota можете написать любую команду, которая будет открывать ворота { MoveObject(gate,999.466,-645.369,124.934, 3.5);//сюда вставляете координаты ворот в открытом виде (уже без id), 3.5 -скорость движения ворот SetTimer("lockgate", 7000, 0);//7000 - время через которое ворота автоматически закроются в мс SendClientMessage(playerid, COLOR_YELLOW,"Ворота закроются в течении 7сек, Поторопитесь!");//надпись которую получит игрок открывшии ворота return 1; } return 0; }
public lockgate() { MoveObject (gate,999.401,-645.460,120.628, 3.0);//сюда снова координаты закрытых ворот, 3,0 скорость движения ворот return 1; }
итак, вот вы и написали простой ФС с воротами, компилируем, кидаем в папку filterscripts, и дописываем в server.cfg название вашего ФС например: filterscripts gate
Но некоторым может не понравится что ворота открываются из любой точки карты, для этого нужно немного изменить наш ФС, теперь он будет выглядеть так:
Code
#include <a_samp>
#pragma tabsize 0 #define COLOR_YELLOW 0xFFFF00AA #define FILTERSCRIPT forward lockgate(); #if defined FILTERSCRIPT new gate; //============================================Добавление новой функции============================ stock IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius) //By Sacky { if(GetPlayerDistanceToPointEx(playerid,x,y,z) < radius) { return 1; } return 0; } stock GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z) //By Sacky { new Float:x1,Float:y1,Float:z1; new Float:tmpdis; GetPlayerPos(playerid,x1,y1,z1); tmpdis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),2)+floatpower(floatabs(floatsub(y,y1)),2)+floatpower(floatabs(floatsub(z,z1)),2)); return floatround(tmpdis); } //=========================================================================================================== public OnFilterScriptInit() { gate = CreateObject(969,999.401,-645.460,120.628,-0.859,1.719,24.924) ;//сюда вставляете координаты ворот в закрытом виде из Advance Convertera print("\n--------------------------------------"); print(" Gate by Pcix"); print("--------------------------------------\n"); return 1; }
public OnFilterScriptExit() { return 1; } #endif
public OnPlayerCommandText(playerid, cmdtext[]) { if (IsPlayerInSphere(playerid,999.401,-645.460,120.628,20))//благодаря этому условию ворота открываются только когда игрок находиться рядом, 999.401,-645.460,120.628 - координаты центра сферы, 20 - радиус сферы { if (strcmp(cmdtext, "/vorota", true)==0)// вместо vorota можете написать любую команду, которая будет открывать ворота { MoveObject(gate,999.466,-645.369,124.934, 3.5);//сюда вставляете координаты ворот в открытом виде (уже без id), 3.5 -скорость движения ворот SetTimer("lockgate", 7000, 0);//7000 - время через которое ворота автоматически закроются в мс SendClientMessage(playerid, COLOR_YELLOW,"Ворота закроются в течении 7сек, Поторопитесь!");//надпись которую получит игрок открывшии ворота return 1; } } return 0; }
public lockgate() { MoveObject (gate,999.401,-645.460,120.628, 3.0);//сюда снова координаты закрытых ворот, 3,0 скорость движения ворот return 1; }
Также можно добавить надпись которая высвечивается, когда игрок подьезжает к воротам, для этого нужно добавить в ФС следующее:
Code
#include <a_samp>
#pragma tabsize 0 #define COLOR_YELLOW 0xFFFF00AA #define FILTERSCRIPT forward lockgate(); //--------------------------------------------условие и проверка------------------------------------- forward IsNearGates(playerid); forward Check(); //-------------------------------------------------------------------------------------------------------------------- #if defined FILTERSCRIPT new gate; //============================================Добавление новой функции============================ stock IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius) //By Sacky { if(GetPlayerDistanceToPointEx(playerid,x,y,z) < radius) { return 1; } return 0; } stock GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z) //By Sacky { new Float:x1,Float:y1,Float:z1; new Float:tmpdis; GetPlayerPos(playerid,x1,y1,z1); tmpdis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),2)+floatpower(floatabs(floatsub(y,y1)),2)+floatpower(floatabs(floatsub(z,z1)),2)); return floatround(tmpdis); } //=========================================================================================================== public OnFilterScriptInit() { gate = CreateObject(969,999.401,-645.460,120.628,-0.859,1.719,24.924) ;//сюда вставляете координаты ворот в закрытом виде из Advance Convertera SetTimer("Check",100,1);//через какое время(100мс) проверка условия print("\n--------------------------------------"); print(" Gate by Pcix"); print("--------------------------------------\n"); return 1; }
public OnFilterScriptExit() { return 1; } #endif
//-------------------------------------проверка находится ли игрок рядом с воротами------------------- public IsNearGates(playerid) { if(IsPlayerConnected(playerid)) { if(IsPlayerInSphere(playerid,999.401,-645.460,120.628, 20))//координаты центра сферы , 20 - радиус {return 1;} } return 0; } //-------------------------------------------------------------------------------------------------------------------------------------- //--------------если проверка дала положительный результат то высвечивается надпись--------------------------- public Check() { new string[256]; for (new i=0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { if(IsNearGates(i)) { format(string, sizeof(string), " ~w~BBEѓ…TE ~g~/vorota ~n~~w~ЌTOЂ‘ OTKP‘T’ BOPOTA");//чтобы надпись выводилась на русском ее необходимо сначала конвертировать с помощью PAWNO GameText converter качать тут: http://www.samp-rus.com/load/7-1-0-153 GameTextForPlayer(i, string, 5000, 3);//5000 - время которое надпись будет на экране(мс), 3 - тип текста(подробнее о типах текста вы можете узнать в теме Стили текста: http://www.samp-rus.com/forum/42-4320-1) } }} return 1; } //------------------------------------------------------------------------------------------------------------- public OnPlayerCommandText(playerid, cmdtext[]) { if (IsPlayerInSphere(playerid,999.401,-645.460,120.628,20))//благодаря этому условию ворота открываются только когда игрок находиться рядом, 999.401,-645.460,120.628 - координаты центра сферы, 20 - радиус сферы { if (strcmp(cmdtext, "/vorota", true)==0)// вместо vorota можете написать любую команду, которая будет открывать ворота { MoveObject(gate,999.466,-645.369,124.934, 3.5);//сюда вставляете координаты ворот в открытом виде (уже без id), 3.5 -скорость движения ворот SetTimer("lockgate", 7000, 0);//7000 - время через которое ворота автоматически закроются в мс SendClientMessage(playerid, COLOR_YELLOW,"Ворота закроются в течении 7сек, Поторопитесь!");//надпись которую получит игрок открывшии ворота return 1; } } return 0; }
public lockgate() { MoveObject (gate,999.401,-645.460,120.628, 3.0);//сюда снова координаты закрытых ворот, 3,0 скорость движения ворот return 1; }
ВСЕ, теперь вы умеете( я надеюсь) добавлять анимацию к обьектам, с помощью этого можно делать не только ворота, но например лифты Все вопросы задавайте в этой теме
А подскажите как сделать ТП в то место например где ты сделал парк с трюками (будем так говорить ) ??? Вот я че видел на подобие вот такого : public OnPlayerCommandText(playerid, cmdtext[]) { if(!strcmp(cmdtext,"/park",true)) { if(GetPlayerMoney(playerid) < 0) return SendClientMessage(playerid,0xAA3333AA,"Welcome to Park"); if(!IsPlayerInAnyVehicle(playerid)) { SetPlayerPos(playerid,3380.9106,-898.1483,16.8618); SetPlayerFacingAngle(playerid,115.9771); SetPlayerInterior(playerid,0); }else { SetVehiclePos(GetPlayerVehicleID(playerid),3380.9106,-898.1483,16.8618); SetVehicleZAngle(GetPlayerVehicleID(playerid),115.9771); SetPlayerInterior(playerid,0); LinkVehicleToInterior(GetPlayerVehicleID(playerid),0); } return 1; }
Только я не пойму как мона так сделать ? Плиз если мона расскажите по действиям !!!
pomogite sdelat vorota, ne polu4aetsja CreateObject(976,-1534.362,482.166,6.349,0.0,0.0,0.0); zakrqtqe vorota CreateObject(976,-1533.751,482.217,9.620,0.0,0.0,0.0); otkrqtqe vorota i 4tobq mogli otkrqt tolko Police/FBI/Army
Добавлено (21.07.2008, 00:58) --------------------------------------------- a vse sdelal vorota tolko ja ne znaju kak sdelat 4tobq otkrqvat ih mogli tolko Police/FBI/Army ne dohodit do menja pomogite plzz
Добавлено (21.07.2008, 11:20) --------------------------------------------- vse ja ponjal kak sdelat 4tobq mogli otkrqt tolko Police/FBI/Army
Сообщение отредактировал sanja116 - Воскресенье, 20.07.2008, 23:08
А как сделать анимированный объект? Например, плавно открывающиеся ворота (открываются с помощью команды, напр. /openbare). А, сорри, просто не посмотрел выше =)
Сообщение отредактировал Silver_plus - Четверг, 24.07.2008, 15:28
Народ, ещё такой вопрос! Возможно вопрос не в тот раздел, но всё таки задам. Допустим есть скин с id = 276 и я хотел, чтобы тока он мог садится, залазить в объект с id = 425! Каким образом это можно организовать?
Покопался в инете и нашёл, как запустить Map Editor под вистой. 1. Переименовать папку с едитором в map_editor 2. Скопировать папку models из MTA San Andreas\mods\map_editor\ в MTA San Andreas\mods\race\ 3. Создать папку mods\map_editor\maps 4. Переименовать client.dll в MTA San Andreas\mods\race в client1.dll