WilliJ Posted January 16, 2012 Share Posted January 16, 2012 Я создаю маркер и аттачу его к чему мне нужно, например, к машине. Скрипт вида function abcdefgh () for i,v in ipairs(getElementsByType("vehicle")) do if getElementModel(v) == 411 then local arrowMarker = createMarker ( x, y, z, "arrow", size, r, g, b, alpha ) attachElements ( arrowMarker, v, x, y, z ) end end end addCommandHandler ( "test1", abcdefgh ) Как вы поняли, за место x, y, z, r, g, b, alpha и size - цифры. Как мне убрать этот маркер? destroyElement, destroyElements, destroyMarker, setAlpha(чтобы не видно было) - Не работают. Всё время Warrning. Всё перепробовал. Делаю по Wiki. Так же нужно узнать, какая нужна функция(?), чтобы после 1-ого нажатия клавиши действие начиналось и продолжалось, а после повторного - прекращалось? (про таймеры я изучаю). Надо именно на одну кнопку или на один и тот же CommanHandler назначит действие) Помогите, пожалуйста. Link to comment
Kernell Posted January 16, 2012 Share Posted January 16, 2012 Я создаю маркер и аттачу его к чему мне нужно, например, к машине.Скрипт вида function abcdefgh () for i,v in ipairs(getElementsByType("vehicle")) do if getElementModel(v) == 411 then local arrowMarker = createMarker ( x, y, z, "arrow", size, r, g, b, alpha ) attachElements ( arrowMarker, v, x, y, z ) end end end addCommandHandler ( "test1", abcdefgh ) Как вы поняли, за место x, y, z, r, g, b, alpha и size - цифры. Как мне убрать этот маркер? destroyElement, destroyElements, destroyMarker, setAlpha(чтобы не видно было) - Не работают. Всё время Warrning. Всё перепробовал. Делаю по Wiki. Вы создаёте маркер, заносите его в переменную у которой область видимости в пределах блока с условием "if getElementModel(v) == 411 then". Т.е. за пределами переменная с этим именем = nil. Поэтому два варианта - 1. заносить в массив игрока или 2. удалять по getAttachedElements Так же нужно узнать, какая нужна функция(?), чтобы после 1-ого нажатия клавиши действие начиналось и продолжалось, а после повторного - прекращалось? (про таймеры я изучаю). Надо именно на одну кнопку или на один и тот же CommanHandler назначит действие) Помогите, пожалуйста. actions = {}; local function toggle_action( player, key, state ) actions[ player ] = not actions[ player ]; if actions[ player ] then -- начать действие else -- закончить действие end end bindKey( player, "F1", "up" toggle_action ); Link to comment
N1kS Posted January 17, 2012 Share Posted January 17, 2012 function blowVehAfterTp() local localPlayer = getLocalPlayer() local playerVehicle = getPedOccupiedVehicle(localPlayer) local playerInVehicle = isPedInVehicle(localPlayer) local vehOnGroundCheck = isVehicleOnGround(playerVehicle) local playerVehicleIsBlown = isVehicleBlown(playerVehicle) if (spectatorMode == true) and (playerInVehicle == true) and (vehOnGroundCheck) then blowVehicle(playerVehicle) --triggerEvent("blowVehAfterBlow", getRootElement()) --debug outputChatBox("blow - ok") --debug end else end end Нужно повторять эту функцию, пока (local playerVehicleIsBlown) не станет true. Абсолютно не разбираюсь в repeat until, отредактируйте пожалуйста, кому не лень. Таймер не подходит. Link to comment
MX_Master Posted January 17, 2012 Author Share Posted January 17, 2012 язык сам по себе простой, иди покури учебник, там примеры есть для repeat Link to comment
N1kS Posted January 17, 2012 Share Posted January 17, 2012 язык сам по себе простой, иди покури учебник, там примеры есть для repeat Но ведь лучший пример - это практика) Я же не спрашивал - просто данный язык или нет, я просто попросил отредактировать, кому не лень. Сам делаю вот так: function blowVehAfterTp() local localPlayer = getLocalPlayer() local playerVehicle = getPedOccupiedVehicle(localPlayer) local playerInVehicle = isPedInVehicle(localPlayer) local vehOnGroundCheck = isVehicleOnGround(playerVehicle) local playerVehicleIsBlown = isVehicleBlown(playerVehicle) repeat if (spectatorMode == true) and (playerInVehicle == true) and (vehOnGroundCheck) then blowVehicle(playerVehicle) --triggerEvent("blowVehAfterBlow", getRootElement()) --debug outputChatBox("blow - ok") --debug end else end until (playerVehicleIsBlown == true) end addEvent("onVehTp", true) addEventHandler("onVehTp", getRootElement(), blowVehAfterTp) Дебаг ругается на 10 строку, а в 10 строке у нас тригер: triggerEvent("onVehTp", getRootElement()) Ошибка: \client.lua:10 Aborting, infinite running script in spectator Link to comment
MX_Master Posted January 17, 2012 Author Share Posted January 17, 2012 твоя петелька слишком частая и подвешивает клиент, поэтому клиент ее оборвал Link to comment
N1kS Posted January 17, 2012 Share Posted January 17, 2012 твоя петелька слишком частая и подвешивает клиент, поэтому клиент ее оборвал Да это я понял, спасибо) Мне нужно повторять функцию, пока i не станет 1, но дебаг говорит, что это сильно долго... Что делать? Link to comment
MX_Master Posted January 17, 2012 Author Share Posted January 17, 2012 таймер же не подходит Link to comment
MX_Master Posted January 18, 2012 Author Share Posted January 18, 2012 то, что повторяется с огромной частотой больше 5 сек, то будет автоматически остановлено. Автозащита такая. ну максимум можно поставить выполнение этой функции в событиях onClientRender / onClientPreRender, / onClientHUDRender Link to comment
WilliJ Posted January 18, 2012 Share Posted January 18, 2012 Kernell - Извините, пардон, но ничего не получается. Там пример слишком большой и запутанный. Я, конечно, не прошу, чтобы за меня всё сделали, но можно малюсенький пример? Link to comment
Kernell Posted January 19, 2012 Share Posted January 19, 2012 Так я и дал малюсенький пример. Может тогда по конкретнее скажите что хотите? Link to comment
WilliJ Posted January 20, 2012 Share Posted January 20, 2012 А. Я имел ввиду про getAttachedElement... Как мне из моего примера удалить маркер? Мой чертеж, как я осмысливаю код, вида: function delete_marker () for i,marker in ipairs(getElementsByType("corona")) do if getElementByType(corona) == coronaMarker then local arrowMarker = destroyElements detachElements ( arrowMarker ) end end end addCommandHandler ( "deletemarker", delete_marker ) Что-то примерно такое, чтобы как Вы сказали, по таблице удаляло. Можно и нужно ли в одном скрипте писать и создание и удаление элементов? Ещё, я думаю, можно было-бы создать после Главного элемента один потомок и уже к нему при-аттачивать другие потомки. И удалять тогда один главный потомок легче будет. Но проблема в том, что у меня ни как не получается удали хоть маркер... Создать легко, а удалить - трудно. Link to comment
Kernell Posted January 20, 2012 Share Posted January 20, 2012 Строка 3: переменной corona не существует, возможно Вы имели ввиду marker? getElementsByType возвращает строку, а Вы сравниваете результат функции с какой-то непонятной переменной. Зачем Вам проверять тип если вы на строке 2 берёте все элементы этого типа? Строка 4: функции destroyElements не существует. Есть только destroyElement и она возвращает bool (true - успешно, false - не успешно). Функции вызываются круглыми скобками, внутри скобок передаются аргументы (их ещё называют "параметры"). Конкретно этой функции, в аргумент нужно положить элемент, в Вашем случае это marker. Строка 5: детачить уже нечего, элемент удалён. Создать легко, а удалить - трудно. Просто не нужно терять переменную. P.S. Соблюдайте отступы в коде. Link to comment
WilliJ Posted January 20, 2012 Share Posted January 20, 2012 Ура! Отлично Работает! Спасибо Огромное! Код вида: function delete_marker () for i,marker in ipairs(getElementsByType("marker")) do local arrowMarker = destroyElement(marker) end end addCommandHandler ( "deletemarker", delete_marker ) Ещё раз огромное Спасибо. Не всегда получается самому сделать что-то без профессионалов. Link to comment
KruGoZor Posted January 20, 2012 Share Posted January 20, 2012 (edited) Ребят, поясните по хардкору, как показать пользователю GUI когда он становится на маркер ? Вообще с гуём очень всё непонятно. Может туториал есть какой(кроме того что на вики)? Например я делаю так: на клиенте function GUISpawnVehicle(showCursorParam,guiSetVisibleParam) showCursor(showCursorParam) guiSetVisible(guiSetVisibleParam) MainWindow = guiCreateWindow(0.10, 0.10, 0.25, 0.40, "Selecione um veiculo", true) guiSetVisible(false) outputChatBox ("Должно появится окно"),player) end addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), function () GUISpawnVehicle() outputChatBox("sdfsdfsdfsdf") if (MainWindow ~= nil) then guiSetVisible(MainWindow, true) end showCursor(true) guiSetInputEnabled(true) end на сервере BicycleRent = createMarker(1707.8544921875, -1849.412109375, 12.5, "cylinder", 2, 255, 0, 255, 150) function GUISpawnVehicle(player) triggerClientEvent("CallGUISpawnVehicle", player,true,true) end addEventHandler("onMarkerHit", BicycleRent, GUISpawnVehicle) Что не так*? ____________________ Вопрос закрыт использовал onClientMarkerHit Edited January 23, 2012 by Guest Link to comment
Arimance Posted January 25, 2012 Share Posted January 25, 2012 Вечер добрый Поведайте пожалуйста, каким образом можно выводить, например dxDrawRectangle на любом разрешении монитора в одном и том же месте? К примеру, это создано на моём ноутбуке с разрешением 1600x900, в правом нижнем углу экрана. dxDrawRectangle(1231.0,693.0,190.0,41.0,tocolor(0,0,0,100),false) На другом разрешении rectangle отображается совершенно неровно, ясное дело. Пробовал совершать манипуляции с guiGetScreenSize() по такому типу: local x,y = guiGetScreenSize() dxDrawRectangle(x-(x-1231.0),y-(y-693.0),190.0,41.0,tocolor(0,0,0,100),false) Не помогло Link to comment
MX_Master Posted January 26, 2012 Author Share Posted January 26, 2012 Вечер добрый Поведайте пожалуйста, каким образом можно выводить, например dxDrawRectangle на любом разрешении монитора в одном и том же месте? К примеру, это создано на моём ноутбуке с разрешением 1600x900, в правом нижнем углу экрана. dxDrawRectangle(1231.0,693.0,190.0,41.0,tocolor(0,0,0,100),false) На другом разрешении rectangle отображается совершенно неровно, ясное дело. Пробовал совершать манипуляции с guiGetScreenSize() по такому типу: local x,y = guiGetScreenSize() dxDrawRectangle(x-(x-1231.0),y-(y-693.0),190.0,41.0,tocolor(0,0,0,100),false) Не помогло local nBaseWidth, nBaseHeight = 1600, 900 -- базовые размеры экрана local nCurrentWidth, nCurrentHeight = guiGetScreenSize() -- текущие размеры экрана -- множители local nWidthMult, nHeightMult = nCurrentWidth / nBaseWidth, nCurrentHeight / nBaseHeight dxDrawRectangle( 1231.0 * nWidthMult, 693.0 * nHeightMult, 190.0 * nWidthMult, 41.0 * nHeightMult, tocolor(0,0,0,100), false ) Link to comment
StUNt71 Posted January 29, 2012 Share Posted January 29, 2012 Как можно узнать index элемента? Link to comment
MX_Master Posted January 29, 2012 Author Share Posted January 29, 2012 Как можно узнать index элемента? смотря какой индекс, поясни подробнее шо нада (: Link to comment
StUNt71 Posted January 29, 2012 Share Posted January 29, 2012 getElementByIndex есть, а getElementIndex нету. Не охото делать так: function getElementIndex(element) for index, element2 in ipairs(getElementByType(getElementType(element)) do if element2 == element then return index end end end Link to comment
MX_Master Posted January 29, 2012 Author Share Posted January 29, 2012 такой фуньки нет, потому что она никому не нужна. А если нужна, то вот ты сам и написал. Так зачем индекс-то тебе? Link to comment
StUNt71 Posted January 29, 2012 Share Posted January 29, 2012 В список скоребоард написать. Я просто сделал как цикл который перебирает команды и добавляет ячейку, а затем перебирает всех игроков в команде getPlayersInTeam (как-то так называется). Мне кажется в цикле for index, player in ipairs(getPlayersInTeam) do индекс будет по положениу в таблице игроков в команде, а не индекс среди всех игрково. Link to comment
MX_Master Posted January 29, 2012 Author Share Posted January 29, 2012 Индекс среди всех игроков можно подсчитывать вручную скриптом при входах/выходах с сервера. Потом, когда надо, узнавать его. 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