Перейти к контенту

Рекомендуемые сообщения

я так понимаю, LuaBind это может

Твоя правда, я и не подумал об этом. Там же метаметод "call", а не просто выбор по ключу. Внутри по списку аргументов можно выбрать и нужную функцию.
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

А поясните мне такую вещь: когда в дескрипшен таска мы передаем id статьи из "энциклопедии" - текст должен быть сформирован в xml- файле ? Хранится ведь не он, а только id ?

Ссылка на комментарий

А разве в Lua есть перегрузка функций? По моему вызов функции, как и обращение к чему угодно другому по имени, - это просто выбор из таблицы по ключу, а значит и функция будет вызвана одна и та же, просто с разным списком аргументов.   Или я не понял мысли?

 

Я довольно долго переваривал эти ваши 3 строчки. Мне самому всё и понятно и используемо давно, а вот как сказать, чтобы было понятно и Вам, мне стало ясно не сразу.

Попробую. В Lua в чистом виде, разумеется, нет никаких перегрузок. Это априори. Но! Вполне возможно очень элегантно это эмулировать.

Я сейчас не буду даже трогать метатаблицы, а простенький пример, оперируя только со стандартной библиотекой Lua “string” и понятием, которое в Lua определяется как «замыкание» (я его уже как-то приводил, но мой пост был удалён на стадии премодерации, видимо).

Пишем такой код и проверяем его:

local old_len = function(str) return string.len(str) end
string.len = function(str, str1) return str1 and (str1..' равна = '..old_len(str)) or #str end

и смотрим результаты

string.len( 'bnm', 'длина' )  --> длина равна = 3
string.len( 'bnm' )           --> 3

Это перегрузка? И вот тут начинается игра слов. По внешнему виду функция вроде одна и та же, как Вы говорите, и список аргументов может быть тот же (вторая строчка). Но! Это разные функции. Так это перегрузка?

В чём Вы безусловно правы – внутри всего этого безобразия производится выбор из таблицы (а Lua по другому и не умеет), но вот значение этого ключа в этой таблице Вы имеете возможность подменить. Замечательная возможность!

Более сложно это реализуется с мета-таблицами или через «якобы» классы (хотя чистых классов, как их понимают в том же С++ конечно нет, т.к. такое и не было предусмотрено разработчиками), но главное это всё вполне реально. Lua очень расширяемый инструмент.

Ссылка на комментарий

@RayTwitty, конкретнее ситуацию можешь обрисовать? Чтобы всегда и везде у меня такого нет, работает как и должно. В коде есть места где используется рудиментарная установка агрессии одного на другого через хит (как раз нулевой), возможно она имеет место быть, но телепатов таки нет. Есть еще глюк самой схемы, но это дебри логики, которые пока не вижу смысла расписывать. Ну а так иди пальни в новичка в деревне, выведи в лог, там все это достаточно наглядно, ну и сразу отсюда идет пойдет вывод что надо подправить в экшнах.

Ссылка на комментарий

@Карлан, постреляй в труп и посмотри, что выводит в лог. Снятие колбеков на death_callback разумеется убрал.

 

Впрочем, вопрос неактуален - сделал уже нормально в движке.

Изменено пользователем RayTwitty
Ссылка на комментарий

@RayTwitty, ну так дурное дело не хитрое ;). Причем тут пострелять в труп я не понял, также как и причем тут движок. Весь вопрос объясняется на уровне скриптов.

Ссылка на комментарий

Причем тут пострелять в труп я не понял

А труп это разве не НПС и для него колбек вызываться не может?

 

Весь вопрос объясняется на уровне скриптов.

Вот только объяснений как таковых я не увидел. Впрочем,

вопрос неактуален - сделал уже нормально в движке.

Изменено пользователем RayTwitty
Ссылка на комментарий

 

 

А труп это разве не НПС и для него колбек вызываться не может?

Может, и вызывается, и отличий нет. Я не понял зачем ты различаешь вызов хит коллбека на труп и на живого, когда это суть одно и тоже, ну и до кучи причем тут движок я тоже не понял. А вектор куда копать я дал, так как телепатов нет.

Ссылка на комментарий

@Карлан, нет, ну написал три раза уже

Впрочем, вопрос неактуален - сделал уже нормально в движке.

он продолжает... Неугомонный. Изменено пользователем RayTwitty
  • Согласен 1
Ссылка на комментарий

Добрый Вечер! Такой вопрос, поставил комплект модулей от Артоса(качал с этого поста жмак), вроде все нормально, но игра при сохранении вылетает.

! Cannot find saved game ~:bind_stalker:save:size=[18]

! Cannot find saved game ~:se_stor:save_storehouse:size=[0/<nil>]:  (>)

FATAL ERROR

