Jump to content

Stealth21

Members
  • Posts

    48
  • Joined

  • Last visited

Nexus Mods Profile

About Stealth21

Stealth21's Achievements

Contributor

Contributor (5/14)

0

Reputation

  1. Well... if only you will be positioning the message exactly using the new lines and spaces...
  2. I decided to start such kind of topic. Share with your interesting intriguing spells here! But take these conditions - by reading your post it is possible to replicate the spell in the Construction Set by the written. Also, write a description about the spell's behavior/purpose. The replicators will have to think by yourselves about how to get that spell available in the game :wink: I start with this spell - "A dream of the unfamiliar place". It must be casted in case if all of the map markers are available for the fast travel into each one. The moment when this spell must be casted - right before the moment the player is going to sleep (not to wait). If player will not go to sleep after the 2secs passed after the moment when the spell was casted, the spell will be dispelled. In case of the success, the place which map marker was not known to the player, will be revealed, it's map marker will be seen on the player's map but it will not be possible to make a fast travel into it, so the player have to go there by him-/her-self. Places of the Cyrodiil and the Shivering Isles only. The purpose of this spell is to get your character sleep well to check out whenever there are still the places where you visited not. And as a result, using this spell you can obtain every vanilla place's map marker, all of them. ----------------------------------------------------------------------------------------- Another spells previously made by me: Soulgem Spells Collection - with those spells it is possible to void the filled soulgems including Azura's Star or transfer the soul from the filled soulgem including Azura's Star to the empty soulgem excluding Azura's Star. Soultrap for NPC - capture NPC soul to the great empty soulgem.
  3. I was investigating that question too, and I remember and used that function for the Morrowind modding. Alas, I did not find the related function for the Oblivion, only the function to get the sound played, not to stop some of them. And me too was searching that for the magic effect silence together with "silencing" the lights and the effects of the cast. The solution I found is to create either quest-script or ability spell script. In this script it will remove(replace to nulled) the sounds and the effects for the magic effect of the spell you are cerating it for. It will be doing that in the "GetPlayerSpell" check in case if this check is equal to the spell selected by the player you are creating this script for. In case if you will choose the way of quest-script, you will also need to obtain how to change it's execute time to the lowest value.
  4. KatsAwful, yes, currently I applied the code related to your presented. I created AllSkills100InstantKiller global short variable and added the next code to the OnEquip block of the Mechrunes Dagger's script: set AllSkills100InstantKiller to 12 While ( AllSkills100InstantKiller < 33 ) if (( Player.GetAVForBaseActorC AllSkills100InstantKiller ) < 100 ) break else set AllSkills100InstantKiller to AllSkills100InstantKiller + 1 endif loop- it will be processed only once per dagger equipping, which is acceptable by me :D I used GetAVForBaseActorC, not the GetAVC - isn't it get the skill with such parameters like fortifiers and drains?.. And it is not necessary to write PlayerREF - just Player was always working. Also I edited the scripted effect of the enchantment of that weapon: if RandomChance <= LuckMod ; Check against dice roll kill player ; Make 'em deader ... elseif ( AllSkills100InstantKiller == 33 ) kill player if (( Player.GetEquippedCurrentCharge 16 ) < 500 ) Player.SetEquippedCurrentCharge 8000 16 endif endifso everyone just need to be hitted with that dagger only once. It will be never out of enchantment charge. I was looking for the realization way without the global variable declaring. Everything could be realized just in the enchantment script effect's script, but then the proccess will be going through the While<->Loop each hit, so it was not an option. I did not trust to that function - GetVariable - because to get the exact script ref of the equipped dagger, I'd had to declare an array, use GetEquippedItems for it, go through the array in the search of the reference which GetEquipmentSlot == 16, get the script ref using GetScript and only then operate with it's variables through GetVariable. But, as I noted, there are the info about the total Novice, Apprentice, Journeyman, Expert and Master skills already calculated and showed in the journal's stats. So I hoped to find the way to retrieve that value from there. It is not among the PCMiscStats (though, value 102/-102 is influenced by the changes in the player's skills...). No function to get it/them, neither the some kind of array with them. It is not among the gamesettings 'variables'. So looks like the only way to get the info about the total skills being advanced to 100 is to go with the checks through all of them using the While<->Loop subblock.
  5. When every player's skills are in their 100 values, I considered that there is nothing interesting in the battles and in the unlocking chests/doors proccess. So I would like to make 2 mods. The first one is - if the player has the Skeleton Key and it's security skill is equal to 100 (to 140 if including the value given by the skeleton key "ability spell"), then it is possible to unlock any locked, NOT to the key, chest/door just with pressing 'z' button while watching on the locked target. That is done. The second one - edit Mehrunes Dagger enchantment's script effect. If all of the player skills are equal to 100, then every dagger hit will be fatal (an instant death). I am in trouble a little - the skills quantity is 21. Their check (GetAVForBaseActor) can not be written in the one line because it is too long in this way. Yes, I do realize that it is possible to divide that check to subchecks OR use While<->Loop. I would like to avoid the using of While<->Loop because it will be processing each dagger's strike. There is such line as "Master skills:" in the player stats, but it is not gettable through GetPCStat function. Can someone share with me his/her experience of how to get the quantity of the skills advanced to the master level?
  6. After the experience of creating the NPC soul trap into the white soulgem spell, I rethought those spells, so they becomes smaller, uses lesser variables, goes through ForEach<->Loop as lesser times as possible (all this means that they becomes faster, however, it is not noticeable though), and plus Azura's Star is now included too. I edited my first post for fixes and improvements so many times, so I decided to leave it untouched for to it be a comparison to see the difference in realization.
  7. I think (as I do not saw) there is no such check of whenever the player is doing a fast travel, moreover with the next acts such as to interrupt the current fast travel to that map marker location and to do something different. So I imagine your idea in this way. There are lot of the map markers in the original game and some from the original addons. Map marker is an object from the WorldObjects category Static subcategory with an appropriate "MapMarker" NameID. When it is placed into the world, there are an options to apply to each of them placed. Such as Visible (will be visible on the map), CanTravelTo, InitiallyDisabled (is not visible from the beggining you was wondering of), name and type in the Marker Data tab. No difference whenever the map marker whenever it is in the in-terior or ex-terior. So, for your task to be realized, you'll have to move that lot of original map markers inside the interiors near the door's markers from the first door which leads to that inerior. You can go an easy way as to move them in the world OR to make a BIG script which will go through the map markers array (GetMapMarkers), check the RefID of it and move it to the place that you will HAVE TO input by yourself. This would be a very loooong and dull action for me to realize if you ask me... For the example, I can provide a piece of one of my codes. From the quest script. (map markers here were translated and messagebox texts are not noted) scn MadGodsPickAxeQuestSCRIPT short stage short i ref iter string_var iterRefString short iterRefDec array_var knownmarkers short markerstotal short markerstotalpreviuoscalc ; Markers: ; Brellach RefHex=0000DA42 RefDec=55874 ; Cann RefHex=0000DA3D RefDec=55869 ; Ebrokka RefHex=0000DA47 RefDec=55879 ; Fein RefHex=00055BD4 RefDec=351188 ; Aychan RefHex=0000DA23 RefDec=55843 ; Dark labirinth RefHex=0007CFDE RefDec=511966 ; Smelling trees RefHex=0000DA76 RefDec=55926 ; "Bone growed" RefHex=0000DA74 RefDec=55924 ; Xiretard RefHex=0000DA4C RefDec=55884 ; Black den RefHex=0000DA72 RefDec=55922 ; Blackberry bush RefHex=0000DA70 RefDec=55920 ; Xeivara RefHex=0007CFDD RefDec=511965 ; Moaning halls RefHex=0000DA38 RefDec=55864 ; Den "Swamp gas" RefHex=0000DA80 RefDec=55936 ; Frightful lair RefHex=0000DA6E RefDec=55918 ; Xiditta RefHex=0000DA65 RefDec=55909 ; Dead pass RefHex=0000DA6C RefDec=55916 ; Sharp cliff RefHex=0000DA82 RefDec=55938 Begin GameMode if ( stage == 0 ) && ( GetStageDone SE13 200 == 1 ) && ( Player.GetLevel >= 22 ) && ( GetPlayerInSEWorld == 1 ) let knownmarkers := GetMapMarkers 0 set markerstotalpreviuoscalc to ar_Size knownmarkers if ( markerstotal != markerstotalpreviuoscalc ) set i to 0 set markerstotal to markerstotalpreviuoscalc While ( i <= markerstotal ) let iter := knownmarkers[i] let iterRefString := sv_construct "%i" iter let iterRefDec := ToNumber iterRefString 1 if ( iterRefDec == 55874 ) || ( iterRefDec == 55869 ) || ( iterRefDec == 55879 ) || ( iterRefDec == 351188 ) || ( iterRefDec == 55843 ) || ( iterRefDec == 511966 ) || ( iterRefDec == 55926 ) || ( iterRefDec == 55924 ) || ( iterRefDec == 55884 ) || ( iterRefDec == 55922 ) || ( iterRefDec == 55920 ) || ( iterRefDec == 511965 ) || ( iterRefDec == 55864 ) || ( iterRefDec == 55936 ) || ( iterRefDec == 55918 ) || ( iterRefDec == 55909 ) || ( iterRefDec == 55916 ) || ( iterRefDec == 55938 ) set stage to stage + 1 endif set i to i + 1 loop if ( stage > 17 ) if ( Player.GetItemCount Pickaxe01 > 0 ) Player.RemoveItem Pickaxe01 1 Player.AddItem WeapMadGodsPickAxe 1 MessageBox "..." set stage to 2 else MessageBox "..." set stage to 1 endif else set stage to 0 endif endif elseif ( stage == 1 ) && ( Player.GetItemCount Pickaxe01 > 0 ) && ( GetPlayerInSEWorld == 1 ) Player.RemoveItem Pickaxe01 1 Player.AddItem WeapMadGodsPickAxe 1 MessageBox "..." set stage to 2 elseif ( stage == 2 ) set stage to -1 StopQuest FranMadGodsPickAxeQuest endif End- here is what it is for. In this quest script it scans for the Shivering Isles map markers list which are known for the player. I gone through the map markers by myself to obtain the RefID of the each one, you can see that I noted them. In the While<->Loop script code piece that check is happening. The known and visible map markers array is gotten using the "GetMapMarkers 0" function. That array is consisting from the RefIDs of those known and visible map markers. I do not know how to check for the RefID equality in case when I am comparing the RefID from the RefID set manually (I do not know how to manually set the value to the ref variable), so I gone through a bit harder way - let iterRefString := sv_construct "%i" iter - will get the RefID written in symbols as a string let iterRefDec := ToNumber iterRefString 1 - will get the decimal value from the string variable considering it is consisting from the hexadecimal value which it is The decimal variables to comparing with next in the check, I calculated from the hexadecimal values using Windows'es standard calculator. So, inside each of that check you will be have to write a piece of code which will move the appropriate map marker (by it's RefID) to the appropriate exact location in exact interior.
  8. I imagine it in this way: There is a quest script which acts every frame (sorry I still do not obtained how to do such quest scripts cause I was not in their needence, other persons will hint if you'll ask about that) OR an ability spell with a script effect. In that kind of script it is scanning whenever player shoots the arrow: ref arrow let arrow := Player.GetProjectile Next is to enchant it with an enchantment which is a script effect with the next script: ref Me set Me to GetSelf Me.PlaySound "YoursCreatedSoundNameID" - again, note that that's the script of the arrow enchantment. Let's call it's NameID "EnNoisyArrow". next, when that enchantment is ready, continue to fill that quest/ability script: if ( arrow.GetArrowProjectileEnchantment == 0 ) arrow.SetArrowProjectileEnchantment EnNoisyArrow endif if ( arrow != 0 ) let arrow := 0 endif So when the arrow (unenchanted AND fired by player only in this case) will hit the (living?) creature/NPC, the spell from it's enchantment will be casted to them, which will leads to the sound will be played on the living target hit. With an additional checks in the arrow enchantment script such as IsCreature or IsActor you can additionally control which sounds to play maybe. That method has the negative effect, though. Since there will be no unenchanted arrow fired by the Player at all, a ghosts and a wraiths are surely damaged from those arrows...
  9. Alright. Skipping the rewritting the STRP magic effect hardcoded script, I decided to create a spell with an idea as to capture NPCs into the white grand soulgem. I met the next problems while doing it: 1. There are setting variables with the text inside them. For example, I need sSoulCaptured. How to print it's text with the "Message" function? It always was a problem for me to find the info about the things with the percent such as %.0f for the floats/shorts/ints and etc for non-OBSE types of functions Message and MessageBox. To this moment, I am using an alternative way with GetStringGameSetting function, but is it have to be realized in this way? 2. The visual effect when the soul is successfully captured is unique. I would like to it be played using some function like "PlayMagicEffectVisuals DSPL", but comparing to the example code I provided, the visuals of it are almost same but with a purple whirl. But I need it without the whirl. Is it some way possible to trigger those visuals to be played? For the answer, I would like to get an exact command. 3. The most difficult question of the three here as I think. That spell can be interact not only between Player<->NPC but in this way NPC<->NPC too, so if a caster NPC have the empty grand soulgem and he/she successfully captured some target NPC's soul, that soulgem will be filled. Currently, the situation is if a multiple NPCs casted that spell to one person and that person becomes dead - all those caster NPCs will get their empty grand soulgems filled. When the spell is applied to the target, that target will have the activeeffect from that spell. So, the question is how to check that there is an activeeffect with an exact script was already casted to NPC? It is not GetNthActiveEffectCode because the target can have some another activeeffect with a script magic effect. I need that that activeeffect with a certain script be removed in case when the target was hit with the spell which will provide the same activeeffect. ----------------------------------------------------------------------------------- Nothing was solved: #1 Leaved as I described. #2 Used STRP magic effect's visuals when the NPC affected with that spell is died and the soul of that NPC was captured (spell caster' have the grand empty soulgem which is filled with a grand soul as a result). Those visuals are the dark purple whirl (which is different comparing to the visuals from the soul capturing analogy). #3 A workaround was thought out. But that spell is ready. When the NPC is affected with that spell, it becomes look like a ghost but with less transparency. If NPC was a ghost from the beggining, that ghost NPC will be not affected with that part of the spell's script code which changes the transparency and applies the ghost shader effect visuals. Not only the player can catch the souls with that spell but also the NPCs can too. Casting that spell from the different casters will result that the only active effect from the last caster will exist (to avoid that all of the casters will catch the soul of that NPC). When soul is captured (the caster had the empty Azura's Star or an empty grand soulgem) through that spell, the visuals from the STRP magic effect will appear, the empty Azura's Star or the empty grand soulgem (the owner is also thought out, so you will not 'privatize' the stolen soulgem after that spell) would be filled with the grand soul, and if target NPC was not a ghost from the beginning, the spell's ghost effect visuals will disappear. If when soul was captured by the player, it's "souls captured" stat will raise to 1. Like the original soul trap behaviour, the spell can be dispelled, so for the right work of the spell's ghost visuals disappearing, it is thought out whenever the spell is survived from the dispel magic effect. So I think I foresee everything)
  10. ref item . Right?) - right. let item := GetLastEnchantedItem - that piece of code "sits" in the quest and awaits for when the Enchanting menu provides the item. Now item is that enchanted item. Next, let's check it: if ( item.GetBaseObject == BaseOfYourFist ) item.CopyIR Player item.RemoveMeIR (or it might be that after this, there could be a two of items in the one reference, and after RemoveMeIR they both will be removed - in that case CopyIR to some container instead of as to the Player, RemoveMeIR, select the item in that container you copied previously to and CopyIR back to the Player) endif For the case of sigil stone enchanting, in the same quest's script you can place a check nearby after the above: let item := GetLastSigilStoneCreatedItem if ( item.GetBaseObject == BaseOfYourFist ) same actions (the) endif
  11. I downloaded your mod and had a try. Yes, I have the same situation as well as you described it - the enchanted item some way 'forgets' about the script which was attached to it's base item. I can assume next if you'd ask my opinion: In your AAEHquest's script - GetLastEnchantedItem-> if that item's base is your fist -> item.CopyIR Player ; item.RemoveMeIR I tried to add "OnAdd" block to the AAFFistWeapon script and see what will happen in the moment right after the item was enchanted - same situation, the item's script was not initialized.
  12. Wow... that is such a deep reply, you know... Saying about Bethesda idea concerning those quest appearences through random value. So, you are saying that if to make a save near the door which leads to the SENSCastleSheogorath interior and load it till Haskill will got that 'RandomPercent" < 50, he will eventually say about the intruders. Yes, I agree with that you wanted to explain and got the concept of that 'everone' random value. First case where I met that was in HMM4 game. But as I said, he never said anything differing except that "all is peaceful". So, as my opinion, even if that chance is well thought, it is too rare. Straightly thinking, there is an alternative way - to replace that condition for another which will be comparing some global value which will be set with the GetRandomPercent from his answer where "all is peaceful". That's the way out of this situation of course, but this will be not much better than the re-loadings in unsuccessful cases... because they ARE the re-loadings in unsuccessful cases but will lead to the result much faster. So this also ruin the spirit of that concept. And I can not imagine how it could be other way. Maybe you (or someone else) have a think how it could be instead?
  13. After the main SI quests are passed, the player can be involved into the realm protection. The appropriate topic appears in the dialog with Haskill. But I never had a chance to experience that. Haskill was always saying to me: "It seems all is peaceful in the Shivering Isles, my lord. Will wonders never sees?" The conditions why he is saying exactly that are next: GetRandomPercent >= 50 OR (SEHaskillREF.)GetInCell SENSCastleSheogorath == 0 So, it appears that with the 1/2 chance he will be saying something different in the sheogorath castle location. But he is doing not. Maybe I am playing the bugged Oblivion version? Do someone experienced those battles quests? Can they be replayed or each of them can be played only once? How often Haskill is giving them?
  14. I wouldn't say that I wanted to do that so hard... but I done :D Just so. Continuing the idea of obelisks reactivating, I decided to make a script for those obelisks which were previously activated (for almost every obelisk actually, I mean here what is the script for) - they will be "recharging" their power for one week from the moment of the deactivation in each case separately (or from the moment you attached your plugin with the scripts above and below). Also they will "refresh" the loot in their linked containers. So, after you applied the changes from the first post here, also apply next: Edit the script "SE13KnightOfOrderSCRIPT" attached to the "Knight of Order" NPC (this time it is on the SE13KnightOfOrderRespawn) - the line: if getstage SE13 >= 100 - edit it to: if ( getstage SE13 >= 100 ) && ( Player.HasSpell zzSMSE14ActivateObelisk == 0 ) another line also in this script: if getStageDone SE13 35 == 1 && dying == 0 - edit it to: if ( getStageDone SE13 35 == 1 ) && ( dying == 0 ) && ( Player.HasSpell zzSMSE14ActivateObelisk == 0 ) Create the quest: With those changes you will be able to let the Sheogorath Palace guards to have some fun minutes again, almost like in good old SE13 quest walkthrough times they are witnesses of :D
  15. I knew that, but just in case I just checked the code which Pellape wrote, and noted to him that it is not working. I found out 'the mystery' of sv_Compare... I was comparing the strings this way: sv_Compare (one two) but it have to be in this way: sv_Compare ($one two) or sv_Compare ( "String_to_compare_with" two ) (and in this way script can not be compiled: sv_Compare ($one $two) ) And that's all. I even do not make any mod, I just was wondering)) The presence of the symbol "$" was not obvious for me, especially from such explanation like: (comparison:int) sv_Compare formatString:string var1 var2 ... var20 variable:string_var caseSensitive:bool
×
×
  • Create New...