Jump to content

[ПОМОЩЬ] /attach Клеим объекты к транспорту


Recommended Posts

Всем привет. Ребята подскажите пожалуйста следующий скрипт. Смысл его заключается в том что при использовании команды /attach [id] [x] [y] [z] [rx] [ry] [rz] перед автомобилем (или другим транспортом). Например: /attach 1225 0 10 0 0 0 0 приклеит к транспорту взрывоопасную бочку как на скриншоте:

32063347.png

Но смысл в том что бы можно было клеить любые объекты используя /attach [Объект] [x] [у] [z] [rx] [ry] [rz]

Где найти такой скрипт? (Помогите пожалуйста, я в LUA на самых начальных ступеньках и если для вас это элементарно, то для меня это целое достижение :) )

Link to comment

Например так (серверный скрипт):

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 ) 

Link to comment
Например так (серверный скрипт):
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 ) 

не работает((((

Link to comment

Скрипт работает отлично. Я попытался добавить команду на удаление (взял с другого подобного ресурса) всех приклеенных объектов, но ничего не вышло, скрипт перестал работать.

Вот что у меня получилось:

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 ( "You can't use this  ID", player ) 
   end 
  else 
   outputChatBox ( "Command: /attach [model] [Xoffset] [Yoffset] [Zoffset] [RXoffset] [RYoffset] [RZoffset]", player ) 
  end 
 else 
  outputChatBox ( "You must to be in a car!", player ) 
 end 
end ) 
  
addCommandHandler ( "del", 
function ( thePlayer, commandName ) 
    if ( isPedInVehicle ( thePlayer )) then 
    local vehicle = getPedOccupiedVehicle ( thePlayer ) 
    local allAttachedElements = getAttachedElements ( vehicle ) 
    outputChatBox ( "All elements which was attached to you was sucefully destroyed!", thePlayer, 255,200,0 ) 
    for i,v in pairs ( allAttachedElements ) do 
    destroyElement ( v ) 
    end 
end ) 

P.S. а как сделать что бы при разрушении автомобиля с него пропадали все приклеенные объекты?

Link to comment
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 ) 

Link to comment
  • 3 weeks later...

TEDERIs, а как сделать если написать /attach name id и объект прикрепится к игроку, но если его авто взорвётся, или он умрёт(допустим в рейс моде), то объект пропадёт? И если написать /attach killer 0, то объект пропадёт.

Link to comment
TEDERIs, а как сделать если написать /attach name id и объект прикрепится к игроку, но если его авто взорвётся, или он умрёт(допустим в рейс моде), то объект пропадёт? И если написать /attach killer 0, то объект пропадёт.
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 ) 

Например так можно решить этот вопрос, если конечно я правильно тебя понял.

Link to comment

Ты не понял меня, я имел ввиду если написать /attach player_name id то объект прикрепится к автомобилю игрока.

Пример: /attach TEDERIs 3458, то объект 3458 прикрепляется к твоему автомобилю.

А если написать /attach TEDERIs 0, то у тебя убирается этот объект.

И что бы объекты убирались тоже, когда ты упал в воду и умер(это в рейс моде) или твой автомобиль взорвался.

Link to comment

Можно вот так попробовать:

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

При смерти игрока через событие невозможно найти авто, нужно дописывать скрипт. Но и без того, для чистки от объектов вполне достаточно события уничтожения автомобиля.

Link to comment

При смерти игрока через событие невозможно найти авто, нужно дописывать скрипт. Но и без того, для чистки от объектов вполне достаточно события уничтожения автомобиля.

Но в рейс моде обязательно нужно что бы при смерти игрока объект пропадал, а то этот объект будет с ним постоянно, но и за это спасибо.

Link to comment

Если я не ошибаюсь, в рэйс моде при смерти игрока авто через некоторое время удаляется. Следовательно, при удалении авто объекты будут также уничтожены. Если хочешь, можешь завести таблицу и записывать в нее последние авто игроков. Потом через событие onPlayerWasted с помощью этой таблицы найти авто и удалить с него объекты.

Link to comment

TEDERIs всё работает, в рейс моде после рестарта карты объект удаляется, спасибо тебе, но вот есть проблемка, больно долго вводить /attach PLAYER_NAME MODEL OFFSET_X OFFSET_Y OFFSET_Z OFFSET_RX OFFSET_RY OFFSET_RZ, можно как нибудь сократить до: /attach PLAYER_NAME MODEL ? может можно как нибудь указать смещение в скрипте 0 5 0 0 0 0 ?

Link to comment

Конечно можно

addCommandHandler ( "attach", 
function ( player, command, playername, model ) 
 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 
      local x, y, z = getElementPosition ( targetVehicle ) 
      local object = createObject ( model, x, y + 5, z ) 
      if object then 
       attachElements ( object, targetVehicle, 0, 5, 0, 0, 0, 0 ) 
      else 
       outputChatBox ( "Вы не можете создать объект с такой моделью", 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 ) 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...