Перейти к содержимому


Фотография
* * * * - 12 Голосов

Вопросы по плагиностроению

как создать торговца oblivion cs торговец cs как создать торговца oblivion моделирование

  • Авторизуйтесь для ответа в теме

#3421 Ссылка на это сообщение X-command

X-command
  • Следопыт
  • 70 сообщений

Отправлено

Здесь задавать вопросы по плагиностроению для Обливиона.

Тема по Обливиону. Тема по Морровинду тут.


<a href="http://profile.xfire.../xcommand"><img src="http://miniprofile.x...2/xcommand.png" border="0" class="linked-sig-image" /></a>
Сила - способность улыбаться © Белльмере-сан "One Piece"<img src="http://www.kolobok.u...zer/pirate.gif" border="0" class="linked-sig-image" />


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3724

#3422 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

Ну, вообще, я уже сделал отдельный esp, в котором есть сканер, который чекает всех актеров в радиусе 2048 юнитов и если непись - стражник, меняет его уровень на любой в интервале с 30 по 35-й. Просто у меня SetLevel выбивает игру почему-то.
А так - да, по сути, это является решением Вашей проблемы.

:good:  Попробую понадеяться, что, возможно, дорасту когда-нибудь до того, чтобы самому такие "сканеры" делать.
Как бы там ни было - спасибо! Хоть что-то (вроде как) удалось!
Не желаете еще заморочку?
Насколько сложно реализовать в игре уязвимость/сопротивление определенному типу оружия?
Пример: скелет: должен иметь сопротивление колющему урону (стрелы) и уязвимость к дробящему.



#3423 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

Как бы там ни было - спасибо! Хоть что-то (вроде как) удалось!

В общем, я родил данный плагин, можете разобрать его и проверить работу. Принцип очень прост, я его уже выше описывал. В спеллах найдите заклинание сканера и гляньте скрипт, все должно быть понятно.
Просто я не могу его толком проверить, почему-то игра вылетает при использовании команды SetLevel. Кстати, работает оно с OBSE, если что. Без него не будет.

Прикрепленные файлы


Ничто не истинно, все потрачено

#3424 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

Насколько сложно реализовать в игре уязвимость/сопротивление определенному типу оружия?

Не слишком сложно, но придется помуздыкаться. Поможет в этом Event-Handler типа "OnHealthDamage", который будет фиксировать урон до того, как тот будет применен на актера. Крутая штука, но в ней есть некоторые тонкости - придется подумать над условиями его срабатывания, к примеру: проверка на текущую анимацию атакующего, наличие оружие в руке и его тип. Ну, в целом, реализовать можно.


Ничто не истинно, все потрачено

#3425 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

Не слишком сложно, но придется помуздыкаться. Поможет в этом Event-Handler типа "OnHealthDamage", который будет фиксировать урон до того, как тот будет применен на актера. Крутая штука, но в ней есть некоторые тонкости - придется подумать над условиями его срабатывания, к примеру: проверка на текущую анимацию атакующего, наличие оружие в руке и его тип. Ну, в целом, реализовать можно.

За плагин - еще больше спасибо! Просидел вчера много времени, отловил с десяток стражников, переписал им уровни... Комсомол подкрался, откуда не ждали!

Теперь один стражник нормально может замахать 5-6 пум (если их не больше 2, конечно), 2 или даже 3 сприганнов. НО! После этих 5 пум у него вся броня в труху. И здоровья, понятное дело, чуть.
И если со здоровьем можно что-то придумать даже с моим знаниями (была идея накинуть на них что-то типа регенерации ужасных зомби), то вот что делать с броней...
Снова придется читать Интернеты, много думать...

А со скелетами... В процессе чтения нашел презабавнейшую функцию: OnHitWith. Не знаю, как с дробящим, но со стрелами - милое дело: OnHitWith Arrow1Iron - урон "железной" стрелой.
Конечно, остаются еще всяческие стрелы с зачарованиями...
Так вот: получается, поймать, что по скелету попали стрелой - нефиг делать. Но вот как уменьшить величину урона? В процентах от того, который нанесен?
Придется разбираться, что за "OnHealthDamage" такое.



#3426 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

то вот что делать с броней...

А надо ли оно Вам? Они все равно каждые 3 дня респавнятся, смысл городить скрипты еще и для каждой копии, размещенной в мир? Умер и умер, естественный отбор.

 

Так вот: получается, поймать, что по скелету попали стрелой - нефиг делать. Но вот как уменьшить величину урона? В процентах от того, который нанесен?

OnHealthDamage возвращает 3 параметра: атакующего, получившего урон и величину урона. Я же написал, что этот хандлер возвращает все это ДО ТОГО, как урон будет применен на актера.
P.S Мне лень мудрить с математическими действиями, я знаю, что тут можно чуть иначе посчитать.

Let fDamage := Abs fDamage - получаем абсолютную величину урона;
rTarget.ModAV2 Health fDamage - предотвращаем таким образом получение первоначального урона;
Let fDamage := (fDamage\100)*-5 - делим урон на 100%, получая вещественную величину в одном проценте и умножаем на 5, получая тем самым 5% от той величины, которая должна была быть нанесена.
rTarget.ModAV2 Health fDamage - наносим актеру урон, который рассчитали в прошлой строке. Величина уже отрицательная и именно отнимет ХП, поскольку было умножено на "-5", а не на "5".

Ничто не истинно, все потрачено

#3427 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

 

А надо ли оно Вам? Они все равно каждые 3 дня респавнятся, смысл городить скрипты еще и для каждой копии, размещенной в мир? Умер и умер, естественный отбор.

Они как-то странно респавнятся. Глюк, наверно, но в моей игре, скажем, возле руин Гарлас-Агея уже дней 50 торчит стражник. Рядом - труп его лошади.Там Врата появляются. Мой перс мимо пробегал, как раз, когда этот стражник махался там со стражей Врат. На пару монстров завалили, Врата закрыл, стражника вылечил. Теперь он там так и стоит.
Проблема с амуницией решилась маленьким модом, позволяющим обмениваться вещами с NPC. Забрал у него шмот, починил (чуток прокачал Оружейника), отдал обратно.


Сообщение отредактировал jpsmith: 07 мая 2022 - 10:28


#3428 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

Теперь он там так и стоит.

Мб он вообще квестовый какой-то, там есть и уникальные стражи, для конкретных целей.


Ничто не истинно, все потрачено

#3429 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

OnHealthDamage возвращает 3 параметра: атакующего, получившего урон и величину урона. Я же написал, что этот хандлер возвращает все это ДО ТОГО, как урон будет применен на актера.

Придется все равно спрашивать: своими силами не получается.
Как собрать в одном скрипте OnHitWith и OnHealthDamage?



#3430 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

Придется все равно спрашивать: своими силами не получается.
Как собрать в одном скрипте OnHitWith и OnHealthDamage?

Никак. Это два разных обработчика. И к тому же, OnHitWith криво работает, как хандлер. Не возвращает атакующего)


Ничто не истинно, все потрачено

#3431 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

Никак. Это два разных обработчика. И к тому же, OnHitWith криво работает, как хандлер. Не возвращает атакующего)

Как я понимаю, даже если я переберусь через баррикаду OnHitWith, запросто окажется, что что он, воспринимая в качестве аргумента Arrow1Iron, от всяких там Arrow1Steel или Arrow1Ebony откажется напрочь.
Так что, пожалуй, я согласен не упорствовать и отказаться от него. Но пока он весьма удобен для определения того, каким оружием нанесен урон.
Если не OnHitWith, то как узнать, каким типом оружия прилетело этому скелету?
И про OnHealthDamage - все равно вопрос остается. Как эта штука работает в скрипте? Пример можно?


Сообщение отредактировал jpsmith: 07 мая 2022 - 21:02


#3432 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

jpsmith, OnHitWith - вещь, в принципе. Вроде как в новых версиях OBSE его поправили, но я не проверял.
На счет OnHealthDamage... чессказать, я тоже пока не имею мыслей, как отфильтровать урон непосредственно от стрел, с уроном от дробящего оружия все +\- понятно.

 

И про OnHealthDamage - все равно вопрос остается. Как эта штука работает в скрипте? Пример можно?

Ну, сперва нужно написать саму функцию, которая и будет что-то у нас делать в этом типе хандлера:

scn TestDamageFunction

Float fDamage
​Ref rAttacker
Ref rTarget

Begin Function {fDamage, rAttacker}
;Определяем цель, по которой приходит урон
Let rTarget := GetSelf

;Ограничиваем срабатывание хандлера в случае несоответствия некоторых условий (их всегда можно дописать при необходимости)
if (IsFormValid rTarget == 0) || (IsFormValid rAttacker== 0) || (fDamage <= 0)
    Return
Endif

;Получаем абсолютную величину урона
Let fDamage := Abs fDamage

PrintToConsole "Актер *%n* был атакован актером *%n* и получил *%g* ед. урона!" rTarget rAttacker fDamage 
Return
End

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

Begin GameMode
if (GetGameLoaded) || (GetGameRestarted)
   SetEventHandler "OnHealthDamage" TestDamageFunction
   Return
Endif
End

В принципе, это все. Имею ввиду, что хандлер зарегистрирован и должен выплевывать в консоль текст, который мы писали, используя функцию PrintToConsole. Теперь уже нужно правильно писать саму функцию)


Ничто не истинно, все потрачено

#3433 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

jpsmith, OnHitWith - вещь, в принципе. Вроде как в новых версиях OBSE его поправили, но я не проверял.
На счет OnHealthDamage... чессказать, я тоже пока не имею мыслей, как отфильтровать урон непосредственно от стрел, с уроном от дробящего оружия все +\- понятно.

...

В принципе, это все. Имею ввиду, что хандлер зарегистрирован и должен выплевывать в консоль текст, который мы писали, используя функцию PrintToConsole. Теперь уже нужно правильно писать саму функцию)

Все-таки SetEventHandler!
OnHithWith и OnHealthDamage прописаны в одной таблице. Но: OnHithWith работает без всякого SetEventHandler, а если примерно так же состряпать конструкцию с OnHealthDamage - конструктор ругается!
Тогда снова: их не собрать в одном скрипте. Но, может, можно в одном скрипте настроить два хэндлера (последовательно, через И/ИЛИ, еще как-то)?
Как здесь, например:

scn SomeQuestScript

begin gamemode
  if getGameRestarted
   SetEventHandler "OnHit" FnOnHitByPlayer object::PlayerRef
   SetEventHandler "OnMagicEffectHit" FnOnPlayerRestoreHealth ref::PlayerRef object::"REHE"
   SetEventHandler "LoadGame" FnOnLoadGame
  endif
end
?
 

Или тут все равно будет только один срабатывать?



#3434 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

OnHithWith и OnHealthDamage прописаны в одной таблице. Но: OnHithWith работает без всякого SetEventHandler, а если примерно так же состряпать конструкцию с OnHealthDamage - конструктор ругается!

OnHitWith, как и OnHit - ванильные блоки из игры, посему их хавает компилятор без проблем, если Вы вешаете скрипт с этим блоком на актера. А OnHealthDamage - уже новый блок, который работает ИСКЛЮЧИТЕЛЬНО как хандлер и никак иначе. Посему компилятор плюется ошибками при попытке впихнуть невпихуемое.

 

Тогда снова: их не собрать в одном скрипте. Но, может, можно в одном скрипте настроить два хэндлера

Да, в одной функции их не собрать, но в игру можно запускать хоть сразу 100 хандлеров, втч. и одного типа, но чтобы у них были разные исполняемые функции. Проблема в том, что от 100 таких обработчиков игре стремительно поплохеет, но от парочки наших - вряд ли. Просто я не хотел бы плодить лишние хандлеры там, где можно обойтись без них. Но тут, похоже, не тот случай...
Похоже, чтобы ловить удары оружием, все же придется вводить еще один хандлер OnHitWith, в нем уже выдавать цели токен, который будет находится в сумке у НПС порядка 3-5 кадров, затем удаляться автоматически. По идеи, за этот момент, пока токен у НПС, OnHealthDamage должен будет успеть среагировать на наличие отметки у НПС и выполнить все необходимые рассчеты. Ну, в теории, оно, вроде бы как, должно и работать.
Осталось только решить - как мы будем определять нежить и конкретные их типы?) Вариантов тут тоже несколько)


Ничто не истинно, все потрачено

#3435 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

Осталось только решить - как мы будем определять нежить и конкретные их типы?) Вариантов тут тоже несколько)

Тем и хорош понравился OnHitWith, что его можно прямо на скелета навесить! Без всяких изысков: OnHitWith Arrow1Iron - моб атакован стрелой! Красота в простоте!
Точно не вариант его использовать?

Вопрос "как будем определять", я так понимаю, риторический? Я пока, как чувак в той книжке: из словарного запаса в 25000 слов знал только 5, означающих простейшие человеческие потребности: жрать, спать, ср... и пр.
У скелетов, скажем, есть абилка (или что-то в таком духе), которая называется вроде бы "Защита костей". Не подойдет в качестве критерия?
Собственно, чуть ли не вся нежить вроде бы имеет что-то в таком духе.

В порядке бреда: в качестве основы этой абилки может выступать скриптовый эффект. Нельзя ли таким образом втолкать обработку OnHealthDamage и OnHitWith?

p.s. Попробовал повесить скрипт с конструкцией

begin OnHitWith Arrow2Steel && OnHealthDamage {fDamage, rTarget}

  PrintToConsole "OriginalDamage %g" fDamage

end
Сообщение в консоли появляется! Именно, если стальной стрелой нанес урон.


Сообщение отредактировал jpsmith: 08 мая 2022 - 05:17


#3436 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

Точно не вариант его использовать?

Я же сказал, что придется использовать 2 хандлера - этот и OnHealthDamage.

 

У скелетов, скажем, есть абилка (или что-то в таком духе), которая называется вроде бы "Защита костей".

Вот я тоже о ней подумал. Можно проверять по имени актера, а можно и по пути меша.

 

