Jump to content

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


Recommended Posts

Помогите исправить код, заранее спасибо

function vipinfernus(player)  
    acc = getAccountName(getPlayerAccount(player)) 
    if(isObjectInACLGroup("user."..acc,aclGetGroup("Admin"))) then 
    txd = engineLoadTXD ( "infernus.txd" ) 
    engineImportTXD ( txd, 411 ) 
  
    dff = engineLoadDFF ( "infernus.dff", 411 ) 
    engineReplaceModel ( dff, 411 ) 
end 

Link to comment
Помогите исправить код, заранее спасибо
function vipinfernus(player)  
    acc = getAccountName(getPlayerAccount(player)) 
    if(isObjectInACLGroup("user."..acc,aclGetGroup("Admin"))) then 
    txd = engineLoadTXD ( "infernus.txd" ) 
    engineImportTXD ( txd, 411 ) 
  
    dff = engineLoadDFF ( "infernus.dff", 411 ) 
    engineReplaceModel ( dff, 411 ) 
end 

Его невозможно исправить, так как он логически неверен!

А если ты имеешь ввиду синтаксис, то end забыл поставить! Но это тебе debugscript может подсказать!

Link to comment
Помогите исправить код, заранее спасибо
function vipinfernus(player)  
    acc = getAccountName(getPlayerAccount(player)) 
    if(isObjectInACLGroup("user."..acc,aclGetGroup("Admin"))) then 
    txd = engineLoadTXD ( "infernus.txd" ) 
    engineImportTXD ( txd, 411 ) 
  
    dff = engineLoadDFF ( "infernus.dff", 411 ) 
    engineReplaceModel ( dff, 411 ) 
end 

Вы не знаете Lua! Вам сюда.

Так же вы не знаете, что код на сервере должен выполняться серверными функциями, но не как не клиентскими. Вы можете невооруженным глазом увидеть, что цвета функций в BB коде определяет где она может выполняться ( красный - на клиенте, оранжевый - на сервере, синий - на клиенте и на сервере ).

Link to comment
красный - на клиенте, оранжевый - на сервере, синий - на клиенте и на сервере

О, спасибо, я дествительно этого не знал.

Так насчёт скрипта, может надо использовать triggerClientEvent, я опять попробовал, но не работает.

local root = getRootElement() 
  
function vip(player) 
   acc = getAccountName(getPlayerAccount(player)) 
    if(isObjectInACLGroup("user."..acc,aclGetGroup("Admin"))) then 
        triggerClientEvent ( "oninfernus", getRootElement()) 
  end 
end 
addEventHandler("onPlayerLogin", root, vip) 

function infernus()  
    txd = engineLoadTXD ( "infernus.txd" ) 
    engineImportTXD ( txd, 411 ) 
  
    dff = engineLoadDFF ( "infernus.dff", 411 ) 
    engineReplaceModel ( dff, 411 ) 
end 
addEvent( "oninfernus", true ) 
addEventHandler( "oninfernus", getRootElement(), infernus ) 

Link to comment
красный - на клиенте, оранжевый - на сервере, синий - на клиенте и на сервере

О, спасибо, я дествительно этого не знал.

Так насчёт скрипта, может надо использовать triggerClientEvent, я опять попробовал, но не работает.

local root = getRootElement() 
  
function vip(player) 
   acc = getAccountName(getPlayerAccount(player)) 
    if(isObjectInACLGroup("user."..acc,aclGetGroup("Admin"))) then 
        triggerClientEvent ( "oninfernus", getRootElement()) 
  end 
end 
addEventHandler("onPlayerLogin", root, vip) 

function infernus()  
    txd = engineLoadTXD ( "infernus.txd" ) 
    engineImportTXD ( txd, 411 ) 
  
    dff = engineLoadDFF ( "infernus.dff", 411 ) 
    engineReplaceModel ( dff, 411 ) 
end 
addEvent( "oninfernus", true ) 
addEventHandler( "oninfernus", getRootElement(), infernus ) 

Во первых почитай это: https://wiki.multitheftauto.com/wiki/Debugging

Во вторых если ты написал player, то это не значит что это игрок, это просто переменная!

У эвента onPlayerLogin, игроком является source.

function vip() 
   acc = getAccountName(getPlayerAccount(source)) 
    if(isObjectInACLGroup("user."..acc,aclGetGroup("Admin"))) then 
        triggerClientEvent (source, "oninfernus", source) 
  end 
end 

Короче почитай побольше о создании скриптов, прежде чем создавать их!

https://wiki.multitheftauto.com/wiki/Scripting_Introduction

https://wiki.multitheftauto.com/wiki/Introduction_to_Scripting_the_GUI

Link to comment

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

Link to comment

Здравствуйте, имеем простую функцию вывода текста из таблицы:

local table = {"1", "2"} 
  
function _f100(thePlayer, cmd) 
    for key, value in pairs(table) do 
        outputChatBox(value, source) 
    end 
end 
addCommandHandler("qqq", _f100) 

