Gem of the North


Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению ) -ОтветитьНовая темаГолосование-

> ActionCastSpellAtObject, Каст спелла определенного уровня
zergirl
Отправлено: Dec 22 2004, 06:29 AM
|Цитировать


Group Icon



Господа, помогите пожалуйста с проблемой.

Функция ActionCastSpellAtObject () имеет параметр nDomainLevel, который указывает CasterLevel спелла. Однако из внешних источников я узнала, что эта функция имеет такой баг, что данный параметр не учитывается при выполнении, а берется равным нулю.

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


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
FenrIX_666
Отправлено: Dec 22 2004, 02:36 PM
|Цитировать


Group Icon



CODE

// This action casts a spell at oTarget.
// - nSpell: SPELL_*
// - oTarget: Target for the spell
// - nMetamagic: METAMAGIC_*
// - bCheat: If this is TRUE, then the executor of the action doesn't have to be
//   able to cast the spell.
// - nDomainLevel: TBD - SS
// - nProjectilePathType: PROJECTILE_PATH_TYPE_*
// - bInstantSpell: If this is TRUE, the spell is cast immediately. This allows
//   the end-user to simulate a high-level magic-user having lots of advance
//   warning of impending trouble
void ActionCastSpellAtObject(int nSpell, object oTarget, int nMetaMagic=METAMAGIC_ANY, int bCheat=FALSE, int nDomainLevel=0, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT, int bInstantSpell=FALSE)


собственно он по дефолту 0. Да и и в большинстве случаев вообще не учитывается (если вообще не во всех).
Данынй параметр просто показывает в каком кругу доменных слотов данный спелл будет запомнен. Т.к. в НВНе нет четкого рзграничения где доменный, а где нет спелл, то и параметр не обязательный вооюще.

Смело используй данную функцию.


--------------------
Улыбайтесь, это всех раздражает ;)
| PM| Email Poster| ICQ| AOL| MSN|
Вверх Вниз
zergirl
Отправлено: Dec 22 2004, 02:57 PM
|Цитировать


Group Icon



Ммммм, тогда я вообще запуталась )
А как тогда наложить спелл с определенным Caster Level? Хочу просто проверить, как работает Holy Avenger. Хотя если кто знает точную формулу его работы, можно про спеллы и не отвечать тогда )


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
FenrIX_666
Отправлено: Dec 22 2004, 03:36 PM
|Цитировать


Group Icon



ээ... у плейсебла никак. А у моба в тулсете подогнать уровень кастера под интерсующий.

А что конкретно интересует в холи авенжере?


--------------------
Улыбайтесь, это всех раздражает ;)
| PM| Email Poster| ICQ| AOL| MSN|
Вверх Вниз
zergirl
Отправлено: Dec 22 2004, 04:40 PM
|Цитировать


Group Icon



Меня интесует, какой именно диспел он кастует с удара, какой при этом берется уровень кастера (есть предположения что уровень паладина или уровень паладина/2), каков шанс кастования диспела.


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
FenrIX_666
Отправлено: Dec 23 2004, 12:21 AM
|Цитировать


Group Icon



Там все гораздо хуже. Без процентажа, просто прибавляется такое ip как Holy Avenger. Без уровней и шансов....

А вот какой там чек идет - одним биотварям известно =)


--------------------
Улыбайтесь, это всех раздражает ;)
| PM| Email Poster| ICQ| AOL| MSN|
Вверх Вниз
DarkSet
Отправлено: Dec 23 2004, 12:47 AM
|Цитировать


Group Icon



Да, у него свойство разбивать чары, а не кастовать диспел на ударе. Очень неплохая вещь.. )


Меня в функции кастования спелов больше интересует как выбрать спел, он выбирается какимто хитрым номером, что это такое? Номер спела в 2да файле спелов? А по другому нельзя? smile.gif
И кстати если я 2да свой сменю для модуля то и спел другой функция кастанет?


--------------------
The gods may throw a dice
their minds as cold as ice
and someone way down here
loses someone dear
(с) ABBA "The Winner Takes It All"
| PM| Email Poster| Users Website| ICQ| MSN|
Вверх Вниз
Twin
Отправлено: Dec 23 2004, 01:59 AM
|Цитировать


Group Icon



DarkSet

"Выбрать спелл" это как? В процедуре ActionCastSpellAtObject () используются константы SPELL_* (о чём написано в описании процедуры). Список констант легко найти в редакторе скриптов Авроры. Разумеется, каждая эта константа соответствует какому-то обычно уникальному числу. Но для скриптера это значения, обычно, не имеет. Так что вопрос лично мне не понятен. Уточни? smile.gif
QUOTE
Номер спела в 2да файле спелов?

В spells.2da, если они тебе нужны.
QUOTE
И кстати если я 2да свой сменю для модуля то и спел другой функция кастанет?

Да.


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

Я бы верно служил, и хранил, и берег -
Просто так, за любовь - улыбнувшихся мне..
... Но не ждут, и по-прежнему путь одинок,
И охота завыть, вскинув морду к луне.
| PM| Email Poster| Users Website|
Вверх Вниз
DarkSet
Отправлено: Dec 23 2004, 05:44 PM
|Цитировать


Group Icon



объясняю
void ActionCastFakeSpellAtLocation(int nSpell, location lTarget, int nProjectilePathType=PROJECTILE_PATH_TYPE_DEFAULT)

