-
Posts
619 -
Joined
-
Last visited
Posts posted by Flaker
-
-
Ну со взятием цвета пикселей понятно...
Что у тебя входит в предобработку?
Как реализовано сейчас?
У меня есть несколько теоретических идей по этому поводу, могу подeлиться:
*Предобработка*
Обрабатываем необходимые картинки 1 раз, при запуске некого ресурса, в директории которого файлы с картинками.
В предобработку входит составление карты цветов пикселей в шестнадцатеричном виде с последующим сохранение в файлы ( синхронизированные с картинками ) или бд, в виде сериализованного массива.
При последующих запусках проверяем наличие карт пикселей для определенных картинок, если нет, то возвращаемся на шаг назад, если есть, то грузим в память эти карты ( loadstring ).
Далее, мы должны составить однонаправленный граф зависимостей для картинок. С помощью него будем определять, что и из чего вырезать.
Далее проходимся по картам пикселей, которые теперь представлены в виде обычных многомерных массивов, вырезаем необходимые цвета, пишем новую карту ( в заранее созданный массив ).
Новая карта готова, на основе ее рисуем новую картинку ( dxSetPixelColor ), которую сохраняем в память и на диск.
Теперь мы можем при проходе по графу зависимостей или просто при запуске ресурса, мы можем проверять наличие готовых обработанных картинок на диске и загонять их в память.
*Использование*
Далее, после всех обработок, картинки должны быть сохранены в памяти клиента ( в течении сессии ) и на диске ( всегда ).
Для отрисовки просто забираем текстуру из памяти и работаем уже с готовой текстурой.
*Профиты*
Обработка только при 1 заходе на сервер ( при последующих, уже все сохранено ).
Подвисание на момент обработки можно замылить использую псевдо-потоки ( читай lua coroutine ).
Как уже говорил, это теория...
-
игра просто виснет на циклах
А как ты реализовывал?
Данные о картинках ты откуда достаешь, при отрисовке и редактировании?
Предобработку, кэширование использовал?
В принципе, если ты не делаешь редактор внутри MTA, то даже при использовании алгоритмов грубой силы, можно добиться некоторой оптимизации.
А вообще, возможно стоит почитать об алгоритмах, используемых при работе с графикой.
-
Переменная accName не определена
( Используй /debugscript 3 )
-
А вот взгляд со стороны независимого эксперта: http://habrahabr.ru/company/parallels/blog/190524/
Конструктивная критика
Минусы, Плюсы
-
Модераторы решат.
Зачем здесь какие-то рейсеры вообще? Бред какой-то... Ведь никакой полезной информации они не принесут с собой, это точно, а срач начнется..
-
На счет этого сайта - пусть люди делают что хотят и как хотят, почему все надо обосрать? Если вы думаете что вы лучше, это не значит что надо пытаться опустить остальных. Пройдите мимо и сэкономьте нервных клеток.
Всем спасибо, все свободны. Тему можно закрывать ( а лучше удалять ), дабы не продолжать этот бесполезный срач, который ничем, никому не поможет. Я думаю, Lil сказал все верно, если хотим что нибудь доказать - делаем лучше, показываем свое, получаем лавину дерьма и постов "Аффтор лах", продолжаем дальше злорадствовать над другими, но теперь уже тихо и без лишнего шума.
-
table = 3 -> integer от 0 до 32656
Человек до сих пор на 16 разрядной машинке сидит!( И то не правильной какой-то, если int у него 32656 ) А вы тут наезжаете... Пожалели бы!
Lua > table = 3 -> не рискну писать, а то вдруг компилятор подумает что это таблица и будет ждать что-то типа table.getn или table.remove.Эта проблема решается добавлением комментария для компилятора... Например можно написать так:
table = 3; // Компилятор, ты должен помнить, что, хотя тут написано слово table, эта переменная будет числом! print( type( table ) );
На данном примере, ты можешь наблюдать реальную пользу в использовании комментариев...
С++ > string > строчная переменаНововведение чтоль? Пол века не обновляли, а тут бабах и тип данных string появился...
Даа, жаль, что я не пишу на C++
-
А в чем, собственно, проблема... Это открытый проект... Бери делай дальше. Ты же не нуб, как рейсеры с мта-ресурс?
-
1) Вариант с колшейпами, при правильной реализации, работает и быстрее и по памяти экономичнее.
2) Вычислять расстояние между точками лучше функцией getDistanceBetweenPoints3D. Она выполняется на более низком уровне и производит расчеты быстрее.
-
Это не из за хостинга!
-
setElementPosition
-
Функция addEventHandler, последний аргумент false поставь
-
Локализатор? Ахах! Ты про BlackFan?
Лучше наверно назвать русский представитель...
А ему зачем Lua знать? O_o
Те кто работают с комьюнити, чаще всего, не разбираются во внутренностях продукта...
-
Пока онлайн есть, надо все таки спросить
Как сделать так чтобы маркер создавался в любой ротации сзади автомобиля( в моем случае Buritto).?
Вот есть набросок но не получаетсья что - то
posX = posX - math.sin(math.rad(rotation)) * 1.5 posY = posY + math.cos(math.rad(rotation)) * 1.5
rotation + 90 надо... Ротация в GTA не совсем с 0 начинается
Но удобнее оффсетом по матрице вычислять...
-
А это не сложно)
-
Jonathan.P, как ты себе представляешь использование каскадных таблиц стилей в MTA? И причем тут Java?
Ты не умеешь передвигать картинку? Функция guiSetPosition изменяет положение gui элемента на экране.
-
Можешь сам установить, что будет видно: https://wiki.multitheftauto.com/wiki/SetPlayerAnnounceValue
-
"list($name,$Points,$ping) = split("||||",$player);"
Функция split делит строку на подстроки по указанному разделителю ( в данном случае разделитель это "||||" ). Возвращает массив из этих подстрок.
Функция list последовательно присваивает своим аргументам значения массива, который идет после знака "=".
Идиотский туториал...
Что ты вообще пытаешься сделать?
-
Держи полностью ресурс: http://rghost.ru/47980256.
Его ставь. Должен работать. Если не работает смотри debugscript 3
-
Вот эта говнокод... Криворукий какой-то писал... Таких вообще нельзя к коду даже близко подпускать... Поколение деградирует... Рашка разваливается... Нашим флагом уже подтираются панк, мать его, группы...
Вот тебе серверная часть, и можешь не спрашивать откуда я это взял:
local CarsSettings = {} function setElementSpeed(element, unit, speed) if (unit == nil) then unit = 0 end if (speed == nil) then speed = 0 end speed = tonumber(speed) local acSpeed = getElementSpeed(element, unit) if (acSpeed~=false) then local diff = speed/acSpeed local x,y,z = getElementVelocity(element) setElementVelocity(element,x*diff,y*diff,z*diff) return true end return false end function getElementSpeed(element,unit) if (unit == nil) then unit = 0 end if (isElement(element)) then local x,y,z = getElementVelocity(element) if (unit=="mph" or unit==1 or unit =='1') then return (x^2 + y^2 + z^2) ^ 0.5 * 100 else return (x^2 + y^2 + z^2) ^ 0.5 * 1.61 * 100 end else outputDebugString("Not an element. Can't get speed") return false end end addEventHandler ( "onResourceStart", resourceRoot, function ( ) local StationsFile = xmlLoadFile ( "backfire_settings.xml" ) if ( StationsFile ) then outputDebugString ( "backfire_settings.xml successfully open") for _, data in ipairs ( xmlNodeGetChildren ( StationsFile ) ) do local attrs = xmlNodeGetAttributes ( data ) CarsSettings[tostring(attrs.name)] = { x = tonumber(attrs.x), y = tonumber(attrs.y), z = tonumber(attrs.z) } end else outputDebugString ( "Failed to open to backfire_settings.xml", 1 ) end end ) addEvent ( "create3DBackfireSound", true ) addEventHandler ( "create3DBackfireSound", root, function ( theVehicle) if ( theVehicle ) then local vehicleName = getVehicleName( theVehicle ) if ( type(CarsSettings[vehicleName]) == "table" ) then local x, y, z = tonumber(CarsSettings[vehicleName].x), tonumber(CarsSettings[vehicleName].y), tonumber(CarsSettings[vehicleName].z); triggerClientEvent(root, "create3DBackfireSoundClient", root, theVehicle, x, y, z) end end end ) function startMonitoring ( thePlayer, seat, jacked ) if (seat == 0) then triggerClientEvent(thePlayer, "chandeMonitoringState", thePlayer, true, source) end end addEventHandler ( "onVehicleEnter", getRootElement(), startMonitoring ) function stopMonitoring ( thePlayer, seat, jacked ) if (seat == 0) then triggerClientEvent(thePlayer, "chandeMonitoringState", thePlayer, false) end end addEventHandler ( "onVehicleExit", getRootElement(), stopMonitoring )
-
del
-
Ухх, Tederis, вы из тех, кто шашлык в белых кедах делает? Зачем же так в лоб то...
Привязываем колшейп(окружность) к педу, при его создании... Это будет наша зона видимости врагов( А если точнее дальность чувствительности педом врагов, ведь зона видимости надо рассчитывать относительно поворота башни и предметов на пути, ну да ладно, пока так ).
Устанавливаем синкера( Тот игрок, через которого будем синхронизировать )
Теперь на клиентской части синкера:
Получаем игроков внутри нашего колшейпа ( Это оптимальнее по производительности, так как: "ColShape'ы значительно быстрее, потому что реализованы через R-древо" )... Ну и собственно получаем ближайшего из них...
Запоминаем таргет...
Дальше с синкера отправляем команду "this бот стрелять" на сервер. С сервера ее пересылаем root'у... И собственно стреляем...
Стрелять надо так: немного стреляем, немного стреляем, потом немного не стреляем и так в цикле...
Ну, собссно, все.
-
lil Toady,
Солидно)
-
Устал я смотреть на ваши извращения...
Вот я писал библиотечки для работы с dx: http://rghost.ru/47795269 ( Прошу kernell'ом не закидывать, но конструктивная критика приветствуется )
С их помощью ты можешь легко реализовать, то, что задумал.
Пользоваться ими примерно так:
------ Создание изображения ------- local myimage = image:create { fX = 0, fY = 0, fW = 1280, fH = 1024, mImage = 'cam.png' }; ------ Создание рендеринга ------ -- Рендеринг происходит в порядке инициализации. -- render:create { myimage }:start(); -- Скрываем изображение через 5 секунд -- setTimer( function() myimage:visible( false ); end, 5000, 1 );
Общий мини "HELP ME" топик по скриптингу
in Скриптинг
Posted
Не надо никуда ничего заносить... Они и так в таблице...
В Lua подобие scope реализовано с помощью таблиц. Все данные можно найти в суперглобальной таблице G.