Need Help with a Function please :-)

Post » Tue Jun 19, 2012 9:55 am

I'm afraid I need help with a script involving functions. I am looking to have a single script on multiple actors, but I want to be able to return certain variables from between those actors. I'm looking for something similar to this...

int a = 0int b = 0int x = 0int y = 0Function SetVariable()int a = 1int b = 2EndFunctionFunction GetVariable() Globalx = ay = bEndFunctionEvent OnHit()akSource.Getvariable()x  ;should be equal to attacker's ay  ;should be equal to attacker's bEndEvent



Any suggestions? I'm completely lost... syntax is also appreciated :-P
Thank you!
User avatar
Stephanie I
 
Posts: 3357
Joined: Thu Apr 05, 2007 3:28 pm

Post » Tue Jun 19, 2012 7:58 pm

It looks like you might want to use properties instead of variables, as they are accessible by external scripts without requiring a function as an intermediate.

A property declared with the "auto" keyword can be treated as a variable with respect to syntax. To access an external property, you need to use syntax like this:
(ObjectWithProp as ScriptWithProp).PropName

Cipscis
User avatar
Chenae Butler
 
Posts: 3485
Joined: Sat Feb 17, 2007 3:54 pm

Post » Tue Jun 19, 2012 10:09 am

Thank you very much :-)

After trying that, I've gotten a bit further. I've been trying to figure out exactly why it won't let me do what I want it to. Here are the relevant parts of my script, I believe...


Spoiler

Scriptname SAWDOnHit extends ActiveMagicEffect{SAWD OnHit Damage Calculation}int PROPERTY myPenetrationMin = 0 AUTOint PROPERTY myPenetrationMax = 0 AUTOint PROPERTY myCutMin = 0 AUTOint PROPERTY myCutMax = 0 AUTOint PROPERTY myConcussionMin = 0 AUTOint PROPERTY myConcussionMax = 0 AUTOint PROPERTY mypPenetrationMin = 0 AUTOint PROPERTY mypPenetrationMax = 0 AUTO int PROPERTY mypConcussionMin = 0 AUTOint PROPERTY mypConcussionMax = 0 AUTOint PROPERTY aPenetrationMin = 0 AUTOint PROPERTY aPenetrationMax = 0 AUTO int PROPERTY aCutMin = 0 AUTOint PROPERTY aCutMax = 0 AUTOint PROPERTY aConcussionMin = 0 AUTOint PROPERTY aConcussionMax = 0 AUTOint PROPERTY apPenetrationMin = 0 AUTOint PROPERTY apPenetrationMax = 0 AUTOint PROPERTY apConcussionMin = 0 AUTOint PROPERTY apConcussionMax = 0 AUTOint PenetrationMin = 0int PenetrationMax = 0 int CutMin = 0int CutMax = 0int ConcussionMin = 0int ConcussionMax = 0int pPenetrationMin = 0int pPenetrationMax = 0 int pConcussionMin = 0int pConcussionMax = 0Function SetDamage()myPenetrationMin = PenetrationMinmyPenetrationMax = PenetrationMaxmyCutMin = CutMinmyCutMax = CutMaxmyConcussionMin = ConcussionMinmyConcussionMax = ConcussionMaxmypPenetrationMin = pPenetrationMinmypPenetrationMax = pPenetrationMaxmypConcussionMin = pConcussionMinmypConcussionMax = pConcussionMaxendFunctionEvent OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, \bool abBashAttack, bool abHitBlocked)aPenetrationMin = 0aPenetrationMax = 0aCutMin = 0aCutMax = 0aConcussionMin = 0aConcussionMax = 0apPenetrationMin = 0apPenetrationMax = 0apConcussionMin = 0apConcussionMax = 0aPenetrationMin = akAggressor.(myPenetrationMin as int)aPenetrationMax = akAggressor.myPenetrationMaxaCutMin = akAggressor.myCutMinaCutMax = akAggressor.myCutMaxaConcussionMin = akAggressor.myConcussionMinaConcussionMax = akAggressor.myConcussionMaxapPenetrationMin = akAggressor.mypPenetrationMinapPenetrationMax = akAggressor.mypPenetrationMaxapConcussionMin = akAggressor.mypConcussionMinapConcussionMax = akAggressor.mypConcussionMaxEndEvent


Here is the whole script in case I left something out...

Spoiler

