Guest Posted August 5, 2014 Posted August 5, 2014 I was thinking the same. It should change animation but not the "state" itself (sitting). Not sure how you can override the state of a player with something that, i.e. like when you disable the chair behind the Player's back but the Player will still be sitting on the "nothing", on the air... At that point, really, a tapkey could make the trick pretty well as someone suggested. Behind a conditional statement, it never fails for me. Or you could try PlayerREF.placeatme <some grenade / mine / something that explodes>...
prideslayer Posted August 5, 2014 Posted August 5, 2014 Oh yeah, blow them up with a grenade if they won't stand up? haha. Really, I thought of tapkey, it's the first thing I thought of. I was just hoping there is another way.
Guest tomm434 Posted August 5, 2014 Posted August 5, 2014 Tomm is that quest only on TTW or there's a way for me to check it via NV GECK? Because I experimented a lot with packages on player, they never worked. At least, I had funny discoveries and consequences, but they weren't working as intended, like for npcs. It's simple - you add package to player and choose an anim with start idle. I think you can see it in VCG quest -when Doc.Mitchel wakes player up. But recently I moved to spamming "playidle" on player and NPC. Packages idles often don't execute. And one execution of Playidle sometimes is not enough too. Usually I spam this during the whole scene(with 0.05 quest delay) untill the very end and interrupt anim with Dialogue package (or fade-to-black + PlayGroup forward 1). But when I can't do that, I spam playidle for 3 seconds with timer. It's a VERY big shame Fallout has no check for actor playing particular idle. "IsAnimationPlaying" doesn't seem to be working.
prideslayer Posted August 5, 2014 Posted August 5, 2014 IsIdlePlaying you mean? That will return 1 if they're playing a special idle. I used to use that in sexout but stopped because it still meant that there were 'gaps' where the actors were standing. There had to be, in order for that to return false and trigger me to call playidle again. So instead I just took the hard road and made sure every animation had correct looping enabled, and was set to loop in the geck. I missed one but it's fixed in the beta. Now I can be sure that the animation keeps playing until I stop it, without having to keep checking that it didn't stop on its own. I emphasized special idle because it does not return 1 if they're playing some other kind of animation. You can also test/check GetAnimAction. I don't know what you're doing so I don't know if checking like this is enough. It's no good for sexout.
Guest Posted August 5, 2014 Posted August 5, 2014 Tomm is that quest only on TTW or there's a way for me to check it via NV GECK? Because I experimented a lot with packages on player, they never worked. At least, I had funny discoveries and consequences, but they weren't working as intended, like for npcs. It's simple - you add package to player and choose an anim with start idle. I think you can see it in VCG quest -when Doc.Mitchel wakes player up. But recently I moved to spamming "playidle" on player and NPC. Packages idles often don't execute. And one execution of Playidle sometimes is not enough too. Usually I spam this during the whole scene(with 0.05 quest delay) untill the very end and interrupt anim with Dialogue package (or fade-to-black + PlayGroup forward 1). But when I can't do that, I spam playidle for 3 seconds with timer. It's a VERY big shame Fallout has no check for actor playing particular idle. "IsAnimationPlaying" doesn't seem to be working. Ok, for idles I know... I was hoping you could make other neat things with packages, à la Skyrim... I don't use it often, but I did use sometimes IsAnimPlaying, and it worked for me. It's the only way I know to test any kind of animgroups (special idles, movement, combat etc.), I'll be careful then in the next scripts to see if I will have problems like you.
ArgusSCCT Posted August 6, 2014 Posted August 6, 2014 Can an actor effect be applied indefinitely, or at least until a certain variable changes? I don't remember which page in the wiki said that you needed to set a huge duration for the effect to stick for a while. Also can two effects be applied by the same script? What the old mod I'm working on did was just to add an enchanted object to the player and then equip it to either reduce the player's speed or increase it based on the variable I mentioned. I thought that was sort of messy, so I want to use CIOS instead of doing that.
prideslayer Posted August 6, 2014 Posted August 6, 2014 The effect can be set with a duration of all 9's which will make it last several decades or something like that. This is how all the sexout effects work, more or less. They also tend to use gamemode blocks rather than scripteffectsrart/scripteffectupdate. When they are done running, they dispel themselves. Every spell can have multiple effects (you'll see this in the GECK). Every effect can have a script. You can put as much stuff as you want in each script. I prefer using one effect with one script, and letting the script do a lot of different things, because there's not an "easy" way for multiple scripts to communicate with each other -- at least there isn't without NX variables.
prideslayer Posted August 6, 2014 Posted August 6, 2014 I was thinking the same. It should change animation but not the "state" itself (sitting). Not sure how you can override the state of a player with something that, i.e. like when you disable the chair behind the Player's back but the Player will still be sitting on the "nothing", on the air... To update, I just came across an (old) discussion on this in the beta thread. 7th post. http://www.loverslab.com/topic/8655-sexoutng-beta-2686b4-release-thread/?do=findComment&comment=195063 Well.. the sitting issue I'm still struggling with a little. I can detect when they are setting (GetSitting works fine), and I can even force play a "stand up" idle, but that doesn't actually make them stand up -- just puts the animtion playing out of sync with what the actor is actually doing. I settled on evp (which DID work contrary to what I said in that post), but it only worked on the npc. Just for information's sake. I don't know what I'm going to do for the player yet. I added the WakeUpPC call but haven't tested it, and I don't think it's going to work where it is -- since the script only runs in gamemode, and if you're sleeping, you're in menumode. I can probably just safely ignore both states (sleeping, sitting) for the player. I have up until now with no problems.
ArgusSCCT Posted August 6, 2014 Posted August 6, 2014 The effect can be set with a duration of all 9's which will make it last several decades or something like that. This is how all the sexout effects work, more or less. They also tend to use gamemode blocks rather than scripteffectsrart/scripteffectupdate. When they are done running, they dispel themselves. Every spell can have multiple effects (you'll see this in the GECK). Every effect can have a script. You can put as much stuff as you want in each script. I prefer using one effect with one script, and letting the script do a lot of different things, because there's not an "easy" way for multiple scripts to communicate with each other -- at least there isn't without NX variables. Noted. However, these effects, its either one or the other not both at the same time, but I guess that's not a problem, just need a conditional and that's all. I don't know about communication in-between scripts, I just normally change something by using Quest.variable, or through functions. As far as I know (which isn't a lot, yet) using the "Quest.variable" method isn't something bad, is it? The other way I can think of using is through globals, but I'm not using that and I don't think I need to use it anyway. Every time I mention globals anywhere, people tell me they are bad.
Guest tomm434 Posted August 6, 2014 Posted August 6, 2014 Prideslayer, I meant http://geck.bethsoft.com/index.php?title=IsAnimPlaying I was adding travel package to actor to another dead actor. Animation was suppostd to be looping(guard hits a prisoner on the ground from "The Pitt". First I was hoping that on the end of his travel package I will set a variable and check "isAnimPlaying ==0" and will start idle and then after 10 secs will add him another travel package ). But I coudn't because function returned 0. So I ended up with animation on the end of the package and a timer. (I hate both of them) I neved knew "IsIdlePlaying". So I can create new animation in "Loose" folder, open some existing anim, then tick "Special idle" and IsIdlePlaying will return 1 then?
Guest Posted August 6, 2014 Posted August 6, 2014 Sorry tomm, but my guess is there's something not right in the example in the beth guide. A character is always playin any animation, so the first example, IsAnimPlaying == 1, doesn't make complete sense for me because theroretically it would be always 1 if you don't pass some parameter. My guess is if you don't specify the animgroup, it simply doesn't work. Next time you find yourself with a script that needs it, you could still make an attempt speifying SpecialIdle as parameter if you are curious
Guest tomm434 Posted August 6, 2014 Posted August 6, 2014 I'll try to play with "IsPlayingIdle" and make an anim "Special". If it really works, I will be one step further to removing any randomness in the scene.
prideslayer Posted August 6, 2014 Posted August 6, 2014 The effect can be set with a duration of all 9's which will make it last several decades or something like that. This is how all the sexout effects work, more or less. They also tend to use gamemode blocks rather than scripteffectsrart/scripteffectupdate. When they are done running, they dispel themselves. Every spell can have multiple effects (you'll see this in the GECK). Every effect can have a script. You can put as much stuff as you want in each script. I prefer using one effect with one script, and letting the script do a lot of different things, because there's not an "easy" way for multiple scripts to communicate with each other -- at least there isn't without NX variables. Noted. However, these effects, its either one or the other not both at the same time, but I guess that's not a problem, just need a conditional and that's all. I think they can apply simultaneously -- just don't put conditions on them. It's been a long time since I tried this but I'm pretty sure it works. I don't know about communication in-between scripts, I just normally change something by using Quest.variable, or through functions. As far as I know (which isn't a lot, yet) using the "Quest.variable" method isn't something bad, is it? The other way I can think of using is through globals, but I'm not using that and I don't think I need to use it anyway. Every time I mention globals anywhere, people tell me they are bad. The quest variables are a problem if you have two spells (or any kind of scripts) running at the same time that both need it. If the spell is on npcA and npcB and both need to use the quest variable, how do you make sure they don't interfere with each other? NX vars (the NX_Set* and NX_Get* functions) were created to solve this problem.
Guest tomm434 Posted August 6, 2014 Posted August 6, 2014 I've got another game engine question if no one minds. I've got a simple conditions in a quest with delay of 0.05 if stage ==1 if NPCref.isbusy ==1 && Gettype MyPackage ==73 NPCref.addscriptpackage MyPackage endif Inside package I call a function which sets quest variable "stage" to 0,NPCref.isbusy to 0, MyPackage toa cell so package is no longer added. So after dialogue stage is set to 0 and package is not added anymore. But there was 1 time when NPC started dialogue after dialogue so I think that script in stage 1 executed twice. I can send a full script if needed. So maybe script got to the point of stage1 and didn't "realise" or checked wrong and "though" that stage is still eval to 1. I wanted to ask - is there any way to solve this issue? I can't execute stage 1 just once because I need dialogue to happen. Quest will be executed many timer in game so I need to make it reliable.
prideslayer Posted August 6, 2014 Posted August 6, 2014 But there was 1 time when NPC started dialogue after dialogue so I think that script in stage 1 executed twice. If you don't want it executing twice, in stage 1, set it to 2 or some other value so the script doesn't do anything. Then later on if you need it to run again, set it back to 1 (or 0, or whatever).
Guest tomm434 Posted August 6, 2014 Posted August 6, 2014 The problem is that I constantly cast package in stage 1 and I can't set it to 0 in gamemode, only in dialogue or menumode. And I can't execute "return" from another quest\script. Also if I use "stopquest" - it doesn't work as return.
Guest Posted August 6, 2014 Posted August 6, 2014 what kind of package is MyPackage? what's the main purpose of the whole thing? being sure that NPCref will start a dialogue, and it will do it just once?
Guest tomm434 Posted August 6, 2014 Posted August 6, 2014 my package is a dialogue package and yes, start it once.
Guest Posted August 6, 2014 Posted August 6, 2014 so if I understood well, you are spamming a dialogue package every 0.05 seconds, so you are sure that the ref will talk, then inside the dialogue itself you set a variable so that the quest script will stop spamming the addscriptpackage?
Guest tomm434 Posted August 6, 2014 Posted August 6, 2014 Exactly! That's what I should have said from the very beginning.
prideslayer Posted August 6, 2014 Posted August 6, 2014 Why don't you just ensure the package is 'must complete' and so on, and don't spam it so often. Just have gamemode look to see if that package is active on the actor or not -- if it's not, add it again. Keep doing that (once a second or so is enough) until the dialog occurs and sets the flag to stop it. There's no need for menumode at all here.
Guest Posted August 6, 2014 Posted August 6, 2014 of course I should know the whole purpose of why you are scripting it, you surely have good reasons. But my suggestion is, when there's not really need to script something like that, use the tools vanilla gives you to handle packages, they are pretty reliable. So for example the usual way to handle packages is by their own specific windows, like for example adding a list of packages in the ref AI package window, and setting a numeric variable which will condition the package that the ref will pick. So for example, I add a dialogue / find package on a ref, then as condition I use myquest.myvar == 1, then inside my main script I set myquest.myvar to 1 and myref.evp, this automatically leads the reference to pick that package and talk to me. To end this package, inside the dialogue result script I set myquest.myvar to 0 and I MyRef.evp. More than once I had to use MyRef.ResetAI instead evp because on dialogues it happens often that they will start again to talk (like happened to you if I understood well) now addscriptpackage usually it's used when something is not usual, some package must be used only in some specific situation. But I'm not sure this is your case. Since you are even checking if MyPackage is really a Package (GetType 73), this leads me to think you are doing some generic function that passes parameters so that you can spam a generic package and force it whatever it is, in whatever situation you want. Is it what you are trying to do?
Guest tomm434 Posted August 6, 2014 Posted August 6, 2014 Then I would be adding about 30 packages to her window and the number is only rising. Well, I can publish the script I think. I have triggers all over Mojave and all of them set its own variable like this let LunetteReactionsCheckQuest.TriggerBunkerEnterCheck :=1 startquest LunetteReactionsCheckQuest Then if check is eval to 1, appropriate dialogue package is set and stage is set to 1 and return(only 1 dialogue at a time!). Then I call "reset" function which resets particular variable and sets it to 2 so it lo longer triggers stage1!. If there are no more checks (any variable in quest is eval to 1) then quest terminates. It's some kind of queue. I did it because there are many checks which occur in gamemode (Like random conversations or level up dialogue packages + player can somehow reach the next trigger) and I want to make sure that none of dialogues is skipped. Prideslayer, you are proposing me to make the same system but to lower quest delay. I want to evade setting variables inside dialogues script because if any of cutscenes goes bad - game is stuck because player controls are disabled + Lunette.isBusy ==0 which block her conv with player. Let's say that at least 1000 people wll download my mod - there are cutscene all over mojave + her features like healing, changing hair which use cutscenes too. So we multiply 1000x30 (30 is the average amount of times scenes will be triggered during 1 hour of gameplay) and we have 30000 times code will run. So can this be that in any of those cases Dialogue script will fail and scene\game\NPC will stuck. Someone will complain but I wil be able to do nothing with that. That;s why I'm looking for reliable solution and only reliable solution is in constantly checking something. That's your school .
Guest Posted August 6, 2014 Posted August 6, 2014 Then I would be adding about 30 packages to her window and the number is only rising. Well, I can publish the script I think. OF COURSE YOU CAN DO IT IN MANY WAYS, BUT USUALLY YES, THAT'S HOW IT WORKS. HOWEVER, FOR DIALOGUE FOR EXAMPLE, YOU ONLY NEED A SINGLE PACKAGE. IT'S DIALOGUE CONDITIONS THAT DECIDE WHAT TOPIC WILL TRIGGER, WHAT KIND OF GREETINGS YOU WILL RECEIVE, WITHOUT USING A SPECIFIC DIALOGUE PACKAGE EVERYTIME. YOU COULD EVEN USE A GENERIC FIND PACKAGE. DO YOU FEEL THAT PILING CONDITIONS INSIDE GREETINGS IS OVERWHELMING? CHECK A GENERIC VANILLA FORM, NOW THAT'S OVERWHELMING I have triggers all over Mojave and all of them set its own variable like this let LunetteReactionsCheckQuest.TriggerBunkerEnterCheck :=1 startquest LunetteReactionsCheckQuest Then if check is eval to 1, appropriate dialogue package is set and stage is set to 1 and return(only 1 dialogue at a time!). Then I call "reset" function which resets particular variable and sets it to 2 so it lo longer triggers stage1!. If there are no more checks (any variable in quest is eval to 1) then quest terminates. It's some kind of queue. I did it because there are many checks which occur in gamemode (Like random conversations or level up dialogue packages + player can somehow reach the next trigger) and I want to make sure that none of dialogues is skipped. VANILLA HAS MANY BARKS, LUNETTE WILL HAVE SURELY MUCH MORE PERSONALITY AND BARKS AND EVENTS ETC. SO IT WILL BE DEFINETELY MORE COMPLICATED. I THINK YOUR SOLUTION WILL SURELY HELP YOU KEEPING THE THINGS MORE "CLEAN" IN THIS, ESPECIALLY IF YOU HAVE A PROBLEM AFTER SOME MONTHS AND YOU HAVE TO TRACK IT DOWN. HOWEVER, I STILL THINK THAT WHEN YOU CAN USE SPECIFIC TOOLS AND NOT SCRIPT SOMETHING, IT'S BETTER. DON'T MISUNDERSTAND ME, I DON'T SAY IT'S RULE, I SAY IT'S JUST MY WAY OF THINKING: WHEN IN DOUBT, I CHECK VANILLA. I DOUBT THAT THEY WOULD HAVE USED SOME METHODS LIKE THE ONES THEY ARE USING (WITH NEVERENDING FORMS AND CONDITIONS) JUST BECAUSE THEY WERE MISSING NVSE OR GOOD SCRIPTERS, IF YOU HEAR WHAT I MEAN. MY VANILLA WAS ALWAYS PRETTY MUCH PERFECT, SO I DON'T THINK THEIR METHOD WAS THAT BAD. ANYWAY, THIS DOESN'T HELP YOU, NOT AT ALL. I ONLY WANTED TO ADD THAT AS I WROTE IN THE PREVIOUS POST, THE FACT THAT THE NPC IS TALKING AGAIN COULD HAPPEN, IF YOU THINK IT'S GOOD YOU COULD TRY TO RESETAI YOUR REFERENCE AFTER YOU CHANGE THE CONDITIONS OF YOUR QUEST. RESETAI ALWAYS WORKED FOR ME, WITH DIALOGUE PACKAGES.
Guest tomm434 Posted August 6, 2014 Posted August 6, 2014 All events will use the same system and will work if I make it right. That's why I created a single quest for it - to make sure nothing works wrong. I made stress tests - like level up + random conv + trigger checks at the same time (which has 1\1000 change of happening in normal gameplay) and it worked. The only flaw I have is in this time between dialogue packages package and next gameplay frames. if only I could cast "return" from one quest to another! Earlier I had level up and conv packages executed by their own quests(now THAT was unreliable). Also I can't move every response in 1 topic because each trigger has so many of them. Triggers are not one-time thing - for example trigger in Caesar tent manages all Legion progress(because player always returns there for next assigment.) So I'll try to make it work. Maybe some return there and there will help. Maybe I need to lower quest delay to minimize a chance of double dialogue. I'll think of something or I have to redo the whole system or add all dialogues to her form ID(which doesn't even possible because I would have to make each dialogue package for every stage of legion quest to start the topic) and don't caps please, it's killing my eyes.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now