[RELZ] Supreme Magicka V0.89, Beta 0.90, Thread 26

Post » Wed Dec 08, 2010 3:57 am

There's no easy way to automatically diff scripts across two mods but you can export the scripts using bash and diff between two directories with any good multi diff utility.


Haha - I was actually trying to remove that line from my previous post. TES4Gecko did highlight the differences for me. They were changes to records, not scripts.
User avatar
brian adkins
 
Posts: 3452
Joined: Mon Oct 01, 2007 8:51 am

Post » Tue Dec 07, 2010 8:32 pm

I know OBSE 19 is not playing nicely with a couple of scripts.

Breaking released mods isn't exactly on OBSE's feature list. If you can give me some details - e.g. what errors appear to be occurring, what scripts are involved, etc - I will be happy to look into it more closely.
User avatar
Emzy Baby!
 
Posts: 3416
Joined: Wed Oct 18, 2006 5:02 pm

Post » Tue Dec 07, 2010 10:59 pm

@Migck: Cheers, it is very easy for the actor loops to get delayed. I have a isundead and isdeadra function already similar in my unreleased code. Nice idea with the vampire shader. Yes tokens run at different speeds depending on the actors state if i recall. I may keep the quest and decrease the delay when detect life (magic/items) is active on player so its more responsive.

@andalaybay: Thanks for those. I really want to fix the spell costs being larger when the extra second duration is added without having to fudge the spell costs to be a bit lower.

You could probrobrably have done a manual comparison using Tes4View as well?

@scruggsywuggsy the ferret: :blush: Ah yes. Indeed, unfortunately i looked into it a while ago so cannot remember what I did or if I changed code in my unreleased version to fix it. I had lots of reports of using the stable version of supreme magicka built on obse 17 throwing script errors when using 18 and it appears it still affects 19. When i started upgrading i was getting similar obse script errors but it no longer appears to do any script errors in my latest unreleased version (so far)

Following token script that gets added to all npcs in the cell is reportably the most common script to break

It was first reported in february 2010 by Gabba
Found this today in my obse.log:

Error in script b400ac85Too few operands for operator := File: SupremeMagicka.esp Offset: 0x27C6 Command: Error in script b400ac85An expression failed to evaluate to a valid result File: SupremeMagicka.esp Offset: 0x27C6 Command:

This is with Supreme Magicka v0.89b. The game seems to have continued for quite a while after that error, so at least it doesn't cause an immediate CTD.
I imagine that since SupremeMagicka.esp was loaded at position b4 in my load order, the faulty script is 0100AC85 zzSMGeneralTokenScript.
Are you able to find the precise line of the error in the script, with this info? I can't give steps to reproduce the bug since I don't know what happened exactly.
I looked at my ConScribe log and there's nothing suspicious there; if you need something else, let me know.


Culprit script it refers to is below.

