Jump to content

Вопрос по math.random


Recommended Posts

Итак,вот у меня есть вот это (Server side)

local robbingTable = { 
[1]={2020.65198, -1649.86047, 13.41406}, 
[2]={2424.22791, -1638.03711, 13.38281}, 
[3]={1855.01685, -1430.47449, 13.39063}, 
[4]={1732.81580, -1296.87122, 13.44294}, 
[5]={1473.19226, -1295.77124, 13.48315}, 
[6]={1443.60376, -1498.26660, 13.37650}, 
[7]={1426.37280, -1716.12439, 13.38281}, 
[8]={1315.06909, -1656.43799, 13.38281}, 
[9]={1359.06250, -1432.39734, 13.38281}, 
[10]={1169.82983, -1392.34473, 13.41728}, 
[11]={930.76508, -1392.92627, 13.26561}, 
[12]={815.24756, -1317.91345, 13.44460}, 
[13]={585.04199, -1320.53748, 13.40609}, 
[14]={526.99365, -1624.20361, 16.63225}, 
} 

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

Client Side

function (x, y, z) 
outputChatBox ( "Rob house!", 255, 255, 255, true ) 
markerrob = createMarker (tostring(x), tostring(y), tostring(z)-1, "cylinder", 3.5, 255, 0, 0, 170) 
blip = createBlipAttachedTo( markerrob, 32, 2, 255, 0, 0, 255 ) 
addEventHandler("onClientMarkerHit",markerrob,onRobStopHit) 
end) 

Вопрос:

Как сделать так,чтобы маркер создавался на рандомных координатах из таблицы?

Заранее спасибо=)

Edited by Guest
Link to comment

Как то вы криво говорите,вот код сервера:

local rootElement = getRootElement() 
  
local rob = {[402] = true, [422] = true} 
  
local robbingTable = { 
[1]={2020.65198, -1649.86047, 13.41406}, 
[2]={2424.22791, -1638.03711, 13.38281}, 
[3]={1855.01685, -1430.47449, 13.39063}, 
[4]={1732.81580, -1296.87122, 13.44294}, 
[5]={1473.19226, -1295.77124, 13.48315}, 
[6]={1443.60376, -1498.26660, 13.37650}, 
[7]={1426.37280, -1716.12439, 13.38281}, 
[8]={1315.06909, -1656.43799, 13.38281}, 
[9]={1359.06250, -1432.39734, 13.38281}, 
[10]={1169.82983, -1392.34473, 13.41728}, 
[11]={930.76508, -1392.92627, 13.26561}, 
[12]={815.24756, -1317.91345, 13.44460}, 
[13]={585.04199, -1320.53748, 13.40609}, 
[14]={526.99365, -1624.20361, 16.63225}, 
} 
  
function getNewRobLocation(thePlayer, ID) 
local x, y, z = robbingTable[ID][1], robbingTable[ID][2], robbingTable[ID][3] 
triggerClientEvent(thePlayer,"rob_set_location",thePlayer,x,y,z) 
end 
  
function onVehicleEnter(thePlayer) 
if not rob[getElementModel(source)] then return end 
if not getPlayerTeam(thePlayer) then return end 
if getTeamName(getPlayerTeam(thePlayer)) == "Criminal" then 
local x, y, z = getNewRobLocation(thePlayer, 1) 
setElementData(thePlayer,"robData",1) 
  end 
end 

Вот код клиента:

local client = getLocalPlayer( ) 
local rootElement = getRootElement() 
local markerrob = nil 
local blip = nil 
  
addEvent("rob_set_location",true) 
addEventHandler("rob_set_location",rootElement, 
  
function (x, y, z) 
outputChatBox ( "Rob house!", 255, 255, 255, true ) 
markerrob = createMarker (tostring(x), tostring(y), tostring(z)-1, "cylinder", 3.5, 255, 0, 0, 170) 
blip = createBlipAttachedTo( markerrob, 32, 2, 255, 0, 0, 255 ) 
addEventHandler("onClientMarkerHit",markerrob,onRobStopHit) 
end) 
  
  
function onRobStopHit(hitPlayer) 
if not hitPlayer == client then return end 
triggerServerEvent("rob_finish",client,client) 
if isElement(blip) then destroyElement(blip) end 
if isElement(markerrob) then 
removeEventHandler("onClientMarkerHit",markerrob,onRobStopHit) 
destroyElement(markerrob)  
  end 
