ну да ты не показал даже тот кусок, в котором сама проблема проявляется.
Как раз таки он и показан. Я комментировал это - если не прерывать время действия эффекта, то все работает идеально, но если прервать, начинается чехарда - таймер срабатывает как попало. Т.е. предположительно причина скрывается где-то в момент когда фризится остаточное время работы эффекта, т.е. когда устанавливается переменная timer. Но это конечно предположение, уверенности у меня нет. На счет остальных фрагментов - они отношения к делу не имеют (это комплексный скрипт), они вовсе не отвечают за работу ПНВ поэтому я их опустил.
если не прерывать время действия эффекта, то все работает идеально, но если прервать, начинается чехарда - таймер срабатывает как попало. Т.е. предположительно причина скрывается где-то в момент когда фризится остаточное время работы эффекта, т.е. когда устанавливается переменная timer
Более содержательно, чем "чехарда" и "как попало", ты не можешь описать суть проблемы? Понятно, что скрипт работает не так, как ты ожидал - но ни что именно вместо ожидавшегося происходит, ни что, собственно, ожидалось ты не говоришь. Чтобы понять, правильно ли оно "фризится", нужно увидеть и ту часть, где оно "мелтится" - в приведённых фрагментах переменная timer увеличивается на удвоенное время действия эффекта AANightVisionSpell и понемногу бесцельно стремится в бесконечность (бесцельно - поскольку значение переменной нигде не используется).
Если AANightVisionSpell непрерывно включен LimitTime пополам часов, флажок Time перещёлкивается на единицу и вернётся на ноль только после каких-то закадровых манипуляций, но если не оставлять AANightVisionSpell включенным дольше чем на два часа, а время от времени отключать (отсчёт от StartNV начинается заново при каждом включении), то Time останется ноликом навсегда. Немного странно, но не страннее бесцельного таймера... Или эти две странности друг друга компенсируют, и при проверке лимита нужно было таймер учесть, а одновременно с выставлением единицы в Time ещё и обнулить timer? Да, трудно разобраться в проблеме, когда в тайне держится и что хотели, и что получили... Приходится нутром чуять, "что это за лампочки? должны ли они так мигать?"
Не остается, в противном случае скрипт не работал бы вовсе, в любых вариантах, а это не так. Впрочем... спором делу не поможешь, а решить вопрос как-то надо. Допустим моя схема неверна, если так удобнее - будем считать так, тогда хочу узнать какая схема будет верной? Какие есть варианты?
В твоём скрипте нет никакого "остаточного времени работы"! Я не говорю, что его нигде нет - но в том скрипте, который ты показал, его нет. И как ты предлагаешь искать решение проблемы, если проблема оставлена за кадром?...
Вот как подобного содержания скрипт написал бы я:
SCRIPTNAME NightVisionControl SHORT NVKeyDown SHORT NVToggle FLOAT BatteryCharge FLOAT StartNV BEGIN GameMode …IF (IsKeyPressed fNVHotkey) ……IF NVKeyDown == 0 ………SET NVKeyDown TO 1 ………SET NVToggle TO 1 ……ENDIF …ELSEIF NVKeyDown ……SET NVKeyDown TO 0 …ENDIF …IF (Player.IsSpellTarget AANightVisionSpell) ……IF NVToggle ………SET NVToggle TO 0 ………Player.RemoveSpell AANightVisionSpell ………SET BatteryCharge TO BatteryCharge + StartNV - GameDaysPassed ……ELSEIF (Player.GetEquipped PowerHelmetList) == 0 ………Player.RemoveSpell AANightVisionSpell ………SET BatteryCharge TO BatteryCharge + StartNV - GameDaysPassed ……ELSEIF BatteryCharge < (GameDaysPassed - StartNV) ………Player.RemoveSpell AANightVisionSpell ………SET BatteryCharge TO 0 (1) ……ENDIF …ELSEIF NVToggle ……SET NVToggle TO 0 ……IF (Player.GetEquipped PowerHelmetList) ………IF BatteryCharge > 0 …………SET StartNV TO GameDaysPassed …………Player.AddSpellNS AANightVisionSpell ………ELSEIF (Player.GetItemCount батарейка) (2) …………Player.RemoveItem батарейка 1 …………SET BatteryCharge TO 0.125 ; три часа …………SET StartNV TO GameDaysPassed …………Player.AddSpellNS AANightVisionSpell ………ELSE …………ShowMessage кончились-батарейки ………ENDIF ……ELSE ………ShowMessage не-тот-шлем ……ENDIF …ENDIF END
(1) Оставшийся заряд устройства фиксируется только в момент выключения; если хочется, например, вывести эту цифру наглядно в HUD - тут добавить
……ELSE ………SET BatteryCharge TO BatteryCharge + StartNV - GameDaysPassed ………SET StartNV TO GameDaysPassed ………SetUIFloat как-следует
(2) Тут батарейки расходуются автоматически; если хочется делать это более торжественно и интерактивно - хозяин барин.
В общем, никак не удавалось заставить собачку противостоять врагу до победы Про поправки понял, но как это отразить в настройках - нет. Возможно, какая-то взаимосвязь есть с Combat Style, но как ни пытался менять настройки и в нем тоже, без толку. Меняются нюансы поведения именно по движениям, действиям, но атаковать не хочет ни в какую после 5-6 убитых врагов. Все-таки нашел связь со здоровьем. Не важно какое число здоровья выставлено изначально, 200 или 2000 или 20000, есть или нет неуязвимость и бессмертие - главное, что любое, первоначальное кол-во здоровья считается за 100%. Если собаку атакует куча врагов, то какие бы настройки ни стояли - все-равно, видимо, идет просчет повреждений и процент здоровья падает. И хотя собака не умирает, но похоже, из-за поправок теряется отвага и т.д. Собака начинает трусить. Короче говоря, прилепил на нее скрипт, чтобы здоровье постоянно держалось на 100% и проблема решилась. Убивает всех в охраняемой зоне, сколько бы врагов ни напало
Изменение репутации для пользователя Spalny_Vagon
Spalny_VagonOffline
Сообщение №1327
написано: 12 ноября 2014, 13:06
| Отредактировано: Spalny_Vagon - 12 ноября 2014, 13:08
Я в свое время вообще обошелся без глобальных переменных для своего ПНВ. Просто в квестовом скрипте взял число (у меня 600) и в каждом фрейме (т.е. каждые 5 секунд) уменьшал его на единицу. ПНВ включен - считаем, выключен - не считаем. До нуля дошло - меняется батарейка. Потом, когда был усложнен сам прибор (добавил яркость и тепловизор) усложнился и алгоритм "расхода" - т.е. чем ярче, тем чаще меняется батарейка. А что касается глобальных переменных времени, то они, бывает, ни с того, ни с сего "взбрыкивают", особенно gamehour. В menu mode (сон или ожидание) при переходе от 24 часов к 0 gamehour иногда ведет себя совершенно непредсказуемо.
====================== Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294 Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Я в свое время вообще обошелся без глобальных переменных для своего ПНВ.
Ну, здесь оно было отчасти сделано с тем же акцентом, что оригинал - там использовался GameDaysPassed - в совсем своих скриптах я как правило считаю секунды, а не дни... Что разница непринципиальная, но мне просто в основном с короткими отрезками времени доводится обращаться. Мысль отсчитывать время оборотами скрипта любопытна - причём можно ведь и длиннее 5 секунд паузу делать - но совершенно не стыкуется с необходимостью в том же скрипте следить за нажатостью кнопок (флегматично держать нажатую кнопку 5 секунд, когда какой-то гад выключил свет и плюётся из темноты - нервы из простой стали не выдержат ). Внутрисуточное время я даже не соображу, где использовал - в пакетах, наверное? Но там свой хронометр... То есть GameHour вовсе не использую, и даже не потому, что помню о его сумбурном поведении в районе полуночи, а просто мне всегда была важнее длительность событий, а не время их начала-конца по курантам
известно, что игра предусматривает нанесение дамага по отдельным частям тела, но при этом резист рассчитывается как сумма показателей брони и шлема
Известно не это. Известно, что точками приложения урона являются части тела - при этом урон наносится всему мобу целиком, а точка приложения определяет множитель урона и вторичное свойство, которое будет попутно повреждено. Резист всего моба целиком рассчитывается как суммарная защита всего, что экипировано на мобе (очки великолепно защищают не только затылок, но и колени), и всех магических эффектов, действующих на моба.
Теоретически возможно при помощи скриптов переделать к чертям модель повреждений игры, но практического смысла такое иметь не будет - производительность скриптов неприемлемо низка для этой задачи.
Всем привет,подскажите пожалуйста как скриптовой командой прибавлять глобальные переменные???Например GlobalA=0 нужно прибавить 1 чтобы стало GlobalA=1
Добавлено (16 Декабря 2014, 19:33) --------------------------------------------- У меня почему-то в место значения 1 выдает значение 47 в чем причина может быть?
Изменение репутации для пользователя Quazar
QuazarOffline
Сообщение №1333
написано: 16 декабря 2014, 17:43
| Отредактировано: QuazarX - 16 декабря 2014, 17:49
Ещё вопрос назрел.Ситуация такая 1-Создал 28 разных НПС на одной Template базе (Чтобы не как клоны были) 2-Поместил их в в Var фаил (по примеру VarWastelander) 3-Сделал, что бы НПС появлялись рядом с Хмаркером StartMarker командой StartMarker.placeatme VarWastelander 1.4-Сделал квест-диалог,прописал в условиях диалога всех 28 НПС.И тут вопрос возникает,всё работает нормально, но вот НПС не реагируют на диалог (Он у них вообще не появляется)В чем может быть проблема???(на карте НПС не проставлены)
Это я к тому, что хреновый из меня телепат (да и из всех остальных, кто захочет тебе помочь) Я вот ПОСМОТРЕЛА твой профиль и из него узнала, что зовут тебя Андрей, тебе 25 лет и ты из Барнаула. Улавливаешь мысль?
ncrrainjer, я про то, что было бы неплохо УВИДЕТЬ квест и его скрипт и как диалоги расписаны... Скриншоты, чтоль или как-то еще. А не гадать вслепую - почему диалоги не появляются.
Так, затея с эксперементом с Var файлом провалилась,теперь подскажите пожалуйста,вот есть 28 разных персонажей,как сделать появление в одном месте случайного персонажа из этих 28(а не одного и того же)
Изменение репутации для пользователя КсюXa
КсюXaOffline
Сообщение №1346
написано: 18 декабря 2014, 18:06
| Отредактировано: КсюXa - 18 декабря 2014, 19:01
ncrrainjer, ты уже спрашивал однажды, почему неписи молчат. И целая страница была посвящена ответам.
Цитата ncrrainjer
как сделать появление в одном месте случайного персонажа из этих 28(а не одного и того же)
вообще-то общепринято делать так: создаются несколько базовых неписей с нужными характеристиками, с нужной экипировкой и т.д. Эти неписи НЕ размещаются в локации. Затем создается уровневый список LeveledCharacter (тот самый Var-файл). А вот уже в этот список перетаскиваются или выбираются в поле внутри эти самые новые персонажи. Список сохраняется. Затем создается ЕЩЕ один новый непись, у которого в качестве ШАБЛОНА выбирается как раз этот самый уровневый список и отмечаются нужные галочки, что использовать от неписей из этого списка: - пакеты, инвентарь, скрипты и т.д. Этот последний непись сохраняется. И именно этот базовый непись выставляется в локации и участвует в скриптах (или его реф-копия с локации). В редакторе он выглядит, как объемная буква "М" со стрелочкой. Цвет этой буковки на локации зависит от того, какой уровень назначен её реф-копии: белый - по-умолчанию, зеленый - простой, желтый - средний и так далее. Поэтому, если хочешь, чтобы помогли разобраться с проблемой - скриншоты в студию. Скриншоты базовых неписей первого уровня (которые добавлялись в Var-файл) с видимыми вкладками трейтов, статсов, фракций и пакетов, скриншот самого списка, чтоб посмотреть, какие галочки отмечены и скриншот "оконечного" непися, которому этот список назначен в качестве шаблона. Желательно еще скриншот первой вкладки квеста и скриншот какого-либо топика из этого квеста. Уф... А проще дать через ЛС кому-нибудь просто файл-еспешник с модом для разбора...
КсюXa, В общем все понятно, спасибо за развернутый ответ.
Добавлено (19 Декабря 2014, 19:22) --------------------------------------------- Попробовал,теперь всё работает,только еще один маленький вопросик.У нас есть один НПС на основе LeveledCharacter,на этом НПС висит диалог с командами стой там иди за мной.Вопрос в том,можно ли как-то сделать,что бы если я прописываю 10 НПС они не все шли за мной,а только тот НПС кому я даю команду?
КсюXa, Сделал,все как вы и описали.Создал НПС на основе LeveledCharacter.Его через команду в терминале TestXmarker.placeatme NPSTest 1 добавляю в нужное место (Всё работает отлично,и диалоги тоже) лимита на НПС нет.
можно ли как-то сделать, что бы если я прописываю 10 НПС они не все шли за мной, а только тот НПС кому я даю команду?
Разрешается, причём разными способами. Например, скрипт соответствующей реплики диалога навешивает на собеседника какой-то маркер (суёт ему в карман невидимый предмет, нацепляет на него Actor Effect и т.п. - прояви фантазию), а назначенный всем этим неписям пакет проверяет наличие маркера. У кого есть маркер - тот идёт за боссом, у кого нет маркера - пакет не активируется.