-
Posts
1,967 -
Joined
-
Last visited
-
Days Won
1
Everything posted by MX_Master
-
dxDraw: alpha каналы, маски и другие возможности
MX_Master replied to MX_Master's topic in Помощь / Отчеты об ошибках
Да, это стандартный функционал в dx оу, если так, то канеш лучше эти маски для всех DX фигурок. Кстати, интересует такой вопрос по теме, чат же это тоже DX и в нем текст огранён в коробочку. При прокрутке чата вверх/вниз текст обрезается и сверху, т.е. как я понял возможность задать маску или бокс для какой-то прорисовки есть (: ЗЫ: переименовал тему Ну и ваще в таком случае не только этот механизм нужен, а еще и несколько других. Таких, как например возможность крутить текст, также как картинку на какой-то Z угол: bool dxDrawText ( ... [, float rotation=0, ... ] ) возможность показывать часть бокса с текстом, ограниченную указанными оффсетами как и картинку. Не знаю как сделан чат, но он явно ограничен в какой-то бокс: bool dxDrawText ( ... [, float u, float v, float usize, float vsize, ... ] ) -
одобряЕ сам мод нос эт скорее совет был про коменты - на будущее
-
Для начала нужно найти и открыть оригинальную текстуру, инструментов для этого в сети достаточно валяется. Сделать копию и в ней изменить, что требуется. И потом на нее менять оригинальную текстуру скина.
-
ты подробнее расскажи, тада и ответим.. чую пахнет это дополнительным модулем
-
тонкий намёк подтверждаю, что в в 1,0,4 анимации могут работать не всегда точно, и не всегда точно синхрятся. Помню делал танцпол с ботами, курилку там делал, чтобы стояли боты и курили. Так вот, если постоянно с сервера не включать снова и снова анимацию, то боты просто стоят и ничо не делают. loop=true не помогает.
-
Есть же объекты в ГТА, которые светятся, даже есть объекты с системой частиц. С помощью частиц можно сделать освещение. Допустим был же в сэмпе объект в виде огня.. он в мта не пашет?
-
.map файлы не кэшируются на стороне клиента
MX_Master replied to MX_Master's topic in Помощь / Отчеты об ошибках
я специально смешной тест провел (: берем карту с кучей тачек созданную редактором, весом в 588 кб. Запускаем сервер только с ней. При входе на сервер клиент всегда качает 786 Кб берем эту же карту, но поиском и заменой убираем из нее лишние стандартные значения параметров, типа plate, interior, dimension, сокращаем слегка названия элементов. Файл карты худеет и уже весит 412 Кб. И при входе на сервер, клиент всегда качает 586 Кб. Ну и мой вывод - элементы те же, но зависимость такова, как будто-то качается простой текст файла + данные об элементах. Беру и добавляю в ресурс серверный скрипт, который из карты читает данные и создает элементы. В мете указываю карту как конфиг серва. Вес файла карты 588 Кб. Запускаю серв с этим ресурсом одним и при конекте всегда качает 155 Кб. Ставлю "очищенный вариант этой же карты" в 412 Кб - при коннекте качает также 155 Кб. Вот В ЭТОМ НИЖНЕМ примере передаются только данные элементов, а в ТОМ ВЕРХНЕМ примере что клиент качает? Желающие могут провести этот эксперимент у себя на компе. И это только 1 файл карты с тачками. Есть еще карта со статичными пикапами для всей карты; карт 5-6 со статичными объектами островов вокруг основной карты; еще карта, которая закрывает в общей карте дырки, куда игрок может провалится под землю. Думаю, это не предел. Таким макаром и набирается объем, который игрок вынужден качать каждый раз при входе на сервер, хотя эти файлы карт даже не изменились. Что касается статичных объектов, есть вариант, схожий со вторым примером выше. Только нужно указать, что файл карты это конфиг клиента. Я не проверял, но думаю он не будет качаться каждый раз при входе (это предположение) на сервер, если он уже скачан ранее и не изменился. На стороне клиента скрипт всегда читает этот файл и создает чисто клиентские объекты. Таким образом, у каждого клиента свои (несинхронизированные), но одни и те же объекты как и у других игроков. -
не знаю, мне лично они не нужны если это был бы приватный мод, то пжлста, хоть ваще не единой инфы в коде, ну а раз выложил... хотя кому я это рассказываю.. забей
-
Про .map'ки возник небольшой вопрос. Допустим, в моем моде их штук 10. Но игроки постоянно возмущаются, что им каждый раз при входе надо качать их заново. Учитывая размеры современных карт, это резонное возмущение со стороны игроков. Допустим карта тачек для всей карты на 1000 штук, карты всяких объектов, островов и прочей лабуды. Получается все эти, допустим, 4 Мб карт нужно качать каждый раз при входе. Они же не сохраняются, не кэшируются и не ведут себя так, как скрипты. Карты нужно скачивать каждый раз, даже если они не изменились на сервере. Нашел весьма частичное решение - на сервере парсить карты и создавать элементы вручную. Это немного помогает, т.к. передается всё уже пакетами в более сжатом виде и иногда не все сразу. Собсна, сабж. Как сделать так, чтобы эти карты тоже кэшировались?
-
ставлю 4/5, в основном из-за отсутствия подобных модов единственное замечание - комменты в коде?
-
dxDraw: alpha каналы, маски и другие возможности
MX_Master replied to MX_Master's topic in Помощь / Отчеты об ошибках
сэр, Вы читаете мои мысли (: только вот мотивированно объяснить необходимость этого в баг трекере сложнее, чем представить как оно должно работать Логически подумать.. новые функции ваще-то не нужны, внешне достаточно нового параметра в dxDrawImageSection. Для dxDrawImage это не нужно, т.к. там можно юзать просто форматы картинок с альфа каналом. bool dxDrawImageSection ( float posX, float posY, float width, float height, float u, float v, float usize, float vsize, string filepath [, string maskfilepath="", float rotation = 0, float rotationCenterOffsetX = 0, float rotationCenterOffsetY = 0, int color = white, bool postGUI = false ] ) Хотя сказать гораздо проще чем реально сделать. Есть ли ваще такая возможность в DirectX и сложно ли такой функционал организовать? Нащщет dxDrawMask я думаю.. это еще сложнее, т.к. будет касаться и других DX фигурок, а не только картинок. -
табличная эмуляция выглядит проще, именно поэтому ее юзаю, дабы было понятно для других скриптеров, а не только мне названиеКласса = {} function названиеКласса.создатьОбъект ( начальныеПараметрыОбъекта ) local self = {} -- объект класса local приватнаяПеременная = 123 self.публичнаяПеременная = 456 local function приватныйМетодОчисткиТаблицы ( таблица ) local индекс = next(таблица) while индекс do if type(таблица[индекс]) == 'table' then приватныйМетодОчисткиТаблицы(таблица[индекс]) end таблица[индекс] = nil индекс = next(таблица, индекс) end end function self.__конструктор ( начальныеПараметрыОбъекта ) приватнаяПеременная = начальныеПараметрыОбъекта end function self.__деструктор ( ) приватныйМетодОчисткиТаблицы(self) приватнаяПеременная = nil end self.__конструктор( начальныеПараметрыОбъекта ) -- запуск конструктора function self.публичныйМетод ( ... ) outputChattBox( 'приватнаяПеременная = ' .. tostring(приватнаяПеременная) ) end return self end function названиеКласса.уничтожитьОбъект ( объект ) объект.__деструктор() объект = nil end local мойОбъект = названиеКласса.создатьОбъект( 777 ) мойОбъект.публичныйМетод() названиеКласса.уничтожитьОбъект( мойОбъект ); мойОбъект = nil это так, чистая фантазию должна быть у скриптера. На самом деле из таблиц можно создавать свою уникальную логику и иерархию, непохожую на классы, объекты и прочий стандартный набор.
-
dxDraw: alpha каналы, маски и другие возможности
MX_Master replied to MX_Master's topic in Помощь / Отчеты об ошибках
любая простая 2Д графика на экране состоит как минимум из квадратиков под названием - пиксел, но это так, шутка.. Вопрос скорее в эстетике, я канеш могу и квадратик вращать, обрамив его края тем, что под руку попадется. Но это же не то совсем. Фактически вопрос упирается в некий функционал, который позволяет, поверх любой картинки наложить фильтр, который сделает невидимыми отдельные части этой картинки. -
А из какой точки относительно транспорта будет вылетать ракета? из бампера, с крыши? Если точка будет внутри транспорта, то ничего не вылетит, я к этому клоню. Допустим rotX, rotY, rotZ это углы транспорта. Параметры velX, velY, velZ этой функции нужно пропорционально связать с углами транспорта. Чтобы пустить ракету по направлению транспорта, у velY значение должно быть чуть больше. local velX, velY, velZ = rotZ / 720, rotY / 720 + 0.1, rotZ / 720 но это теоритически Углы наклона ракеты могут совпадать с rotX, rotY, rotZ транспорта, а могут и не совпадать. Ради теста можно просто подставить их. В любом случае, еси не подходят, то там минимальная поправка. Точка старта ракеты - для теста мона взять просто над транспортом в паре метров. Силу вылета можно поставить средней, например 1. -- vehicle это какой-то транспорт -- узнаем данные транспорта local posX, posY, posZ = getElementPosition(vehicle) local rotX, rotY, rotZ = getElementRotation(vehicle) -- флаг: выпущена ракета или нет (для теста) local launched = false -- запустим только если данные транспорта корректны if posX and rotX then -- начальная скорость ракеты local velX, velY, velZ = rotZ/720, rotY/720 + 0.1, rotZ/720 launched = createProjectile( -- запускаем ракету getLocalPlayer(), -- источник будет - локальный игрок, т.е. ракета будет синхрится для всех 19, -- простая ракета posX, posY, posZ + 2, -- точка старта в паре метров выше 1, -- сила вылета при старте nil, -- цели у ракеты нет, куда уж попадет, туда попадет rotX, rotY, rotZ, -- углы ракеты velX, velY, velZ -- начальная скорость ракеты ) end outputChatBox( 'Ракета выпущена: ' .. tostring(launched) ) это все просто теория моя (:
-
тему отдельную создай про createProjectile, а во флудилке уже толку отвечать, никто потом не найдет толком ответ на такой же вопрос
-
остаётся тока заменить прокладку между стулом и монитором..
-
я в салюте юзал эти коронки (клиент) и вблизи они создавались в данные каждого пикапа всего лишь надо добавлять какой-то идент, который при проверке точно скажет, что именно этот пикап нужно уничтожить. setElementData, где последний параметр равен false, и потом getElementData в общем обработчике юзать, расфасовывая нужные пикапы
-
ёлы, я и не заметил что у тя сам код бажовый ппц, воспользуйся этим bindKey( "E", "down", setGameSpeed, 0.5 )
-
tonumber(0.5) замени на 0.8
-
Я тут решил замутить что-то типа радара с помощью DX прорисовки. Если не вдаваться в детали, то все это возможно с помощью прямых рук, картинки с картой и картинок со своими значками. Возник только 1 вопрос. Я захотел сделать, чтобы радар вращался как игровой. С этим тоже проблем нет, но вращается-то не кругляшок (как оригинал), а квадратная картинка. Вопрос как раз в том, как сделать так, чтобы ненужные края картинки обрезать. Сразу мысль сверкнула об альфа каналах и прочих прелестях, допустим, картинок PNG и текстур DDS. Кто-нибудь такие махинации с вращающимися картинками и альфа каналами делал в МТА ваще?
-
чуваГ, во-первых, чтобы выкинуть пикап на +/- 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" переменные таймера и кол-ва денег должны быть глобальными или хотя бы положить их в данные созданного пикапа
-
постоянно кол-во меняется, поэтому каждый раз приходится обновлять списки советую просто с вики.. со страниц со списками функций скопировать и, возможно, отсортировать на 3 группы - сервер, клиент, общие (сортировать можно поиском и заменой с помощью регулярных выражений). Сортировка нужна в основном для подсветки. Не знаю как в блакноте++, но в некоторых редакторах можно указать для каждой функции ее прототип. Это бывает полезно при авто дополнении кода. Прототипы собирать по всем страницам вики - весьма трудоемкая задача.
-
возможно, стоит радоваться а не печалиться этому факту
-
помогает, помогает
-
функция выше этим и занимается, насколько мое просветление в этой теме мне подсказывает, могу предположить function getPositionFromElementAtOffset ( element, x,y,z ) if not x or not y or not z then return false end local matrix = getElementMatrix ( element ) local offX = x * matrix[1][1] + y * matrix[2][1] + z * matrix[3][1] + matrix[4][1] local offY = x * matrix[1][2] + y * matrix[2][2] + z * matrix[3][2] + matrix[4][2] local offZ = x * matrix[1][3] + y * matrix[2][3] + z * matrix[3][3] + matrix[4][3] return offX, offY, offZ end -- ... -- смещение от центра тачки до конца задней части тачки local yOffset _, yOffset = getElementBoundingBox(car) -- car это какая-то тачка -- смещение от центра тачки до точки в центре багажника yOffset = yOffset - 0.5 -- координаты 3Д мира точки в центре багажника в данный момент времени local bootX,bootY,bootZ = getPositionFromElementAtOffset( car, 0,yOffset,0 ) нащщет setElementMatrix никто не заморачивался, т.к. получив матрицу, я так понял, можно выставить позицию и углы вращения существующими функциями, вытянув нужные значения из матрицы хотя бы, приведи парочку жизненно важных способов применения. Многие такими высокими материями графики в скриптинге не занимаются, поэтому хватает функций изменения позиции и углов