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

Скриптование


Svoboда

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

Есть вылет:

  Log (Показать)

Поделиться этим сообщением


Ссылка на сообщение

 

Подскажите пожалуйста как добавить свою схему логики. Допустим xr_walker_klon. 

 

1. Грубо говоря копия xr_walker.

 

2. Зарегестрировать в modules:

load_scheme("xr_walker_klon",                        "walker_klon",       stype_stalker)

Нужно что-то еще? Схема как бы работает, вот только "как бы". В основном в схеме меняются состояния передвижения сталкера через "state_mgr.set_state" и "move_mgr", а вот в игре они почти не меняются. Может ли какая-нибудь другая схема препятствовать этим изменениям?

 

Поделиться этим сообщением


Ссылка на сообщение

P.S. Разобрался - косяк был в том, что забыл занести апдейт таймеров, отвечающих за состояние передвижения, в actor_binder:update(delta)  :blush:

 

Поделиться этим сообщением


Ссылка на сообщение

Народ, подскажите пожалуйста:

 делаю я переборку объектов:

	for i=1,65535 do
		local obj = alife():object(i)

и хочу затем сделать кое-что с этим объектом, а именно со сталкером:

   if obj then
    if obj:section() == "stalker" then

Однако получаю вылет из-за:

attempt to call method 'section' (a nil value)

То бишь у объекта нет такого метода, однако на stalkerin написано: ...Эти методы подходят к объектам любого класса...

string section() const

возвращает имя секции объекта. Аргументов не принимает.

 

Вообще я что хочу сделать: узнать какие из этих объектов сталкеры, желательно без нет-пакетов можно это осуществить?

Поделиться этим сообщением


Ссылка на сообщение

Всем привет, возникла проблема при спавне вертолета через скрипт в Чистом небе. С вероятностью 80% будет получен вылет:

  Лог (Показать)
Изменено пользователем Старлей

Поделиться этим сообщением


Ссылка на сообщение
Shredder

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

*Shoker*

Сейчас попробую.

Поделиться этим сообщением


Ссылка на сообщение

*Shoker*

3/6 тестов прошли успешно, правда тут такая фишка с тестами...

Тест 1: Запускаю сталкер, загружаю сейв, пытаюсь заспавнить - все хорошо спавнится.

Тест 2: продолжаю Тест 1, не выходя из игры, загружаю этот же сейв - получаю вылет, указанный выше.

Тест 3: запускаю заново сталкер, загружаю тот же сейв, вертолеты спавнятся на ура.

Тест 4: опять же не выходя из игры, загружаю этот же сейв, при спавне вылет

Тест 5 и 6 в том же духе.

 Artos

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

 

 

===============

 Artos

Ты неправильно понял. Смотри: захожу я в сталкер, загружаю сейв, где я стою перед  нпс, после диалога с котрым спавнятся вертушки, поговрил с ним - птички заспавнились, затем я загружаю этот же сейв, не выходя из игры, и во время нажатия фразы, после которой у меня должен спавниться вертолет - происходит вылет.

Изменено пользователем Старлей

Поделиться этим сообщением


Ссылка на сообщение
  Цитата

 

Если вылет при перезапуске сэйва (не выходя из игры) связан

Он с этим не связан, я могу перезапустить сейв и играть себе спокойно дальше, хоть всю игру пройти, НО если я начну диалог после которого спавнится вертолет, то будет вылет. И параметр 'startup_animation' я изменил, как сказал Shoker, если раньше вылеты были практически всегда, то сейчас только так, как я описал выше.

 

P.S. По этому поводу у меня только одна мысль, что дело в том что, как ты сказал из-за того что попадает "лишний" байт, завтра я попробую принудительно "очистить" пакет, как ты написал, думаю поможет :) 

Изменено пользователем Старлей

Поделиться этим сообщением


Ссылка на сообщение

Подскажите пожалуйста, еще вот в чем: требуется от ГГ передать НПС 2 артефакта. Для этого я использую  функции ColR_iT(в посте под спойлером), однако от ГГ передается НПС только 1 артефакт, сделал не большую эхо-печать в лог, для проверки счетчика - все правильно, вот только вылазиет одна строчка странная:

! Cannot find saved game ~:psi:__i_=_1,_count_=_2
* Log file has been saved successfully!
! Cannot find saved game ~:psi:__i_=_2,_count_=_2
* Log file has been saved successfully!
! ERROR: SV: can't find children [39427] of parent [270253968]
! Cannot find saved game ~:psi:__i_=_1,_count_=_2
* Log file has been saved successfully!
! Cannot find saved game ~:psi:__i_=_2,_count_=_2
* Log file has been saved successfully!
! ERROR: SV: can't find children [39425] of parent [270253968]

