Jump to content

Выковырять из freeroam спавн автомобилей


Recommended Posts

Всем привет! Помогите пожалуйста осуществить следующую идею. Нужно из freeroam мода достать функцию спавна автомобилей, и сделать так, что бы окошко спавна автомобилей (то которое мы видим когда нажимаем F1->Create) появлялось при заходе на маркер.

Вот мой код, который напрочь отказывается работать:

Клиент. часть:

CONTROL_MARGIN_RIGHT = 5 
LINE_MARGIN = 5 
LINE_HEIGHT = 16 
  
g_Root = getRootElement() 
g_ResRoot = getResourceRootElement(getThisResource()) 
g_Me = getLocalPlayer() 
server = createServerCallInterface() 
guiSetInputMode("no_binds_when_editing") 
  
--------------------------- 
-- Create vehicle window 
--------------------------- 
function createSelectedVehicle(leaf) 
    if not leaf then 
        leaf = getSelectedGridListLeaf(wndCreateVehicle, 'vehicles') 
        if not leaf then 
            return 
        end 
    end 
    server.giveMeVehicles(leaf.id) 
end 
  
wndCreateVehicle = { 
    'wnd', 
    text = 'Create vehicle', 
    width = 300, 
    controls = { 
        { 
            'lst', 
            id='vehicles', 
            width=280, 
            height=340, 
            columns={ 
                {text='Vehicle', attr='name'} 
            }, 
            rows={xml='vehicles.xml', attrs={'id', 'name'}}, 
            onitemdoubleclick=createSelectedVehicle 
        }, 
        {'btn', id='create', onclick=createSelectedVehicle}, 
        {'btn', id='close', closeswindow=true} 
    } 
} 
  
function createVehicleCommand(cmd, ...) 
    local vehID 
    local vehiclesToCreate = {} 
    local args = { ... } 
    for i,v in ipairs(args) do 
        vehID = tonumber(v) 
        if not vehID then 
            vehID = getVehicleModelFromName(v) 
        end 
        if vehID then 
            table.insert(vehiclesToCreate, math.floor(vehID)) 
        end 
    end 
    server.giveMeVehicles(vehiclesToCreate) 
end 
addCommandHandler('createvehicle', createVehicleCommand) 
addCommandHandler('cv', createVehicleCommand) 
  
  
function showGUI () 
guiSetVisible (wndCreateVehicle,true) 
showCursor (true) 
end 
addEvent ("showGUI",true) 
addEventHandler ("showGUI",getRootElement(),showGUI) 

Сервер. часть:

marker1 = createMarker( 1927.6690673828, 2057.2536621094, 9.671875, "cylinder", 3, 255, 0, 0, 100 ) 
  
g_Root = getRootElement() 
g_ResRoot = getResourceRootElement(getThisResource()) 
g_PlayerData = {} 
g_VehicleData = {} 
local chatTime = {} 
local lastChatMessage = {} 
  
g_ArmedVehicles = { 
    [425] = true, 
    [447] = true, 
    [520] = true, 
    [430] = true, 
    [464] = true, 
    [432] = true 
} 
g_Trailers = { 
    [606] = true, 
    [607] = true, 
    [610] = true, 
    [590] = true, 
    [569] = true, 
    [611] = true, 
    [584] = true, 
    [608] = true, 
    [435] = true, 
    [450] = true, 
    [591] = true 
} 
  
g_RPCFunctions = { 
    giveMeVehicles = { option = 'createvehicle', descr = 'Creating vehicles' } 
} 
  
  
function showGUI (jugador) 
if (source == marker1) then 
triggerClientEvent (jugador,"showGUI",getRootElement(),jugador) 
end 
end 
addEventHandler ("onMarkerHit",getRootElement(),showGUI) 
  
function giveMeVehicles(vehicles) 
    if type(vehicles) == 'number' then 
        vehicles = { vehicles } 
    end 
  
    local px, py, pz, prot 
    local radius = 3 
    local playerVehicle = getPedOccupiedVehicle(source) 
    if playerVehicle and isElement(playerVehicle) then 
        px, py, pz = getElementPosition(playerVehicle) 
        prot, prot, prot = getVehicleRotation(playerVehicle) 
    else 
        px, py, pz = getElementPosition(source) 
        prot = getPedRotation(source) 
    end 
    local offsetRot = math.rad(prot) 
    local vx = px + radius * math.cos(offsetRot) 
    local vy = py + radius * math.sin(offsetRot) 
    local vz = pz + 2 
    local vrot = prot 
  
    local vehicleList = g_PlayerData[source].vehicles 
    local vehicle 
    if ( not vehicles ) then return end 
    for i,vehID in ipairs(vehicles) do 
        if vehID < 400 or vehID > 611 then 
            errMsg(vehID ..' is incorrect vehicle model', source) 
        elseif not table.find(getOption('vehicles.disallowed'), vehID) then 
            if #vehicleList >= getOption('vehicles.maxperplayer') then 
                unloadVehicle(vehicleList[1]) 
            end 
            vehicle = createVehicle(vehID, vx, vy, vz, 0, 0, vrot) 
            if (not isElement(vehicle)) then return end 
            setElementInterior(vehicle, getElementInterior(source)) 
            setElementDimension(vehicle, getElementDimension(source)) 
            table.insert(vehicleList, vehicle) 
            g_VehicleData[vehicle] = { creator = source, timers = {} } 
            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 
            vx = vx + 4 
            vz = vz + 4 
        else 
            errMsg(getVehicleNameFromModel(vehID):gsub('y$', 'ie') .. 's are not allowed', source) 
        end 
    end 

