scripting woes

Post » Tue Dec 29, 2009 3:42 pm

thank you, two heads are indeed better than one. and you are getting some of the credit, you've put a lot of time into helping me these past few days.

i think that last suggestion will work...... if i put the cleanup block above it, or set threeday to 0 in that block. otherwise it will never reach the cleanup block because threeday will still be > 2 the next time the script gets there.

but that's one step ahead of what i'm working on. i must find out why didonce is not executing when rak_kidnap = 4. if didonce does not execute, the NPC stays in aifollow, and threeday will never change.

i'm going to try to flip the state of didonce. initial shall set it to 1. the conditional will check for 1 and set to 0, like how spawnre and infogather work.
User avatar
Emmie Cate
 
Posts: 3372
Joined: Sun Mar 11, 2007 12:01 am

Post » Tue Dec 29, 2009 11:29 am

If that doesn't work try moving forcegreeting below aiwander, just in case the dialog screen is affecting the script some how.

Edit: nvm i mis read your post
User avatar
Jordan Fletcher
 
Posts: 3355
Joined: Tue Oct 16, 2007 5:27 am

Post » Tue Dec 29, 2009 5:32 pm

i'll give it a shot, had not thought of that. neither the forcegreet or aiwander is firing, though the variable is now being tripped. not the first time i've had troubles with forcegreeting.

i think i'll actually move the aiwander into the appropriate greeting, just to be absolutely sure.


arg, i've been messing up. i've had both the CS and mwedit open (to better work on dialog and the script at the same time), and the CS had an old version of the script, while MWedit had old versions of the dialog. depending on which i saved last is what would work, these past couple of tests.

fixed it, and testing now.
User avatar
Beulah Bell
 
Posts: 3372
Joined: Thu Nov 23, 2006 7:08 pm

Post » Tue Dec 29, 2009 6:13 am

I've been staring at the script for a few minutes trying to find the problem, but I can't find it. The script looks solid. My only suggestion is to take the forcegreeting out of that If block and put it in another block by it's self just under the aiwander block.

awesome
User avatar
KU Fint
 
Posts: 3402
Joined: Mon Dec 04, 2006 4:00 pm

Post » Tue Dec 29, 2009 8:18 am

allright!

success!

the only thing i'm lacking is for the NPC to actually call for guards/attack on a failed attempt. everything else functions like clockwork (i had missed a reset for the aiwander if the PC gets too far away from the NPC during the "escort to thief guildhall" segment, fixed it.)

the script now looks like this -