Я нашел в этой же теме, год назад такой вопрос задавал *Shoker*, только он пытался переместить предмет с земли нпс, и у предмета не было родителя и т.д., поэтому как сказали и вылазили эти ошибки. Но у меня 2 вопроса:

1. Почему перемещается только 1 предмет.

2. Почему вылазиют сообщения, ведь изначально родитель артефакта ГГ, потом НПС?

P.S. Или поделитесь своими функциями :)

Поделиться этим сообщением


Ссылка на сообщение

Artos
Установил твой lua_helper, пытаюсь вызвать функцию:


Relocate_Items(npc, phraseID, 2)
Relocate_Items(npc, sect, 1, "in")

Получаю вылет:

 

  Показать

 

 

Но суть не в этом, вылет происходит из-за этой строчки 1324 там printf вызывается, так ведь предметы то не передаются!

Получается что предмет ГГ не проходит условие

if soItem and not oActor:marked_dropped(oItem) and oItem:parent() and oItem:parent():id() == idActor then

=======
 

P.S. Удалил ограничение все нормально стало с "отдачей" предмета.

Изменено пользователем Старлей

Поделиться этим сообщением


Ссылка на сообщение

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

    txt=game.translate_string("dialog_os_psi_artefact_1")
    phrase = dialog:AddPhrase(txt,"info","0",0)

Игра крешиться:

Expression    : fatal error
Function      : xray::core::detail::strconcat_error::process
File          : E:\priquel\sources\engine\xrCore\string_concatenations.cpp
Line          : 34
Description   : <no expression>
Arguments     : buffer overflow: cannot concatenate strings(1):
[d:\stalker clear sky\gamedata\sounds\][
characters_voice\dialogs\{тут идет текст диалога непонятными символами}..ogg]

Строка dialog_os_psi_artefact_1 есть в .xml файле с переводом, длина строки 421 символ, 2 точки перед ogg в логе, я так понимаю, потому что в конце предложения есть точка. Как это исправить? Я видел диалоги гораздо большей длины, которые не вылетали... Вылет встречал как-то и в обычном диалоге... А этот появился из неоткуда, работало, работало - да перестало.

P.S. А что движок так с каждой репликой что-ли? Проверяет есть ли файл с текстом диалога?

Поделиться этим сообщением


Ссылка на сообщение

Stalkersof

Попробуй так:

game_relations.set_factions_community(p[1], p[2], p[3])

p[1], p[2] - группировки

p[3] - отношение(enemy, neutral, friend)

 

P.S. Попробуй во втором параметре записать "actor"  :)

Изменено пользователем Старлей
  • Не нравится 1

Поделиться этим сообщением


Ссылка на сообщение

Уважаемые знатоки, подскажите пожалуйста, а за кого мы играем в мультиплеере? Если более подробно, то ковыряюсь я в SOProject. (Да я знаю, что туда мне и идти со своими расспросами, но хотя бы дайте ссылку на теорию или выскажите свои догадки). Проблема в том, что actor изначально должен быть в спавн-файле. Потом его можно удалить db.del_actor(...). И все как бы работает, единственное что не получится снять координаты позиции актора(логично, ведь мы его удалили). И я вот не пойму кем же мы бегаем то? В db.script ничего не увидел... При спавне(возрождение после смерти) пишется к примеру Ник[65535] respawned as actor. Но мы не actor... А кто тогда?!

 

 

====

local sim = alife() -- получаем сам объект класса alife_simulator
local sactor = sim:actor() -- получаем серверный объект для актора

 

Попробовал так еще. Пока непонятно

======

Но это получается серверный объект... А тот что в db.actor изначально клиентский что ли?



=========

Стоп, а какие тогда методы и функции есть у серверных объектов? И возможно ли перегнать серверный объект в GameObject?

Изменено пользователем Старлей

Поделиться этим сообщением


Ссылка на сообщение
  28.04.2014 в 20:50, malandrinus сказал:

На очереди net_packet. Простой, но весьма важный класс.

..........

Несколько замечаний:

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

Это цитата от поста про object_binder и net_packet. Собственно вопрос: а как узнать структуру нет-пакета? 

Поделиться этим сообщением


Ссылка на сообщение

Всем привет :) . Все еще не нашел решение следующей проблемы:

"при спавне предмета на каком-нибудь этаже здания на столе(или другом объекте) он оказывается на земле. Координаты взяты из all.spawn. Спавн произвожу скриптом.

 

P.S. Объекты "physic_destroyable_object" и "physic_object" спавнятся тютелька в тютельку."

 

Как мне подсказал Сталкер Лом:

 

 

  Цитата
предмет начинает использовать позицию низ\верхлежащей АИ-ноды. В СДК это выключается галками use_ai_location иvisible_for_ai, а вот как в аллспавне это делается - что то не припомню...

Хотя можно попробовать убрать строки начинающиеся со слова upd: , они, обычно, в конце блока спавна объекта располагаются.

 

Однако повторюсь, я пытаюсь спавнить через скрипт. Как быть не знаю... В lua_help нашел такой метод: 

    function use_ai_locations(boolean);

Однако он не применим к классу game_object, то бишь к заспавненной вещице.

 

Вроде бы и ситуация то простая совсем, но не знаю в каком напрвлении копать...

Поделиться этим сообщением


Ссылка на сообщение

 

 

  Цитата
"дырявых" местах

Случайно не те места, где работает баг "лифт"?

 

А по поводу не спавнить - не могу понять: сколько же уже модов было сделано на сталкер(причем людьми с разным опытом в модмейкерстве), так ведь спавнили скриптом все время и везде - никуда не проваливалось... Бред какой-то. Конечно на крайняк могу попробовать АИ-сетку пересобрать, но подставлять Node для каждой точки спавна - как-то примитивно. 

 

P.S. Спавню через скрипт, ибо мой спавн динамический, с постоянным обновлением и спавном по обстоятельствам.

 

Поделиться этим сообщением


Ссылка на сообщение
Dennis_Chikin,

"game_object - это который создался в онлайне" - А это как?))

local obj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3])

obj - будет серверный объект, так ведь? Еще знаю можно клиентский получить так:

obj = level.object_by_id(k)

А вот можешь подробнее пояснить свою фразу "game_object - это который создался в онлайне" , а то я что-то не догоняю)

 

P.S. И где сейчас можно найти актуальную версию m_netpk?

Поделиться этим сообщением


Ссылка на сообщение

 *Shoker*

Да ЗП, точнее мультиплеер ЗП)

 

  Цитата

local sobj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3])

sobj:use_ai_locations(false) 

Вылет. О не применимости метода к объекту. (attempt to call method "use_ai_locations" (a nil value)

 

Я решил прикольнуться и сделал так:

	local item = alife():create(k, pos_vector[1], pos_vector[2], pos_vector[3])
	se_item = alife():object(item.id)
	se_item:use_ai_locations(not se_item:used_ai_locations())

И... работает!!! Один вопрос: а в чем вся соль?(вроде же оба серверных объекта)

Изменено пользователем Старлей

Поделиться этим сообщением


Ссылка на сообщение

Я предполагал, что это сталкер... Тогда вопрос в другом: откуда именно такой выбор типов переменных, под значения?(например pk:r_s32() -- money, почему s32?)

 

Разве не такая структура?

--========== cse_alife_trader_abstract ==========

local money              = packet:r_u32()
local specific_character = packet:r_stringZ()
local trader_flags       = packet:r_h32()
local character_profile  = packet:r_stringZ()
local community_index    = packet:r_h32()
local rank               = packet:r_h32()
local reputation         = packet:r_h32()
local character_name     = packet:r_stringZ()

--========== cse_alife_object ==========

local game_vertex_id  = packet:r_u16()
local distance        = packet:r_float()
local direct_control  = packet:r_u32()
local level_vertex_id = packet:r_u32()
local object_flags    = packet:r_h32()
local custom_data     = packet:r_stringZ()
local story_id        = packet:r_s32()
local spawn_story_id  = packet:r_s32()

--========== cse_visual ==========

local visual_name  = packet:r_stringZ()

А главный вопрос, вот в чем: в самом начале у Dennis_Chikin signed int, а у меня в этой штуковине(из acdc) unsigned int. По идее байты из пакета считаются одинаково и ошибки никакой не будет. А что если при считывании у money будет значение выходящее из диапазона s32, но входящее в u32?

 

К чему я это - получается можно читать пакеты, зная только кол-во байт под какую переменную определенно, а уж signed/unsigned нужно только, если работать с этими значениями?

 

P.S. Код выше, из NetPacketCreator, и я сам то еще не пойму, что такое r_h32()?!

 

 

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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