-
Posts
1,739 -
Joined
-
Last visited
Everything posted by Kernell
-
Насколько я помню, если установить minclientversion в конфиге/meta.xml, то при подключении к серверу, клиенту предлагается обновиться если его версия ниже указанной. Поэтому ставьте на своё усмотрение.
-
Неон из сампа как бы лучше тем, что он "натуральный" (2dfx), т.е. его свет влияет на окружаюший мир и т.д.
-
[Lua] setmetatable, учимся работать с метатаблицами
Kernell replied to Kernell's topic in Уроки / Примеры
Просто добавьте функцию 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" ); -
Разработчики так-то не роботы, и не на конвейере делают мультиплеер
-
Сейчас получается, что если ты стал модератором, то можешь не помогать пользователям. Разве нет? Они хоть и не helpdesk, но делать раздел лучше по моему входит в их обязанности (какой тогда смысл от них если они будут играть роль "фильтра сообщений"?). К сожалению, сейчас и те кто помогают - не становятся модераторами Имей ввиду, что другие пользователи видят это. И то как всё это выглядит - отражается на том, останутся они тут или пройдут мимо с мыслью "очередной быдло-форум".
-
Собственно о чём и идёт речь - модераторы этого не делают. Даже если кто-то и задаст вопрос и поможет решить проблему, то тему никто не исправит (как например тут viewtopic.php?f=141&t=57973). Приведённый тобою пример действительно отличается - хотя бы названием темы. Много ли ты нашел ещё подобных тем? На этом форуме их больше.
-
Речь не о затыкании пользователей, а о наказании за не чтение правил и о работе модераторов в целом. Я считаю вашу политику вообще нужно изменить, ибо такая приводит только к подобному засиранию форума. Хорошими примерами являются те форумы, что я показал выше. И я уверен, там никто никому рот не затыкает, просто модераторы приводят вид форума в более адекватный, и у них видимо это хорошо получается. В своё время, я тут занимался тем же самым. EDIT: viewtopic.php?f=153&t=49772 А вот такие темы вообще нужно удалять. Зачем это кому-то читать? Лишь только заводить новых пользователей в заблуждение.
-
Кроме вопроса #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/
-
https://nightly.multitheftauto.com/
-
Сразу оговорюсь, данный урок требует основных знаний о таблицах 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. Копирование запрещено
-
Мне вообще на самом деле было очень интересно увидеть ответ самого Kenix`а. Поэтому вопросы будут такие: 1. По какой причине были удалены сообщения 2. Почему они не были перенесены, а именно удалены 3. Почему вы нарушаете "Принципы модерирования" которые сами же написали? - Плохой пример модераторам подаёте 4. Когда на этом форуме будет порядок? P.S. Холивар для Кеникса ещё остаётся актуальным ;D
-
Если что, тер не Kenix. Значит соучастник Я не знаю, что у вас там за политика сейчас, но удалять молча посты как минимум не красиво - отсюда и появляются у людей подобные мысли (потёрли по тихому пока никто не увидел ). В такой ситуации принято переносить сообщения в другую тему (тем более как я помню- вам вообще запрещено сносить посты без особых причин).
-
Это капец какой-то. Когда вы научитесь нормально задавать вопросы. Когда вы научитесь нормально создавать темы? Куда вообще смотрят "модераторы"? Прочтите: viewtopic.php?f=142&t=44526 Не будьте такими эгоистами, потрудитесь нормально изложить суть вопроса. И вообще поясните чего вы ожидали от этого куска кода. Чего вы от него хотите?
-
И всё же Kenix, хотелось нам всем увидеть от тебя твои "оригинальные" проекты, о которых ты так кричишь (включая Акину 4-х летней давности ) Для тех кто не в курсе: Страница 1: http://webcache.googleusercontent.com/s ... clnk&gl=ru Страница 2: http://webcache.googleusercontent.com/s ... clnk&gl=ru P.S. А то взяли моду, удалять посты вместо того чтобы согласится, что не правы.
-
Значит вы не корректно завершаете работу сервера (из розетки его выключаете?) Нудный? Мне просто смешно это слышать в свой адрес. Особенно когда вы ставите в подпись такую цитату.. Думаю намёк ясен Вообще на личности переходить не стоит, не думаю, что вам будет приятно если я скажу что вы полный ламер.. Это кстати будет очень к месту, ибо вы находитесь на техническом форуме.
-
работает отлично, пожалуй, самая лучшая. Посмотрел, код.. И с каких это пор такие "системы" стали быть "лучшими"? Вы меня извините, но это просто говнокод, особенно при: перед рестартом нужно выйти с сервера, иначе он не успевает сохранить данные игроков и откатывает на предыдущий сейв. Что мешает сохранить всех игроков при остановке ресурса? Наверное не знание про таблицы и циклы, об этом говорит код ниже: Откроем файл 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, и про чистоту кода тоже не слышал.
-
Значит видимо на то есть причины. Просто так не игнорируют, учитесь задавать вопросы
-
Для таких вопросов есть тема: viewtopic.php?f=141&t=38632&start=1560 Это намёк на то, что не нужно засирать форум подобными темами
-
Во первых вы перепутали раздел: viewforum.php?f=142 Во вторых: viewtopic.php?f=142&t=44526
-
http://ilovelua.narod.ru/about_lua.html#Tables
-
http://lurkmore.to/Костыль P.S. Админы форума МТА - когда уже исправите косяк с кириллицей в ссылках?
-
http://habrahabr.ru/post/131931/
-
И как вас угораздило так? Лезете куда-то и сами не знаете куда. Изучайте МТА: https://wiki.multitheftauto.com/wiki/Main_Page Конкретно вашей темы: https://wiki.multitheftauto.com/wiki/Debugging
-
Дебаг не пробовали смотреть? Уверен он пишет про syntax error
-
TheNormalnij, я не правильно понял вопрос, и поэтому дал код, который закрепляет камеру над объектом (т.е. обзор вокруг объекта, как при виде от 3-го лица). P.S. Я в коде забыл привязать функции к событиями EDIT Вам правильно сказали, рассчитывайте с помощью getPositionFromElementOffset, в offX,offY,offZ указывается смещение относительно автомобиля.