Scriptname SAWDOnHit extends ActiveMagicEffect{SAWD OnHit Damage Calculation}Keyword property VendorItemAnimalHide autoKeyword property ArmorMaterialDaedric autoKeyword property ArmorMaterialDragonplate autoKeyword property ArmorMaterialDragonscale autoKeyword property ArmorMaterialDwarven autoKeyword property ArmorMaterialEbony autoKeyword property ArmorMaterialElven autoKeyword property ArmorMaterialElvenGilded autoKeyword property ArmorMaterialGlass autoKeyword property ArmorMaterialHide autoKeyword property ArmorMaterialImperialHeavy autoKeyword property ArmorMaterialImperialLight autoKeyword property ArmorMaterialImperialStudded autoKeyword property ArmorMaterialIron autoKeyword property ArmorMaterialIronBanded autoKeyword property ArmorMaterialLeather autoKeyword property ArmorMaterialOrcish autoKeyword property ArmorMaterialScaled autoKeyword property ArmorMaterialSteel autoKeyword property ArmorMaterialSteelPlate autoKeyword property ArmorMaterialStormcloak autoKeyword property ArmorMaterialStudded autoKeyword property ArmorNightingale autoKeyword property ArmorDarkBrotherhood autoKeyword property ArmorCuirass autoKeyword property VendorItemArrow autoKeyword property WeapTypeBoundArrow autoKeyword property WeapTypeBow autoKeyword property WeapTypeDagger autoKeyword property WeapTypeSword autoKeyword property WeapTypeGreatsword autoKeyword property WeapTypeWarAxe autoKeyword property WeapTypeBattleaxe autoKeyword property WeapTypeMace autoKeyword property WeapTypeWarhammer autoKeyword property WeapTypeStaff autoKeyword property WeapMaterialDaedric autoKeyword property WeapMaterialDraugr autoKeyword property WeapMaterialDraugrHoned autoKeyword property WeapMaterialDwarven autoKeyword property WeapMaterialEbony autoKeyword property WeapMaterialElven autoKeyword property WeapMaterialFalmer autoKeyword property WeapMaterialFalmerHoned autoKeyword property WeapMaterialGlass autoKeyword property WeapMaterialImperial autoKeyword property WeapMaterialIron autoKeyword property WeapMaterialOrcish autoKeyword property WeapMaterialSilver autoKeyword property WeapMaterialSteel autoKeyword property WeapMaterialWood autoSPELL PROPERTY SAWDStagger2 AUTOSPELL PROPERTY SAWDStagger AUTOSPELL PROPERTY SAWDKneel AUTOSPELL PROPERTY SAWDDamageHeavy AUTOSPELL PROPERTY SAWDDamageModerate AUTOSPELL PROPERTY SAWDDamageLight AUTOSPELL PROPERTY SAWDBleedHeavy AUTOSPELL PROPERTY SAWDBleedModerate AUTOSPELL PROPERTY SAWDBleedLight AUTOSPELL PROPERTY FireSawd AUTOActor property Target autoWeapon property myWeapon autoint PROPERTY myPenetrationMin = 0 AUTOint PROPERTY myPenetrationMax = 0 AUTOint PROPERTY myCutMin = 0 AUTOint PROPERTY myCutMax = 0 AUTOint PROPERTY myConcussionMin = 0 AUTOint PROPERTY myConcussionMax = 0 AUTOint PROPERTY mypPenetrationMin = 0 AUTOint PROPERTY mypPenetrationMax = 0 AUTO int PROPERTY mypConcussionMin = 0 AUTOint PROPERTY mypConcussionMax = 0 AUTOint PROPERTY aPenetrationMin = 0 AUTOint PROPERTY aPenetrationMax = 0 AUTO int PROPERTY aCutMin = 0 AUTOint PROPERTY aCutMax = 0 AUTOint PROPERTY aConcussionMin = 0 AUTOint PROPERTY aConcussionMax = 0 AUTOint PROPERTY apPenetrationMin = 0 AUTOint PROPERTY apPenetrationMax = 0 AUTOint PROPERTY apConcussionMin = 0 AUTOint PROPERTY apConcussionMax = 0 AUTOint ResistPenetration = 0int ResistCut = 0int ResistConcussion = 0int ArrowPenetration = 0int ArrowConcussion = 0int PenetrationMin = 0int PenetrationMax = 0 int CutMin = 0int CutMax = 0int ConcussionMin = 0int ConcussionMax = 0int pPenetrationMin = 0int pPenetrationMax = 0 int pConcussionMin = 0int pConcussionMax = 0int aPenetrationMin = 0int aPenetrationMax = 0 int aCutMin = 0int aCutMax = 0int aConcussionMin = 0int aConcussionMax = 0int apPenetrationMin = 0int apPenetrationMax = 0int apConcussionMin = 0int apConcussionMax = 0int PenetrationRoll = 0int CutRoll = 0int ConcussionRoll = 0int PenetrationSuccess = 0int CutSuccess = 0int ConcussionSuccess = 0Event OnEffectStart(Actor akTarget, Actor akCaster)Target = akTargetDetectArmorResistances(Target)endEventFunction DetectArmorResistances(Actor fTarget)If ( Target.WornHasKeyword(ArmorCuirass))  ResistPenetration = 0  ResistCut = 0  ResistConcussion = 0  If ( Target.WornHasKeyword(ArmorMaterialDaedric))   ResistPenetration = 250   ResistCut = 250   ResistConcussion = 250  ElseIf ( Target.WornHasKeyword(ArmorMaterialDragonplate))   ResistPenetration = 225   ResistCut = 225   ResistConcussion = 225  ElseIf ( Target.WornHasKeyword(ArmorMaterialEbony))   ResistPenetration = 200   ResistCut = 200   ResistConcussion = 200  ElseIf ( Target.WornHasKeyword(ArmorMaterialDwarven))   ResistPenetration = 175   ResistCut = 170   ResistConcussion = 175   ElseIf ( Target.WornHasKeyword(ArmorMaterialOrcish))   ResistPenetration = 150   ResistCut = 150   ResistConcussion = 150  ElseIf ( Target.WornHasKeyword(ArmorMaterialDragonscale))   ResistPenetration = 150   ResistCut = 150   ResistConcussion = 150  ElseIf ( Target.WornHasKeyword(ArmorMaterialImperialHeavy))   ResistPenetration = 140   ResistCut = 140   ResistConcussion = 140  ElseIf ( Target.WornHasKeyword(ArmorMaterialSteelPlate))   ResistPenetration = 130   ResistCut = 130   ResistConcussion = 130  ElseIf ( Target.WornHasKeyword(ArmorMaterialGlass))   ResistPenetration = 130   ResistCut = 130   ResistConcussion = 130    ElseIf ( Target.WornHasKeyword(ArmorMaterialSteel))   ResistPenetration = 120   ResistCut = 120   ResistConcussion = 120   ElseIf ( Target.WornHasKeyword(ArmorMaterialIronBanded))   ResistPenetration = 110   ResistCut = 110   ResistConcussion = 110  ElseIf ( Target.WornHasKeyword(ArmorMaterialElvenGilded))   ResistPenetration = 110   ResistCut = 110   ResistConcussion = 110    ElseIf ( Target.WornHasKeyword(ArmorMaterialIron))   ResistPenetration = 100   ResistCut = 100   ResistConcussion = 100   ElseIf ( Target.WornHasKeyword(ArmorMaterialElven))   ResistPenetration = 100   ResistCut = 100   ResistConcussion = 100    ElseIf ( Target.WornHasKeyword(ArmorMaterialScaled))   ResistPenetration = 75   ResistCut = 90   ResistConcussion = 60  ElseIf ( Target.WornHasKeyword(ArmorMaterialImperialStudded))   ResistPenetration = 60   ResistCut = 80   ResistConcussion = 40    ElseIf ( Target.WornHasKeyword(ArmorMaterialStormcloak))   ResistPenetration = 50   ResistCut = 75   ResistConcussion = 35  ElseIf ( Target.WornHasKeyword(ArmorNightingale))   ResistPenetration = 50   ResistCut = 35   ResistConcussion = 30    ElseIf ( Target.WornHasKeyword(ArmorMaterialStudded))   ResistPenetration = 45   ResistCut = 35   ResistConcussion = 30   ElseIf ( Target.WornHasKeyword(ArmorMaterialImperialLight))   ResistPenetration = 40   ResistCut = 30   ResistConcussion = 25  ElseIf ( Target.WornHasKeyword(ArmorMaterialLeather))   ResistPenetration = 40   ResistCut = 30   ResistConcussion = 25    ElseIf ( Target.WornHasKeyword(ArmorDarkBrotherhood))   ResistPenetration = 30   ResistCut = 30   ResistConcussion = 20  ElseIf ( Target.WornHasKeyword(ArmorMaterialHide))   ResistPenetration = 15   ResistCut = 15   ResistConcussion = 15  ElseIf ( Target.WornHasKeyword(VendorItemAnimalHide))   ResistPenetration = 15   ResistCut = 15   ResistConcussion = 15    Else   ResistPenetration = 0   ResistCut = 0   ResistConcussion = 0  EndIfEndIfendFunctionFunction DetectWeaponDamages(Weapon fWeapon)if ( myWeapon.HasKeyword(WeapTypeDagger) || myWeapon.HasKeyword(WeapTypeSword) || myWeapon.HasKeyword(WeapTypeGreatsword) || myWeapon.HasKeyword(WeapTypeWarAxe) || myWeapon.HasKeyword(WeapTypeBattleaxe))  CutMin = 0  CutMax = 0  if ( myWeapon.HasKeyword(WeapMaterialIron))   CutMin = 1   CutMax = 50  ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   CutMin = 2   CutMax = 53  ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   CutMin = 3   CutMax = 55  ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   CutMin = 1   CutMax = 45    ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   CutMin = 4   CutMax = 62  ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   CutMin = 7   CutMax = 65    ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   CutMin = 3   CutMax = 57  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   CutMin = 8   CutMax = 67  ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   CutMin = 10   CutMax = 70  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   CutMin = 20   CutMax = 75  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   CutMin = 1   CutMax = 48  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   CutMin = 4   CutMax = 59   ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   CutMin = 30   CutMax = 90  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   CutMin = 40   CutMax = 100  ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   CutMin = 0   CutMax = 0   Else   CutMin = 0   CutMax = 0    EndIfElse  CutMin = 0  CutMax = 0EndIfPenetrationMin = 0PenetrationMax = 0ConcussionMin = 0ConcussionMax = 0If ( myWeapon.HasKeyword(WeapTypeBow))  if ( myWeapon.HasKeyword(WeapMaterialIron))   PenetrationMin = 26   PenetrationMax = 265   ConcussionMin = 1   ConcussionMax = 10    ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   PenetrationMin = 27   PenetrationMax = 270   ConcussionMin = 1   ConcussionMax = 10   ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   PenetrationMin = 27   PenetrationMax = 275   ConcussionMin = 1   ConcussionMax = 10   ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   PenetrationMin = 26   PenetrationMax = 260   ConcussionMin = 1   ConcussionMax = 10     ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   PenetrationMin = 30   PenetrationMax = 300   ConcussionMin = 1   ConcussionMax = 15   ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   PenetrationMin = 34   PenetrationMax = 340   ConcussionMin = 1   ConcussionMax = 20	   ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   PenetrationMin = 31   PenetrationMax = 310   ConcussionMin = 1   ConcussionMax = 23    ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   PenetrationMin = 35   PenetrationMax = 350   ConcussionMin = 1   ConcussionMax = 23  ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   PenetrationMin = 41   PenetrationMax = 410   ConcussionMin = 1   ConcussionMax = 10  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   PenetrationMin = 32   PenetrationMax = 320   ConcussionMin = 1   ConcussionMax = 15  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   PenetrationMin = 16   PenetrationMax = 163   ConcussionMin = 1   ConcussionMax = 10  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   PenetrationMin = 18   PenetrationMax = 185   ConcussionMin = 1   ConcussionMax = 10  ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   PenetrationMin = 36   PenetrationMax = 360   ConcussionMin = 3   ConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   PenetrationMin = 40   PenetrationMax = 400   ConcussionMin = 4   ConcussionMax = 30  ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   PenetrationMin = 9   PenetrationMax = 90   ConcussionMin = 1   ConcussionMax = 8  Else   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 0   ConcussionMax = 0    EndIf   ; ArrowPenetration = 0  ; ArrowConcussion = 0   ; if ( akProjectile.HasKeyword(WeapMaterialIron))   ; ArrowPenetration = 5   ; ArrowConcussion = 0  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialSteel))   ; ArrowPenetration = 10   ; ArrowConcussion = 1  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialImperial))   ; ArrowPenetration = 15   ; ArrowConcussion = 1  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialSilver))   ; ArrowPenetration = 1   ; ArrowConcussion = 0   ; ElseIf ( akProjectile.HasKeyword(WeapMaterialOrcish))   ; ArrowPenetration = 20   ; ArrowConcussion = 2  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialDwarven))   ; ArrowPenetration = 25   ; ArrowConcussion = 2   ; ElseIf ( akProjectile.HasKeyword(WeapMaterialFalmer))   ; ArrowPenetration = 22   ; ArrowConcussion = 3  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialFalmerHoned))   ; ArrowPenetration = 30   ; ArrowConcussion = 3  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialElven))   ; ArrowPenetration = 50   ; ArrowConcussion = 5  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialGlass))   ; ArrowPenetration = 35   ; ArrowConcussion = 3  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialDraugr))   ; ArrowPenetration = 3   ; ArrowConcussion = 0  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialDraugrHoned))   ; ArrowPenetration = 17   ; ArrowConcussion = 1  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialEbony))   ; ArrowPenetration = 40   ; ArrowConcussion = 4  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialDaedric))   ; ArrowPenetration = 45   ; ArrowConcussion = 4  ; ElseIf ( akProjectile.HasKeyword(WeapMaterialWood))   ; ArrowPenetration = 0   ; ArrowConcussion = 0  ; Else   ; ArrowPenetration = 0   ; ArrowConcussion = 0    ; EndIf   ; PenetrationMin = ( PenetrationMin + ArrowPenetration )  ; PenetrationMax = ( PenetrationMax + ArrowPenetration )  ; ConcussionMin = ( ConcussionMin + ArrowConcussion )  ; ConcussionMax = ( ConcussionMax + ArrowConcussion ) Elseif ( myWeapon.HasKeyword(WeapTypeDagger))  if ( myWeapon.HasKeyword(WeapMaterialIron))   PenetrationMin = 1   PenetrationMax = 35   ConcussionMin = 1   ConcussionMax = 10   pPenetrationMin = 10   pPenetrationMax = 130   pConcussionMin = 1   pConcussionMax = 10    ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   PenetrationMin = 1   PenetrationMax = 37   ConcussionMin = 1   ConcussionMax = 10   pPenetrationMin = 13   pPenetrationMax = 140   pConcussionMin = 1   pConcussionMax = 10     ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   PenetrationMin = 1   PenetrationMax = 39   ConcussionMin = 1   ConcussionMax = 10   pPenetrationMin = 15   pPenetrationMax = 145   pConcussionMin = 1   pConcussionMax = 10  ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   PenetrationMin = 1   PenetrationMax = 33   ConcussionMin = 1   ConcussionMax = 10   pPenetrationMin = 8   pPenetrationMax = 125   pConcussionMin = 1   pConcussionMax = 10     ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   PenetrationMin = 2   PenetrationMax = 41   ConcussionMin = 1   ConcussionMax = 15   pPenetrationMin = 20   pPenetrationMax = 180   pConcussionMin = 1   pConcussionMax = 10    ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   PenetrationMin = 5   PenetrationMax = 45   ConcussionMin = 1   ConcussionMax = 20   pPenetrationMin = 25   pPenetrationMax = 200   pConcussionMin = 1   pConcussionMax = 17     ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   PenetrationMin = 3   PenetrationMax = 42   ConcussionMin = 1   ConcussionMax = 23   pPenetrationMin = 20   pPenetrationMax = 185   pConcussionMin = 2   pConcussionMax = 18    ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   PenetrationMin = 5   PenetrationMax = 48   ConcussionMin = 1   ConcussionMax = 23   pPenetrationMin = 32   pPenetrationMax = 225   pConcussionMin = 2   pConcussionMax = 18     ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   PenetrationMin = 3   PenetrationMax = 40   ConcussionMin = 1   ConcussionMax = 10   pPenetrationMin = 22   pPenetrationMax = 190   pConcussionMin = 1   pConcussionMax = 10  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   PenetrationMin = 4   PenetrationMax = 43   ConcussionMin = 1   ConcussionMax = 15   pPenetrationMin = 24   pPenetrationMax = 230   pConcussionMin = 1   pConcussionMax = 15  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   PenetrationMin = 1   PenetrationMax = 34   ConcussionMin = 1   ConcussionMax = 10   pPenetrationMin = 9   pPenetrationMax = 128   pConcussionMin = 1   pConcussionMax = 10  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   PenetrationMin = 2   PenetrationMax = 40   ConcussionMin = 1   ConcussionMax = 10   pPenetrationMin = 17   pPenetrationMax = 155   pConcussionMin = 1   pConcussionMax = 10  ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   PenetrationMin = 7   PenetrationMax = 55   ConcussionMin = 3   ConcussionMax = 25   pPenetrationMin = 40   pPenetrationMax = 255   pConcussionMin = 3   pConcussionMax = 19  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   PenetrationMin = 10   PenetrationMax = 65   ConcussionMin = 4   ConcussionMax = 30   pPenetrationMin = 75   pPenetrationMax = 300   pConcussionMin = 4   pConcussionMax = 20    ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   PenetrationMin = 0   PenetrationMax = 10   ConcussionMin = 1   ConcussionMax = 8    pPenetrationMin = 1   pPenetrationMax = 50   pConcussionMin = 1   pConcussionMax = 8  Else   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 0   ConcussionMax = 0   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 0   pConcussionMax = 0     EndIfElseif ( myWeapon.HasKeyword(WeapTypeSword))  if ( myWeapon.HasKeyword(WeapMaterialIron))   PenetrationMin = 1   PenetrationMax = 150   ConcussionMin = 69   ConcussionMax = 138   pPenetrationMin = 15   pPenetrationMax = 135   pConcussionMin = 1   pConcussionMax = 20  ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   PenetrationMin = 1   PenetrationMax = 155   ConcussionMin = 71   ConcussionMax = 142   pPenetrationMin = 18   pPenetrationMax = 145   pConcussionMin = 1   pConcussionMax = 20  ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   PenetrationMin = 1   PenetrationMax = 160   ConcussionMin = 73   ConcussionMax = 146   pPenetrationMin = 20   pPenetrationMax = 150   pConcussionMin = 1   pConcussionMax = 20  ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   PenetrationMin = 1   PenetrationMax = 140   ConcussionMin = 75   ConcussionMax = 150   pPenetrationMin = 13   pPenetrationMax = 130   pConcussionMin = 1   pConcussionMax = 20  ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   PenetrationMin = 5   PenetrationMax = 175   ConcussionMin = 85   ConcussionMax = 170   pPenetrationMin = 25   pPenetrationMax = 185   pConcussionMin = 1   pConcussionMax = 22  ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   PenetrationMin = 15   PenetrationMax = 210   ConcussionMin = 100   ConcussionMax = 200   pPenetrationMin = 30   pPenetrationMax = 205   pConcussionMin = 3   pConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   PenetrationMin = 10   PenetrationMax = 185   ConcussionMin = 105   ConcussionMax = 210   pPenetrationMin = 27   pPenetrationMax = 190   pConcussionMin = 4   pConcussionMax = 27  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   PenetrationMin = 20   PenetrationMax = 225   ConcussionMin = 105   ConcussionMax = 210   pPenetrationMin = 48   pPenetrationMax = 235   pConcussionMin = 4   pConcussionMax = 27  ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   PenetrationMin = 5   PenetrationMax = 180   ConcussionMin = 80   ConcussionMax = 160   pPenetrationMin = 27   pPenetrationMax = 195   pConcussionMin = 1   pConcussionMax = 20  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   PenetrationMin = 10   PenetrationMax = 200   ConcussionMin = 95   ConcussionMax = 185   pPenetrationMin = 29   pPenetrationMax = 230   pConcussionMin = 2   pConcussionMax = 22  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   PenetrationMin = 1   PenetrationMax = 145   ConcussionMin = 72   ConcussionMax = 144   pPenetrationMin = 14   pPenetrationMax = 133   pConcussionMin = 1   pConcussionMax = 20  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   PenetrationMin = 3   PenetrationMax = 165   ConcussionMin = 72   ConcussionMax = 144   pPenetrationMin = 22   pPenetrationMax = 160   pConcussionMin = 1   pConcussionMax = 20  ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   PenetrationMin = 25   PenetrationMax = 255   ConcussionMin = 115   ConcussionMax = 225   pPenetrationMin = 45   pPenetrationMax = 255   pConcussionMin = 5   pConcussionMax = 30  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   PenetrationMin = 35   PenetrationMax = 285   ConcussionMin = 130   ConcussionMax = 255   pPenetrationMin = 80   pPenetrationMax = 305   pConcussionMin = 5   pConcussionMax = 35  ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   PenetrationMin = 1   PenetrationMax = 10   ConcussionMin = 35   ConcussionMax = 70    pPenetrationMin = 0   pPenetrationMax = 50   pConcussionMin = 1   pConcussionMax = 15  Else   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 0   ConcussionMax = 0   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 0   pConcussionMax = 0  EndIfElseif ( myWeapon.HasKeyword(WeapTypeGreatsword))  if ( myWeapon.HasKeyword(WeapMaterialIron))   PenetrationMin = 5   PenetrationMax = 165   ConcussionMin = 90   ConcussionMax = 155   pPenetrationMin = 20   pPenetrationMax = 140   pConcussionMin = 2   pConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   PenetrationMin = 5   PenetrationMax = 170   ConcussionMin = 95   ConcussionMax = 160   pPenetrationMin = 23   pPenetrationMax = 150   pConcussionMin = 2   pConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   PenetrationMin = 5   PenetrationMax = 175   ConcussionMin = 100   ConcussionMax = 165   pPenetrationMin = 25   pPenetrationMax = 155   pConcussionMin = 2   pConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   PenetrationMin = 5   PenetrationMax = 155   ConcussionMin = 105   ConcussionMax = 170    pPenetrationMin = 18   pPenetrationMax = 135   pConcussionMin = 2   pConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   PenetrationMin = 10   PenetrationMax = 190   ConcussionMin = 115   ConcussionMax = 195   pPenetrationMin = 30   pPenetrationMax = 190   pConcussionMin = 3   pConcussionMax = 27  ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   PenetrationMin = 20   PenetrationMax = 225   ConcussionMin = 130   ConcussionMax = 230    pPenetrationMin = 35   pPenetrationMax = 210   pConcussionMin = 5   pConcussionMax = 35  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   PenetrationMin = 15   PenetrationMax = 195   ConcussionMin = 135   ConcussionMax = 245   pPenetrationMin = 32   pPenetrationMax = 195   pConcussionMin = 6   pConcussionMax = 37  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   PenetrationMin = 25   PenetrationMax = 250   ConcussionMin = 135   ConcussionMax = 245   pPenetrationMin = 43   pPenetrationMax = 240   pConcussionMin = 6   pConcussionMax = 37  ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   PenetrationMin = 10   PenetrationMax = 195   ConcussionMin = 110   ConcussionMax = 180   pPenetrationMin = 32   pPenetrationMax = 200   pConcussionMin = 2   pConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   PenetrationMin = 15   PenetrationMax = 215   ConcussionMin = 120   ConcussionMax = 205   pPenetrationMin = 34   pPenetrationMax = 235   pConcussionMin = 4   pConcussionMax = 30  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   PenetrationMin = 5   PenetrationMax = 160   ConcussionMin = 98   ConcussionMax = 163   pPenetrationMin = 19   pPenetrationMax = 138   pConcussionMin = 2   pConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   PenetrationMin = 7   PenetrationMax = 180   ConcussionMin = 98   ConcussionMax = 163   pPenetrationMin = 27   pPenetrationMax = 165   pConcussionMin = 2   pConcussionMax = 25  ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   PenetrationMin = 30   PenetrationMax = 270   ConcussionMin = 160   ConcussionMax = 260   pPenetrationMin = 50   pPenetrationMax = 260   pConcussionMin = 6   pConcussionMax = 40  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   PenetrationMin = 40   PenetrationMax = 300   ConcussionMin = 180   ConcussionMax = 280   pPenetrationMin = 85   pPenetrationMax = 310   pConcussionMin = 7   pConcussionMax = 45  ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   PenetrationMin = 1   PenetrationMax = 15   ConcussionMin = 45   ConcussionMax = 90   pPenetrationMin = 1   pPenetrationMax = 50   pConcussionMin = 2   pConcussionMax = 20  Else   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 0   ConcussionMax = 0     pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 0   pConcussionMax = 0  EndIfElseif ( myWeapon.HasKeyword(WeapTypeWarAxe))  if ( myWeapon.HasKeyword(WeapMaterialIron))   PenetrationMin = 5   PenetrationMax = 165   ConcussionMin = 65   ConcussionMax = 145   pPenetrationMin = 90   pPenetrationMax = 180   pConcussionMin = 80   pConcussionMax = 170  ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   PenetrationMin = 5   PenetrationMax = 170   ConcussionMin = 68   ConcussionMax = 150   pPenetrationMin = 93   pPenetrationMax = 185   pConcussionMin = 83   pConcussionMax = 175  ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   PenetrationMin = 5   PenetrationMax = 175   ConcussionMin = 70   ConcussionMax = 155   pPenetrationMin = 95   pPenetrationMax = 190   pConcussionMin = 85   pConcussionMax = 180  ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   PenetrationMin = 5   PenetrationMax = 155   ConcussionMin = 75   ConcussionMax = 160   pPenetrationMin = 87   pPenetrationMax = 175   pConcussionMin = 90   pConcussionMax = 185    ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   PenetrationMin = 10   PenetrationMax = 190   ConcussionMin = 85   ConcussionMax = 180   pPenetrationMin = 110   pPenetrationMax = 215   pConcussionMin = 100   pConcussionMax = 205  ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   PenetrationMin = 20   PenetrationMax = 225   ConcussionMin = 95   ConcussionMax = 200   pPenetrationMin = 120   pPenetrationMax = 235   pConcussionMin = 110   pConcussionMax = 225  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   PenetrationMin = 13   PenetrationMax = 200   ConcussionMin = 100   ConcussionMax = 207   pPenetrationMin = 112   pPenetrationMax = 220   pConcussionMin = 115   pConcussionMax = 233  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   PenetrationMin = 25   PenetrationMax = 245   ConcussionMin = 100   ConcussionMax = 207   pPenetrationMin = 125   pPenetrationMax = 242   pConcussionMin = 115   pConcussionMax = 233  ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   PenetrationMin = 10   PenetrationMax = 195   ConcussionMin = 80   ConcussionMax = 170   pPenetrationMin = 105   pPenetrationMax = 205   pConcussionMin = 95   pConcussionMax = 195  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   PenetrationMin = 15   PenetrationMax = 215   ConcussionMin = 90   ConcussionMax = 190   pPenetrationMin = 115   pPenetrationMax = 225   pConcussionMin = 105   pConcussionMax = 215  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   PenetrationMin = 5   PenetrationMax = 150   ConcussionMin = 69   ConcussionMax = 153   pPenetrationMin = 89   pPenetrationMax = 178   pConcussionMin = 84   pConcussionMax = 178  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   PenetrationMin = 7   PenetrationMax = 180   ConcussionMin = 69   ConcussionMax = 153   pPenetrationMin = 100   pPenetrationMax = 200   pConcussionMin = 84   pConcussionMax = 178  ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   PenetrationMin = 30   PenetrationMax = 270   ConcussionMin = 105   ConcussionMax = 215   pPenetrationMin = 130   pPenetrationMax = 250   pConcussionMin = 120   pConcussionMax = 240  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   PenetrationMin = 40   PenetrationMax = 300   ConcussionMin = 115   ConcussionMax = 240   pPenetrationMin = 140   pPenetrationMax = 275   pConcussionMin = 130   pConcussionMax = 265  ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   PenetrationMin = 1   PenetrationMax = 55   ConcussionMin = 35   ConcussionMax = 70   pPenetrationMin = 5   pPenetrationMax = 75   pConcussionMin = 40   pConcussionMax = 90    Else   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 0   ConcussionMax = 0    pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 0   pConcussionMax = 0  EndIfElseif ( myWeapon.HasKeyword(WeapTypeBattleaxe))  if ( myWeapon.HasKeyword(WeapMaterialIron))   PenetrationMin = 108   PenetrationMax = 215   ConcussionMin = 93   ConcussionMax = 175   pPenetrationMin = 133   pPenetrationMax = 265   pConcussionMin = 113   pConcussionMax = 215  ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   PenetrationMin = 110   PenetrationMax = 220   ConcussionMin = 95   ConcussionMax = 180   pPenetrationMin = 135   pPenetrationMax = 270   pConcussionMin = 115   pConcussionMax = 220  ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   PenetrationMin = 113   PenetrationMax = 225   ConcussionMin = 98   ConcussionMax = 185   pPenetrationMin = 138   pPenetrationMax = 275   pConcussionMin = 118   pConcussionMax = 225  ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   PenetrationMin = 105   PenetrationMax = 210   ConcussionMin = 100   ConcussionMax = 190    pPenetrationMin = 130   pPenetrationMax = 260   pConcussionMin = 120   pConcussionMax = 230  ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   PenetrationMin = 125   PenetrationMax = 250   ConcussionMin = 110   ConcussionMax = 220   pPenetrationMin = 150   pPenetrationMax = 300   pConcussionMin = 130   pConcussionMax = 260  ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   PenetrationMin = 145   PenetrationMax = 290   ConcussionMin = 130   ConcussionMax = 260    pPenetrationMin = 170   pPenetrationMax = 340   pConcussionMin = 150   pConcussionMax = 300  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   PenetrationMin = 128   PenetrationMax = 255   ConcussionMin = 135   ConcussionMax = 270   pPenetrationMin = 155   pPenetrationMax = 310   pConcussionMin = 155   pConcussionMax = 310  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   PenetrationMin = 150   PenetrationMax = 270   ConcussionMin = 135   ConcussionMax = 270   pPenetrationMin = 175   pPenetrationMax = 350   pConcussionMin = 155   pConcussionMax = 310  ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   PenetrationMin = 120   PenetrationMax = 240   ConcussionMin = 105   ConcussionMax = 200   pPenetrationMin = 145   pPenetrationMax = 290   pConcussionMin = 125   pConcussionMax = 240  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   PenetrationMin = 135   PenetrationMax = 270   ConcussionMin = 120   ConcussionMax = 240   pPenetrationMin = 160   pPenetrationMax = 320   pConcussionMin = 140   pConcussionMax = 280  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   PenetrationMin = 107   PenetrationMax = 213   ConcussionMin = 97   ConcussionMax = 183   pPenetrationMin = 132   pPenetrationMax = 163   pConcussionMin = 117   pConcussionMax = 123  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   PenetrationMin = 118   PenetrationMax = 235   ConcussionMin = 97   ConcussionMax = 183   pPenetrationMin = 142   pPenetrationMax = 185   pConcussionMin = 117   pConcussionMax = 123  ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   PenetrationMin = 155   PenetrationMax = 310   ConcussionMin = 140   ConcussionMax = 280   pPenetrationMin = 180   pPenetrationMax = 360   pConcussionMin = 160   pConcussionMax = 320  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   PenetrationMin = 175   PenetrationMax = 350   ConcussionMin = 160   ConcussionMax = 320   pPenetrationMin = 200   pPenetrationMax = 400   pConcussionMin = 180   pConcussionMax = 360  ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 40   ConcussionMax = 80   pPenetrationMin = 10   pPenetrationMax = 90   pConcussionMin = 55   pConcussionMax = 110  Else   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 0   ConcussionMax = 0   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 0   pConcussionMax = 0  EndIfElseif ( myWeapon.HasKeyword(WeapTypeMace))  if ( myWeapon.HasKeyword(WeapMaterialIron))   PenetrationMin = 65   PenetrationMax = 145   ConcussionMin = 75   ConcussionMax = 155   pPenetrationMin = 80   pPenetrationMax = 170   pConcussionMin = 90   pConcussionMax = 180  ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   PenetrationMin = 68   PenetrationMax = 150   ConcussionMin = 78   ConcussionMax = 160   pPenetrationMin = 83   pPenetrationMax = 175   pConcussionMin = 93   pConcussionMax = 185  ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   PenetrationMin = 70   PenetrationMax = 155   ConcussionMin = 80   ConcussionMax = 165   pPenetrationMin = 85   pPenetrationMax = 180   pConcussionMin = 95   pConcussionMax = 190  ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   PenetrationMin = 75   PenetrationMax = 160   ConcussionMin = 85   ConcussionMax = 170   pPenetrationMin = 90   pPenetrationMax = 185   pConcussionMin = 100   pConcussionMax = 195    ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   PenetrationMin = 85   PenetrationMax = 180   ConcussionMin = 95   ConcussionMax = 190   pPenetrationMin = 100   pPenetrationMax = 205   pConcussionMin = 110   pConcussionMax = 215  ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   PenetrationMin = 95   PenetrationMax = 200   ConcussionMin = 105   ConcussionMax = 210    pPenetrationMin = 110   pPenetrationMax = 225   pConcussionMin = 120   pConcussionMax = 235  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   PenetrationMin = 80   PenetrationMax = 185   ConcussionMin = 110   ConcussionMax = 218   pPenetrationMin = 102   pPenetrationMax = 210   pConcussionMin = 125   pConcussionMax = 242  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   PenetrationMin = 100   PenetrationMax = 208   ConcussionMin = 110   ConcussionMax = 218   pPenetrationMin = 115   pPenetrationMax = 232   pConcussionMin = 125   pConcussionMax = 242  ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   PenetrationMin = 80   PenetrationMax = 170   ConcussionMin = 90   ConcussionMax = 180   pPenetrationMin = 95   pPenetrationMax = 195   pConcussionMin = 105   pConcussionMax = 205  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   PenetrationMin = 90   PenetrationMax = 190   ConcussionMin = 100   ConcussionMax = 200   pPenetrationMin = 105   pPenetrationMax = 215   pConcussionMin = 115   pConcussionMax = 225  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   PenetrationMin = 63   PenetrationMax = 143   ConcussionMin = 79   ConcussionMax = 163   pPenetrationMin = 68   pPenetrationMax = 168   pConcussionMin = 94   pConcussionMax = 188  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   PenetrationMin = 75   PenetrationMax = 165   ConcussionMin = 79   ConcussionMax = 163   pPenetrationMin = 90   pPenetrationMax = 185   pConcussionMin = 94   pConcussionMax = 188  ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   PenetrationMin = 105   PenetrationMax = 215   ConcussionMin = 115   ConcussionMax = 225   pPenetrationMin = 120   pPenetrationMax = 240   pConcussionMin = 130   pConcussionMax = 250  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   PenetrationMin = 115   PenetrationMax = 240   ConcussionMin = 125   ConcussionMax = 250   pPenetrationMin = 130   pPenetrationMax = 265   pConcussionMin = 140   pConcussionMax = 275  ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 10   ConcussionMax = 35   pPenetrationMin = 1   pPenetrationMax = 55   pConcussionMin = 50   pConcussionMax = 100  Else   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 0   ConcussionMax = 0    pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 0   pConcussionMax = 0  EndIfElseif ( myWeapon.HasKeyword(WeapTypeWarhammer))  if ( myWeapon.HasKeyword(WeapMaterialIron))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 108   ConcussionMax = 215   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 133   pConcussionMax = 265  ElseIf ( myWeapon.HasKeyword(WeapMaterialSteel))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 110   ConcussionMax = 220   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 135   pConcussionMax = 270  ElseIf ( myWeapon.HasKeyword(WeapMaterialImperial))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 113   ConcussionMax = 225   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 138   pConcussionMax = 275  ElseIf ( myWeapon.HasKeyword(WeapMaterialSilver))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 115   ConcussionMax = 230   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 140   pConcussionMax = 280  ElseIf ( myWeapon.HasKeyword(WeapMaterialOrcish))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 125   ConcussionMax = 250   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 150   pConcussionMax = 300  ElseIf ( myWeapon.HasKeyword(WeapMaterialDwarven))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 145   ConcussionMax = 290    pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 170   pConcussionMax = 340  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmer))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 150   ConcussionMax = 300   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 175   pConcussionMax = 350  ElseIf ( myWeapon.HasKeyword(WeapMaterialFalmerHoned))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 155   ConcussionMax = 305   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 175   pConcussionMax = 355  ElseIf ( myWeapon.HasKeyword(WeapMaterialElven))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 120   ConcussionMax = 240   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 145   pConcussionMax = 290  ElseIf ( myWeapon.HasKeyword(WeapMaterialGlass))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 135   ConcussionMax = 270   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 160   pConcussionMax = 320  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugr))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 105   ConcussionMax = 213   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 136   pConcussionMax = 273  ElseIf ( myWeapon.HasKeyword(WeapMaterialDraugrHoned))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 105   ConcussionMax = 218   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 136   pConcussionMax = 278  ElseIf ( myWeapon.HasKeyword(WeapMaterialEbony))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 155   ConcussionMax = 310   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 180   pConcussionMax = 360  ElseIf ( myWeapon.HasKeyword(WeapMaterialDaedric))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 175   ConcussionMax = 350   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 200   pConcussionMax = 400  ElseIf ( myWeapon.HasKeyword(WeapMaterialWood))   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 50   ConcussionMax = 100   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 75   pConcussionMax = 150  Else   PenetrationMin = 0   PenetrationMax = 0   ConcussionMin = 0   ConcussionMax = 0   pPenetrationMin = 0   pPenetrationMax = 0   pConcussionMin = 0   pConcussionMax = 0    EndIfEndIfendFunctionFunction SetDamage()myPenetrationMin = PenetrationMinmyPenetrationMax = PenetrationMaxmyCutMin = CutMinmyCutMax = CutMaxmyConcussionMin = ConcussionMinmyConcussionMax = ConcussionMaxmypPenetrationMin = pPenetrationMinmypPenetrationMax = pPenetrationMaxmypConcussionMin = pConcussionMinmypConcussionMax = pConcussionMaxendFunction; Function SetDamage(); myPenetrationMin = PenetrationMin; myPenetrationMax = PenetrationMax; myCutMin = CutMin; myCutMax = CutMax; myConcussionMin = ConcussionMin; myConcussionMax = ConcussionMax; mypPenetrationMin = pPenetrationMin; mypPenetrationMax = pPenetrationMax; mypConcussionMin = pConcussionMin; mypConcussionMax = pConcussionMax; endFunction; Function GetNormalDamage(int a, int b, int c, int d, int e, int f) Global; int akPenetrationMin; int akPenetrationMax ; int akCutMin; int akCutMax; int akConcussionMin; int akConcussionMax; akPenetrationMin = myPenetrationMin; akPenetrationMax = myPenetrationMax; akCutMin = myCutMin; akCutMax = myCutMax; akConcussionMin = myConcussionMin; akConcussionMax = myConcussionMax; return akPenetrationMin; return akPenetrationMax; return akCutMin; return akCutMax; return akConcussionMin; return akConcussionMax; endFunction; Function GetPowerDamage(int a, int b, int c, int d, int e, int f) Global; int akPenetrationMin; int akPenetrationMax ; int akCutMin; int akCutMax; int akConcussionMin; int akConcussionMax; akPenetrationMin = mypPenetrationMin; akPenetrationMax = mypPenetrationMax; akCutMin = myCutMin; akCutMax = myCutMax; akConcussionMin = mypConcussionMin; akConcussionMax = mypConcussionMax; return akPenetrationMin; return akPenetrationMax; return akCutMin; return akCutMax; return akConcussionMin; return akConcussionMax; endFunctionEvent OnObjectEquipped(Form akBaseObject, ObjectReference akReference)if akBaseObject as ArmorResistPenetration = 0ResistCut = 0ResistConcussion = 0DetectArmorResistances(Target)endIfif akBaseObject as WeaponArrowPenetration = 0ArrowConcussion = 0PenetrationMin = 0PenetrationMax = 0CutMin = 0CutMax = 0ConcussionMin = 0ConcussionMax = 0pPenetrationMin = 0pPenetrationMax = 0pConcussionMin = 0pConcussionMax = 0myWeapon = (akBaseObject as Weapon)DetectWeaponDamages(myWeapon)SetDamage()endIfendEventEvent OnObjectUnequipped(Form akBaseObject, ObjectReference akReference)if akBaseObject as ArmorResistPenetration = 0ResistCut = 0ResistConcussion = 0DetectArmorResistances(Target)endIfif akBaseObject as WeaponArrowPenetration = 0ArrowConcussion = 0PenetrationMin = 0PenetrationMax = 0CutMin = 0CutMax = 0ConcussionMin = 0ConcussionMax = 0pPenetrationMin = 0pPenetrationMax = 0pConcussionMin = 0pConcussionMax = 0DetectWeaponDamages(myWeapon)SetDamage()endIfendEventEvent OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, \bool abBashAttack, bool abHitBlocked)aPenetrationMin = 0aPenetrationMax = 0aCutMin = 0aCutMax = 0aConcussionMin = 0aConcussionMax = 0apPenetrationMin = 0apPenetrationMax = 0apConcussionMin = 0apConcussionMax = 0aPenetrationMin = akAggressor.(myPenetrationMin as int)aPenetrationMax = akAggressor.myPenetrationMaxaCutMin = akAggressor.myCutMinaCutMax = akAggressor.myCutMaxaConcussionMin = akAggressor.myConcussionMinaConcussionMax = akAggressor.myConcussionMaxapPenetrationMin = akAggressor.mypPenetrationMinapPenetrationMax = akAggressor.mypPenetrationMaxapConcussionMin = akAggressor.mypConcussionMinapConcussionMax = akAggressor.mypConcussionMax;akAggressor.GetNormalDamage(aPenetrationMin , aPenetrationMax , aCutMin , aCutMax , aConcussionMin , aConcussionMax);akAggressor.GetPowerDamage(aPenetrationMin , aPenetrationMax , aCutMin , aCutMax , aConcussionMin , aConcussionMax)  ; Debug.MessageBox(" Target " + Target )  ; Debug.MessageBox(" PenetrationSuccess " + PenetrationSuccess + " Cutsuccess " + Cutsuccess + " ConcussionSuccess " + ConcussionSuccess )  ; Debug.MessageBox(" PowerAttack " + abPowerAttack + " ResistPenetration " + ResistPenetration + " PenetrationMin " + PenetrationMin + " PenetrationMax " + PenetrationMax + " PenetrationRoll " + PenetrationRoll + " ResistCut " + ResistCut + " CutMin " + CutMin + " CutMax " + CutMax + " CutRoll " + CutRoll + " ResistConcussion " + ResistConcussion + " ConcussionMin " + ConcussionMin + " ConcussionMax " + ConcussionMax + " ConcussionRoll " + ConcussionRoll )   Debug.MessageBox(" aPenetrationMin " + aPenetrationMin + " aPenetrationMax " + aPenetrationMax + " aCutMin " + aCutMin + " aCutMax " + aCutMax + " aConcussionMin " + aConcussionMin + " aConcussionMax " + aConcussionMax )EndEvent


