Jump to content

Дада (: фулдилка


Recommended Posts

  • Replies 2.4k
  • Created
  • Last Reply

Top Posters In This Topic

Помогите написать скрипт пожалуйста. Если игрок спамит в чат отослал например 5 одинаковых сообщений подряд, то его кикает консоль с причиной Spam. Как это сделать?

Link to comment
Помогите написать скрипт пожалуйста. Если игрок спамит в чат отослал например 5 одинаковых сообщений подряд, то его кикает консоль с причиной Spam. Как это сделать?

https://community.multitheftauto.com/index.php?p=resources&s=details&id=2537

Это не то, в этом скрипте игроку даётся мут, и тем более он не работает...

Link to comment
Непомогло.... Ставил 2005 непомогало потмо поставил 2010 x64 непомогло (2005 я ненашел 64х)

2008 ?

я не сморел, просто поищи в комьюнити еще

там не такого, помогите кто может

поискал, нашел тока примерное:

https://community.multitheftauto.com/index.php?p= ... ils&id=601

https://community.multitheftauto.com/index.php?p= ... ils&id=202

Link to comment

Задался вопросом о приоритетности передачи пакетов. Вопрос к лилу Тоди: на конкретном примере: если я сделаю подряд triggerClientEvent(player) setElementData(player), не произойдет ли так, что elementData будет передано игроку раньше, чем event? Тот же вопрос и для обратного порядка функций.

Link to comment

Помогите со скриптом пожалуйста, этот скрипт показывает онлайн админов, но он показывает вот так:

Online admins list: Admins: name, name, name SuperModerators: name, name Moderators: name, name, name

А как сделать что бы он показывал вот так?

Online admins list:

Admins: name, name, name

SuperModerators: name, name,name

Moderators: name, name

local admins = "" 
  
function processAdminList() 
 players = getElementsByType ( "player" ) 
 admins = "" 
 for k,v in ipairs(players) do 
 local accountname = "" 
 if (isGuestAccount(getPlayerAccount(v)) == false) then 
 accountname = getAccountName (getPlayerAccount(v)) 
 if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "Admin" ) ) then 
 if (admins == "") then 
 admins = "Admins: "..getPlayerName(v) 
 else 
  
 admins = admins .. ", a: " .. getPlayerName(v) 
 end 
 end 
  
 if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "SuperModerator" ) ) then 
 if (admins == "") then 
 admins = "SuperModerators: "..getPlayerName(v) 
 else 
  
 admins = admins .. ", b: " .. getPlayerName(v) 
 end 
 end 
  
 if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "Moderator" ) ) then 
 if (admins == "") then 
 admins = "Moderators: "..getPlayerName(v) 
 else 
  
 admins = admins .. ", c: " .. getPlayerName(v) 
 end 
 end 
 end 
 end 
end 
  
addEventHandler( "onPlayerLogin", getRootElement(), processAdminList ) addEventHandler( "onPlayerLogout", getRootElement(), processAdminList ) addEventHandler( "onPlayerQuit", getRootElement(), processAdminList ) 
  
  
function setAdminList(Player,command) 
 if admins ~= "" then 
 outputChatBox("Online Admins: "..admins , Player, 255 , 255, 0) 
 else 
 outputChatBox("No admins online." , Player, 255 , 255, 0) 
 end 
end 
addCommandHandler("admins", setAdminList) 
  
 function tAdmins(message,messageType) 
 if message == "!admins" or message == "!Admins" or message =="!onlineadmins" then 
 local playeraccount = getPlayerAccount(source) 
 if admins ~= "" then 
 outputChatBox("Online Admins: "..admins , getRootElement(), 255 , 255, 0) 
 else 
 outputChatBox("No admins online." , getRootElement(), 255 , 255, 0) 
 end 
 end 
 end 
 addEventHandler("onPlayerChat",getRootElement(),tAdmins) 

