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

[SoC] Ковыряемся в файлах


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

Garry_Galler, ниоткуда.ты сам их и обьявляешь.а про нил - это не важно.

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

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

Monnoroch

дак пример бы подсказал

вот идет у меня скрипт

for k, v in pairs(st) do

local obj = level.object_by_id(k)

if (obj and IsStalker(obj) and obj:id()~=0) then

if obj:position():distance_to_sqr(apos) < 900 then

local dummy = что указать то?

local item=

obj:iterate_inventory(function (dummy, item)

local inv = item:section()

end, obj) --и obj здесь нужен или нет?

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

А какой файл в моде Solinx для ЧН, и Full Realism Mod для ЧН, и Modern Mod v1.1 для ЧН отвечает за спавн денег у мёртвыйх НПС?

 

Хотел бы добавить эту фичу в другой мод и подправить этотй файл тоже.

 

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

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

Вот здесь то что не так?

 

obj:iterate_inventory(function (obj, item)

table.insert(tbl, item:id(), item:section())

--local n = unpack(tbl)

local n = table.concat(tbl,"\n") --обе попытки получить лист значений приводят к вылету

end,obj)

 

Alert

я не знаю какие файлы в указанных тобой модах, но ищи скрипт такого вида - в разных модах они могу отличаться но метод съема в принципе везде одинаков

 

function lootmoney(npc)
if npc ~= nil then
local npc_rank, deadmoney
npc_rank = ranks.get_obj_rank_name(npc)
if npc_rank == "novice" then 
deadmoney = math.random(25,101) 
elseif npc_rank == "experienced" then 
deadmoney = math.random(25,201)
elseif npc_rank == "veteran" then 
deadmoney = math.random(50,401)
elseif npc_rank == "master" then 
deadmoney = math.random(70,801) 
end
if npc_rank ~= nil then
news_manager.relocate_money(db.actor, "in", deadmoney)
end
local mylootingid = game.translate_string("looting_id")
local news_texti = "%c[255,255,0,0]" .. mylootingid .. " \\n"..npc:character_name()..": $"..game.translate_string(tostring(deadmoney).."RU")
db.actor:give_game_news(news_texti, "ui\\ui_iconsTotal", Frect():set(0,0,83,47), 0, 10000)
db.actor:give_money(deadmoney)
game_stats.money_quest_update(deadmoney) 
end
return
else
return
end
end

 

суть надеюсь понятна - в зависимости от ранга трупа получаем рандомную сумму и через метод give_money передаем ее эктору

активируется она вроде бы через скрипт тайников - точно уже не помню.

Вот здесь то что не так?

obj:iterate_inventory(function (obj, item)

а то что ты поставил obj туда куда не следует ставить :nono:

local tbl = {}
obj:iterate_inventory(function (tmp, item)
table.insert(tbl, {item:id(), item:section()})
end,obj)

for i, data in ipairs(tbl)
  get_console():execute("load ~~~ id=" .. tostring(data[1]) .. " name="..data[2])
end

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

В данном случае я бы сделал так :)

obj:iterate_inventory(function (tmp, item)

get_console():execute("load ~~~ id=" .. item:id().. " name=".. item:section())

end,obj)

 

Gonarh,

лист значений (для вывода в мессидж)
Изменено пользователем Monnoroch

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

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Gonarh, Кстати,я так до сих пор и не узнал: что обозначает 1 аргумент tmp который?

Monnoroch, Gonarh

парни вы конечно скриптеры опытные, но ваши варианты не совсем то:

1. вывод в консоль мне действительно не нужен.

2. мне нужно получить инвентарь всех неписей в онлайне - с выводом данных в мессидж на экран и в текст метки - (что у меня сейчас и происходит с другими данными по сталкерам).

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

в идеале таблица должна выглядеть так:

local tbl= {[id]={[item:id()] = item:section(),[item:id] = item:section() и т.д. каждая вещь в инвентаре одного NPC },[next_id] ={[item:id()] = item:section(),[item:id()] = item:section(), и т.д.} и т.д. }

 

