Jump to content

Kernell

MTA Contributors
  • Posts

    1,739
  • Joined

  • Last visited

Everything posted by Kernell

  1. Насколько я помню, если установить minclientversion в конфиге/meta.xml, то при подключении к серверу, клиенту предлагается обновиться если его версия ниже указанной. Поэтому ставьте на своё усмотрение.
  2. Неон из сампа как бы лучше тем, что он "натуральный" (2dfx), т.е. его свет влияет на окружаюший мир и т.д.
  3. Просто добавьте функцию nulled() в класс Vector3. Так же добавьте событие __index = Vector3. Vector3_meta_object.__index = Vector3; function Vector3:Nulled( vArgument ) self.m_vSomeValue = vArgument; -- self - указатель на объект (скрыто переданный аргумент). end vec1 = Vector3( 192, 168, 0 ); vec1:Nulled( "blablabla" );
  4. Разработчики так-то не роботы, и не на конвейере делают мультиплеер
  5. Сейчас получается, что если ты стал модератором, то можешь не помогать пользователям. Разве нет? Они хоть и не helpdesk, но делать раздел лучше по моему входит в их обязанности (какой тогда смысл от них если они будут играть роль "фильтра сообщений"?). К сожалению, сейчас и те кто помогают - не становятся модераторами Имей ввиду, что другие пользователи видят это. И то как всё это выглядит - отражается на том, останутся они тут или пройдут мимо с мыслью "очередной быдло-форум".
  6. Собственно о чём и идёт речь - модераторы этого не делают. Даже если кто-то и задаст вопрос и поможет решить проблему, то тему никто не исправит (как например тут viewtopic.php?f=141&t=57973). Приведённый тобою пример действительно отличается - хотя бы названием темы. Много ли ты нашел ещё подобных тем? На этом форуме их больше.
  7. Речь не о затыкании пользователей, а о наказании за не чтение правил и о работе модераторов в целом. Я считаю вашу политику вообще нужно изменить, ибо такая приводит только к подобному засиранию форума. Хорошими примерами являются те форумы, что я показал выше. И я уверен, там никто никому рот не затыкает, просто модераторы приводят вид форума в более адекватный, и у них видимо это хорошо получается. В своё время, я тут занимался тем же самым. EDIT: viewtopic.php?f=153&t=49772 А вот такие темы вообще нужно удалять. Зачем это кому-то читать? Лишь только заводить новых пользователей в заблуждение.
  8. Кроме вопроса #4: говоря о порядке на форуме, вовсе не имелись ввиду флейм и "холивары". Меня на самом деле больше волнует то, как этот форум выглядит со стороны, а выглядит он примерно как быдло-проект pawno.su, куча гулпых тем, пользователи не соблюдают правила? да они вообще ничего не соблюдают, вот наглядный пример этого: viewtopic.php?f=141&t=57973 viewtopic.php?f=141&t=57360 viewtopic.php?f=141&t=53123 viewtopic.php?f=141&t=57348 Такие темы я считаю нужно сразу закрывать, а потом вообще чистить форумы от подобного мусора. Либо как-то исправлять это (хотя бы переименовать тему). А теперь взять например форум openSUSE: http://forums.opensuse.org/p-russian/ - зайдите в любую ветку, и сами всё увидите. Все темы имеют нормальное название, пользователи задают более понятные вопросы. Такого бардака там нет Тоже самое можно сказать и про сообщество Ubuntu http://forum.ubuntu.ru/
  9. Сразу оговорюсь, данный урок требует основных знаний о таблицах Lua На самом деле в просторах сети полно учебников по данной теме, поэтому решил я написать этот учебник просто потому что его тут нет (естественно копировать всё из других учебников я не стану, а постараюсь рассказать своими словами) Зачем это нужно В целом, всё это, позволяет нам изменить поведение Lua в определённых ситуациях 1. Возможность реализации ООП в Lua 2. Перегрузка операторов (это так же может быть необходимым для П.1) Что это такое Метатаблица - это обычная таблица в которой описываются определённые события (например сложение, вычитание, сравнивание и т.д.) В качестве названия события выступает индекс таблицы, а её значение - обработчик события (метод) Как использовать Для использования достаточно просто обозначить таблице нашу мета-таблицу MyTable = {}; MyTableMeta = { __index = MyTable }; setmetatable( MyTable, MyTableMeta ); Методы нашей мета-таблицы можно определить в любое время, в силу для таблицы они вступают сразу после определения. Ниже список всех доступных событий и их описание __index( self, key ) чтение по ключу __newindex( self, key, value ) запись по ключу __call( self, ... ) вызов как функции __add( self, arg ) сложение __sub( self, arg ) вычитание __mul( self, arg ) умножение __div( self, arg ) деление __mod( self, arg ) остаток от деления __pow( self, arg ) возведение в степень __unm( self ) унарный минус __concat( self, arg ) конкатенация строк __len( self ) длина __eq( self, arg ) оператор "равно" __lt( self, arg ) оператор "меньше" __le( self, arg ) оператор "меньше или равно" __tostring( self ) Вызывается при попытке перевести объект в строковое представление (например с помощью функции tostring) __gc Вызывается для userdata-объектов при сборке мусора __metatable Если задать это поле в метатаблице, то getmetatable будет просто возвращать его значение, а setmetatable вернет ошибку. Пример Рассмотрим работу метатаблиц на примере события __call. Допустим мы хотим чтобы таблицу Vector3 можно было использовать как функцию. local Vector3 = {}; local Vector3_meta = { -- Добавляем наше событие __call = function( self, fX, fY, fZ ) -- self это указатель на нашу таблицу Vector3 return { X = fX, Y = fY, Z = fZ }; end; }; setmetatable( Vector3, Vector3_meta ); -- Устанавливаем метатаблицу для Vector3 Готово! Теперь если вызвать Vector3( 1, 2, 3 ) то нам вернётся новый объект - таблица с полями X, Y и Z. Теперь немного усложним задачу, дадим нашему объекту свою метатаблицу Vector3_meta_object = -- Это будет метатаблица для всех новых объектов { -- Добавляем событие сложения __add = function( vec1, vec2 ) -- vec1 - таблица слева, vec2 - таблица справа return Vector3( vec1.X + vec2.X, vec1.Y + vec2.Y, vec1.Z + vec2.Z ); -- Создаём новый объект end; }; Vector3 = {}; Vector3_meta = { __call = function( self, fX, fY, fZ ) local vecObject = { X = fX, Y = fY, Z = fZ }; setmetatable( vecObject, Vector3_meta_object ); -- Тут мы указываем метатаблицу нашему новому объекту return vecObject; end; }; setmetatable( Vector3, Vector3_meta ); -- Проверяем vec1 = Vector3( 12, 34, 56 ); vec2 = Vector3( 78, 90, 12 ); vec3 = vec1 + vec2; print( vec3.X, vec3.Y, vec3.Z ); -- 90 124 68 В итоге при сложении двух векторов (двух таблиц с этой метатаблицей), у нас получится новый объект с новыми X Y Z. print( vec3.X, vec3.Y, vec3.Z ); - На мой взгляд это немного не удобно, намного удобнее было бы просто передать вектор в функцию print, давайте исправим, для этого нам понадобится событие __tostring function Vector3_meta_object.__tostring( self ) return "( " .. self.X .. ", " .. self.Y .. ", " .. self.Z .. " )"; end -- Проверяем vec1 = Vector3( 12, 34, 56 ); vec2 = Vector3( 78, 90, 12 ); vec3 = vec1 + vec2; print( vec3 ); -- ( 90, 124, 68 ); Заключение Как видно на примерах, в этом нет ничего сложного. Как и говорилось выше, с помощью данного функционала можно реализовать полноценные классы. Есть пару библиотек которые автоматизируют этот процесс, одна из них идёт в комплекте с Lua (require "classlib"), а вторая валяется где-то тут. Задавайте свои вопросы, постараюсь на них ответить Материал написан специально для mtasa.com. Копирование запрещено
  10. Мне вообще на самом деле было очень интересно увидеть ответ самого Kenix`а. Поэтому вопросы будут такие: 1. По какой причине были удалены сообщения 2. Почему они не были перенесены, а именно удалены 3. Почему вы нарушаете "Принципы модерирования" которые сами же написали? - Плохой пример модераторам подаёте 4. Когда на этом форуме будет порядок? P.S. Холивар для Кеникса ещё остаётся актуальным ;D
  11. Если что, тер не Kenix. Значит соучастник Я не знаю, что у вас там за политика сейчас, но удалять молча посты как минимум не красиво - отсюда и появляются у людей подобные мысли (потёрли по тихому пока никто не увидел ). В такой ситуации принято переносить сообщения в другую тему (тем более как я помню- вам вообще запрещено сносить посты без особых причин).
  12. Это капец какой-то. Когда вы научитесь нормально задавать вопросы. Когда вы научитесь нормально создавать темы? Куда вообще смотрят "модераторы"? Прочтите: viewtopic.php?f=142&t=44526 Не будьте такими эгоистами, потрудитесь нормально изложить суть вопроса. И вообще поясните чего вы ожидали от этого куска кода. Чего вы от него хотите?
  13. И всё же Kenix, хотелось нам всем увидеть от тебя твои "оригинальные" проекты, о которых ты так кричишь (включая Акину 4-х летней давности ) Для тех кто не в курсе: Страница 1: http://webcache.googleusercontent.com/s ... clnk&gl=ru Страница 2: http://webcache.googleusercontent.com/s ... clnk&gl=ru P.S. А то взяли моду, удалять посты вместо того чтобы согласится, что не правы.
  14. Значит вы не корректно завершаете работу сервера (из розетки его выключаете?) Нудный? Мне просто смешно это слышать в свой адрес. Особенно когда вы ставите в подпись такую цитату.. Думаю намёк ясен Вообще на личности переходить не стоит, не думаю, что вам будет приятно если я скажу что вы полный ламер.. Это кстати будет очень к месту, ибо вы находитесь на техническом форуме.
  15. работает отлично, пожалуй, самая лучшая. Посмотрел, код.. И с каких это пор такие "системы" стали быть "лучшими"? Вы меня извините, но это просто говнокод, особенно при: перед рестартом нужно выйти с сервера, иначе он не успевает сохранить данные игроков и откатывает на предыдущий сейв. Что мешает сохранить всех игроков при остановке ресурса? Наверное не знание про таблицы и циклы, об этом говорит код ниже: Откроем файл zyky.lua И уже с первых строчек мне хочется просто заплакать: function playerLogin (thePreviousAccount, theCurrentAccount, autoLogin) if not (isGuestAccount (getPlayerAccount (source))) then local accountData = getAccountData (theCurrentAccount, "funmodev2-money") if (accountData) then local playerMoney = getAccountData (theCurrentAccount, "funmodev2-money") local playerSkin = getAccountData (theCurrentAccount, "funmodev2-skin") local playerHealth = getAccountData (theCurrentAccount, "funmodev2-health") local playerArmor = getAccountData (theCurrentAccount, "funmodev2-armor") и так весь файл.. Вспоминается SA-MP где быдло-кодеры пишут addVehicleEx около тысячи раз. Уж не думал, что такой ужас придёт и в MTA. Автор явно не брался за изучение Lua, и про чистоту кода тоже не слышал.
  16. Значит видимо на то есть причины. Просто так не игнорируют, учитесь задавать вопросы
  17. Для таких вопросов есть тема: viewtopic.php?f=141&t=38632&start=1560 Это намёк на то, что не нужно засирать форум подобными темами
  18. Во первых вы перепутали раздел: viewforum.php?f=142 Во вторых: viewtopic.php?f=142&t=44526
  19. http://ilovelua.narod.ru/about_lua.html#Tables
  20. http://lurkmore.to/Костыль P.S. Админы форума МТА - когда уже исправите косяк с кириллицей в ссылках?
  21. И как вас угораздило так? Лезете куда-то и сами не знаете куда. Изучайте МТА: https://wiki.multitheftauto.com/wiki/Main_Page Конкретно вашей темы: https://wiki.multitheftauto.com/wiki/Debugging
  22. Дебаг не пробовали смотреть? Уверен он пишет про syntax error
  23. TheNormalnij, я не правильно понял вопрос, и поэтому дал код, который закрепляет камеру над объектом (т.е. обзор вокруг объекта, как при виде от 3-го лица). P.S. Я в коде забыл привязать функции к событиями EDIT Вам правильно сказали, рассчитывайте с помощью getPositionFromElementOffset, в offX,offY,offZ указывается смещение относительно автомобиля.
×
×
  • Create New...