1             ;*****************************************************************************************************************2             ; Token used to detect stealth magic attacks and apply magic weaknesses where needed 3             ;*****************************************************************************************************************4             5      0000   scn zzSMGeneralTokenScript6             7             ref Self8             short SneakBonus9             short SetBonus10            float Smess11            float timer12            short sPlayerSpells13            short sCount14            short sSumCount15            short sSummons16            short index17            ref Caster18            ref Spell19            float fSaveddamage20            float magnitude21            float fLastResistMagic22            short bisinvisible23            float fHealth24            float fLastHealth25            long effect26            ref curspell27            28            short bPlayerDetected29            float fPlayerDistance30            short bfirstrundone31            32     0004   Begin OnAdd33            34     0010   Set Self to GetContainer35     001F   set timer to 136            37     002A   End38            39     002E   Begin GameMode40            41     0038   If Self.GetIsReference Player42     004E      RemoveMe43     0054   Elseif Self == 044     0065      Set Self to GetContainer45     0074      Return46     0078   elseif Self.GetDead == 1 || Self.GetDisabled == 1 || Player.GetDead || Player.GetDisabled47     00B7      RemoveMe48     00BD   Endif49            50     00C1   set bPlayerDetected to Self.GetDetected Player51     00D8   set fPlayerDistance to Self.GetDistance Player52            53     00EF   if zzSMQuest.fMagicDamage > 0 && UninstallMode == 054     010E      if fsaveddamage != zzSMQuest.fMagicDamage || Self.GetTotalAEMagnitude RSMA != fLastResistMagic55     013C         set Magnitude to Magnitude * -156     014F         Self.modactorvalue ResistMagic Magnitude57     015E         set fsaveddamage to zzSMQuest.fMagicDamage58     016E         set fLastResistMagic to Self.GetTotalAEMagnitude RSMA59     0185         if fLastResistMagic > 060     0195            set Magnitude to (zzSMQuest.fMagicDamage * 100) * -(1 - fLastResistMagic/100)61     01BD         else62     01C3            set Magnitude to zzSMQuest.fMagicDamage * -10063     01DB         endif64                  ;set Magnitude to zzSMQuest.fMagicDamage * -10065     01DF         Self.modactorvalue ResistMagic Magnitude66     01EE      endif67     01F2      set fLastResistMagic to Self.GetTotalAEMagnitude RSMA68     0209   elseif Magnitude != 069     021A      set Magnitude to Magnitude * -170     022D      Self.modactorvalue ResistMagic Magnitude71     023C      set Magnitude to 072     0247      set fSaveddamage to 073     0252   endif74            75     0256      set fHealth to Self.GetAV Health76     026C   if zzSMTokenScript.rTarget == Self77               ;if zzSMTokenScript.bplayercast == 1 && fHealth < fLastHealth && Self.GetDistance Player <= 17578               ;   set zzSMTokenScript.bplayercast to 079               ;   if SMFireTokenOn && zzSMTokenScript.bInFire == 1 && Self.GetItemCount zzSMFireToken <= 080               ;      Self.AddItemNS zzSMFireToken 181               ;   endif82               ;   if SMFrostTokenOn && zzSMTokenScript.bInFrost == 1 && Self.GetItemCount zzSMFrostToken <= 083               ;      Self.AddItemNS zzSMFrostToken 184               ;   endif85               ;   if SMShockTokenOn && zzSMTokenScript.bInShock == 1 && Self.GetItemCount zzSMShockToken <= 086               ;      Self.AddItemNS zzSMShockToken 187               ;   endif88               ;   if SMDamageHealthTokenOn && zzSMTokenScript.bInDamage == 1 && Self.GetItemCount zzSMDamageHealthToken <= 089               ;      Self.AddItemNS zzSMDamageHealthToken 190               ;   endif91               ;   if RestoreDamageEnabled && zzSMTokenScript.bInRestore == 1 && Self.GetItemCount zzSMUndeadRestoreToken <= 092               ;      Self.AddItemNS zzSMUndeadRestoreToken 193               ;   endif94               ;endif95     0282      if zzSMTokenScript.bplayerattack && fHealth < fLastHealth && fPlayerDistance<= 175*zzSMTokenScript.Wreach96     02B5         set zzSMTokenScript.bplayerattack to 097     02C3         if SMFireTokenOn && zzSMTokenScript.bEInFire > 0 && Self.GetItemCount zzSMFireToken <= 098     02F3            Self.AddItemNS zzSMFireToken 199     0305         endif100    0309         if SMFrostTokenOn && zzSMTokenScript.bEInFrost > 0 && Self.GetItemCount zzSMFrostToken <= 0101    0339            Self.AddItemNS zzSMFrostToken 1102    034B         endif103    034F         if SMShockTokenOn && zzSMTokenScript.bEInShock > 0 && Self.GetItemCount zzSMShockToken <= 0104    037F            Self.AddItemNS zzSMShockToken 1105    0391         endif106    0395         if SMDamageHealthTokenOn && zzSMTokenScript.bEInDamage > 0 && Self.GetItemCount zzSMDamageHealthToken <= 0107    03C5            Self.AddItemNS zzSMDamageHealthToken 1108    03D7         endif109    03DB         if RestoreDamageEnabled && zzSMTokenScript.bEInRestore > 0 && Self.GetItemCount zzSMUndeadRestoreToken <= 0110    040B            Self.AddItemNS zzSMUndeadRestoreToken 1111    041D         endif112    0421      endif113    0425   endif114    0429   set fLastHealth to fHealth115           116           ;set timer to timer - GetSecondsPassed117           118           ;if timer <= 0119           ;set timer to 1120           121           122    0436   set sCount to 0123    0441   set sSumCount to 0124    044C   set index to Self.GetActiveEffectCount125    045E      while index > 0126    0479         set index to index - 1127    048A         set Caster to Self.GetNthActiveEffectCaster index128    04A1         set Spell to Self.GetNthActiveEffectMagicItem index129    04B8             set effect to Self.GetNthActiveEffectCode index130    04CF         if MEUsesCreatureC effect131    04E2            if sSumCount == 0132    04F3               set curspell to Spell133    0500            endif134    0504            set sSumCount to sSumCount + 1135    0515         endif136    0519         if Caster.IsReference Player && IsSpellHostile Spell137    053D            set sCount to sCount + 1138    054E         endif139    0552      loop140           141    0556   if sCount > sPlayerSpells && SetBonus == 1 && bPlayerDetected && bfirstrundone142    0582         set Smess to (SneakBonus * -1 + 100) / 100143    05A1         Message "Magical Sneak Attack for %.1fx damage!" Smess144    05D8   endif145    05DC   set sPlayerSpells to sCount146           147           ; Adds the AIToken for multiple summons148    05E9   if sSumCount > sSummons && Self.GetItemCount zzSMAIConjurationToken == 0 && bfirstrundone149    0618      set zzSMConjurationControl.AICurspell to curspell150    0628      Self.AddItem zzSMAIConjurationToken 1151    063A   endif152    063E   set sSummons to sSumCount153           154    064B   set bfirstrundone to 1   ;So all the spells that start active all the npc are not counted as new155           156    0656   If fPlayerDistance > 4000 && Self.GetInSameCell Player || SMStealthTokenOn <= 0 || UninstallMode || SMDebugMode1157    0694      If SetBonus > 0158                 ;Message "Sneak Bonus Off 2"159    06A4         Set SetBonus to 0160    06AF         Set SneakBonus to -SneakBonus161    06BE         Self.ModAV ResistMagic SneakBonus162    06CD      Endif163    06D1      if Magnitude != 0164    06E2         set Magnitude to Magnitude * -1165    06F5         Self.modactorvalue ResistMagic Magnitude166    0704         set Magnitude to 0167    070F         set fSaveddamage to 0168    071A      endif169    071E      RemoveMe170    0724   Endif171           172    0728   If Player.IsSneaking && bPlayerDetected == 0173    0745      If SetBonus == 0 && Player.GetLOS Self174                 ;Message "Sneak Bonus On"175    0767         Set SetBonus to 1176    0772         Set SneakBonus to Player.GetBaseAV Sneak / 25177    078D         If SneakBonus >= 4178                    ;Set SneakBonus to 4179    079E            set SneakBonus to (zzSMQuest.fMasterMagicSneakMult - 1) * -100180    07BA         elseif SneakBonus >= 3181    07CB            set SneakBonus to (zzSMQuest.fExpertMagicSneakMult - 1) * -100182    07E7         elseif SneakBonus >= 2183    07F8            set SneakBonus to (zzSMQuest.fJourneymanMagicSneakMult - 1) * -100184    0814         elseif SneakBonus >= 1185    0825            set SneakBonus to (zzSMQuest.fApprenticeMagicSneakMult - 1) * -100186    0841         else187    0847            set SneakBonus to (zzSMQuest.fNoviceMagicSneakMult - 1) * -100188    0863         Endif189                 ;Set SneakBonus to SneakBonus * -25190    0867         Self.ModAV ResistMagic SneakBonus191    0876      Endif192    087A   ElseIf SetBonus > 0193                 ;Message "Sneak Bonus Off"194    088A         Set SetBonus to 0195    0895         Set SneakBonus to -SneakBonus196    08A4         Self.ModAV ResistMagic SneakBonus197    08B3   Endif198           199           ;endif200           201    08B7   End202           


Only difference between the stable version and my unreleased version i can see is its compiled on OBSE 19 and on line 125 we now limit the max number of active effects to iterate over, because people were reporting major slow downs due to lots of active effects being found on npcs with certain mods.
125    045E   set totalcount to index126    046B      while index > 0 && totalcount - index < 60

User avatar
James Baldwin
 
Posts: 3366
Joined: Tue Jun 05, 2007 11:11 am

Post » Tue Dec 07, 2010 5:56 pm

I hope you do use an OnAdd block from a token to play the detect life shader. I was struggling with using a 'PMS shader verylittleduration' quest script system like your original, until I realized that calling PMS shader only once, with no duration specified, will make the shader play indefinitely until you SMS it, and avoids instances from the same shader from piling up on the reference and making it look radioactive. It even seems to work that way with the vanilla Detect Life magic effect. So really, using the OnAdd block of a token is the way to go with this.

I also fixed telekinesis script added effect not really working on anything aside from loose items and NPCs. The script effect couldn't get info about its own spell in the ScriptEffectStart block when firing on a non alive thing, like activators and containers. I ensured that TelMag variable from zzSMSpellControl script always had the magnitude of your current spells' total telekinesis effects (which for telekinesis equals range of action), instead of only the highest ones ( I made it to != check instead of > check, TelRange isn't needed since telekinesis only has OnTarget range), and the script effect would get the telekinesis magnitude, a.k.a range from zzSMSpellControl.TelMag upon impacting a valid reference. And at last I could pull levers and pick up containers with it.

EDIT. of course, I forgot about a probably even simpler solution, an OnMagicEffectHit TELE event handler
User avatar
maya papps
 
Posts: 3468
Joined: Mon Aug 07, 2006 3:44 pm

Post » Tue Dec 07, 2010 1:30 pm

@migck: Yes, playing it only once indefinatly on a token is the way to go. OnAdd block is used in some way for all SM tokens.

Nice work with the telekinisis changes. I was thinking about seeing if i could use an event handler for telikinesis anyway as it fires when any magic item hits an activatible reference so then its just "if not actor activate" which is nice and simple.
User avatar
marina
 
Posts: 3401
Joined: Tue Mar 13, 2007 10:02 pm

Post » Wed Dec 08, 2010 1:40 am

@andalaybay: Thanks for those. I really want to fix the spell costs being larger when the extra second duration is added without having to fudge the spell costs to be a bit lower.

You could probrobrably have done a manual comparison using Tes4View as well?


I used TES4Edit to do the changes (copying changes from UOP, flipping flag to manual cost). TES4Gecko reported the differences between the original 0.89 and mine. Only used the CS when I fixed the Restore Might (so it could calculate the spell cost).

I tried setting the durations to 0 and I couldn't get them to stay that way. That was a while ago, so I'm not sure what the issue was.

I use stealth magic attacks all the time and I've never had those errors crop up. Really weird...
User avatar
Racheal Robertson
 
Posts: 3370
Joined: Thu Aug 16, 2007 6:03 pm

Post » Wed Dec 08, 2010 4:57 am

SM needs spells to be 1 second so we can determine the original casting spell. So it forces them to be 1 second in duration if they are not already during gameplay.
User avatar
Lou
 
Posts: 3518
Joined: Wed Aug 23, 2006 6:56 pm

Post » Tue Dec 07, 2010 10:51 pm

SM needs spells to be 1 second so we can determine the original casting spell. So it forces them to be 1 second in duration if they are not already during gameplay.


Aha, so that's what it was :) I didn't want to pour through all the scripts, so I just left it alone! Did have me wondering though...
User avatar
GabiiE Liiziiouz
 
Posts: 3360
Joined: Mon Jan 22, 2007 3:20 am

Post » Tue Dec 07, 2010 3:08 pm

@Strategy Master: Thanks, that's weird considering your script doesn't actually *use* operator := at all - in fact the only line I see that could generate any kind of OBSE error is the one with the while expression. I'll double-check to see if I borked something in 0018+ which causes it to choke on that line.
Would be interested to see if the version compiled with 0019 still generates errors for Mythgaard and Thomas Kaira.
User avatar
Doniesha World
 
Posts: 3437
Joined: Sun Jan 07, 2007 5:12 pm

Post » Tue Dec 07, 2010 10:03 pm

Following up (sorry for double-post): This looks like a threading issue. Back when loops were first introduced we weren't aware that token scripts can run concurrently. We've since added safeguards to potentially affected code but somehow the code that manages while/foreach loops got overlooked. Upshot is that OBSE can get confused when two loops are executing concurrently. This is rare, but most likely to occur when transitioning between exterior cells. Upgrading it now.

tl;dr version: Nothing for you to fix, should be resolved in next OBSE beta.
User avatar
cheryl wright
 
Posts: 3382
Joined: Sat Nov 25, 2006 4:43 am

Post » Tue Dec 07, 2010 5:50 pm

Following up (sorry for double-post): This looks like a threading issue. Back when loops were first introduced we weren't aware that token scripts can run concurrently. We've since added safeguards to potentially affected code but somehow the code that manages while/foreach loops got overlooked. Upshot is that OBSE can get confused when two loops are executing concurrently. This is rare, but most likely to occur when transitioning between exterior cells. Upgrading it now.

tl;dr version: Nothing for you to fix, should be resolved in next OBSE beta.


:celebration: Cheers for looking into that on your end.

Threading issues, the most fun and amazing of all the programming bugs :toughninja:
User avatar
Shianne Donato
 
Posts: 3422
Joined: Sat Aug 11, 2007 5:55 am

Post » Tue Dec 07, 2010 6:53 pm

Threading issues, the most fun and amazing of all the programming bugs :toughninja:

Particularly when you don't have the source code, yeah.
Fix looks good to go, thanks for the help.
User avatar
Jinx Sykes
 
Posts: 3501
Joined: Sat Jan 20, 2007 11:12 pm

Post » Tue Dec 07, 2010 4:20 pm

Welcome back Strategy Master! I know how it is to to be attracted to other games, I've played all the games you mentioned except Civ 5. But it seems that I still come back to Morrowind and Oblivion after a while.
I am curious if for your next update could you update the Deadly Reflex patch for version 6?
User avatar
lucile
 
Posts: 3371
Joined: Thu Mar 22, 2007 4:37 pm

Post » Wed Dec 08, 2010 2:04 am

@dreamer2008: When I get time to setup 6 as it requires so much third party STUFF and is on my less important things to be focusing on! It may not be needed in 6 depending on if the core system controlling the deadly reflex magic effects are improved.

Have you tested to see if it works with 6? It may still be using the same system (for magic effects) anyway.

@all: Telekinesis fixed and other fixes implemented. Still got detect life, restore , damage health to fix.
User avatar
Kortknee Bell
 
Posts: 3345
Joined: Tue Jan 30, 2007 5:05 pm

Post » Tue Dec 07, 2010 10:51 pm

Are you fixing the poison token too? I looked at it and doesn't seem to work at all:
Spoiler
scn zzSMPoisonTokenScriptref Selfref Spellref Casterlong magnitudelong durationshort indexshort effectfloat timerfloat longtimerfloat timepercentfloat damagefloat randomref tSpellBegin OnAddSet Self to GetContainerIf SMDebugMode1 == 1 || UninstallMode == 1 || Self.GetDead || Self.GetAV Health <= 0 || Self.IsActor == 0 || SMPoisonTokenOn <= 0	ReturnEndifshort totaleffectsset effect to Self.GetActiveEffectCount set totaleffects to effectset Spell to 0set Caster to 0	while effect > 0	 && totaleffects - effect < 100		set effect to effect - 1		if Self.GetNthActiveEffectCode effect == getmagiceffectcode DUMY			set tSpell to Self.GetNthActiveEffectMagicItem effect			if GetSpellType tSpell != 4				set index to effect				set Spell to tSpell				set Caster to Self.GetNthActiveEffectCaster effect				set Magnitude to Self.GetNthActiveEffectMagnitude effect				Break			endif		endif	loopif magnitude < 0	set magnitude to -magnitudeendifEndBegin GameModeif Self == 0	Set Self to GetContainer	ReturnEndifIf SMDebugMode1 == 1 || UninstallMode == 1 || Spell == 0 || Self.GetDead || Self.GetAV Health <= 0 || Self.IsActor == 0 || SMPoisonTokenOn <= 0 || Self.GetNthActiveEffectMagicItem index != Spell	RemoveMeEndifSet Timer to Timer + GetSecondsPassedIf Timer < .5	returnelseSet LongTimer to LongTimer + TimerSet Timer to 0Set TimePercent to LongTimer * 2 / DurationSet Damage to Magnitude * (100 - Self.GetAV ResistPoison) / 200 * TimePercentIf Damage >= Self.GetAV Health	Self.Kill CasterEndifSet Damage to -DamageSelf.ModAV2 Health DamageSet Random to GetRandomPercent * TimePercentIf Random > (Self.GetAV ResistPoison * 2 + 80 - Magnitude)	Set Random to Rand 1 6	If Random == 1		Self.ModAV2 Strength -1	Elseif Random == 2		Self.ModAV2 Endurance -1	Elseif Random == 3		Self.ModAV2 Willpower -1	Elseif Random == 4		Self.ModAV2 Intelligence -1	Elseif Random == 5		Self.ModAV2 Agility -1	Elseif Random == 6		Self.ModAV2 Speed -1	EndifEndifendifEnd
Basically, duration is never set so it remains at 0, damage is redundant since the effect already damages health (unless you wanted it to be even more damaging than the other effects). Since duration is 0, the modav part never fires, and even if it did, Rand function almost never returns round integers, so it will almost never roll a ModAV2 result.
Here's my change, I don't really know how to catch instant effects, but at least it sets duration and gives feedback that the player's attributes are damaged:
Spoiler
scn zzSMPoisonTokenScriptref Selfref Spellref Casterlong magnitudelong durationshort indexshort effectfloat timerfloat longtimerfloat timepercentfloat randomref tSpellBegin OnAddSet Self to GetContainerIf SMDebugMode1 == 1 || UninstallMode == 1 || Self.GetDead || Self.GetAV Health <= 0 || Self.IsActor == 0 || SMPoisonTokenOn <= 0	ReturnEndifshort totaleffectsset effect to Self.GetActiveEffectCount set totaleffects to effectset Spell to 0set Caster to 0	while effect > 0	 && totaleffects - effect < 100		set effect to effect - 1		if Self.GetNthActiveEffectCode effect == getmagiceffectcode DUMY			set tSpell to Self.GetNthActiveEffectMagicItem effect			if GetSpellType tSpell != 4				set index to effect				set Spell to tSpell				set Caster to Self.GetNthActiveEffectCaster effect				set Magnitude to Self.GetNthActiveEffectMagnitude effect				set duration to 1 + Self.GetNthActiveEffectDuration effect				Break			endif		endif	loopif magnitude < 0	set magnitude to -magnitudeendifEndBegin GameModeif Self == 0	Set Self to GetContainer	ReturnEndifIf SMDebugMode1 == 1 || UninstallMode == 1 || Spell == 0 || Self.GetDead || Self.GetAV Health <= 0 || Self.IsActor == 0 || SMPoisonTokenOn <= 0 || Self.GetNthActiveEffectMagicItem index != Spell	RemoveMeEndifSet Timer to Timer + GetSecondsPassedIf Timer < .5	returnelseSet LongTimer to LongTimer + TimerSet Timer to 0Set TimePercent to LongTimer * 2 / DurationSet Random to GetRandomPercent * TimePercentIf Random > (Self.GetAV ResistPoison * 2 + 80 - Magnitude)	Set Random to Rand 0 6	If Random <= 1		Self.ModAV2 Strength -1		If Self == Player			Message "Magical Poison has damaged your Strength"		Endif	Elseif Random <= 2		Self.ModAV2 Endurance -1		If Self == Player			Message "Magical Poison has damaged your Endurance"		Endif	Elseif Random <= 3		Self.ModAV2 Willpower -1		If Self == Player			Message "Magical Poison has damaged your Willpower"		Endif	Elseif Random <= 4		Self.ModAV2 Intelligence -1		If Self == Player			Message "Magical Poison has damaged your Intelligence"		Endif	Elseif Random <= 5		Self.ModAV2 Agility -1		If Self == Player			Message "Magical Poison has damaged your Agility"		Endif	Elseif Random <= 6		Self.ModAV2 Speed -1		If Self == Player			Message "Magical Poison has damaged your Speed"		Endif	EndifEndifendifEnd

I'm sure it could be done better, but manipulating magic with precision through OBSE scripting is something I'm still learning.

I also had an issue with burden. I was under an enemy burden spell, which seems to ModAV your speed, athletics and acrobatics. I went to menu to check that indeed they had been drained, but upon exiting and the burden wearing off they didn't return to normal. I had been burdened before with no such problem, but that was the first time I went to the menu while the burden was on, maybe the script went amiss then?

And the last one (I swear). I edited out the part of zzSMNpcElementalTokenScript near the end that plays the shield's sound and effect every two seconds regardless of whether the NPC is in combat or not. You probably intended it like that, but I really couldn't stand it after a while (frost shield on NPC was like ?iek, ?iek, ?iek...)
I was thinking that could get moved to a general OnHit handler, any target NPC with shields on would deliver damage to attacker NPC in range. Heck I even made a mod that uses such a handler, but the other way round :D
User avatar
Richard
 
Posts: 3371
Joined: Sat Oct 13, 2007 2:50 pm

Post » Tue Dec 07, 2010 10:43 pm

What are you trying to do with that script? I've got a poison effect script in Oblivion XP that works really well. It even takes resistances into account. It looks like you're trying to do something completely different with your script though. Basically the Oblivion XP script allows the player to actually poison, and possibly kill by poison, a creature. It then detects the kill and awards points. If you hit a creature with a arrow, it might actually drop dead from the poison effect before it even reaches you - very cool :) Anyway, if you would like to see the script, let me know and I'll pm it to you.
User avatar
vicki kitterman
 
