-
Posts
153 -
Joined
-
Last visited
-
Days Won
2
Everything posted by TEDERIs
-
Если я не ошибаюсь, в рэйс моде при смерти игрока авто через некоторое время удаляется. Следовательно, при удалении авто объекты будут также уничтожены. Если хочешь, можешь завести таблицу и записывать в нее последние авто игроков. Потом через событие onPlayerWasted с помощью этой таблицы найти авто и удалить с него объекты.
-
Можно вот так попробовать: addCommandHandler ( "attach", function ( player, command, playername, model, offX, offY, offZ, offRX, offRY, offRZ ) if playername then local targetPlayer = getPlayerFromName ( playername ) if targetPlayer then local targetVehicle = getPedOccupiedVehicle ( targetPlayer ) if targetVehicle then model = tonumber ( model ) if model then if model == 0 then for _, attachedElement in ipairs ( getAttachedElements ( targetVehicle ) ) do if isElement ( attachedElement ) and getElementType ( attachedElement ) == "object" then destroyElement ( attachedElement ) end end else offX, offY, offZ, offRX, offRY, offRZ = tonumber ( offX ), tonumber ( offY ), tonumber ( offZ ), tonumber ( offRX ), tonumber ( offRY ), tonumber ( offRZ ) if offX and offY and offZ and offRX and offRY and offRZ then local x, y, z = getElementPosition ( targetVehicle ) local object = createObject ( model, x + offX, y + offY, z + offZ ) if object then attachElements ( object, targetVehicle, offX, offY, offZ, offRX, offRY, offRZ ) else outputChatBox ( "Вы не можете создать объект с такой моделью", player ) end else outputChatBox ( "Вы должны указать смещение объекта [Xoffset] [Yoffset] [Zoffset] [RXoffset] [RYoffset] [RZoffset]", player ) end end else outputChatBox ( "Вы должны указать модель объекта или 0 для его удаления", player ) end else outputChatBox ( "Игрок должен находиться в автомобиле", player ) end else outputChatBox ( "Игрока с таким именем не существует", player ) end else outputChatBox ( "Вы должены указать имя игрока", player ) end end ) local l_root = getRootElement ( ) function destroyAttachedObjects ( ) if getElementType ( source ) == "vehicle" then for _, attachedElement in ipairs ( getAttachedElements ( source ) ) do if isElement ( attachedElement ) and getElementType ( attachedElement ) == "object" then destroyElement ( attachedElement ) end end end end addEventHandler ( "onVehicleExplode", l_root, destroyAttachedObjects ) addEventHandler ( "onElementDestroy", l_root, destroyAttachedObjects ) /attach PLAYER_NAME MODEL OFFSET_X OFFSET_Y OFFSET_Z OFFSET_RX OFFSET_RY OFFSET_RZ При смерти игрока через событие невозможно найти авто, нужно дописывать скрипт. Но и без того, для чистки от объектов вполне достаточно события уничтожения автомобиля.
-
local l_root = getRootElement ( ) function destroyAttachedObjects ( element, command, arg1, arg2 ) if command == "attach" and ( arg1 ~= "killer" or arg2 ~= "0" ) then outputChatBox ( "Синтаксис: /attach killer 0" ) return end if not isElement ( element ) then element = source end local elementType = getElementType ( element ) if elementType == "vehicle" or elementType == "player" then if elementType == "player" and isPedInVehicle ( element ) then element = getPedOccupiedVehicle ( element ) end for _, attachedElement in ipairs ( getAttachedElements ( element ) ) do if isElement ( attachedElement ) and getElementType ( attachedElement ) == "object" then destroyElement ( attachedElement ) end end end end addEventHandler ( "onVehicleExplode", l_root, destroyAttachedObjects ) addEventHandler ( "onPlayerWasted", l_root, destroyAttachedObjects ) addCommandHandler ( "attach", destroyAttachedObjects ) Например так можно решить этот вопрос, если конечно я правильно тебя понял.
-
Можно например так: local vehicles = { } addCommandHandler ( "cv", function ( player, command, name ) if name then local model = getVehicleModelFromName ( name ) if model then local x, y, z = getElementPosition ( player ) if isElement ( vehicles [ player ] ) then destroyElement ( vehicles [ player ] ) end vehicles [ player ] = createVehicle ( model, x + 2, y, z ) warpPedIntoVehicle ( player, vehicles [ player ] ) else outputChatBox ( "Транспортного средства с таким именем не существует", player ) end else outputChatBox ( "Синтаксис: /cv [name]", player ) end end ) Скрипт сырой, можно значительно его улучшить. Например, добавить удаление транспорта после выхода игрока из игры. Однако, еще проще изменить оригинальный freeroam. Скажем, заменить блок кода в fr_server.lua(327-334 строки): ... if vehID == 464 then warpPedIntoVehicle(source, vehicle) elseif not g_Trailers[vehID] then if getOption('vehicles.idleexplode') then g_VehicleData[vehicle].timers.fire = setTimer(commitArsonOnVehicle, getOption('vehicles.maxidletime'), 1, vehicle) end g_VehicleData[vehicle].timers.destroy = setTimer(unloadVehicle, getOption('vehicles.maxidletime') + (getOption('vehicles.idleexplode') and 10000 or 0), 1, vehicle) end ... на ... warpPedIntoVehicle(source, vehicle) if not g_Trailers[vehID] and vehID ~= 464 then if getOption('vehicles.idleexplode') then g_VehicleData[vehicle].timers.fire = setTimer(commitArsonOnVehicle, getOption('vehicles.maxidletime'), 1, vehicle) end g_VehicleData[vehicle].timers.destroy = setTimer(unloadVehicle, getOption('vehicles.maxidletime') + (getOption('vehicles.idleexplode') and 10000 or 0), 1, vehicle) end ...
-
addCommandHandler ( "cv", function ( player, command, name ) if name then local model = getVehicleModelFromName ( name ) if model then local x, y, z = getElementPosition ( player ) warpPedIntoVehicle ( player, createVehicle ( model, x + 2, y, z ) ) else outputChatBox ( "Транспортного средства с таким именем не существует", player ) end else outputChatBox ( "Синтаксис: /cv [name]", player ) end end )
-
Простейший пример: addCommandHandler ( "cv", function ( player, command, model ) model = tonumber ( model ) if model then local x, y, z = getElementPosition ( player ) local vehicle = createVehicle ( model, x + 2, y, z ) if vehicle then warpPedIntoVehicle ( player, vehicle ) else outputChatBox ( "Вы не можете использовать такой ID для транспортного средства", player ) end else outputChatBox ( "Синтаксис: /cv [model]", player ) end end )
-
addCommandHandler ( "del", function ( thePlayer ) local vehicle = getPedOccupiedVehicle ( thePlayer ) if vehicle then for _, element in ipairs ( getAttachedElements ( vehicle ) ) do destroyElement ( element ) end outputChatBox ( "Все прикрепленные объекты успешно удалены", thePlayer ) else outputChatBox ( "Вы должны находиться в транспортном средстве", thePlayer ) end end ) Для удаления объектов при взрыве авто можно использовать соответствующее событие. Например: addEventHandler ( "onVehicleExplode", getRootElement ( ), function ( ) for _, element in ipairs ( getAttachedElements ( source ) ) do destroyElement ( element ) end end )
-
Как не работает?! Ты точно на серверной стороне его запускаешь?
-
Например так (серверный скрипт): addCommandHandler ( "attach", function ( player, command, model, offX, offY, offZ, offRX, offRY, offRZ ) local vehicle = getPedOccupiedVehicle ( player ) if vehicle then model, offX, offY, offZ, offRX, offRY, offRZ = tonumber ( model ), tonumber ( offX ), tonumber ( offY ), tonumber ( offZ ), tonumber ( offRX ), tonumber ( offRY ), tonumber ( offRZ ) if model and offX and offY and offZ and offRX and offRY and offRZ then local x, y, z = getElementPosition ( vehicle ) local object = createObject ( model, x + offX, y + offY, z + offZ ) if object then attachElements ( object, vehicle, offX, offY, offZ, offRX, offRY, offRZ ) else outputChatBox ( "Вы не можете создать объект с таким ID", player ) end else outputChatBox ( "Синтаксис: /attach [model] [Xoffset] [Yoffset] [Zoffset] [RXoffset] [RYoffset] [RZoffset]", player ) end else outputChatBox ( "Вы должны находиться в транспортном средстве", player ) end end )
-
Синтаксис float math.clamp ( float value, float lower, float upper ) Аргументы value: Значение lower: Нижнее значение upper: Верхнее значение Возврат Возвращает число в пределах lower и upper значений. Код function math.clamp ( value, lower, upper ) if type ( value ) == "number" and type ( lower ) == "number" and type ( upper ) == "number" then if value < lower then value = lower elseif value > upper then value = upper end return value end return false end
-
gMe=getLocalPlayer() blah = createMarker( 2489.9904785156, -1657.5479736328, 13.335945129395, "corona", 5 , 255, 0, 0, 255) function teleport(player) if isPedInVehicle(player) then local vehicle=getPedOccupiedVehicle(player) if source==blah then setElementPosition(vehicle, 2402.1506347656, -1659.1793212891, 13.337488174438) end end end addEventHandler("onClientMarkerHit", getRootElement(), teleport)
-
МТА работает только с Lua скриптами.
-
А что мешает методом перебора сравнить каждый пункт списка с искомым значением из поля ввода? Особых функций, по крайней мере со стороны МТА, не существует.
-
Позвольте вступиться за игровой хостинг Pawn.SU. Пользуюсь оным уже более 3 лет и могу характеризовать только положительно. Особенно хочу выделить: Отзывчивая техническая поддержка Удобная панель управления Отсутствие каких бы то ни было крэшей Бесплатные MySQL базы данных
-
Я в свое время декомпилировал пути при помощи APE: http://www.gtaforums.com/index.php?showtopic=295628&st Потом регулярными выражениями получал готовые LUA таблицы путей. Возможно у кого-то есть более рентабельное решение?
-
Try adding a check. For example: function onPlayerLogout ( ) local vehicle = getPedOccupiedVehicle ( source ) if vehicle then --code end end addEventHandler ( "onPlayerLogout", getRootElement ( ), onPlayerLogout ) OR function onPlayerLogout ( ) if isPedInVehicle(source) then local vehicle = getPedOccupiedVehicle ( source ) --code end end addEventHandler ( "onPlayerLogout", getRootElement ( ), onPlayerLogout )
-
I want to show a little video: Already realized finding the shortest path and drawing it on the radar. Wait a detailed video.
-
Set the window in the center of the screen: local sx, sy = guiGetScreenSize() panel = guiCreateWindow(sx/2-457, sy/2-268, 914, 536, "Extreme Gamers Admin Panel", false) Note: screenWidth/2-windowWidth/2, screenHeight/2-windowHeight/2
-
Release is scheduled at the end of this month. Stay tuned.
-
Достаточно давно интересует вопрос о производительности. Известно, что серверная saveMapData считывает с элементов данные записанные функцией setElementData. Как влияет последняя на конечную производительность и есть ли ограничения на количество установленных с помощью нее данных на один элемент?
-
В примерах все довольно наглядно показано: https://wiki.multitheftauto.com/wiki/GetElementMatrix
-
No, because of the complicated structure. I used serializing table data into a string. Save in a special file.
-
Не думаю что формула в данном случае послужит панацеей. Фактически у каждого отдельного объекта оси разнятся, соответственно качественно определить необходимое вращение достаточно сложно. Если объектов, требующих взаимодействия много, логично создать таблицу, где для каждой модели указать определенный угол. Функция Attach поможет определить смещение, которое опять таки нужно занести в таблицу.