Перейти к содержанию

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


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

Прошу объяснить как в скрипте организовать понижение здоровья при укусе вампира? Меня интерисует именно каким образом сделать скрипт так что б действия выполнялись над жертвой. Как именно эту жертву определить? Или скажите какой из оригинальных игровых скриптов выдает сообщение о выборе, укусить жертву или говорить с ней? Я искал, не нашел. Я имею в виду квестовый скрипт где требуется именно конкретный ID жертвы. Изменено пользователем Shinoby
Ссылка на комментарий
Поделиться на другие сайты

Смотря кому организовать. Большая часть вампиризма вмонтирована в движок так что вряд ли что оттуда получишь. Тот вопрос при кормежке не скрипт а прямо в движке игры, в сетингах разве что можно изменить sVampireFeed и sVampireFeedQuestion, но от этого только строка вопроса при кормежке изменится.

 

Если повесить на самого непися скрипт, проверяющий, спит ли этот непись, активирует ли его игрок и меняется ли за это время значение player.HasVampireFed то можно уменьшить здоровье непися, но только того на котором этот скрипт. Тут по моему даже ОБСЕ не поможет, не помню функций которые выдают референс последнего непися которого активировал игрок. Я даже не уверен, считается ли кормежка активацией.

Ссылка на комментарий
Поделиться на другие сайты

Пытался делать через референсе, как в других скриптах из других модов, но пишет, что в квестовых скриптах неопределенного ID не долно быть и не сохраняет. В общем дурная затея.
Ссылка на комментарий
Поделиться на другие сайты

Меня внезапно проперло! ( Да, товарищи, со мной такое бывает. ) Следи со скрипта за функцией HasVampireFed на игроке, и когда она изменяется кастуй под игроком на зону в 10-15 ярдов невидимое скриптованное заклинание. Если в этом радиусе будут неписи то оно на всех них сядет и сделает свое черное дело. Вот только если игрок кормится в каком-нибудь бараке то будут проблемы с различением с кого же он именно покормился, но это я думаю решаемо дополнительными условиями типа кто из них ближе к игроку, на кого игрок смотрит и.т.д. Но референсы неписей в нном радиусе от кого либо я уже таким образом получал, просто забыл, полгода назад писал подобный скрипт. Изменено пользователем Мастер Ёда
Ссылка на комментарий
Поделиться на другие сайты

Я делал скрипт на кричуре, который при его смерти не от руки игрока определял кто его убил и добавлял этому объекту в инвентарь ингредиент, ибо в блоке OnDeath функция GetActionRef не работала ( хз, может у меня глюки какие, но не работала ). Скрипт работает и выглядит абсолютно естественно в игре ( хм... если можно вообще назвать естественными мои творения ).

 

В общем - если будешь делать по этому методу то займет у тебя пару деньков, не больше. Это только поначалу кажется трудным.

Ссылка на комментарий
Поделиться на другие сайты

Дело в том, что не понимаю принцыпов некоторых еще, например вообще не могу понять, как определить обьект и сделать над ним действие не зная его ID. И в реферах еще не разобрался. И как кастовать заклинание на площадь? Сделать его "На цель" и под себя кастануть? А анимации игратся будут? Я сам еще не все учебники до конца прочитал. Начну это все, когда все дочитаю и освою.
Ссылка на комментарий
Поделиться на другие сайты

Дело в том, что не понимаю принцыпов некоторых еще, например вообще не могу понять, как определить обьект и сделать над ним действие не зная его ID. И в реферах еще не разобрался. И как кастовать заклинание на площадь? Сделать его "На цель" и под себя кастануть? А анимации игратся будут? Я сам еще не все учебники до конца прочитал. Начну это все, когда все дочитаю и освою.

 

Выбрось учебники, трата времени что либо на теории учить. Особенно с таким глюкомясом как движок Обливы. В руки тебе Вики как памятку со списком функций и го в игру тестировать.

 

Функций которые определяют объект в оригинальной Обливе мало. Основные - GetSelf и GetActionRef. Сама суть операций с объектами - существование референсных переменных ref, которые можно использовать вместо идентификатора объекта.

 

ref refVar

 

set refVar to Getself или set refVar to GetActionRef

refVar.Disable

 

Пока известен ID с которым ты работаешь то можно обходиться и без них. Но вот когда спелл или вещь в инвентаре должна что то сделать с хозяином вещи/целью спелла то уже пора их использовать. То же самое с некоторыми видами ловушек.

 

Сам принцип о котором я говорю - то что спелл попавший на непися может получить референс непися на котором он находится и сообщить его квестовому скрипту.

 

ref refVar

 

set refVar to Getself

 