end 
  

Link to comment

я уже всё объяснил. если для вас, мсье, это "ерунда через --" — я умываю руки.

с таким отношением вам мануал по луа на шею, вики в зубы, и вперёд.

Link to comment

Ага,всё ООООООООчень понятно.

Kenix или Kernell понятней объясняют всё.

А вы-просто говорите что надо исправить,не говоря как это сделать,Я тоже так могу:

Добавьте что -нибудь в обработчиков,сюда что-нибудь и др.

Link to comment

Aibo всё правильно написал.

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

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

Copy Paste вообщем.

Link to comment

Я понимаю,но иногда очень раздражает когда люди пытаются объяснить то,что Я не могу понять,если бы Aibo просто сказал бы где исправить и на что,или дал бы код с описанием,что Я не правильно сделал,Я бы всё понял,а так...

Я просто не понимаю как сделать это с math.random.Скрипт работает....

Вот если что...Клиентская сторона:

addEvent("rob_set_location",true) 
addEventHandler("rob_set_location",rootElement, 
function (x, y, z) 
markerrob = createMarker(tostring(x), tostring(y), tostring(z)-1, "cylinder", 3.5, 255, 0, 0, 170) 
blip = createBlipAttachedTo( markerrob, 32, 2, 0, 0, 0, 117 ) 
addEventHandler("onClientMarkerHit",markerrob,onBusStopHit) 
end) 

Вот сервер(Только таблица)

  
local busTable = { 
[1]={2007.65198, -1648.86047, 13.41406}, 
[2]={1825.22791, -1635.03711, 13.38281}, 
[3]={1855.01685, -1430.47449, 13.39063}, 
[4]={1732.81580, -1296.87122, 13.44294}, 
[5]={1473.19226, -1295.77124, 13.48315}, 
[6]={1443.60376, -1498.26660, 13.37650}, 
[7]={1426.37280, -1716.12439, 13.38281}, 
[8]={1315.06909, -1656.43799, 13.38281}, 
[9]={1359.06250, -1432.39734, 13.38281}, 
[10]={1169.82983, -1392.34473, 13.41728}, 
[11]={930.76508, -1392.92627, 13.26561}, 
[12]={815.24756, -1317.91345, 13.44460}, 
[13]={585.04199, -1320.53748, 13.40609}, 
[14]={526.99365, -1624.20361, 16.63225}, 
} 

Link to comment

там и был исправленный код с описанием. просто тебе тупо насрать, это же "ерунда через --".

пример:

как минимум 2 РАЗА было сказано, что "tostring(z)-1" — бред, tostring() там не нужен.

что изменилось? НИЧЕГО. или тебе непонятно, что tostring — это конвертирование в строку?

и что вычитание числа из строки работать не будет?

Link to comment

1.В аргументах функции createMarker должно быть значение число , а не строка ( на вики написано ).

2.Ты не можешь использовать таблицу если та например на сервере , а хочешь получить на клиенте.

Т.е вернёт nil.

3.В твоём случае чтобы получить случайную строку надо:

math.random( #busTable )  

Мы знаем таблицу на этой строке , теперь надо получить значение из этой таблицы которая находится на этой строке по индексу.

busTable[ строка которую мы знаем ][1]

Грубо говоря мы вызываем таблицу и получаем оттуда данные по индексу.

Если и это не понятно то:

Вызываем таблицу,

Номер строки,

Номер индекса.

Пример

busTable[1][1] -- >2007.65198 

Пример 2

local t = { 
    [1] = { 1,2,3 } 
} 
  
print( t[1][3] ) -- Вернёт число 3 
  

Вот ещё примеры:

t = { 
    [5] = { 
        [2] = { 
            [1] = 1 
        } 
    } 
} 
  
print( t[5][2][1] ) --> 1 

t = { 
    [5] = { 
        [2] = { 
            [1] = 1 
        } 
    }, 
    [6] = { 
        [2] = { 
            [1] = 2 
        } 
    }        
} 
for i = 1,10 do 
    local row = math.random( 5,6 ) 
    print( t[row][2][1] ) --> 1 или 2 ( случайное значение ) 
end 

В твоём случае всего 3 индекса в каждой строке.

busTable[ переменная ( номер строки которую мы знаем ) ][1] ,busTable[ переменная ( номер строки которую мы знаем ) ][2],busTable[ переменная ( номер строки которую мы знаем ) ][3]

Код:

local busTable = { 
    [1]={2007.65198, -1648.86047, 13.41406}, 
    [2]={1825.22791, -1635.03711, 13.38281}, 
    [3]={1855.01685, -1430.47449, 13.39063}, 
    [4]={1732.81580, -1296.87122, 13.44294}, 
    [5]={1473.19226, -1295.77124, 13.48315}, 
    [6]={1443.60376, -1498.26660, 13.37650}, 
    [7]={1426.37280, -1716.12439, 13.38281}, 
    [8]={1315.06909, -1656.43799, 13.38281}, 
    [9]={1359.06250, -1432.39734, 13.38281}, 
    [10]={1169.82983, -1392.34473, 13.41728}, 
    [11]={930.76508, -1392.92627, 13.26561}, 
    [12]={815.24756, -1317.91345, 13.44460}, 
    [13]={585.04199, -1320.53748, 13.40609}, 
    [14]={526.99365, -1624.20361, 16.63225}, 
} 
  
addEvent( "rob_set_location",true ) 
addEventHandler( "rob_set_location",root, 
    function ( x, y, z ) 
        local row = math.random( #busTable ) 
        markerrob = createMarker( busTable[ row ][1], busTable[ row ][2], busTable[ row ][3] - 1, "cylinder", 3.5, 255, 0, 0, 170 ) 
        blip = createBlipAttachedTo( markerrob, 32, 2, 0, 0, 0, 117 ) 
        addEventHandler( "onClientMarkerHit",markerrob,onBusStopHit ) 
    end 
) 

Обновил.

Я не мастер объяснять что-либо. :)

Link to comment

Т.е

Чтобы запилить рандомный спавн маркеров надо юзать функцию на сервере?

Я так понимаю

И в итогде не понял всё до конца.Как создать маркер используя из этой строки нашу переменную?

Типо createMarker( переменная,переменная2,переменная3,"cylinder", 2.3, 255, 0, 0, 117 )?

...

Link to comment

В твоём случае всего 3 индекса в каждой строке.

busTable[ переменная ( номер строки которую мы знаем ) ][1] ,busTable[ переменная ( номер строки которую мы знаем ) ][2],busTable[ переменная ( номер строки которую мы знаем ) ][3]

и зачем тогда x,y,z которые передавались в эту функцию через эвент "rob_set_location"?

и да, http://pgl.yoyo.org/luai/i/unpack

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

короче пошел я из этого топика.

Link to comment

Скрипт не работает,пишет в дебаге:

На строке 22.

attemp to index field"?"

Вот 2 строки:

  local row = robbingTable[ math.random( #robbingTable ) ] 
        markerrob = createMarker( robbingTable[ row ][1], robbingTable[ row ][2], robbingTable[ row ][3] - 1, "cylinder", 3.5, 255, 0, 0, 170 ) 

Link to comment
Обновил пост :/

Писал уже.

Легче было дать код,щас попытаюсь сделать так как вы написали.

Тоесть:

  
НазваниеТаблицы = { 
     [5] = {Коорды маркера? 
        [2] = {Тут тоже? 
            [1] = 1 
        } 
    }, 
    [6] = { 
        [2] = { 
            [1] = 2 
        } 
    }        
} 
for i = 1,10 do 
    local row = math.random( 5,6 ) 
    print( t[row][2][1] ) --> 1 или 2 ( случайное значение ) 
end 

Link to comment

Это примеры чтобы вы поняли .

Таблица у вас есть :/

local busTable = { 
    [1]={2007.65198, -1648.86047, 13.41406}, 
    [2]={1825.22791, -1635.03711, 13.38281}, 
    [3]={1855.01685, -1430.47449, 13.39063}, 
    [4]={1732.81580, -1296.87122, 13.44294}, 
    [5]={1473.19226, -1295.77124, 13.48315}, 
    [6]={1443.60376, -1498.26660, 13.37650}, 
    [7]={1426.37280, -1716.12439, 13.38281}, 
    [8]={1315.06909, -1656.43799, 13.38281}, 
    [9]={1359.06250, -1432.39734, 13.38281}, 
    [10]={1169.82983, -1392.34473, 13.41728}, 
    [11]={930.76508, -1392.92627, 13.26561}, 
    [12]={815.24756, -1317.91345, 13.44460}, 
    [13]={585.04199, -1320.53748, 13.40609}, 
    [14]={526.99365, -1624.20361, 16.63225}, 
} 

Прочтите внимательно тот пост :/

Link to comment

Таблица у нас есть,значит,нам надо извлечь рандомное значение из этой таблицы,как Я понял сделать это можно так:

local busTable = { 
    [1]={2007.65198, -1648.86047, 13.41406}, 
    [2]={1825.22791, -1635.03711, 13.38281}, 
    [3]={1855.01685, -1430.47449, 13.39063}, 
    [4]={1732.81580, -1296.87122, 13.44294}, 
    [5]={1473.19226, -1295.77124, 13.48315}, 
    [6]={1443.60376, -1498.26660, 13.37650}, 
    [7]={1426.37280, -1716.12439, 13.38281}, 
    [8]={1315.06909, -1656.43799, 13.38281}, 
    [9]={1359.06250, -1432.39734, 13.38281}, 
    [10]={1169.82983, -1392.34473, 13.41728}, 
    [11]={930.76508, -1392.92627, 13.26561}, 
    [12]={815.24756, -1317.91345, 13.44460}, 
    [13]={585.04199, -1320.53748, 13.40609}, 
    [14]={526.99365, -1624.20361, 16.63225}, 
} 
for i = 1,10 do 
    local row = math.random( 1,14 )--Эта функция-даёт рандомное значение,мне надо использовать её. 
    print( busTable[row][1][14] ) --> 1 или 2 ( случайное значение )-Эта функция только 1 или 14 
end 
  

Правильно Я понимаю?

Link to comment

Вы сами не знаете что вы написали ...

Рабочий вариант:

local busTable = { 
    [1]={2007.65198, -1648.86047, 13.41406}, 
    [2]={1825.22791, -1635.03711, 13.38281}, 
    [3]={1855.01685, -1430.47449, 13.39063}, 
    [4]={1732.81580, -1296.87122, 13.44294}, 
    [5]={1473.19226, -1295.77124, 13.48315}, 
    [6]={1443.60376, -1498.26660, 13.37650}, 
    [7]={1426.37280, -1716.12439, 13.38281}, 
    [8]={1315.06909, -1656.43799, 13.38281}, 
    [9]={1359.06250, -1432.39734, 13.38281}, 
    [10]={1169.82983, -1392.34473, 13.41728}, 
    [11]={930.76508, -1392.92627, 13.26561}, 
    [12]={815.24756, -1317.91345, 13.44460}, 
    [13]={585.04199, -1320.53748, 13.40609}, 
    [14]={526.99365, -1624.20361, 16.63225}, 
} 
  
addEvent( "rob_set_location",true ) 
addEventHandler( "rob_set_location",root, 
    function ( x, y, z ) 
        local row = math.random( #busTable ) 
        markerrob = createMarker( busTable[ row ][1], busTable[ row ][2], busTable[ row ][3] - 1, "cylinder", 3.5, 255, 0, 0, 170 ) 
        blip = createBlipAttachedTo( markerrob, 32, 2, 0, 0, 0, 117 ) 
        addEventHandler( "onClientMarkerHit",markerrob,onBusStopHit ) 
    end 
) 

Учите Lua

viewtopic.php?f=141&t=32458

local busTable = { 
    [1]={2007.65198, -1648.86047, 13.41406}, 
    [2]={1825.22791, -1635.03711, 13.38281}, 
    [3]={1855.01685, -1430.47449, 13.39063}, 
    [4]={1732.81580, -1296.87122, 13.44294}, 
    [5]={1473.19226, -1295.77124, 13.48315}, 
    [6]={1443.60376, -1498.26660, 13.37650}, 
    [7]={1426.37280, -1716.12439, 13.38281}, 
    [8]={1315.06909, -1656.43799, 13.38281}, 
    [9]={1359.06250, -1432.39734, 13.38281}, 
    [10]={1169.82983, -1392.34473, 13.41728}, 
    [11]={930.76508, -1392.92627, 13.26561}, 
    [12]={815.24756, -1317.91345, 13.44460}, 
    [13]={585.04199, -1320.53748, 13.40609}, 
    [14]={526.99365, -1624.20361, 16.63225}, 
} 
for i = 1,10 do 
    local row = math.random( 1,14 )--Эта функция-даёт рандомное значение,мне надо использовать её. 
    print( busTable[row][1][14] ) --> 1 или 2 ( случайное значение )-Эта функция только 1 или 14 
end 
  

Не существует в таблице 14 индекса ..

Link to comment
Вы сами не знаете что вы написали ...

Рабочий вариант:

local busTable = { 
    [1]={2007.65198, -1648.86047, 13.41406}, 
    [2]={1825.22791, -1635.03711, 13.38281}, 
    [3]={1855.01685, -1430.47449, 13.39063}, 
    [4]={1732.81580, -1296.87122, 13.44294}, 
    [5]={1473.19226, -1295.77124, 13.48315}, 
    [6]={1443.60376, -1498.26660, 13.37650}, 
    [7]={1426.37280, -1716.12439, 13.38281}, 
    [8]={1315.06909, -1656.43799, 13.38281}, 
    [9]={1359.06250, -1432.39734, 13.38281}, 
    [10]={1169.82983, -1392.34473, 13.41728}, 
    [11]={930.76508, -1392.92627, 13.26561}, 
    [12]={815.24756, -1317.91345, 13.44460}, 
    [13]={585.04199, -1320.53748, 13.40609}, 
    [14]={526.99365, -1624.20361, 16.63225}, 
} 
  
addEvent( "rob_set_location",true ) 
addEventHandler( "rob_set_location",root, 
    function ( x, y, z ) 
        local row = math.random( #busTable ) 
        markerrob = createMarker( busTable[ row ][1], busTable[ row ][2], busTable[ row ][3] - 1, "cylinder", 3.5, 255, 0, 0, 170 ) 
        blip = createBlipAttachedTo( markerrob, 32, 2, 0, 0, 0, 117 ) 
        addEventHandler( "onClientMarkerHit",markerrob,onBusStopHit ) 
    end 
) 

Учите Lua

viewtopic.php?f=141&t=32458

local busTable = { 
    [1]={2007.65198, -1648.86047, 13.41406}, 
    [2]={1825.22791, -1635.03711, 13.38281}, 
    [3]={1855.01685, -1430.47449, 13.39063}, 
    [4]={1732.81580, -1296.87122, 13.44294}, 
    [5]={1473.19226, -1295.77124, 13.48315}, 
    [6]={1443.60376, -1498.26660, 13.37650}, 
    [7]={1426.37280, -1716.12439, 13.38281}, 
    [8]={1315.06909, -1656.43799, 13.38281}, 
    [9]={1359.06250, -1432.39734, 13.38281}, 
    [10]={1169.82983, -1392.34473, 13.41728}, 
    [11]={930.76508, -1392.92627, 13.26561}, 
    [12]={815.24756, -1317.91345, 13.44460}, 
    [13]={585.04199, -1320.53748, 13.40609}, 
    [14]={526.99365, -1624.20361, 16.63225}, 
} 
for i = 1,10 do 
    local row = math.random( 1,14 )--Эта функция-даёт рандомное значение,мне надо использовать её. 
    print( busTable[row][1][14] ) --> 1 или 2 ( случайное значение )-Эта функция только 1 или 14 
end 
  

Не существует в таблице 14 индекса ..

Спасибо,поучу.

P.S

Всё работает,но,Я спрашивал не только для этого,щас разбираюсь в этом...

Вроде вот это

  local row = math.random( #busTable ) 

-Достаёт рандомное значение из таблицы busTable,а row это вроде строка?Если так,то-мы извлекаем рандомную строчку из нашей таблицы.Если правильно-пожалуйста,напишите,мне очень важно понять это.

P.SS

Element маркер и блип не уничтожается,пишет что то с Triggerom

triggerServerEvent("rob_finish",client) 

Вот сервер(Та строка):

addEvent("rob_finish",true) 
addEventHandler("rob_finish",rootElement, 

P.SSS

Сделал так же на ресурсе train,чтобы закрепить...

Link to comment

нужно указывать минимум и максимум => курим мануал по луа

local row = math.random( 1, #busTable ) 

в таблице с подтаблицами не надо указывать индексы

local busTable = { 
    {2007.65198, -1648.86047, 13.41406}, 
    {1825.22791, -1635.03711, 13.38281}, 
    {1855.01685, -1430.47449, 13.39063}, 
    -- .. 
} 

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