Spoiler
begin RAK_tg_kidnappinglong cellmyshort chanceshort oppositionshort initialshort doonceshort currentdayshort varcleanshort oncedoshort threedayshort didonceshort oncedidshort pspeeshort pstrshort spawnreshort infogatherfloat nfightfloat nfleefloat npcxfloat npcyfloat npczif ( initial == 0 )	set nfight to ( getfight )	set nflee to ( getflee )	set infogather to 1	set doonce to 0	set spawnre to 0	set varclean to 0	set oncedo to 0	set threeday to 0	set didonce to 0	set oncedid to 0	set opposition to ( ( getspeechcraft ) + random100 )	set pspee to ( player->getspeechcraft )	set pstr to ( player->getstrength )	set chance to ( pspee + pstr )	set initial to 1	returnendififx ( infogather )        set npcx to GetPos, X        set npcy to GetPos, Y        set npcz to GetPos, Z        setx cellmy to xmycellid        set infogather to 0endIfifx ( spawnre )   xpositioncell, npcx, npcy, npcz, 0, cellmy	set spawnre to 0endifif ( gethealth < 1 )	setfight nfight	setflee nflee	set varclean to 1endifif ( oncedid == 0 )	if ( ( getpccell "Balmora, South Wall Cornerclub" ) == 1 )		set RAK_kidnap to 4		set RAK_ba_ransom to 1		set oncedid to 1	elseif ( ( getpccell "Ald-ruhn, The Rat In The Pot" ) == 1 )		set RAK_kidnap to 4		set RAK_ar_ransom to 1		set oncedid to 1	elseif ( ( getpccell "Sadrith Mora, Dirty Muriel's Cornerclub" ) == 1 )		set RAK_kidnap to 4		set RAK_sm_ransom to 1		set oncedid to 1	elseif ( ( getpccell "Vivec, Simine Fralinie: Bookseller" ) == 1 )		set RAK_kidnap to 4		set RAK_vc_ransom to 1		set oncedid to 1	endifendifif ( RAK_kidnap == 0 )	if ( opposition < chance )		set RAK_kidnap to 1	endifelseif ( RAK_kidnap == 1 )	if ( doonce == 0 )		aifollow player 0, 0, 0, 0		setfight 0		setflee 80		set doonce to 1		return	elseif ( doonce == 1 )		if ( ( getdistance player ) >= 500 )			set currentday to day			set RAK_kidnap to 2			return		endif	endifelseif ( RAK_kidnap == 2 ) 	if ( oncedo == 0 )		AIWander 5000, 0, 0, 60, 30, 10, 0, 0, 0, 0, 0, 0		set oncedo to 1		return	endif	if ( currentday != day )		set currentday to day		setfight nfight		setflee nflee		set spawnre to 1		set varclean to 1		return	endif	setfight 70	setflee 40elseif ( RAK_kidnap == 3 )	set opposition to ( ( getspeechcraft ) + random100 )	if ( opposition < chance )		set doonce to 0		set oncedo to 0		set RAK_kidnap to 1		return	else		moddisposition -30		set RAK_kidnap to 2		return	endifelseif ( RAK_kidnap == 4 )	if ( didonce == 0 )		forcegreeting 		set didonce to 1	endif	if ( currentday != day )		set currentday to day		set threeday to ( threeday + 1 )	endifendifif ( threeday > 2 )	set RAK_ransom to ( ( getlevel ) * 100 )	setfight nfight	setflee nflee	set RAK_kidnap to 5	set spawnre to 1	set varclean to 1	set threeday to 0	returnendifif ( varclean == 1 )	if ( RAK_kidnap < 5 )		set RAK_kidnap to 0	endif	set doonce to 0	set varclean to 0	set oncedo to 0	set threeday to 0	set didonce to 0	set oncedid to 0	set initial to 0	stopscript "RAK_tg_kidnapping"endifend

User avatar
Laura Ellaby
 
Posts: 3355
Joined: Sun Jul 02, 2006 9:59 am

Post » Tue Dec 29, 2009 12:49 pm

Good!

But I do see one more problem, Ref Id variables aren't saved with the game. So on loading a game with the npc not yet teleported back to his original position, the cell ID data is lost for Long MyCell. Now, there might be a way to use the xFileWriteString command to save the Cell ID in it and then extract it when the npc needs to be teleported back.
User avatar
Ana
 
Posts: 3445
Joined: Sat Jul 01, 2006 4:29 am

Post » Tue Dec 29, 2009 5:10 pm

Good!

But I do see one more problem, Ref Id variables aren't saved with the game. So on loading a game with the npc not yet teleported back to his original position, the cell ID data is lost for Long MyCell. Now, there might be a way to use the xFileWriteString command to save the Cell ID in it and then extract it when the npc needs to be teleported back.

urg, the whole file i/o system was something i was wanting to avoid entirely. considering that the string is converted to numeric data, i had thought this would not be an issue.

but if you are correct, i suppose i know what i'll be doing "tomorrow"
User avatar
Nancy RIP
 
Posts: 3519
Joined: Mon Jan 29, 2007 5:42 am

Post » Tue Dec 29, 2009 10:25 am

seems you are right. this is quite confusing to me. logically, i would expect the string to be converted to binary, and from there to a number storable in a long. this should net you the same result every time, but the stored number changes on every reload (when storing the cellid) and reloading and allowing the script to complete teleports the NPC off to who knows where.

i guess i need to start looking at that file i/o system.
User avatar
Daramis McGee
 
Posts: 3378
Joined: Mon Sep 03, 2007 10:47 am

Post » Tue Dec 29, 2009 6:38 am

Do you have the MWSEscripting.html? I posted it on GHF in the MWSE section, it's in the "ifx ( state ) works fine, but ifx ( state == 1 ) won't????" thread made by silent thief, if you don't all ready have the file you should get it. It has a lot of info in it and the sample scripts are great as well.
User avatar
Assumptah George
 
Posts: 3373
Joined: Wed Sep 13, 2006 9:43 am

Post » Tue Dec 29, 2009 11:32 am

yes, i have that document. it's what i've been staring at trying to puzzle out for the past hour or so. it answers a few questions, but provides me with more, such as -