if ( "MyQuest".refVar01 == 0 )

set "MyQuest".refVar01 to refVar

elseif( "MyQuest".refVar02 == 0 )

 

....

 

Количество запасаемых референсов в квестовом скрипте зависит от паранойи автора. Квестовый скрипт считается как глобальный.

 

Насчет каста спелла - кастуется он не игроком а дизэйбленным активатором, перемещенным под игрока.

 

"MyCaster".Disable

"MyCaster".moveto player 0 0 0

"MyCaster".cast "MyScriptSpell" player

 

Чтобы найти всех неписей в определенном радиусе от игрока - спелл "На цель" с подобающим радиусом поражения. В качестве Visuals Effect выбрать NONE.

Ссылка на комментарий
Поделиться на другие сайты

Большое спасибо за помощь. Попробуем сделать такое.

Сам принцип о котором я говорю - то что спелл попавший на непися может получить референс непися на котором он находится и сообщить его квестовому скрипту.

То есть что б передать информацию из одного скрипта в другой, глобальных переменных объявлять не надо??? И еще, что б кевстовый скрипт работал как глобальный, нужно ли его запихивать в пустой новый квест или он и так исполнятся будет? Нужно ли активатор в мир помещать?

В общем с этим разберусь со временем. С опытом прийдет. Осталась проблема определить именно того одного непися.

Изменено пользователем Shinoby
Ссылка на комментарий
Поделиться на другие сайты

То есть что б передать информацию из одного скрипта в другой, глобальных переменных объявлять не надо??? И еще, что б кевстовый скрипт работал как глобальный, нужно ли его запихивать в пустой новый квест или он и так исполнятся будет? Нужно ли активатор в мир помещать?

В общем с этим разберусь со временем. С опытом прийдет. Осталась проблема определить именно того одного непися.

 

Глобальные переменные - это больше пережиток прошлого чем реально использующийся ресурс, ибо любую переменную с любого объекта на котором висит скрипт можно получить просто задав "РеференсОбъекта"."переменная"

 

set "MyQuest".refVar01 to refVar

 

MyQuest - ИД квеста на котором висит скрипт, а не самого скрипта. Логично что скрипт надо повесить на пустой квест чтобы он вообще работал и к нему можно было обращаться. То же самое с активатором. Как его найдет скрипт если такого референса не существует в игре? Объект, его референс и скрипт что на нем висит это как бы три разные вещи, не надо путать теплое с мягким.

Изменено пользователем Мастер Ёда
Ссылка на комментарий
Поделиться на другие сайты

Заклинание кастуется только один раз и все. На вики написано, что HasVampireFed первый раз возвращает 1, если ел, а последующие разы - 0. Потому, видимо и один раз заклинание кастуется. Прийдется засунуть это в вампирический скрипт.

 

Засунул в вампирский скрипт, но спелл передает мой референс и здоровье у меня отбирается.

Изменено пользователем Shinoby
Ссылка на комментарий
Поделиться на другие сайты

Заклинание кастуется только один раз и все. На вики написано, что HasVampireFed первый раз возвращает 1, если ел, а последующие разы - 0. Потому, видимо и один раз заклинание кастуется. Прийдется засунуть это в вампирический скрипт.

 

Засунул в вампирский скрипт, но спелл передает мой референс и здоровье у меня отбирается.

 

HasVampireFed Выдает единицу когда игрок покормился и скидывается в 0 вызовом функции. Все правильно, тогда спелл и надо кастануть. Чтобы у игрока не уменьшало надо просто сделать проверку что это не игрок, потому что игрок естественно ближе всех к себе самому, player.GetDistance player == 0

Ссылка на комментарий
Поделиться на другие сайты

Я просто вставил проверку на сон и игрока трогать перестало. Действия все засунул в вампирический оригинальный скрипт. Теперь комманда kill убивает жертву, а не меня. Вот только всех спящих рядом каджитов убивает. Может попытатся через GetDistance записывать расстояние в переменные и сравнивать их, кто ближе, но иногда выходит так, что стою на одном каджите почти, пью кровь другого, который чуть дальше, но умирет вить, тот, на ком стою.

 

В принцыпе кроме каджитов из мода "Опасные улицы", в игре никто так близко не спит.

 

И еще, почему комманда kill срабатывает не с 1-го раза, а после второго кормления? Не могу понять.

Изменено пользователем Shinoby
Ссылка на комментарий
Поделиться на другие сайты

Я просто вставил проверку на сон и игрока трогать перестало. Действия все засунул в вампирический оригинальный скрипт. Теперь комманда kill убивает жертву, а не меня. Вот только всех спящих рядом каджитов убивает. Может попытатся через GetDistance записывать расстояние в переменные и сравнивать их, кто ближе, но иногда выходит так, что стою на одном каджите почти, пью кровь другого, который чуть дальше, но умирет вить, тот, на ком стою.

 

В принцыпе кроме каджитов из мода "Опасные улицы", в игре никто так близко не спит.

 

И еще, почему комманда kill срабатывает не с 1-го раза, а после второго кормления? Не могу понять.

 

Почему не с 1 раза работает ищи в скрипте, что у тебя там я хз. По сути можно еще использовать для проверки GetLOS... но оно тоже может случайно зацепить лежащего под игроком Хаджита. В любом случае - подобные случаи редкие довольно... вампиры ведь тоже могут и промахнуться.... Укусил, да не того. Подумаешь. С голоду и не такое случается.

 

Еще в ОБСЕ есть функция GetCrosshairRef, но она не очень хорошо себя ведет вроде. Можешь попробовать с ней, там даже и спелла не надо если извернуться.

Изменено пользователем Мастер Ёда
Ссылка на комментарий
Поделиться на другие сайты

А как на счет IsActionRef? Что она возвращает? Случайно ли, но то, был ли обьект активирован игроком?

 

Попробовал GetLos, что б зацепило того каджита, это еще извратится надо, но бывает. Тем не менее случайность так зацепить хаджита сильно уменьшилась. Да и что б не убить неписей с 1 хп как Руфио, пусть срабатывает со 2-го раза.

Пожалуй так и оставлю. Спасибо ОГРОМНОЕ за помощь.

 

GetCrosshairRef? А вот это просто супер вариант! Вернусь домой, попробую.

 

 

В любом случае - подобные случаи редкие довольно... вампиры ведь тоже могут и промахнуться.... Укусил, да не того. Подумаешь. С голоду и не такое случается.

Подошел вампир, склонился над жертвой и тут в момент кульминации событий отпрыгнул на метр и куснул не того.

Мне это напоминает самоубийство одного из украинских министров. Давно было. 2 выстрела в голову в весок и в затылок на вылет. Самоубийство :megalol: Стрельнул раз себе в затылок, мозги через глаз вылетели, и тут он пораскинул мозгами и решил для верности себе еще раз в голову стрельнуть, в висок.

 

 

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

Ну и счетчик убийств и нападений тоже желательно повысить, но это уже не так важно.

Изменено пользователем Shinoby
Ссылка на комментарий
Поделиться на другие сайты

А как на счет IsActionRef? Что она возвращает? Случайно ли, но то, был ли обьект активирован игроком?

...

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

Ну и счетчик убийств и нападений тоже желательно повысить, но это уже не так важно.

 

 

IsActionRef работает только в блоках OnActivate и OnTrigger. Возвращает референс который активировал данный объект или соприкоснулся с ним.

 

ИД квеста ТБ не знаю... Но там должна использоваться проверка IsPCAMurderer, почитай про эту функцию, подумай как сделать так чтобы она возвратила значение больше 0. Возможно, поможет тупое увеличение счетчика убийств игрока.

Ссылка на комментарий
Поделиться на другие сайты

Что за бред выходит. Я прописал комманды "ModPCMiscStat 32 1" и "ModPCMiscStat 6 1" для обновления статистики, а оно вместо 1, как в команде сначала пишет 17, потом 21 по обоим парамерам. выглядит так вот

if ( player.IsActorDetected == 1 ) && ( refVar01.GetActorValue health <= 0 )
player.ModCrimeGold 1000
player.ModPCMIscStat 6 1
player.ModPCMIscStat 32 1
endif
if  refVar01.GetActorValue health <= 0 
player.ModPCMIscStat 6 1
player.ModPCMIscStat 32 1
endif

 

Везде 1, а оно отфонаря прибавляет от 10 до 30! Причем даже если жертва не умерла! && этовить "И", а не "ИЛИ". Или я совсем тупой?

Изменено пользователем Shinoby
Ссылка на комментарий
Поделиться на другие сайты

Везде 1, а оно отфонаря прибавляет от 10 до 30! Причем даже если жертва не умерла! && этовить "И", а не "ИЛИ". Или я совсем тупой?

 

А ты уверен что оно только один раз добавляет? А то скрипт то в каждом фрейме работает, и ограничений по количеству добавлений я не вижу. Чтобы проверять умерла ли надо проверять не здоровьем а функцией GetDead.

Ссылка на комментарий
Поделиться на другие сайты

  • 8 месяцев спустя...

Как заставить стражу гонятся за собой через скрипт?

 

Попробуй добавить игрока во враждебную для стражи фракцию.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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