This is the next evolution of my script from http://www.gamesas.com/topic/1353228-script-optimization-and-speed/. What I've done is moved the weapon detection and damage values to OnEquip and OnUnequip events. I'm hoping that it will be faster doing that like that and just calling to get the set values during an OnHit event instead of going through all of it every single time the actor is hit.
User avatar
Sophh
 
Posts: 3381
Joined: Tue Aug 08, 2006 11:58 pm

Post » Tue Jun 19, 2012 8:05 pm

What is exactly what you want to do that doesn't let you?
User avatar
Juliet
 
Posts: 3440
Joined: Fri Jun 23, 2006 12:49 pm

Post » Tue Jun 19, 2012 11:32 am

Well, I'm getting compile errors. And I quoted the script with a change I made. The line that says...

"aPenetrationMin = akAggressor.(myPenetrationMin as int)"

... when it is this instead...

"aPenetrationMin = akAggressor.myPenetrationMin"
It gives me numerous errors like this...

(1610,31): myPenetrationMin is not a property on script objectreference or one of its parents
(1610,1): type mismatch while assigning to a int (cast missing or types unrelated)


It does that for every similar proceeding line. So I did try things like...

(akAggressor as SAWDOnHit).myPenetrationMin

and...

(akAggressor as int).myPenetrationMin
And so on, but I'm not sure what I need to do exactly.