Posts: 3494
Joined: Mon Aug 07, 2006 11:58 am

Post » Tue Dec 07, 2010 4:51 pm

@migck: Poison should do extra damage, but you are right the duration (divde by 0 error) and the choice of random used is not suitable (well it would never throw a 6)

The burden spell appears to be working. Unless you found some really vague rounding error. Modav works with integers but the value we pass it is a decimal, so might be safer to ensure we only have an rounded integer modded in there.
User avatar
Justin Hankins
 
Posts: 3348
Joined: Fri Oct 26, 2007 12:36 pm

Post » Tue Dec 07, 2010 9:25 pm

Glad to see you around again SM.

Suggestion for you: why not integrate the functionality from http://www.tesnexus.com/downloads/file.php?id=14871?

Unless I'm mistaken, even with all your amazing changes to magicka I can still cast one Charm 15 pts spell and a different Charm 20 pts spell for a net effect of Charm 35, i.e. +35 disposition on a shop keeper. Same with casting shields from various spells on myself, etc. Enchanted items and potions already have their own limits through "slots", but scrolls and spells really need some control in that area.

1. What I'd personally like to see is that any spell cast automatically dispels the previous ones on the same actor that have at least one effect in common.

2. Magic Overlap has more fancy options which are worthy including as well, such as a diminishing return formula, or taking the strongest of two similar effects. I'm not sure if it could show you that your 15 Shield and 5 Shield spells amounted to 15 (or 17.5), so maybe with the newest OBSE functions you can work something out?
User avatar
Emma Pennington
 