can i create the text file from MW using these functions, or must i include it in the download?

if i use xfilerewind and then write data, will it overwrite what is existent on the first line, or will it append it to a new beginning line, or worse, something like this:

stringstringstring


instead of
stringstringstring


do i have to parse strings before writing or reading them?

where do i put text files to be read?

what's a NULL character?
User avatar
Isabel Ruiz
 
Posts: 3447
Joined: Sat Nov 04, 2006 4:39 am

Post » Tue Dec 29, 2009 5:52 am

Holy [censored] I got it to work. I had to add xfilerewind before each xfile function to get it to work, I guess I missed this on my last attempt to use the I/O fille functions.

Test Script:
Begin Mf_stringtestLong PcTarLong IdPcTarLong InfoLong PcRefShort KeyPShort KeyOShort ConVarShort TempSetx KeyP to xKeyPressed, 80Setx KeyP to xKeyPressed, 80Setx KeyO to xKeyPressed, 79Setx KeyO to xKeyPressed, 79Ifx ( KeyP )	Set Temp to ( Convar - 0 )	Ifx ( Convar )	Else		MessageBox, "test1"		xFileRewind "Mf_Stringtest"		setx PcTar to xGetPcTarget		setx IdPcTar to PcTar->xRefID		xFileWriteString "Mf_Stringtest" IdPcTar		set Convar to 1	EndIfEndIfIfx ( KeyO )	Ifx ( Convar )		MessageBox, "test2"                xFileRewind "Mf_Stringtest"		setx Info to xFileReadString "Mf_Stringtest"		Setx PcRef to xGetRef "Player"		PcRef->xAddItem, Info 1		PcRef->xEquip, Info		Set Convar to 0	EndIfEndIfEnd


With this test I can look at an item, hip "P" (which writes the file), then I hit "O" and it adds and equips it with the xfile data. This is great, I have a problem similar to your in one of my scripts, this will fix it.

EDIT: i changed the position of xfileread
User avatar
bonita mathews
 
Posts: 3405
Joined: Sun Aug 06, 2006 5:04 am

Post » Tue Dec 29, 2009 12:00 pm

i seem to remember something about that. torch toggler, right?

so can you explain the vagaries of the text file usage to me? i'm getting something of the basic idea, but i'm still quite iffy.

can you post the contents of the text file, so i can see what it outputs?
User avatar
Vicki Gunn
 
Posts: 3397
Joined: Thu Nov 23, 2006 9:59 am

Post » Tue Dec 29, 2009 10:41 am

The file will only have the last ID you enter into it, It doesn't keep writing more and more ID's to the file, it just overwrites them. I think xFileRewind is what keeps it from adding more info to the file. Packaging the file with your Mod won't be necessary either, the game creates it either on load or when the script is ran. The contents of the file is just the object id.

Yea, my toggler mod. It works perfectly, accept when save a game with a torch equipped, and then load that game, it crashes the game when you hit the toggler. So I think I can finally fix it with the file I/O functions.
User avatar
Kat Ives
 
Posts: 3408
Joined: Tue Aug 28, 2007 2:11 pm

Post » Tue Dec 29, 2009 7:39 am

awesome. as usual, the reality is much more simple than my assumptions.

so a trunciated version of what i'm going to want to do would be -

ifx ( infogather )	set npcx to GetPos, X	set npcy to GetPos, Y	set npcz to GetPos, Z	setx cellmy to xmycellid	xfilerewind "RAK_kidnap_homecell"	xfilewritestring "RAK_kidnap_homecell" cellmy				set infogather to 0endIfifx ( spawnre )	xfilerewind "RAK_kidnap_homecell"	setx cellmy to xfilereadstring "RAK_kidnap_homecell"	xpositioncell, npcx, npcy, npcz, 0, cellmy	set spawnre to 0endif


right?
User avatar
Adam Porter
 
Posts: 3532
Joined: Sat Jun 02, 2007 10:47 am

Post » Tue Dec 29, 2009 4:57 pm

Looks good to me
User avatar
Marcia Renton
 
Posts: 3563
Joined: Fri Jan 26, 2007 5:15 am

Post » Tue Dec 29, 2009 10:59 am

success! works like a charm!

thanks!

now to figure out how to "call the guards" in the way that i wish (as detailed in the dialog thread) and it'll be time to release the new version (heh, just a week past my projected release date)
User avatar
Heather M
 
