Erema93

Удаление всего состава поезда после окончания работы

Recommended Posts

Есть скрипт работы, но он удаляет только один вагон, а нужно сделать, чтобы он удалял весь состав поезда


local m1 = createMarker( 1743.3565673828,-1863.4692382813,13.575035095215 - 1.1, "cylinder", 1.5, 255, 0, 0, 170 )
vehs = {}
--createBlip ( 1720.6999511719, -1941.1999511719, 12.60000038147, 16)

function removePreviousVehicles(plr)
    for i,v in ipairs(getElementsByType("vehicle", resourceRoot)) do
        local sby = getElementData(v, "zrespilGracz")
        if sby and sby == plr and getPedOccupiedVehicle(plr) ~= v then
            destroyElement(v)
        end
    end
end

addEvent("givePlayerMoney", true) 
addEventHandler("givePlayerMoney", resourceRoot, function(ile) 
givePlayerMoney (client, ile)
end)

addEventHandler("onMarkerHit", m1, function(el, md)
    if getElementData(el, "zrespilGracz") then
    --outputChatBox("NSR-Pociągi w fazie Betav1.0", el)
        return
    end
    
    if not md or getElementType(el) ~= "player" or getPedOccupiedVehicle(el) then return end
          	local level = getElementData ( el, "player:level" )+1 or 0
if level >= 10 then
    local x,y,z = getElementPosition(el)
    local bus = createVehicle(538, 2811.3950195313, 1612.5759277344, 10.8203125, 180, 0.0, 0.4)
  trailer1 = createVehicle ( 449, x, y, z )    -- create the first trailer
		attachTrailerToVehicle ( bus, trailer1 )   -- attach them
    setElementData(bus, "zrespilGracz", el)
    setElementData(bus, "pojazd_paliwo", 50)
    setElementData(bus, "pojazd_przebieg", 100)
	
   
    
    setVehicleHandling(bus, "maxVelocity", 0.1)
    setVehicleHandling(bus, "engineAcceleration", 2 )
    setVehicleHandling(bus, "ABS", true )
    
    
    warpPedIntoVehicle(el, bus)
    removePreviousVehicles(el)
    triggerClientEvent(el, "StartPociag", resourceRoot, bus)

	  vehs[el] = bus
		else
        	outputChatBox ("Требуется уровень 10 или выше. У вас "..level.." увроень", el)
     	end
end)





addEvent("STOPP", true)
addEventHandler("STOPP", resourceRoot, function()
    local pojazd = getPedOccupiedVehicle(localPlayer)
    if pojazd then
        destroyElement(bus)
		destroyElement(trailer1)
    end
end)

addEvent("destroyVeh", true)
addEventHandler("destroyVeh", getRootElement(),
function()
     if vehs[source] then
          if isElement(vehs[source]) then destroyElement(vehs[source]) end
     end
end)

Из всего кода я понял, за удаление вагона (часть поездного состава) отвечают коды

 vehs[el] = bus

и

addEvent("destroyVeh", true)
addEventHandler("destroyVeh", getRootElement(),
function()
     if vehs[source] then
          if isElement(vehs[source]) then destroyElement(vehs[source]) end
     end
end)

Помогите с кодом.

Share this post


Link to post

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

Edited by nikitafloy
  • Confused 1

Share this post


Link to post
local attachedTrailers = bus:getData("attachedTrailers") or {};
bus:attachTrailer(trailer1);
table.insert(attachedTrailers, trailer1);
bus:setData("attachedTrailers", attachedTrailers, {}, false);

...

или сразу

bus:attachTrailer(trailer1);
bus:setData("attachedTrailers", attachedTrailers, {trailer1}, false);

...

на удаление

if vehs[source] and isElement(vehs[source]) then
  local attachedTrailers = bus:getData("attachedTrailers") or {};
  for _, trailer in ipairs(attachedTrailers) do
    if (isElement(trailer)) then
    	trailer:destroy();
    end
  end
  vehs[source]:destroy();
end

 

Ну как вариант, сварганить что-то подобное.

  • Like 1
  • Confused 1

Share this post


Link to post

Можно попробовать setElementParent. Поезд сделать родителем и при его удалении вместе с ним будут удаляться вагоны.

setElementParent ( trailer1, bus )

 

Share this post


Link to post
On 01.08.2018 at 20:38, Sarrum said:

Можно попробовать setElementParent. Поезд сделать родителем и при его удалении вместе с ним будут удаляться вагоны.


setElementParent ( trailer1, bus )

 

Интересно. Поможете с кодом правильно реализовать?

Share this post


Link to post

сразу после создания состава прописывай setElementData к каждому из заспавненных поездов, вагонов (обязательно со стороны клиента). Потом для удаления, циклом проходишь через все авто проверяя на наличие этой даты.

Share this post


Link to post
On 05.08.2018 at 18:20, Eema93 said:

Интересно. Поможете с кодом правильно реализовать?

В коде есть строка с 

attachTrailerToVehicle ( bus, trailer1 )

Ниже добавьте:

setElementParent ( trailer1, bus )

 

  • Like 1

Share this post


Link to post
15 hours ago, Sarrum said:

В коде есть строка с 


attachTrailerToVehicle ( bus, trailer1 )

Ниже добавьте:


setElementParent ( trailer1, bus )

 

Добавил. Не работает:  спавнится только головной вагон(локомотив).

 

Вот исходник из которого сделал скрипт с уровнями и вагоном: https://www.mta-resource.ru/load/resource/id/3759

Share this post


Link to post

Вопрос решил сам:

1) удалив строку vehs[el] = bus

2) изменив в коде setElementData на   

 setElementData(el,'bus',bus)
	setElementData(el,'trailer1',trailer1)
   


   3) изменив событие destroyVeh  в коде:  

destroyElement(getElementData(client,'bus'))
	destroyElement(getElementData(client,'trailer1'))

 

Share this post


Link to post

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.