Wake of Gods Forum | Форум Во Имя Богов
Lua скрипты - Printable Version

+- Wake of Gods Forum | Форум Во Имя Богов (http://wforum.heroes35.net)
+-- Forum: Герои Меча и Магии 3.5 WoG/ERA (/forumdisplay.php?fid=99)
+--- Forum: Скрипты (/forumdisplay.php?fid=103)
+--- Thread: Lua скрипты (/showthread.php?tid=5172)


Lua скрипты - aLLigator - 27.03.2009 23:10

Маленький пример скрипта на ЛУА для ВОГ:
Code:
ZVSL()

LE(1, 2, 0).? = function()
  Message("Hi!")
end



RE: Обсуждение - обо всём - FCst1 - 27.03.2009 23:12

О_о!!! Вот это круто!


RE: Обсуждение - обо всём - Flashback - 27.03.2009 23:26

Класс


RE: Обсуждение - обо всём - Wog master - 28.03.2009 06:15

Мне не вкатило.


RE: Обсуждение - обо всём - Berserker - 28.03.2009 06:24

Wog master, это более серьёзный язык программирования, от сферы которых ты просто далёк.


RE: Обсуждение - обо всём - Wog master - 28.03.2009 13:16

Я изучал бейсик и паскаль, но этот так... Bad


RE: Обсуждение - обо всём - Berserker - 28.03.2009 18:56

Это несколько иное семейство языков. С синтаксисом, в корнях которого был СИ. От него остались скобки, операторы вроде (условие ? значение1 : значение 2), а также краткие формы арифметических операторов: y+=6;


RE: Обсуждение - обо всём - FCst1 - 28.03.2009 19:58

Вот, помню, для начинающих в ERM была сделана программа ERM Creator, удобная по использованию. Вопрос: будет ли для LUA сделана подобная.
PS. Автор ERM Creator - Soul Reaver


RE: Обсуждение - обо всём - Flashback - 28.03.2009 20:36

FCst1, по крайнем мере должна быть. Так как команд должно быть очень много и в блокноте их будет не очень удобно писать Sm


RE: Обсуждение - обо всём - Berserker - 28.03.2009 21:00

Нет нужды. ЕРМ остался, переходники к нему делаются по одному шаблону. А для самого Луа полно документации.
Хотя на пентиумах 600 такие монстры как вог 3.59 уже врядли пойдут.


RE: Обсуждение - обо всём - GrayFace - 29.03.2009 00:05

(28.03.2009 18:56)Berserker Wrote:  Это несколько иное семейство языков. С синтаксисом, в корнях которого был СИ. От него остались скобки, операторы вроде (условие ? значение1 : значение 2), а также краткие формы арифметических операторов: y+=6;
96-copy Ни в одном из 3 языков ничего подобного нету. Lua - по синтаксису похож, как-раз, на паскаль, бэйсик, хоть и написан на Си.


LUA - garretdrazor - 17.08.2011 16:06

Что вообще из себя представляет LUA? С помощью него можно будет без особых проблем добавлять новые города, больше юнитов и артов... или?
Читал вроде что он гораздо удобнее и что-то вроде с циклами там по другому устроено


RE: LUA - MaGoth - 17.08.2011 17:49

garretdrazor,
Quote:Что вообще из себя представляет LUA? С помощью него можно будет без особых проблем добавлять новые города, больше юнитов и артов... или?
Читал вроде что он гораздо удобнее и что-то вроде с циклами там по другому устроено
http://ru.wikipedia.org/wiki/Lua
http://www.gamedev.ru/code/terms/Lua


RE: LUA - Efrit - 17.08.2011 19:34

Луа для ВоГ - это по сути надстройка на ЕРМ'ом. То есть - нормальная инициализация переменных, циклы, массивы и так далее. Ну и всякие функции работы со строками и файлами, естественно. Удобная штука, в общем Sm А каких-то новых "чисто геройских" команд, вроде бы, ЛУА не содержит.


RE: LUA - garretdrazor - 17.08.2011 20:05

я только С++ учил и ассемблер(который мне хотелось бы забыть)...
судя по тому что бастион и гавань уже встроили это значит что там это будет сделать несложно?


RE: LUA - gamecreator - 17.08.2011 20:19

(17.08.2011 20:05)garretdrazor Wrote:  ассемблер(который мне хотелось бы забыть)
и зря. очень хороший и полезный язык.


RE: LUA - Sav - 17.08.2011 21:06

garretdrazor Wrote:ассемблер(который мне хотелось бы забыть)
Видать, так учил. Sm Вообще, им стоит хоть немного владеть, хотя бы для общего развития.


Lua скрипты. Помощь и обсуждение - Valery - 05.01.2018 20:19

A new language to learn? cool)