Posts: 3487
Joined: Mon Aug 27, 2007 5:40 am

Post » Tue Dec 29, 2009 8:29 pm

I just want to make sure, did you save the game while the npc was still following you and then load that save back and then reset him back to his original position? I would totally exit the game before the load just to make sure there are no problems.
User avatar
Sarah MacLeod
 
Posts: 3422
Joined: Tue Nov 07, 2006 1:39 am

Post » Tue Dec 29, 2009 5:50 pm

I just want to make sure, did you save the game while the npc was still following you and then load that save back and then reset him back to his original position? I would totally exit the game before the load just to make sure there are no problems.

just so. it's a pain, especially with MGE enabled and that 30~45 second pause upon game load for shader load, but it's worth it for accurate testing.

even led the NPC to another cell, just to be sure.

now i can stop kidnapping poor Favise Selaren.

well almost. gotta fix that guard thing.
User avatar
Ana
 
Posts: 3445
Joined: Sat Jul 01, 2006 4:29 am

Post » Tue Dec 29, 2009 5:06 pm

now working on the legion. quick question, if i take a leveled monster spawn and have it "blocked" in CS, this is the same as "disabling" it through script or console, correct? so that in a script, i can enable it and have it function, and disable when finished, correct?
User avatar
Lizzie
 
Posts: 3476
Joined: Sun Nov 19, 2006 5:51 am

Post » Tue Dec 29, 2009 7:22 am

having problems with this script -

begin RAK_ilmm_patrol_leadershort doonceshort stateshort localtimerfloat nowhourif ( RAK_IL_patrol == 0 )	disable	returnelseif ( RAK_IL_patrol == 1 )	enable	returnelseif ( RAK_IL_patrol == 3 )	if ( state == 0 )		if ( doonce == 0 )			aiescort, "player", "Moonmoth Legion Fort", 0, -6807, -18369, 973, 0			set state to 1			set doonce to 1			return		endif	elseif ( state == 1 )		if ( doonce == 0 )			aiescort, "player", "West Gash Region", 0, -10655, -18806, 610, 0			set doonce to 1			return		endif	elseif ( state == 2 )		if ( doonce == 0 )			aiescort, "player", "West Gash Region", 0, -6627, -10950, 396, 0			set doonce to 1			return		endif	elseif ( state == 3 )		if ( doonce == 0 )			aiescort, "player", "West Gash Region", 0, -9503, -2689, 823, 0			set doonce to 1			return		endif	elseif ( state == 4 )		if ( doonce == 0 )			aiescort, "player", "West Gash Region", 0, -10358, -678, 688, 0			set doonce to 1			return		endif	elseif ( state == 5 )		if ( doonce == 0 )			aiescort, "player", "West Gash Region", 0, -10351, 6007, 1381, 0			set doonce to 1			return		endif	elseif ( state == 6 )		if ( doonce == 0 )			aiescort, "player", "West Gash Region", 0, -9266, 7513, 1237, 0			set doonce to 1			return		endif	elseif ( state == 7 )		if ( doonce == 0 )			aiescort, "player", "West Gash Region", 0, -9833, 14364, 1229, 0			set doonce to 1			return		endif	elseif ( state == 8 )		if ( doonce == 0 )			aiescort, "player", "Caldera" 0, -10356, 17672, 1252, 0			set doonce to 1			return		endif	endif	if ( ( ondeath ) == 1 )		set RAK_il_patleddead to 1  	endif	set localtimer to ( localtimer + 1 )	if ( localtimer > 4 ) 		if ( ( getaipackagedone ) == 1 )			set state to ( state + 1 )			set doonce to 0		endif		set timer to 0	endif	returnelseif ( RAK_IL_patrol == 4 )	if ( doonce <= 2 )		aiwander, 0, 0, 0		set doonce to 3	endif	set nowhour to gamehour	if ( gamehour >= ( nowhour + 1 ) )		disable		sethealth -500	endifendifend			


i'm getting a left eval error when RAK_IL_patrol == 3, and i cant figure out why.
User avatar
Eddie Howe
 
Posts: 3448
Joined: Sat Jun 30, 2007 6:06 am

Post » Tue Dec 29, 2009 7:20 pm