Posts: 3346
Joined: Tue Oct 17, 2006 8:41 am

Post » Wed Dec 08, 2010 3:25 am

@dreamer2008: When I get time to setup 6 as it requires so much third party STUFF and is on my less important things to be focusing on! It may not be needed in 6 depending on if the core system controlling the deadly reflex magic effects are improved.

Have you tested to see if it works with 6? It may still be using the same system (for magic effects) anyway.

@all: Telekinesis fixed and other fixes implemented. Still got detect life, restore , damage health to fix.

I have the SM_Deadly Reflex patch merged in the bash patch, and the only odd effect is that most of the enemies I kill with my longsword enchanted with fire damage go up in flames. I am not sure that this is related to the patch or just some feature of the new Deadly Reflex but it just seems odd. The poor Arena opponents almost all of them got burned :D , and also most enemies I kill with my sword.
User avatar
Tasha Clifford
 
Posts: 3295
Joined: Fri Jul 21, 2006 7:08 am

Post » Tue Dec 07, 2010 5:42 pm

@Gabba: Maybe bundle an updated version of the idea in the future, do you know of any issues with flyflightfleas mod not working with supreme magicka?

@dreamer2008: Actually sounds like it is working correctly, in version 5 sword enchantments causing the effects are a part of supreme magicka ( couple of bugs my end might be making it happen too frequently in that version) . The SM_Deadly Reflex esp is a dummy and doesn't actually do anything, was only used to see if player has deadly reflex, next version will have the compatability turn on automatically (no esp required ).
User avatar
Kevin Jay
 
