-
Posts
38 -
Joined
-
Last visited
CharlySHOMAN's Achievements
Rat (9/54)
4
Reputation
-
Вопрос чисто по Lua (не знаю, где еще можно спросить, кроме как не здесь) Пример: у меня в функцию приходит таблица data = { 'a', 'b', 'c', 'd', 'e' } в качестве аргумента. Для удобства я делаю следующее: local var1 = data[1] local var2 = data[2] local var3 = data[3] local var4 = data[4] local var5 = data[5] Вопрос состоит в следующем: при выходе из этой функции, что случится с переменными var1-5 и таблицей data? Будут ли они храниться в окружении данной функции или уничтожатся? Если они будут храниться, то не будет ли расточительством делать переменные var1-5? (т.к. это по сути копии таблицы data). Просто мне удобно использовать var1-5 (т.к. легче обращаться к значениям по имени переменной, а не по индексу в в таблице data), но в то же время опасаюсь, что это будет лишним засорением памяти. // Появилась ещё идея, после ввода переменных var1-5 выполнить код: data = nil. Что скажете?
-
Слабо понял, в чем проблема (потому что объяснять надо понятнее). 1. По поводу менюшки - я попробовал у себя запустить, у меня запустилось. Ты должен обязательно на авто подъехать к маркеру. 2. Про какой спидометр речь идёт - я не понял. Скорее всего у тебя это не работает, потому что как-то конфликтует с другими скриптами. Попробуй посмотреть отладку ( \MTA San Andreas 1.5\MTA\logs\clientscript.txt ). И ещё не понятно, откуда берется таблица fuelMarkers (может у тебя этой таблицы нет, проверь).
-
Эту функцию не рекомендуется вроде как использовать. Вместо этого используй - setPlayerHudComponentVisible("all", false) Помести это в клиентский скрипт. Можешь прям в начало любого скрипта, тогда этот код будет выполняться при присоединении клиента к серверу и худ будет сразу же отключаться. Можешь поместить этот код в функцию и запускать её например при каким-то событии.
-
setElementModel может менять модель игроков, транспорта и объектов, но не пикапов. Попробуй использовать setPickupType
-
hm_gui это таблица из кнопок? Я тут посмотрел твой первый пост. Там ты скрываешь кнопку guiSetVisible (buyButton, false ). От скрытой кнопки разве будет запускаться событие? Вроде как нет. Может в этом то и проблема, то что кнопки все скрыты. Вообще событие onClientGUIClick запускается? Если нет, то проблема скорее всего в этих скрытых кнопках
-
В районе гетто слышу какие-то выстрелы постоянно. Там никто из игроков не стреляет (100%). Появляются эти выстрелы рандомно. Может кто-нибудь знает, в чём проблема? Я спрашивал у других игроков, они тоже слышат это.
-
removeEventHandler("onClientPreRender", getRootElement(), mainDx) addEventHandler("onClientPreRender", getRootElement(), HouseWindowDx) У тебя названия функций разные. При removeEventHandler нужно использовать ту функцию, которую ты указывал в addEventHandler ---------------------------------------------------------------- addEventHandler( 'onClientGUIClick', root, function( btn ) А зачем ты прикрепляешь этот обработчик к корню? Гораздо легче будет, если вместо "root" указать саму кнопку ( buyButton ). И тогда условие if source == buyButton then не понадобится, т.к. событие будет запускаться только по нажатию на данную кнопку.
-
string.gsub это по моему замена одной части текста на другую. Почему ты одно и то же заменяешь само на себя? У тебя получается для любого текста, который бы ты не ввёл, условие newText ~= currText не выполняется (т.к. newText в любом случае равен currText), а соответственно не выполняется и guiSetText
-
В районе гетто слышу какие-то выстрелы постоянно. Там никто из игроков не стреляет (100%). Появляются эти выстрелы рандомно. Может кто-нибудь знает, в чём проблема? Я спрашивал у других игроков, они тоже слышат это.
-
moveObject не подойдёт, т.к. это функция для перемещения физических объектов ГТА (дерево, дорога, дом, мебель и т.п.). Если ты будешь использовать dxDrawImage для отрисовки изображения, то можно будет просто менять координаты изображения и тем самым добиться эффекта движения картинки (обрати внимание на функцию interpolateBetween). Можно еще картинку попробовать нарисовать через guiCreateStaticImage, а потом просто менять её координаты на экране добиваясь эффекта движения.
-
Помогите прикрепить текст к авто (dxDrawText)
CharlySHOMAN replied to Alex_Correa's topic in Скриптинг
Я проверил - у меня всё работает. Я догадываюсь, почему у тебя может это не работать. Возможно ты зашел на сервер и после этого запустил ресурс. Если это так - то тогда надписи не должно быть, потому что серверное событие "onPlayerJoin" срабатывает только тогда, когда игрок заходит на сервер. А если ты уже был на сервере и просто запустил ресурс - то тогда это событие не сработало, а значит клиент не получил переменную с автомобилем и не нарисовал текст над авто. Попробуй выйти с сервера, запустить ресурс, а потом зайти на сервер. Надпись должна появиться. -
Помогите прикрепить текст к авто (dxDrawText)
CharlySHOMAN replied to Alex_Correa's topic in Скриптинг
Просто в клиентский скрипт вставь код: function dxDrawTextOnElement(TheElement,text,height,distance,R,G,B,alpha,size,font,checkBuildings,checkVehicles,checkPeds,checkDummies,seeThroughStuff,ignoreSomeObjectsForCamera,ignoredElement) local x, y, z = getElementPosition(TheElement) local x2, y2, z2 = getElementPosition(localPlayer) local distance = distance or 20 local height = height or 1 local checkBuildings = checkBuildings or true local checkVehicles = checkVehicles or false local checkPeds = checkPeds or false local checkObjects = checkObjects or true local checkDummies = checkDummies or true local seeThroughStuff = seeThroughStuff or false local ignoreSomeObjectsForCamera = ignoreSomeObjectsForCamera or false local ignoredElement = ignoredElement or nil if (isLineOfSightClear(x, y, z, x2, y2, z2, checkBuildings, checkVehicles, checkPeds , checkObjects,checkDummies,seeThroughStuff,ignoreSomeObjectsForCamera,ignoredElement)) then local sx, sy = getScreenFromWorldPosition(x, y, z+height) if(sx) and (sy) then local distanceBetweenPoints = getDistanceBetweenPoints3D(x, y, z, x2, y2, z2) if(distanceBetweenPoints < distance) then dxDrawText(text, sx+2, sy+2, sx, sy, tocolor(R or 255, G or 255, B or 255, alpha or 255), (size or 1)-(distanceBetweenPoints / distance), font or "arial", "center", "center") end end end end -
Помогите прикрепить текст к авто (dxDrawText)
CharlySHOMAN replied to Alex_Correa's topic in Скриптинг
Вы с помощью функции playerJoinFunc отправляете на клиент переменную с автомобилем. При этом клиент не принимает её. Вместо этого он записывает в переменную 'drawElement' (в которой должен по идее хранится автомобиль) другую переменную - source (а это источник события, который в данном случае является игроком, который зашел на сервер). Поэтому надпись отображается над игроком. Такая несостыковка возникла потому что функции resourceStartFunc и playerJoinFunc написал я, а клиентскую функцию написал вам другой форумчанин. Короче говоря нужно вот так сделать: -- Сервер function resourceStartFunc() Cargobob=createVehicle(548,mas[3][1],mas[3][2],mas[3][3],0,0,90) triggerClientEvent("onVehicleTextDraw", Cargobob) -- здесь Cargobob - источник события end addEventHandler("onResourceStart", getRootElement(), resourceStartFunc) function playerJoinFunc() triggerClientEvent(source, "onVehicleTextDraw", Cargobob) -- здесь Cargobob - источник события end addEventHandler("onPlayerJoin", getRootElement(), playerJoinFunc) -- Клиент addEvent("onVehicleTextDraw",true) addEventHandler("onVehicleTextDraw", getRootElement(), function () local drawElement = source -- source - источник события, который в данном случае является автомобилем Cargobob. Именно над ним и будет рисоваться надпись addEventHandler("onClientRender", getRootElement(), function () dxDrawTextOnElement(drawElement,"Your Text",1,20,0,0,255,255,1,"arial") end) end) -
Ну да, объект я создал через createObject. Объект должен быть получен с помощью события "onClientClick" судя по Вики. Но не всегда срабатывает (не для всех объектов почему-то)
-
Помогите прикрепить текст к авто (dxDrawText)
CharlySHOMAN replied to Alex_Correa's topic in Скриптинг
Когда был обработчик команды (addCommandHandler), было так: 1. Ввод команды 2. Запускается функция с аргументом 'player', в который записывается игрок, который ввёл команду. 3. Переменная, содержащая Авто, отправляется игрокам, который в данный момент на сервере. А теперь с обработчиком события onResourceStart всё происходит так: 1. Запускается ресурс. 2. В переменную 'player' теперь записывается ресурс, который запустился (см."onResourceStart" на вики) 3. Если на сервере не было игроков до запуска этого ресурса - то функция triggerClientEvent не отправит никому данные об Авто. Скорее всего поэтому игроки, которые заходят после старта ресурса - не видят надписи над авто. В общем, нужно наверное сделать так на серверной стороне: -- серверная сторона -- При старте ресурса создаётся автомобиль function resourceStartFunc() Cargobob=createVehicle(548,mas[3][1],mas[3][2],mas[3][3],0,0,90) triggerClientEvent("createCarEvent", root, Cargobob) -- если до старта ресурса на сервере были игроки - то им отправляется переменная с этим авто. Если это единственный ресурс и на сервере не было игроков - то эту строчку можно убрать. end addEventHandler("onResourceStart", getRootElement(), resourceStartFunc) -- Игрок заходит на сервер function playerJoinFunc() triggerClientEvent(source, "createCarEvent", source, Cargobob) -- отправляет новому игроку переменную с автомобилем end addEventHandler("onPlayerJoin", getRootElement(), playerJoinFunc)