[error]Expression : !m_error_code
[error]Function : raii_guard::~raii_guard
[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line : 748
[error]Description : ....r - call of pripyat\gamedata\scripts\se_stor.script:156: attempt to index local 'pk' (a nil value)


stack trace:



Я подумываю на то, что сохраняюсь не на оригинальном уровне. Может нужно куда-то записывать имена уровней?
 

Изменено пользователем vampirnik77
Ссылка на комментарий

@vampirnik77, модуль работает независимо от уровней.

В упомянутом посте находится комплект, который я проверил «от и до» на чистой игре и всех платформах. При условии соблюдения всех инструкций по подключению, добавления всех указанных вставок и удаления указанных кусков кода всё должно работать.

Проверь, всё ли учёл при подключении, возможно что-то случайно пропустил. Обрати внимание на таблицу tPkChunks в модуле и методы ext_save и ext_load в биндере актора - если прикручиваешь не к чистой игре, а к моду, вполне возможно, что их содержимое следует поменять.

  • Спасибо 1
Ссылка на комментарий

@TIGER_VLAD, это ссылка на скомпилированный байт-код. Если говорить о частном случае сохранения данных, чанк представляет собой технологический нет-пакет, созданный для хранения данных конкретного внешнего модуля; данные пишутся в него стандартными для нет-пакета методами при сохранении. Сначала создаются такие чанки для всех внешних модулей, которые мы подключаем к хранилищу. Затем чанки побайтово копируются в нет-пакет специального игрового объекта (или нескольких объектов, если суммарный размер чанков того требует), который, в свою очередь, сохраняется в сейве.

Описал несколько сумбурно - слов под конец рабочего дня не хватает. Возможно, гуру меня поправят или дополнят.

  • Спасибо 1
Ссылка на комментарий

Здравствуйте. Такая проблема, не могу прочитать custom_data объекта, использую m_netpk. Подскажите пожалуйста в чем проблема.

local bla = "kgsdglsgmsmgksgnbmsdjngsgmsko"
function Create_Art()
  local spawn_section = "af_cristall_flower"
	local pos,dir = db.actor:position(),db.actor:direction()
	local lvid,gvid = db.actor:level_vertex_id(),db.actor:game_vertex_id()
	local sobj = alife():create(spawn_section, pos:add(dir), lvid, gvid)
    local pk = get_netpk(sobj) --/ запрос пакета
    --/ если получен доступ к  пакету
      local data = pk:get() --/ считываем параметры в таблицу
	  local description = pk:dumpDesc()
		news_manager.send_tip(db.actor, description)
      --/> заполняем параметры
      if bla and type(bla) == 'string' then
		news_manager.send_tip(db.actor, "STRING WRITE!")
        data.custom_data:setString(bla)
      end
	  data.condition = 5
      pk:set(data) --/< запись
	   news_manager.send_tip(db.actor, "DONE!")
	   test.take_artefact(sobj) --\И тут же считываю, если менять например condition, то читаеться все нормально
end

-- перечень артефактов, которые бьются
local hit_art_list = {
    [clsid.art_bast_artefact]	= true,
    [clsid.art_black_drops]	= true,
    [clsid.art_dummy]		= true,
    [clsid.art_electric_ball]	= true,
    [clsid.art_faded_ball]	= true,
    [clsid.art_galantine]	= true,
    [clsid.art_gravi]		= true,
    [clsid.art_gravi_black]	= true,
    [clsid.art_mercury_ball]	= true,
    [clsid.art_needles]		= true,
    [clsid.art_rusty_hair]	= true,
    [clsid.art_thorn]		= true,
    [clsid.art_zuda]		= true,
    [clsid.artefact]		= true,
    [clsid.artefact_s]		= true,
}

function take_artefact(obj)
news_manager.send_tip(db.actor, "FAZA2")
        local pk = get_netpk(obj)
			local data = pk:get() --/ считываем параметры в таблицу
			local custom  = data.custom_data:getString()
			local custom_data = tostring(custom)
			news_manager.send_tip(db.actor, custom_data) --\Пытаюсь вывести, приходит пустое сообщение
		end 

 

 

Изменено пользователем vampirnik77
Ссылка на комментарий

@vampirnik77, в методе setString с помощью функции _parse_custom_data переданная строка преобразуется в таблицу. Твоё bla превращается в пустую таблицу, т.к. строка для кастомдаты должна иметь вид, подобный ini-файлу, т.е. набор секций с параметрами и значениями. Можно было написать, например, так:

local bla = "[my_data]\nkgsdglsgmsmgksgnbmsdjngsgmsko"
Изменено пользователем Charsi
  • Спасибо 1
Ссылка на комментарий

Еще такой вопрос. Апдейт актора, сколько в нем происходит вызовов в секунду?

Ссылка на комментарий
@vampirnik77, число вызовов не постоянно и пропорционально FPS (по факту это и есть FPS). Если тебе нужно что то изменять с постоянной скоростью, нужно использовать передаваемый в апдейт аргумент delta - число прошедших миллисекунд (вроде) с предыдущего апдейта. Изменено пользователем Desertir
  • Спасибо 1

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...