Kernell Posted December 22, 2014 Share Posted December 22, 2014 Kernell, спасибо. С помощью второго варианта удалось приаттачить объект к элементу игрока. Но вот, например, я хотел чтобы таким образом приаттаченный дочерний объект удалялся при исчезновении родительского элемента, например при выходе игрока из игры. Как бы игрок вышел - его элемента больше не существует, а по логике элементов МТА, и дочерние должны исчезать (в данном случае мой объект). Но вот почему-то у меня этого не происходит, при выходе из игры объект не удаляется. Что может быть не так? При выходе игрока МТА не применяет функции уничтожения элементов. Используй destroyElement, чтобы вручную удалить дочерние элементы. function onPlayerQuit() destroyElement( source ); end addEventHandler( "onPlayerQuit", root, onPlayerQuit ); Link to comment
AMARANT Posted December 22, 2014 Share Posted December 22, 2014 При выходе игрока МТА не применяет функции уничтожения элементов. Используй destroyElement, чтобы вручную удалить дочерние элементы. function onPlayerQuit() destroyElement( source ); end addEventHandler( "onPlayerQuit", root, onPlayerQuit ); Я этого как раз и не знал... В общем, тогда так и сделаю как ты говоришь. Еще раз спасибо за помощь. Link to comment
H1TM4N Posted December 23, 2014 Share Posted December 23, 2014 два изображения, какой функцией одно изображение замещается другим, тобишь делает его поверх второго? Link to comment
AMARANT Posted December 23, 2014 Share Posted December 23, 2014 В смысле поверх? Если поверх, то рисуй той же функцией что и первое. Если заменить например гуишное изображение, то https://wiki.multitheftauto.com/wiki/GuiStaticImageLoadImage. Link to comment
FranklinRoosevelt Posted December 23, 2014 Share Posted December 23, 2014 два изображения, какой функцией одно изображение замещается другим, тобишь делает его поверх второго? Что первое вывелось, то и сзади, как я знаю. Link to comment
Kenix Posted December 23, 2014 Share Posted December 23, 2014 два изображения, какой функцией одно изображение замещается другим, тобишь делает его поверх второго? аргумент postGUI - поверх всего, либо по порядку как слои. dxDrawImage -- 1 слой dxDrawImage -- 2 слой Link to comment
YND Posted December 24, 2014 Share Posted December 24, 2014 (edited) Продублирую тут, так как в "Примеры" никто, видимо, не заходит. Нужно заменить текстуру объекта: addEventHandler ( 'onClientResourceStart', resourceRoot, function() txd_deletedAmmo = engineLoadTXD ( "txd/2notherbuildsfe.txd" ) engineImportTXD ( txd_deletedAmmo, 18034 ) if engineImportTXD ( txd_deletedAmmo, 18041 ) == true then outputChatBox "Текстура загрузилась" else outputChatBox "ТЕКСТУРА НЕ ЗАГРУЗИЛАСЬ" end end ) <meta> <info author="noob" name="ammoResource" version="1.0" type="script" /> <oop>true</oop> <script src="buyammo.lua" type="client" /> <file src="txd/2notherbuildsfe.txd" type="client" /> </meta> Рядом с "meta.xml" папка "txd", в которой файл "2notherbuildsfe.txd". В чат выводит, что "Текстура загрузилась", но на самом деле изменений нет. id проверял. Что я делаю не так? UPD: что за.., ничего не работает: addEventHandler("onResourceStart", resourceRoot, function() for _, ammoSeller in ipairs ( getElementsByType ( "ped" ) ) do outputChatBox (getElementData(ammoSeller, "id")) --выводит id ammoSeller'a setPedAnimation ( ammoSeller, "SHOP", "SHP_Serve_Idle" ) end end ) Файл серверный, id педа выводит, а анимация не применяется, ровно как и оружие не дается.. Edited December 26, 2014 by Guest Link to comment
FranklinRoosevelt Posted December 25, 2014 Share Posted December 25, 2014 Всем привет, у меня вопрос как узнать количество разных элементов в таблице, то есть вот в данному случае их 3. asd = 123 qwe = 546 rty = 163 saved = {[asd] = 1, [qwe] = 2, [rty] = 3} альтернативный пример: save = {1,3,5} print(#save) --> 3 Link to comment
Kernell Posted December 25, 2014 Share Posted December 25, 2014 Всем привет, у меня вопрос как узнать количество разных элементов в таблице, то есть вот в данному случае их 3. asd = 123 qwe = 546 rty = 163 saved = {[asd] = 1, [qwe] = 2, [rty] = 3} альтернативный пример: save = {1,3,5} print(#save) --> 3 function table.count( var ) local count = 0; for _ in pairs( var ) do count = count + 1; end return count; end Link to comment
FranklinRoosevelt Posted December 25, 2014 Share Posted December 25, 2014 Спасибо, я что-то не догадался к такому. Link to comment
YND Posted December 26, 2014 Share Posted December 26, 2014 addEventHandler("onResourceStart", resourceRoot, function() for _, ammoSeller in ipairs ( getElementsByType ( "ped" ) ) do outputChatBox (getElementData(ammoSeller, "id")) --выводит id ammoSeller'a setPedAnimation ( ammoSeller, "SHOP", "SHP_Serve_Idle" ) end end ) Файл серверный, id педа выводит, а анимация не применяется, ровно как и оружие не дается.. Помогите же Если до вызова функции я не видел в лицо педа, независимо от задержки её выполнения/рестарта ресурса, то к нему анимация не применяется. Почему так? Что делать? Не выполнять же эту функцию, когда кто-нибудь увидит этого педа, а потом отменять евент, ерунда же.. Link to comment
AMARANT Posted December 27, 2014 Share Posted December 27, 2014 Потому что полной синхронизации анимации в МТА нет. Если анимация проигралась не в стриме игрока, то он ее не увидит. Поэтому нужно писать собственную систему анимаций, и проигрывать их в нужный момент когда надо. И кстати, то что ты считаешь ерундой как раз-таки выход из ситуации. Только эвент не нужно отменять, а просто проверять в стриме элемент и если он подходящий, вешать на него анимку. Link to comment
Arisu Posted December 27, 2014 Share Posted December 27, 2014 addEventHandler("onResourceStart", resourceRoot, function() for _, ammoSeller in ipairs ( getElementsByType ( "ped" ) ) do outputChatBox (getElementData(ammoSeller, "id")) --выводит id ammoSeller'a setPedAnimation ( ammoSeller, "SHOP", "SHP_Serve_Idle" ) end end ) Файл серверный, id педа выводит, а анимация не применяется, ровно как и оружие не дается.. Помогите же Если до вызова функции я не видел в лицо педа, независимо от задержки её выполнения/рестарта ресурса, то к нему анимация не применяется. Почему так? Что делать? Не выполнять же эту функцию, когда кто-нибудь увидит этого педа, а потом отменять евент, ерунда же.. https://wiki.multitheftauto.com/wiki/On ... ntStreamIn Link to comment
YND Posted December 27, 2014 Share Posted December 27, 2014 Спасибо. Но если отменить эвент, то анимация один раз применится и больше эта функция никогда не вызовется; это же лучше, чем если она будет вызываться каждый раз, когда пед в стриме, ведь анимация все равно остается. Разве не так? function startPeds( ) if getElementType( source ) == "ped" then setPedAnimation( source, "SHOP", "SHP_Serve_Idle" ) removeEventHandler("onClientElementStreamIn", source, startPeds) end end addEventHandler("onClientElementStreamIn", resourceRoot, startPeds) И еще: есть ли вместо "resourceRoot" какой-нибудь "элемент-родитель", который указывал бы на всех педов ресурса? Чтобы заставить педа атаковать игрока, нужно ручками направлять прицел не игрока, пускать огонь и т.д.? Или есть какая-нибудь функция? Понял, ручками. Link to comment
AMARANT Posted December 27, 2014 Share Posted December 27, 2014 Спасибо. Но если отменить эвент, то анимация один раз применится и больше эта функция никогда не вызовется; это же лучше, чем если она будет вызываться каждый раз, когда пед в стриме, ведь анимация все равно остается. Разве не так? function startPeds( ) if getElementType( source ) == "ped" then setPedAnimation( source, "SHOP", "SHP_Serve_Idle" ) removeEventHandler("onClientElementStreamIn", source, startPeds) end end addEventHandler("onClientElementStreamIn", resourceRoot, startPeds) И еще: есть ли вместо "resourceRoot" какой-нибудь "элемент-родитель", который указывал бы на всех педов ресурса? Чтобы заставить педа атаковать игрока, нужно ручками направлять прицел не игрока, пускать огонь и т.д.? Или есть какая-нибудь функция? Понял, ручками. Насчет убирания эвента я вообще не понимаю зачем тебе это нужно. Сделай себе один такой ивент и прописывай там любые анимации на все случаи жизни для кого хочешь. Если ты переживаешь за оптимизацию, то я не думаю что это хоть как-то может нагрузить клиент. Это всего лишь событие, которое срабатывает исключительно при вхождении элемента в стрим, а не например рендер или пререндер, срабатывающие несколько раз в секунду. Что насчет второго, то resourceRoot и есть тот "элемент-родитель". Но если тебе нужны, например, все педы, то используй getRootElement() или root. Link to comment
YND Posted December 28, 2014 Share Posted December 28, 2014 Что в таком случае делать? isLineOfSightClear говорит, что все чисто, на внешний вид препятствий нет, но пули летят в стол. UPD: дело даже не в столе, он и впритык стреляет, но не попадает. Буду искать причину.. function sellerAim(player, ped) if getElementType(player) == "player" and getElementType(ped) == "ped" then local pedhp = getElementHealth ( ped ) if pedhp > 0 and (isPlayerDead(player) == false) then local x,y,z = getElementPosition( player ) local ex,ey,ez = getElementPosition( ped ) local isclear = isLineOfSightClear (ex, ey, ez+.5, x, y, z+.5, true, false, false, true, false, false, false) if (isclear == true) then if isPedDucked(player) then setPedAimTarget ( ped, x, y, z-.2 ) dxDrawLine3D (ex, ey, ez+.5, x, y, z-.2) else setPedAimTarget ( ped, x, y, z ) dxDrawLine3D (ex, ey, ez+.5, x, y, z+.5) end end setTimer ( sellerAim, 80, 1, player, ped ) else setPedControlState(getElementByID("Ammo1Seller"), "fire", false) end end end setPedAimTarget лучше вызывать с помощью setTimer (каждые n миллисекунд) или с помощью onClientPreRender? Насчет убирания эвента я вообще не понимаю зачем тебе это нужно. Сделай себе один такой ивент и прописывай там любые анимации на все случаи жизни для кого хочешь. Если ты переживаешь за оптимизацию, то я не думаю что это хоть как-то может нагрузить клиент. Это всего лишь событие, которое срабатывает исключительно при вхождении элемента в стрим, а не например рендер или пререндер, срабатывающие несколько раз в секунду.Что насчет второго, то resourceRoot и есть тот "элемент-родитель". Но если тебе нужны, например, все педы, то используй getRootElement() или root. Просто событие, по-идее, будет срабатывать для каждого элемента, а не только для педов (а уж потом в функции проверять, пед ли это), коих довольно-таки много. Link to comment
Jonathan.P Posted December 29, 2014 Share Posted December 29, 2014 Господа, нужен пример кода: Игрок нажимает какую либо клавишу => на экране начинает рендериться текст или png-картинка => по истечению определенного времени плавно исчезает. UPD: РЕШЕНО Link to comment
FranklinRoosevelt Posted January 3, 2015 Share Posted January 3, 2015 Всем привет, есть ли в lua функция которая округляет число к большему? Или надо делать что-то подобное: if math.ceil(newX) - newX > 0.5 then newX = math.floor(newX) else newX = math.ceil(newX) end Может кто-то знает более крутой способ? Link to comment
Memory Posted January 3, 2015 Share Posted January 3, 2015 https://wiki.multitheftauto.com/wiki/Math.round Link to comment
FranklinRoosevelt Posted January 4, 2015 Share Posted January 4, 2015 https://wiki.multitheftauto.com/wiki/Math.round Спасибо огромное. Link to comment
dex35 Posted January 4, 2015 Share Posted January 4, 2015 Ребята, подскажите пожалуйста, можно ли как-нибудь убрать TeamChat? Link to comment
The Creator Posted January 4, 2015 Share Posted January 4, 2015 Ребята, подскажите пожалуйста, можно ли как-нибудь убрать TeamChat? unbindKey Link to comment
Kernell Posted January 4, 2015 Share Posted January 4, 2015 Ребята, подскажите пожалуйста, можно ли как-нибудь убрать TeamChat? Отменить событие onPlayerChat когда пишут team message Link to comment
iAxel Posted January 6, 2015 Share Posted January 6, 2015 Ну крч, вот таблица: Table = { need = { {'Test1', 100}, {'Test2', 100} }, stat = { {'Test3', false}, {'Test4', false} }, item = { {'Test5', 0}, {'Test6', 0} } } Использую его так: for i, data in ipairs(Table.need) do source:setData(data[1], data[2]) end for i, data in ipairs(Table.stat) do source:setData(data[1], data[2]) end for i, data in ipairs(Table.item) do source:setData(data[1], data[2]) end Вопрос - можно как то использовать все в одном цикле? Если да то можно пример? Заранее благодарен! Link to comment
Kenix Posted January 6, 2015 Share Posted January 6, 2015 Ну крч, вот таблица: Table = { need = { {'Test1', 100}, {'Test2', 100} }, stat = { {'Test3', false}, {'Test4', false} }, item = { {'Test5', 0}, {'Test6', 0} } } Использую его так: for i, data in ipairs(Table.need) do source:setData(data[1], data[2]) end for i, data in ipairs(Table.stat) do source:setData(data[1], data[2]) end for i, data in ipairs(Table.item) do source:setData(data[1], data[2]) end Вопрос - можно как то использовать все в одном цикле? Если да то можно пример? Заранее благодарен! for _, v in pairs( Table ) do for _, v2 in pairs( v ) do source:setData( v2[ 1 ], v2[ 2 ] ); end end 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