[id] = это одновременно и ключ для будущей итерации и айди конкретного непися - такими образом для каждого NPC создается отдельная таблица, в которой содержатся все его итемсы.

получить список вещей для каждого конкретного непиcя из такой таблицы труда не составляет

local str = table.concat(tbl[k],"\n") --получаем строку(точнее строчки) из всех объектов инвентаря отдельного непися с переносом каждого слова\объекта на новую строку

 

Главный вопрос - как создать такую таблицу? ведь через iterate_inventory мы получаем только один итемс за один вызов, а не все сразу

и поэтому такое заполнение - table.insert(tbl, k, {[item:id()] = item:section()}) - ничего путного не дает --у меня это вообще никак в игре не проявилось - что странно - хоть бы вылетело что ли - ведь переменная str конкатенировалась к строке с данными

(другие варианты приводили к вылету с логом table contains non-strings)

Так как все таки правильно заполнить таблицу?

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

Garry_Galler, Короче как это делал я.

local items = {}
...
if items[npc:id()] = nil then
items[npc:id()] = {}
end
....
local npc_items = {}
npc:iterate_inventory(function (dummy,item)
if not <исключения> then
npc_items[item:id()] = item:section()
end
end,nil)
npc_items = items[npc:id()]

 

Учти,от сердца отрываю :)

В замен: если не секрет,чем занимаешься?

 

Вывод:

for k,v in pairs(items[npc:id()]) do
функция_сообщения("id = "..k.." ;  section = "..v)
end

 

Другое дело,что такая конструкция нафиг не нужна.

Как совсем уж я делал: я записывал id() только:

вместо
npc_items[item:id()] = item:section()
это:
table.insert(npc_items,item:id())

а уж потом

for k,v in pairs(items[npc:id()]) do
функция_сообщения("id = "..v.." ;  section = "..level.object_by_id(v):section())
end

Надеюсь доступно?

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

Monnoroch

спасибо:-) - позже затестю.

 

делаю обширный скрипт с выводом всей инфы о сталкерах в оналйне - (такое досье на каждого)

помимо инвентаря осталось добавить в мессиджы объекты из памяти NPC - через функции мемори - если конечно получится.

Я так понимаю для дебага? Или нас ждут какие новые вкусности?

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Кстати,я так до сих пор и не узнал: что обозначает 1 аргумент tmp который?

Справочник - описание game_object

 

И для кого я тему создавал?

 

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

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

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

 

Ребята а вопрос назрел значит, по логике, как переключить анимку нпс при получении поршна?

Добавь неписю такую логику

[logic]
active = remark1

[remark1]
anim = wait
on_info = {+my_info} remark2
combat_ignore_cond = always

[remark2]
anim = binocular
combat_ignore_cond = always

сталк будет стоять и ничего не делать, кады выдаш инфопоршень my_info - начнет глядеть в бинокль

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
malandrinus, спс.кстати,а кто нибудь знает что такое morale?За что оно отвечает в игре?

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

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

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

Gonarh, а для гг есть эффекты?

И туда же: у НПС есть psy_health - так вот какие нибудь эффекты оно имеет?И когда изменяется?Я в свое время заставлял пить вотку,когда ее мало,но они пили 1 раз - при загрузке игры.

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

конечно, вот допустим мне дать литра три пива - у мну мораль знаешь как поднимется :lol3:

а по сабжу - нет

у НПС есть psy_health - так вот какие нибудь эффекты оно имеет?И когда изменяется?

не знаю, не интересовался :unsure:

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

требуется помощь:

как исправить в файлах отношение Химеры в НЗ чтобы получить инфу о реагентах,шмаляет без разговоров.Успел заранее с ним поругаться:)

по шпаргалке ничего путного не нашел.

переигрывать очень далеко.

 

Строгое предупреждение от модератора n6260
Набирая текст не забывайте о заглавных буквах и пробелах.

 

Сообщение от модератора n6260
Изменить вручную отношения ГГ и той группировки к которой относится Химера. Файл "гейм_репортишен" по пути gamedata\config\creatures.
Изменено пользователем n6260

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

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

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

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

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

Войти

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

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

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