Рекламы не будет. Довольствуйтесь её отсутствием. Продление домена = 120(или 180 рублей.. хз), что не очень много. ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
Большую часть моих мыслей выразил Фирсачо) Времени у меня реально нет на сайт - с этим смиритесь!
И Фирсачо прав - интерес к сайту прямо пропорционален числу активных качественных законченных модов и обратно пропорционален количеству флуда. Отсюда вывод - меньше флудите(на что и направлены правила), развивайте свои таланты в изменении червяков - и сайт оживёт, поверьте!
Да, с помощью Lua скриптов создавать взрывы в заданных местах карты по какому-либо событию - таймер/новый ход ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
Глупая идея внезапно возникла - сделать червю шапку - презерватив) или полностью его всунуть в него) ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
Повысил Sergey до модератора и назначил его модератором раздела W4Challenge. Поздравляем нового модератора с его повышением! =) ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
Неплохая работа, продолжай в том же духе) ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
По поводу Brainfuck - одна из моих первых программ на C# была интерепретатором брейнфака) Даже попробовал сделать бой в памяти 2-х бегущих навстречу программ =) P.S. C# - один из последних изученных мною языков..
Присоединяюсь к Lex-у в их споре с firsacho по поводу необходимости таких явлений как брейнфак.
Хочу ещё раз предложить вам использовать систему контроля версий, SVN к примеру. Разработку стало бы легче контролировать, все ваши промежуточные идеи хранились бы и весь мод был бы в центральном хранилище. ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
Кто хочет продолжения уроков? У меня есть настроение немного ими заняться) ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
Этим я займусь лишь при большом желании и наличии какого-либо времени. Сейчас я спрашиваю более конкретно - следующий урок кому-нибудь нужен? ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
О, SW_Krash, привет) тогда будет ;) Только сомневаюсь, что сумею сохранить свой прежний стиль изложения уроков.. И надеюсь вспомню всё, что хотел рассказать. ________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
Итак, на данный момент мы уже умеем работать с переменными и знаем, что у них есть типы (nil, boolean, number, string, function, userdata, thread, table). В прошлом уроке мы узнали, что такое таблицы (table), и узнали пару функций для работы с ними. Первые четыре типа мы уже знаем из третьего урока. Единственный тип, о котором я ещё вам не рассказал, но хочу - это функция(function).
Страшное пожалуй название "функция"... Но вы не пугайтесь, это всего лишь название =) Я не буду рассказывать, что такое функция в математике(всякие там параболы и синусы), сдались они нам сейчас? Скажу лучше, что это. Функция в lua - это какая-то последовательность действий, у которой есть своё название. Не воспринимайте это, как точное определение.
Представьте, что перед нами стоит задача написать на экране сумму, разность, произведение и частное двух чисел a и b. Её можно решить очень просто:
Code
a = 10 b = 2 print(a + b) print(a - b) print(a * b) print(a / b)
Теперь вдруг кроме чисел a и b надо написать то же самое для чисел c и d. Решаем аналогично
Code
c = 5 d = 7 a = 10 b = 2
print(a + b) print(a - b) print(a * b) print(a / b)
Страшно, не правда ли? Если бы приходилось писать так много кода, программирование было бы самым тупым и занудным занятием в мире. Но для таких лентяев, как я, то есть для программистов, придумали функции.
Покажу на примере, как они облегчат жизнь:
Code
function arifmetika(x, y) print(x + y) print(x - y) print(x * y) print(x / y) end
a = 10 b = 2 c = 5 d = 7
arifmetika(a, b) arifmetika(a, c) arifmetika(a, d) arifmetika(b, c) arifmetika(b, d) arifmetika(c, d)
Отлично выглядит по сравнению с прошлым кодом? А делает те же действия)
Всё легко - мы взяли и назвали 4 строчки кода словом арифметика, а потом вместо дублирования этих строк кода поставили их имя.
Теперь более формально. Функция описывается вот так:
Code
function имя_функции(параметры_через_запятую) код_функции end
После того, как функция описана, можно её вызывать, то есть писать arifmetika(a, b), подставляя в неё параметры. При этом выполнится код функции, с учётом, что вместо x подставлено значение a, то есть 10, а вместо y подставлено значение b, то есть 2.
Надеюсь это хороший пример и его достаточно, чтобы понять, что такое функция.
Есть ещё одна важная вещь - функция может возвращать какой-либо результат. В самом простом случае это может быть математическое выражение. Вот пример знакомой всем из математики параболы:
Code
function parabola(x) return 2*x^2+3*x+8 end
y = parabola(2) print(y)
Этот код выведет на экран число 22. Всё очень просто: наша Функция вернула 22 наружу и это значение записалось в y.
Чтобы вернуть результат функции используется слово return c возвращаемым значением. При этом функция завершает свою работу. Если значение отсутствует, то функция просто завершает свою работу.
Пример:
Code
function test() print(1) return print(2) end
test()
На экран будет выведено только 1, потому что до строки print(2) выполнение не дойдёт.
Важно, что функция может возвращать что угодно, то есть любой тип данных lua - число, строку, логическое значение, таблицу и даже функцию (но о последнем мы поговорим попозже). Вот пример функции, которая возвращает строку
Функция, возвращающая строку. Примимает на вход час, минуту и секунду, а возвращает понятную человеку текстовую строчку
Code
function format_time(h,m,s) return h..":"..m..":"..s; end
print(format_time(10,12,48))
Эта функция распечатает на экране 10:12:48.
В lua есть чудесная возможность - писать в одной строке сразу два присваивания, смотрите:
Code
a, b = 2, 3
print(a) print(b)
Пример выведет сначала 2, потом 3. В первой строке мы присвоили a первое значение, то есть 2, а переменной b - второе, то есть 3. Можно писать после равно не только числа но и любые значения или переменные, в частности это можно использовать, чтобы обменять два значения:
Code
a, b = 2, 3
print(a) print(b)
a, b = b, a
print(a) print(b)
Тут выведется сначала 2 и 3, а потом, после обмена 3 и 2. Удобно..)
К чему я это всё? А к тому, что функция может возвращать не одно, а 2 значения, смотрите:
Code
function test() return 2, 3 end
a, b = test()
print(a) print(b)
Результат примера аналогичен первому.
А это можно использовать, чтобы вычислить сразу 2 функции с помощью одной:
Code
function sincos(x) return math.sin(x), math.cos(x) end
s, c = sincos(1.2)
print(s) print(c)
Тут переменная s станет синусом 1.2, а переменная c - косинусом 1.2
Так, теперь ещё одна особенность работы с функциями. Посмотрите на этот код:
Code
function test() a = 10 b = 20 return a + b end
a = 15 b = 22
print(a) print(b)
print(test())
print(a) print(b)
Пример напечатает:
Code
15 22 30 10 20
Как видите, после работы функции test переменные a и b снаружи функции изменились. Это называют Функцией с обратным эффектом. То есть функция возвращает какое-то значение (a + b), но снаружи при этом что-то ещё меняется. Иногда это делать не надо. В данном примере, чтобы найти сумму 10 и 20 нам не надо использовать внешние переменные. Поэтому придумали локальные переменные, которые видны только внутри функции. Объявляется локальная переменная так же как и обычная, но с ключевым словом local:
Code
function test() local a = 10 local b = 20 return a + b end
a = 15 b = 22
print(a) print(b)
print(test())
print(a) print(b)
В этом примере внешние переменные a и b не изменятся, и на экране появится
Code
15 22 30 15 22
Отлично, с этим разобрались.
Теперь немного посложнее. Помните список типов переменных lua? Один из них function. Что же это значит? А это значит, что в переменной мы можем хранить функцию! Смотрите, сейчас переделаю прошлый пример:
Code
function sincos(x) return math.sin(x), math.cos(x) end
sc = sincos
s, c = sc(1.2)
print(s) print(c)
Тут в переменную sc я записал функцию sincos. Важно, что записи sc = sincos и sc = sincos() означают разное. Первая запись - это записать в sc функцию sincos, вторая значит вызвать sincos() без параметров и записать в sc результат. Не путайте!
Если написать в последнем примере print(type(sc)), то на экране будет выведено слово function. Это значит, что у sc тип данных function. Во как)
А что, если попробовать написать print(type(sincos))? Мы получим тот же результат - тип function. Интересно, что же это получается, sincos - это переменная, которая хранит функцию? Да это так.
Поэтому функции можно объявлять другим способом, смотрите:
Code
test = function(x) return x end
print(test(2))
Этот пример абсолютно идентичен такому:
Code
function test(x) return x end
print(test(2))
Вот так.
А теперь давайте подумаем. 1) В lua есть тип переменных function. 2) В любой функции можно объявить локальную переменную
Так почему бы не объявить локальную функцию? Это можно сделать и очень даже не сложно, смотрите:
Code
function f(x, a, b, c) local function parabola(x) return a*x^2 + b*x+ c end
return parabola(x) end
print(f(2, 1, 2, 3))
Внутри функции f объявлена локальная Функция parabola, которая принимает на вход x. Так как она объявлена внутри функции f она знает числа a, b и c и может их использовать Для вычисления формулы.
С точки зрения программирования это красиво =) У всех людей нормальное представление о красоте, а у программистов такое вот....
Напоследок ещё раз напряжём мозги: 1) В lua есть тип переменных function. 2) Из функции можно возвращать любой тип данных, в том числе и function
Попробуем вернуть из функции функцию:
Code
function parabola(a, b, c) return function(x) return a*x^2 + b*x+ c end end
f = parabola(1, 2, 3)
print(f(2))
Тут на выходе мы получаем функцию от x, которую потом мы можем использовать сколько угодно раз.
Надеюсь после прочтения всего этого вы не повредели свои мозги)))
Ну и самое последнее - в функциях не было бы смысла, если бы разработчики lua не сделали бы нам прилично много готовых функций для решения разнообразных задач. Вы уже видели в прошлом уроке функции для работы с таблицами. Как правило, все их функции орагнизованы в модули, к примеру модуль math - для работы с математикой, модуль table - для работы с таблицами, string - для строк и т.д. И как вы наверно уже видели, вызов функции выглядит так:
Code
math.sin(10)
Похоже на таблицы, правда?
Всё дело в том, что в таблице можно хранить любые значения, в том числе и функции, поэтому можно писать так:
Code
my_module = {} my_module.do_something = function() print("chto-to delaem") end
my_module.do_something()
Это удобно для организации всех ваших функций в один модуль.
Есть такой вот мануальчик Основы Lua, который я когда-то создал. Советую его почитать...
Содержимое той страницы открыто для редактирования, вносите изменения. В частности там надо немного подкорректировать все таблички, куски кода и т.п. в плане оформления.
Зачем тебе нужен перехват захода на сервер? Оптимально отдельный загрузчик перед стартом игры.
Юзверь запускает загрузчик, видит список модов, видит текущий выбранный мод. При этом он может переключиться на другой мод.
При этом есть некий глобальный сервер, к примеру example.com, на нём находтся php скрипт, который возвращает xml-ку со списком модов и где их можно загрузить + краткое описание + md5 + возможно, список зеркал. Ещё можно возвращать список подобных ему сайтов, где можно раздобыть такой вот список.
md5 логично использовать для каждого файла и папки, ибо большинство модов затрагивают пару-тройку файлов и нет смысла лопатить всю папку.
На чём собираешься писать? Если на C#, плюсах или java - могу немного помочь, если будет желание. Сразу делай хранилище либо в SVN, либо в git, или не буду помогать ;)