Jump to content

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


Recommended Posts

car = createVehicle ( 562, 1591.596680, -2495.323242, 18.098244 )  
sounds = "1.mp3" 
  
local x,y,z = getElementPosition( car ) 
carSounds = playSound3D ( sounds, x, y, z , true ) 
attachElements ( carSounds, car, 0, 0, 5 ) 
  

На клиентской стороне работает, а на серверной стороне выводит ошибку

ERROR: test\test.lua:5: attempt to call global 'playSound3D' (a nil value)

Link to comment

используй это только на клиенте, этот звук услышат и на сервере

не забудь про

setSoundMaxDistance ( carSounds, 60 ) 

, чтобы слышно было только с определённого расстояния

Link to comment
используй это только на клиенте, этот звук услышат и на сервере

не забудь про

setSoundMaxDistance ( carSounds, 60 ) 

, чтобы слышно было только с определённого расстояния

С каких это пор так стало? Никогда звук не синхронизировался. (то что projectile созданные на клиентской стороне синхронизируются - это даже странно).

Link to comment

playSound3D ( я использую для сигнала (horn)) , он слышен для всех игроков с определённого расстояния с помощью

setSoundMaxDistance

без сервер-сайд

Link to comment
playSound3D ( я использую для сигнала (horn)) , он слышен для всех игроков с определённого расстояния с помощью

setSoundMaxDistance

без сервер-сайд

Поддерживаю.Делаю тоже самое.Но проблемка одна-если играет песня,и машина подъезжает к игроку - игроку,который около машины слышится песня сначала,а тому который В машине - уже середина.(Постарался всё объяснить,но чтобы это понять - надо протестить)

Link to comment
  • Other Languages Moderators
playSound3D ( я использую для сигнала (horn)) , он слышен для всех игроков с определённого расстояния с помощью

setSoundMaxDistance

без сервер-сайд

Что за волшебство?! Такого быть не может.

Link to comment
playSound3D ( я использую для сигнала (horn)) , он слышен для всех игроков с определённого расстояния с помощью

setSoundMaxDistance

без сервер-сайд

Что за волшебство?! Такого быть не может.

Сначала проверb:D

Потом говори.

Бесит только одно меня - когда играешь музыку с сайта(К примеру)

Рано или поздно она ломается(МТА зависает и крашится),

