|
Post by prinny on Jun 25, 2006 10:15:38 GMT
I was just wondering how it works against non evil.
I used it on a target that was among many, and that one happened to be the oddball minority of the enemy types, which was also non evil, and gives me the "error" message relating to it.
Now, that's all following my current understandings, and it does the animations on all the enemies in the area, but it also damaged the target, albeit for a slight reduction (a single digit slight at lvl 22 pally 1 cot)
Does it just commit a "normal" attack with greater smite damage?
|
|
|
Post by FunkySwerve on Jun 25, 2006 16:21:55 GMT
It didn't damage the taget, something else did. It only works on evil. Funky
|
|
|
Post by prinny on Jun 25, 2006 16:43:03 GMT
No, it did divine + positive damage, just at lesser values, complete with antimation.
Additionally, today, with another person, I saw him use his greater smite on multiple targets that were not evil.
Furthermore, I ran into some creatures today that are both not-not evil (I'm assuming they're evil, but--and because--it doesn't give an error message) and don't suffer from the smite. Or, more precisely, are effected as often as the other non-evils.
This happens consistantly enough (though unpredictably) that it should somehow be testable, though extremely difficult with the timer in place. Just as some sort of time reference, when used against non-evils, it seems to happen atleast once within an hour.
|
|
|
Post by FunkySwerve on Jun 25, 2006 17:05:59 GMT
Respectively: No, it didn't. No, you didn't. You missed some of them. If it fires off the message telling you it isn't evil, guess what, it isn't. I'm not going to waste any more time arguing with you. Here's the script, argue with it:
#include "x2_inc_switches" #include "fky_incl_get_ab" #include "nw_i0_spells" void TagPC2(object oTagPC, object oTagCreator, float fDur) { effect eEffect = SupernaturalEffect(ExtraordinaryEffect(EffectVisualEffect(VFX_DUR_AURA_PULSE_BLUE_WHITE))); AssignCommand(oTagCreator, ApplyEffectToObject(1, eEffect, oTagPC, fDur)); } void DoStrike(object oTarget, int nDamage) { effect eDam1 = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE); effect eDam2 = EffectDamage(nDamage, DAMAGE_TYPE_POSITIVE); effect eVis = EffectVisualEffect(VFX_FNF_STRIKE_HOLY); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam1, oTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam2, oTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); } void DoBadStrike(object oTarget, int nDamage) { effect eDam1 = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE); effect eDam2 = EffectDamage(nDamage, DAMAGE_TYPE_NEGATIVE); effect eVis = EffectVisualEffect(VFX_IMP_HARM); int nOutsider = GetLevelByClass(CLASS_TYPE_OUTSIDER, oTarget); int nUndead = GetLevelByClass(CLASS_TYPE_UNDEAD, oTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam1, oTarget); if (nOutsider == 0 && nUndead == 0) { ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam2, oTarget);//negative damage doesn't hurt undead or outsiders } ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); } void DoSmite(object oSmiter, location lCenter, int nAttackBonus, int nDamageBase) { object oTarget; int nAC; int nRoll; int nAttack; float fDelay; oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lCenter); while(GetIsObjectValid(oTarget)) { fDelay = GetRandomDelay(); //if it isnt a friendly or the smiter himself if (!GetIsReactionTypeFriendly(oTarget, oSmiter) && oTarget != oSmiter) { //if is evil if (GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL) { //if hits nAC = GetAC(oTarget);//AC nRoll = d20(1);//attack roll nAttack = nRoll + nAttackBonus; if (nAttack >= nAC) { DelayCommand(fDelay, DoStrike(oTarget, nDamageBase)); } } else //tell them why it failed { FloatingTextStringOnCreature("Target is not evil.", oSmiter); } } oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lCenter); } } void DoBadSmite(object oSmiter, location lCenter, int nAttackBonus, int nDamageBase) { object oTarget; int nAC; int nRoll; int nAttack; float fDelay; oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lCenter); while(GetIsObjectValid(oTarget)) { fDelay = GetRandomDelay(); //if it isnt a friendly or the smiter himself if (!GetIsReactionTypeFriendly(oTarget, oSmiter) && oTarget != oSmiter) { //if is evil //if (GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL) //{ //if hits nAC = GetAC(oTarget);//AC nRoll = d20(1);//attack roll nAttack = nRoll + nAttackBonus; if (nAttack >= nAC) { DelayCommand(fDelay, DoBadStrike(oTarget, nDamageBase)); } //} } oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lCenter); } } int GetSmiteMultiplier(object oSmiter) { int nCount = 1;//start with one for base ability if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_1, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_2, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_3, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_4, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_5, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_6, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_7, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_8, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_9, oSmiter)){nCount++;} else {return nCount;} if (GetHasFeat(FEAT_EPIC_GREAT_SMITING_10, oSmiter)){nCount++;} return nCount; } int GetTotalLevels(object oSmiter) { int nA = GetLevelByClass(CLASS_TYPE_DIVINECHAMPION, oSmiter);//CoT levels int nB = GetLevelByClass(CLASS_TYPE_PALADIN, oSmiter); int nC = nA + nB; return nC; } int GetTotalBadLevels(object oSmiter) { int nA = GetLevelByClass(CLASS_TYPE_DIVINECHAMPION, oSmiter);//CoT levels int nB = GetLevelByClass(CLASS_TYPE_PALADIN, oSmiter); int nC = GetLevelByClass(CLASS_TYPE_BLACKGUARD, oSmiter); int nD = nA + nB + nC; return nD; } void main() { int nEvent = GetUserDefinedItemEventNumber(); object oPC, oWay, oCreator; object oItem; location lTarget; effect eEffect; int nAB; int nCHA; int nMultiplier; int nBase; int nDamage, nDur; int nSubtract; int nHasEffect = 0; int nResult = X2_EXECUTE_SCRIPT_END; switch (nEvent) { case X2_ITEM_EVENT_ACTIVATE: oPC = GetItemActivator(); nSubtract = GetSmiteMultiplier(oPC) - 1; nSubtract = nSubtract*20; nDur = 480 - nSubtract; if (GetHasFeat(FEAT_EXTRA_SMITING, oPC)) nDur = nDur - 40; oItem = GetItemActivated(); lTarget = GetItemActivatedTargetLocation(); nMultiplier = GetSmiteMultiplier(oPC); //see if theyve smited recently oWay = GetWaypointByTag("effectsareawaypo"); oCreator = GetNearestObjectByTag("objectsmitecnt", oWay); eEffect = GetFirstEffect(oPC); while (GetIsEffectValid(eEffect) && (!nHasEffect)) { if (GetEffectCreator(eEffect) == oCreator) { //tags them as being affected already nHasEffect = 2; } eEffect = GetNextEffect(oPC); } if (nHasEffect) { FloatingTextStringOnCreature("You must wait until this ability is charged before using it again!", oPC, FALSE); } else { AssignCommand(oCreator, TagPC2(oPC, oCreator, IntToFloat(nDur))); if (GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC) > 19) { if (GetHasFeat(FEAT_SMITE_GOOD, oPC)) { //Smite will do (Pally + CoT level + BG level)* (1 + # of Greater Smiting feats) of divine damage and negative damage, IF //they have the feat available, AND succeed in an attack vs that targets AC - no evil req here, though the neg wont hurt undead or outsiders //mark feat used //DecrementRemainingFeatUses(oPC, FEAT_SMITE_GOOD); //calculate ab nAB = GetCalculatedAttackBonus(oPC);//temporary ab boosting spells are not included as too difficult to calculate - this one is long so we do it here as to only calculate it once nCHA = GetAbilityModifier(ABILITY_CHARISMA, oPC);//CHA is added to the attack roll nAB = nAB + nCHA; //calculate damage nBase = GetTotalBadLevels(oPC); nDamage = nBase*nMultiplier; //Smite will do (Pally + CoT level + BG level) * (1 + # of Greater Smiting feats) of divine damage& positive damage AssignCommand(oPC,DoBadSmite(oPC, lTarget, nAB, nDamage)); } else { FloatingTextStringOnCreature("No more uses of Greater Smite remaining", oPC); } } else if (GetLevelByClass(CLASS_TYPE_DIVINECHAMPION, oPC) > 19 || GetLevelByClass(CLASS_TYPE_PALADIN, oPC) > 19) { if (GetHasFeat(FEAT_SMITE_EVIL, oPC)) { //Smite will do (Pally + CoT level) * (1 + # of Greater Smiting feats) of divine damage and positive damage, IF //they have the feat available, AND succeed in an attack vs that targets AC, IF the target is EVIL //mark feat used //DecrementRemainingFeatUses(oPC, FEAT_SMITE_EVIL); //calculate ab nAB = GetCalculatedAttackBonus(oPC);//temporary ab boosting spells are not included as too difficult to calculate - this one is long so we do it here as to only calculate it once nCHA = GetAbilityModifier(ABILITY_CHARISMA, oPC);//CHA is added to the attack roll nAB = nAB + nCHA; //calculate damage nBase = GetTotalLevels(oPC); nDamage = nBase*nMultiplier; //Smite will do (Pally + CoT level) * (1 + # of Greater Smiting feats) of divine damage& positive damage AssignCommand(oPC,DoSmite(oPC, lTarget, nAB, nDamage)); } else { FloatingTextStringOnCreature("No more uses of Greater Smite remaining", oPC); } } } break; } SetExecutedScriptReturnValue(nResult); }
Funky
|
|
|
Post by prinny on Jun 25, 2006 23:31:16 GMT
Respectively: Yes it did.
How long have you spent leveling a paladin, intent on getting greater smite asap and using it from level 1 onward?
Without extensive playtesting, you can't say that it doesn't happen. It could be a script fault in relation to the engine intself, causing an error and/or ignoring the restrictions.
You can not waste anymore time listening to facts if you want, seems to be a past time of yours.
|
|
|
Post by fusa on Jun 26, 2006 0:51:39 GMT
I leveled a paladin to level 60 and never saw it smite an enemy that wasn't evil...at least smite an enemy that it didnt normal do before. The ones that were good or neutral I saw a message that stated target is not evil. Also kind of wondering how a player that had no part in creating the mod knows which creatures are evil and which aren't?
|
|
|
Post by FunkySwerve on Jun 26, 2006 2:08:19 GMT
Respectively: Yes it did. Without extensive playtesting, you can't say that it doesn't happen. It could be a script fault in relation to the engine intself, causing an error and/or ignoring the restrictions. Of course, it HAS been playtested extensively, so I CAN say that. And no, there is no such engine issue. And as for YOU telling ME I have a listening problem - laf. Oh, by the way, 'respectively' means 'with respect to the order given'. You made 3 statements, I responded to each, respectively, or in the same order. It makes no sense when used without multiple items/responses, as you did, because then there is no order. What did you think it meant, 'respectfully'? Funky
|
|
|
Post by reelroleplayer on Jun 26, 2006 19:41:13 GMT
Respectively: Yes it did. How long have you spent leveling a paladin, intent on getting greater smite asap and using it from level 1 onward? Without extensive playtesting, you can't say that it doesn't happen. It could be a script fault in relation to the engine intself, causing an error and/or ignoring the restrictions. You can not waste anymore time listening to facts if you want, seems to be a past time of yours. Man, I'm amazed at your temerity. This guy spends hours of his time making what I daresay is the best action PW out there, if not the best PW available AT NO COST TO YOU. Funky is a very reasonable guy. His servers are at or near capacity through most of the peak hours. He's answered your question very clearly. I'd say at the very least a respectful tone is in order. He doesn't owe you anything whatsoever.
|
|