I'm wanting to get the "myPenetrationMin" value from another actor that has this script/magic effect attached to it. That way, I can get the damage values from the actor (akAggressor) that hit this actor through the OnHit event.
User avatar
lauren cleaves
 
Posts: 3307
Joined: Tue Aug 15, 2006 8:35 am

Post » Tue Jun 19, 2012 11:00 pm

(1610,31): myPenetrationMin is not a property on script objectreference or one of its parents
(1610,1): type mismatch while assigning to a int (cast missing or types unrelated)

This error is telling you a couple things don't make sense to the compiler:
  • akAggressor is declared as type ObjectReference
  • type ObjectReference doesn't have a property called myPenetrationMin
  • I don't know what to do about this
  • I give up
In some cases, a typecast like this might help:
  • (akAggressor.SAWDOnHit).myPenetrationMin
But in this case it won't...because SAWDOnHit extends ActiveMagicEffect and akAggressor is an actor. You might be able to get this working by storing the values you want to transfer in actor values (http://www.creationkit.com/GetActorValue_-_Actor). There are ten actor values available for custom uses.

So when an actor determines its own damage value, you can call SetActorValue() on that actor to set the value, then when another actor is hit it can use GetActorValue() on the akAggressor to access the value that the first actor stored there.

There might be a better way to do this.