int nSpell это никак не константа. Хотя наверное ее и тут можно использовать, но я про них не знал, думал что все по номерам только.. )


--------------------
The gods may throw a dice
their minds as cold as ice
and someone way down here
loses someone dear
(с) ABBA "The Winner Takes It All"
| PM| Email Poster| Users Website| ICQ| MSN|
Вверх Вниз
zergirl
Отправлено: Dec 24 2004, 08:29 AM
|Цитировать


Group Icon



А что подразумевается под словосочетанием "разбивает чары"?

Я так предполагаю, что например если на персонаже висит обкаст из пятнадцати спеллов, и я попадаю по нему Авенгером, то для каждого спелла кидается двадцатигранный кубик, и если прокидывается ДЦ Авенгера (Глосс что-то упоминал вскользь про ДЦ 16), то спелл убирается.

Это так или нет?


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
zergirl
Отправлено: Dec 24 2004, 10:59 PM
|Цитировать


Group Icon



Сейчас наконец-то проверила работу Авенгера в модуле. Для этого я создала персонажа-паладина 12-го уровня, дала ему в руки Авенгер, а противником выставила гоблина класса Wizard 1-го уровня. На событие OnSpawn этого гоблина я вешаю на него 15 различных спеллов обкаста. Результат - весь обкаст слетает либо с первого попадания, либо с первого не слетает ничего, а все слетает со второго. При увеличении уровня Wizard'а до 20 обкаст стал слетать порциями по 4-5 спеллов за первые несколько ударов, потом по 1-2 спелла на каждую пару последующих ударов. При увеличении уровня гоблина до 40 мне так и не удалось сбить хотя бы один спелл.

У меня возник вопрос: в бою на шарде будет ли Авенгер работать так же эффективно против мага или клира 20 уровня, как он работал против гоблина с уровнем Wizard'а 20? Ибо если будет - то это очень весело владельцу меча и очень грустно остальным )


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
zergirl
Отправлено: Feb 22 2005, 06:33 AM
|Цитировать


Group Icon



В принципе можно было бы сделать настоящее снятие чар, т.е. не просто повесить диспел на оружие, а при каждом ударе делать чек на снятие каждого спелла (например с шансом 10-15%) в независимости от левела кастера.


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
FenrIX_666
Отправлено: Feb 24 2005, 02:49 AM
|Цитировать


Group Icon



Из стандартных вешаемых IP в мою раздувшуюся голову приходят только три(4) варианта:
1) OnHit: (lesser,Greater) Dispell, Mordenkainen's Disjuncion с премнным DC в зависимости от уровня паладина и его визды.
2) OnHitCastSpell: -||- с варициями заданных уровней кастера, зависящих от уровня/визды паладина.

3) 4) Вариации первых двух пунктов.


--------------------
Улыбайтесь, это всех раздражает ;)
| PM| Email Poster| ICQ| AOL| MSN|
Вверх Вниз
zergirl
Отправлено: Feb 25 2005, 10:00 AM
|Цитировать


Group Icon



А вот такую фишку можно сделать? Напишу в общих чертах, потому что не знаю нвн-скрипта.

CODE

// oTarget - тот, кого мы бьем
// oPC - мы сами

nWIS = GetWISMod ( oPC );
nLevel = GetClassLevel ( oPC, CLASS_PALADIN );
dChance = CalcDispellChance ( nWIS, nLevel );

aSpellEffects = GetSpellEffects ( oTarget );
foreach ( oSpellEffect in aSpellEffects )
{
  dRand = randDouble ();
  if ( dRand <= dChance )
  {
    RemoveSpellEffect ( oTarget, oSpellEffect );
  }
}


Функция расчета шанса на диспел может быть примерно такой:
CODE

double CalcDispellChance ( int nWIS, int nLevel )
{
  int nEffectiveLevel = nLevel + nWIS;
  double dChance = ((double)nEffectiveLevel)*DISPELL_K/MAX_EFFECTIVE_LEVEL;
  return ( dChance );
}


CODE
MAX_EFFECTIVE_LEVEL

для капа 20 примерно 30 (20 левелов пала + 10 мод. мудрости), для капа 40 примерно 60 (40 левелов пала + 20 мод. мудрости).
CODE
DISPELL_K

показывает шанс диспела при максимальном эффективном левеле (т.е. если он равен 1, то 100%; если 0.5 - то 50%).

Это сообщение отредактировал zergirl - Feb 25 2005, 10:07 AM


--------------------
Дурёха
| PM| Email Poster|
Вверх Вниз
FenrIX_666
Отправлено: Feb 28 2005, 12:34 AM
|Цитировать


Group Icon



CODE
void main()
{

object oTarget = GetSpellTargetObject();
object oSelf = GetItemPossessor(OBJECT_SELF);

int nWis = GetAbilityModifier(oSelf, ABILITY_WISDOM);
int nLevel = GetLevelByClass(CLASS_TYPE_PALADIN, oSelf);
float fChance =


effect eSpell = GetFirstEffect(oTarget);
while (GetIsObjectValid(eSpell))
{
  //A дальше сплошная неразбериха. скажи хоть что именно ты имела ввиду на пальцах

}
}



С функцией все более ли менее ясно


--------------------
Улыбайтесь, это всех раздражает ;)
| PM| Email Poster| ICQ| AOL| MSN|
Вверх Вниз
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Страницы: (2) [1] 2  -ОтветитьНовая темаГолосование-