Jump to content

Общий мини "HELP ME" топик по скриптингу


Recommended Posts

Такой вот вопрос:

Как лучше организовать гуи вход игрока на сервер? Т.е. из какого события trigger'ить клиент событие, чтобы оно отображалось всегда? Например, если я из onPlayerJoin сразу триггерю, то иногда ресурсы не успевают докачаться и гуи просто не отображается.

Link to comment

на Server добавьте событие:

addEvent( "onClientReady", true );

на Client добавьте событие:

addEvent( "showLoginScreen", true );

Далее:

Client:

onClientResourceStart -> triggerServerEvent "onClientReady"

Server:

onClientReady -> всякие нужные вам проверки (например бан, автологин и прочее) -> triggerClient "showLoginScreen"

Client:

В обработчике события showLoginScreen создаёте окно

Link to comment

Здравствуйте, подскажите как зафиксировать камеру возле игрока например под 90 градусов или 120 (это неважно). Суть в том, чтобы сделать как бы getCameraViewMode (id), только положение камеры будет задано мной и было фиксировано. Есть идеи? Заранее спасибо

Link to comment
Здравствуйте, подскажите как зафиксировать камеру возле игрока например под 90 градусов или 120 (это неважно). Суть в том, чтобы сделать как бы getCameraViewMode (id), только положение камеры будет задано мной и было фиксировано. Есть идеи? Заранее спасибо

https://wiki.multitheftauto.com/wiki/SetCameraMatrix

Link to comment

Спасибо, я находил эту функцию, но думал вдруг есть ещё какие :)

При команде работает т.е. я проезжаю несколько метров, активирую команду, положение камеры обновляется. Но надо же, чтобы постоянно обновлялось и при использовании setTimer выдаёт ошибку (... perform arithmetic on local 'x') в получении позиции элемента.

function spawnScreen (player) 
local x, y, z = getElementPosition ( player ) 
local lx = x-18 
local ly = y+3 
local lz = z+6 
local lxl = x-5 
local lyl = y-1 
local lzl = z+3 
setCameraMatrix (player,lx,ly,lz,lxl,lyl,lzl) 
end 
setTimer ( spawnScreen, 500, 0) 
addCommandHandler( "cam", spawnScreen ) 

Link to comment

Вот например так можно сделать для локального игрока:

local camState 
  
addCommandHandler ( "cam", 
    function ( ) 
        if camState then 
            removeEventHandler ( "onClientPreRender", root, camUpdate ) 
            camState = nil 
             
            return 
        end 
         
        addEventHandler ( "onClientPreRender", root, camUpdate, false ) 
        camState = true 
    end 
) 
  
function camUpdate ( ) 
    local x, y, z = getElementPosition ( localPlayer ) 
     
    setCameraMatrix ( x, y, z + 10, x, y, z ) -- Вид сверху 
end 

Link to comment

Всем доброго времени суток :)

Суть моего скрипта-иконки оружия нету, появляется лишь при смене оружия, а потом, по истечению 5 секунд она пропадает.

вот собственно он

function onstart() 
    showPlayerHudComponent ( "ammo", false ) 
    showPlayerHudComponent ( "weapon", false ) 
end 
  
addEventHandler ( "onClientResourceStart", getRootElement ( ), onstart ) 
  
function showHud() 
    showPlayerHudComponent ( "ammo", true ) 
    showPlayerHudComponent ( "weapon", true ) 
    setTimer ( hideHud, 5000, 1 ) 
end 
  
addEventHandler ( "onClientPlayerWeaponSwitch", getRootElement(), showHud ) 
  
function hideHud() 
    showPlayerHudComponent ( "ammo", false ) 
    showPlayerHudComponent ( "weapon", false ) 
end 

Все работает, но, фишка в том, что таймер один раз запустился, и сколько бы раз я не менял оружие, по истечению 5 секунд с момента первого проворота ролика мыши-иконка пропадает. Ну потом все нормально, но должно быть так: верчу колесико, кручу, и уже потом, когда я остановился, таймер включается.

В голову приходит только killTimer, но я не вижу как его сюда впихнуть... :|

Link to comment

Если я правильно понял, тебе нужно удалять действующий таймер перед созданием нового:

local hudTimer 
  
function onstart() 
    showPlayerHudComponent ( "ammo", false ) 
    showPlayerHudComponent ( "weapon", false ) 
end  
addEventHandler ( "onClientResourceStart", getRootElement ( ), onstart ) 
  
function showHud() 
    showPlayerHudComponent ( "ammo", true ) 
    showPlayerHudComponent ( "weapon", true ) 
     
    if hudTimer then 
        killTimer ( hudTimer ) 
    end 
     
    hudTimer = setTimer ( hideHud, 5000, 1 ) 
end  
addEventHandler ( "onClientPlayerWeaponSwitch", getRootElement(), showHud ) 
  
function hideHud() 
    showPlayerHudComponent ( "ammo", false ) 
    showPlayerHudComponent ( "weapon", false ) 
    hudTimer = nil 
end 

Link to comment

Такая проблема:

Нужно создать произвольное событие, которое бы вызывалось везде, где надо, через addEventHandler . В моем случае, если нету addEvent, то addEventHandler не дает никаких результатов.

Что-то вроде этого (один и тот же ресурс):

Файл test1c.lua (клиент):

  
... 
triggerServerEvent("test", getLocalPlayer()) 
... 
  

Файл test1s.lua (сервер):

  
addEventHandler("test", true) 
addEventHandler("test", getRootElement(), 
    function() 
        outputChatBox("Ололо я вызывался") 
    end 
) 
  

А вот если создать файл test2s.lua (сервер):

  
addEventHandler("test", getRootElement(), 
    function() 
        outputChatBox("Ололо я вызывался опять") 
    end 
) 
  

Второй раз событие не вызовется, если не добавить addEventHandler("test", true) .

Возможно ли как-то решить данную проблему? Или для таких вещей придется писать свой addEventHandler ?

Link to comment

Условием использования кастомных событий является их регистрация с помощью функции AddEvent. События регистрируются перед их вызовом. Твой код должен выглядеть вот так:

addEvent("test", true) 
addEventHandler("test", getRootElement(), 
    function() 
        outputChatBox("Ололо я вызывался") 
    end 
) 

Link to comment
Условием использования кастомных событий является их регистрация с помощью функции AddEvent. События регистрируются перед их вызовом. Твой код должен выглядеть вот так:
addEvent("test", true) 
addEventHandler("test", getRootElement(), 
    function() 
        outputChatBox("Ололо я вызывался") 
    end 
) 

В таком случае, куда удобнее написать свою функцию:

function addEventHandlerEx(eventName, attachedTo, handlerFunction) 
    addEvent(eventName, true) 
    addEventHandler(eventName, attachedTo, handlerFunction) 
end 

И не заморачиваться каждый раз

Link to comment

Регистрация события производится единожды при запуске ресурса(или по мере необходимости). Крепление события же в ресурсе происходит как правило в нескольких местах. Это значит функция объединяющая их лишена практического смысла.

Link to comment
  • 3 weeks later...

Будьте более точны, не понятно, что подразумевается под "картинкой".

Если речь о CEGUI элементах - смотрите https://wiki.multitheftauto.com/wiki/OnClientMouseEnter и https://wiki.multitheftauto.com/wiki/OnClientMouseLeave

Если речь о dx-функциях - только самому считать координаты мышки и картинки

Link to comment

Понадобилось мне тут передать mysql handler из одного ресурса в другой. Но при использовании такого кода в принимающем ресурсе:

local hand = exports.players:askMysqlHandler () 

А в посылающем:

function askMysqlHandler () 
    return database -- это мой mysql handler 
end 

Оно возвращает строку 'askMysqlHandler'. Если database в отправителе заменить на 1, то он его нормально передает. Отсюда вопрос - mysql handler не передается между ресурсами? Как тогда быть? Можно ли одновременно иметь два подключения к mysql базе данных, но из разных ресурсов?

Link to comment

Ты используешь модуль или стандартные функции?

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

Можно ( а вообще лучше самому проверять прежде чем спрашивать ), но если эти 2 подключения к одной и тойже базе, то это бесмыслица.

Link to comment
а вообще лучше самому проверять прежде чем спрашивать

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

Я использую https://wiki.multitheftauto.com/wiki/Mysql

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