В порядке бреда: в качестве основы этой абилки может выступать скриптовый эффект.

Действительно бред, поскольку запускать хандлеры и вешать подобного рода блоки в скриптовый эффект - онанизм планетарного уровня. Игра ловит клин после таких приколов и скрипт-профайлер вообще виснет наглухо, переставая выполнять какие-либо скрипты.

 

begin OnHitWith Arrow2Steel && OnHealthDamage {fDamage, rTarget}

  PrintToConsole "OriginalDamage %g" fDamage

end

Я, считай, за 10+ лет практики, многие извращения видел в скриптинге, но такое... впервые)
Не мудрите и просто дайте мне время, я подумаю и попробую сделать отдельный esp-файл, как в прошлый раз.


Ничто не истинно, все потрачено

#3437 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

Не мудрите и просто дайте мне время, я подумаю и попробую сделать отдельный esp-файл, как в прошлый раз.

Странный сайт. Непривычный. Обычно задаешь вопрос - получаешь в ответ "Е... ты дебил!", "Учи матчасть!", в лучшем случае - ссылки на какой-нибудь FAQ или ту самую матчасть.
Прям социализм какой-то!



#3438 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

ссылки на какой-нибудь FAQ или ту самую матчасть

Заданный Вами вопрос достаточно интересный, да и к тому же, я сам хотел сделать подобную систему для себя. Тут теперь есть мотивация, почему бы и нет?
Зачастую лучше самому все сделать и объяснить на готовом, чем пытаться донести тупо словами.
Раз уж мы тут задумали такой мод, то мне нужные точные данные... на сколько уязвимы будут скелеты к дробящему оружию, а также на сколько резистивны к стрелам. Все вот в этом духе) Концепт ясен, но ТЗ нет)


Ничто не истинно, все потрачено

#3439 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

Заданный Вами вопрос достаточно интересный, да и к тому же, я сам хотел сделать подобную систему для себя. Тут теперь есть мотивация, почему бы и нет?
Зачастую лучше самому все сделать и объяснить на готовом, чем пытаться донести тупо словами.
Раз уж мы тут задумали такой мод, то мне нужные точные данные... на сколько уязвимы будут скелеты к дробящему оружию, а также на сколько резистивны к стрелам. Все вот в этом духе) Концепт ясен, но ТЗ нет)

Чтоб меня! В кои то веки - человек с похожими интересами (прямо как тот, с Reddit-a 2011 года).
Идеи были такие: вначале казалось, что можно вбахать прямо-таки 50% сопротивления колющему урону. Потом несколько поумерил аппетиты, вспомнив, что, во-первых, скелеты бывают разные, и валить "чемпиона" с его 350 НР и так непросто, во-вторых, по идее, лич - тоже вариация скелета...
Так что, думаю, разумным было бы 30, максимум 40 процентов сопротивления. И примерно столько же - уязвимости к дробящему урону (какой-никакой, а стимул прокачать такой тип оружия).
В идеале можно было бы забабахать .ini файлик, в котором прописать нужные величины, ориентируясь, к примеру, на уже существующую сложность игры.


Сообщение отредактировал jpsmith: 08 мая 2022 - 22:24


#3440 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 912 сообщений
  •    

Отправлено

(прямо как тот, с Reddit-a 2011 года)

Жаль, что когда я начал только осваивать все это ремесло, у меня не было кого-то вроде себя нынешнего :D

 

В идеале можно было бы забабахать .ini файлик

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

Прикрепленные файлы


Ничто не истинно, все потрачено

#3441 Ссылка на это сообщение jpsmith

jpsmith
  • Скиталец
  • 35 сообщений
  •  

Отправлено

Позволю себе еще один вопрос, хотя, подозреваю, что затея неосуществима.

Была такая идея: игрок получает сообщение каждый раз, когда в Сиродиле открываются новые Врата (в период прохождения главного квеста). Типа, местное население, обнаружив такой сюрприз, sms-ит "Защитнику": "Приди и спаси нас!"
Согласно найденной в Интернете информации, после закрытия одних Врат новые появляются не сразу, а после того, как игрок посещает игровую ячейку, в которой эти Врата могут появиться. С каким-то шансом.
Человек писал, что можно состряпать мод, который сделает появление Врат со стопроцентной вероятностью в определенной ячейке. Не мой вариант.
Пытался проверить: закрыл Врата возле Бравила. Побежал (без фаст-трэвела) к Лейавину. Три раза пробовал. Все три раза возле Лейавина оказывались открытыми трое Врат, в одних и тех же местах.
Так как это работает? Возможно ли реализовать идею? И если да, то как?







Темы с аналогичным тегами как создать торговца, oblivion cs торговец, cs как создать торговца, oblivion, моделирование

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых