Sign in to follow this  
GibraltarLabrador

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

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 работает только в клиентской части и окно выводится всем.

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

Share this post


Link to post

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

triggerClientEvent 

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

Share this post


Link to post

Была такая проблема.Но можно использовать выше названный триггер.На сервере создаешь маркеры.На них евент входа,а внутри функции пишешь триггер.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 ) 

Share this post


Link to post

Парни, всем спасибо за помощь, но эта помощь очень долго шла (~14 дней). И мне давно помогли в англоязычной ветке.

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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.