Дополнительная библиотека функций.
|
|
Сообщений: 3813
|
Опубликовано: 29.01.2011, 12:10:39
Я понимаю конечно, что у нас на сайте очень мало народу более менее прилично разбирается в скриптах, но тем не менее народ начинает проявлять интерес и хочу дать на мой взгляд неплохую идею. Собрать дополнительную библиотеку функций - отдельный луа-скрипт подключаемый к карте, в котором хранятся дополнительные скрипты-функции, которых нет в червях, но которые часто требуются. Это очень удобно, потому что не нужно лишний раз писать какие-то стандартные скрипты, а просто вызвать функцию, передав ей при необходимости нужные параметры и получив результат. Так например, скрипт проверки использования оружия, написанный Krash'ем для Innovation. В стандартных функциях к червях такого почему то нет, но очень часто требуется запустить выполнение скрипта именно при использовании конкретного оружия. Также функции расстановки червей и ограничение команды 1м червем в Inno давно выведены в библиотеку. Достаточно вначале скрипта к карте прописать ActRast = 1 и черви автоматом расставляются на эммиторы. Очень удобно. Библиотеку можно постоянно пополнять и выпускать к ней новые версии а модеры будут просто прикладывать библиотеку к моду.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 29.01.2011, 12:47:01
Отличная идея! Я приму участие! Теперь тут я не отвяжусь от идеи использования svn мои идеи: 1) все новые функции поместить в модуль w4: Code --файл w4.lua local echo(text) SetData("Text.TestComment", text) SetData("CommentaryPanel.Comment", "Text.TestComment") SendMessage("CommentaryPanel.ScriptText") end
w4={} w4.echo=echo;
--файл stdvs.lua require"w4"
function Worm_Died() deadworm = GetData("DeadWorm.Id") w4.echo(deadworm) end 2) обернуть объекты игры в луа-объекты типа Code --какой-то пользовательский код:
local deadworm = w4.worm(GetData("DeadWorm.Id")) deadworm:setHealth(100) w4.echo(deadworm.health)
3) перехватывать все стандартные события w4 в скрипте, а в stdvs вызывать уже "высокоуровневые" варианты функций: Code --файл w4.lua
local oldWorm_Died = Worm_Died function Worm_Died() if w4.onWormDied then local deadworm = w4.worm(GetData("DeadWorm.Id")) w4.onWormDied(deadworm) else oldWorm_Died() end end
--файл stdvs.lua require"w4"
function w4.onWormDied(worm) worm:setHealth(100) w4.echo(worm.health) end
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 3813
|
Опубликовано: 29.01.2011, 14:02:28
Quote (rocketvadim) Ты предлагаешь дописать их в lib_help.lua, верно мне кажется удобнее создать отдельный подключаемый скрипт где только дополнительные функции Quote (Герыч) все новые функции поместить в модуль w4: только название пооргинальнее) чтоб можно было сказать название модуля и уже было понятно о чем идет речь. Например какой-нибудь DeveLib назвать... вобщем, чтоб звучало Quote (Герыч) --файл w4.lua local echo(text) SetData("Text.TestComment", text) SetData("CommentaryPanel.Comment", "Text.TestComment") SendMessage("CommentaryPanel.ScriptText") end w4={} w4.echo=echo; --файл stdvs.lua require"w4" function Worm_Died() deadworm = GetData("DeadWorm.Id") w4.echo(deadworm) end ОМГ.. теперь герыч будет писать кучу неизвестных мне (и большинству) функций... допиши комменарии.. require"w4" например, че такое?) Quote (Герыч) перехватывать все стандартные события w4 в скрипте, а в stdvs вызывать уже "высокоуровневые" варианты функций: ну собственно это я и имел ввиду. И отдельную тему-справочник создать к библиотеке нужно. Где описаны все функции и как их вызывать, какие параметры можно присвоить, какие получить.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 2848
|
Опубликовано: 29.01.2011, 14:10:30
Quote (firsacho) Например какой-нибудь DeveLib назвать... вобщем, чтоб звучало Тогда уж лучше AdLib от added - добавленный (гы-гы, получилось похоже на ad libitum)
------------------------------------------------------------- And when the sun is shining, there is justice for all... And all the people will remember that funny "war". War, which was so dark in the beginning and so shiny in the end. But now it's over. Over for all. ------------------------------------------------------------- Я сюда захожу только из-за Game Project. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
|
|
|
|
Сообщений: 3813
|
Опубликовано: 29.01.2011, 14:18:17
Quote (rocketvadim) Тогда уж лучше AdLib от added - добавленный (гы-гы, получилось похоже на ad libitum) вариантов много можно придумать. Это еще надо будет повыбирать. Еще мысль такая что все функции вызываемые из этой библиотеки и переменные используемые ей, должны иметь некий префикс в названии, чтоб сразу при чтении было понятно, что они ссылаются на нее и это нестандартные функции.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 825
|
Опубликовано: 29.01.2011, 14:52:20
Quote (firsacho) require"w4" это значит включить файл w4.lua в другой файл (х3 как по другому выразить) вообще ты это должен знать, эта функция есть в пхп мне страшно за себя - мне тут все понятно, это что то типо упрошенного си или упрошенного джаваскрипта, а вообще все языки чем то друг на друга похожи)
:3
|
|
|
|
Сообщений: 3813
|
Опубликовано: 29.01.2011, 15:26:46
не знал что в луа можно включать файлы друг в друга. Ну подключать можно и через xml.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 818
|
Опубликовано: 29.01.2011, 20:15:34
ээээ.... а я ничего не понял =)))) в посте Герыча много всего сложного и непонятного... тут просто так не разобраться =)))
Всё что ни делается, делается в Китае(SW_Krash, 2009) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008) Я отрицаю вашу реальность и заменяю её своей!(Адам Севидж, 200x) OFFTOP SWEAT OFFTOP(фольклор)
|
|
|
|
Сообщений: 1240
|
Опубликовано: 29.01.2011, 22:18:50
пусть библиотека будет зваться очень просто - tweak Code --файл tweak.lua
local echo(text) SetData("Text.TestComment", text) SetData("CommentaryPanel.Comment", "Text.TestComment") SendMessage("CommentaryPanel.ScriptText") end
tweak={} tweak.echo=echo;
--файл stdvs.lua require"tweak"
function Worm_Died() tweak.echo("Hello world!") end Кто за такое название? Название вообще должно быть простое, ибо это в коде придётся много писать, по идее w4 больше подходит =)
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 3813
|
Опубликовано: 29.01.2011, 22:51:55
tweak еще хуже) твик это твики) у тебя нет фантазий на названия) то что простое это понятно. Но оно должно быть красивым и уникальным, иначе путаница получится) как скажешь подключи к скрипту библиотеку твик... туфталогия какая то)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 1240
|
Опубликовано: 29.01.2011, 23:10:17
думай быстрее тогда) Я хочу svn хранилище уже создать и рассказать, как пользоваться. Да, скачайте пока и установите себе вот эти проги: TortoiseSVN (или 64-битную версию), русификация (64 бита) Было бы здорово ещё, если бы почитали бы главу 2 в этой книжке-документации
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 30.01.2011, 23:08:51
Во-первых, название библиотеки придумали? Во-вторых, вот как лучше библиотеку оформить w4.lua: Code module(..., package.seeall)
local a = 10 --локальная переменная, снаружи не будет видна version = 1 --глобальная переменная, снаружи будет видна как w4.version
local function about() --локальная функция, снаружи не будет видна echo("w4 module") end
function echo(text) --глобальная функция, снаружи будет видна как w4.echo(text) SetData("Text.TestComment", text) SetData("CommentaryPanel.Comment", "Text.TestComment") SendMessage("CommentaryPanel.ScriptText") end stdvs.lua: Code require"w4" w4.echo(w4.version) А вот один из вариантов, как сделать класс: w4.lua: Code module(..., package.seeall)
worm = {}
function worm.new(...) local self = {}
--закрытые переменные local id
--инициализация объекта if arg.n == 1 then id = arg[1] else id = GetData("ActiveWormIndex") end
--Закрытые функции local function containerName() local DataId = { "Worm.Data00", "Worm.Data01", "Worm.Data02", "Worm.Data03", "Worm.Data04", "Worm.Data05", "Worm.Data06", "Worm.Data07", "Worm.Data08", "Worm.Data09", "Worm.Data10", "Worm.Data11", "Worm.Data12", "Worm.Data13", "Worm.Data14", "Worm.Data15", "Worm.Data16", "Worm.Data17", ""} return DataId[id + 1] end local function container() return QueryContainer(containerName()) end
--Публичные функции function self.id() return id end function self.name() local worm = container() return worm.Name end function self.teamIndex() local worm = container() return worm.TeamIndex end
return self end stdvs.lua: Code require"w4" worm = w4.worm.new(10) w4.echo(worm.name())
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 3813
|
Опубликовано: 30.01.2011, 23:36:48
Quote (Герыч) module(..., package.seeall) local a = 10 --локальная переменная, снаружи не будет видна version = 1 --глобальная переменная, снаружи будет видна как w4.version local function about() --локальная функция, снаружи не будет видна echo("w4 module") end function echo(text) --глобальная функция, снаружи будет видна как w4.echo(text) SetData("Text.TestComment", text) SetData("CommentaryPanel.Comment", "Text.TestComment") SendMessage("CommentaryPanel.ScriptText") end локальная переменная = 10 - зачем она нужна? Что делает module(..., package.seeall) ? Функция для вывода текста понравилась) Quote (Герыч) А вот один из вариантов, как сделать класс: Для начала объясни научнопопулярным языком, понятным языком не для программистов что за класс и зачем он нужен?
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 1240
|
Опубликовано: 31.01.2011, 00:31:19
module(..., package.seeall) - не помню. Главное, что после этого все функции и переменные будут помещаться в таблицу, указанную в require"w4", то есть в w4, соответственно ты сможешь вызывать их снаружи. package.seeall вроде чтобы ты мог внутри модуля использовать то, что объявлено снаружи. Класс - это описание чего-либо, что можно потрогать руками) Легче на примере: Класс машина. Машина имеет свойства - цвет, вес, модель, хз ещё что. Машину можно завести, можно заправить, открыть и т.п - это методы, которые можно над ней проводить. В ООП(объектно ориентированном программировании) обычно сначала описывают все классы, действия над ними(методы) и их свойства. К примеру у нас это так: класс - червь, методы - убить червя DieQuietly, спаунить Respawn, убрать червя UnspawnWorm, прибавить здоровья. Свойства - имя, индекс, здоровье. Класс - это просто описание любого червя. Для работы с одним создают объект этого класса, его конкретный экземпляр (с помощью w4.worm.new()).
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 3813
|
Опубликовано: 31.01.2011, 00:35:57
Quote (Герыч) В ООП(объектно ориентированном программировании) обычно сначала описывают все классы, действия над ними(методы) и их свойства. К примеру у нас это так: класс - червь, методы - убить червя DieQuietly, спаунить Respawn, убрать червя UnspawnWorm, прибавить здоровья. Свойства - имя, индекс, здоровье. Вот так похоже понятнее)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 1240
|
Опубликовано: 12.02.2011, 22:10:09
Собственно создал онлайн SVN-хранилище для проекта и багтрекер. Адрес хранилища: http://svn3.xp-dev.com/svn/w4library/ Адрес багтрекера: http://trac3.xp-dev.com/w4/wiki Для того, чтобы участвовать в проекте - зарегистрируйтесь на http://www.xp-dev.com. После этого говорите свой логин мне, я дам право на запись в хранилище. Сейчас же можно только просматривать файлы проекта. Для этого установите TortoiseSVN, затем создайте на компьютере папку, щёлкните правой мышкой и там выберите SVN Checkout, впишите туда http://svn3.xp-dev.com/svn/w4library/ Для обновления кода из хранилища используйте команду SVN Update
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 12.02.2011, 22:14:54
Добавил стандартные файлы из папки Scripts
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 12.02.2011, 23:54:37
Для начала сообщи, у тебя вышло код выкачать через TortoiseSVN? Добавил файл w4.lua. Написал замену стандартным обработчикам. Качаю Worms
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|