Проблемма в том что я не могу заставить появиться окно при заходе на маркер. Возможно дело в

function showGUI (jugador) 
if (source == marker1) then 
triggerClientEvent (jugador,"showGUI",getRootElement(),jugador) 
end 
end 
addEventHandler ("onMarkerHit",getRootElement(),showGUI) 

(За основу брал паблик скрипт покупки оружия, хотел изменить окно оружия на окно выбора машин)

Подскажите как заставить скрипт работать.

P.S. В lua я совсем недавно, по этому, очень прошу отнестись с пониманием :)

P.S.S Ну полнейший новичек.

Link to comment

Нашел клиентскую часть, которая отвечает за вызов окошка с автомобилями.

addEventHandler('onClientResourceStart', g_ResRoot, 
    function() 
        bindKey('l', 'down', toggleCARWindow) 
        createWindow(wndCreateVehicle) 
        hideAllWindows() 
    end 
) 
  
  
function toggleCARWindow() 
    if isWindowOpen(wndCreateVehicle) then 
        showCursor(false) 
        hideAllWindows() 
    else 
        showCursor(true) 
        showAllWindows() 
    end 
end 

Подскажите что нужно дописать в серверную часть что бы при заходе на маркер открывалось это окно?

Что нужно сделать с функцией toggleCARWindow!?

Link to comment

С клиентской частью почти разобрался. Окно спавна вызываеться когда жмем L.

CONTROL_MARGIN_RIGHT = 5 
LINE_MARGIN = 5 
LINE_HEIGHT = 16 
  
g_Root = getRootElement() 
g_ResRoot = getResourceRootElement(getThisResource()) 
g_Me = getLocalPlayer() 
server = createServerCallInterface() 
  
--------------------------- 
-- Create vehicle window 
--------------------------- 
function createSelectedVehicle(leaf) 
    if not leaf then 
        leaf = getSelectedGridListLeaf(wndCreateVehicle, 'vehicles') 
        if not leaf then 
            return 
        end 
    end 
    server.giveMeVehicles(leaf.id) 
end 
  
wndCreateVehicle = { 
    'wnd', 
    text = 'Create vehicle', 
    width = 300, 
    controls = { 
        { 
            'lst', 
            id='vehicles', 
            width=280, 
            height=340, 
            columns={ 
                {text='Vehicle', attr='name'} 
            }, 
            rows={xml='vehicles.xml', attrs={'id', 'name'}}, 
            onitemdoubleclick=createSelectedVehicle 
        }, 
        {'btn', id='create', onclick=createSelectedVehicle}, 
        {'btn', id='close', closeswindow=true} 
    } 
} 
  
  
function toggle1window() 
    if isWindowOpen(wndCreateVehicle) then 
        showCursor(false) 
        hideAllWindows() 
    else 
        showCursor(true) 
        showAllWindows() 
    end 
end 
addEventHandler( "onMarkerHit", getRootElement(), toggle1window ) 
  
  
addEventHandler('onClientResourceStart', g_ResRoot, 
    function() 
        bindKey('l', 'down', toggle1window) 
        createWindow(wndCreateVehicle) 
        hideAllWindows() 
    end 
) 
  
  

ПОДСКАЖИТЕ ПОЖАЛУЙСТА СЕРВЕРНУЮ ЧАСТЬ СКРИПТА ЧТО БЫ ОКНО ОТКРЫВАЛОСЬ НЕ ПРИ НАЖАТИИ L, А ПРИ ЗАХОДЕ НА МАРКЕР.

Серверная часть. При заходе на маркер курсор активируется но окно не появляется ):

function showGUI (jugador) 
if (source == marker1) then 
triggerClientEvent (jugador,"showGUI",getRootElement(),jugador) 
end 
end 
addEventHandler ("onMarkerHit",getRootElement(),showGUI) 

-----------------------------

Добавлено:

Есть код:

function toggle1window() 
    if isWindowOpen(wndCreateVehicle) then 
        showCursor(false) 
        hideAllWindows() 
    else 
        showCursor(true) 
        showAllWindows() 
    end 
end 
addEventHandler( "onMarkerHit", getRootElement(), toggle1window ) 
  
  
addEventHandler('onClientResourceStart', g_ResRoot, 
    function() 
        bindKey('l', 'down', toggle1window) 
        createWindow(wndCreateVehicle) 
        hideAllWindows() 
    end 
) 
  
function showGUI () 
guiSetVisible (wndCreateVehicle,true) 
showCursor (true) 
end 
addEvent ("showGUI",true) 
addEventHandler ("showGUI",getRootElement(),showGUI) 

Можно ли как то функцию toggle1window прописать в самую нижнюю функцию, то есть что бы вместо guiSetVisible (wndCreateVehicle,true) вызвалась функция toggle1window??? КАК ТАКОЕ СДЕЛАТЬ?

Link to comment

Столкнулся с такой проблемой: когда игрок заходит на маркер - окно открывается у всех. Подскажите пожалуйста как это исправить, что бы окошко открывалось только тому кто зашел на маркер?

addEventHandler( "onClientMarkerHit", marker1, 
function ( playerSource, commandName, playerName) 
 if playerName then 
local thePlayer = getPlayerFromName ( playerName ) 
if thePlayer then 
createWindow(wndCreateVehicle) 
showCursor (true) 
end 
) 

не работает

Edited by Guest
Link to comment

RAFuLL,Юзай бб коды

[xml][/xml]
 

addEventHandler( "onClientMarkerHit", marker1, 
    function ( player,dim  ) 
        if player == localPlayer then 
            createWindow( wndCreateVehicle ) 
            showCursor ( true ) 
        end  
    end 
) 

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...