1)В вначали а именно в forward пишем forward SFPDGate1Close(); это есле вы хотите чтоб ворота закрывались сами по таймеру 2)ТОже в начале пишите new SFPDGate1; 3)new SFPDGate1Timer; это нужно для таймера 4)Далее в public IsAtSFPDGate(playerid) пишите { if(IsPlayerConnected(playerid)) { if(PlayerToPoint(8.0,playerid,Координаты)) { return 1; } } return 0; }
Это для того чтоб отерывались ворота когда вы рядом с ними!
5)Потом в public OnGameModeInit() пишите SFPDGate1 = CreateObject(Ид ворот, координаты ворот); (помните сдесь они должны быть в закрытом виде)
6) В public OnPlayerCommandText(playerid, cmdtext[]) пишите
if (strcmp(cmdtext, "/opengate", true) == 0) Сама команда { if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 2 || PlayerInfo[playerid][pLeader] == 2 || PlayerInfo[playerid][pMember] == 3 || PlayerInfo[playerid][pLeader] == 3) - Ид фракций которые смогут открывать эти ворота { if(IsPlayerConnected(playerid)) { if(IsAtSFPDGate(playerid)) { MoveObject(SFPDGate1,Координаты ворот); (Помните тут должны бать координаты открытых ворот) SetTimer("SFPDGate1Close", 10000, 0); - Это таймер в данном случаи ворота сами закроются через 10 сек после открытия killersgatetimer = SetTimer("SFPDGate1Close", 10000, 0); return 1; } else { SendClientMessage(playerid, COLOR_GREY, " Âû íå ó âîðîò SFPD!"); return 1; } } } else { SendClientMessage(playerid, COLOR_GREY, " Âû íå ÷àñòü ñèëîâûõ ñòðóêòóð!"); return 1; } }
7) И заключительный этап в самом конце пишите public SFPDGate1Close() {
MoveObject(SFPDGate1, координаты ворот); Помните тут должны бать координаты закрытых ворот KillTimer(SFPDGate1Timer); return 1;
}
Вот и всё я думаю тут всё понятно я разживал вам осталось только проглатить
понимаешь, мод компилится не малое время, например у меня этот мод компилится 5-10 минут... в ФС труднее заставить что бы скрипт читал из файла мода (о человеке) поэтому самое простое решение - добавить в мод:)
CreateObject(988,662.256,-1309.515,13.500,0.0,0.0,0.0); // закрытая воротина часть 1 CreateObject(988,667.737,-1309.537,13.500,0.0,0.0,0.0); // закрытая воротина часть 2
в OnPlayerCommandText if (strcmp(cmdtext, "/yakudzagate1", true)==0) { if(PlayerInfo[playerid][pMember] == 6||PlayerInfo[playerid][pLeader] == 6) { MoveObject(pdgate1,658.027,-1309.529,13.500, 3.5); SetTimer("GateClose1", 10000, 0); SendClientMessage(playerid, COLOR_YELLOW,"Ворота закроются через 10сек"); return 1; } else { SendClientMessage(playerid, COLOR_YELLOW,"Вы не из якудзы!"); return 1; } } if (strcmp(cmdtext, "/yakudzagate2", true)==0) { if(PlayerInfo[playerid][pMember] == 6||PlayerInfo[playerid][pLeader] == 6) { MoveObject(pdgate1,671.978,-1309.556,13.500, 3.5); SetTimer("GateClose2", 10000, 0); SendClientMessage(playerid, COLOR_YELLOW,"Ворота закроются через 10сек"); return 1; } else { SendClientMessage(playerid, COLOR_YELLOW,"Вы не из якудзы!"); return 1; } }
в конце public GateClose1() { MoveObject (pdgate1,662.256,-1309.515,13.500, 2.5); return 1; } public GateClose2() { MoveObject (pdgate2,667.737,-1309.537,13.500, 2.5); return 1; }
Вроде всё! Если не пашет пиши сюды или в асю 206251275
вверх в моде добавляем Quote (Code)forward GateCloseSchool(); forward Gate(); new pdgateSchool; new pdngateSchool; далее в public OnGameModeInit() добавляем Quote (Code)pdgateSchool = CreateObject(989,-2052.77,-91.8869,35.8375,0,0,17); pdngateSchool = CreateObject(989,-2052.77,-96.9865,35.8375,0,0,17); CreateObject(11091,-2075.13,-101.365,36.1328,0,0,90); CreateObject(989,-2052.77,-81.729,35.8375,0,0,17); CreateObject(989,-2052.77,-86.8275,35.8375,0,0,17); CreateObject(989,-2052.77,-102.086,35.8375,0,0,17); далее в public OnPlayerCommandText(playerid, cmdtext[]) добавляем: Quote (Code)if (strcmp(cmdtext, "/schoolopen", true)==0) { if(PlayerInfo[playerid][pMember] == 11||PlayerInfo[playerid][pLeader] == 11||PlayerInfo[playerid][pMember] == 12||PlayerInfo[playerid][pLeader] == 12) { MoveObject(pdgateSchool,-2052.77,-86.8275,35.8375, 3.5); MoveObject(pdngateSchool,-2052.77,-102.086,35.8375, 3.5); SetTimer("GateCloseSchool", 10000, 0); SendClientMessage(playerid, COLOR_YELLOW,"Ворота закроются через 10 секунд"); return 1; } else { SendClientMessage(playerid, COLOR_YELLOW,"Ты не учитель!!!"); return 1; } } а далее где ни будь в конце мода отдельно пишем Quote (Code)public GateCloseSchool() { MoveObject (pdgateSchool,-2052.77,-91.8869,35.8375, 2.5); MoveObject (pdngateSchool,-2052.77,-96.9865,35.8375, 2.5); return 1; } public Gate(){ if(PlayerInfo[playerid][pMember] == 11||PlayerInfo[playerid][pLeader] == 11||PlayerInfo[playerid][pMember] == 12||PlayerInfo[playerid][pLeader] == 12){ if(IsAnyPlayerInArea(-2060.0,-86.8869,-2043.0,-98.8869)){ MoveObject(pdgateSchool,-2052.77,-86.8275,35.8375, 3.5); MoveObject(pdngateSchool,-2052.77,-102.086,35.8375, 3.5); } else{ MoveObject(pdgateSchool,-2052.77,-91.8869,35.8375, 2.5); MoveObject(pdngateSchool,-2052.77,-96.9865,35.8375, 2.5); } } IsAnyPlayerInArea(Float:x1, Float:y1, Float:x2, Float:y2){ for(new i=0; i<MAX_PLAYERS; i++){ if(IsPlayerConnected(i)){ new Float:X, Float:Y, Float:Z; GetPlayerPos(i, X, Y, Z); if(X >= x1 && X <= x2 && Y >= y1 && Y <= y2) return 1; } } return 0; } пробуй =)
На это получается :C:\Documents and Settings\ÔÅÄß\Ðàáî÷èé ñòîë\SAMPKINGS\SAMPKINGS\samp\gamemodes\P1RPG.pwn(6599) : warning 213: tag mismatch C:\Documents and Settings\ÔÅÄß\Ðàáî÷èé ñòîë\SAMPKINGS\SAMPKINGS\samp\gamemodes\P1RPG.pwn(6599) : error 001: expected token: ",", but found "." C:\Documents and Settings\ÔÅÄß\Ðàáî÷èé ñòîë\SAMPKINGS\SAMPKINGS\samp\gamemodes\P1RPG.pwn(6599) : error 029: invalid expression, assumed zero C:\Documents and Settings\ÔÅÄß\Ðàáî÷èé ñòîë\SAMPKINGS\SAMPKINGS\samp\gamemodes\P1RPG.pwn(6599) : warning 215: expression has no effect C:\Documents and Settings\ÔÅÄß\Ðàáî÷èé ñòîë\SAMPKINGS\SAMPKINGS\samp\gamemodes\P1RPG.pwn(6599) : warning 215: expression has no effect C:\Documents and Settings\ÔÅÄß\Ðàáî÷èé ñòîë\SAMPKINGS\SAMPKINGS\samp\gamemodes\P1RPG.pwn(6599) : warning 215: expression has no effect C:\Documents and Settings\ÔÅÄß\Ðàáî÷èé ñòîë\SAMPKINGS\SAMPKINGS\samp\gamemodes\P1RPG.pwn(6599) : error 001: expected token: ";", but found ")" C:\Documents and Settings\ÔÅÄß\Ðàáî÷èé ñòîë\SAMPKINGS\SAMPKINGS\samp\gamemodes\P1RPG.pwn(6599) : fatal error 107: too many error messages on one line
Добавлено (04.11.2008, 15:31) --------------------------------------------- Извиняюсь,всё зароботало (причина тех ошибок мои кривые руки и то что координаты в ручную ставил(не через Мта))
Значит так есть ещё один вариант становленния ворот , может уже кто-нибудь говорил я просто не замечал ! Рассказывать буду по пунктам (лично я делаю по такой системе:
1. В самом начале мода есть такие строчки как forward ..... и т.д. их там много , делаем так дописываем в самый низ этих строчек тоесть там идёт допустим
Взял ради примера , дописываем в конец строчку forward Close();
2. Создаём новый new (который идёт сразу после forward) так же дописываем туда строчку new LCNGate; (взял как пример ворота на базу ЛКН , у меня лично в другом месте не как в стандартном ГФ) тоесть можете сами дать другое название например new YakuzaGate;
3. Находим через поиск строчку public OnGameModeInit() ставим туда куда ставите объекты строчку
LCNGate = CreateObject(980,2234.257,-2215.662,14.845,0.0,0.0,-45.000); если меняете название в самом начале где new.... то сдесь тоже меняем будет например так YakuzaGate = CreateObject(.....);
4. Опять же находим через поиск строчку public OnPlayerCommandText(playerid, cmdtext[]) и дописваем тада вот эти данные
if (strcmp(cmdtext, "/lcnopen", true)==0)// Сдесь идёт команда для открытия в данном случае /lcnopen { if(PlayerInfo[playerid][pMember] == 5 || PlayerInfo[playerid][pLeader] == 5)// Сдесь идёт проверка на групперовку тоесть 5 это ЛКН { MoveObject(LCNGate,2234.257,-2215.662,8.845, 4);// Указывается куда должны двигаться ворота,либо влево-вправо или верх-вниз SetTimer("Close", 5000, 0);// Сдесь таймер через сколько минут ворота закроются в данном случаем через 5 сек SendClientMessage(playerid, COLOR_GREEN," Ворота открыты и закроются через 5 сек ");//Указвается что будет писать когда открыты ворота } else { SendClientMessage(playerid, COLOR_GREY, " Вы не член Ла Козы Ностры ");//А сдесь если кто другой пытается открыть ворота return 1; } return 1; }
5. И на конец самое последнее =) это мы создаём новый паблик тоесть в самый низ мода дописываем вот эти строчки:
public Close() //Это паблик Close он обязательны без него ворота не будут закрываться ! { MoveObject(LCNGate,2234.257,-2215.662,14.845, 2.5);//А сдесь указываем место куда они должны закрыться тоесть начальную точку ! }
Вот впринципе и всё сразу скажу в работает только в моде хз в скрипте не проверял , у меня лично всё работает попробуйте по этому принцепы сделать должно получиться (если что стукните в асю помогу ну если что)
П.С. Может кому поможет поставте плюсеГ ! ! ! Удачи в создание ворот ;)