Author Topic: Looking for a scripter (or at least for help with scripts)  (Read 441 times)

Legacy_DM-Chemosh

  • Newbie
  • *
  • Posts: 42
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« on: September 23, 2010, 07:12:15 pm »


               Hello everyone,

we, the PW "KNB - Krynn's New Beginning" are looking for a new scripter to help us realize some stuff we have in mind. (You can find us here => www.guildportal.com/Guild.aspx )

Person we are looking for must:

- be available 3 times a week for at least an hour
- be from the US or GER
- should be able to script NPCs (Bosses, Quests and so on) as well as Server wide scripting (specials)


KNB is a Dragonlance Server that is set somewhere after the Dragonlance Wars, but in its own time. There are some things added that are own creations making the server unique. We do have a loyal playerbase that are on and off the server and are currently extending the world with new areas, dungeons and items. Thus, we have a lot of work for a scripter. 

Should none of you be interested in this position, I could at least need some help with Boss-Monster Scripting and some Dungeon related things that I'd like to implement on the server.

Drop me a mail on here, or post an answer in this thread!


Thanks,
DM-Chemosh '<img'>
               
               

               


                     Modifié par DM-Chemosh, 24 septembre 2010 - 12:02 .
                     
                  


            

Legacy_DM-Chemosh

  • Newbie
  • *
  • Posts: 42
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #1 on: September 26, 2010, 01:26:53 am »


               Well, so far didn't receive an answer. I'll then post at least what I would like to have if anyone of you would be willing to script that, it would be truely awesome!



We are going to have a new big boss introduced some time soon and due to the fact that I am a scripting noob (Lilac Soul's Scripting Tools helps me over most though, thank god!)



* The Boss is spawned by a trigger at the start of the level, naturally



* She should say a few 5 sentences to the players (in which time I want them to not be able to attack her!), then spawn 2 associates I made and allow players to attack her.



* fight will be on a round platform (you know the tile with the invisible bridge) and I want her and her associates NOT to follow players away from the platform (make her not lureable)



Her Abilities should be something like this:

* call in 2 more associates every 2 min if the first ones have been slain

* have stages of combat:

Stage 1 (change  visual, high melee resistances, only truely damageable by Clerics)

Stage 2 (change visual again, high magical resistances, only truely damageable by melee)

Stage 3 (again change to another form and causing visual effects randomly in a sphere if possible everytime she gets hit by melee weapons only, for example the "mystical explosion", while trying to keep any magician wizs and sorcs stunned if in range of touch attack then hurrying back to attack the melees)

Stage 4 (visual change to her true form, pulling ALL players close to her and knocking them down, then pushing them away so they are "sent flying off the platform" and would have to run back to her to face her again. In this form have 50% immunity to every damage type)





Question is: Is all of that possible without a heartbeat? Or at least, only a heartbeat that fires while in combat mode, so the server doesn't get stressed too much? And would someone be willing to script that? I'd would be really happy if someone could help me out there...
               
               

               
            

Legacy_Terrorble

  • Sr. Member
  • ****
  • Posts: 370
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #2 on: September 26, 2010, 11:54:43 pm »


               

DM-Chemosh wrote...

* The Boss is spawned by a trigger at the start of the level, naturally

Make an encounter that fires once or however you want, put it down.  Right-click the encounter area to set a spawn point.  Move that spawn point to where you want the boss to be.

* She should say a few 5 sentences to the players (in which time I want them to not be able to attack her!), then spawn 2 associates I made and allow players to attack her.

* fight will be on a round platform (you know the tile with the invisible bridge) and I want her and her associates NOT to follow players away from the platform (make her not lureable)


In the properties of the boss, you'll have to make a custom script for the OnSpawn event (i.e. edit the existing one, just give it a new name when you save it and only use it for that boss version)  You'd need to add something like this within that script:


//these next 4 lines need to go at the very top of the OnSpawn script right after the #include statements and before the void main().  We need to use this non-standard function later, so we have to define it first.
void CreateObjectVoid(int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE)
{
    CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation);
}

object oArea = GetArea(OBJECT_SELF);  //determines the area the boss that just spawned is in
string sAreaTag = GetTag(oArea);
object oTarget = GetFirstObjectInArea(oArea);  //Get the first thing in the area
//create an effect that we can apply to PC/NPCs so they can't do anything while the boss is talking to them
effect eNoMove = EffectCutSceneParalyze();  //or maybe EffectCutSceneDominated();
while( GetIsObjectValid(oTarget) )  //start a loop that will cycle thru all objects in the area until it runs out of valid things to check
{
//if the thing we're looking at is a creature then...
if( GetObjectType(oTarget) == OBJECT_TYPE_CREATURE )
{
    //Freeze the object for 40.0 seconds with the paralyze or dominated effect we made
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eNoMove, oTarget, 40.0);
}
//cycle to next object in the area and do the same thing
oTarget = GetNextObjectInArea(oArea);
}
//set up a few lines for our actress to spout off before annhiliating your players.  add more as you like
string sBossChatter1 = "I are going to pwn you.";
string sBossChatter2 = "Look 'round you, this be your eternal resting place.  Like it?";
string sBossChatter3 = "'nuf talk, it's dying time!";
string sBossChatter4 = "Oh and where are my cronies...";

//Recite the lines at 5, 15, 25 and 35 second intervals.  Hopefully the players are close enough to hear/see them
//Remember we froze everyone in place for 40seconds
DelayCommand(5.0, SpeakString(sBossChatter1, TALKVOLUME_TALK));
DelayCommand(15.0, SpeakString(sBossChatter2, TALKVOLUME_TALK));
DelayCommand(25.0, SpeakString(sBossChatter3, TALKVOLUME_TALK));
DelayCommand(35.0, SpeakString(sBossChatter4, TALKVOLUME_TALK));

//You'll have to put down 2 waypoints where you want the "associates" to be.  Their tags need to be: cronie_WP1 and 2
object oWP1 = GetNearestObjectByTag("cronie_WP1");
object oWP2 = GetNearestObjectByTag("cronie_WP2");
//Now that we have the WPs, get their locations so we can create the "associates" there
location locWP1 = GetLocation(oWP1);
location locWP2 = GetLocation(oWP2);
//After 36 seconds, create the associates at their respective waypoints.
//In this case, the associates' blueprint resrefs are "cronie1" and "cronie2"
DelayCommand(36.0, CreateObjectVoid(OBJECT_TYPE_CREATURE, "cronie1", locWP1));
DelayCommand(36.0, CreateObjectVoid(OBJECT_TYPE_CREATURE, "cronie2", locWP2));


Her Abilities should be something like this:
* call in 2 more associates every 2 min if the first ones have been slain
* have stages of combat:
Stage 1 (change visual, high melee resistances, only truely damageable by Clerics)
Stage 2 (change visual again, high magical resistances, only truely damageable by melee)
Stage 3 (again change to another form and causing visual effects randomly in a sphere if possible everytime she gets hit by melee weapons only, for example the "mystical explosion", while trying to keep any magician wizs and sorcs stunned if in range of touch attack then hurrying back to attack the melees)
Stage 4 (visual change to her true form, pulling ALL players close to her and knocking them down, then pushing them away so they are "sent flying off the platform" and would have to run back to her to face her again. In this form have 50% immunity to every damage type)


Question is: Is all of that possible without a heartbeat? Or at least, only a heartbeat that fires while in combat mode, so the server doesn't get stressed too much? And would someone be willing to script that? I'd would be really happy if someone could help me out there...