One more note here, you might want to break this script out into several pieces as it seems you're trying to write one script that works as an ActiveMagicEffect script and an Actor script at the same time. I don't know if that will ever work. If I were the one writing this script I would save a copy in the current state and gut the script down to the bare bones to see if I can get that to work, and once that works I can refer to my saved backup to put back in all the conditionals.
User avatar
KU Fint
 
Posts: 3402
Joined: Mon Dec 04, 2006 4:00 pm

Post » Tue Jun 19, 2012 4:11 pm

Well, I'm getting compile errors. And I quoted the script with a change I made. The line that says...

"aPenetrationMin = akAggressor.(myPenetrationMin as int)"

... when it is this instead...

"aPenetrationMin = akAggressor.myPenetrationMin"

Try this:

aPenetrationMin = (akAggressor as SAWDonHit).myPenetrationMin

You have to cast to the script the properties are attached to, you see...
User avatar
Pumpkin
 
Posts: 3440
Joined: Sun Jun 25, 2006 10:23 am

Post » Tue Jun 19, 2012 6:34 pm

Thank you both :-)


There might be a better way to do this.

Yeah, I wouldn't mind splitting things up at all. But I fear I'm not quite sure how. The reason I'm using a script that extends an ActiveMagicEffect is because I'm using a racial spell to apply it universally. I can also give each race its own version for other issues (magical creatures being vulnerable to silver for instance).