now working on the legion. quick question, if i take a leveled monster spawn and have it "blocked" in CS, this is the same as "disabling" it through script or console, correct? so that in a script, i can enable it and have it function, and disable when finished, correct?
I think blocked is just to restrict editing in TESCS for items considered done, it has no consequences in game.
i'm getting a left eval error when RAK_IL_patrol == 3, and i cant figure out why.
This is what I'd try:
aiescort does not need cell name, I'm assuming timer is a global float, else declare it.
[EDIT}hmm, no, from the look of it and considering timer would not be a good global name, probably you need to replace timer with localtimer
Spoiler
begin RAK_ilmm_patrol_leadershort doonceshort stateshort localtimerfloat nowhourif ( RAK_IL_patrol == 0 )	disable	returnelseif ( RAK_IL_patrol == 1 )	enable	returnelseif ( RAK_IL_patrol == 3 )	if ( state == 0 )		if ( doonce == 0 )			aiescort "player", 0, -6807, -18369, 973, 0			set state to 1			set doonce to 1			return		endif	elseif ( state == 1 )		if ( doonce == 0 )			aiescort, "player", 0, -10655, -18806, 610, 0			set doonce to 1			return		endif	elseif ( state == 2 )		if ( doonce == 0 )			aiescort, "player", 0, -6627, -10950, 396, 0			set doonce to 1			return		endif	elseif ( state == 3 )		if ( doonce == 0 )			aiescort, "player", 0, -9503, -2689, 823, 0			set doonce to 1			return		endif	elseif ( state == 4 )		if ( doonce == 0 )			aiescort, "player", 0, -10358, -678, 688, 0			set doonce to 1			return		endif	elseif ( state == 5 )		if ( doonce == 0 )			aiescort, "player", 0, -10351, 6007, 1381, 0			set doonce to 1			return		endif	elseif ( state == 6 )		if ( doonce == 0 )			aiescort, "player", 0, -9266, 7513, 1237, 0			set doonce to 1			return		endif	elseif ( state == 7 )		if ( doonce == 0 )			aiescort, "player", 0, -9833, 14364, 1229, 0			set doonce to 1			return		endif	elseif ( state == 8 )		if ( doonce == 0 )			aiescort, "player", 0, -10356, 17672, 1252, 0			set doonce to 1			return		endif	endif	if ( ( ondeath ) == 1 )		set RAK_il_patleddead to 1  	endif	set localtimer to ( localtimer + 1 )	if ( localtimer > 4 ) 		if ( ( getaipackagedone ) == 1 )			set state to ( state + 1 )			set doonce to 0		endif		;set timer to 0		set localtimer to 0	endif	returnelseif ( RAK_IL_patrol == 4 )	if ( doonce <= 2 )		aiwander, 0, 0, 0		set doonce to 3	endif	set nowhour to gamehour	if ( gamehour >= ( nowhour + 1 ) )		disable		sethealth -500	endifendifend

User avatar
Penny Wills
 
Posts: 3474
Joined: Wed Sep 27, 2006 6:16 pm

Post » Tue Dec 29, 2009 8:45 am

yea, just noticed that i missed one instance of timer, timer was the old local name, but i figured i'd try changing it to see if the left eval persisted (it did)

i've also tried without cell names, still left eval.

