Posted July 27, 2017 · Report post Доброго времени суток, уважаемый читатель данного поста. Сегодня представлю вам систему движущихся ворот, т.е. они будут открываться и закрываться по команде. Думаю, можно начинать. Для начала создадим переменную самих ворот, с которыми будем работать. Ко всем new: new gate, vorotaopen; Теперь следуем в паблик OnGameModeInit. Туда вставляем следующее gate = CreateObject(980, 1798.16, 2951.23, 23.5, 0, 0, 0); /* Поясняю: gate = - присваиваем переменно gate ид нашего объекта, который и будем двигать. CreateObject - функция создания объекта. 980 - ид объекта (ворот), можете заменить на свой 1798.16, 2951.23, 23.5 - координаты X, Y, Z. Заменяете на свои, дал для примера от фонаря. Координаты ЗАКРЫТЫХ ворот 0, 0, 0 - Положение объекта относительно осей RX, RY, RZ. Проще говоря, выворот объекта. Нули говорят о том, что обьект находится полностью в вертикальном прямом положении. */ Далее создаем команду. Команда на стандартном командном движке: if(strcmp("/gates", cmdtext, true, 10) == 0)// собственно создаем команду, пихать в OnPlayerCommandText { if(vorotaopen == 1) // проверяем, открыты ли ворота. { // если открыты MoveObject(gate,1798.16, 2951.23, 23.5, 3.0); /* ставим сюда координаты из OnGameModeInit, 3.0 - скорость передвижения ворот */ vorotaopen = 0; } else { MoveObject(gate, x, y, z, 3.0); // берем координаты ОТКРЫТЫХ ворот, 3.0 - скорость передвижения vorotaopen = 1; } return 1;//Успешно } На zcmd / dc_cmd: CMD:gates(playerid)// собственно создаем команду, пихать в OnPlayerCommandText { if(!vorotaopen) // проверяем, открыты ли ворота. { // если открыты MoveObject(gate,1798.16, 2951.23, 23.5, 3.0); /* ставим сюда координаты из OnGameModeInit, 3.0 - скорость передвижения ворот */ vorotaopen = 1; SendClientMessage(playerid, -1, "Ворота закрыты!"); } else { MoveObject(gate,x, y, z, 3.0); // берем координаты ОТКРЫТЫХ ворот, 3.0 - скорость передвижения vorotaopen = 0; SendClientMessage(playerid, -1, "Ворота открыты!"); } return 1;//Успешно } Автор: @stibs 0 Share this post Link to post Share on other sites
Posted October 6, 2017 · Report post Спасибо Тебе Огромное Братан!!! 0 Share this post Link to post Share on other sites
Posted October 6, 2017 (edited) · Report post @stibs, Прости конечно, но писать на таком примитивном уровне в 2k17? Серьезно? Edited October 6, 2017 by Skiffi 0 Share this post Link to post Share on other sites
Posted October 6, 2017 · Report post @Skiffi У кого та еще такие старые моды есть 0 Share this post Link to post Share on other sites
Posted October 6, 2017 · Report post @Daniil Roslyakov , я к тому что Администратор* выкладывает урок с реализацией ~2014 года 0 Share this post Link to post Share on other sites
Posted October 6, 2017 · Report post @Skiffi И что? Это имеет значение кого кода? 0 Share this post Link to post Share on other sites
Posted October 6, 2017 (edited) · Report post Это в неком роде заставляет задуматься о уровне самого форума. Ведь администрация форума - его лицо. Edited October 6, 2017 by Skiffi 0 Share this post Link to post Share on other sites
Posted October 6, 2017 · Report post @Skiffi может быть уровень и примитивный, но зато все понятно, как мне кажется. Да и усложнять здесь ничего и не нужно. Простая функция - простая реализация. Это все-таки раздел уроков. 0 Share this post Link to post Share on other sites
Posted October 6, 2017 · Report post vorotaopen == 1 Специально для таких применений существует тип переменной boolМогу написать решение, в более удобной реализации 0 Share this post Link to post Share on other sites
Posted October 27, 2017 · Report post Нужно сделать тут проверку на фракцию, поможете?) 0 Share this post Link to post Share on other sites
Posted October 27, 2017 · Report post @HAPKOMAH if(переменная_фракции_игрока != ИД_ФРАКЦИИ) return SendClientMessage(playerid, -1, "Вы не состоите в фракции \"НАЗВАНИЕ ФРАКЦИИ\""); 0 Share this post Link to post Share on other sites
Posted October 27, 2017 · Report post @Skiffi Не,нравиться что-то,так не пишите,а оставьте своё мнение при себе,а то такое ощущение,что вы всё,это пишите для набива сообщений. 0 Заметка от DEST , создано October 28, 2017 Оффтоп устное предупреждение Share this post Link to post Share on other sites
Posted October 27, 2017 · Report post @stibs нормально все, не обращай внимание на того "крутого" набивщика сообщений, но дам совет, советую использовать переменную типа "bool", почему? Потому что в данном случае у тебя знание будет только false или true, поэтому лучше сделать так: new gate, bool: vorotaopen; а команды: if(strcmp("/gates", cmdtext, true, 10) == 0)// собственно создаем команду, пихать в OnPlayerCommandText { if(vorotaopen == true) // проверяем, открыты ли ворота. { // если открыты MoveObject(gate,1798.16, 2951.23, 23.5, 3.0); /* ставим сюда координаты из OnGameModeInit, 3.0 - скорость передвижения ворот */ vorotaopen = false; } else { MoveObject(gate, x, y, z, 3.0); // берем координаты ОТКРЫТЫХ ворот, 3.0 - скорость передвижения vorotaopen = true; } return 1;//Успешно } CMD:gates(playerid)// собственно создаем команду, НЕ ПИХАТЬ в OnPlayerCommandText, в конец мода или туда, где у вас кмд { if(vorotaopen == true) // проверяем, открыты ли ворота. { // если открыты MoveObject(gate,1798.16, 2951.23, 23.5, 3.0); /* ставим сюда координаты из OnGameModeInit, 3.0 - скорость передвижения ворот */ vorotaopen = false; SendClientMessage(playerid, -1, "Ворота закрыты!"); } else { MoveObject(gate,x, y, z, 3.0); // берем координаты ОТКРЫТЫХ ворот, 3.0 - скорость передвижения vorotaopen = true; SendClientMessage(playerid, -1, "Ворота открыты!"); } return 1;//Успешно } У тебя тут еще ошибка, если ворота открыты, то они закрываются, но переменная будет, что они открыты, поэтому они не будут открываться, исправил это. Согласись, так будет лучше 1 Share this post Link to post Share on other sites
Posted October 27, 2017 · Report post 36 минут назад, SCRIPTMAN сказал: У тебя тут еще ошибка, если ворота открыты, то они закрываются, но переменная будет, что они открыты, Я лично не заметил ошибки у него в первом посте.В первом посте у него точно также как и у тебя, только 0 и 1. Про булеан выше уже писали. 0 Share this post Link to post Share on other sites
Posted October 27, 2017 (edited) · Report post @Maks_Badanov, для чего существует форум? - Для обсуждений/помощи Каждый пользователь форума в праве оставлять свое субъективное мнение. Если Вы считаете, что так называемый г**но-код - должен присутствовать на форуме, то у меня нет желания вести с Вами дискуссию. Edited October 27, 2017 by Skiffi 1 Заметка от DEST , создано October 28, 2017 Оффтоп устное предупреждение Share this post Link to post Share on other sites
Posted October 28, 2017 · Report post Помогите еще сделать, что бы если отойти от ворот на 5-10 метров - то нельзя было бы открывать/закрывать, так-как получается даже на другом конце карты управлять ими 0 Share this post Link to post Share on other sites
Posted October 28, 2017 · Report post В 27.10.2017 в 08:17, DEST сказал: @HAPKOMAH if(переменная_фракции_игрока != ИД_ФРАКЦИИ) return SendClientMessage(playerid, -1, "Вы не состоите в фракции \"НАЗВАНИЕ ФРАКЦИИ\""); Ошибки new.pwn(3707) : error 017: undefined symbol "ToCheat" new.pwn(3713) : error 017: undefined symbol "ToCheat" new.pwn(3718) : error 017: undefined symbol "IsACop" new.pwn(3727) : error 017: undefined symbol "ToCheat" new.pwn(3740) : error 017: undefined symbol "OnPlayerGiveWeaponSkill" new.pwn(3749) : error 017: undefined symbol "ToCheat" new.pwn(3757) : error 017: undefined symbol "IsACop" new.pwn(3785) : error 017: undefined symbol "SetHealth" new.pwn(3815) : error 017: undefined symbol "SKick" new.pwn(3895) : error 017: undefined symbol "MysqlUpdatePlayerInt" new.pwn(3910) : error 017: undefined symbol "Converts" new.pwn(4023) : error 017: undefined symbol "TransferMoney" new.pwn(4040) : error 017: undefined symbol "ToggleLock" new.pwn(4065) : error 017: undefined symbol "WHDataUpdate" А вот проверка (P.S Выделил еще код которых был рядом, что бы было понятно где проверка ) CMD:openarm(playerid)// собственно создаем команду, НЕ ПИХАТЬ в OnPlayerCommandText, в конец мода или туда, где у вас кмд { if(IsACop(playerid) != TEAM_NG) return SendClientMessage(playerid, -1, "Вы не состоите в фракции \"НАЗВАНИЕ ФРАКЦИИ\""); { if(vopenarm == true) // проверяем, открыты ли ворота. { // если открыты Сделал еще шлагбаум, вот код открытых и закрытых. MoveObject(gated,2579.8274, -2438.6987, 21.4021, 3.0, 0.0000, -90.0000, 270.0000); и MoveObject(gated,2579.8274, -2438.6987, 21.4021, 3.0, 0.0000, -10.0000, 270.0000); Он открывается резко, а не плавно. Сначала по схеме сделал армии - открываются плавно. Решил другой фраке шлагбаум сделать - открывается резко. 0 Share this post Link to post Share on other sites
Posted October 28, 2017 · Report post @HAPKOMAH скобку после if(IsACop(playerid) != TEAM_NG) ... убери. Если резко, значит смотри как сделаны координаты в армии и как сделал координаты ты. 1 Share this post Link to post Share on other sites
Posted October 28, 2017 · Report post 4 минуты назад, DEST сказал: @HAPKOMAH скобку после if(IsACop(playerid) != TEAM_NG) ... убери. Если резко, значит смотри как сделаны координаты в армии и как сделал координаты ты. Спасибо, помог. 0 Share this post Link to post Share on other sites
Posted October 30, 2017 · Report post В 28.10.2017 в 15:04, DEST сказал: @HAPKOMAH скобку после if(IsACop(playerid) != TEAM_NG) ... убери. Если резко, значит смотри как сделаны координаты в армии и как сделал координаты ты. Помоги еще сделать, что бы если отойти от ворот на 5-10 метров - то нельзя было бы открывать/закрывать, так-как получается даже на другом конце карты управлять ими 0 Share this post Link to post Share on other sites
Posted October 30, 2017 · Report post @HAPKOMAH if(!IsPlayerInRangeOfPoint(playerid, 50.0, X, Y, Z)) return SendClientMessage(playerid, -1, "На таком расстоянии невозможно управлять воротами!"); Добавить в начало команды, соответственно заменив X, Y, Z на координаты ворот 0 Share this post Link to post Share on other sites
Posted October 30, 2017 · Report post 2 минуты назад, DEST сказал: @HAPKOMAH if(!IsPlayerInRangeOfPoint(playerid, 50.0, X, Y, Z)) return SendClientMessage(playerid, -1, "На таком расстоянии невозможно управлять воротами!"); Добавить в начало команды, соответственно заменив X, Y, Z на координаты ворот 50.0 - Это 5 или 50 метров? 0 Share this post Link to post Share on other sites
Posted October 30, 2017 · Report post @HAPKOMAH 50.0 это 50 игровых метров 1 Share this post Link to post Share on other sites
Posted April 6, 2018 · Report post В 27.07.2017 в 21:12, stibs сказал: Доброго времени суток, уважаемый читатель данного поста. Сегодня представлю вам систему движущихся ворот, т.е. они будут открываться и закрываться по команде. Думаю, можно начинать. Для начала создадим переменную самих ворот, с которыми будем работать. Ко всем new: new gate, vorotaopen; Теперь следуем в паблик OnGameModeInit. Туда вставляем следующее gate = CreateObject(980, 1798.16, 2951.23, 23.5, 0, 0, 0); /* Поясняю: gate = - присваиваем переменно gate ид нашего объекта, который и будем двигать. CreateObject - функция создания объекта. 980 - ид объекта (ворот), можете заменить на свой 1798.16, 2951.23, 23.5 - координаты X, Y, Z. Заменяете на свои, дал для примера от фонаря. Координаты ЗАКРЫТЫХ ворот 0, 0, 0 - Положение объекта относительно осей RX, RY, RZ. Проще говоря, выворот объекта. Нули говорят о том, что обьект находится полностью в вертикальном прямом положении. */ Далее создаем команду. Команда на стандартном командном движке: if(strcmp("/gates", cmdtext, true, 10) == 0)// собственно создаем команду, пихать в OnPlayerCommandText { if(vorotaopen == 1) // проверяем, открыты ли ворота. { // если открыты MoveObject(gate,1798.16, 2951.23, 23.5, 3.0); /* ставим сюда координаты из OnGameModeInit, 3.0 - скорость передвижения ворот */ vorotaopen = 0; } else { MoveObject(gate, x, y, z, 3.0); // берем координаты ОТКРЫТЫХ ворот, 3.0 - скорость передвижения vorotaopen = 1; } return 1;//Успешно } На zcmd / dc_cmd: CMD:gates(playerid)// собственно создаем команду, пихать в OnPlayerCommandText { if(!vorotaopen) // проверяем, открыты ли ворота. { // если открыты MoveObject(gate,1798.16, 2951.23, 23.5, 3.0); /* ставим сюда координаты из OnGameModeInit, 3.0 - скорость передвижения ворот */ vorotaopen = 1; SendClientMessage(playerid, -1, "Ворота закрыты!"); } else { MoveObject(gate,x, y, z, 3.0); // берем координаты ОТКРЫТЫХ ворот, 3.0 - скорость передвижения vorotaopen = 0; SendClientMessage(playerid, -1, "Ворота открыты!"); } return 1;//Успешно } Автор: @stibs А как сделать чтобы они сами закрывались через несколько секунд 0 Share this post Link to post Share on other sites
Posted April 6, 2018 · Report post @MaJoR Таймером, SetTimer функция Вам в помощь. 0 Share this post Link to post Share on other sites