Well, I gave you what I could in the time I have.  I think *most* of this is possible, though I don't know how to do all of it or necessarily have time. 
When the associates spawn (in their OnSpawn handles), you could have them set a variable on the boss that deletes after 120.0 seconds (2min).  In the boss's OnDamaged handle (?? better spot ??) you could have it check to see if the associates are still there.  If not, and if the variable has been deleted, then it would create a new one.  Also in the boss's OnDamaged you could see what % of the boss's HP are left.  If it is say <25%, then it could destroy that boss and create the next version (Stage2) from the palette.  You'd need to create a different version for each stage in the palette with the immunities you want. 
There's still quite a bit of scripting work needed to make an aura that does what you want and to simulate the stage4 effects.

Gotta run.  gl
               
               

               
            

Legacy_DM-Chemosh

  • Newbie
  • *
  • Posts: 42
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #3 on: September 28, 2010, 06:12:51 am »


               Thanks for going this far at all, man! As I said, I am kinda a scripting n00b, able to modify scripts to achieve normally the effect I want, but I can't think for the heck of how to write something completely myself, if it wasn't for Lilac's Editor.

If someone would be willing to continue this and needs more information, let me know! I am really appreciating your contributions A LOT! (and will logically leave that IN the script, since I am no one to give others work out as my own, which is lame anyways!)

Thanks, guys!

//EDIT: On that note, I encoutered a weird problem with one of my other bosses. In the OnSpawnScript I use the CTG CreateTreasure stuff, which works with all bosses I did fine. Now, for the one I am talking about, there's never treasure created on her for some reason? The script is the SAME as for the boss before her and those DO get treasure when they get spawned in the level. So treasure chest for the area is fine (Unique). Question is: Could that be because she has an OnDmg script or could it even be because of her appearance that I chose? I'm really out of thoughts what causes it and it's annoying me quite a bit!
               
               

               


                     Modifié par DM-Chemosh, 28 septembre 2010 - 05:20 .
                     
                  


            

Legacy_420

  • Sr. Member
  • ****
  • Posts: 370
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #4 on: September 29, 2010, 12:12:34 am »


               

DM-Chemosh wrote...

//EDIT: On that note, I encoutered a weird problem with one of my other bosses. In the OnSpawnScript I use the CTG CreateTreasure stuff, which works with all bosses I did fine. Now, for the one I am talking about, there's never treasure created on her for some reason? The script is the SAME as for the boss before her and those DO get treasure when they get spawned in the level. So treasure chest for the area is fine (Unique). Question is: Could that be because she has an OnDmg script or could it even be because of her appearance that I chose? I'm really out of thoughts what causes it and it's annoying me quite a bit!

Two possible causes right off the top of my head. Either the creature's OnSpawn script has a SetIsDestroyable() command making the creature unselectable when dead or the X2_L_NOTREASURE local int may be set in the creature's variables (Edit Creature>Advanced>Variables).

-420
               
               

               
            

Legacy_DM-Chemosh

  • Newbie
  • *
  • Posts: 42
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #5 on: September 29, 2010, 06:44:37 am »


               I'm gonna have to check on that. Thanks for the hint there, 420.

Anyone able / willing to help with the "big boss script" some more?


//Edit: I checked on that and neither is true. Appearance is "Drow, Matron" which is I think used as Boss in the normal campaing somewhere if I remember right.

This is her "OnDamage" Script. Could it be it's because of the "Plot flag" thing? Since she is NOT set to plot by default. Also, she only has the variable "nStage" set to "0" on spawn.

Here's the script done by one of our other DMs:




void main()
{
    //--------------------------------------------------------------------------
    // GZ: 2003-10-16
    // Make Plot Creatures Ignore Attacks
    //--------------------------------------------------------------------------
    if (GetPlotFlag(OBJECT_SELF))
    {
        return;
    }
    object oPC = GetFirstPC();
    object oTarget = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
    float fHP = IntToFloat(GetCurrentHitPoints());
    float fMaxHP = IntToFloat(GetMaxHitPoints());
    float fPercent = fHP/fMaxHP;
    float fDist = GetDistanceBetween(oTarget, OBJECT_SELF);
    int nStage = GetLocalInt(OBJECT_SELF, "nStage");


    if (fPercent<=0.30 && nStage == 0) {
        ClearAllActions(TRUE);
        ActionSpeakString("Now - you shall see my true form!");
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_DUR_DEATH_ARMOR),  OBJECT_SELF);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(246),  OBJECT_SELF);
        SetCreatureAppearanceType(OBJECT_SELF, APPEARANCE_TYPE_WRAITH);
        SetLocalInt(OBJECT_SELF, "nStage", 1);
    }
    else if (fPercent <= 0.10 && nStage ==1) {
        ClearAllActions(TRUE);
        ActionSpeakString("If I'm going down, I'm taking one of you with me!");
        ActionForceMoveToObject(oTarget, TRUE);
        SetLocalInt(OBJECT_SELF, "nStage", 3);
    }
    else if (nStage == 3) {
        if (fDist < 5.0) {
            if (TouchAttackMelee(oTarget) == 1 || TouchAttackMelee(oTarget) == 2) {
                ActionSpeakString(GetName(oTarget) + ", you shall die with me!");
                effect eDeath = EffectDeath(TRUE);
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
            }
        }
        else {
            ClearAllActions(TRUE);
            ActionForceMoveToObject(oTarget, TRUE);
        }
    }
    else{
    //--------------------------------------------------------------------------
    // Execute old NWN default AI code
    //--------------------------------------------------------------------------
    ExecuteScript("nw_c2_default6", OBJECT_SELF);
    }
}
               
               

               


                     Modifié par DM-Chemosh, 29 septembre 2010 - 05:52 .
                     
                  


            

Legacy_GhostOfGod

  • Hero Member
  • *****
  • Posts: 1490
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #6 on: September 29, 2010, 07:25:16 am »


               It'd probably be best to do one thing at a time here. So let's start with the first part:

* The Boss is spawned by a trigger at the start of the level, naturally

* She should say a few 5 sentences to the players (in which time I want them to not be able to attack her!)


So if the boss is spawned via a trigger and then you don't want the boss to be interupted while it is speaking it's lines, you will need to freeze the players. But which players? Just ones in the same party? The ones in a trigger? All of them in the area? What if someone else enters the area, while some players are frozen listening to the lines, and starts shooting the boss with a bow and messes everything up? And then what if someone else comes in and enters the trigger? Will another boss spawn? Will the current one stop and speak it's five lines again? Just some stuff to think about. What might seem simple could turn out to be pretty complex.

Probably the best way to prevent the problems mentioned above would be to freeze all players in the area while the boss speaks her lines and spawns her associates. Might even need to make sure that no one else can enter the area while this is happening. Or make it so that anyone who enters the area while the boss is speaking is frozen as well.
               
               

               
            

Legacy_DM-Chemosh

  • Newbie
  • *
  • Posts: 42
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #7 on: September 30, 2010, 12:44:27 am »


               Yeah, you're right actually. I think, I will go a different way by just sending a tell to each player onenter of the level hearing her chant or something. So when they get to her, she can say just one sentence while spawning her associates. That makes more sense....

               
               

               
            

Legacy_Terrorble

  • Sr. Member
  • ****
  • Posts: 370
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #8 on: September 30, 2010, 01:03:15 am »


               
Quote
Terrorble wrote...

Quote
DM-Chemosh wrote...

* The Boss is spawned by a trigger at the start of the level, naturally

Make an encounter that fires once or however you want, put it down.  Right-click the encounter area to set a spawn point.  Move that spawn point to where you want the boss to be.

Quote

* She should say a few 5 sentences to the players (in which time I want them to not be able to attack her!), then spawn 2 associates I made and allow players to attack her.

* fight will be on a round platform (you know the tile with the invisible bridge) and I want her and her associates NOT to follow players away from the platform (make her not lureable)


In the properties of the boss, you'll have to make a custom script for the OnSpawn event (i.e. edit the existing one, just give it a new name when you save it and only use it for that boss version)  You'd need to add something like this within that script:


**these next 4 lines need to go at the very top of the OnSpawn script right after the #include statements and before the void main().  We need to use this non-standard function later, so we have to define it first.
void CreateObjectVoid(int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE)
{
    CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation);
}

//put all this next stuff right after the void main() {
object oArea = GetArea(OBJECT_SELF);  //determines the area the boss that just spawned is in
string sAreaTag = GetTag(oArea);
//create an effect that we can apply to PC/NPCs so they can't do anything while the boss is talking to them
effect eNoMove = EffectCutSceneParalyze();  //or maybe EffectCutSceneDominated();
object oTarget = GetFirstObjectInArea(oArea);  //Get the first thing in the area
while( GetIsObjectValid(oTarget) )  //start a loop that will cycle thru all objects in the area until it runs out of valid things to check
{
//if the thing we're looking at is a creature then...
if( GetObjectType(oTarget) == OBJECT_TYPE_CREATURE )
{
    //Freeze the object for 40.0 seconds with the paralyze or dominated effect we made
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eNoMove, oTarget, 40.0);
}
//cycle to next object in the area and do the same thing
oTarget = GetNextObjectInArea(oArea);
}
//set up a few lines for our actress to spout off before annhiliating your players.  add more as you like
string sBossChatter1 = "I are going to pwn you.";
string sBossChatter2 = "Look 'round you, this be your eternal resting place.  Like it?";
string sBossChatter3 = "'nuf talk, it's dying time!";
string sBossChatter4 = "Oh and where are my cronies...";

//Recite the lines at 5, 15, 25 and 35 second intervals.  Hopefully the players are close enough to hear/see them
//Remember we froze everyone in place for 40seconds
DelayCommand(5.0, SpeakString(sBossChatter1, TALKVOLUME_TALK));
DelayCommand(15.0, SpeakString(sBossChatter2, TALKVOLUME_TALK));
DelayCommand(25.0, SpeakString(sBossChatter3, TALKVOLUME_TALK));
DelayCommand(35.0, SpeakString(sBossChatter4, TALKVOLUME_TALK));

//You'll have to put down 2 waypoints where you want the "associates" to be.  Their tags need to be: cronie_WP1 and 2
object oWP1 = GetNearestObjectByTag("cronie_WP1");
object oWP2 = GetNearestObjectByTag("cronie_WP2");
//Now that we have the WPs, get their locations so we can create the "associates" there
location locWP1 = GetLocation(oWP1);
location locWP2 = GetLocation(oWP2);
//After 36 seconds, create the associates at their respective waypoints.
//In this case, the associates' blueprint resrefs are "cronie1" and "cronie2"
DelayCommand(36.0, CreateObjectVoid(OBJECT_TYPE_CREATURE, "cronie1", locWP1));
DelayCommand(36.0, CreateObjectVoid(OBJECT_TYPE_CREATURE, "cronie2", locWP2));

**This previous part has a few limitations:  as soon as the boss spawns, it freezes everyone.  So the encouter will need to be small-ish and very close to where the boss spawns.  There are other ways to do this so that the boss is already there, then the players are frozen just as they enter a trigger area.  Problem is, if one player is way ahead of the group, the rest will miss out.  This script will not freeze someone who enters the area during or after the boss spawns.  The boss will speak its lines, but only those who are close will see/hear the text (you can change those lines to use TALKVOLUME_SHOUT to ensure everyone hears it)  When the boss summons the cronies, I assume that the cronies are different... and I'm not at my machine to see if this compiles.

Quote

Her Abilities should be something like this:
* call in 2 more associates every 2 min if the first ones have been slain
* have stages of combat:


This part goes in the OnSpawn script for each of the associates:

//You need to insert the tag of your boss here.  For every version of this boss you make, keep all the tags identical
object oBoss = GetNearestObjectByTag("tag-of-boss");
//Get the tag of the cronie that this OnSpawn script is running for
sCronieTag = GetTag(OBJECT_SELF);
//Set a variable on the boss, then delete it in 2min to prevent cronies from spawning needlessly
SetLocalInt(oBoss, sCronieTag, TRUE);
DelayCommand(120.0, DeleteLocalInt(oBoss, "Cronie"));


This next long part goes in the OnDamaged script for your boss:

object oSelf = OBJECT_SELF;
//Check and see if it's time to summon new associates
object oCronie;
if( !GetLocalInt(oSelf, "Tag-of-cronie1-goes-here") )
{
    oCronie = GetNearestObjectByTag( "Tag-of-cronie1-goes-here");
    //if we can't locate cronie1, it must be dead so let's make a new one
    if( GetIsObjectValid(oCronie) == OBJECT_INVALID )
    {
        CreateObject(OBJECT_TYPE_CREATURE, "cronie1", locWP1)
    }
}
//Now do the same thing, but check for the 2nd cronie and create it if we can't find it
if( !GetLocalInt(oSelf, "Tag-of-cronie2-goes-here") )
{
    oCronie = GetNearestObjectByTag( "Tag-of-cronie2-goes-here");
    //if we can't locate cronie2, it must be dead so let's make a new one
    if( GetIsObjectValid(oCronie) == OBJECT_INVALID )
    {
        CreateObject(OBJECT_TYPE_CREATURE, "cronie2", locWP2)
    }
}
//Now we see if the boss is damaged enough to enter Stage2
//So recall that if you want a highly melee resistant stage1, then make the boss with all resistances how you like it in the palette.
//When the stage1 version reaches <20% total HP it will create the stage2 version which you need to make in the palette
//Determine what percent of your boss's HP are left
float fPercentHP = GetCurrentHitPoints(oSelf)/(GetMaxHitPoints(oSelf);
//if it's less than 20%, let's go to the next stage
if( fPercentHP < 20.0 )
{
    //Pick effects that we can play to make ushering in the next stage a little more exciting
    effect e1 = EffectVisualEffect(VFX_FNF_SUMMON_EPIC_UNDEAD);
    effect e2 = EffectVisualEffect(VFX_DUR_BLIND);
    effect e3 = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
    effect e4 = EffectVisualEffect(VFX_FNF_PWKILL);
    effect e5 = EffectKnockdown();
    //Destroy the stage1 boss version and create stage2 in its place
    location locBoss = GetLocation(oSelf);
    DestroyObject(oSelf);
    CreateObject(OBJECT_TYPE_CREATURE, "blueprint-resref-of-stage2-goes-here", locBoss);
    //Run our visual effects
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, e1, locBoss);
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, e3, locBoss);
    DelayCommand(0.5, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, e4, locBoss));
    DelayCommand(1.5, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, e4, locBoss));
    //We're going to knockdown and temporarily blind anything close to the boss
   object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 20.0, locBoss);
    while( GetIsObjectValid(oTarget) )
    {
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, e2, oTarget, 0.5);
        DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, e2, oTarget, 0.5));
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, e5, oTarget, 4.0);
    oTarget = GetNextObjectInShape(SHAPE_SPHERE, 20.0, locBoss);
    }





So I've made it a bit further this time... I should've editted my first post oops.  Hopefully more later.  So far this will get your stage2 boss in play.  To get later stages I just need to make a modification to this last segment and probably tell you what to name the blueprint resrefs for your boss versions.
               
               

               
            

Legacy_DM-Chemosh

  • Newbie
  • *
  • Posts: 42
  • Karma: +0/-0
Looking for a scripter (or at least for help with scripts)
« Reply #9 on: September 30, 2010, 02:21:34 am »


               You are truely AMAZING, man! Thanks - I put all this work in the corresponding post since I figured it makes more sense to put one up especially for that boss scripting. I hope that's ok for you '<img'> Changed some things anyways with her hopefully not too much to change.