RE: ERM => Lua FAQ - Berserker - 05.01.2018 22:29

Lua is used in most games, like HMM 5 or Fallout. It's quite fast and expressive. All ERM features remain still. With Lua there is no border between scripts and plugins.

Code:
local NO_MON = -1

-- Given hero ID. Returns slot without creatures or false on failure
function findFreeSlot (heroId)
  erm.y[1] = heroId  

  for i = 0, 6 do -- repeat from 0 to 6
    erm.y[2] = i
    erm('HEy1:C0/y2/?y3/?y4')

    if y3 == NO_MON then
      return i
    end
  end

  return false
end

local freeSlot = findFreeSlot(0) -- find free slot for Orrin

if freeSlot then
  print('Found ' .. freeSlot)
else
  print('Not found ((')
end



RE: ERM => Lua FAQ - XEPOMAHT - 06.01.2018 00:53

Поддержка хуков будет? Например, если картоделу понадобиться расширить таблицы для добавления новых героев в ERA (пример из WoG 3.59):



RE: Lua скрипты. Помощь и обсуждение - Berserker - 06.01.2018 01:13

Не увидил хуков. Увидел только выделение памяти под новые структуры (такая функциональность есть, malloc, ffi.new и иже с ним из стандартной поставки luajit) и замена старых адресов новыми с глобальным реестром (?) структур по имени. Возможно, у Сергея был ещё какой-то побочный функционал.

Что касается перехватчиков/хуков в коде, то таковые поддерживаются. Реальный пример из era.lua:

Code:
-- установили перехватчик по адресу, когда окно уже создано и базовые ресурсы загружены
era.bridge(0x4EEEA5, function (context)
  -- Redirect message boxes to native game dialog system
  era.msg  = nativePrint
  era.ask  = era.showNativePrompt
  _G.print = era.msg
  
  era.trigger('OnGuiStart') -- сгенерировали новое именованное событие
  
  return 1 -- выполнили код по умолчанию
end)

Будет реальный запрос на модуль с синтаксисом вроде 3.59, добавлю. Глобальная таблица расширенных структур и несколько удобных методов для патчинга адресов.


RE: Lua скрипты. Помощь и обсуждение - Berserker - 06.01.2018 03:28

Добавил в ЭРЕ функции для внесения заплаток в секции кода.

function mem.writeHex (ptr, data)
function mem.writeByte (ptr, value)
function mem.writeWord (ptr, value)
function mem.writeInt (ptr, value)


Пример:
Code:
local buf = ffi.new(mem.pu8, 1000)    -- создали новый массив на 1000 байт для хранения неясной структуры
mem.writeInt(0x4035E2, mem.addr(buf)) -- пропатчили обращение к массиву
mem.writeHex(0x701000, 'abcdef')      -- записали 3 байта hex-строки в точку входа исполняемого файла



RE: Lua скрипты. Помощь и обсуждение - feanor - 06.01.2018 21:25

Что насчет именованных геройских констант и адекватного представления геройских структур (без ритуалов с ffi через строчку или, прости господи, динамического ерм)?


RE: Lua скрипты. Помощь и обсуждение - Berserker - 07.01.2018 00:24

feanor, работать нужно в этом направлении через ритуал ffi-структуры + ffi.metatype либо через обёртки модуля erm-подобного и get/set методы: erm.hero(3):setName().
Это библиотечные файлы, которые нужно писать. Готовых взять негде. Для начала планирую ерм-функционалу давать обвязку, структур-то много. Хотелось бы camelCase выдержать, а так можно пробовать из HD-мода конвертировать для начала. Любые начинания приветствуются и очень желательны.


RE: ERM => Lua FAQ - Heromant - 15.07.2019 19:05

(05.01.2018 22:29)Berserker Wrote:  ***
    erm.y[2] = i
    erm('HEy1:C0/y2/?y3/?y4')

    if y3 == NO_MON then
    ***

Между erm('HEy1:C0/y2/?y3/?y4') и if y3 == NO_MON разве не надо строку:
y3 = erm.y[3]
Или что-то вроде этого? Переменные y3, у4 сами "материализуются" в контексте выполнения?


RE: Lua скрипты. Помощь и обсуждение - Berserker - 15.07.2019 22:19

Надо, пропустил.


RE: Lua скрипты - Bes - 22.03.2022 12:04

(20.03.2022 18:22)Berserker Wrote:  wessonsm, пожалуйста. Жаль, так и не успел с Lua сделать аналогичное.

прозвучало, как будто ты все планы по ЛУА на базе ERA полность свернул и более не планируешь?!


RE: Lua скрипты - Berserker - 22.03.2022 23:03

Не мы такие, жизнь такая ) На текущий момент просвета не видно.