
Vamp1r
Members-
Posts
68 -
Joined
-
Last visited
Everything posted by Vamp1r
-
for i=1,40000 do removeWorldModel(i,10000,0,0,0) end Мб так? Я без понятия какая модель последняя, поэтому поставил 40000
-
По-моему координаты по которым ты проверяешь игрока не соответствуют координатам самих объектов. + Способ не очень-то хороший, т.к. каждые новые ворота ты будешь делать по новой.
-
Спасибо, поржал
-
я не понял что делает эта функция. ничего не происходит. уточнаяю: как созданного педа нацелить на игрока, чтобы прицел педа попадал именно в игрока (лево/право/низ/верх). Функция устанавливает педу цель по координатам. Используй https://wiki.multitheftauto.com/wiki/GetPedBonePosition для того, чтобы узнать координаты кости к которой нужно целиться
-
Нужен был хороший мап едитор. MED не нравился. Начал гуглить мап едиторы, наткнулся на MTA Race Map Editor. Скачал, поставил, пользовался. Потом кто-то сказал об выходе MTA DM, я и заинтересовался.
-
только настоящие деньги.. Если игроки будут платить за участие в гонке, то только так это возможно. Никто со своего кармана не захочет платить
-
Не знаю как у вас, но у меня приставка "фри", всегда ассоциируется с бесплатностью, но никак не со свободностью. Название форума принимается буквально как "Леха мид" (дотеры поймут)
-
Korish0074, я же вам дал код, который работает для каждого транспорта. Попробую объяснить каждую строчку понятнее addEventHandler("onVehicleStartEnter", getRootElement(), -- Событие, которое срабатывает, когда игрок садится в авто function(player, seat) -- Функция с двумя аргументами, player - игрок, seat - номер сидения, на которое пытается сесть игрок. Так же есть неявный аргумент source, который хранит в себе указать на транспорт, в который пытается войти игрок if seat == 0 then -- Если игрок хочет сесть на место водителя, то идем дальше, если нет - пускай себе садится local owner = getElementData(source, "owner") -- У автомобиля хранится информация об владельце (работает для ВСЕХ автомобилей) if owner ~= false then -- Если у данного автомобиля есть владелец, то идем дальше. Если нету, то пускай садится if owner ~= getPlayerName(player) then -- Проверяем, совпадает ли имя владельца автомобиля с именем игрока, который пытается сесть в данный автомобиль. Если совпадает, то пускай садится. Если не совпадает, то идем дальше outputChatBox("Это не ваш автомобиль! Владелец: "..owner, player) -- Отправляем игроку сообщение cancelEvent() -- Отменяем событие, чтобы игрок не смог сесть в авто. end end end end ) Этот код работает для всех автомобилей, хоть 2, 3, 65000. А для того, чтобы дать автомобилю "хозяина", нужно установить ему в дату его имя, при помощи setElementInfo(автомобиль, "owner", имя_игрока). Для наглядности, вот тебе команда, по которой игрок становится владельцем автомобиля, когда напишет команду: addCommandHandler("owner", function(player) local vehicle = getPedOccupiedVehicle(player) if vehicle == false then outputChatBox("Вы не в автомобиле!", player) return end local owner = getElementData(vehicle, "owner") if owner ~= false then outputChatBox("Этот автомобиль занят! Владелец: "..owner, player) return end setElementData(vehicle, "owner", getPlayerName(player)) outputChatBox("Теперь этот автомобиль ваш", player) end ) Написав на сервере /owner, в транспорте, вы будете владельцем данного транспорта и никто кроме вас в его не войдет addCommandHandler("spawn", function(player) if isElementFrozen(player) then outputChatBox("Вы недавно писали команду /spawn, подождите!", player) return end setElementFrozen(player, true) setTimer(function(player, x, y, z, r) setElementFrozen(player, false) spawnPlayer(player, x, y, z, r)` end,20000, 1, player, координата_x, координата_y, координата_z, угол_поворота) end ) Вместо "координата_x, координата_y, координата_z, угол_поворота" вставь свои координаты.
-
addEventHandler("onVehicleStartEnter", getRootElement(), function(player, seat) if seat == 0 then -- Если игрок хочет сесть на место водителя local owner = getElementData(source, "owner") -- Тут хранится информация, кто владелец автомобиля if owner ~= false then -- Есть ли у автомобиля владелец if owner ~= getPlayerName(player) then -- Совпадает ли имя игрока с именем владельца outputChatBox("Это не ваш автомобиль! Владелец: "..owner, player) cancelEvent() end end end end ) Чтобы добавить автомобилю владельца, используй: setElementData(автомобиль, "owner", имя_игрока)
-
Ну это да Но чаще встречается сохранение всей инфы игрока в файл каждую секунду. SAMP-кодеры, такие SAMP-кодеры. Падения сервера маловероятный случай, поэтому запись инфы в файл каждую минуту особой потери не даст.
-
AirKite, вы живете будущим. Я говорил про то, что мы имеем на данный момент. А имеем мы: пониженную скорость работы в 2 раза, сообщение от самого Kye, который не рекомендует использовать этот плагин (наверное он тоже не разбирается в программировании?). А будет ли лучше - неизвестно. А говорить "скоро" и т.п. - глупо, т.к. вы не знаете что будет, а чего нет. Вы делаете из этого плюс, хотя на самом деле это ОГРОМНЫЙ минус. Кому нужна простота? Да, новичкам хорошо, но SAMP это же не обучающая программа для новичков в программировании. А перед тем, как начинать что-то писать какие-то скрипты, нужно ознакомиться с самим языком программирования, а не "по ходу дела", "ctrl+c ctrl+v", как и происходит в SAMP-скриптинге. Вот кто не разбирается - так это вы. Ни один "опытный" разработчик не позволит себе потерю быстродействия в 2 раза. Любой "опытный" разработчик будет использовать то, что дает большее быстродействие, а не наоборот (как думаете вы).
-
Поможет AMX-плагин МТА - нет Поможет Lua-плагин SAMP'у - нет
-
Набор команды для создания нового игрового режима.
Vamp1r replied to kickass140's topic in Russian / Русский
2 дня работы? Вы с такими успехами не далеко продвинетесь. -
Автор данного плагина написал, что скорость работы в 2 раза медленнее чем у pawn-скриптов. Кому нужна такая потеря производительности? Хоть автор и писал, что он занимается улучшением, но я не думаю, что он добьется больших успехов. Мало кто захочет использовать данный плагин, т.к. "самп-скриптеры" (большая часть) не признают ничего кроме PAWN'a. P.S. AirKite, вы как обычно поражаете меня. Использование amx-плагина для переноса SAMP-гейммода в МТА - извращение. Почему извращение? Да потому что в МТА, большинство SAMP-задач можно решить гораздо легкими и не такими громоздкими путями.
-
Я скажу так: "Последние пару лет я не сталкивался с необязательной регистрацией". Везде сейчас она обязательная. В сампе часто встречал сервера, где продолжительность регистрации минимум 10 минут (включая обязательное обучение). Не вижу смысла в больших регистрациях. Регистрация должна быть максимально простой, дабы не отпугивать игрока с такой причиной как: "Я не понял как зарегистрироваться".
-
local a51gate1 = createObject ( 2929, 215.99548339844, 1875.40234375, 13.938992500305, 0, 0, 0 ) local a51gate2 = createObject ( 2929, 211.94564819336, 1875.40234375, 13.938992500305, 0, 0, 0 ) addEventHandler ( "onPlayerCommand", getRootElement(), function ( command ) if ( command == "opengate" ) then if getElementModel ( source ) == 283 or getElementModel ( source ) == 284 then moveObject (a51gate1, 5000, 218.99548339844, 1875.40234375, 13.938992500305 ) moveObject (a51gate2, 5000, 208.94564819336, 1875.40234375, 13.938992500305 ) outputChatBox ("Ворота открыты!", source) end elseif ( command == "closegate" ) then -- команда для закрытия ворот if getElementModel ( source ) == 283 or getElementModel ( source ) == 284 then moveObject ( a51gate1, 5000, 215.99548339844, 1875.40234375, 13.938992500305 ) moveObject ( a51gate2, 5000, 211.94564819336, 1875.40234375, 13.938992500305 ) outputChatBox ("Ворота закрыты!", source) end end end ) И по-моему, событие onPlayerCommand, вызывается когда пользователь ввел команду не в чат, а в консоль (~). Если конечно не изменяет память.
-
AirKite, вы зациклены на простом игроке. Если бы не скриптеры, у сампа не было бы таких игровых режимов как сейчас и следовательно не было бы такого количества игроков. SAMP просто выиграл тем, что в тот момент альтернативы как таковой не было. И люди пошли туда, начали писать свой гейммоды. Не всем захочется переписывать свой гейммод под другой мультиплеер, вот и сидят в сампе. Один раз, я переписывался с одним из лучших sa-mp скриптеров (на мой взгляд, т.к. его гейммод уникален и манит своими плюшками), ник его niCe, модератор чешской ветки. Он был бы не против перейти в МТА, но у его нет никакого желания переписывать все что есть.
-
Не красивый алгоритм? Проще его в данном случае не придумать. Да, с bool будет куда проще. Вот пример: local flag = false addEventHandler("onPlayerJoin", getRootElement(), function() if flag then -- Подключился четный игрок -- Спавн с инфернусом else -- Подключился нечетный игрок -- Спавн с туризмо end flag = not flag end )
-
Если я тоже правильно понял, то куда проще создать переменную, которую увеличивать на 1 при заходе игрока на сервер и проверять ее на четность. Вместо переменной можно использовать getPlayerCount. Каждому четному игроку давать инфернус, а каждому нечетному туризмо (или наоборот).
-
Тогда почему я (как игрок), не могу зайти и нормально пострелять по модели игрока, а должен стрелять в пустоту? Это вы называете "классный" мультиплеер? Те игры, которые вы перечислили, я что-то там такого не заметил. И это называется "все для игроков"? Уже давно всем известно, что многие плюшки из МТА, были жестоко скопированы Kyeman'ом (нынче Kalcor'ом). Вспоминается 2008 год, в котором была 0.2х версия. К тому времени, у МТА появилось огромное кол-во плюшек, некоторые из которых попали в 0.3а версию. Наверное, просто совпадение? P.S. Вы - консерватор. Выйдите из своего бункера, пока не поздно.
-
AirKite, мне тебя очень жаль. Ты считаешь, что мультиплеер не должен менять игру. А что тогда в твоем понятии мультиплеер? В моем - это возможность ИГРАТЬ нескольким людям одновременно. И в это определение, не входит понятие "Изменение или не изменение игры". Открою тебе секрет. Не хочешь изменять игру до неузнаваемости в МТА - НЕ ИЗМЕНЯЙ. МТА предоставляет тебе только возможности, а вот как ты применишь эти возможности - решать только тебе. МТА не делает игру неузнаваемой, игру неузнаваемой делают ЛЮДИ (в данном случае скриптеры). Еще открою тебе один секрет. Во всех тех играх, которые ты перечислил, можно изменить интерфейс. Пускай не официальными путями, но можно же. P.S. Повторюсь еще раз, но для таких как ты - это важно. МТА не меняет игру, она лишь дает возможность изменять. А воспользоваться этой возможностью или нет, решать скриптеру. Тебе никто не мешает создать свой гейммод, в котором не будет замен текстур и т.п..
-
Вы забыли про производительность кода. Да, реализовать можно многое, но при таких реализациях будет уйма циклов и таймеров, что не есть хорошо. Вот вам мой маленький список того, чего вы не реализуете со 100% работоспособностью в сампе: Прозрачный/полупрозрачный игрок Установить определенный прогресс анимации Оторвать игроку/педу голову Узнать serial игрока (чтобы привязывать к нему аккаунты, либо забанить так, чтобы он не зашел) Изменить размеры объекта Сделать объект видимым со всех сторон (использовать 2 объекта - не разумно) Изменять характеристики транспорта Изменять характеристики оружия Полный контроль воды СА Изменить размеры солнца Изменять параметры тумана/ветра Отследить выстрел в голову (увы, нельзя отследить со 100% успехом) Это лишь маленький список того, чего самп не может. Этот список можно увеличить в более чем 5 раз. А вы говорите "почти все". Так же, не стоит забывать о скриптах, которые выполняются на стороне клиента, а серверу отсылают лишь ответ. Благодаря им, можно сильно увеличить производительность сервера, чего нельзя сказать о сампе. Пример: P.S. Сам был самп скриптером с 2008, по 2011 год. МТА давно меня привлекал, но на тот момент не было поддержки кириллицы и это мне жутко не нравилось. Слава богу, что кириллица уже давно присутствует.
-
Слишком большая нагрузка! Таймер который проверяет все машины, да и еще массив, который должен хранить дамаг! Вобщем все это дело очень сильно нагружать сервер будет! И кстати всеравно таймер не будет успевать проверить все машины... Их могут подорвать раньше чем сработает таймер! Только что проверил. Обрабатывал 5000 автомобилей, каждые 200 мс (таймером). На выполнение каждой обработки уходило 13-15 мс. Нагрузка не слишком велика. И что значит таймер не будет успевать? Чушь. Таймер обрабатывает за 200 мс весь транспорт.
-
Только что проверил. Событие не вызывается, когда автомобиль лежит на крыше. Вызывается только при повреждениях (например, когда автомобиль катится на крыше). Действовать нужно немного по-другому. При помощи события onVehicleDamage отслеживать весь полученный урон и сохранять его. Создать таймер, который проверял бы, лежит транспорт или нет. Если лежит, то сравниваем урон полученный через onVehicleDamage с 1000 - getElementHealth(автомобиль), и если урон транспорта больше, то ставим правильный урон, из onVehicleDamage
-
Если я правильно тебя понял, то ты хочешь, чтобы автомобиль не терял хп, когда лежит на крыше? Если да, то вот: addEventHandler("onVehicleDamage", getRootElement(), function(lossHP) if isVehicleOnRoof(source) then setElementHealth(source, getElementHealth(source)+lossHP) end end ) Вот функция isVehicleOnRoof: function isVehicleOnRoof(vehicle) local rx,ry=getElementRotation(vehicle) if (rx>90 and rx<270) or (ry>90 and ry<270) then return true end return false end Не проверял, но должно работать. По-моему ивент onVehicleDamage нельзя отменить, поэтому нужно устанавливать хп. И вызывается ли данное событие, когда автомобиль лежит на крыше? Проверь и если что отпиши.