Каждое следующее значение выводиться с новой строчки. Вопрос - можно, чтобы числа 1 и 2 вывелись в 1 строке через пробел?

Link to comment
local a = { '0', '1', 1, 2, 3 } 
  
function ShowValues( pPlayer ) 
    outputChatBox( table.concat( a, ' ' ), pPlayer ) 
end 
addCommandHandler( 'show_v', ShowValues ) 

На заметку: table.concat работает тока с массивами.

Link to comment
local a = { '0', '1', 1, 2, 3 } 
  
function ShowValues( pPlayer ) 
    outputChatBox( table.concat( a, ' ' ), pPlayer ) 
end 
addCommandHandler( 'show_v', ShowValues ) 

На заметку: table.concat работает тока с массивами.

Спасибо и еще - нужно добавлять имя игрока в массив, при коннекте.

local table = {} 
  
function _f3() 
    table.insert(table, getPlayerName(source)) 
end 
addEventHandler("onPlayerConnect", getRootElement(), _f3) 

Но почему то данная функция не работает.

Link to comment
local a = {} 
  
function OnPlayerConnect( sPlayerNick ) 
    table.insert( a, sPlayerNick ) 
end 
addEventHandler( 'onPlayerConnect', root, OnPlayerConnect ) 

table.insert(table, getPlayerName(source)) 

Это не будет работать т.к источник этого события - корень клиента.

Link to comment
local a = {} 
  
function OnPlayerConnect( sPlayerNick ) 
    table.insert( a, sPlayerNick ) 
end 
addEventHandler( 'onPlayerConnect', root, OnPlayerConnect ) 

table.insert(table, getPlayerName(source)) 

Это не будет работать т.к источник этого события - root.

Спасибо, 1 вопрос - что такое sPlayerNick? Сокращения какие то?

Link to comment

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

local Moderators = {} 
local SuperModerators = {} 
local Admins = {} 
  
--логин 
function _f1() 
local acc = getAccountName(getPlayerAccount(source)) 
    if(isObjectInACLGroup("user."..acc,aclGetGroup("Admin"))) then 
        table.insert(Admins, getPlayerName(source)) 
     
    elseif(isObjectInACLGroup("user."..acc,aclGetGroup("SuperModerator"))) then 
        table.insert(SuperModerators, getPlayerName(source)) 
     
    elseif(isObjectInACLGroup("user."..acc,aclGetGroup("Moderator"))) then 
        table.insert(Moderators, getPlayerName(source)) 
     
    end 
end 
addEventHandler("onPlayerLogin", root, _f1) 
  
--логаут 
function _f2() 
local acc = getAccountName(getPlayerAccount(source)) 
    if(isObjectInACLGroup("user."..acc,aclGetGroup("Admin"))) then 
        table.remove(Admins, getPlayerName(source)) 
     
    elseif(isObjectInACLGroup("user."..acc,aclGetGroup("SuperModerator"))) then 
        table.remove(SuperModerators, getPlayerName(source)) 
     
    elseif(isObjectInACLGroup("user."..acc,aclGetGroup("Moderator"))) then 
        table.remove(Moderators, getPlayerName(source)) 
     
    end 
end 
addEventHandler("onPlayerLogout", root, _f2) 
  
function _f3() 
    outputChatBox(table.concat(Admins, ", "), source) 
end 
addCommandHandler("qqq", _f3) 

Но после логаута не удаляет из таблицы. Как я понял - из таблицы удаляет только по номеру, но как задавать каждому залогиневшемуся номер в таблице? Помогите с этим, пожалуйста.

Link to comment

Возможно подсказали бы, если бы поняли, что ты хочешь вобще?

Зечем тебе из таблиц удалять что то?

Короче смысл такой:

1) При запуске скрипта получаешь онлайн админов сколько

2) Записываешь в переменную, и показываешь, где ты хочешь

3) При изменении игроков на сервере, перезаписываешь переменную...

Вот вобщем то и все...

Зачем ты с массивами заморачиваешься, я не понимаю(

Link to comment
Возможно подсказали бы, если бы поняли, что ты хочешь вобще?

Зечем тебе из таблиц удалять что то?

При логине, если игрок админ, смодер или модер, в зависимости его ник добавляется в определенную таблицу. Он то добавляется, но talbe.remove только по номеру ячейки, так? Так вот как мне определенный ник удалять при логауте?

Link to comment
Возможно подсказали бы, если бы поняли, что ты хочешь вобще?

Зечем тебе из таблиц удалять что то?

При логине, если игрок админ, смодер или модер, в зависимости его ник добавляется в определенную таблицу. Он то добавляется, но talbe.remove только по номеру ячейки, так? Так вот как мне определенный ник удалять при логауте?

Конкретно в данном случае, если очень хочешь, то можешь использовать ассоциативный массив. То есть записываешь в таблицу не с помощью table.insert, а таким образом: admins[thePlayer] = true, где thePlayer является игроком (Именно игроком, а не его ником и тд!)

Соответственно удалить из таблицы можешь так: admins[thePlayer] = nil

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