Snork 163 8 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 (изменено) Друзья, подскажите что написать на проверку визуала НПС, именно визуала, а не надетого костюма. Пример: если визуал green_stalker1(модель, а не текстура), то нпс не выполняет определённые действия. Я не соображу как сделать проверку по визуалу. Изменено 20 Июня 2014 пользователем Snork 163 Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 local pk = net_packet() obj:STATE_Write( pk ) pk:r_seek( 0 ) pk:r_s32() -- money pk:r_stringZ() -- profile pk:r_s32() -- infammo pk:r_stringZ() -- class pk:r_s32() -- communityid pk:r_s32() -- rank pk:r_s32() -- reputation pk:r_stringZ() -- charname pk:r_u16() -- gvid pk:r_float() -- obf32u1 pk:r_s32() -- obs32u2 pk:r_s32() -- lvid pk:r_s32() -- oflags pk:r_stringZ() -- custom pk:r_s32() -- sid pk:r_s32() -- obs32u3 local vis = pk:r_stringZ() Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Старлей 88 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 (изменено) Dennis_Chikin, А это чья структура? Изменено 20 Июня 2014 пользователем Старлей Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 Я не понял вопрос. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Карлан 1 049 Опубликовано 20 Июня 2014 Поделиться Опубликовано 20 Июня 2014 @Старлей, кэп намекает на сталкера, если конкретно, то в данном примере три класса, cse_alife_trader_abstract, cse_alife_object, и, собственно нужный нам - cse_visual. Ссылка на комментарий
Старлей 88 Опубликовано 21 Июня 2014 Поделиться Опубликовано 21 Июня 2014 Я предполагал, что это сталкер... Тогда вопрос в другом: откуда именно такой выбор типов переменных, под значения?(например 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()?! Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 21 Июня 2014 Поделиться Опубликовано 21 Июня 2014 Со знаком/без знака - в данном случае, скорее всего, без разницы. Читать, кстати, можно вообще сразу нужную переменную, если знать позицию. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Карлан 1 049 Опубликовано 21 Июня 2014 Поделиться Опубликовано 21 Июня 2014 (изменено) r_h32()Опечатка, такого нету. По крайней мере судя по документации, сам не проверял. а у меня в этой штуковине(из acdc) unsigned int Наверняка автор подразумевал, что отрицательного количества денег в оригинале игры быть не может.К чему я это - получается можно читать пакеты, зная только кол-во байт под какую переменную определенно, а уж signed/unsigned нужно только, если работать с этими значениями?Если я правильно понял вопрос, то да.Читать, кстати, можно вообще сразу нужную переменную, если знать позицию.В случае с визуалом сталкера, получение конкретно этого параметра будет весьма кривым кодом. Не уверен что работает, вот набросал: function GetVisual(obj) local packet = net_packet() local se_obj = alife():object(obj:id()) se_obj.STATE_Write(se_obj, packet) packet:r_advance(4) packet:r_stringZ() packet:r_advance(4) packet:r_stringZ() packet:r_advance(12) packet:r_stringZ() packet:r_advance(18) packet:r_stringZ() packet:r_advance(8) return packet:r_stringZ() end Разумеется можно считывать сразу длину строк и устанавливать позицию чтения сразу туда, куда нужно, но это сами сделайте, кому интересно. Изменено 21 Июня 2014 пользователем Карлан Ссылка на комментарий
Wlad777 24 Опубликовано 23 Июня 2014 Поделиться Опубликовано 23 Июня 2014 Знающие камрады, подскажите - есть ли способ закрепить кость у заспавненного скриптом предмета? --------------------------------- www.amk-zone.de Ссылка на комментарий
Карлан 1 049 Опубликовано 23 Июня 2014 Поделиться Опубликовано 23 Июня 2014 @Wlad777, не уверен, но можно попробовать заспавнить объект на основе physic_object или, если угодно, O_PHYS_S, и указать ему кость фиксации в стейт части (fixed_bones называется, тип - строка). Ссылка на комментарий
Wlad777 24 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 @Карлан, спасибо за наводку. Разобрался, всё работает. --------------------------------- www.amk-zone.de Ссылка на комментарий
demon96 8 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 Здравствуйте, как сделать выдачу сообщения на экран после выдачи инфопорции? Тоесть захожу в спейс рестриктор, он выдает инфопорцию и появляется сообщение на экране. Помогите Разобрался, вдруг кому будет нужно. Сделал я это так: 1.Регистрируем новую инфопорцию: <info_portion id="Имя инфопорции"> <action>Скрипт.Название_функции</action> </info_portion> При получении этой инфопорции срабатывает функция через скрипт. 2.В рестрикторе указываем такую логику: [logic] active = sr_idle [sr_idle] on_actor_inside = %+Имя инфопорции% END 3.Создаем скрипт с фунцией: function Название_фунции(actor, npc) news_manager.send_tip(actor, "%c[255,255,128,128] Текст сообщения %c[default]", nil, "stalker", nil, 30000) end Единственный вопрос, xr_sound.set_sound_play(npc, "rostok_kruglov_help_6") -- выдает вылет, если используется функция через рестриктор, через диалог все работает, как быть? Я так понял, что здесь указано npc ( как отправитель сообщения со звуком, как указать для регистра? Ссылка на комментарий
Карлан 1 049 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 @demon96, вместо npc db.actor поставь и будет тебе счастье. Для выдачи сообщений за глаза хватит. Ссылка на комментарий
demon96 8 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 @Карлан,спасибо) Вылет Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...games\s.t.a.l.k.e.r\gamedata\scripts\xr_sound.script:17: attempt to index field '?' (a nil value) Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 Для этого непися что-то должно быть в звуковом конфиге. Имеющее отношение к звуковым файлам по соответствующему пути. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
demon96 8 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 Еще один мучающий меня вопрос, как сделать при загрузке игры, загрузку внедренных скриптов, тоесть я создал сторонний скрипт и мне надо, чтоб он срабатывал от определенных действий, а не через диалог Ссылка на комментарий
Карлан 1 049 Опубликовано 24 Июня 2014 Поделиться Опубликовано 24 Июня 2014 (изменено) @demon96, http://www.amk-team.ru/forum/index.php?showtopic=7450&p=258470 здесь и http://www.amk-team.ru/forum/index.php?showtopic=7450&p=472142 здесь конкретно получишь ответ на "при загрузке игры", а уж "определенные действия" извини, не угадаем. @Wlad777, еще тебе подкину один метод, в классе physics_element есть метод fix(), намертво фиксирует гейм объект по указанной кости. Получать кость можно например методом get_element_by_bone_id, но для того, чтобы не путатся, лучше использовать get_element_by_bone_name. Замечу, что при перезагрузке фиксация так скажем теряется, так что нужно "перефиксировать" объект каждый раз при перезагрузке... В целом лучше конечно нет-пакет юзать, но я так, может кому надо будет. Вот можешь попробовать: function FixObj(Obj) local oObj if type(Obj) == 'userdata' then oObj = Obj end if type(Obj) == 'number' then oObj = level.object_by_id(Obj) end if oObj then local GetPhysShell = oObj:get_physics_shell() if GetPhysShell then local sElement = GetPhysShell:get_element_by_bone_name("link") if sElement and (not sElement:is_fixed()) then sElement:fix() end end end end Изменено 24 Июня 2014 пользователем Карлан Ссылка на комментарий
Wlad777 24 Опубликовано 25 Июня 2014 Поделиться Опубликовано 25 Июня 2014 В целом лучше конечно нет-пакет юзать, но я так, может кому надо будет. Я через нетпакет сделал. Для моих целей (подспавн небольшого кол-ва предметов по ходу сюжета, для более реалистичной "жизни Зоны") хватает абсолютно. --------------------------------- www.amk-zone.de Ссылка на комментарий
nikita_nz1986 130 Опубликовано 26 Июня 2014 Поделиться Опубликовано 26 Июня 2014 (изменено) Люди, всем привет, такая проблема: я создал сталкера снайпера, всё в норме, но когда я с ним поговорю, отхожу далеко, то он не хочет становится в прежнюю анимацию, просто стоит, потирает ладони. Вопрос: как это исправить? Делал через all.spawn ;SNIPER ADDON ;Меченый(Стрелок)[logic]active = remark@search[remark@fire]combat_ignore_cond = {!is_enemy_actor}radius = 0anim = hideon_info = {=health_le(0.5)} remark@searchwounded = wounded@worksniper = true[smart_terrains]none = true[remark@search]combat_ignore_cond = truecombat_ignore_keep_when_attacked = falseanim = hidetarget = actoron_info = {=see_actor} remark@firewounded = wounded@work[wounded@work]hp_state = 0|wounded_heavy@help_heavyhp_state_see = 0|wounded_heavy@help_heavyhp_victim = 0|nilhp_fight = 0|falsehp_cover = 0|false @nikita_nz1986, Вопрос исчерпан. Изменено 1 Июля 2014 пользователем Kirgudu Ссылка на комментарий
J.A.A. 2 Опубликовано 28 Июня 2014 Поделиться Опубликовано 28 Июня 2014 Ребята, подскажите, как вызвать удар в морду через диалог? А то я прописываю: <action>dialogs.punch</action> и ловлю вылет (система ругается на скрипт). @nikita_nz1986, cделай так: [logic] active = camper@search[remark@fire] anim = hide_fire target = actor combat_ignore_cond = truewounded = wounded@work [camper@search] path_walk =1_walk path_look = 1_look combat_ignore_cond = trueon_actor_dist_le = 5| remark@firewounded = wounded@work def_state_standing = hide [wounded@work]hp_state = 0|wounded_heavy@help_heavyhp_state_see = 0|wounded_heavy@help_heavyhp_victim = 0|nilhp_fight = 0|falsehp_cover = 0|false [smart_terrains] none = true Не забудь прописать точки "1_walk" и "1_look". Тогда по умолчанию твой НПС будет стоять и целиться в заданную точку, при приближении ГГ на 5 метров, он начнёт целиться в него, а если ГГ - враг, то начнёт стрелять. А с юзанием всё будет в порядке. Пишу мод с неповторимым сюжетом. Нужны "модельеры" Заинтересованным писать в ЛС Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти