Jump to content

Scripting help


Galcyon

Recommended Posts

Having a bit of an issue here.

 

I'm trying to transfer some scripts from FO3 to FONV for a mod (the slave raider one).

 

Problem? The two damn scripts from the mod aren't compiling, and the Geck Powerup isn't showing the error messages! Tried the Script Validator... but it's not helping much either.

 

I have no clue what the issue is, as I'm literally copy/pasting the scripts (and altering slightly to remove specific cell references.) I have the NPC and home marker already added, the leave/died messages, special weapon, and the specific faction added. I've hit a brick wall, since I can't move further without those two scripts. The GECK questing won't let me

 

Can someone else with working error messages on their FONV GECK figure out what I'm doing wrong, and how to solve it?

Link to comment
Share on other sites

Yeah, double and triple checked the references. Gonna post the Scripts.

 

ORIGINAL Quest Script (From the FO3 mod)

SCN 1SlaveRaiderQuestSCRIPT

short	SlaveRaiderHired
short	SlaveRaiderFired
short	SlaveRaiderSaved
short	UnlimitedAmmo
float	SlaveRaiderWaitingLeaveDay
short   doFire

BEGIN GameMode

if ( SlaveRaiderHired == 1 ) 


	if ( SlaveRaiderREF1.HasBeenHired == 1 )

		; Always follow into interiors
		if ( SlaveRaiderREF1.Waiting == 0 && SlaveRaiderREF1.WaitingHome == 0 )
  			if ( Player.IsInInterior == 1 && SlaveRaiderREF1.IsInInterior == 0 )
				SlaveRaiderREF1.MoveTo Player 50,50,0
			endif
		endif

		; Autofire when entering Vault87
		if ( player.GetInCell Vault87c && GetQuestRunning MQ08  )
			set doFire to 1
		endif

		; Fire SlaveRaider and send her home after waiting 7 days
		if ( SlaveRaiderREF1.Waiting == 1 ) && ( SlaveRaiderREF1.GetInCell SpringvaleSchool01 == 0 ) 
			if ( SlaveRaiderWaitingLeaveDay <= GameDaysPassed )
				if ( SlaveRaiderREF1.GetInSameCell Player == 0  )
					set doFire to 1
				endif
			endif
		endif
	endif

	if ( doFire == 1 )
			set SlaveRaiderQuest.SlaveRaiderHired to 0
			set SlaveRaiderQuest.SlaveRaiderFired to 1
			set SlaveRaiderREF1.HasBeenHired to 0
			set SlaveRaiderREF1.Waiting to 0
			set SlaveRaiderREF1.IsFollowingDefault to 1
			set SlaveRaiderREF1.IsFollowingLong to 0
			set SlaveRaiderREF1.IsFollowingShort to 0
			SlaveRaiderREF1.SetCombatStyle FollowersCombatStyleMelee
			set SlaveRaiderREF1.CombatStyleRanged to 0
			set SlaveRaiderREF1.CombatStyleMelee to 1
			SlaveRaiderREF1.AddToFaction 1SlaveRaiderFaction 0
			SlaveRaiderREF1.SetPlayerTeammate 0
			SlaveRaiderREF1.RemoveFromFaction FollowerFaction
			SlaveRaiderREF1.evp

			ShowMessage FollowerMessageLeave1SlaveRaider
			SlaveRaiderREF1.MoveTo SlaveRaiderHomeMarker1
			set SlaveRaiderWaitingLeaveDay to 0
			set doFire to 0
	endif

endif

END

MODIFIED Quest Script (For use in FONV)

SCN 1SlaveRaiderQuestSCRIPT

short	SlaveRaiderHired
short	SlaveRaiderFired
short	SlaveRaiderSaved
short	UnlimitedAmmo
float	SlaveRaiderWaitingLeaveDay
short   doFire

BEGIN GameMode

if ( SlaveRaiderHired == 1 ) 


	if ( SlaveRaiderREF1.HasBeenHired == 1 )

		; Always follow into interiors
		if ( SlaveRaiderREF1.Waiting == 0 && SlaveRaiderREF1.WaitingHome == 0 )
  			if ( Player.IsInInterior == 1 && SlaveRaiderREF1.IsInInterior == 0 )
				SlaveRaiderREF1.MoveTo Player 50,50,0
			endif
		endif

		; Fire SlaveRaider and send her home after waiting 7 days
		if ( SlaveRaiderREF1.Waiting == 1 ) && ( SlaveRaiderREF1.GetInCell BCKhanHideout == 0 ) 
			if ( SlaveRaiderWaitingLeaveDay <= GameDaysPassed )
				if ( SlaveRaiderREF1.GetInSameCell Player == 0  )
					set doFire to 1
				endif
			endif
		endif
	endif

	if ( doFire == 1 )
			set SlaveRaiderQuest.SlaveRaiderHired to 0
			set SlaveRaiderQuest.SlaveRaiderFired to 1
			set SlaveRaiderREF1.HasBeenHired to 0
			set SlaveRaiderREF1.Waiting to 0
			set SlaveRaiderREF1.IsFollowingDefault to 1
			set SlaveRaiderREF1.IsFollowingLong to 0
			set SlaveRaiderREF1.IsFollowingShort to 0
			SlaveRaiderREF1.SetCombatStyle FollowersCombatStyleMelee
			set SlaveRaiderREF1.CombatStyleRanged to 0
			set SlaveRaiderREF1.CombatStyleMelee to 1
			SlaveRaiderREF1.AddToFaction 1SlaveRaiderFaction 0
			SlaveRaiderREF1.SetPlayerTeammate 0
			SlaveRaiderREF1.RemoveFromFaction FollowerFaction
			SlaveRaiderREF1.evp

			ShowMessage FollowerMessageLeave1SlaveRaider
			SlaveRaiderREF1.MoveTo SlaveRaiderHomeMarker1
			set SlaveRaiderWaitingLeaveDay to 0
			set doFire to 0
	endif

endif

END

And the OTHER Script that won't save from the mod.

scn 1SlaveRaiderSCRIPT

;Follower Variables
short 	HasBeenHired
short	CombatStyleRanged
short	CombatStyleMelee
short	IsFollowingDefault
short	IsFollowingShort
short	IsFollowingLong
short	IsSlave
short	Waiting
short	WaitingHome
short GoHome

BEGIN OnCombatEND

	if ( GetPlayerTeammate == 1 )
		resethealth
		restoreav perceptioncondition 100
		restoreav endurancecondition 100
		restoreav leftattackcondition 100
		restoreav leftmobilitycondition 100
		restoreav rightattackcondition 100
		restoreav rightmobilitycondition 100
	endif

END

BEGIN OnDeath

		if ( SlaveRaiderREF1.HasBeenHired == 1  )
			set SlaveRaiderREF1.HasBeenHired to 0
			ShowMessage FollowerMessageDead1SlaveRaider
		endif


END

Any ideas?

Link to comment
Share on other sites

Yea.... you're going to have a few script errors there playa. I've never seen someone remote call a script on an NPC like that, but since it's in the FO:3 script, it must be a semi-valid way to do it. So then, you need to make sure all of the items mentioned in this script are in fact alive and well in the Fallout:NV world. You need to make an NPC and give it the reference name "SlaveRaiderREF1" you also need to attach 1SlaveRaiderScript to them as a person. Odds are you won't even be able to compile the "Quest" script until this is done, because it would be searching for a reference... that isn't there. Make sure somewhere in Geck there is a note/message named "FollowerMessageDead1SlaveRaider" and make sure somewhere in the ole' wasteland there, you have a marker named "SlaveRaiderHomeMarker1 " If scripts call on something that isn't established/there... they won't compile.

Link to comment
Share on other sites

I'm a bit rusty so don't take this for granted. That said, see if you can make something out of this.

 

Moved all variables to the quest script:

 

 

SCN 1SlaveRaiderQuestSCRIPT

short   SlaveRaiderHired
short   SlaveRaiderFired
short   doFire
float   SlaveRaiderWaitingLeaveDay

int   CombatStyleRanged
int   CombatStyleMelee
int   IsFollowingDefault
int   IsFollowingShort
int   IsFollowingLong
int   Waiting
int   WaitingHome

short   SlaveRaiderSaved   ; <= What's this
short   UnlimitedAmmo      ; <= and this? Are you using them?


BEGIN GameMode

if ( SlaveRaiderHired == 1 )

    if ( Waiting == 0 ) && ( WaitingHome == 0 )
          if ( Player.IsInInterior ) && ( SlaveRaiderREF1.IsInInterior )
            SlaveRaiderREF1.MoveTo Player 50 50 0
        endif
    endif

    if ( Waiting == 1 ) && ( SlaveRaiderREF1.GetInCell BCKhanHideout == 0 ) 
        if ( SlaveRaiderWaitingLeaveDay <= GameDaysPassed )
            if ( SlaveRaiderREF1.GetInSameCell Player == 0 )
                set doFire to 1
            endif
        endif
    endif

    if ( doFire == 1 )
        set SlaveRaiderHired to 0
        set SlaveRaiderFired to 1
        set Waiting to 0
        set IsFollowingDefault to 1
        set IsFollowingLong to 0
        set IsFollowingShort to 0
        SlaveRaiderREF1.SetCombatStyle FollowersCombatStyleMelee
        set CombatStyleRanged to 0
        set CombatStyleMelee to 1
        SlaveRaiderREF1.AddToFaction 1SlaveRaiderFaction 0
        SlaveRaiderREF1.SetPlayerTeammate 0
        SlaveRaiderREF1.RemoveFromFaction FollowerFaction
        SlaveRaiderREF1.evp

        ShowMessage FollowerMessageLeave1SlaveRaider
        SlaveRaiderREF1.MoveTo SlaveRaiderHomeMarker1
        set SlaveRaiderWaitingLeaveDay to 0
        set doFire to 0
    endif

endif

END

Removed 'HasBeenHired' since 'SlaveRaiderHired' seems to be doing the same thing. You can work it back in if you need it.

 

 

 

NPC quest:

 

 

scn 1SlaveRaiderSCRIPT

BEGIN OnCombatEND

    if ( GetPlayerTeammate )
        resethealth
        restoreav perceptioncondition 100
        restoreav endurancecondition 100
        restoreav leftattackcondition 100
        restoreav leftmobilitycondition 100
        restoreav rightattackcondition 100
        restoreav rightmobilitycondition 100
    endif

END

BEGIN OnDeath

    if ( 1SlaveRaiderQuest.SlaveRaiderHired == 1 )
        set 1SlaveRaiderQuest.SlaveRaiderHired to 0
        ShowMessage FollowerMessageDead1SlaveRaider
    endif

END

In order to remotely change the variables now, point to the quest name instead of the reference, e.g.: 'set SlaveRaiderREF1.Waiting to 1' => 'set 1SlaveRaiderQuest.Waiting to 1'. The same goes for remote conditioning:

if ( 1SlaveRaiderQuest.SlaveRaiderHired == 1 )
        set 1SlaveRaiderQuest.SlaveRaiderHired to 0

Replace '1SlaveRaiderQuest' with your quest name.

 

 

 

Besides all that, make sure that your custom references are set as persistent.

Link to comment
Share on other sites

A few updates...

 

1. had the refs in-game before posting, and since "reference persist" is checked by default if a reference is given...

 

2. Unno's modified scripts compiled without issue.

 

A bit of a background info- those weird things tracked some conversation/AI trigger variables in the questline. "short UnlimitedAmmo," for instance, set up a conversational trigger so that Angel's unique 10mm Submachine gun could have... well, unlimited ammo, depending on player decision. Without having a script to put those things in, I couldn't properly set up the AI triggers or conversations. Which is why I hit that brick wall- already did everything else I could without the scripts.

 

Now it's another round of copy/paste to finish the dialogue tree/AI triggers and see if it'll work. Thanks for the help, guys! I'll let you know how it turns out.

Link to comment
Share on other sites

Weird Update-

 

Ok, don't know what was going through the original modder's head, but, damn do they know how to trick the GECK into doing what they want.

 

Problem: GECK isn't saving specific script variables on a specific ref for an AI package. Decides to throw a tantrum and lock up- you can move the mouse and exit as normally, but you can never, ever get rid of the conditions window. Hitting "ok" or "cancel" doesn't do anything.

 

Solution: Put the variables into the second script I mentioned, set the script to "object" to put it on the NPC, and then set it to "effect" to allow the GECK to set up the script variables. While it's still loaded on the NPC.

 

I'm not a master at this (otherwise I wouldn't have made this thread,) but does anyone else find that iffy?

Link to comment
Share on other sites

Last update-

Got everything set up, but there's a pretty bad issue.

 

It's the FONV Companion Wheel- it's just incompatable with how the FO3 companion system is set up. Fixing it- and the voice acting, is more trouble than I'm willing to go through with this mod conversion.

 

Anyway, thanks for the help everyone!

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...