Mc_Trekkie Posted February 17, 2012 Share Posted February 17, 2012 (edited) Итак,вот у меня есть вот это (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 February 17, 2012 by Guest Link to comment
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Спс. Функция мб и кривая,но,какая есть-такая есть) Ща попробую Не совсем понял. Как так создать маркер? Так? o_O markerrob = unpack(robbingTable[math.random(#robbingTable)], "cylinder", 255, 0, 0, 255 ) Link to comment
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Как то вы криво говорите,вот код сервера: 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
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 И что? Ничего не работает. Нельзя что ли объяснить где проблемма то? Или обязательно в скрипте через -- писать всякую ерунду? Link to comment
Aibo Posted February 17, 2012 Share Posted February 17, 2012 я уже всё объяснил. если для вас, мсье, это "ерунда через --" — я умываю руки. с таким отношением вам мануал по луа на шею, вики в зубы, и вперёд. Link to comment
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Ага,всё ООООООООчень понятно. Kenix или Kernell понятней объясняют всё. А вы-просто говорите что надо исправить,не говоря как это сделать,Я тоже так могу: Добавьте что -нибудь в обработчиков,сюда что-нибудь и др. Link to comment
Kenix Posted February 17, 2012 Share Posted February 17, 2012 Aibo всё правильно написал. Если вы не изучите луа и вики, то вы дальше не будете продвигаться. Я могу вам помочь исправить код , но это будет бессмысленно. Copy Paste вообщем. Link to comment
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Я понимаю,но иногда очень раздражает когда люди пытаются объяснить то,что Я не могу понять,если бы 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
Aibo Posted February 17, 2012 Share Posted February 17, 2012 там и был исправленный код с описанием. просто тебе тупо насрать, это же "ерунда через --". пример: как минимум 2 РАЗА было сказано, что "tostring(z)-1" — бред, tostring() там не нужен. что изменилось? НИЧЕГО. или тебе непонятно, что tostring — это конвертирование в строку? и что вычитание числа из строки работать не будет? Link to comment
Kenix Posted February 17, 2012 Share Posted February 17, 2012 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
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Т.е Чтобы запилить рандомный спавн маркеров надо юзать функцию на сервере? Я так понимаю И в итогде не понял всё до конца.Как создать маркер используя из этой строки нашу переменную? Типо createMarker( переменная,переменная2,переменная3,"cylinder", 2.3, 255, 0, 0, 117 )? ... Link to comment
Aibo Posted February 17, 2012 Share Posted February 17, 2012 В твоём случае всего 3 индекса в каждой строке. busTable[ переменная ( номер строки которую мы знаем ) ][1] ,busTable[ переменная ( номер строки которую мы знаем ) ][2],busTable[ переменная ( номер строки которую мы знаем ) ][3] и зачем тогда x,y,z которые передавались в эту функцию через эвент "rob_set_location"? и да, http://pgl.yoyo.org/luai/i/unpack но многоуважаемый автор, опять же, посчитал это тоже непонятным бредом. короче пошел я из этого топика. Link to comment
Kenix Posted February 17, 2012 Share Posted February 17, 2012 и зачем тогда x,y,z которые передавались в эту функцию через эвент "rob_set_location"? У меня тот же вопрос. Link to comment
MX_Master Posted February 17, 2012 Share Posted February 17, 2012 не буду читать все, но думаю таблицу координат нужно перенести в клиент, потому что маркер создаетсяя именно там Link to comment
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Скрипт не работает,пишет в дебаге: На строке 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
Kenix Posted February 17, 2012 Share Posted February 17, 2012 Ступил когда писал пост Обновил пост Link to comment
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Обновил пост Писал уже. Легче было дать код,щас попытаюсь сделать так как вы написали. Тоесть: НазваниеТаблицы = { [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
Kenix Posted February 17, 2012 Share Posted February 17, 2012 Это примеры чтобы вы поняли . Таблица у вас есть 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
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Таблица у нас есть,значит,нам надо извлечь рандомное значение из этой таблицы,как Я понял сделать это можно так: 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
Kenix Posted February 17, 2012 Share Posted February 17, 2012 Вы сами не знаете что вы написали ... Рабочий вариант: 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
Mc_Trekkie Posted February 17, 2012 Author Share Posted February 17, 2012 Вы сами не знаете что вы написали ...Рабочий вариант: 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
MX_Master Posted February 17, 2012 Share Posted February 17, 2012 нужно указывать минимум и максимум => курим мануал по луа 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now