Jump to content

Дада (: фулдилка


Recommended Posts

Да вот пытался с помощью getElementBoundingBox, только она возвращает оффсет, а не координаты мира, хотя я пробовал по оффсету приатачить невидимый объект и вытащить координаты с помощью getElementPosition, да вот только что-то не получилось..

getElementMatrix - спасибо, не знал про неё. А то я тут уже через (ко)синусы начал (с математикой/геометрией беда). Хотя она скорее всего тоже оффсет вернёт.

Link to comment
  • Replies 2.4k
  • Created
  • Last Reply

Top Posters In This Topic

оно там какие-то корды мира чтоле содержит, вощем я 3Д графике пинёк, нихрена не понимаю, в матюматике еще хорошо. Поэтому я через базар обычно к проблеме захожу ((: если кто-то пояснит шо це таке getElementMatrix, будет ниплоха

Link to comment

Хм. И в правду, из твоего примера понял как пользоваться, спасибо :)

Мне казалось, что только с помощью геометрических функций типа cos и sin это возможно ))

Link to comment
А есть у кого список функций МТА для Notepad++ (который кладётся в ..\Notepad++\plugins\APIs) ? :)

постоянно кол-во меняется, поэтому каждый раз приходится обновлять списки

советую просто с вики.. со страниц со списками функций скопировать и, возможно, отсортировать на 3 группы - сервер, клиент, общие (сортировать можно поиском и заменой с помощью регулярных выражений). Сортировка нужна в основном для подсветки.

Не знаю как в блакноте++, но в некоторых редакторах можно указать для каждой функции ее прототип. Это бывает полезно при авто дополнении кода. Прототипы собирать по всем страницам вики - весьма трудоемкая задача.

Link to comment

обнаружил у себя такой баг

кусочек кода:

function onPlayerWasted () 
    local money = getPlayerMoney(source) 
    setPlayerMoney(source, 0) 
    local x, y, z = getElementPosition(source) 
    while money > 0 do 
        local angle, distance = math.random(360), 0.5 * math.random(10) 
        local px, py = distance * math.cos(math.deg(angle)), distance * math.sin(math.deg(angle)) 
        local pickup = createPickup(x+px, y+py, z-0.5, 3, 1212) 
        local m = math.random(money) 
        money = money - m 
         
        local tmr = setTimer(destroyElement, 25000, 1, pickup) 
        addEventHandler("onPickupHit", pickup, 
            function (player) 
                if not isPedInVehicle(player) then 
                    playSoundFrontEnd(player, 7) 
                    givePlayerMoney(player, m) 
                    killTimer(tmr) 
                    destroyElement(source) 
                end 
            end 
        ) 
    end 
end 
  

код при смерти игрока выбрасывает его деньги на случайное расстояние

собственно в чем проблема, если меня убивают вблизи, и пикапы создаются в местах, где стоит убийца(или другой игрок), то createPickup возвращает в переменную pickup НЕ элемент (isElement говорит false). и на него из-за этого не аттачится onPickupHit и по таймеру возникает bad element pointer @ destroyElement. type() говорит что pickup это userdata. ничего понять не могу, бьюсь в панике :( что это?

Link to comment

чуваГ, во-первых, чтобы выкинуть пикап на +/- 10 метров возле трупа, синусы и косинусы не надо юзать. Просто взять в 1 юнит сетку 20 на 20 и на ней случайную точку сообразить. При желании, можно сетку и помельче, но при 10 метрах это лишнее.

local px, py = math.random(0,20) - 10, math.random(0,20) - 10 

во-вторых, все значения нужно проверять без исключения. Допустим, если получаешь позицию элемента в 3 переменные, то хотя бы первую проверить, что она - это число, а не false какой-ньть. И если что не так, не пихать эти переменные в следующую функцию!

Ну и в-третьих, если уж не создаются, то проверь, где будет создан, и если там кто-то есть, отдай сразу без пикапа ему то, что в пикапе лежит.

Ну и банальные

  
                    givePlayerMoney(player, m) 
                    killTimer(tmr) 
  

сервер не знает таких переменных как m и tmr, т.к. они были локальными во время работы функции onPlayerWasted () и их уже нет в момент, када работает обработчик для "onPickupHit"

переменные таймера и кол-ва денег должны быть глобальными или хотя бы положить их в данные созданного пикапа

Link to comment

Всё, проблему решил. Но каак)

Подумал проверить остальные обработчики пикапов в скрипте. У меня был глобальный(повешанный на корневой элемент ресурса) onPickupHit для пикапов с оружием. В нем, соответственно, проверка на тип пикапа == 2. Но каким-то странным образом для моих пикапов с типом 3 тип пикапа возвращался 2. Они обрабатывались функцией как пикапы оружия и удалялись раньше времени) В итоге убрал глобальный обработчик и стал вешать его конкретно на каждый пикап оружия отдельно. Каким образом тип 3 оказывался типом 2 до сих пор не пойму. Еще обнаружил такую проблему (это уже со стримером мта какие-то баги), что созданные вблизи игрока короны не появлятся, но если уйти от этого места и вернуться к ним то они будут видны.тоже с этим разобрался

Edited by Guest
Link to comment

