[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Моддинг » 5.3. Идеи скриптов и их обсуждение » Дополнительная библиотека функций.
Дополнительная библиотека функций.
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Я понимаю конечно, что у нас на сайте очень мало народу более менее прилично разбирается в скриптах, но тем не менее народ начинает проявлять интерес и хочу дать на мой взгляд неплохую идею.

Собрать дополнительную библиотеку функций - отдельный луа-скрипт подключаемый к карте, в котором хранятся дополнительные скрипты-функции, которых нет в червях, но которые часто требуются.

Это очень удобно, потому что не нужно лишний раз писать какие-то стандартные скрипты, а просто вызвать функцию, передав ей при необходимости нужные параметры и получив результат. Так например, скрипт проверки использования оружия, написанный Krash'ем для Innovation. В стандартных функциях к червях такого почему то нет, но очень часто требуется запустить выполнение скрипта именно при использовании конкретного оружия.

Также функции расстановки червей и ограничение команды 1м червем в Inno давно выведены в библиотеку. Достаточно вначале скрипта к карте прописать ActRast = 1 и черви автоматом расставляются на эммиторы. Очень удобно.

Библиотеку можно постоянно пополнять и выпускать к ней новые версии а модеры будут просто прикладывать библиотеку к моду.




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Проверенные
Сообщений: 2848
Реп: 60 / Инв: 6
Крутая идея. Ты предлагаешь дописать их в lib_help.lua, верно? В любом случае, стоит составить список самых нужных функций.



-------------------------------------------------------------
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. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Отличная идея! Я приму участие!
Теперь тут я не отвяжусь от идеи использования svn smile

мои идеи:
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


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
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
Реп: 60 / Инв: 6
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. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Quote (rocketvadim)
Тогда уж лучше AdLib от added - добавленный (гы-гы, получилось похоже на ad libitum)

вариантов много можно придумать. Это еще надо будет повыбирать.
Еще мысль такая что все функции вызываемые из этой библиотеки и переменные используемые ей, должны иметь некий префикс в названии, чтоб сразу при чтении было понятно, что они ссылаются на нее и это нестандартные функции.




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
Quote (firsacho)
require"w4"

это значит включить файл w4.lua в другой файл (х3 как по другому выразить)
вообще ты это должен знать, эта функция есть в пхп

мне страшно за себя - мне тут все понятно, это что то типо упрошенного си или упрошенного джаваскрипта, а вообще все языки чем то друг на друга похожи)


:3
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
не знал что в луа можно включать файлы друг в друга. Ну подключать можно и через xml.



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
SW_Krash
Проверенные
Сообщений: 818
Реп: 28 / Инв: 7
ээээ.... а я ничего не понял =)))) в посте Герыча много всего сложного и непонятного... тут просто так не разобраться =)))

Всё что ни делается, делается в Китае(SW_Krash, 2009)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
Я отрицаю вашу реальность и заменяю её своей!(Адам Севидж, 200x)
OFFTOP SWEAT OFFTOP(фольклор)

 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
пусть библиотека будет зваться очень просто - 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 больше подходит =)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
tweak еще хуже) твик это твики) у тебя нет фантазий на названия) то что простое это понятно. Но оно должно быть красивым и уникальным, иначе путаница получится) как скажешь подключи к скрипту библиотеку твик... туфталогия какая то)



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
думай быстрее тогда)
Я хочу svn хранилище уже создать и рассказать, как пользоваться.
Да, скачайте пока и установите себе вот эти проги:
TortoiseSVN (или 64-битную версию),
русификация (64 бита)

Было бы здорово ещё, если бы почитали бы главу 2 в этой книжке-документации


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Во-первых, название библиотеки придумали?
Во-вторых, вот как лучше библиотеку оформить

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())


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
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
Реп: 60 / Инв: 5
module(..., package.seeall) - не помню. Главное, что после этого все функции и переменные будут помещаться в таблицу, указанную в require"w4", то есть в w4, соответственно ты сможешь вызывать их снаружи. package.seeall вроде чтобы ты мог внутри модуля использовать то, что объявлено снаружи.

Класс - это описание чего-либо, что можно потрогать руками) Легче на примере:
Класс машина. Машина имеет свойства - цвет, вес, модель, хз ещё что. Машину можно завести, можно заправить, открыть и т.п - это методы, которые можно над ней проводить.

В ООП(объектно ориентированном программировании) обычно сначала описывают все классы, действия над ними(методы) и их свойства. К примеру у нас это так: класс - червь, методы - убить червя DieQuietly, спаунить Respawn, убрать червя UnspawnWorm, прибавить здоровья. Свойства - имя, индекс, здоровье.

Класс - это просто описание любого червя. Для работы с одним создают объект этого класса, его конкретный экземпляр (с помощью w4.worm.new()).


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Quote (Герыч)
В ООП(объектно ориентированном программировании) обычно сначала описывают все классы, действия над ними(методы) и их свойства. К примеру у нас это так: класс - червь, методы - убить червя DieQuietly, спаунить Respawn, убрать червя UnspawnWorm, прибавить здоровья. Свойства - имя, индекс, здоровье.

Вот так похоже понятнее)




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Собственно создал онлайн 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
Реп: 60 / Инв: 5
Добавил стандартные файлы из папки Scripts

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Проверенные
Сообщений: 2848
Реп: 60 / Инв: 6
Я зарегился, может смогу чем-нибудь помочь. Логин - rocketvadim



-------------------------------------------------------------
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. И да, я больше не модер, поэтому не надо писать мне тонны лс с просьбами кого-либо забанить. И еще: черви меня не интересуют. Совсем. Поэтому, даже не напоминайте мне про них - вызовете большой БУГУРТ.
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Для начала сообщи, у тебя вышло код выкачать через TortoiseSVN?

Добавил файл w4.lua. Написал замену стандартным обработчикам.

Качаю Worms wink


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Форум » Моддинг » 5.3. Идеи скриптов и их обсуждение » Дополнительная библиотека функций.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: