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

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


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

Как поставить метку на тайник, во время того,как актор выкладывает в него определенный предмет?

Я пробовал в on_item_drop коллбэк ставить, а саму метку как в treasure_manager ставил:

level.map_add_object_spot_ser(box.id, "treasure", text)

или

level.map_add_object_spot(box.id, "treasure", text)

 

Результат один: метка на акторе ставится...

А откуда у тебя в этом коллбеке box взялся? Ну да ладно. Я попробовал это сделать в колбеке on_item_drop. Вышло что-то в этом роде:

 

function actor_binder:on_item_drop(obj)
    ...
    local sobj = alife():object(obj:id()) -- получаем серверный объект
    level.map_add_object_spot_ser(sobj.parent_id, "treasure", "test test test")
end

Обращаю внимание, что если попытаться получит здесь id родительского объекта через клиентский объект obj:parent():id(), то мы получим всегда 0. т.е. id актора.

 

Если предмет съеден или просто выброшен на землю, то его родитель будет 65535. Вроде бы map_add_object_spot_ser в этом случае не сбивается, но вероятно надо бы проверять это и не делать лишнего. Ну а проверить, что выложили именно в ящик - дело техники. У меня же начали ставиться метки на всё подряд =)

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

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

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

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

 

Ааз, надо в user.ltx дописать

bind cam_1 kF1

bind cam_2 kF2

bind cam_3 kF3

bind cam_4 kF4

Vita sine libertate, nihil

Vita sine litteris - mors est

malandrinus, у меня из скрипта (кажется колмогора):

function add(item)
if item:section() == "test_item" then
	local box = item:parent()
	if box ~= nil then 
                       table.insert(table, box:story_id())
	end
end
end

Коллбэк из он итем дроп.

 

И если вместо table.insert ставить level.map_add_object_spot_ser(box:story_id(), "treasure", "test")

 

Получается метка на акторе...

Monnoroch, а, интересно, почему у item обязательно должен быть sid?

 

Добавлено через 16 мин.:

Где есть callback'и на партиклы и что каждый из них в отдельности представляет?

IQDDD, да я сам не знаю,это цитата из скрипта колмогора...видимо у всех коробок в игре есть сид...

Уважаемые, подскажите как вы снимаете координаты для спавна предметов и т.п. в "трудных местах"? Скажем предмет на полке или на шкафу.

 

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

 

Буду благодарен, если кто-то подскажет из знающих.

---------------------------------

www.amk-zone.de

И если вместо table.insert ставить level.map_add_object_spot_ser(box:story_id(), "treasure", "test")

 

Получается метка на акторе...

...

видимо у всех коробок в игре есть сид...

Как раз не обязательно у каждой, sid - это дополнительный необязательный идентификатор, что-то вроде специальной метки.

Я проверил и выяснил, что для всех объектов, у которых sid не установлен, и sobj.m_story_id, и cobj:story_id() выдают значение 4294967296. Если посмотреть на шестнадцатеричное представление этого числа, то увидим 0x100000000. Т.е. вообще говоря число выходит за пределы 32-х разрядов, однако младшие 32 разряда равны нулю. Ну вот скорее всего и выходит, что передаёшь ты в функцию почти всегда 0.

 

Только при чём здесь sid? Тебе нужен id коробки, а не sid.

 

А как я ранее предложил, чем не устраивает? У меня работает. Метки ставятся на всё, в чём оставишь предмет: на ящики, на живых сталкеров (после продажи им), на тушки. Осталось только проверить, что id принадлежит коробке, и твоя задача решена.

 

Где есть callback'и на партиклы и что каждый из них в отдельности представляет?

 

Партиклы - это визуальные эффекты такие. Что это такое можно почитать здесь. А как их создавать именно в сталкере написано здесь

 

Вообще говоря в списке коллбеков есть и action_particle (т.е. имеется константа callback.action_particle). Вот только не знаю, куда этот коллбек вешать. Примеров нет, надо экспериментировать.

 

Уважаемые, подскажите как вы снимаете координаты для спавна предметов и т.п. в "трудных местах"? Скажем предмет на полке или на шкафу.

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

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

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

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

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

 

Wlad777,

Есть программа "Position Informer". С помощью этой программы можно точно снимать координаты. Чтобы снять координаты с труднодоступного места необходимо подойти, как можно ближе к этому месту и снять координаты. Затем в консоли набрать rs_stats on (чтобы выключить этот режим надо будет набрать rs_stats off). Высветятся цифры разные. Внизу будут показаны координаты местоположения камеры ГГ. Потом входишь в режим Демо Рекорд (в консоли demo_record 1). И потом подлетаешь к нужному месту и берешь координаты, которые показаны на экране. Затем к этим координатам дописываешь геймвертекс и левелвертекс, которые получил, подойдя как можно ближе к месту сбора координат.

Вот таким извращенным способом можно снимать координаты достаточно точно в любых местах.

 

В СДК координаты не снимешь. Их там нет просто. Координаты появляются только после компиляции.

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

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

подпись тебя оправдует

В СДК координаты не снимешь.

уверен?

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

стоит декомпилировать уровень и в Level Editor всё разложить "по полочкам"

В СДК координаты не снимешь. Их там нет просто. Координаты появляются только после компиляции.

Kostya V

координаты есть всегда, разница в том, что в 3D редакторе они визуализированы

И сидели бы сейчас вышеозначенные любители больших подписей в маленьких файлах, в байт-коде ковырялись, если не в машинном...

Партиклы - это визуальные эффекты такие. Что это такое можно почитать здесь. А как их создавать именно в сталкере написано здесь

 

Это уже мне знакомо с прошлого года, что такое партиклы мне известно. А вот есть такой скрипт sr_particle.script. Вроде бы там класс. Надо покопать. :)

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

@ Kostya V: Я пользуюсь функцией позиций Cheat Spawner'a или dbTools dez0wave'a , в зависимости от ситуации. Для спавна неписей или предметов на земле и записи даже сложных путей для вполне хватает.

 

А через demo_record - это конечно изврат. Но раз по другому никак - буду так.

 

 

подпись тебя оправдует

Вас что-то не устраивает?

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

---------------------------------

www.amk-zone.de

В СДК координаты не снимешь. Их там нет просто. Координаты появляются только после компиляции.

Сетки нет, возможно? Координаты есть. Ну или я что-то не понимаю. Вот на скринах левел едитора отчётливо видны всякие координаты=)

 

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

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

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

 

Координаты в игре состоят из X, Y, Z. А также из геймвертексов и левелвертексов. Вот геймвертексы и левелвертексы можно получить только после компиляции уровня. По-другому их не получишь. А то что вы видете в редакторе никак не подойдет для игры.

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

Вопрос может и не по теме (и глупый может быть), но тем не менее!...не могу играть в сталкер чн из-за того, что сильно качается камера(голова у меня начинает кружится). Где находиться параметр,чтоб уменьшить покачивание при ходьбе???Помогите кто-нибудь!!!!!!!!!!!!!!

Изменено пользователем WoodKnight
WoodKnight, не,ето вроде как нельзя изменить,так же как и перенести на ТЧ. ето вроде как в моделях

Vita sine libertate, nihil

Vita sine litteris - mors est

malandrinus, согласно твоему совету попробовал навесить биндер на гранату, но у меня ничего не получилось. Итак, вот что я делал:

В файл w_f1.ltx в самом начале прописал вот это:

script_binding            = bind_grenade.grenade_init

 

Создал скрипт bind_grenade. Вот его содержимое:

function grenade_init (object_binder)
    obj:bind_object(grenade_binder(obj))
end

class "grenade_binder" (obj)

function grenade_binder:__init (obj) super (obj)
    if self.parent_id == db.actor:id() then
        self.has_actor = true
    end
end

function grenade_binder:update(delta)
    object_binder.update(self,delta)
    logs (self.section_name)
end

function grenade_binder:net_destroy()
    logs (self:position().x)
    object_binder.net_destroy(self)
end

 

Примечание: как я понимаю, метод net_destroy вызывается при уничтожении биндируемого объекта. Вроде и создал забиндирование. Создал инициализацию. Создал апдейт. Создал net_destroy, но ничего. Вот лог:

 

* Detected CPU: AuthenticAMD , F15/M11/S2, 2611.00 mhz, 8-clk 'rdtsc'

* CPU Features: RDTSC, MMX, 3DNow!, SSE, SSE2

 

Initializing File System...

using fs-ltx fsgame.ltx

FS: 26480 files cached 28 archives, 5008Kb memory used.

Init FileSystem 1.589497 sec

'xrCore' build 3557, Oct 30 2008

 

Initializing Engine...

Starting INPUT device...

Loading DLL: xrRender_R2.dll

Loading DLL: xrRender_R3.dll

command line

Executing config-script "user.ltx"...

[c:\documents and settings\all users\документы\stalker-stcs\user.ltx] successfully loaded.

Loading DLL: xrRender_R2.dll

Loading DLL: xrGame.dll

! Player name in registry is empty! (InstallUserName)

* [win32]: free[1991136 K], reserved[15716 K], committed[90236 K]

* [ D3D ]: textures[0 K]

* [x-ray]: crt heap[8946 K], process heap[1658 K], game lua[0 K], render[0 K]

* [x-ray]: economy: strings[4062 K], smem[0 K]

