Jump to content

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


Recommended Posts

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

Ну тогда наверное имеет смысл уничтожить его:

addEventHandler( "onPickupHit", твой_пикап, function() 
  destroyElement( source ) 
end ) 

Link to comment

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

Ну тогда наверное имеет смысл уничтожить его:

addEventHandler( "onPickupHit", твой_пикап, function() 
  destroyElement( source ) 
end ) 

Ах да, у меня был destroy только если его никто не юзал. Благодарю.

Link to comment

У тебя всегда будет получать группу "Security" т.к оператор or никогда не будет срабатывать.

Оператор or работает только в том случае если значение false ( boolean ) или ( nil ). nil тоже тип.

Link to comment

Привет всем, скажите как исправить (мод race): если во время игры, заходит игрокок, то последний выживший в ранг листе получается на второй позиции, а деньги даются как последнему выжившему, тому кто зашёл.

Последний игрок, определяется c через getAlivePlayer():

function check() 
local alive = getAlivePlayers() 
local player = alive[1] 
  if (#alive == 1) then 
          givePlayerMoney(player, 1000) 
      outputChatBox(getPlayerName(player).. " receive 1000$", getRootElement(), 255, 255, 255, true ) 
   end 
end 
addEventHandler("onPlayerWasted",getRootElement(),check) 
addEventHandler("onPlayerJoin",getRootElement(),check) 
addEventHandler("onPlayerQuit",getRootElement(),check) 

Link to comment
У тебя всегда будет получать группу "Security" т.к оператор or никогда не будет срабатывать.

Оператор or работает только в том случае если значение false ( boolean ) или ( nil ). nil тоже тип.

Благодарю. Тогда как сделать проверку на то, состоит ли player в двух группах?

Link to comment
Привет всем, скажите как исправить (мод race): если во время игры, заходит игрокок, то последний выживший в ранг листе получается на второй позиции, а деньги даются как последнему выжившему, тому кто зашёл.

Последний игрок, определяется c через getAlivePlayer():

function check() 
local alive = getAlivePlayers() 
local player = alive[1] 
  if (#alive == 1) then 
          givePlayerMoney(player, 1000) 
      outputChatBox(getPlayerName(player).. " receive 1000$", getRootElement(), 255, 255, 255, true ) 
   end 
end 
addEventHandler("onPlayerWasted",getRootElement(),check) 
addEventHandler("onPlayerJoin",getRootElement(),check) 
addEventHandler("onPlayerQuit",getRootElement(),check) 

Будет лучше всего создать свою таблицу живых игроков.

Link to comment
У тебя всегда будет получать группу "Security" т.к оператор or никогда не будет срабатывать.

Оператор or работает только в том случае если значение false ( boolean ) или ( nil ). nil тоже тип.

Благодарю. Тогда как сделать проверку на то, состоит ли player в двух группах?

https://wiki.multitheftauto.com/wiki/IsObjectInACLGroup

Link to comment
У тебя всегда будет получать группу "Security" т.к оператор or никогда не будет срабатывать.

Оператор or работает только в том случае если значение false ( boolean ) или ( nil ). nil тоже тип.

Благодарю. Тогда как сделать проверку на то, состоит ли player в двух группах?

https://wiki.multitheftauto.com/wiki/IsObjectInACLGroup

Пробовал, не работает. Срабатывает только первое условие, второе нет. Т.е. я запрашиваю состоит ли челвоек в группе #1 или группе #2. Но если первой не удовлетворяет, то дальше проверка не идет.

    if isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( Player )), aclGetGroup ( "FBI" ) ) or isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( Player )), aclGetGroup ( "Security" ) ) and allVehicles[source] ~= getAccountName( getPlayerAccount( Player ) ) and not veh[ getElementModel( source ) ] then 
  

_______________________________

