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

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


Svoboда

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

@Kondr48, для более-менее случайной инициализации генератора псевдо-случайных чисел. :) Использовать по желанию.

 

звук воспроизводится не хочет

Причины навскидку: плохой (тихий) звук, по указанному (сгенерированному) пути звука нет вообще (путь должен быть указан относительно папки gamedata\sounds), ошибочное содержимое функции gz_utils.s_play_no_feedback - выбирай на вкус. Получать звуковой объект указанием пути к нему строкой вполне валидно.

  • Полезно 1

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


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

@HellRatz, коллбек "trade_sell_buy_item" срабатывает для каждого предмета, участвующего в акте торговли. Не исключено, что сразу для нескольких предметов текущее кол-во денег отлично от нуля, таким образом после обработки всех предметов ты получаешь неверную итоговую сумму. Чтобы обнуление работало правильно, необходимо делать его после окончания обработки всех предметов, например на первом апдейте после торговли. Примерно так:

local set_money_zero = false
--/ коллбек на торговлю
function on_trade(item, sell_buy, cost)
  if set_money_zero == false then
    set_money_zero = true
    level.add_call(
      function() return set_money_zero end,
      function()
        db.actor:give_money(-db.actor:money())
        set_money_zero = false
      end
    )
  end
end
Кроме того, не забудь, что на момент срабатывания коллбека деньги за продажу/покупку уже засчитаны актору и НПС и, если мне не изменяет память, учтены в статистике. То есть тебе не только надо обнулить деньги у игрока, но и, возможно, вызвать соотв. функцию в xr_statistics для коррекции потраченных средств в КПК.

 

Также стоит иметь в виду, что аргумент sell_buy при коллбеке на продаваемый героем предмет имеет значение "true", а при коллбеке на покупаемый - "false". При этом сначала срабатывают все коллбеки на продажу, потом все коллбеки на покупку (если обмениваемых предметов много с той и другой стороны). Это тоже можно использовать для реализации расширенной логики, например отказа от предметов, имеющих плохую кондицию и возврата денег за них.

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

 

 

@vampirnik77, модули брал отсюда? Точно следовал инструкции по подключению? Она довольно таки исчерпывающая, ошибиться сложно, если следовать всем пунктам согласно нужной платформе.

Почитай ещё этот пост и дальше пару страниц, возможно наткнёшься на полезную информацию.

Судя по всему, твой мод на платформе ЗП. Если он согласится помочь, рекомендую попросить совета у @Romz - насколько мне известно, он активно использует модули Артоса в своём моде на той же платформе. Я же не заходил дальше базовой проверки подключения, и вряд ли смогу помочь в данном конкретном случае.

Изменено пользователем Kirgudu
  • Спасибо 1

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


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

@h0N0r, выше @UnLoaded правильно написал - абсолютно незачем устанавливать этот флаг сразу для всех объектов определённого типа.

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

Поэтому используй её и дальше, только не глобально, а сразу после спавна того предмета, для которого ты хочешь отключить привязку к AI-сетке. Примерно так:

local s_obj = alife():create(section, position, lvid, gvid, pid)
local se_item = alife():object(s_obj.id)
se_item:use_ai_locations(false)
Можно и через net-пакеты, конечно, но в случае ЗП проще воспользоваться готовой функцией. Изменено пользователем Kirgudu
  • Согласен 1
  • Полезно 1

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


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

@CRAZY_STALKER666

1. Закомментируй строки: 36, 49-52, 88-96.

2. Потому что запись нужных данных делается в функции xr_logic.save_logic() при сохранении рестриктора. Аналогично для чтения.

  • Спасибо 1

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


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

@aka_sektor так добавь под свои нужды, кто мешает? Всего-то дел добавить функцию в xr_conditions.script с инвертированным условием относительно оригинальной..

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


Ссылка на сообщение
20 часов назад, PBAX сказал:

А как мне переменную вызвать? Просто в коде указать ее имя?

Да. Не забывая об области её видимости: переменную, объявленную локально в одной функции, нельзя использовать в другой без передачи.

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


Ссылка на сообщение
В 07.11.2017 в 12:36, sv6o6o9a сказал:

attempt to index local 'spawn_smart' (a nil value)

ЗП не моя платформа, но могу предположить навскидку, что, например, вместе с НПС удалены также и смарты, из-за чего симуляционный скрипт и не может найти какой-то смарт в своей временной таблице.

Кроме того, имеет смысл проверить и почистить конфиг "configs\misc\simulation.ltx", ведь в нём вполне могли остаться строки, соответствующие удалённым объектам.

  • Согласен 1

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


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

@Graff46 дополню ответ dsh очевидным (хотя, может, и не для всех) уточнением: после таких изменений нужна новая игра, старые сейвы, не содержащие добавленных данных, читаться будут некорректно.

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

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


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

