Jump to content

Flaker

Members
  • Posts

    619
  • Joined

  • Last visited

Everything posted by Flaker

  1. Не надо никуда ничего заносить... Они и так в таблице... В Lua подобие scope реализовано с помощью таблиц. Все данные можно найти в суперглобальной таблице G.
  2. Ну со взятием цвета пикселей понятно... Что у тебя входит в предобработку? Как реализовано сейчас? У меня есть несколько теоретических идей по этому поводу, могу подeлиться: *Предобработка* Обрабатываем необходимые картинки 1 раз, при запуске некого ресурса, в директории которого файлы с картинками. В предобработку входит составление карты цветов пикселей в шестнадцатеричном виде с последующим сохранение в файлы ( синхронизированные с картинками ) или бд, в виде сериализованного массива. При последующих запусках проверяем наличие карт пикселей для определенных картинок, если нет, то возвращаемся на шаг назад, если есть, то грузим в память эти карты ( loadstring ). Далее, мы должны составить однонаправленный граф зависимостей для картинок. С помощью него будем определять, что и из чего вырезать. Далее проходимся по картам пикселей, которые теперь представлены в виде обычных многомерных массивов, вырезаем необходимые цвета, пишем новую карту ( в заранее созданный массив ). Новая карта готова, на основе ее рисуем новую картинку ( dxSetPixelColor ), которую сохраняем в память и на диск. Теперь мы можем при проходе по графу зависимостей или просто при запуске ресурса, мы можем проверять наличие готовых обработанных картинок на диске и загонять их в память. *Использование* Далее, после всех обработок, картинки должны быть сохранены в памяти клиента ( в течении сессии ) и на диске ( всегда ). Для отрисовки просто забираем текстуру из памяти и работаем уже с готовой текстурой. *Профиты* Обработка только при 1 заходе на сервер ( при последующих, уже все сохранено ). Подвисание на момент обработки можно замылить использую псевдо-потоки ( читай lua coroutine ). Как уже говорил, это теория...
  3. А как ты реализовывал? Данные о картинках ты откуда достаешь, при отрисовке и редактировании? Предобработку, кэширование использовал? В принципе, если ты не делаешь редактор внутри MTA, то даже при использовании алгоритмов грубой силы, можно добиться некоторой оптимизации. А вообще, возможно стоит почитать об алгоритмах, используемых при работе с графикой.
  4. Переменная accName не определена ( Используй /debugscript 3 )
  5. А вот взгляд со стороны независимого эксперта: http://habrahabr.ru/company/parallels/blog/190524/ Конструктивная критика Минусы, Плюсы
  6. Модераторы решат. Зачем здесь какие-то рейсеры вообще? Бред какой-то... Ведь никакой полезной информации они не принесут с собой, это точно, а срач начнется..
  7. Всем спасибо, все свободны. Тему можно закрывать ( а лучше удалять ), дабы не продолжать этот бесполезный срач, который ничем, никому не поможет. Я думаю, Lil сказал все верно, если хотим что нибудь доказать - делаем лучше, показываем свое, получаем лавину дерьма и постов "Аффтор лах", продолжаем дальше злорадствовать над другими, но теперь уже тихо и без лишнего шума.
  8. Человек до сих пор на 16 разрядной машинке сидит!( И то не правильной какой-то, если int у него 32656 ) А вы тут наезжаете... Пожалели бы! Эта проблема решается добавлением комментария для компилятора... Например можно написать так: table = 3; // Компилятор, ты должен помнить, что, хотя тут написано слово table, эта переменная будет числом! print( type( table ) ); На данном примере, ты можешь наблюдать реальную пользу в использовании комментариев... Нововведение чтоль? Пол века не обновляли, а тут бабах и тип данных string появился... Даа, жаль, что я не пишу на C++
  9. А в чем, собственно, проблема... Это открытый проект... Бери делай дальше. Ты же не нуб, как рейсеры с мта-ресурс?
  10. 1) Вариант с колшейпами, при правильной реализации, работает и быстрее и по памяти экономичнее. 2) Вычислять расстояние между точками лучше функцией getDistanceBetweenPoints3D. Она выполняется на более низком уровне и производит расчеты быстрее.
  11. Это не из за хостинга!
  12. Функция addEventHandler, последний аргумент false поставь
  13. Локализатор? Ахах! Ты про BlackFan? Лучше наверно назвать русский представитель... А ему зачем Lua знать? O_o Те кто работают с комьюнити, чаще всего, не разбираются во внутренностях продукта...
  14. rotation + 90 надо... Ротация в GTA не совсем с 0 начинается Но удобнее оффсетом по матрице вычислять...
  15. Jonathan.P, как ты себе представляешь использование каскадных таблиц стилей в MTA? И причем тут Java? Ты не умеешь передвигать картинку? Функция guiSetPosition изменяет положение gui элемента на экране.
  16. Можешь сам установить, что будет видно: https://wiki.multitheftauto.com/wiki/SetPlayerAnnounceValue
  17. "list($name,$Points,$ping) = split("||||",$player);" Функция split делит строку на подстроки по указанному разделителю ( в данном случае разделитель это "||||" ). Возвращает массив из этих подстрок. Функция list последовательно присваивает своим аргументам значения массива, который идет после знака "=". Идиотский туториал... Что ты вообще пытаешься сделать?
  18. Держи полностью ресурс: http://rghost.ru/47980256. Его ставь. Должен работать. Если не работает смотри debugscript 3
  19. Вот эта говнокод... Криворукий какой-то писал... Таких вообще нельзя к коду даже близко подпускать... Поколение деградирует... Рашка разваливается... Нашим флагом уже подтираются панк, мать его, группы... Вот тебе серверная часть, и можешь не спрашивать откуда я это взял: 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 )
  20. Ухх, Tederis, вы из тех, кто шашлык в белых кедах делает? Зачем же так в лоб то... Привязываем колшейп(окружность) к педу, при его создании... Это будет наша зона видимости врагов( А если точнее дальность чувствительности педом врагов, ведь зона видимости надо рассчитывать относительно поворота башни и предметов на пути, ну да ладно, пока так ). Устанавливаем синкера( Тот игрок, через которого будем синхронизировать ) Теперь на клиентской части синкера: Получаем игроков внутри нашего колшейпа ( Это оптимальнее по производительности, так как: "ColShape'ы значительно быстрее, потому что реализованы через R-древо" )... Ну и собственно получаем ближайшего из них... Запоминаем таргет... Дальше с синкера отправляем команду "this бот стрелять" на сервер. С сервера ее пересылаем root'у... И собственно стреляем... Стрелять надо так: немного стреляем, немного стреляем, потом немного не стреляем и так в цикле... Ну, собссно, все.
  21. Устал я смотреть на ваши извращения... Вот я писал библиотечки для работы с 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 );
×
×
  • Create New...