Jump to content

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


Recommended Posts

возникла внезапная проблема, хочется решение без костылей.
сидя в транспорте закрываю машину через
 

setVehicleLocked(veh, true)

пытаюсь сесть в неё снаружи, но кроме активного подёргивания ручками за дверь более ничего не происходит.
функция

onPlayerVehicleEnter

срабатывает исключительно посадке задницы педа в транспорт.



проверка такого вида выдаёт ничего:

function vehicleLockState(veh, seat, jacked)
	outputChatBox(getPlayerName(source))
end
addEventHandler("onPlayerVehicleEnter", root, vehicleLockState)

собственно, как побороть проблему без задействования колшейпов?

Edited by Easterdie
Link to comment

@Easterdie используй другое событие - https://wiki.multitheftauto.com/wiki/OnVehicleStartEnter

@K1parik проблема может быть не в сервере, а в хостинге на котором запущен php скрипт. На хостинге может быть запрещено использовать fsockopen или также закрыты порты.

  • Like 1
Link to comment
5 hours ago, LoveFist said:

проблема может быть не в сервере, а в хостинге на котором запущен php скрипт. На хостинге может быть запрещено использовать fsockopen или также закрыты порты.

а какие порты нужны?

Link to comment
11 minutes ago, K1parik said:

а какие порты нужны?

Порт, через который скрипт подключается к серверу. Насколько я знаю, который указавается в <httpport> (по дефолту 22005)

Большая часть хостингов закрывает порты, но при обращении в тп, обычно открывают необходимый порт

  • Like 1
Link to comment
4 minutes ago, Misha_Konsta said:

Порт, через который скрипт подключается к серверу. Насколько я знаю, который указавается в <httpport> (по дефолту 22005)

Большая часть хостингов закрывает порты, но при обращении в тп, обычно открывают необходимый порт

нужно открыть порт на сайте такой же к которому нужно подключиться на сервере? спасибо за информацию

Link to comment

 

1 minute ago, K1parik said:

нужно открыть порт на сайте такой же к которому нужно подключиться на сервере? спасибо за информацию

Да, то есть скрипт пытается подключиться по порту http (сервера), а хостинг не дает этого сделать, потому что закрыл практически все порты в целях безопасности, по запросу порт откроют без проблем. Помню забавный случай, когда я только тестировал работу движка мониторинга, было очень давно, он не мог получать информацию о серверах, так как хостинг по умолчанию закрыл все порты. Я деликатно обратился в тех.поддержку, с просьбой открыть порты. Они меня спрашивают - "А какие порты вам нужно открыть?", а я им - "Все", они чуть в обморок не упали 

Link to comment
  • 2 weeks later...

Для получения информации от сервера используется UDP ASE порт, по стандарту он игровой+123, то есть если игровой 22003, то ASE порт 22126. Спецификацию ASE порта можно найти тут: https://github.com/multitheftauto/mtasa-blue/blob/master/Server/mods/deathmatch/logic/ASE.cpp#L246-L341

Edited by N1kS
  • Like 2
Link to comment
  • 1 month later...

Как сделать проверку на ID транспорта при въезде на маркер? Т.е. например, чтобы второй маркер создавался только, если въехать на первый маркер на транспорте с определённым ID (В моём случае 577).

Link to comment

Ребята, нужна помощь. Задача следующая: нужно записать логин игрока и через 30 дней эту запись автоматически удалить. Как это лучше реализовать? Записей таких будет не много так, что в принципе можно использовать xml файл наверно?

Link to comment
  • Other Languages Moderators
On 14.12.2016 at 11:13 PM, K1parik said:

там пару записей в день например. проблема как лучше сделать это удаление через 30 дней

https://www.sitepoint.com/how-to-create-mysql-events/ Например так. Попробуй поискать реализации в SQLite.

  • Like 1
Link to comment

Есть у меня один постоянный шейдер, который я применяю к элементам при определенных обстоятельствах и при входе элемента в стрим. Если элемент выходит из стрима, то обязательно ли отменять шейдер функцией engineRemoveShaderFromWorldTexture?

Link to comment
  • 4 weeks later...

Привет, уважаемые. У меня с математикой все плохо и нужна ваша помощь. Если не сложно, напишите функцию которая будет высчитывать угол между направлением автомобиля и направлением его движения (как на картинке)

lmRaq.jpg

Edited by K1parik
Link to comment

@K1parik, дык из большего градуса вычесть меньший))

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

Это че дрифт что-ли?

