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

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

Есть функция которая выдает все тайники

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

function CTreasure:create_random_stash()
    for k,v in pairs(self.treasure_info) do
    self:give_treasure(k)
end
end

Помогите сделать что бы она выдавала 1 тайник.

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

@Colder Выдаст рандомный тайник -

Скрытый текст
function CTreasure:create_random_stash()
	local t = {}
	for k, v in pairs(self.treasure_info) do
		table.insert(t, k)
	end
	self:give_treasure(t[math.random(#t)])
end

 

 

Изменено пользователем Manool
  • Спасибо 1
Ссылка на комментарий

Здрасьте.

 

[ТЧ/ЧН] Изменение подсказки при взаимодействии с объектом через метод set_tip_text(string): при тесте на трупе мутанта подсказка меняется на один апдейт, после чего возвращается к исходному виду "Обыскать труп".

Как заставить игру сохранить изменение?

 

Spoiler
[scripts\bind_monster.script]
function generic_object_binder:use_callback(obj)
	if not obj:alive() then
		self.object:set_nonscript_usable(false)
		self.object:set_tip_text("test")
	end
end

 

 

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

Шпаргалка

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

Не хватает костного мозга в холодце, как добавить в исключения предмет на поясе по id, что бы размер этого предмета не учитывался в ограниченном объёме рюкзака? По типу такого:

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

    local OutfitSlot = db.actor:item_in_slot(6)
    if OutfitSlot ~= nil then IdOutfit = OutfitSlot:id() end

Всё, распихиваемое по слотам, места не занимает. С предметами на поясе же у меня постоянно вопросы, которые оставляю здесь...

Движок ОГСР.

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

Здесь могла быть ваша реклама.

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

@mole venomous 

Скрытый текст
local excluded_ids = {}
for i = 0, db.actor:belt_count() - 1 do	-- цикл всех предметов на поясе
	local item = db.actor:item_on_belt(i)
	if item then
		excluded_ids[item:id()] = true
	end
end
-- проверка на исключение:
if excluded_ids[id] then	-- id здесь предмета, который нужно проверить
end

 

 

  • Спасибо 1
  • Полезно 1
Ссылка на комментарий
6 hours ago, Norman Eisenherz said:

подсказка меняется на один апдейт

Вот это вот мне подсказывает, что что-то ещё меняет подсказку. Может скрипт какой, или движок, тебе должно быть виднее.

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

@Norman Eisenherz 

generic_object_binder:update(delta) там несколько упоминаний set_tip_text, соответственно, на апдейте постоянно корректируется подсказка. Об этом, кстати, dsh намекнул... Копай туда.

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

Привет всем!
Решил намутить рабочую гитару, чтобы после 43 секунд игры мелодии, она возвращалась обратно в инвентарь.
Забацал 2 файла, один dmb.script, второй dmb2.script. 

 


 
 

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

 

local tSound ={
dmb_pleer      = "interface\\inv_guitar",
}

function muzika() 
alife():create("dmb_pleer", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
end

function use_item(obj) 
    local obj = obj:section()
    if obj then  
        if obj == "dmb_pleer" then  
            dmb2.start_timer()
        end
    end
    
   if obj and tSound[obj:section()]  then 
      local snd = xr_sound.get_safe_sound_object(tSound[obj:section()])
      if snd then 
      snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0)
      end
   end
end

 


А вот второй скрипт, куда я запихнул таймер

 

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

   function action_timer()
      alife():create("dmb_pleer", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
   end
 
   function start_timer()
      local iTimer = time_global() + 43000
 
      local function check_timer()
         return time_global() > iTimer
      end
 
      level.add_call(check_timer, action_timer)
   end


И при попытке юзануть ту самую гитару, вылазит ЭТО:
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ....l.k.e.r. Тень Чернобыля\gamedata\scripts\dmb.script:22: attempt to call method 'section' (a nil value)

Помогите пожалуйста)
 

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

@Hind Путаница в типе и значениях переменных: сначала obj – объект, потом obj – секция, то есть строка, и для этой строки ты еще раз пытаешься прочитать секцию.

 

@AndreySol Получается решение вида "заново менять уже измененную подсказку каждый апдейт". Кроме проверки по таблице id уже обработанных мутантов, как можно добиться варианта "смерть, 1 апдейт и остановка + запоминание при перезагрузке"?

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

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

Шпаргалка

Ссылка на комментарий
25.08.2022 в 22:19, Norman Eisenherz сказал:

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

Ну так оно единственно верное. У тебя для монстров и нпс есть апдейт(generic_object_binder:update(delta)), в нем постоянно корректируется подсказка, в зависимости от состояния объекта. Вот тебе пример из модика(мод "Мясник" (CoP) от Singapur22), который меняет логику обыска трупов монстров, тебя интересует выделенный фрагмент:

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

    if self.object:alive() then
        if self.object:is_talk_enabled() then
            self.object:set_tip_text("character_use")
        else
            self.object:set_tip_text("")
        end
    else
        if self.used then
            self.object:set_tip_text("")
        else
            local character_use = read_if_exist("s",nil,self.object:section(),"character_use","dead_monster_use")
            self.object:set_tip_text(character_use)

        end
    end

Для дохлого монстра подсказка меняется сразу по факту его помирания, а в методе use_callback она возвращается в исходное значение.

Изменено пользователем AndreySol
  • Полезно 1
Ссылка на комментарий

Как поменять скриптом отношения между мутантами? Надо чтобы даже дружественные мутанты начали враждовать, даже между собой начали грызтись. Со сталкерами разобрался, работает, с мутантами не работает. Имею ввиду метод change_goodwill.

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

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

Поковырял движок. В общем, отношение между мутантами так легко не поменяешь, как прописано в monster_relations так оно и будет. Ну ладно, фиг с ним!

  • Полезно 4

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

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

Могу посоветовать делать это через combat ignore, забыл, как колбек называется. Т.е. нужные мутанты изначально враги, а в колбеке возвращать, что они игнорируют друг друга до нужного момента.

 

Ещё можешь глянуть вот на этот скрипт

https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/dsh/dsh_rats.script

Здесь меняется отношение между крысами и актором. Уже не помню точно, наверное я в движок что-то добавлял для этого.

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

@dsh у тебя там метод set_monster_relation в level есть. Так что проще добавить просто скриптовый метод, который меняет индивидуально отношение между монстрами.

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...