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

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

3 часа назад, Pug-Lover сказал:

но всё равно не робит

У меня спавн этой бочки на позиции актера просто приводит к смерти ГГ. Но бочка спавнится исправно...

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

@Pug-Lover, Нужно секцию создать, смотрите system.ltx, в нем есть секция физического объекта, по аналогии делаете для бочки. И не спавните на позиции ГГ, нужно сделать смещение:

	local pos = db.actor:position()
	local lv, gv = db.actor:level_vertex_id(), db.actor:game_vertex_id()
	pos.x = pos.x + 3 

	alife():create("stalker", pos, lv, gv)

 

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

Все взрывные предметы в weapons.ltx, код выше для спавна рядом с гг, а если в инвентарь - у нужной секции can_take = true (иначе вылет) и так: alife():create("explosive_barrel", db.actor:position(), 0, 0, db.actor:id())

 

3 часа назад, AndreySol сказал:

У меня спавн этой бочки на позиции актера просто приводит к смерти ГГ. Но бочка спавнится исправно...

:biggrin: http://funkyimg.com/i/2SBo9.jpg

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

У меня даже игра не запускается. Можете дать строчки, которые нужно в ui_main_menu.script засунуть и чтоб рабочие были, а то я тупой как бревно и непонимаю

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

Здрасьте.

 

Хочу добавить callback на событие "trade_start". Какие аргументы надо указывать в скобках? Указал (actor, npc), привязал тестовое сообщение – никакой реакции.

[bind_stalker.script]
function actor_binder:net_destroy()
…
	self.object:set_callback(callback.trade_start, nil)
…
function actor_binder:reinit()
…
	self.object:set_callback(callback.trade_start, self.trade_start, self)
…
function actor_binder:trade_start(actor, npc)
	news_manager.send_tip(db.actor, "start")
end
Изменено пользователем Norman Eisenherz

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz платформа какая, ТЧ?

trade_start это callback не актора, а торговца. который в свою очередь в ТЧ является монстром.

Пример подписки есть в оригинале ТЧ в mob_trade.script

Параметров у него вообще нету вроде бы.

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

@lordmuzer Да, ТЧ. Кто-то отписывал на форуме (может, не на этом?), что смог привязать этот callback и к актеру, но дальше "буду пробовать" сообщений не было.

В файле "mob_trade.script" смотреть особо не на что: привязка сделана, действия нет.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Скриптами его туда нельзя привязать. Просто потому что для актора такой callback движок не вызывает.

Только для класса торговца.

А что сделать то нужно? в mob_trade простой пример как для конкретного торговца отследить что с ним начал торговать ГГ.

Собственно поскольку ГГ один из этого же можно сделать вывод, что в этот момент и ГГ начал торговать тоже.

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

Пытаюсь без движковых правок подступиться к вопросу исключения экипированных предметов из окна торговли. Первая стадия – отслеживание события.

Добавил тестовое сообщение в функцию "mob_trade:start_trade(zone, obj)" файла [mob_trade.script] – тоже никакой реакции на начало торговли. 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Что то не так делаешь.

Тот же файл, добавил вывод в лог. Стою у Сидоровича.

Начал торговать https://i.imgur.com/6Kc5hsp.jpg

Закончил торговать https://i.imgur.com/OFHESGf.jpg

НО, Сидорович чистокровный торговец, то есть монстр и для него работает схема mob_trade

Для обычных НПЦ тоже работать не будет так.

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

@Norman Eisenherz, Сам давно хотел такое сделать, да всё руки не доходят, программер я не особо, можно сказать, только учусь... Вот, начал когда-то делать для пистолетного слота, да так и не доделал ... Только поверхностно - но всё работает, тестировал на Солянке 2010 от MAV(03.09.2010 + ООП). При открытии торговли ствол удаляется. при закрытии - возвращается в инвентарь, ну или в слот, если тот пустой. Итак:

   1) при открытии окна торговли ГГ получает поршень -> "ui_trade", а при закрытии окна торговли, соответственно, получает поршень: "ui_trade_hide", следовательно, по этим условиям и будем отлавливать саму торговлю. Вот код для пистолетного слота, по аналогии можно сделать и для остальных слотов.

 

Скрытый текст

function hide_active_slot()
  if db.actor:has_info("ui_trade") then --' если окно торговли открыто
    local slot_1 = db.actor:item_in_slot(1) --' то проверим 1-ый слот, вернёт -> type=userdata(он же - объект), если что-то есть в слоте
    if slot_1 ~= nil then --' если не NIL, значит в слоте что-то есть
      local sec = slot_1:section() --' получили имя секции пистоля, чтобы потом знать, что именно спавнить обратно
      amk.save_variable("slot_1_hide", sec) --' сохранили куда-нить (тут куча вариантов)
      alife():release(alife():object(slot_1:id()), true) --' удаляем пистоль из первого слота, при торговле отображаться, естественно, не будет, потому как мы его вообще удалили :)
    --[[--
        по честному, то тут ещё надо:
           получать состояние пистоля,
           количество патронов в ём,
           и объязательно проверять не квестовый ли это ствол, чтобы не получилось, что какая-то 
        ветка игры встанет из-за удаления-спавна предметов (в этом не уверен, ну, так, на всякий 
        случай я бы сделал кучу проверок, если бы умел ...)
    --]]--
    end
  elseif db.actor:has_info("ui_trade_hide") then --' если закрыли окно торговли, то вернём обртно ГГ всё, что мы у него насильно отобрали
    local spn = amk.load_variable("slot_1_hide", "ukrali") -- загрузили переменную
    if spn ~= "ukrali" then --' если перед этим был ствол в слоте
      amk.spawn_item_in_inv(spn, db.actor) --' вернули пестоль в инвентарь
      amk.del_variable("slot_1_hide") --' почистили переменную (а вот это - объязательно, чтобы не плодить кучу хлама)
    end  
  end
