Jump to content

CharlySHOMAN

Members
  • Posts

    38
  • Joined

  • Last visited

Everything posted by CharlySHOMAN

  1. Вопрос чисто по 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. Что скажете?
  2. Слабо понял, в чем проблема (потому что объяснять надо понятнее). 1. По поводу менюшки - я попробовал у себя запустить, у меня запустилось. Ты должен обязательно на авто подъехать к маркеру. 2. Про какой спидометр речь идёт - я не понял. Скорее всего у тебя это не работает, потому что как-то конфликтует с другими скриптами. Попробуй посмотреть отладку ( \MTA San Andreas 1.5\MTA\logs\clientscript.txt ). И ещё не понятно, откуда берется таблица fuelMarkers (может у тебя этой таблицы нет, проверь).
  3. Эту функцию не рекомендуется вроде как использовать. Вместо этого используй - setPlayerHudComponentVisible("all", false) Помести это в клиентский скрипт. Можешь прям в начало любого скрипта, тогда этот код будет выполняться при присоединении клиента к серверу и худ будет сразу же отключаться. Можешь поместить этот код в функцию и запускать её например при каким-то событии.
  4. setElementModel может менять модель игроков, транспорта и объектов, но не пикапов. Попробуй использовать setPickupType
  5. hm_gui это таблица из кнопок? Я тут посмотрел твой первый пост. Там ты скрываешь кнопку guiSetVisible (buyButton, false ). От скрытой кнопки разве будет запускаться событие? Вроде как нет. Может в этом то и проблема, то что кнопки все скрыты. Вообще событие onClientGUIClick запускается? Если нет, то проблема скорее всего в этих скрытых кнопках
  6. В районе гетто слышу какие-то выстрелы постоянно. Там никто из игроков не стреляет (100%). Появляются эти выстрелы рандомно. Может кто-нибудь знает, в чём проблема? Я спрашивал у других игроков, они тоже слышат это.
  7. removeEventHandler("onClientPreRender", getRootElement(), mainDx) addEventHandler("onClientPreRender", getRootElement(), HouseWindowDx) У тебя названия функций разные. При removeEventHandler нужно использовать ту функцию, которую ты указывал в addEventHandler ---------------------------------------------------------------- addEventHandler( 'onClientGUIClick', root, function( btn ) А зачем ты прикрепляешь этот обработчик к корню? Гораздо легче будет, если вместо "root" указать саму кнопку ( buyButton ). И тогда условие if source == buyButton then не понадобится, т.к. событие будет запускаться только по нажатию на данную кнопку.
  8. string.gsub это по моему замена одной части текста на другую. Почему ты одно и то же заменяешь само на себя? У тебя получается для любого текста, который бы ты не ввёл, условие newText ~= currText не выполняется (т.к. newText в любом случае равен currText), а соответственно не выполняется и guiSetText
  9. В районе гетто слышу какие-то выстрелы постоянно. Там никто из игроков не стреляет (100%). Появляются эти выстрелы рандомно. Может кто-нибудь знает, в чём проблема? Я спрашивал у других игроков, они тоже слышат это.
  10. moveObject не подойдёт, т.к. это функция для перемещения физических объектов ГТА (дерево, дорога, дом, мебель и т.п.). Если ты будешь использовать dxDrawImage для отрисовки изображения, то можно будет просто менять координаты изображения и тем самым добиться эффекта движения картинки (обрати внимание на функцию interpolateBetween). Можно еще картинку попробовать нарисовать через guiCreateStaticImage, а потом просто менять её координаты на экране добиваясь эффекта движения.
  11. Я проверил - у меня всё работает. Я догадываюсь, почему у тебя может это не работать. Возможно ты зашел на сервер и после этого запустил ресурс. Если это так - то тогда надписи не должно быть, потому что серверное событие "onPlayerJoin" срабатывает только тогда, когда игрок заходит на сервер. А если ты уже был на сервере и просто запустил ресурс - то тогда это событие не сработало, а значит клиент не получил переменную с автомобилем и не нарисовал текст над авто. Попробуй выйти с сервера, запустить ресурс, а потом зайти на сервер. Надпись должна появиться.
  12. Просто в клиентский скрипт вставь код: 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
  13. Вы с помощью функции 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)
  14. Ну да, объект я создал через createObject. Объект должен быть получен с помощью события "onClientClick" судя по Вики. Но не всегда срабатывает (не для всех объектов почему-то)
  15. Когда был обработчик команды (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)
  16. Нужно с сервера отправить объект этого транспорта игрокам, а потом у них уже прорисовывать надпись над ним -- Серверная часть local function carFunction(player) Cargobob=createVehicle(548,mas[3][1],mas[3][2],mas[3][3],0,0,90) triggerClientEvent("createCarEvent", player, Cargobob) -- отправляем клиентам (всем) информацию о том, что создано авто end addCommandHandler("car", carFunction) -- Клиентская часть local function createCarFunction(car) local function renderFunc() if car then local posX, posY, posZ = getElementPosition (car) local screenX, screenY = getScreenFromWorldPosition ( posX, posY, posZ + 0.5 ) if screenX and screenY then dxDrawText ( "Текст", screenX - 100, screenY - 50, screenX + 100, screenY + 50, tocolor ( 255, 255, 255, 255 ), 2, "default-bold" ) end else removeEventHandler ( "onClientHUDRender", root, renderFunc) end end addEventHandler ( "onClientHUDRender", root, renderFunc) end addEvent("createCarEvent",true) addEventHandler("createCarEvent", getRootElement(), createCarFunction) Если будут новые игроки заходить - у них надписи не будет видно. ======================================================================== Cargobob это на серверной стороне, а у клиентов нет этой переменной. Или нет?
  17. Столкнулся с такой проблемой.. Нужно выбрать уже существующий объект (кликом мыши, наведением курсора на объект или другими подобными способами). И всё вроде работает, но не для всех объектов. Я конечно не перебирал все объекты, но вот на вскидку попробовал несколько ID - и некоторые объекты не удалось найти (к примеру, ID 1000). Я пробовал 2 способами, но ни одним не нашёл объект ID 1000 Код: function clickFunction(_, _, _, _, worldX, worldY, worldZ, object) -- Способ 1 if object then if getElementType (object) == "object" then outputChatBox("Object") end end -- Способ 2 local camX, camY, camZ = getCameraMatrix() local result = processLineOfSight (camX, camY, camZ, worldX, worldY, worldZ, --[[ Здания ]] true, --[[ ТС ]] false, --[[ Игроки ]] false, --[[ Объекты ]] true, false, --[[ Полупрозрачные ? ]] true, --[[ Динамические ? ]] true, false, nil, false) -- Для объекта ID 1000 'result' выдаёт 'false' -- Для объектов, которые находятся 'result' выдаёт 'true' end addEventHandler ( "onClientClick", getRootElement(), clickFunction )
  18. Спасибо. Я искал это в стандартных ресурсах, но почему-то не находил.
  19. Эта функция задаёт в качестве цели игрока. А мне нужно, чтобы камера не была закреплена за игроком. // при использовании этого синтаксиса функции: setCameraTarget ( float targetX, float targetY, float targetZ ) никакого эффекта нет, если ранее направление камеры было задано через setCameraMatrix
  20. После использования функции setCameraMatrix камера застывает в определенном направлении и вращать её при движении мышки становится невозможным. Как это исправить? Т.е. чтобы она вращалась именно из той точки, которую я задал с помощью SetCameraMatrix. setCameraMatrix
  21. Имеет ли клиент доступ к серверным скриптам? То есть может ли взломанный клиент заполучить эти скрипты?
  22. Можно ли как-то отключить встроенные в МТА команды?
  23. Yes, this is an effect like freecam.
×
×
  • Create New...