Link to comment
Теоретики собрались (: Про практику уже забыли, наверное

Да причем тут это. Где-то я видел, слышал, читал, что в мта некоторые пакеты имеют больший приоритет, чем другие. Я собираюсь перебросить игроку таблицу скинов через triggerClientEvent, а затем установить ему статус "Select", чтобы активировать выбор на стороне клиента.

triggerClientEvent(player, "updateSkinsTable", root, { 300, 301, 302, 310, 314 }) 
setElementData(player, "state", "Select") 

Вот и боюсь, а не уйдет ли дата вперед эвента со скинами?

Ориентироваться на "практику" смысла нет - всего сетевого кода я не знаю, к тому же неизвестно, как поведет себя при большом пинге, пакетопотерях и т.п.

Link to comment
вставь \n в нужных местах (переход на новую строку)

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

Link to comment
Теоретики собрались (: Про практику уже забыли, наверное

Да причем тут это. Где-то я видел, слышал, читал, что в мта некоторые пакеты имеют больший приоритет, чем другие. Я собираюсь перебросить игроку таблицу скинов через triggerClientEvent, а затем установить ему статус "Select", чтобы активировать выбор на стороне клиента.

triggerClientEvent(player, "updateSkinsTable", root, { 300, 301, 302, 310, 314 }) 
setElementData(player, "state", "Select") 

Вот и боюсь, а не уйдет ли дата вперед эвента со скинами?

Ориентироваться на "практику" смысла нет - всего сетевого кода я не знаю, к тому же неизвестно, как поведет себя при большом пинге, пакетопотерях и т.п.

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

вставь \n в нужных местах (переход на новую строку)

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

пора начать пробовать

Link to comment
вставь \n в нужных местах (переход на новую строку)

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

пора начать пробовать

ты мне не поможешь?

Link to comment
local admins = "" 
  
function processAdminList() 
 players = getElementsByType ( "player" ) 
 admins = "" 
 for k,v in ipairs(players) do 
 local accountname = "" 
 if (isGuestAccount(getPlayerAccount(v)) == false) then 
 accountname = getAccountName (getPlayerAccount(v)) 
 if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "Admin" ) ) then 
 if (admins == "") then 
 admins = "\nAdmins: "..getPlayerName(v) 
 else 
  
 admins = admins .. ", a: " .. getPlayerName(v) 
 end 
 end 
  
 if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "SuperModerator" ) ) then 
 if (admins == "") then 
 admins = "\nSuperModerators: "..getPlayerName(v) 
 else 
  
 admins = admins .. ", b: " .. getPlayerName(v) 
 end 
 end 
  
 if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "Moderator" ) ) then 
 if (admins == "") then 
 admins = "\nModerators: "..getPlayerName(v) 
 else 
  
 admins = admins .. ", c: " .. getPlayerName(v) 
 end 
 end 
 end 
 end 
end 
  
addEventHandler( "onPlayerLogin", getRootElement(), processAdminList ) addEventHandler( "onPlayerLogout", getRootElement(), processAdminList ) addEventHandler( "onPlayerQuit", getRootElement(), processAdminList ) 
  
  
function setAdminList(Player,command) 
 if admins ~= "" then 
 outputChatBox("Online Admins: "..admins , Player, 255 , 255, 0) 
 else 
 outputChatBox("No admins online." , Player, 255 , 255, 0) 
 end 
end 
addCommandHandler("admins", setAdminList) 
  
 function tAdmins(message,messageType) 
 if message == "!admins" or message == "!Admins" or message =="!onlineadmins" then 
 local playeraccount = getPlayerAccount(source) 
 if admins ~= "" then 
 outputChatBox("Online Admins: "..admins , getRootElement(), 255 , 255, 0) 
 else 
 outputChatBox("No admins online." , getRootElement(), 255 , 255, 0) 
 end 
 end 
 end 
 addEventHandler("onPlayerChat",getRootElement(),tAdmins) 

Link to comment

можно было бы, но тогда мне придется делать отдельный триггер для "тихой" передачи списка скинов (без активации выбора).

была не была, сделаю как хотел, а массовые тесты покажут.

Link to comment

[РЕШЕНО]

Возникла интересная ситуация, вкратце опишу в чем дело. При рестарте сервера у меня автоматически компилируются скрипты, что удобно - внес изменения и перезапустил сервер, никаких лишних телодвижений. Система проста: сначала на сервере читаются клиентские скрипты и пишутся в одну строку, потом это отдается на съедение string.dump, потом уже скомпилированный скрипт попадает на клиент и там запускается (да, такой я параноик). Внезапно стали происходить чудные вещи. Если длина исходного скрипта, передаваемый на обработку функции string.dump, больше 65534 байта, то клиент перестает его загружать (через loadstirng, естественно). Уточняю, что дело не в каких-либо аспектах пересылки скрипта с сервера на клиент, и вот почему.

Провел эксперимент:

1. Запустил со скриптом меньше 65 Кб и записал два файла - скомпилированный сервером (на сервере) и он же, переданный на клиент (на клиенте, очевидно).

2. Используя обычную строку-комментарий довел размер скрипта до 65535 и снова записал такие же файлы.

3. Сравнил, используя notepad++ ( есть там такой инструмент: "Compare" ) все 4 файла. Notepad клянется, что "Files match". Все, то есть. Совсем. Нет, это фантастика, ей богу.

То есть скомпиленные скрипты с и без строки-комментария абсолютно идентичны, что есть логично и правильно, а вот длина исходного кода имеет значение.

Где собака-то зарыта, чем они все-таки могут отличаться и как это увидеть?

Edited by Guest
Link to comment

в инфе про string.dump сказано, что он кушает ИДент функции, превращая ее в бинарник, чтобы потом loadstring мог с этого бинарника создать функцию заново и вернул её ИДент. Это так, для справки и для тех, кто не читал.

я юзаю loadstring для загрузки больших скриптов и местами бинарников, уж точно больше 64 кб, версия мта 1.1. Так что с этим все в порядке

я так понимаю, что все дело в string.dump. В инете видно есть жалоба, что байт-код ей создается не совсем верно. Решения были связаны только с последующим использованием loadstring:

  • вокруг loadstring поставить assert
  • в loadstring вторым параметром укзать нечто вроде "(noname)", это так называемое chunk name

источник - http://lua-users.org/lists/lua-l/2004-07/msg00222.html

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