@Graff46 порядок там не столь важен, так как переменные сохраняются в псторе и читаются из него парами "наименование/значение" (а дальше ты просто обращаешься посредством имеющейся функции к таблице). Однако требования к размеру сохраняют силу, ведь пстор пишется всё в тот же несчастный нет-пакет (см., например, xr_logic.pstor_save_all / xr_logic.pstor_load_all). Кроме того, пстор в оригинальной своей реализации ограничен строчными, числовыми и булевыми типами сохраняемых значений.

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


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

@CRAZY_STALKER666 

[logic]
active = walker@1
combat_ignore = combat_ignore
[combat_ignore]
combat_ignore_cond = always                  <-- тут
[walker@1]
path_walk = aes2_misha_walk
path_look = aes2_misha_look
on_signal = go | walker@2 %+aes2_heli_go
[walker@2]
path_walk = aes2_misha_walk
path_look = aes2_misha_look
on_info = {+aes2_heli_death} walker@3
[walker@3]
path_walk = aes2_misha_end_walk
path_look = aes2_misha_end_walk
on_signal = del | nil %+aes2_me_del =delme%

Или такую опцию вставлять индивидуально в нужные секции логики. Также допустимо указание условий:

combat_ignore_cond = {!actor_enemy}

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


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

@CRAZY_STALKER666 стесняюсь спросить: зачем изобретать велосипед? В оригинале всех трёх частей игры есть соответствующие функции, доступные в том числе из логики - xr_effects.kill(actor, npc) для SoC и чуть более универсальная xr_effects.kill_npc(actor, npc, p) для CS и CoP.

  • Спасибо 1
  • Согласен 2

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


Ссылка на сообщение
10 часов назад, Dennis_Chikin сказал:

А что, вообще, хотели этим сказать ?

Если ты имел в виду синтаксическую ошибку, то её там нет. Условие является независимым, а предыдущую строку надо читать целиком, как самостоятельное присвоение:

local section = active_slot ~= 3 and active_item:section() or "grenade"

 

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


Ссылка на сообщение
15 часов назад, Graff46 сказал:

Рекомендую в качестве объекта использовать ГГ

Не рекомендую в качестве объекта бездумно использовать ГГ. Любой пстор пишется в net-пакет того объекта, к которому пстор относится. А net-пакет имеет, как мы знаем, ограниченный размер, при превышении которого можем запросто получить битое сохранение. Скриптёр по незнанию, неопытности или забывчивости здесь что-то сохранит в пстор ГГ, там запишет, ещё где-то - и опаньки!

15 часов назад, Fenrir02 сказал:

ещё и запоминать состояние аккумулятора

Почему нет? Записать и прочесть можно больше, чем одну переменную.

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


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

@BFG, Петрович, если правильно помню, звук можно запустить с привязкой к актору, но по нужным тебе координатам - от них он и будет звучать. Пример:

local snd = sound_object([[helicopter\death_1]])
snd:play_at_pos(db.actor, vector():set(x, y, z))

Если звук планируется запускать много раз, но не нужно, чтобы он наслаивался друг на друга, кешируй его в переменной и проверяй перед повторным запуском:

if not snd:playing() then
...
end

 

  • Спасибо 1

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


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

@Dennis_Chikin, в целом @buffy дал правильный совет, емнип.

my_script.script:

_G['my_script'] = {
	my_function = function() end
	my_function_2 = function() end
}

В любом нужном месте, например в _g.script:

local my_scripts_loaded = false
if not my_scripts_loaded then
	dofile(getFS():update_path("$game_scripts$","my_subdir\\my_script.script"))
	my_scripts_loaded = true
end

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

Как потом вызывать, думаю, понятно.

  • Полезно 2

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


Ссылка на сообщение
1 час назад, Egor4ikModMaker сказал:
1 час назад, AndreySol сказал:

"как можно знать сид" - ну к примеру, через сет в game_story_ids.ltx. Или не реально ?

 

Это явно простая синтаксическая ошибка. Проверь синтаксис добавленного кода.

Собственно это странно, потому что bind_stalker я не трогал вообще! 

Т.е файл оригинальный, и до этого все работало без подобного вылета.

Да не в bind_stalker ошибка, а в level_tasks. Попробуй перевести на русский:

Цитата

attempt to index global 'level_tasks' (a nil value)

это означает "попытка проиндексировать глобальный объект 'level_tasks' (значение nil)".

То есть ты из bind_stalker пытаешься вызвать какую-то функцию в level_tasks, но так как level_tasks имеет значение nil - получаешь ошибку.
А быть равным nil какой-то скрипт может в том случае, если внутри имеется какая-то синтаксическая ошибка, и движок просто не может скрипт загрузить.

Проверяй, что делал не так в level_tasks.

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


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

Тебе уже @WinCap пробовал намекнуть, а я к нему присоединился. Где второй end? У тебя как минимум не закрыта функция, неудивительно, что модуль не грузится.

Включай уже, наконец, голову и прекращай флудить.

  • Согласен 1

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


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

@buffy, с чего ты взял? Если там изначально число, отличное от нуля, результат будет равен этому числу плюс 1. А общий результат - кол-ву элементов в self.smart_terrain_conditions.

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


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

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