SOUND: OpenAL: enumerate devices...

SOUND: OpenAL: EnumerationExtension Present

devices Generic Hardware

SOUND: OpenAL: system default SndDevice name is Generic Hardware

SOUND: OpenAL: default SndDevice name set to Generic Software

SOUND: OpenAL: All available devices:

1. Generic Software, Spec Version 1.1 (default) eax[0] efx[no] xram[no]

2. Generic Software, Spec Version 1.1 (default) eax[0] efx[no] xram[no]

Executing config-script "user.ltx"...

Executing config-script "d:\program files\компания-разработчик (признана нежелательная) world publishing\с.т.а.л.к.е.р. - чистое небо\gamedata\configs\rspec_default.ltx"...

[d:\program files\компания-разработчик (признана нежелательная) world publishing\с.т.а.л.к.е.р. - чистое небо\gamedata\configs\rspec_default.ltx] successfully loaded.

[c:\documents and settings\all users\документы\stalker-stcs\user.ltx] successfully loaded.

SOUND: Selected device is Generic Software

* sound: EAX 2.0 extension: absent

* sound: EAX 2.0 deferred: absent

* sound : cache: 65537 kb, 4856 lines, 13820 bpl

Starting RENDER device...

* GPU [vendor:1002]-[device:9598]: ATI Radeon HD 3600 Series

* GPU driver: 6.14.10.6903

* CREATE: DeviceREF: 1

* Vertex Processor: PURE HARDWARE

* Texture memory: 997 M

* DDI-level: 9.0

* GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)

* GPU vertex cache: unrecognized, 16

* NVAPI is missing.

* Starting rendering as 2-GPU.

* DVB created: 1536K

* DIB created: 512K

! Renderer doesn't support blender 'effects\shadow_world'

* HWDST/PCF supported and used

- r__tf_aniso 4

- r2_tf_mipbias 0.

Starting engine...

! Player name in registry is empty! (InstallUserName)

Loading DLL: xrGameSpy.dll

* DVB created: 1536K

* DIB created: 512K

- r__tf_aniso 4

- r2_tf_mipbias 0.

* GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)

* GPU vertex cache: unrecognized, 16

* NVAPI is missing.

* Starting rendering as 2-GPU.

*** RESET [491 ms]

"d:\program files\компания-разработчик (признана нежелательная) world publishing\с.т.а.л.к.е.р. - чистое небо\bin\xrengine.exe"

* phase time: 0 ms

* phase cmem: 105624 K

Кэширование объектов...

Loading objects...

Loading models...

* [prefetch] time: 266 ms

* [prefetch] memory: 0Kb

! Player name in registry is empty! (InstallUserName)

* phase time: 315 ms

* phase cmem: 96373 K

Сервер: Старт...

* phase time: 1765 ms

* phase cmem: 96948 K

Сервер: Загрузка симуляции жизни...

* phase time: 10 ms

* phase cmem: 96948 K

Создание новой игры...

* Creating new game...

* Loading spawn registry...

stack trace:

 

001B:03B73468 xrGame.dll

001B:03B72EBC xrGame.dll

001B:03B72BEC xrGame.dll

 

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

WoodKnight - Попробуй "кам инерт" в юзере.

 

 

Всем! обновил шпаргалку до 6 версии.

сендспейс

иФолдер

Файлхостер

Думп

 

 

Прошу модераторов "поправить" в шапке темы.

 

RvP - По мелочи. Плюс сама структура изменилась.

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

256 символов
class "grenade_binder" (obj)

Как минимум, ошибка здесь. В скобках должен стоять базовый класс. Т.е. должно быть так:

class "grenade_binder" (object_binder)

 

добавлено:

 

Взял тут поэкспериментировал сам. Добавил к гранате биндер и выяснил интересную вещь. Да, в самом деле когда кидаешь гранату она исчезает с концами. Однако вместо неё появляется другой объект-граната. И что самое интересное, у этого объекта нет серверной части.

 

ещё добавлено:

 

После экспериментов выяснилось, что этот второй объект ведёт себя в соответствии с параметрами explode_duration и destroy_time из профиля гранаты.

destroy_time - это время от броска до взрыва в миллисекундах

explode_duration - это время жизни гранаты после взрыва. Странный параметр. Собственно на взрыв не влияет никак. Но после взрыва граната ещё существует, хотя и не видна, идет апдейт. Только когда проходит указанное время вызывается её net_destroy и второй объект тоже исчезает. Вероятно, это надо для дымовых и газовых гранат.

Зачем было создавать вторую? Тоже непонятно. Возможно, так проще было сделать, что гранату нельзя после броска поднять.

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

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

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

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

 

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

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

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

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

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

Войти

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

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

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