Does anyone know a way to exceed the skill cap of 127?
#1
Posté 22 octobre 2011 - 11:55
Thanks,
Laz
#2
Posté 23 octobre 2011 - 01:59
Modifié par Lightfoot8, 23 octobre 2011 - 01:59 .
#3
Posté 23 octobre 2011 - 02:11
#4
Posté 23 octobre 2011 - 05:42
#5
Posté 23 octobre 2011 - 06:22
If it's a problem, I would suggest spawning the casters in with some Su damage immunities and or resists, as an alternative. Or just have them instabuff on spawn with some immunity and soaking spells, like premo and energy buffer (and ele shield, melf's acid sheath, etc).
Funky
#6
Posté 23 octobre 2011 - 06:35
We do use nwnx_funcs (for windows), and in fact I think it was your suggestion Light (If IRC) that let us use this to stop mobs PPing in their on spawn script:
NWNXFuncs_SetSkill(OBJECT_SELF, SKILL_PICK_POCKET, 0);
Using this function is it possible to exceed the cap? Or will it bug the creature into negatives like when exceeding it with item properties?
Modifié par Lazarus Magni, 23 octobre 2011 - 11:16 .
#7
Posté 23 octobre 2011 - 07:33
Funky
#8
Posté 23 octobre 2011 - 11:22
NWNXFuncs_SetSkill(OBJECT_SELF, SKILL_CONCENTRATION, 500);
in the on spawn script, and see what happens. But if it causes crashes that's not much of a solution.
There would also be the problem of getting it to scale correctly based off the creature's CR. I would not want a CR 40 spawn to have 500 concentration, but I might want a CR 400 one to.
#9
Posté 23 octobre 2011 - 11:58
Modifié par ShaDoOoW, 23 octobre 2011 - 11:59 .
#10
Posté 24 octobre 2011 - 12:43
Modifié par Lazarus Magni, 24 octobre 2011 - 12:44 .
#11
Posté 24 octobre 2011 - 01:01
#include "x2_inc_switches"
#include "nw_i0_generic"
void Spell(int nSpell, object oTarget);
void main()
{
SetCreatureOverrideAIScriptFinished(OBJECT_SELF);
if (GetLocalInt(OBJECT_SELF, "AI_RUNNING") == 1)
return;
object oEnemy = GetNearestSeenEnemy();
if (GetIsObjectValid(oEnemy))
{
// this is where this line should be, not above where I've commented it out
SetLocalInt(OBJECT_SELF, "AI_RUNNING", 1);
talent t = GetCreatureTalentBest(TALENT_CATEGORY_BENEFICIAL_ENHANCEMENT_AREAEFFECT,60);
while(GetIsTalentValid(t))
{
ActionCastSpellAtObject(GetIdFromTalent(t),OBJECT_SELF,METAMAGIC_NONE,FALSE,60,PROJECTILE_PATH_TYPE_DEFAULT,TRUE);
t = GetCreatureTalentBest(TALENT_CATEGORY_BENEFICIAL_ENHANCEMENT_AREAEFFECT,60);
}
int nSpell = SPELL_EPIC_RUIN;
vector vObjectPosition = GetPosition(oEnemy);
vector vNewPosition = GetPosition(OBJECT_SELF);
float fNewFacing = VectorToAngle(vObjectPosition-vNewPosition);
SetFacing(fNewFacing);
ActionCastFakeSpellAtObject(nSpell,OBJECT_SELF);
ActionDoCommand(Spell(nSpell,OBJECT_SELF));
ActionDoCommand(SetLocalInt(OBJECT_SELF, "AI_RUNNING", 0));
}
}
#include "70_inc_spells"
#include "x0_i0_spells"
void Spell(int nSpell, object oTarget)
{
oTarget = GetLastAttacker();
if(!GetIsObjectValid(oTarget))oTarget = GetNearestSeenEnemy();
if(!GetIsObjectValid(oTarget))
return;
float fDist = GetDistanceBetween(OBJECT_SELF, oTarget);
float fDelay = fDist/(3.0 * log(fDist) + 2.0)-1.0;
if(spellsIsTarget(oTarget, SPELL_TARGET_SINGLETARGET, OBJECT_SELF))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_EPIC_RUIN));
//Roll damage
int nDam = d6(35);
//Set damage effect
if(MySavingThrow(SAVING_THROW_FORT, oTarget, 65, SAVING_THROW_TYPE_SPELL, OBJECT_SELF))
{
nDam /=3;
}
effect eDam = EffectDamage(nDam, DAMAGE_TYPE_POSITIVE, DAMAGE_POWER_PLUS_TWENTY);
ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(487), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_BLOOD_CRT_RED), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_BONE_MEDIUM), oTarget);
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
}
}
This is my custom AI which cause creature to cast epic "epic ruin" on nearest seen enemy. The epic ruin is slightly improved here.
Also since its fake spell the casting cannot be interrupted (unless you script it in OnDamaged event) however it has some other issues:
- the code after cast spell triggers a bit late than for normal spell
- resistspell probably not work right (havent tested yet but its very possibly)
- spellcraft bonus into save vs spell might not work (also havent tested yet)
- some spell functions like casterlevel obviously wont work or return weird numbers
Maybe it would be possible to cast instant normal spell after finishing fake one but the first issue will remain (I havent tried this as I needed the spell to work differently anyway)
Modifié par ShaDoOoW, 24 octobre 2011 - 01:04 .
#12
Posté 24 octobre 2011 - 07:47
I take it you mean by fake spell, an epic spell? If so, yeah as stated in the last paragraph that's not going to be good for us if cast on evey spell (CR 10 mage spawns casting epic ruin every time they cast ice dagger... umm ouch.) Not to mention all the other things you mentioned Shadooow.
On a side note though, we have been looking at your dev crit immunity fix (not for dev crit, but for it's ability to allow bosses immunity to other instant death effects like vorpal.) Just thought I would mention that, and say thanks for that vault submission, although totally unrelated to the topic at hand.
#13
Posté 24 octobre 2011 - 02:22
Second chance is NWNX I guess it should be possible to hook into Concentration Check function and rewrite it to use local variables for example.
#14
Posté 24 octobre 2011 - 05:07





Retour en haut






