Технический форум Чат в локалке
FreddyHun 03.01.2021 в 21:02

Пользователь

Репутация: 0 бал.

Замечания: 0 бал.

Товарищи, в стандартных мультиплеерных играх на базе GTA SA (SAMP, MTA Province, Radmir CRMP...) сделали так, чтобы когда определённый игрок писал в чат, его сообщение распространилось на определённый радиус. В локалке же наоборот, кто-то написал в чат и весь сервер, все игроки видят это сообщение. Подскажите пожалуйста, каво куда надо писать в скрипт, чтобы вернуть чат, так сказать в адекватное состояние? То бишь, чтобы сообщения были по радиусу.
jamrock 04.01.2021 в 10:11

Проверенный

Репутация: 31 бал.

Замечания: 0 бал.

https://forum.mtasa.com/topic/119160-chat-radius/?do=findComment&comment=961430
https://wiki.multitheftauto.com/wiki/OnPlayerChat
decided96 05.01.2021 в 10:03

Проверенный

Репутация: 121 бал.

Замечания: 0 бал.

FreddyHun, найди любой рабочий чат и добавь проверку на расстояние

Ту что скинули выше.
А для локалки вывод в чат просто всем игрокам

Если сообщения с Т чата дублируются. Добавь проверку на то что это не команда и добавь cancelEvent()
FreddyHun 07.01.2021 в 05:21

Пользователь

Репутация: 0 бал.

Замечания: 0 бал.

Вы знаете, тупо скопировал код из ссылки, которую мне прислали, прописал в meta.xml
        <script src="acl/acl_chat.lua" type="server"/>
, а сам этот файл "acl_chat.lua" выглядит так
for i, v in ipairs(getElementsByType("player")) do
local x, y, z = getElementPosition(v)
local x2, y2, z2 = getElementPosition(player) -- player represents the player who triggered the chat command.
local distance = getDistanceBetweenPoints3D(x, y, z, x2, y2, z2)
if (distance <= 10) then
outputChatBox("YOUR MESSAGE", v)
end
end
, и конечно ничего не работает. Консоль сервера говорит, что
. В скриптах дуб дубом. Сможете помочь написать его правильно? :)
jamrock 07.01.2021 в 14:35

Проверенный

Репутация: 31 бал.

Замечания: 0 бал.

FreddyHun,

-- define our chat radius
local chatRadius = 20 --units

-- define a handler that will distribute the message to all nearby players
function sendMessageToNearbyPlayers(message, messageType)
-- we will only send normal chat messages, action and team types will be ignored
if messageType == 0 then
-- get the chatting player's position
local posX1, posY1, posZ1 = getElementPosition(source)

-- loop through all player and check distance
for id, player in ipairs(getElementsByType("player")) do
local posX2, posY2, posZ2 = getElementPosition(player)
if getDistanceBetweenPoints3D(posX1, posY1, posZ1, posX2, posY2, posZ2) <= chatRadius then
outputChatBox(message, player)
end
end
end
-- block the original message by cancelling this event
cancelEvent()
end
-- attach our new chat handler to onPlayerChat
addEventHandler( "onPlayerChat", root, sendMessageToNearbyPlayers )

Вот код с MTA Wiki
FreddyHun 07.01.2021 в 18:53

Пользователь

Репутация: 0 бал.

Замечания: 0 бал.

Опять таки тупо скопировал код из сообщения. Итог: image Там где префикс админа, до сих пор это на весь сервер действует.
Shelldo 15.01.2021 в 00:12

Пользователь

Репутация: 1 бал.

Замечания: 0 бал.

FreddyHun, Префиксы групп это уже другой ресурс, и он тоже взаимодействует с ивентом "onPlayerChat". и нет никакой сложности адаптирования под дистанцию чата.
Отправлять сообщения могут только пользователи сайта