Posts: 3431
Joined: Sun Apr 29, 2007 4:29 am

Post » Tue Dec 07, 2010 4:54 pm

@dreamer2008: Actually sounds like it is working correctly, in version 5 sword enchantments causing the effects are a part of supreme magicka ( couple of bugs my end might be making it happen too frequently in that version) . The SM_Deadly Reflex esp is a dummy and doesn't actually do anything, was only used to see if player has deadly reflex, next version will have the compatability turn on automatically (no esp required ).

Ah its good if this was intended. A small thing I might have seen was that some effects were going off later on some creatures. For example killing them and going in flames a second after they died, while in air for example. Again I am not sure if this is a bug, and its rare and I don't care so much about it, but I thought that maybe I should mention it.
User avatar
Shelby McDonald
 
Posts: 3497
Joined: Sat Jan 13, 2007 2:29 pm

Post » Wed Dec 08, 2010 12:23 am

I've been having a strange issue with undead and restore health. Undead with a restore health ability (mainly dread zombies) cause a CTD the instant I deliver the killing blow to one of them in melee. I had to resort to killing them with spells, normally restore health ones since they seem the most effective.
Another issue was that whenever I get hit by a spell with a damage health effect among other effects, like the Spriggan's curse, it does prevent restore health from acting, but for the duration of the more lasting effect instead of just for the damage health effect duration. The spriggan's curse has damage health for 2 sec and drain luck for 60 sec, but it prevents restore health from acting until the luck drain goes away.