end

 

 

 

По-поводу возврата ствола обратно, тоже нужно делать проверку на то, не вставил ли ГГ уже что-то в слот, и если вставил, то закидывать в инвентарь то что он там навставлял, а на место ставить тот ствол, что мы убирали, ну, чтобы всё красиво было.

Код кидаешь в виде функции куда-нить в свой скрипт, ну, например в my_func.script, а вызов функции закидываешь в bind_stalker.script, вот сюда в конец -> actor_binder:info_callback(npc, info_id)

my_func.hide_active_slot()

Классная идея, да только знаний и времени маловато будет. Да! Тоже-самое можно сделать и для окна тайников, там при открытии тайника поршень = "ui_car_body", а при закрытии = "ui_car_body_hide".

В общем, если что сделаешь, выкладывай, мне такое тоже надо.  :beach:

ДА! Новая игра - не нужна, тож проверено.

 

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

@Баба ЯГА Тоже думал про вариант с поршнями, но с промежуточным спавном коробки или с использованием синего ящика рядом с торговцем (образец в скрипте телепорта на арену). Надо поковырять, но будет это нескоро – пока другой мод в планах. Что касается чтения типа и количества заряженных патронов, а также наличия обвеса, надо разбирать нетпакет оружия. naxac выкладывал примерчик; оригинальное сообщение найти не могу, поэтому, с позволения автора, приведу код здесь:

Spoiler

function read_ammo(wpn)
     if not wpn then return nil end

     local sobj = alife():object(wpn:id())
     if not sobj then return nil end

     local pk = net_packet()
     sobj:STATE_Write(pk)
     pk:r_seek(pk:w_tell() - 1)
     local ammo_type = pk:r_u8()

     local ammo = {}
     local str = system_ini():r_string(wpn:section(), "ammo_class")
     for s in string.gfind(str, "[%w%-%._]+") do
          ammo[#ammo+1] = s
     end

     return ammo[ammo_type+1]
end


шаблон для поиска текста "[%w%-%._]+"
[…]    класс на основе набора символов:
%w    буквы и цифры
%-    дефисы (без "%" будет модификатор поиска "кратчайшее совпадение")
%.    точки (без "%" будет модификатор поиска "любой символ")
_    подчеркивания
+    искать не меньше 1 совпадения

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, о, ща потестим патроны, было бы неплохо ещё как-то заряжать оружие при спавне, чтобы там была не полная обойма .. Наверное тоже с пакетами связано, ну, я не шарю... А оп форуму тут пока не сильно понял как искать, я тут недавно, только разбираюсь.

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

Всем привет, есть тут люди которые хорошо разбираются в погодных скриптах, а конкретно в level_weather.script (Платформа ЗП). Если есть то подскажите какая часть скрипта отвечает за смену погодных циклов в течении игрового дня.

 

п.с

Спрашиваю т.к уже долгое время не могу побороть проблему резкой смены погодного цикла.

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

Здрасьте.

 

В солянке 2010 есть конструкция с поиском по нескольким шаблонам (вроде по принципу ИЛИ):

if not string.find("device_torch,wpn_knife,bolt",i_section) and item:parent() then trup:drop_item(item).

 

Попытался повторить в обычной версии ТЧ с триггером на сброс предмета – без эффекта. Не могу сказать, как именно применяется указанная конструкция в солянке, но допускается ли вообще поиск сразу по нескольким шаблонам?

Spoiler

привязка к [bind_stalker.script]

function actor_binder:on_item_drop (obj)

 

function drop_check(obj)
    if obj:section() == "hand_radio" and string.find( "stalker, exo", db.actor:item_in_slot(6):section() ) then
        news_manager.send_tip(db.actor, "тест")
    end
end

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Господа, вопрос к знатокам по звукам. Подскажите пожалуйста, на сколько критично будет всем звукам ogg(сторонняя озвучка npc) массово выставлять в комментариях например  параметр npc_talking, к примеру, даже если это озвучка для атаки (Урою, чики-брики и в дамки и тд)?

Нет ли зависимости от типа комментария на реакцию нпс? 

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

@Norman Eisenherz,

В приведенной тобой функции string.find("device_torch,wpn_knife,bolt", i_section) нет шаблонов. Здесь первым аргументом указана строка, в которой происходит поиск, а вторым что собственно ищется. При этом должно быть полное совпадение.

В твоем скрипте, функция string.find("stalker, exo", db.actor:item_in_slot(6):section()) вернет не nil только если item_in_slot(6):section() будет строкой "stalker" или "exo", а этого точно не произойдет.

Здесь нужно либо указывать полные наименования предметов в строке первым аргументом функции string.find, либо изменить всю конструкцию на примерно такую:

s_item = db.actor:item_in_slot(6):section()

if obj:section() == "hand_radio" and (string.find(s_item, "stalker") or string.find(s_item, "exo")) then

 

  • Согласен 1
  • Полезно 2

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

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

@WinCap То есть, я все понял наоборот: в кавычках "где", а после "что" искать. Достаточно было в указанную конструкцию дописать "_outfit" к каждому виду брони.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, я тут учу Lua ->

http://www.user.su/lua/index.php?id=46

смотри там string.find, очень хорошо расписано.

:drinks:

  • Полезно 1

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

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

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

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

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

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

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

Войти

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

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

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