CRAZY_STALKER666 36 Опубликовано 20 Июля 2016 @Gray Hawk, на форуме есть мод, подобие просмотра книги или фотографии( на деле текстурки ). Поискать надо, название не помню. Народ! Помогите найти ошибку.Вот сам код, вызываеться из bind_stalker.update() local s_obj = { "[[ep\military\ml1]]", "[[ep\military\ml2]]", "[[ep\military\ml3]]" } local snd_flag = false function mil_sound_update() local level_gg = level.name() if snd_flag == false and level_gg == "l07_military" then local s_obj=s_obj[math.random(table.getn(s_obj))] local snd_obj = xr_sound.get_safe_sound_object(s_obj) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) snd_flag = true end end Лог вылета - [error]Line : 73[error]Description : [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:324: attempt to call field 'mil_sound_update' (a nil value) Изначально грешил на таблицу(мол получение звука неверно), но и без неё вылетает... Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 20 Июля 2016 @Romann, @Serge!, @Dennis_Chikin, никто из вас не прав, в данной проблеме... Упрастил функцию( нет, ну а что? Никто не запрещает каждую итерацию цикла делать что захочу...) function mil_sound_update() local level_gg = level.name() if level_gg == "l07_military" then local snd_obj = xr_sound.get_safe_sound_object([[ep\hurt]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end Вылет... WAT!&! Перенес в другой скрипт, функцию не менял - НЕТ вылета... Все файлы проверяю постоянно чекером ошибок синтаксиса... но видимо он не все знает... У кого какие идеи? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 20 Июля 2016 @Romann, даже ваш старый вариант прекрасно работает! Проблема была в самом файле скрипта... И не понятно, какого она вообще рода... Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 20 Июля 2016 @Dennis_Chikin, @Serge!, я не про то.... Вот смотрите. Если я вызову из того скрипта, пусть даже это: get_console():execute("1") или это if db.actor:has_info then give_info бла бла бла Или любую другую функцию - получу вылет... Вот я к чему... А звуки прекрасно работают, за это отдельное спасибо! Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 21 Июля 2016 (изменено) Такая проблема. Использую модифицированную ph_car от lscon. Вот в чем проблема. Перевел функцию на новое хранилище обьектов, И так, переписал функцию. function action_car:update_friends_and_target()self.friends = {}local objfor k,v in pairs(db.btr_target) doobj=level.object_by_id(k)if obj and ( (IAmAStalker[obj:clsid()] and obj:character_community()=="military" and obj:alive()) or(obj:section()=="vehicle_btr" and obj:id()~=self.object:id()) ) andself.fire_range_sqr>self.object:position():distance_to_sqr(obj:position()) thenself.friends[k] = obj:section()endendif self.st.fire_target == "monsters" then-- враги монстры, значит друзья все сталкеры и выбираем ближайшего монстра в качестве целиlocal dist = 0local nearest = 100000local nearest_limit = 25 -- но не ближе 5 м, иначе БТР сам себе мешает стрелятьlocal target = nilfor id,obj in pairs(db.btr_target) doif obj:alive() thendist = self.object:position():distance_to_sqr(obj:position())if dist < self.fire_range_sqr thenif IAmAStalker[obj:clsid()] then-- добираем всех сталкеров в друзейself.friends[id] = obj:section()elseif IAmAMonster[obj:clsid()] and nearest_limit < dist and dist < nearest and self.car:IsObjectVisible(obj) then-- ищем ближайшего монстра в качестве целиnearest = disttarget = objendendendendif target thenself.target_obj = targetself.state_firetarget = state_firetarget_enemyelseself.target_obj = nilself.state_firetarget = state_noneendendend Теперь данные берем из db.btr_target. Там, вроде бы, храниться то, что нужно. Вот инициализация хранилища: function add_obj( obj )if IsStalker(obj) thencreature[obj:id()] = trueelseif IsMonster(obj) thencreature[obj:id()] = falseendif IsMonster(obj) thenmonster_stock[obj:id()] = objendif IsStalker(obj) and IsMonster(obj) thenbtr_target[obj:id()] = trueendendfunction del_obj( obj )storage [obj:id()] = nilif IsStalker(obj) or IsMonster(obj) thencreature[obj:id()] = nilendif IsMonster(obj) thenmonster_stock[obj:id()] = nilendif IsStalker(obj) and IsMonster(obj) thenbtr_target[obj:id()] = nilendend Итого - ничего. Если выставить db.creature - вылет со ссылкой на obj(мол boolean value). Если db.storage - вылет со ссылкой на метод alive(), мол его к obj применить нельзя... Вроде все должно работать, в остальных частях схемы(логика БТР) проблем нет, брал прямо из ОП-2. Кто-то скажет скопировать оригинальный btrs_friends = {}, еще раз говорю - на счет друзей БТР фишка не особо нужна. Тем более проверка на группировки и прочее уже вшита в функцию. Жду вашей помощи... Изменено 21 Июля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 21 Июля 2016 Итак, после over9000 вылетов, поломок update() и результатов = nil, я добился этого - БТР гасит монстров!!! Может, пригодиться кому. Для чистого ТЧ, разве что нужно объявить хранилище monster_stock, там только монстры... function action_car:update_friends_and_target() get_console():execute("CHEKING!!!") if self.st.fire_target == "monsters" then for k in pairs(db.monster_stock) do local obj = level.object_by_id(k) if obj and IsMonster(obj) and obj:alive() and self.car:IsObjectVisible(obj) then self.target_obj = obj self.state_firetarget = state_firetarget_enemy get_console():execute(" !!_"..obj:name().."_!!") end end end end 1 Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 23 Июля 2016 Наткнулся на интересную штучку в секции [spawner] [spawner] cond = never (Была у БТР в Припяти, хотя я там вообще БТР в оригинале не припомню... В xr_spawner.script такого условия "never" нет... Выходит её теоретическое значение : когда спавнить - НИКОГДА!!11 ? А зачем она тогда?) Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 23 Июля 2016 (изменено) Может потому и нет его в оригинале, что "never" ? А описание скриптовое этого never где? А? P.S Условие спавна - "никогда" сводит на нет весь сокральный смысл секции спавна БТР, ведь описание всех его параметров просто не нужно в итоге, ведь "never-never" не будет использовано.... Изменено 23 Июля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 23 Июля 2016 И при чем здесь xr_spawner ? Цитирую(http://stalkerin.gameru.net): Общая секция спавнер та секция, которая присутствует как у NPC, так и у монстров.... В самом конце: Файл: gamedata\scripts\xr_spawner.script Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 23 Июля 2016 Другой вопрос - xr_robbers - кто-нибудь когда-нибудь пытался эту схему использовать? Работоспособна ли она? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 23 Июля 2016 Вообще-то насчет не используемых вещей в скриптах\конфигах\спавне - не ужели ты впервые узнал, что разрабы наплодили вышеназванного в приличном кол-ве и не удосужились это подчистить даже в релизе ? Знал. Но не я один их замечал, исследовал. Может кто и довел скрипт до конца. Вот и интересуюсь... Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 27 Июля 2016 (изменено) максимальное количество lvid на конкретной локации? Тут посмотри: https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/ogse_anomaly.script Изменено 27 Июля 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 9 Августа 2016 скриптом заспавнить машину/бтр ? Для машины(нивы например) хватит alife:create() А вот для БТР, с логикой,как положено - смотри выше пост. Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 15 Августа 2016 Такой вопрос. Через скрипт отрисовываю по координатам ГГ партикл(снег), но рисуеться он как бы в стороне от ГГ, и иногда выглядит это совсем некрасиво, и нереалистично. Вот сама функция: if not self.particles thenself.particles=particles_object("ghoul\\global_snow")self.particles:play_at_pos( db.actor:position() )endif self.particles thenself.particles:move_to(db.actor:position(),vector():set(10,2,15))end На месте цифр 10,2,15 стояли нули в исходном варианте, я думал добавить значение для вектора ,тем самым сместить положение точки отрисовки, но ничего не изменилось. Подскажите, как возможно решить проблему. Может быть сначала поработать с координатами ГГ, попробовать поприбовлять к ним значения исходя из данного относительно времени? Тоесть как бы подменять их на новые в рамках функции. Подскажите, у кого какие идеи... Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 15 Августа 2016 что мешает посмотреть любой зимний мод, в котором это работает? Отвечу - материал взят именно из него. Там это в таком кривом варианте и оставлено... Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 Выполнил функцию( Тч 1.0004) function pri_scene_rel()relation_registry.set_community_relation("stalker","actor_freedom",-5000)end Группировки все рабочие, но ловлю вылет: error]Expression : fatal error[error]Function : CScriptEngine::lua_error[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp[error]Line : 73[error]Description : [error]Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\xr_effects.script:152: attempt to call field 'set_community_relation' (a nil value) В инете искал, и не нашел примеров использования .set_community_relation в ТЧ. Быть может ее там просто нет? Есть ли ей альтернатива, или я просто накосячил в аргументах функции? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 Использование set_community_relation в этой функции верное. Возможно мы не поняли друг друга. Есть ли в ТЧ вообще эта функция? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 В твоем случае, я думаю, подойдет, так как, если не ошибаюсь, то ты хочешь поссорить актора, который состоит в Свободе, со сталкерами (как группировкой). Такое возможно. Неправильно Нужно поссорить 2 группировки, ГГ к ним отношения не имеет.(На названия группировок смысла нет смотреть, их не я делал и использую по своему). В таком случае, если данной функции нет, можно ли её реализовать без ковыряний движка? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 (изменено) @Карлан, ок тогда поступим так. У каждого моего НПЦ из сценки( какой не скажу, секрет типо ) есть уникальный id. И получить его можно вплоть до: local id_kl7 = my_sid.pri_killed_3 local se_obj_1 = alife():object(id_kl7) На выходе имеем alife():object. Но это я использую для удаления вышеуказанных. Значит, можно написать функцию, которой я передам 2 аргумента(2 нпц) и она поссорит? Просто как правильно и аккуратно это сделать, не помню. З.Ы Через секнду озарение пришло. М.б так прокатит?) function set_enemies(obj, obj_2) -- тут надо получить НПЦ вышеуказанным способом if npc1 and npc1:alive() then -- тут проверить нет ли у нас NIL и не мертвы ли они. npc:set_relation(game_object.enemy, npc1) -- ссорим однго относительно другого npc1:set_relation(game_object.enemy, npc) -- наоборот end end end Изменено 18 Августа 2016 пользователем CRAZY_STALKER666 Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 @Карлан, смотри, новые подробности. 1.Группировка, которую добавлял не я, не доделана, при смерти НПЦ из нее вылет, ссылающийся на death_manager, значит неизвестно где там еще накосячили. А делал то DEXXX... 2. Твой способ может и прокатит, но раз у меня есть конкретные обьекты, не проще оперировать ими а не группировками? 3. Попробовал применить к своему способу set_relation() - вылет: [error]Expression : fatal error[error]Function : CScriptEngine::lua_error[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp[error]Line : 73[error]Description : [error]Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\xr_effects.script:259: attempt to call method 'set_relation' (a nil value) Применим ли set_relation для обьекта типа alife():object? Не соответствует правилам. Поделиться этим сообщением Ссылка на сообщение