Jump to content

Взаимодействие клиентской части с серверной


Recommended Posts

Помогите с проблемой, уже весь лоб расшиб. И триггером пробовал, и как угодно - ни-че-го.

Сервер:

  
  
local  cab = createObject(xxx,0,0,0) 
local  auto = createVehicle(569,-1942.51733,167.78510,25.71094) 
  
  
attachElements(cab,auto,0,0,0) 
setVehicleLocked(auto,true) 
setTrainDerailable(auto, false) 
setTrainDirection(auto, true) 
createBlipAttachedTo(auto,0) 
  
function Gtrain () 
     SPEEDER = setTimer(SPEED,50,0) 
end 
--addEventHandler("onResourceStart", root, Gtrain) 
  
function SPEED () 
setTrainSpeed(auto, 0.25)  
end 
  
  

Клиент:

  
  
marker = createMarker( 1548, -1670, 12.6, "cylinder", 2, 255, 255, 255, 150 ) 
  
        local screenW, screenH = guiGetScreenSize() 
        window = guiCreateWindow((screenW - 447) / 2, (screenH - 412) / 2, 447, 412, "Info", false) 
        guiSetVisible(window, false) 
        guiWindowSetSizable(window, false) 
        memo = guiCreateMemo(23, 32, 399, 292, "(text)", false, window) 
        guiMemoSetReadOnly(memo, true) 
        button = guiCreateButton(23, 334, 400, 64, "Close", false, window)     
  
    function close() 
         if (source == button) then 
         guiSetVisible(window,false) 
         showCursor(false) 
         end 
    end 
    addEventHandler("onClientGUIClick", button, close) 
     
    function showgui (hitElement) 
         if getElementType(hitElement) == "player" and (hitElement == localPlayer) then 
                  if not guiGetVisible(window) then 
                       guiSetVisible(window, true) 
                       showCursor(true) 
                  end 
         end 
    end 
    addEventHandler("onClientMarkerHit", marker, showgui) 
  
    function showguil (leaveElement) 
         if getElementType(leaveElement) == "player" and (leaveElement == localPlayer) then 
                  if guiGetVisible(window) then 
                       guiSetVisible(window, false) 
                       showCursor(false) 
                  end 
         end 
    end 
    addEventHandler("onClientMarkerLeave", marker, showguil) 
  
  

В серверной части локальная переменная "cab" создает объект (модель объекта - ххх. Не обращайте внимания, это для упрощения). Далее этот объект "аттачится" к грузовому вагону. С этим все в порядке.

В клиентской части создается маркер, наступая в который вылазит окно. С этим тоже все в порядке.

Суть в том, что мне нужно, чтобы маркер, который создается в клиентской части тоже как-нибудь "аттачился" к поезду. Я уже что только не перепробовал, не знаю, что делать. Ответьте пожалуйста!

Более короткая и понятная формулировка:

Мне нужно создать транспорт и маркер в серверной части, прицепить маркер к созданному транспорту и сделать вывод окна на экран игроку, наступившему в маркер (это важно!)

Что именно у меня не получается:

Да, у меня получается создать в серверной части маркер и транспорт. Да, у меня получается прицепить маркер к созданному транспорту, но совершенно не получается сделать вывод окна только наступившему в маркер игроку, потому что getLocalPlayer работает только в клиентской части и окно выводится всем.

Пожалуйста, пожалуйста, помогите!

Link to comment
  • 3 weeks later...

Событие onMarkerHit на сервере, которое аналогичное клиентскому, имеет аргумент 'hitElement'. Т.е. легко отлавливается любой входящий элемент, игрок или транспорт например. Проверяешь как и на клиенте тип элемента и выполняешь нужные действия. Что касается твоей главной проблемы, а именно вывода окна только наступившему в маркер игроку. Здесь тебе понадобится эта функция:

triggerClientEvent 

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

Link to comment

Была такая проблема.Но можно использовать выше названный триггер.На сервере создаешь маркеры.На них евент входа,а внутри функции пишешь триггер.hitPlayer указываешь в функции( function NAME (hitPlayer)) и выводишь что вызов для hitPlayer.А в клиенте принимаешь триггер.Вроде бы все... В мта часто требуется подумать и решить сложнейшим путем,чем пытаться делать "легко",это редко получается

Обьясню все,что писал выше на примере:

использовал мой опыт,когда делал свой carshop

CarShop1 = createMarker(-2475.15942, 2303.83252, 3.98438, "cylinder", 2, 255, 0, 0) 
  
function TriggerClientMenu (thePlayer) 
triggerClientEvent ( thePlayer, "onMenuShow", thePlayer, thePlayer ) 
end 
addEventHandler( "onMarkerHit", CarShop1, TriggerClientMenu ) 

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