а это - серъезная помеха для разработки моего Магнитофона в машинах:(

Link to comment
playSound3D ( я использую для сигнала (horn)) , он слышен для всех игроков с определённого расстояния с помощью

setSoundMaxDistance

без сервер-сайд

Что за волшебство?! Такого быть не может.

зайди на сервер и посмотри

забыл сказать о евенте

onClientElementDataChange 

,мне нужна эта дата для определения кнопок :D (не суть) потом уже воиспроизвести этот звук через

playSound3D 

это

playSound 

слышат только локальные игроки (тоесть только для тебя)

да и

https://wiki.multitheftauto.com/wiki/PlaySound3D

на грув стрит будет играть музыка (пример 2)

играть будет для всех

Edited by Guest
Link to comment
playSound3D ( я использую для сигнала (horn)) , он слышен для всех игроков с определённого расстояния с помощью

setSoundMaxDistance

без сервер-сайд

Что за волшебство?! Такого быть не может.

Сначала проверb:D

Потом говори.

Бесит только одно меня - когда играешь музыку с сайта(К примеру)

Рано или поздно она ломается(МТА зависает и крашится),

а это - серъезная помеха для разработки моего Магнитофона в машинах:(

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

Link to comment

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

attempt to concatenate local 'thePlayer' (a userdata value) 

function log ( theMessage, thePlayer ) 
    local time = getRealTime() 
    time.month = time.month + 1 
    time.year = time.year + 1900 
    local logFile = '/log/'..time.monthday..'.'..time.month..'.'..time.year 
    local logMessage = '['..time.hour..time.minute..time.second..'] '..thePlayer..': '..theMessage 
    if fileExists( logFile ) then 
        fileWrite( fileOpen( logFile ), logMessage ) 
    else 
        fileWrite( fileCreate( logFile ), logMessage ) 
    end 
end 
addEventHandler( 'onChatMessage', root, log ) 

Также вопрос: как можно определить что этот чат написан через Y или U(Team Chat)?

Link to comment
такая проблема: решил сделать ресурс, который будет записывать весь чат в файл, но появилась проблема. При отправке текста дебаг выдает ошибку

attempt to concatenate local 'thePlayer' (a userdata value) 

function log ( theMessage, thePlayer ) 
    local time = getRealTime() 
    time.month = time.month + 1 
    time.year = time.year + 1900 
    local logFile = '/log/'..time.monthday..'.'..time.month..'.'..time.year 
    local logMessage = '['..time.hour..time.minute..time.second..'] '..thePlayer..': '..theMessage 
    if fileExists( logFile ) then 
        fileWrite( fileOpen( logFile ), logMessage ) 
    else 
        fileWrite( fileCreate( logFile ), logMessage ) 
    end 
end 
addEventHandler( 'onChatMessage', root, log ) 

Также вопрос: как можно определить что этот чат написан через Y или U(Team Chat)?

0: normal message  
1: action message (/me)  
2: team message 

onPlayerChat 

Так.Вместо thePlayer'a ставь

source 

.Пробуй

Link to comment
playSound3D ( я использую для сигнала (horn)) , он слышен для всех игроков с определённого расстояния с помощью

setSoundMaxDistance

без сервер-сайд

Что за волшебство?! Такого быть не может.

зайди на сервер и посмотри

забыл сказать о евенте

onClientElementDataChange 

,мне нужна эта дата для определения кнопок (не суть) потом уже воиспроизвести этот звук через

playSound3D 

это

playSound 

слышат только локальные игроки (тоесть только для тебя)

да и

https://wiki.multitheftauto.com/wiki/PlaySound3D

на грув стрит будет играть музыка (пример 2)

играть будет для всех

Представь себе. Ты запустил ресурс sound, когда этот ресурс запустится, то событие onClientResourceStart сработает у всех клиентов и все будут слышать этот звук!

Пример

addCommandHandler( 'sound', 
    function( ) 
         playSound( 'sound.mp3' ) 
    end 
) 

Когда ты наберёшь команду /sound звук будешь слышать только ты!

Link to comment

Теперь выдает 2 ошибки

-source = nill

-bad 'file' pointer @ 'fileClose'(1)

local logFile = '/log/'..time.monthday..'.'..time.month..'.'..time.year..'.log' 
fileClose( logFile ) 

Также вопрос: как сделать чтобы он не писал на первой строчке, а переходил на другую если она уже написана?

Link to comment
такая проблема: решил сделать ресурс, который будет записывать весь чат в файл, но появилась проблема. При отправке текста дебаг выдает ошибку

attempt to concatenate local 'thePlayer' (a userdata value) 

function log ( theMessage, thePlayer ) 
    local time = getRealTime() 
    time.month = time.month + 1 
    time.year = time.year + 1900 
    local logFile = '/log/'..time.monthday..'.'..time.month..'.'..time.year 
    local logMessage = '['..time.hour..time.minute..time.second..'] '..thePlayer..': '..theMessage 
    if fileExists( logFile ) then 
        fileWrite( fileOpen( logFile ), logMessage ) 
    else 
        fileWrite( fileCreate( logFile ), logMessage ) 
    end 
end 
addEventHandler( 'onChatMessage', root, log ) 

local logMessage = '['..time.hour..time.minute..time.second..'] '..thePlayer..': '..theMessage 

userdata не может быть в строке.

local logMessage = '['..time.hour..time.minute..time.second..'] '.. getElementType( thePlayer ) == 'player' and getPlayerName( thePlayer ) or 'OUTPUT'..': '..theMessage 

Так правильнее

Также вопрос: как можно определить что этот чат написан через Y или U(Team Chat)?

Тебе нужно юзать событие onPlayerChat если ты хочешь определить это.

Link to comment

TwiX!,

музыку слышат все из-за события onClientElementDataChange, которое вызывается на всех клиентах если кто-то изменил ElementData, а это уже с участием серверной стороны.

Созданные элементы на клиентской стороны НЕ синхронизируются, они созданы ТОЛЬКО для этого клиента. Есть только одна функция которая синхронизируется на всех клиентах - createProjectile (почему так решили сделать - не понятно, по сути это нарушает логику).

Если элемент был создан на сервере, то понятное дело что элемент будет создан на всех клиентах (ибо это его задача)

Roma,

соответственно клиент имеет доступ к серверным элементам, т.е. получить список элементов в виде таблицы можно с помощью getElementsByType

Link to comment
TwiX!,

музыку слышат все из-за события onClientElementDataChange, которое вызывается на всех клиентах если кто-то изменил ElementData, а это уже с участием серверной стороны.

Созданные элементы на клиентской стороны НЕ синхронизируются, они созданы ТОЛЬКО для этого клиента. Есть только одна функция которая синхронизируется на всех клиентах - createProjectile (почему так решили сделать - не понятно, по сути это нарушает логику).

Если элемент был создан на сервере, то понятное дело что элемент будет создан на всех клиентах (ибо это его задача)

Roma,

соответственно клиент имеет доступ к серверным элементам, т.е. получить список элементов в виде таблицы можно с помощью getElementsByType

я же потом добавил этот эвент в пост, потому что забыл про него

так то понятно что он срабатывает у всех, для этого я и сделал :D

Link to comment

В принципе с ошибками разобрался, но есть еще одна проблема: при исп. функции fileWrite файл стирается напрочь. Может поможете как этого избежать?

Link to comment

lcd1232

fileRead 
fileGetSize 

function OnPlayerChat ( sMsg, nType ) 
    if nType == 0 or nType == 1 then 
        local aTime     = getRealTime() 
        local nMonth    = aTime.month + 1 
        local nYear     = aTime.year + 1900 
        local nMonthday = aTime.monthday 
        local nHour     = aTime.hour 
        local nMin      = aTime.minute 
        local nSec      = aTime.second 
         
        local sLogFile = ':' .. getResourceName( resource ) .. '/log/' .. nMonthday ..'.' .. nMonth .. '.' .. nYear 
        local sLogMessage = '[' .. nHour .. nMin .. nSec .. '] ' .. getPlayerName( source ) .. ': ' .. sMsg 
        local pFile = fileExists( sLogFile ) and fileOpen( sLogFile ) or fileCreate( sLogFile ) 
        local sText = '' 
        while not fileIsEOF( pFile ) do 
            sText = sText .. fileRead( pFile, 500 ) 
        end 
        fileWrite( pFile, sText .. sLogMessage ) 
        fileClose( pFile ) 
    end 
end 
addEventHandler( 'onPlayerChat', root, OnPlayerChat ) 

562141

guiSetVisible 
showCursor 

https://wiki.multitheftauto.com/wiki/OnClientPlayerSpawn

Link to comment
lcd1232
fileRead 
fileGetSize 

function OnPlayerChat ( sMsg, nType ) 
    if nType == 0 or nType == 1 then 
        local aTime     = getRealTime() 
        local nMonth    = aTime.month + 1 
        local nYear     = aTime.year + 1900 
        local nMonthday = aTime.monthday 
        local nHour     = aTime.hour 
        local nMin      = aTime.minute 
        local nSec      = aTime.second 
         
        local sLogFile = ':' .. getResourceName( resource ) .. '/log/' .. nMonthday ..'.' .. nMonth .. '.' .. nYear 
        local sLogMessage = '[' .. nHour .. nMin .. nSec .. '] ' .. getPlayerName( source ) .. ': ' .. sMsg 
        local pFile = fileExists( sLogFile ) and fileOpen( sLogFile ) or fileCreate( sLogFile ) 
        fileWrite( pFile, fileRead( pFile, fileGetSize( pFile ) ) .. sLogMessage ) 
        fileClose( pFile ) 
    end 
end 
addEventHandler( 'onPlayerChat', root, OnPlayerChat ) 

562141

guiSetVisible 
showCursor 

https://wiki.multitheftauto.com/wiki/OnClientPlayerSpawn

Лучше Триггером,это обеспечит защиту(:

ИМХО.

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