я в салюте юзал эти коронки (клиент) и вблизи они создавались

в данные каждого пикапа всего лишь надо добавлять какой-то идент, который при проверке точно скажет, что именно этот пикап нужно уничтожить. setElementData, где последний параметр равен false, и потом getElementData в общем обработчике юзать, расфасовывая нужные пикапы

Link to comment

Да кстати, поясню почему у меня синусы и косинусы. Мне нужно чтобы пикапы не по сетке 10*10 выбрасывались, а чтобы они выбрасывались на определенный радиус вокруг игрока. Изначально они были просто по кругу, но для большей реалистичности я приделал рандомное расстояние с шагом в 0.5м)

теперь вот еще какая проблема. у меня есть координаты машины (x, y, z) и ее вращения (x, y, z). Нужно запустить ракету от машины, чтобы она летела строго вперед. С параметрами функции createProjectile разобраться не могу, всё что могу получить от ракеты через getElementVelocity, getElementRotation от ракеты, запущенной из базуки - тоже ни о чем не говорит.

Link to comment

Наверное все заметили в сампе фишку с неоном и т.д.? Так вот я пробовал создавать в 3D Studio Max подобные объекты, но света нет, так как GTA движёк не поддерживает light елементы и эту поддержку сделали через движёк сампа.

Не знаю как попросить в баг трекере, поэтому пишу сюда, надеюсь меня услышат. )))

Хотелось бы видеть функцию создания таких light объектов в самой MTA (например как createMarker) с возможностью приатачивания к другим елементам. (С указанием радиуса освещения, цвета, альфы и т.д. )

Link to comment

Есть же объекты в ГТА, которые светятся, даже есть объекты с системой частиц. С помощью частиц можно сделать освещение. Допустим был же в сэмпе объект в виде огня.. он в мта не пашет?

Link to comment

Ты имеешь ввиду объекты типа машины, фонарные столбы и т.д.?

Объясню на примере машин. У машин есть dummy, это объекты которые отвечают за крепление каждой части, положение бензобака, глушителя, фар, где сидит перс, колёса, двери, бампера, апргейды и т.д. Такие dummy поддерживают только машины. Dummy мигалок нету, их можно поправить только через exe. Так же у фонарных столбов и светофоров.

Меня интересует не освещение огня, а именно создание света, любого цвета (складно xD).

Сделать так же неон, искусственные мигалки (сам скрипт мигалок вот я написал, но без освещения к сожалению).

Хорошо было бы ещё задавать форму освещения, например сделать свои фары, более реалестичные. Я конечно понимаю слабые машины это будет напрягать, упадёт фпс, но это уже думаю дело разработчиков серверов, думать им.)

Link to comment

Свет фар это еще и текстуры. Подозреваю, что если можно сделать объект с частицами в виде огня, то почему нельзя сделать объект с частицами в виде куда-то направленного света?

Link to comment

Зачем текстуры? Создать свет на DirectX и никаких текстур. Опять же повторюсь, зачем мне огонь?

1. Он одного цвета

2. Он скорее всего динамичный

3. Альфа хотя бы к нему будет норм применяться? Как вот я освещение красного и синего цвета сделаю для мигалок?

Да я уверен эта функция многим просто пригодится и будет очень удобна. Создал свет например dxCreateLight( 15.0, 255, 0, 0, 25 ) т.е. ( радиус, r, g, b, a ). И делать с ним то же что и с другими эелементами (атачить, устанавливать alfа..)

P.S. Ты как свет огня собрался направлять?))) Он как никрути будет круглое освещение давать.

Link to comment

Про огонь это пример частиц в объектах всего лишь, можешь про него забыть. Таким же образом можно сделать и направленный свет используя другие цвета и расположение частиц.

DX это не элементы и ими не будут, для них каждый может создать свою lua систему, на то и был рассчет, чтобы не создавать второй gui.

Запрос функции можешь послать в wish лист на баг трекере. Так будет само правильно.

Link to comment

Ну как элемент, это я как пример, думаю разработчикам MTA виднее, хотя хз.. Просто факт то, что было бы многим удобнее закрепить свет хоть на голову персонажа, а не обновлять по координатам через OnClientRender (в таком случае нужна ещё и функция dxSetLightPosition).

например сделать просто createLight чтобы она возвращала элемент.

Только GUI вот тут причём? Речь о 3D свете))

Хотя можно сделать и 2 функции, dx и как элемент.. Думать надо :D

P.S. Я в баг трекер не умею писать как бы)) А вообще с английским слабо.

Link to comment

Коли уж про свет речь зашла, кто-нибудь пробовал как-то докопаться до тех прожекторов, что в area69 в singlePlayer? Это что, объект, эффект, частицы, симбиоз вышеперечисленного? Вроде даже LODы есть, в сингле опять же. Прожектор police Maverick'a - из той же оперы?

Link to comment

То ли я только сейчас догнал, то ли мне показалось.

  
local _table = {}; 
_table.test = "test"; 
_table.test2 = 2; 
  
local _test = _table; 
  
-- теперь самое интересное. 
_test.test = "123"; -- я так понял, что значение изменится и в _table и в _test? 
  

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...