Jump to content

Eckss

Premium Member
  • Posts

    474
  • Joined

  • Last visited

Everything posted by Eckss

  1. @IsharaMeradin, that’s a basic difference between a Function and an Event. The definition of an Event’s parameters is: and can be seen here on the relevant Wiki page. In case that isn’t clear enough, a Function requires parameters to be INPUT to it for it to function (the clue’s in the name) while an Event will OUTPUT the parameters that triggered the Event notification (the clue’s in the name here also).If you think that the Wiki could be better worded, you can edit it yourself as: I hope that clears everything up.Eck. :)
  2. Really? :confused:If so, then the Wiki entry example must be very misleading because that’s not how it reads to me. If you need to specify the spell, how could the Event in the Wiki example ever be called except in the instance that the spell cast was a fireball? Unless the Wiki is wrong, the OnSpellCast Event parameter akSpell contains the spell that was cast to trigger the event, so I don’t see how there would be any repetitive code in the situation outlined by the OP. It doesn’t matter what the value of akSpell is, you just have to code it like that because Papyrus requires it for correct syntax. Eck.
  3. I’ll first point out that I’m not an authority on scripting, I’m self-taught and I’ve had to find a lot of things out the hard way. However I do think I can help. For what you want, you’ll need to: 1. Set up an empty quest, selecting the ‘Start Game Enabled’ and ‘Allow Repeated Stages’ checkboxes. 2. Set up a Quest Alias for the Player and attach your Script to that Alias. That’s it. As for the script, Papyrus doesn’t seem to like certain things that would seem logical given your background, so be careful. For example, you can’t just use ‘Player’ and expect it to work even though logically you should be able to. You have to do something like this: Actor ak = Game.GetPlayer()You can then use ak to refer to the player as an actor. You have to do this even though you’re attaching the script to a Quest Alias that IS the Player. Otherwise you have to get the Alias to do things and that still requires that you set up a property for the Alias even though your script is attached to it. To get something to happen whenever a spell is cast, you need to have your script activated by an Event. Something like, Event OnSpellCast (Form akSpell) ; Do whatever EndEventOnSpellCast is an Object Reference Event and therefore should work on an Actor script as Actor is an extension of Object Reference. Unless a script is activated every time it’s expected to run and stops when it’s not needed, you might end up with a script that never stops which will eventually break the game. Good luck. Eck. :thumbsup:
  4. Notification Recent changes to Skyrim mean that it is no longer possible to load a plugin without all the Parent Masterfiles being present. This means that SPIKE is no longer as useful as a general Mod compatibility system because all Mods would need to be published with SPIKE included. It is still useful for compatibility with Guard Dialogue Overhaul but can no longer be reasonably considered to be a separate item. The recent publishing of TES5Edit means that there is now an excellent tool already available for making Mods compatible. Due to circumstances beyond my control, I will not be developing this idea any further at present. Thanks for your interest. Eck. P.S. SPIKE is still excellent for compatibility with GDO and I will continue to use it for this purpose.
  5. Thanks to Deigradius I now have a German Translation. I’m still interested in providing Italian and Polish Translations if anyone can help. Eck. :D
  6. The more I learn about Nexus, the more I'm glad to be a part of the community. I tried to use the Bioware site for Modding Dragon Age and, although I was able to, I’m the only one among my friends that was and we’re all computer-literate with some of us working in the industry. Anyone can use Nexus; it’s so easy that I think sometimes people think they must’ve misunderstood (nothing on the net could be that simple!) and I’ve found the community to be, mostly, a very welcoming group. (With a couple of exceptions, one of which hasn’t said or done anything offensive on Nexus Itself while the other one was at least totally polite throughout.) All in all, I think you’ve created an excellent virtual nation here and I’m glad to hear that your plans for expansion include neither marauding across the fertile steppes of Gamer-Land nor goose-stepping ever onward in search of Liebensraum for Megalomania. :teehee: If you need any help, I’d be happy to assist. I do not require or even expect any kind of reply, as I’m sure you’re very busy. Thanks for all the great work. Eck. :D
  7. My scripting skills aren’t great, but I’ve tested this Script and it works for adding items to a levelled list when the game starts up. To my embarrassment, I’ve realised that this Script doesn’t require SPIKE at all in order to work. :blush: In a spirit of co-operation, I’m publishing it for anyone who wants to use it. Scriptname EcksPopulateListScript extends Quest Hidden {Populate Levelled List on Startup} Import debug Function PopulateList(FormList FL, LeveledItem LI, FormList KW, Int[] LV) Global Int i = 0 While (i < FL.GetSize()) Form f = (FL.GetAt(i) as Form) Int j = 0 While (j < KW.GetSize()) If f.HasKeyword (KW.GetAt(j) as Keyword) LI.AddForm (f,LV[j] as Int,1) EndIf j += 1 EndWhile i += 1 EndWhile Return EndFunction State busy ; {Preventing multiple simultaneous calls to the script} EndState GlobalVariable Property AlreadyDone Auto FormList Property ItemList Auto LeveledItem Property LevelledList Auto FormList Property KeywordList Auto Int[] ItemLevels Event OnInit() AlreadyDone.SetValue(0) RegisterForSingleUpdate(1.0) EndEvent Event OnUpdate() If AlreadyDone.GetValue()== 0 Notification("Populating Levelled List") Notification("Please Wait...") PopulateList(ItemList, LevelledList, KeywordList, ItemLevels) AlreadyDone.SetValue (1) Notification("Levelled List Populated") Else GoToState ("busy") EndIf EndEvent Simply Create an empty Quest that is Start Game Enabled and attach this script to it. Then set the Script Properties ItemList, LevelledList, KeywordList and ItemLevels to the values you need. ItemList should be set to a FormList that contains the items you want to add. LevelledList should be set to the LeveledItem you wish to add your items to. KeywordList should be set to a FormList that contains the Level Keywords that you have placed on your items to indicate the level at which they should be added to the list. ItemLevels should be set to an array that contains the Levels corresponding to the Level Keywords in the same order as the KeywordList. The easiest way to do this is to add these lines to the script under the Event OnInit() line: ItemLevels = New Int ;{where size is the number of different levels you wish to use, as an integer. E.g. 5} ItemLevels [0] = a ;{where a is the first level you wish to use} ItemLevels [1] = b ;{where b is the second level you wish to use} ItemLevels [2] = c ;{where c is the third level you wish to use} ; {and so on up to} ItemLevels [size-1] = x ;{where size-1 is an integer that is one less than the size (because arrays count from 0) AND where x is the last level you wish to use} With this setup, the levelled list that you’ve set as LevelledList in the properties will have the items on the FormList that you’ve set as ItemList added to it at the levels you’ve specified in the array ItemLevels, in the order that the keywords on the FormList that you’ve set as KeywordList are in. As I said at the start of this, my scripting skills aren’t great, but I have tested this, and it does work. If anyone knows a better way of doing this, or if anyone knows of any problems associated with using this method, I’d appreciate the information. Eck. :)
  8. I currently have translators for Spanish, Russian, Chinese (Subtitles only), French (Voices only for now), Japanese (Voices only) and I’m still waiting to hear back from a Turkish translator. I’m looking for translators for other languages; I’ve had a lot of requests for a German version in particular, and I notice that the Mod language tags have specific entries for Italian and Polish. I can provide details and help to make the process easier if anyone would be willing to give it a go. Eck.
  9. Notification I’ve been trying to prepare a step-by-step guide and come across a problem; the scripting level required to make some types of Mod compatible may be beyond the skill level of some Mod authors. To address this, I’ve decided to try to somehow provide some easy-to-use scripted functions for people, as my goal is to make this as simple to use as possible. As anyone who’s grappled with Papyrus scripting will be aware, this may take some time; especially as I’d like to be able to do it without SkSE if possible. So I’m going to be a bit busy for a while but I will post my progress here for anyone who’s interested or would like to add their input. I would have done this before, but I hadn’t realised that this was going to be a problem, so thanks for making me aware of it. Thanks for your interest, Eck. :) P.S. I’m going to add level keywords for use with levelled lists. Should I add a keyword for every level from 1 to 50 or are some of the levels unnecessary? Would I be better off just adding one at each of, say, levels 1, 3, 7, 15, 21, 30, 35 etc. and leaving the rest empty?
  10. @Mujuro, in your case, I think I’ve detailed every way SPIKE can help. :sad: I wish I could do more. I always like to try and help if I can however; so I’ll make this suggestion: If you’re not doing this already, have you considered preparing a generic script to be included in each follower mod that contains a function that collects all the information you need and returns it when the function is called by your conversation quest. Also, as shared infos are easier to access than other voice assets, perhaps the other authors could be persuaded to make their dialogue shared infos. That’s all I have to offer at the moment and I am aware that you may be doing this already, so I’ll wish you the best of luck with this interesting and challenging project you’ve set yourself. Eck. :thumbsup:
  11. @Mujuro, why don’t you try doing what filmmakers do when they need to film a scene involving 2 characters who can’t directly interact with each other such as when 1 is a CGI and the other isn’t? Prepare the conversation in two completely separate halves, that make sense when played together, but each half doesn’t use any assets from the other half, they just play at the same time. When 1 character speaks for 11.3 seconds, the other waits 11.3 seconds. Then the second character speaks for 12.8 seconds while the first one waits and so on. You could also have each half wait until it receives an update from the other one letting it know that it’s time to speak. No passing of custom voice types required, each mod handles its own character’s half of the conversation and the silent waiting periods line up with the speaking periods in the other mod. Eck.
  12. Two more posts while I was writing mine; OK, here goes @Ironman5000, if you want to use SPIKE, you’ll need to let me know what keywords you want and I’ll add them. Then you assign them to your custom objects in however many Mods you want and change the levelled list edits to include all instances of the keywords rather than just the specific objects from each Mod. That way, whichever Mod loads last will use every object from all of them. :) If you’re interested, I can prepare a step-by-step guide if you want. @IsharaMeradin, yes it would, or to create an alternate version including the other Mod authors changes. This will always be easier for some Mod combinations and I characterised it as the ‘Compatibility Mod’ method and as you said Which is fine and reflects my own opinion about the Compatibility Mod method. Eck.
  13. @Mujuro, do you not have the cooperation of the other mod author? I suppose that must be it, otherwise you could just split the conversation between the two Mods. I presume the other author is also unwilling to allow you to just include their dialogue assets in your mod. Without the cooperation of the other mod author, I think you’re probably doing all you can already. I’ll let you know if I think of anything else, good luck. @IsharaMeradin, I’m sorry you feel frustrated, that wasn’t my intent at all. I’m beginning to think that I’ve done or said something to offend you. If so, please let me know what it is and I’ll let you know whether it was intentional or not. I don’t wish to tell you who you should or should not be offended by, but if it’s me I’d at least like to know why. The article is only meant to explain the basic idea of SPIKE, not to provide an instruction set for using the system. I’m starting from a position of not even knowing if anyone is interested in using SPIKE. I haven’t provided step-by-step instructions because, so far, no-one’s asked me to. I don’t see the point in going to that kind of effort if no-one’s interested in using the system. That’s why I wrote the article in the way I did, to explain the basic idea and to see if anyone’s interested in using it. As to my definitions of the different methods for compatibility, I just used the ones I could find in my research and categorised them in the way I did because that’s how I found them when I searched on-line for a way to make Mods work together. To address your specific concern over my characterisation of the Parent Method as somewhat limited, I’m not talking about using one mod as a Parent Master for another. I’m talking about the method where one Mod alters the state of a vanilla object in a forgotten corner of a dummy cell and another Mod checks that object’s state to see if the first Mod is present. The second Mod typically sets the chosen object as a Parent object to some kind of toggle that the second Mod uses to enable, or disable, various features when it does, or does not, detect the first Mod’s presence by the state of the agreed upon object. I wasn’t trying to explain how to use this method in one short paragraph, merely to point out to Mod authors familiar with it that I had considered it and found it lacking as it merely lets other Mods detect the presence or absence of the Mod in question. This method has apparently been around since before Skyrim. It’s been my experience that most people don’t really read the words in front of them; they merely skim them and guess at the meaning, filtering it through their expectations and assumptions. That’s just how the human brain works. If it didn’t, we’d all take forever just to read one book. (I know some gifted and/or autistic people can devour whole paragraphs at a glance and repeat them verbatim, but most can’t.) I don’t think normal levels of education even touch on this phenomenon, so educating people won’t help and I don’t think it’s fair to blame someone for getting the wrong end of the stick when it’s something that 99% of our species does every day. We’re all only human and if you expect us to be anything else, you’re only setting yourself up for disappointment and frustration. @Grimoa, that looks very interesting, I’ll definitely give it a closer look if I decide to make a custom race. From what I can see Expired’s Mod provides a script for people to use with their custom race Mods that is designed to ensure that everyone is compatible. I didn’t see anything suggesting that it allows Mods to pass each other information, which is what SPIKE does. If anyone would like to use SPIKE, or to find out more, I’m happy to oblige. Eck.
  14. @Mujuro, even using keywords, if you absolutely must access the dialogue directly rather than by proxy as I suggested in the last post, you will inevitably need the form IDs. You could try putting the dialogue on a FormList and passing that list between Mods as a property in a function. If I come up with anything better, I’ll let you know. @IsharaMeradin, I disagree, Nexus is an international site and words don’t mean the same thing to everyone. I also disagree with excluding people from using Mods just because their reading skills might not be up to some arbitrary standard. OK, here goes:Mod A changes arrow by copying and editing copy, then overwriting the original while keeping the copy. Mod B does the same. You now have 2 versions of arrow copy loading up. Either or both Mods have a simple arrow quest that fills aliases by keyword. If arrow copy A and arrow copy B’s aliases are filled, the quest returns arrow AB to the original arrow’s reference. No patch required. I don’t see why you think this is so harsh Patches do put many people off. You might be adventurous and confident in your ability with computers, but many less-than-technically-expert gamers aren’t. I have personal experience of exactly this situation with a friend of mine and he’s not alone in his techno-fear. Eck.
  15. @Mujuro, I’m not sure if this’ll work, but have you considered it: 2 Mods, AMod & BMod, add followers A & B each with a custom dialogue quest AQuest & BQuest & each identified by keyword. In AQuest, use B’s keyword to fill quest alias B & in BQuest, use A’s keyword to fill quest alias A. AQuest starts the conversation with a line spoken by A, then waits, passing over to BQuest which has B speak the next line before passing back to AQuest and so forth. You could use any number of methods for the 2 quests to know whose turn it is to speak, adding or removing A & B’s keywords being just one. The 2 quests run simultaneously and, as neither will activate unless the corresponding quest alias is filled, you don’t need any special provision. What do you think? Eck.
  16. @Mujuro, I’m not sure how much information you want to pass between Mods, but you can attach as many keywords to a follower as you want, each one would be True if present and False if absent or invalid. This allows them to be used as a group of switches without having to worry about whether another Mod is present or not or whether another Mod will overwrite them accidentally: If A then … If B then … If A & B then … Etc. For example, if AnewFollowerMod.esp adds a follower ‘John Doe’ to the game and you want to be able to activate something in ANOtherMod.esp if ‘John Doe’ is present. When the player hires him, the act of hiring ‘John Doe’ can conveniently attach as many keywords as you need to the player. A simple check of the player having a keyword can tell you as much as you need to know. You could also check if there is anyone in ‘John Doe’s’ starting location, or even a list of locations, who has a particular keyword and assign this Actor to an Alias allowing you to do whatever you then need to. The only real limit is a digital one as each keyword is a Boolean variable and can only pass True or False; this is also the system’s strength as an invalid Boolean is False by default, allowing the game engine to react in a stable way when it encounters it. @Ironman5000, it would be possible to add specific keywords tailored to individual Mods, but a series of generic keywords would be much better and is what I originally envisioned for SPIKE. For example, these keywords might prove useful for levelled lists: WeaponLvl1, WeaponLvl6, WeaponLvl12, WeaponLvl18, etc. They’re quite generic and the only reason I haven’t already added a series of generic keywords to SPIKE is that I don’t yet know if anyone wants to use it, or what range of keywords people would want. The potential problem of duplicate keyword ID codes is resolved by having SPIKE administered by a single individual. As I came up with the idea, I’m volunteering to do it but if the community would prefer to have someone else do it, I’d be prepared to relinquish control to the Nexus moderators or some such person. Keywords should only be added to SPIKE by one person with new versions of SPIKE being rolled out as necessary otherwise there could be problems. If you want to add keywords from SPIKE via a script, that would require a ‘compatibility mod’ using SPIKE as it’s Master file and I was trying to avoid having to use a mod or patch for compatibility as that can be difficult for less technical people to use. @IsharaMeradin, using patches/wrye bash is fine for us because we’re all technically proficient by virtue of having earned our place on this private forum, but many gamers aren’t and I don’t want to limit their access to all our work if I don’t have to. There has been in the past within the on-line community an elitist attitude with a strong air of disdain for those who aren’t computer wizards (I'm NOT suggesting that you hold any such views); I’m trying to give those people access to the same variety of gaming experience as we have. I’m also trying to make it easy for us to accommodate them with a system for compatibility that’s easy to use. For the example you cited, and all such situations, the easiest way to be compatible is for the mod authors to copy the vanilla form and modify the copy. Each version would have a keyword and either mod could react on finding it by enabling a combined version. I know changing both Mods to add the check and the alternate version seems like a lot of work, but it isn’t any more work than creating a patch and is much easier for any gamer to use. There will always be a place for patches; I’m trying to add to your options, not reduce or control them. @Ironman5000 - second post. Nothing prevents you from using vanilla keywords for that purpose except the limited number available, the limited versatility they have and the fact that their use might be altered by Bethesda as they wish without notice. For example, in order to recognise an iron sword, I use the keyword GDOWeapIronSword. By adding this to the base object Iron Sword, all generic pre-enchanted iron swords inherit it and I can recognise all of them along with any custom made iron sword from a mod that uses SPIKE. Without this custom keyword, I could only recognise the base item (This was the situation in the vanilla game) or try to use the vanilla keywords WeapTypeSword and WeapMaterialIron. The only condition I can use is ‘WornHasKeyword’ which returns True if anything equipped by the actor I’m checking has the keyword I look for. Checking for both of those vanilla keywords on an actor returns True if an iron sword is equipped, they also return True if the actor has an iron axe and a steel sword, or indeed any sword, equipped. It’s just as bad, if not worse, with armor. There is a condition, IsWeaponInList, but according to the Wiki it’s use is deprecated, so it’s not a good idea to rely on it. Sorry for the huge post, but I felt that your questions deserved full answers. Thanks for your interest. Eck. :D
  17. Unfortunately, that doesn’t always seem to work, which I think is why some people are continuing to have this problem.Eck.
  18. I don’t know how much of a problem this is, but I’m getting a number of comments relating to it from Users. NPCs commenting on hidden spells that various Mods use to achieve their effects. These comments can be really off-putting in-game and are quite easy to turn off in your Mod. The various ‘Colorful Magic’ comments are generated by the Quest WICommentMagicColorful. The frequency of the comment being generated is controlled by a Global Value percentage which is set to 100 by default. To disable this Quest and therefore all the comments, regardless of which NPC is involved, set the Global Value WICommentChanceMagicColorful to zero in your mod whenever the spell you are using for your effect is active. Or you could tell your Users to input the console command: Set WICommentChanceMagicColorful To 0 I hope that helps. Eck. :)
  19. Basically, yes. :) You would also need to add keywords from SPIKE to the weapons you wanted to use on the levelled lists and have a simple script that runs on start-up. This script would look for those keywords and add every weapon that has them assigned to the levelled lists, thereby picking all of them up, no matter how many Mods were involved. Or you could come up with another method, that’s the versatility that Keywords provide. If you’re interested, I’d be happy to add keywords to SPIKE to accommodate your needs, as, from what I understand you’re looking for, the current ones are unlikely to be enough. As stated in the article, I will have to administer SPIKE in order to ensure that, as new keywords are added, the IDs of those already present are not compromised. Eck.
  20. Im relatively new to this, which is why I get insulted and ignored I guess, so please forgive me if Im breaking some unwritten taboo or something. Ive come up with an easy to use method for Mod compatibility and Id like to know what other Mod authors think. My method uses Keywords and is detailed in This Article. If youre interested, have a look and tell me what you think. I look forward to reading your thoughts. :psyduck: Eck.
×
×
  • Create New...