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

Скриптование


Svoboда

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

Кэширование пытался сделать через level.prefetch_sound, потом попробовал через db.actor:add_sound(), но там во втором случае вообще ничего не происходило, т.к. даже по вермени проходило всег 0,3 сек. против 9 сек через level.prefetch_sound. Больше не копал.

Изменено пользователем Shredder

Поделиться этим сообщением


Ссылка на сообщение

Покажи функцию, которой спавнишь телепорт.

Споллер работает

 

Поделиться этим сообщением


Ссылка на сообщение

Первой конечно. Вторая используется по-другому: alife():level_name(level_id), где level_id можно получить несколькими способами, один из них:
game_graph():vertex(obj:game_vertex_id()):level_id()

Поделиться этим сообщением


Ссылка на сообщение

Странно как-то. Должно работать. Попробуй так:

 

if obj.alive and obj:alive() then
  cnt = cnt + 1

 

 

Возможно obj не имеет метода alive, т.е. это какой-то объект, который живым быть не может, автомат например. Хотя тогда бы и лог другой был. Ещё функцию oldstory.get_npc_character показал бы.

Изменено пользователем Shredder

Поделиться этим сообщением


Ссылка на сообщение

Поделитесь, пожалуйста, ссылкой на универсальное хранилище. Или подскажите, как его регестрировать в class_registrator.script.

P.S. поиском нашёл только мёртвые ссылки.

Поделиться этим сообщением


Ссылка на сообщение

На сколько я понял, ты ничего не понял.

self.name = utils.cfg_get_string(ini, section, "name", nil, true, "")

self.description = utils.cfg_get_string(ini, section, "description", nil, true, "")

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

Поделиться этим сообщением


Ссылка на сообщение

Тебе нужно добавить схему поведения. Или, возможно, допилить схему xr_wounded, чтобы она заработала так, как тебе нужно. Примеров таких схем в самой игре предостаточно, но если ты со скриптами несколько дней, то сложновато будет.

Поделиться этим сообщением


Ссылка на сообщение

Вот и ищи в секции контроллера, все что найдешь - твое, все остальное в движке.

Поделиться этим сообщением


Ссылка на сообщение

На сколько я знаю, только методом перебора:

 

 
----
-- Получение ближайшего гейм-вертекса по левел-вертексу
function anomalies_manager:get_game_vertex(lv)
local lname = level.name()
local new_gv = 0
local min_dist = 100000 
local pos = level.vertex_position(lv)
for a = self.game_vertex_min, self.game_vertex_max do 
g1 = game_graph():vertex(a):game_point()
if g1:distance_to(pos)<min_dist then 
min_dist = g1:distance_to(pos) 
new_gv = a
end 
end
return new_gv
end

 

 

self.game_vertex_min, self.game_vertex_max соответственно минимальный и максимальный гейм вертексы для текущего уровня.

Поделиться этим сообщением


Ссылка на сообщение


self:AddCallback("Button_"..id,ui_events.WINDOW_LBUTTON_DB_CLICK, loadstring("имя_скрипта.on_db_click('" .. id .. "')"))

 

function on_db_click(id)

get_console():execute("load ~~~нажата " .. id)

end

Поделиться этим сообщением


Ссылка на сообщение

Да? А ты пробовал? Ничего, что при нажатии на любую кнопку id в функции OnBtnClick(id) будет всегда равен последнему. Т.к. в каждой функции ты оставил ссылку на одну и ту же переменную, значение которой в конце цикла будет равно последнему числу. Поэтому, ещё неизвестно, кого куда занесло...

Поделиться этим сообщением


Ссылка на сообщение

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

Проверено и не раз, не работает. Я прекрасно знаю, что такое замыкание. В твоём примере на каждую кнопку навешан свой обработчик: function() self:OnBtnClick(id) end. В момент вызова будет фактически выполнен код self:OnBtnClick(id), но к тому моменту переменная id будет содержать последнее значение цикла. Замыкается переменная, а не её значение.

Поделиться этим сообщением


Ссылка на сообщение

Признаю, был не прав. Всё от того, что в своё время намучился с подобной ситуацией в javascript, где замыкание работает как раз так, как я описал выше. В lua всё ок. Приношу извинения за дезинформацию.

Поделиться этим сообщением


Ссылка на сообщение

Добавлю, что помимо actor_menu.script срабатывает функция actor_menu_mode из pda.script, но только для случаев:

-- 10 =  Talk dialog  show

-- 11 =  Talk dialog  hide
В actor_menu.script они не срабатывают.
На открытие pda выдаётся какой-то инфопоршень, на закрытие кажется тоже. Какие именно легко проверить, просто пишу, что они есть.
 
Используя xray-extensions получить текущее активное окно можно так:

dialog_wnd = CUIListBox():GetMainInputReceiver()

За что товарищу malandrinus огромное спасибо!
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

Я бы тебе посоветовал использовать разные названия для переменных и для скриптов (get_visual)

  • Нравится 2

Поделиться этим сообщением


Ссылка на сообщение

Я универсальные таймеры пока не использовал, но вот вопрос, почему не передавать сразу функцию:

 

start_multi_timer(1, my_file.t1, nil, true)

Поделиться этим сообщением


Ссылка на сообщение

Я могу ошибаться, но возможно в цикле who:object(section) возвращает один и тот же предмет. Т.е. только на следующем апдейте после who:transfer_item метод who:object(section) вернёт другой предмет. Т.е. по сути, в цикле будет попытка передать один и от же предмет count раз, из-за этого и запись в лог. Это предположение.

 

Да, это действительно так. Для правильного функционирования нужно итерировать инвентарь на предмет одинаковых предметов и их передавать.

Доберусь до домашнего ПК, посмотрю осталось ли доделанная функция... ну или доделаю.

ColR_iT

Изменено пользователем ColR_iT

Поделиться этим сообщением


Ссылка на сообщение

 

 

-- Вызывает вункцию func спустя n апдейтов
function wait_call(func, n)
	local counter = n or 1
	level.add_call(
		function()
			if counter == 0 then
				return true
			end
			counter = counter - 1
			return false
		end,
		func
	)
end

 

 

Изменено пользователем Shredder
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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