Edited by fabervox
Link to comment
local vRotation = vehicle:getRotation( )
local vVelocity = vehicle:getVelocity( )
--local speed = ( vVelocity.x^2 + vVelocity.y^2 + vVelocity.z^2 ) ^ 0.5
local rZ = math.atan2( vVelocity.x, vVelocity.y )
rZ = rZ < 0 and -rZ or 2 * Pi - rZ
local vRotZ = math.rad( vRotation.z )
local yourAngle = math.abs( rZ - vRotZ )

-- На этом можно было бы остановиться, но далее был код, который неизвестно за что отвечает
if yourAngle > Pi -0.1 then
	if rZ > Pi and vRotZ > 0 and vRotZ < Pi then
		yourAngle = Pi * 2 - rZ + vRotZ;
	elseif rZ < Pi and rZ > 0 and vRotZ > Pi and vRotZ < Pi * 2 then
		yourAngle = ( Pi * 2 - vRotZ ) + rZ;
	end
end

Типо того, но скорее всего тебе math.abs не понадобится.

Link to comment

Выдаёт ошибку, что второй аргумент (кнопки) "got nil". Кнопка естественно не работает. Работающие решение проблемы так и не нашёл.

addEventHandler("onClientGUIClick", button[1], function()
    local log, pass = guiGetText(edit[1]), guiGetText(edit[2])
    if(log == "") or (pass == "") then
        outputChatBox("Не заполнено одно из полей!")
    else
        triggerServerEvent("ClientLogin", getLocalPlayer(), log, pass)
    end
end, false)

Сам GUI:

local window = {}
local tabpanel = {}
local tab = {}
local edit = {}
local label = {}
local button = {}

addEventHandler("onClientResourceStart", getResourceRootElement(),
    function()
        window[1] = guiCreateWindow(0.27, 0.29, 0.45, 0.41, "Авторизация", true)
        guiWindowSetSizable(window[1], false)

        tabpanel[1] = guiCreateTabPanel(0.02, 0.04, 0.97, 0.93, true, window[1])

        tab[1] = guiCreateTab("Авторизация", tabpanel[1])

        edit[1] = guiCreateEdit(173, 92, 209, 20, "", false, tab[1])
        edit[2] = guiCreateEdit(174, 138, 208, 20, "", false, tab[1])
        label[1] = guiCreateLabel(183, 11, 189, 32, "Введите данные своего аккаунта", false, tab[1])
        label[2] = guiCreateLabel(79, 96, 84, 16, "Имя_Фамилия:", false, tab[1])
        label[3] = guiCreateLabel(79, 140, 84, 18, "Пароль:", false, tab[1])
        button[1] = guiCreateButton(205, 197, 152, 42, "Войти!", false, tab[1])

        tab[2] = guiCreateTab("Регистрация", tabpanel[1])    
    end
)

 

Edited by Taka
Link to comment

Наверняка, когда вы добавляете обработчкик событий, кнопки еще не существует. Уберите 8-9 и 25-26 строки, или сделайте как ниже.
 

Spoiler

local window = {}
local tabpanel = {}
local tab = {}
local edit = {}
local label = {}
local button = {}

addEventHandler("onClientResourceStart", getResourceRootElement(),
    function()
        window[1] = guiCreateWindow(0.27, 0.29, 0.45, 0.41, "Авторизация", true)
        guiWindowSetSizable(window[1], false)

        tabpanel[1] = guiCreateTabPanel(0.02, 0.04, 0.97, 0.93, true, window[1])

        tab[1] = guiCreateTab("Авторизация", tabpanel[1])

        edit[1] = guiCreateEdit(173, 92, 209, 20, "", false, tab[1])
        edit[2] = guiCreateEdit(174, 138, 208, 20, "", false, tab[1])
        label[1] = guiCreateLabel(183, 11, 189, 32, "Введите данные своего аккаунта", false, tab[1])
        label[2] = guiCreateLabel(79, 96, 84, 16, "Имя_Фамилия:", false, tab[1])
        label[3] = guiCreateLabel(79, 140, 84, 18, "Пароль:", false, tab[1])
        button[1] = guiCreateButton(205, 197, 152, 42, "Войти!", false, tab[1])
    
        addEventHandler("onClientGUIClick", button[1], function()
            local log, pass = guiGetText(edit[1]), guiGetText(edit[2])
            if(log == "") or (pass == "") then
                outputChatBox("Не заполнено одно из полей!")
            else
                triggerServerEvent("ClientLogin", getLocalPlayer(), log, pass)
            end
        end, false)

        tab[2] = guiCreateTab("Регистрация", tabpanel[1])    
    end
)

 

 

Edited by TheNormalnij
  • Like 1
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...