rafull6 Posted February 4, 2012 Share Posted February 4, 2012 Всем привет! Помогите пожалуйста осуществить следующую идею. Нужно из 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
MX_Master Posted February 4, 2012 Share Posted February 4, 2012 фрилансеры помогут (: Link to comment
rafull6 Posted February 4, 2012 Author Share Posted February 4, 2012 Нашел клиентскую часть, которая отвечает за вызов окошка с автомобилями. 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
rafull6 Posted February 5, 2012 Author Share Posted February 5, 2012 С клиентской частью почти разобрался. Окно спавна вызываеться когда жмем 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
MX_Master Posted February 5, 2012 Share Posted February 5, 2012 Юзайте ББ код [LUА] маркер создай в клиенте и потом в клиенте же addEventHandler( "onClientMarkerHit", marker1, function ( player ) if player == localPlayer then toggle1window() end end ) Link to comment
rafull6 Posted February 5, 2012 Author Share Posted February 5, 2012 (edited) Столкнулся с такой проблемой: когда игрок заходит на маркер - окно открывается у всех. Подскажите пожалуйста как это исправить, что бы окошко открывалось только тому кто зашел на маркер? addEventHandler( "onClientMarkerHit", marker1, function ( playerSource, commandName, playerName) if playerName then local thePlayer = getPlayerFromName ( playerName ) if thePlayer then createWindow(wndCreateVehicle) showCursor (true) end ) не работает Edited February 5, 2012 by Guest Link to comment
Kenix Posted February 5, 2012 Share Posted February 5, 2012 RAFuLL,Юзай бб коды [xml][/xml] addEventHandler( "onClientMarkerHit", marker1, function ( player,dim ) if player == localPlayer then createWindow( wndCreateVehicle ) showCursor ( true ) end end ) Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now