i think the problem might be coming from getaipackage done. my first iteration of the script resulted in no error, but the behavior of the script was not as per my intent. basically, nothing happened and when i SVed the NPC this script is attached to, what is now state was at 89 (you'll note state only goes to 8)

i guess i'll try some alternative means of checking to see if the NPC has reached the "waypoint" for the next set of coordinates to escort to.
User avatar
Nitol Ahmed
 
Posts: 3321
Joined: Thu May 03, 2007 7:35 am

Post » Tue Dec 29, 2009 6:19 am

I do not see the cause of the left eval error, but I recommend that you do not spend too much more time with this form of the script looking for it. It appears that you are trying to travel from Fort Moonmoth to Caldera in nine stages and I would expect to use at least twice that many waypoints to negotiate all of the turns and obstacles along the way. Also you set state to 1 with the first AIEscort instructions, so that when the NPC arrives at the first waypoint set state to ( state + 1 ) prevents the second waypoint from every being issued.

GetAIPackageDone will pose a problem at some point because of the way it is handled here. Do not bury the check behind a block that prevents it being checked every frame. GetAIPackageDone returns true for just one frame.

Other issues are you are setting nowHour to GameHour every frame just before you check if ( GameHour >= ( nowHour + 1 ) . That will never be true. You are enabling and disabling the NPC every frame when RAK_IL_Patrol is equal to 1 and 0 respectively. You might add a check of GetDisabled to those logical blocks.

You might examine the structure used in the mod Traveling Merchants to see an alternative for setting up your waypoints. If you download version 2.2 the script _HB_AbanTravel issues AIEscort instructions beginning with state == 380 in the code. The script _HB_FarvynTravel guides an NPC between Balmora and Caldera. Point 9 is the junction between the roads to Balmora, Caldera and Fort Moonmoth. You are welcome to use the waypoints from there to Caldera for the second half of your NPC's journey, or at least use them as a guide for the density of waypoints necessary to negotiate the trip. The script _HB_AdrosTravel has some waypoints between Fort Moonmoth and Balmora that might be useful as well.
User avatar
JAY
 
Posts: 3433
Joined: Fri Sep 14, 2007 6:17 am

Post » Tue Dec 29, 2009 5:48 pm

I do not see the cause of the left eval error, but I recommend that you do not spend too much more time with this form of the script looking for it. It appears that you are trying to travel from Fort Moonmoth to Caldera in nine stages and I would expect to use at least twice that many waypoints to negotiate all of the turns and obstacles along the way. Also you set state to 1 with the first AIEscort instructions, so that when the NPC arrives at the first waypoint set state to ( state + 1 ) prevents the second waypoint from every being issued.

GetAIPackageDone will pose a problem at some point because of the way it is handled here. Do not bury the check behind a block that prevents it being checked every frame. GetAIPackageDone returns true for just one frame.

Other issues are you are setting nowHour to GameHour every frame just before you check if ( GameHour >= ( nowHour + 1 ) . That will never be true. You are enabling and disabling the NPC every frame when RAK_IL_Patrol is equal to 1 and 0 respectively. You might add a check of GetDisabled to those logical blocks.

You might examine the structure used in the mod Traveling Merchants to see an alternative for setting up your waypoints. If you download version 2.2 the script _HB_AbanTravel issues AIEscort instructions beginning with state == 380 in the code. The script _HB_FarvynTravel guides an NPC between Balmora and Caldera. Point 9 is the junction between the roads to Balmora, Caldera and Fort Moonmoth. You are welcome to use the waypoints from there to Caldera for the second half of your NPC's journey, or at least use them as a guide for the density of waypoints necessary to negotiate the trip. The script _HB_AdrosTravel has some waypoints between Fort Moonmoth and Balmora that might be useful as well.


as for the number of waypoints, this was the first draft of the script, more will be coming once i discover how well the NPC paths to each.

the problem of getaipackage done was it was returning true every frame for some reason, this is why i hid it behind a timer. i needed to check if a delay after the first frame where aiescort was called would report getaipackagedone == 0.

is there any issue disabling or enabling an NPC every frame? i've never noticed any which is why i've skipped checks for getdisabled.

thanks for the advice about the traveling merchants mod. that will likely come in handy for when i script up the version of the patrol you dont "lead" because i'm a bit fuzzy on the rules to follow for getting NPCs to be traveling correctly when the PC may or may not be following.

you know, coming from a tech support background, i should be well acquainted with actually posting detailed descriptions of my problems and what i've done to try to solve them. i'll try to get better at it, take the advice presented thus far, and work on a rewrite.
User avatar
BrEezy Baby
 
Posts: 3478
Joined: Sun Mar 11, 2007 4:22 am

Post » Tue Dec 29, 2009 7:15 am

I am not certain I understand the reason well enough to explain it to someone else, but it seems that GetAIPackageDone may return true when it is impossible to reach the destination. It quickly cycles through all the AI instructions until the end is reached. The problem may disappear when you introduce attainable destination coordinates.

There is nothing inherently wrong with enabling or disabling every frame so long at the NPC is not expected to do anything during that time as it appears in your situation, but have you anticipated every contingency? It is a little sloppy and could contribute to difficult to detect problems elsewhere.

AIEscort only processes if the player is near. I do not know the distance, but when the player moves beyond that range the NPC stops and will remain in the same position indefinitely unless you script some checks. The script _HB_AbanTravel includes such checks.
User avatar
Jesus Duran
 
Posts: 3444
Joined: Wed Aug 15, 2007 12:16 am

PreviousNext

Return to III - Morrowind