Максим Р. я сделал прописывание врага чере вей поинт. Результат - сделал имитацию заходов, вертолет шмаляет по гг с пулемета и с ракет, все выглядит вполне реалистично
Last Day Mod Team work |==>>>ПОСЛЕДНИЙ ДЕНЬ
Кто понял с первого раза,
Тот ловит музу,
Когда каждая фраза
Ломает все сразу.
Изменения через нет-пакет вступают не мгновенно, тем более если объект в онлайне.
Ага вот значит почему когда я ящикам параметр object_flags решил перезаписать с -65 по дефолту (и чего б это означало интересно?) на 0xffffff3f (в десятичном конечно виде) они у меня вообще перестали на карте появляться.
-------------------------------------------------------------------
ЗЫ:кстати насчет координат(к посту singapur'22). Если забыть указать оба вертекса при спавне объекта (у меня просто их значения по ошибке оказались nil ) - вылета не будет(как и спавна), однако апдейтовые функции данного скриптового файла перестают работать.
---------------------------------------------------------------------------------- singapur22
С привязкой боксов разрулилось что-нить?
отредактировал(а) erlik: 19-08-2010 14:58 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Stalk15 Собсно тебе Darien Fx дело говорит. Но можно данный код расширить, до реальновыполняемого даже в онлайне. К данному коду нужно добавить последовательное выполнение перевода объекта (online/offline и offline/online) разделёные между собой двумя-тремя циклами апдейта. В данном случае мы принудительно будем перезагружать объект с уже новыми параметрами.
Правда есть один минус. Не все сталкеры принудительно поддаются переводу в offline и обратно. Тоесть, если в логике непися задан параметр (online = true/false), то принудительный перевод данного сталкера будет невозможен. Для того, чтобы обойти данную установку, нужно подправить пару функций:
se_stalker:can_switch_online ()
и
se_stalker:can_switch_offline ()
В файле se_stalker.script
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
blackraven6
да я это все понял скрипты нормально работают я просто хочу привязать этот скрипт со спауном так: чтобы после первого разговора по этому диалогу он больше не появлялся . вот как это сделать чето не пойму. КОРОЧЕ ГОВОРЯ КАК СОЗДАТЬ ТАКОЙ ДИАЛОГ КОТОРЫЙ ИСЧЕЗ БЫ ПОСЛЕ ПЕРВОГО РАЗГОВОРА ПО НЕМУ:obstenu:&P&P
Horrible area modВидео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
Stalk15
ой я не то спросил а любое имя инфопоршня можно вписывать
отредактировал(а) СидырыЧЪ: 19-08-2010 15:39 GMT3 час. Horrible area modВидео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
singapur22
Пoнятно :-) Тоже нужное дело.
Кстати тебя все еще интересует способ проверки нахождения предмета на поясе? Или ты уже нашел его? Просто пока тебя не было на форуме, где то пару месяцев назад эта тема вновь поднималась и скрипт этот (в одном моде) мы все таки нашли.
------------------------------------------------------------------ это весь файл inventory.script из мода биорадар
belt = {}
belt_status = false
local need_update = true
local inventory_open = false
local separator_spawned = false
local separator = "separator"
local debug = false
local flag
function update()
if (need_update == false) then return end
if debug == true and belt_status == true then get_console():execute("belt_status=false") end
belt_status = false
-- Спавним разделяющий елемент
if (separator_spawned == false) then
alife():create(separator,
db.actor:position(),
db.actor:level_vertex_id(),
db.actor:game_vertex_id(),
db.actor:id())
separator_spawned = true
if debug == true then get_console():execute("separator_spawned") end
return
end
-- Удаляем разделяющий елемент
db.actor:inventory_for_each(del_separator)
separator_spawned = false
if debug == true and belt_status == false then get_console():execute("belt_status=true") end
belt_status = true
if debug == true then
for i,k in pairs(belt) do
get_console():execute(i.."="..k)
end
end
end
-- Перебор предметов инвентаря
function scan_inv(item)
local section = item:section()
if section == separator then
flag = 1
return
end
if flag == 1 then
if slot_item(item) ~= nil then
flag = 2
else
insert_to_table(belt, section)
end
end
end
-- Добавление в таблицу
function insert_to_table(tbl, section)
if tbl[section] == nil then
tbl[section] = 1
else
tbl[section] = tbl[section] + 1
end
end
-- Удаление разделяющего предмета
function del_separator(item)
if item:section() == separator then
alife():release(alife():object(item:id()), true)
if debug == true then get_console():execute("separator_removed") end
end
end
-- Определение налечия предмета в одном из слотов
function slot_item(item)
for i=0,12 do
local obj = db.actor:item_in_slot(i)
if obj and item:id() == obj:id() then
return i
end
end
return nil
end
-- Поднятие предмета
function on_item_take(item)
if item:section() == separator then return end
if (inventory_open == false) then
if (separator_spawned == true) then
db.actor:inventory_for_each(del_separator)
separator_spawned = false
end
need_update = true
if debug == true then get_console():execute("item_take") end
end
end
-- Выброс предмета
function on_item_drop(item)
if item:section() == separator then return end
if (inventory_open == false) then
if (separator_spawned == true) then
db.actor:inventory_for_each(del_separator)
separator_spawned = false
end
need_update = true
if debug == true then get_console():execute("item_drop") end
end
end
-- Открытие/закрытие инвентаря
function on_inventory_info(info_id)
if info_id == "ui_inventory" then
inventory_open = true
if debug == true then get_console():execute("inventory_open") end
elseif info_id == "ui_inventory_hide" then
inventory_open = false
need_update = true
if debug == true then get_console():execute("inventory_close") end
end
end
function check_blood()
-- if belt_status == true then
if belt["af_blood"]~=nil and belt["af_blood"]>0 then -- то есть когда параметр пояса[af_blood] равен 1, 2, 3.. Сколько навесишь Камней.
-- amk.send_tip("Кровь Камня на поясе")
end
-- end
end
Собственно автор скрипта не Руся , а какой то чел с сайта ПЫС - где я и нашел упоминание про этот способ.
Принцип работы скрипта думаю будет тебе понятен.
отредактировал(а) erlik: 19-08-2010 19:11 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Хм. Интересно. Займёмся изучением принципа работы. :-)
добавлено спустя 9 минут
Хм. Это получается, что предметы находящиеся в слоте belt просто-напросто всегда находятся в конце списка инвентаря? Я так понял?
отредактировал(а) singapur22: 19-08-2010 19:56 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Все дело в самой функции итераторе void inventory_for_each(function *iterator)
Перебираются не все предметы. Для актора пропускаются предметы в невидимых слотах: нож, бинокль, болт, фонарик и ПДА. Кроме того, для актора определён порядок перебора предметов: сначала перебираются предметы в рюкзаке, потом на поясе, потом в слотах (только те, что видны). На этом основан алгоритм определения предметов на поясе
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Stalk15
а как понять Инфопоршены создаются в info_name_level.
Horrible area modВидео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
erlik Ну я это и имел ввиду. Если с предметами находящимися в слотах проблем нет (отсекаем через проверку на нахождение в каком либо слоте), то с остальными, belt получается в конце списка. Выявляется ещё одна особенность. Предметы спавнятся в конец списка рюкзака, перед поясом со слотами.
Фактически, всё понятно, вплоть до мелочей. Только способ этот не ахти какой. Скрипт чересчур тяжёлый. Мало того, что каждый цикл апдейта, производится итерация всего инвентаря, (а список предметов в инвентаре у актора может быть невероятно большим), так ещё и к нему добавляется спавн/удаление, которые так же не хило снижают производительность. Не мешало бы поразмыслить на данный счёт.
Кстати, а есть ли возможность производить итерацию инвентаря не с начала списка, а с его конца? Тоесть, в обратном направлении. (извиняй за глупый наверно вопрос. Но я многое уже не помню.)
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Stalk15
а какая именно строка нужна чтобы диалог исчез после первого разговора
Horrible area modВидео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
есть ли возможность производить итерацию инвентаря не с начала списка, а с его конца?
Ну я такой точно не знаю. Если в данном методе предопределен порядок итерации инвентарных массивов, то как его изменить то...
Метод db.actor:object(порядковый номер) возвращает предметы инвентаря в порядке их спавна в инвентарь
local actor = db.actor
local cnt = actor:object_count()
for i=0,cnt-1 do
local item = actor:object(i)
но это тебе тоже ничего не даст.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
#singapur22 :Кстати, а есть ли возможность производить итерацию инве**50146ea8aab1bb10eeba**code]t = {1,2,3,4,5}
for i=#t,1,-1 do
print(t)
end[/code] АнархОПанк
Ключевое слово, - "имею свой мод"
А точнее - переведи показания Arguments :
Тут и нужно копать
отредактировал(а) Gun12: 19-08-2010 22:48 GMT3 час. Не стань номинантом премии Дарвина.
Кто нибудь может объяснить что за фигня творится?! (Я даже переустановил игру вылетает все равно!)
Имеем SHOC 1.0004, имею свой мод. Вдруг не с того не с сего у меня стала игра вылетать на синхронизации с подобными вылетами:
Expression : fatal error
Function : weapon_hud_value::load
File : E:\stalker\patch_1_0004\xr_3da\xrGame\WeaponHUD.cpp
Line : 34
Description :
Arguments : There is no 'wpn_knife_0' bone for weapon 'wpn_knife_hud'.
(До этого у меня стоял реаниматион прожект)
И что я только не делал. Удалил OGF модели - вылет. Удалил конфиг - вылет. Удалил и то и другое - вылет. И так любой вариант! :obstenu:
Может кто знает где таится неизведанный мне худ?!?!? То есть ОТКУДА ЖЕ СЧИТЫВАЕТСЯ ЭТОТ ДОЛБАННЫЙ ХУД ДАЖЕ КОГДА НЕТ КОНФИГОВ И ОГФ МОДЕЛЕЙ!?
Gun12
Тут ведь дело не в pairs, а в том что функция итератор inventory_for_each() производя свою работу (и отнюдь ведь не через pairs - а через то, что есть в С++) начинает обход массивов в заданном ей порядке. И порядок этот задан принудительно. Если первым на очереди стоит массив\субмассив "рюкзак", то туда она сначала и заглядывает. А уж как организованы эти массивы - как очередь, список или хэш-массив - только разрабы и знают :-)
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik
если это сделано в С, то и копать нужно в С (Кто-то будет это делать?)
А если в Lua - то по барабану, назови это хоть "рюкзак," хоть ещё как-нибудь, но если это не массив, то функцию PAIRS не обманешь. А другого способа доступа к ХЭШ пока не придумали.
По крайней мере других, соответствующих идее обратного обхода, методов в lua_help я не знаю.
Знатоки С++, ковырните, please, движок.
отредактировал(а) Gun12: 19-08-2010 23:04 GMT3 час. Не стань номинантом премии Дарвина.
Gun12
Весь инвентарь пишется в движковые массивы(а типов их - не счесть, могу штук 20 названий накидать :-) )
Кстати в lua все таблицы реализуют интерфейс ассоциативного массива (при том с динамически изменяемым размером) - то есть являются по сути хэш-массивами(или некими их вариациями). Так как понятие индексный массив - не совпадает с просто нумерацией ключей в математическом порядке. Типы данных в таком массиве должны быть обязательно однотипными(чего не требуется для луашных таблиц).
То есть таблица lua где ключи - это целые числа расположенные в математическом порядке это тоже хэш. А искусственное разделение таблиц lua на эти два типа которое есть во многих мануалах - ошибочно.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.