Создается 2 пикапа + действует для любых пикапов. Как локализовать? Почему создается по 2-ому кругу 2 пикапа, а не 1?

    local coordM = { 
     {1320.80005, 1254.69995, 14.6}, 
... 
     {2637.19995, -1471.30005, 16.5} 
    } 
     
    function createPU() 
            local rnd1 = math.random (1, #coordM) 
            pick = createPickup ( coordM[rnd1][1], coordM[rnd1][2], coordM[rnd1][3], 3, 1274, 99999999999999999999 ) 
            outputChatBox ( "На карте указан маркер (Стрелочка), где находятся деньги!", getRootElement(), 140, 215, 42, true ) 
            outputChatBox ( "Ваша цель - добраться первым и забрать их!", getRootElement(), 140, 215, 42, true ) 
            createBlipAttachedTo (pick, 3, 1, 0, 0, 0, 255, 0, 450 ) 
    end 
         
    function check() 
        local attached = getAttachedElements ( pick ) 
        if ( attached ) then 
            for k,element in ipairs(attached) do 
                if getElementType ( element ) == "blip" then 
                    destroyElement ( element ) 
                    destroyElement ( pick ) 
                end 
            end 
        end 
    end 
     
        setTimer ( check, 899999, 0 ) 
        setTimer ( createPU, 900000, 0 ) 
     
    function destroy( thePlayer ) 
        outputChatBox ( getPlayerName ( thePlayer ) .. " нашел один из пикапов! Поздравляем!", getRootElement(), 140, 215, 42, true ) 
        givePlayerMoney ( thePlayer, 50000 ) 
        local attached = getAttachedElements ( pick ) 
        if ( attached ) then 
            for k,element in ipairs(attached) do 
                if getElementType ( element ) == "blip" then 
                    destroyElement ( element ) 
                end 
            end 
        end 
    end 
    addEventHandler ( "onPickupUse", getRootElement(), destroy ) 

Link to comment

Будет лучше всего создать свою таблицу живых игроков.

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

function getAliveGuys () 
pAlive = 0 
playerAlive = { }; 
   for _, player in ipairs ( getElementsByType ( "player" ) ) do 
       if ( getElementData ( player, "state" ) == "alive" ) then 
          pAlive = pAlive + 1; 
          playerAlive[#playerAlive+1] = { }; 
       end 
   end 
end 
  
function check() 
getAliveGuys() 
  if pAlive == 1 then 
      local winner = playerAlive[1];  
      givePlayerMoney( winner, 1000 ); 
      outputChatBox( getPlayerName( winner ).. " receive 1000$", getRootElement( ), 255, 255, 255, true ); 
   end 
end 
addEventHandler("onPlayerWasted", getRootElement( ) , check) 

Link to comment

в одном из ресурсов видел coroutine я даже не знал, что мта есть многопоточность.

Так вот я хотел узнать приносит это дополнительную скорость и стабильность?

Link to comment
Sandboxie в помощь

Только не забудьте отрубить античит, потому что будет кикать.

в одном из ресурсов видел coroutine я даже не знал, что мта есть многопоточность.

Так вот я хотел узнать приносит это дополнительную скорость и стабильность?

Скорость - нет. Стабильность - нет. (особенно, если вы в поточном программировании не разбираетесь)

Потоками можно сделать параллельное выполнение инструкций внутри скрипта.

Вот тут почитайте:

http://www.lua.ru/doc/2.11.html - документация

http://wiki.roblox.com/index.php/Beginn ... Coroutines - гайд с примерами

Link to comment
Про sandboxie. Спасибо, только ошибка выдаётся

2a37996bf0a9538f73201da38bb22b20.png

я использую wine для эмуляции но в данном могу предположить что sandbox криво встал ибо мта не может подгрузить шрифт нажмите ок для открытия страницы помощи.

Всегда ваш К.О!

Link to comment

Здравствуйте. Столкнулся с необходимостью перемещения камеры, но никак не могу понять какой функцией это можно реализовать. Подскажите пожалуйста как это можно сделать.

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