About teleportation spells like the various intervention, etc, isn't it a bit cheap that they can be used while in jail? I would have thought that jails in Tamriel were teleportation-proof.

And about the spells needing a 1-sec duration, maybe there is a way to script that at the beginning or while the game session, instead of having to edit all the vanilla spells even if its just to add that 1 sec, preventing compatibility issues. A conventional OBSE script can set the duration of all vanilla spells, a not-so-conventional one can do the rest, either when the player selects them, or when an enemy casts it (I don't know how that would be done though)
User avatar
Stat Wrecker
 
Posts: 3511
Joined: Mon Sep 24, 2007 6:14 am

Post » Wed Dec 08, 2010 7:24 am

@migck: The CTD could be anything. But i'll keep an eye out just in case.

The tokens being removed only when the spell ends was a limitation of the token system at the time. Might be fixable now in OBSE 19.

Normally evil mages the mages guild would deal with them not the imperial guard, a jail cell wouldn't hold powerful magic users (open lock spell for example followed by mega fireball of doom, or just invisibility).

A script already does set spells to 1 second if its not already.
User avatar
clelia vega
 
Posts: 3433
Joined: Wed Mar 21, 2007 6:04 pm

Post » Tue Dec 07, 2010 8:26 pm

@migck: The CTD could be anything. But i'll keep an eye out just in case.

The strange thing is, it causes a CTD that kills the game process even quicker than the FastExit plugin! Now I'm not so sure such a "feature" needs fixing... :teehee:
I guess the jail cells never were magic proof to start with, if one can use unlock on them so easily, and divine intervention won't work anyways. Better for the evil mages then. But for divine intervention, would it make sense if it wouldn't work for vampires as well? Vampires don't seem to have much problems with divine authorities in Morrowind nor Oblivion, but I doubt Arkay is willing to lend them a hand in their traveling needs...
And another idea for divine intervention, instead of being a spell for sale, how about the player receiving it upon completing the pilgrimage along with the Pilgrim's Grace power?
User avatar
Nick Jase Mason
 
Posts: 3432
Joined: Sun Jul 29, 2007 1:23 am

Post » Wed Dec 08, 2010 9:00 am

That's interesting with the Dread Zombies, I recall there was a CTD with them when using OOO's Light Of Dawn... :shrug:
User avatar
Michelle Chau
 
Posts: 3308
Joined: Sat Aug 26, 2006 4:24 am

PreviousNext

Return to IV - Oblivion