I would like to use scripts that extend an Actor, but I don't know how to do that in a simple matter. Is there anyway to use my current script to apply another script (that extends an Actor) on the same actor? That seems like it would be the easiest way of doing things, but I don't know if it's possible.

I was also having issues earlier in writing the script because I was using a MagicEffect script instead of an Actor one, but I managed to get it to recognize the target of the effect (thanks to some helpful people here). So I was hoping there was a similar workaround here.

I am trying to keep the script/mod universally compatible (to what extent I can), so I would hate to start using limited custom variable/slots, etc.


Try this:

aPenetrationMin = (akAggressor as SAWDonHit).myPenetrationMin

You have to cast to the script the properties are attached to, you see...

Hmm, I tried it, but it now gave this error...

(1610,32): cannot cast a objectreference to a sawdonhit, types are incompatible
User avatar
April D. F
 
Posts: 3346
Joined: Wed Mar 21, 2007 8:41 pm

Post » Tue Jun 19, 2012 1:01 pm

Hmm, I tried it, but it now gave this error...

(1610,32): cannot cast a objectreference to a sawdonhit, types are incompatible

Hmn...that's because your script extends ActiveMagicEffect...which it has to to catch the OnEffectStart event...You may have to construct a data structure to store both a reference to the actors, and the new properties, so you can look up the properties by using the actors as references...I hate to say this, but linked lists may have your solution...Make a data item (I like to use activators) with a script on it with just the properties, functions and an actor reference,
Make the script extend ObjectReference then so you can cast to it more easily, and use that script as a variable in your magic effect:

Scriptname SawDonData Extends ObjectReferenceActor Property Target auto; Whose data is this?; Insert all the other stuff here.

Then use that item type for the data nodes in a linked list (See my http://www.gamesas.com/topic/1353641-tools-implementing-a-linked-list-in-papyrus/) and when the OnHit function goes off, you will want to search through the current list until your akTarget reference matches the "Target" property of one of the data items...if you get to the end of the list without finding it, you would make a new list node and data item, put the akTarget reference in the "Target" property, and initialize the new data item with the appropriate information...

Either that, or add a script to every single actor in the game...Linked lists will let you do it dynamically at run time.
User avatar
Kelly John
 
Posts: 3413
Joined: Tue Jun 13, 2006 6:40 am

Post » Tue Jun 19, 2012 9:23 pm

One more note here, you might want to break this script out into several pieces as it seems you're trying to write one script that works as an ActiveMagicEffect script and an Actor script at the same time. I don't know if that will ever work. If I were the one writing this script I would save a copy in the current state and gut the script down to the bare bones to see if I can get that to work, and once that works I can refer to my saved backup to put back in all the conditionals.

I have the same concerns and I believe the suggestion to use a bare boned version for testing is a good idea.

I would like to use scripts that extend an Actor, but I don't know how to do that in a simple matter. Is there anyway to use my current script to apply another script (that extends an Actor) on the same actor? That seems like it would be the easiest way of doing things, but I don't know if it's possible.

Take a look at http://www.gamesas.com/topic/1349649-dynamically-attaching-scripts-to-actors-near-the-player/ to get player and nearest npcs to apply scripts with the events to the aliases if you got stuck in that.
User avatar
Chenae Butler
 
Posts: 3485
Joined: Sat Feb 17, 2007 3:54 pm

Post » Tue Jun 19, 2012 2:46 pm

Hahaha, thank you all... it appears I'm going to have to figure out the best method of doing this.

I will ask, though, is there a way to use tokens to store and retrieve the values I want with my current script? I don't really know exactly what they are or how they work, but is that also an option? If so, what would be the disadvantage of that?
User avatar
Ells
 
Posts: 3430
Joined: Thu Aug 10, 2006 9:03 pm

Post » Tue Jun 19, 2012 4:15 pm

I just read where Duke Patrick said that tokens cannot currently be used to store/call values/variables for the actors they are attached to like they could in Oblivion. Does that mean that tokens are not a realistic alternative now?
User avatar
ImmaTakeYour
 
Posts: 3383
Joined: Mon Sep 03, 2007 12:45 pm

Post » Tue Jun 19, 2012 2:51 pm

Um, to be clear what I said was that they could not store them without concern that they would get reset to nul for various reasons.

You most certainly CAN store values in tokens, but do not expect the stored data to be there safe forever.

One way I have "heard" to help keep them from resetting is to run a constantly loop such as with register for single update over and over.


I just read where Duke Patrick said that tokens cannot currently be used to store/call values/variables for the actors they are attached to like they could in Oblivion. Does that mean that tokens are not a realistic alternative now?
User avatar
Eric Hayes
 
Posts: 3392
Joined: Mon Oct 29, 2007 1:57 am

Post » Tue Jun 19, 2012 6:01 pm

Ah, thank you very much! That's a relief! :-D
I'm in the process of changing my script to extend an Actor, but I may end up using tokens if needed.
Modding/scripting is so complex! :-P
User avatar
Daniel Brown
 
Posts: 3463
Joined: Fri May 04, 2007 11:21 am


Return to V - Skyrim