Has anyone written a basic guide on using OBSE arrays?

Post » Thu Apr 14, 2011 2:27 am

I just can't seem to wrap my mind around how to use them.
I have a couple of ideas I want to look into, but until I can get some sort of working knowledge, I'm stuck.
TYIA
User avatar
Jessica White
 
Posts: 3419
Joined: Sun Aug 20, 2006 5:03 am

Post » Thu Apr 14, 2011 3:04 pm

Describe what you want to do or what you are having difficulty with and I'll try to help.
User avatar
Darlene DIllow
 
Posts: 3403
Joined: Fri Oct 26, 2007 5:34 am

Post » Thu Apr 14, 2011 11:30 am

Describe what you want to do or what you are having difficulty with and I'll try to help.


Kewl! Thank You!

I'm looking into updating / reworking Intelligence Overhaul. The mod that gives you increases for reading books.
The problem with that mod is that every book in the vanilla game has an individual script attached to it.
It doens't recognize books added by mods. I want to include those books as well.

I've figured out how to get any "books" (excluding scrolls) in the players inventory.
I can already walk the inventory and printc position in inventory, the formid, and the name of the book.

What I want to do is transfer that info to an array, and check any book read against that array, then either add the new book to the array or ignore it.

Right now I'm trying to figure out GetActiveMenuObject (if that is even the correct function).
I want to get the book that activates menu 1026.

I've been playing with snippets of code trying to determine what the proper format and syntax is.
That's how I've learned the syntax with the few commands I know.
Now I'm trying to figure out which are needed for what I want to do.
Sometimes I'm successful. Most times I do not get anything at all or get nothing at all like what I do expect.
Luckily, a single esp and a saved game just out of the tutorial loads rather quickly so I can try each bit as I write it.

Which brings me to the array question. I know what an array is and it looks fairly simple to set up, but adding to it, or checking data in it are still out of reach at the moment. And I need to determine what form of data ought to be stored. The formid or the string. I'm thinking string may be easier to work with because load orders may change and I don't want to have the data rebuilt / trashed with every change.

Thanks again for whatever advice / instruction you will give me.
User avatar
Devin Sluis
 
Posts: 3389
Joined: Wed Oct 24, 2007 4:22 am

Post » Thu Apr 14, 2011 7:54 am

Probably define a string map READ[] which will have as key the name of the book - hoping no two mods have the same name for two different books
then
 if (ar_HasKey READ sName_of_book_being_read == 0)    let read[sName_of_book_being_read] := 1endif
kind of

of course you may want to exclude notes etc

as to how to get the name of the book being read - I have no clue - there is a MenuQue obse plug by kyoma that might have a command for this
User avatar
Angel Torres
 
Posts: 3553
Joined: Thu Oct 25, 2007 7:08 am

Post » Thu Apr 14, 2011 12:03 pm

as to how to get the name of the book being read - I have no clue - there is a MenuQue obse plug by kyoma that might have a command for this
No need for MenuQue, once you use GetActiveMenuObject you can call GetName on the returned reference. As simple as that. :)
User avatar
Nathan Maughan
 
Posts: 3405
Joined: Sun Jun 10, 2007 11:24 pm

Post » Thu Apr 14, 2011 6:47 am

No need for MenuQue, once you use GetActiveMenuObject you can call GetName on the returned reference. As simple as that. :)


Thanks.
After a couple of hours of playing around with GetActiveMenuRef and GetActiveMenuObject and getting nowhere, your comment triggered something in my brain and when I tried it, it worked the first time!

So, now I have the coding to check the player's inventory for books.
I have the coding necessary to determine what book the player is reading.
Now I need some explaination or instruction on putting the books found in the players inventory into an array (which I think might need to be dynamic).
Then checking the book being read against data in that array and adding a flag or marker that it has been read.

Also, I ran into something I haven't figure out yet.
The script below returns each item and its ID perfectly (taken from the CS Wiki).
short InvPosref pInvObjref pCont ref refNameBegin gamemode			set pCont to player 		set InvPos to 0 		Label 		set pInvObj to (pCont.GetInventoryObject InvPos) 		if pInvObj			set InvPos to (InvPos + 1)			set refName to GetName pInvObj;				if IsBook pInvObj == 1 && GetBookIsScroll pInvObj == 0					printc "Invetory item position %0.f is %z, FormID is %i" InvPos, refName, pInvObj;				endif			Goto 		endif	stopquest aaaaaend


But if I uncomment the if statement in the middle, the books print twice, then the quest stops.
Can someone tell me why it does this? Or what is wrong with the code above?
User avatar
Emily Shackleton
 
Posts: 3535
Joined: Sun Feb 11, 2007 12:36 am

Post » Thu Apr 14, 2011 4:35 pm

Probably define a string map READ[] which will have as key the name of the book - hoping no two mods have the same name for two different books
then
 if (ar_HasKey READ sName_of_book_being_read == 0)    let read[sName_of_book_being_read] := 1endif
kind of

of course you may want to exclude notes etc

as to how to get the name of the book being read - I have no clue - there is a MenuQue obse plug by kyoma that might have a command for this

At first, your susggestion made 0 sense. Now after reading and re-reading the OBSE Commands html for a couple of hours and looking at some scipts in other mods, I think I get it.
This appears to be a great sugeestion to keep the cpu time down. I was thinking originally to store the book name and whether it was read or not.
Using the book name as the index is a brilliant idea (at least to me). Thanks.
Now to try and put it all together. :blink:

I sure hope the Wiki gets updated soon for OBSE 17 and 18...
User avatar
Stace
 
Posts: 3455
Joined: Sun Jun 18, 2006 2:52 pm

Post » Thu Apr 14, 2011 7:38 am

Well, I'm stuck. I get either errors in the CS which won't let me save, or I get errors in the console from OBSE.

Anyone want to give some advice on what I have below?

short doOnceshort InvPosref pInvObjref pCont string_var refBookNamearray_var CarriedBegin gamemode	if GetGameLoaded && doOnce == 0	let Carried := ar_Construct StringMap	set pCont to player 	set InvPos to 0 	Label 	set pInvObj to (pCont.GetInventoryObject InvPos) 			if pInvObj		set InvPos to (InvPos + 1)		set refBookName to GetName pInvObj		if IsBook pInvObj == 1 && GetBookIsScroll pInvObj == 0			printc "the book name is %z" refBookName			if eval ar_HasKey Carried refBookName				printc "Book name already stored."			else				let Carried refBookName := 1      <<<<<<<<<<<<<<<<<<<<<<<<<<<<< This is what won't save 				printc "book name stored"			endif			printc "Invetory item position %0.f is %z, FormID is %i" InvPos, refName, pInvObj		endif		Goto 	endif	set doOnce to 1endifend


What I am trying to do is add a new key to the array and assign a value of 1.

I've tried several different ways of putting that line. Some have compiled but don't work. As I mentioned at the top, I get OBSE error mesages in the console.
User avatar
Angela
 
Posts: 3492
Joined: Mon Mar 05, 2007 8:33 am

Post » Thu Apr 14, 2011 4:21 am

...sniplet Carried refBookName := 1      <<<<<<<<<<<<<<<<<<<<<<<<<<<<< This is what won't save ...snip

Should be:
let carried[refBookName] := 1

The name of the element you're trying to access inside the array always goes inside [brackets]. If you want a really corny but possibly helpful way of thinking about it: think of the array as a bunch of boxes, each with a label on the outside (in this case, the name of a book) and a value inside.
User avatar
Charlie Ramsden
 
Posts: 3434
Joined: Fri Jun 15, 2007 7:53 pm

Post » Thu Apr 14, 2011 6:15 am

Should be:
let carried[refBookName] := 1

The name of the element you're trying to access inside the array always goes inside [brackets]. If you want a really corny but possibly helpful way of thinking about it: think of the array as a bunch of boxes, each with a label on the outside (in this case, the name of a book) and a value inside.


ARRRRGGGGGHHH!
I had an undeclared variable left over causing the errors. refName is not the same as refBookName.
:facepalm: :blush:

Now to give it a whirl. Thanks scruggsy
User avatar
James Rhead
 
Posts: 3474
Joined: Sat Jul 14, 2007 7:32 am

Post » Thu Apr 14, 2011 4:28 am

Note that you only need to check if the book is already in the list, if you need to do different things the first time the book is added.

Otherwise, just a plain "let carried[refBookName] := 1" would work: it adds the entry to the array if it is not already there and replaces it, if the book is already in the list.
User avatar
renee Duhamel
 
Posts: 3371
Joined: Thu Dec 14, 2006 9:12 am

Post » Thu Apr 14, 2011 3:09 pm

Note that you only need to check if the book is already in the list, if you need to do different things the first time the book is added.

Otherwise, just a plain "let carried[refBookName] := 1" would work: it adds the entry to the array if it is not already there and replaces it, if the book is already in the list.

I don't know if QQuix means this but - why check the books the PC carries ? if you only want to know if the player has read a particular book you don't need to mess with the inventory at all
From the top of my head

begin MenuMode bookmenu
GetActiveMenuObject
getname
check if read for first time
if yes add it to the array and give bonus to intelligence
end
User avatar
Travis
 
Posts: 3456
Joined: Wed Oct 24, 2007 1:57 am

Post » Thu Apr 14, 2011 12:48 pm

I don't know if QQuix means this but - why check the books the PC carries ? if you only want to know if the player has read a particular book you don't need to mess with the inventory at all
From the top of my head

begin MenuMode bookmenu
GetActiveMenuObject
getname
check if read for first time
if yes add it to the array and give bonus to intelligence
end


I'm checking the player's inventory because I don't want to allow books on a shelf or on a floor to be counted as read. Only after the player has taken the book will it count. Among other things I plan to attach a timer to the "reading". A book may take 5 minutes to read, but will be something like 5 game huors. Haven't quite settled on what / how yet.

Also, I think I'm going to try verifying with player.getitem. Might smooth out / reduce CPU overhead (not that I can tell anything anyway - just seems less code = less CPU time.)
User avatar
He got the
 
Posts: 3399
Joined: Sat Nov 17, 2007 12:19 pm

Post » Thu Apr 14, 2011 1:32 pm

I'm checking the player's inventory because I don't want to allow books on a shelf or on a floor to be counted as read. Only after the player has taken the book will it count. Among other things I plan to attach a timer to the "reading". A book may take 5 minutes to read, but will be something like 5 game huors. Haven't quite settled on what / how yet.
A ha
This a mod-decision - still if you intend to use a counter maybe it would be ok if the PC read his books from a shelf or floor - imagine the case one has a library at home - mod added - and just reads at home. Or reads in the bookstore :D
User avatar
Alycia Leann grace
 
Posts: 3539
Joined: Tue Jun 26, 2007 10:07 pm

Post » Thu Apr 14, 2011 8:30 am

A ha
This a mod-decision - still if you intend to use a counter maybe it would be ok if the PC read his books from a shelf or floor - imagine the case one has a library at home - mod added - and just reads at home. Or reads in the bookstore :D


True.
However, in RL do you read a book while standing and the book is on a shelf? Or while standing and the book is on the floor?
No. You pick it up and find somewhere to sit. Or maybe you'll stay standing. But, you do pick it up first.


And speaking of this, I have another problem I haven't been able to work out. Take a look at this new code:
Spoiler
scn aaaaBookScript	array_var Readarray_var Whenfloat fQuestDelayTimefloat PointsEarnedfloat PointsRequiredref refBookshort Daysshort Debugshort doOnceshort readingstring_var refNameBegin gamemode	;========== Initial setup of arrays and variables	if GetGameLoaded && doOnce == 0		let Read := ar_Construct StringMap			let When := ar_Construct StringMap			set doOnce to 1		printc "Smarter Intelligence arrays constructed."	endif	if debug == 1		printc "Debug >> Game Mode "		set PointsRequired to 4	endif	endBegin Menumode	set fQuestDelayTime to 1	if menumode 1026		set refBook to GetActiveMenuObject  ;========= Get the object that activated the menu		set refName to GetName refBook		if debug == 1			printc "Debug >> MenuMode 1026 active object: %z, FormID %i." refName, refBook		endif				if Player.GetItemCount refBook == 1  ;======= Check to see if book is in player's inventory. if not, it won't count - skip processing			if debug == 1				printc "Debug >> Active object is in inventory.  Begin processing."			endif			if eval ar_HasKey Read refName				if debug == 1					printc "Debug >> %z was already in the array." refName				endif				message "I have already read this.  Maybe I should read it again later."			else 				let Read[refName] := 1				let When[refName] := GameDaysPassed				if debug == 1					printc "Debug >> %z added to the array." refName				endif				message " I have finished reading this."			endif		else			if debug == 1				printc "Debug >> Active object is not in inventory.  Not processed."			endif			message " I should pick this up and find a quiet place to read it."		endif	endif	if debug == 1		ar_dump Read		ar_dump When	endifend


It works well I think, but I only want one pass through the code with any given book.
I tried adding a doOnce2 block, and it worked. But only when I completely exited menu mode.
If I only change the book I was reading, the script wouldn't process the new block.
I even tried adding a new refvar set to the refName and set that as an If block. No joy.
Tips anyone?
Thaks
User avatar
Kelli Wolfe
 
Posts: 3440
Joined: Thu Aug 23, 2007 7:09 am

Post » Thu Apr 14, 2011 1:51 pm

Yeah but you don't take a book into your inventory. When you click on a book, you read it. From the reading mode, you can then choose to take the book into your inventory. The only way to get a book directly into your inventory is to take it from a container. I could be misunderstanding what you're trying to do, but I thought I'd mention that...
User avatar
Shannon Lockwood
 
Posts: 3373
Joined: Wed Aug 08, 2007 12:38 pm

Post » Thu Apr 14, 2011 4:04 am

True.
However, in RL do you read a book while standing and the book is on a shelf? Or while standing and the book is on the floor?
No. You pick it up and find somewhere to sit. Or maybe you'll stay standing. But, you do pick it up first.


And speaking of this, I have another problem I haven't been able to work out. Take a look at this new code:
Spoiler
scn aaaaBookScript	array_var Readarray_var Whenfloat fQuestDelayTimefloat PointsEarnedfloat PointsRequiredref refBookshort Daysshort Debugshort doOnceshort readingstring_var refNameBegin gamemode	;========== Initial setup of arrays and variables	if GetGameLoaded && doOnce == 0		let Read := ar_Construct StringMap			let When := ar_Construct StringMap			set doOnce to 1		printc "Smarter Intelligence arrays constructed."	endif	if debug == 1		printc "Debug >> Game Mode "		set PointsRequired to 4	endif	endBegin Menumode	set fQuestDelayTime to 1	if menumode 1026		set refBook to GetActiveMenuObject  ;========= Get the object that activated the menu		set refName to GetName refBook		if debug == 1			printc "Debug >> MenuMode 1026 active object: %z, FormID %i." refName, refBook		endif				if Player.GetItemCount refBook == 1  ;======= Check to see if book is in player's inventory. if not, it won't count - skip processing			if debug == 1				printc "Debug >> Active object is in inventory.  Begin processing."			endif			if eval ar_HasKey Read refName				if debug == 1					printc "Debug >> %z was already in the array." refName				endif				message "I have already read this.  Maybe I should read it again later."			else 				let Read[refName] := 1				let When[refName] := GameDaysPassed				if debug == 1					printc "Debug >> %z added to the array." refName				endif				message " I have finished reading this."			endif		else			if debug == 1				printc "Debug >> Active object is not in inventory.  Not processed."			endif			message " I should pick this up and find a quiet place to read it."		endif	endif	if debug == 1		ar_dump Read		ar_dump When	endifend


It works well I think, but I only want one pass through the code with any given book.
I tried adding a doOnce2 block, and it worked. But only when I completely exited menu mode.
If I only change the book I was reading, the script wouldn't process the new block.
I even tried adding a new refvar set to the refName and set that as an If block. No joy.
Tips anyone?
Thaks

Hmm - I don't understand what you want to do - is this the complete SCR ?
If you want to pass only once you might add a line like :
 if eval ar_HasKey Read refName    return
but I am not sure what you want to achieve
Please post more of the script - and maybe check debugprint - also :
Begin Menumode 1026
except if I miss something


Yeah but you don't take a book into your inventory. When you click on a book, you read it. From the reading mode, you can then choose to take the book into your inventory. The only way to get a book directly into your inventory is to take it from a container. I could be misunderstanding what you're trying to do, but I thought I'd mention that...

I kind of agree with this - and yes it has happened to me to read a book standing in RL :D
Actually it is the game mechanics that make this awkward - if one reads a book in one's house we might as well suppose he's sitting. Of course you might check this but it would be cumbersome. Anyway don't take me wrong please - it's fine as it is :)
User avatar
Hayley O'Gara
 
Posts: 3465
Joined: Wed Nov 22, 2006 2:53 am

Post » Thu Apr 14, 2011 11:58 am

Hmm - I don't understand what you want to do - is this the complete SCR ?
If you want to pass only once you might add a line like :
 if eval ar_HasKey Read refName    return
but I am not sure what you want to achieve
Please post more of the script - and maybe check debugprint - also :
Begin Menumode 1026
except if I miss something
I kind of agree with this - and yes it has happened to me to read a book standing in RL :D
Actually it is the game mechanics that make this awkward - if one reads a book in one's house we might as well suppose he's sitting. Of course you might check this but it would be cumbersome. Anyway don't take me wrong please - it's fine as it is :)


ATM, this IS my entire script. I tend to make sure one thing is working the way I want before adding to it or moving on to the next item.

After I figure out how to stop the script from looping continually one I get into menumode 1026, I want to attach a timer function to the book.
This is to prevent the player from just opening and closing a book to get credit for reading it.

This is the Conscribe log:
Spoiler
===============================================Game Instance : 1 | Time : 08-09-2010 07-43-05===============================================Smarter Intelligence arrays constructed.tdtDebug Text -> Onset a1.debug to 1set Debug >> 1** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.esp** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.esp** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.esp** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> MenuMode 1026 active object: Guide to Leyawiin, FormID 00024560.     <<<<<<<<< first instance of opening the book.Debug >> Active object is not in inventory. Not processed.                                            <<<<<<<<< does what is expected.** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> MenuMode 1026 active object: Guide to Leyawiin, FormID 00024560.     <<<<<<<<< now it's in a loopDebug >> Active object is not in inventory. Not processed.                                            <<<<<<<<< with the book not in the player** Dumping Array #1 **                                                                                                        <<<<<<<<< inventory, this is okOwner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> MenuMode 1026 active object: Guide to Leyawiin, FormID 00024560.Debug >> Active object is not in inventory. Not processed.** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> MenuMode 1026 active object: Guide to Leyawiin, FormID 00024560.Debug >> Active object is not in inventory. Not processed.** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> MenuMode 1026 active object: Guide to Leyawiin, FormID 00024560.Debug >> Active object is not in inventory. Not processed.** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> MenuMode 1026 active object: Guide to Leyawiin, FormID 00024560.Debug >> Active object is not in inventory. Not processed.** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> MenuMode 1026 active object: Guide to Leyawiin, FormID 00024560.Debug >> Active object is not in inventory. Not processed.** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> Game Mode                                                                            <<<<<<<<< closed the bookDebug >> Game Mode Debug >> Game Mode ** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.esp** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.esp** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.esp** Dumping Array #1 **Owner 01: New Mod.esp** Dumping Array #2 **Owner 01: New Mod.espDebug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.     <<<<<<<<<<< opened book from invetoryDebug >> Active object is in inventory. Begin processing.Debug >> The Pig Children added to the array.                                                             <<<<<<<<<< added to array = good** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000                                                                                         <<<<<<<<<< array dump - it's there = good** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.      <<<<<<<<<< 2nd run of block in same sessionDebug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.                                                    <<<<<<<<<< this is good in that it shows the array** Dumping Array #1 **                                                                                                      <<<<<<<<<< check works.  But it doesn't fit becauseOwner 01: New Mod.esp                                                                                                   <<<<<<<<<< it is in the same session.  [ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> MenuMode 1026 active object: The Pig Children, FormID 00024590.Debug >> Active object is in inventory. Begin processing.Debug >> The Pig Children was already in the array.** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000Debug >> Game Mode ** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000** Dumping Array #1 **Owner 01: New Mod.esp[ The Pig Children ] : 1.000000** Dumping Array #2 **Owner 01: New Mod.esp[ The Pig Children ] : 2.000000qqqBye.


As you can see, having the messages "I have finished reading this book" and "I have already read this book" show up a few seconds apart does not
work.
And the other main issue is when switching from one book to another. It's as though the script just stops.
Normally a book has an object script. I'm trying to come up with a way to use a quest script to dynamically identify and track items classed as books.

Below is a script from OOO-Intelligence Overhaul (which is my inspiration for this). The problem with this mod is that EVERY vanilla and OOO book has had a new script attached to it. Makes it a big mod and doesn't take into account books from any other mod.
Spoiler
scn IBook1short ReadModefloat fQuestDelayTimefloat TimerBEGIN OnEquipIf ( IB.Book1 != -1 ) 	set Timer to 0	set ReadMode to 1	set IB.CurrentBook to 1else		set ReadMode to 0	Message "I've already read this book."EndifENDBEGIN MenuMode 1026IF ( ReadMode == 1 ) && ( IB.CurrentBook == 1 ) 		If Timer == 0		set fQuestDelayTime to 1		set Timer to IB.Book1	Endif	Set Timer to Timer + GetSecondsPassed 	Set IB.Book1 to Timer		If ( IB.Book1 >= 48.5 )		set Readmode to 0		set IB.Book1 to -1		set IB.IntCounter to IB.IntCounter + 1		Message "I have finished reading this book."  		if ( IB.IntCounter == IStart.BookReq ) 			ModPCAttribute Intelligence 1			Message "I have expanded my knowledge and sharpened my mind by reading. (+1 Intelligence)"			set IB.IntCounter to 0			endif	Endif	Else	Set fQuestDelayTime to 50	EndIFEND


So I want to do something like the above. I'm thinking SetScript might work, but it is still a beta function. And I don't know if it would work immediately or if I would somehow have to scan the entire load order for books.
User avatar
Kayla Keizer
 
Posts: 3357
Joined: Tue Dec 12, 2006 4:31 pm

Post » Thu Apr 14, 2011 12:03 pm

Do check debugPrint. As for doOnce2 - would this work ? :
Spoiler
scn aaaaBookScript	array_var Readarray_var Whenfloat fQuestDelayTimefloat PointsEarnedfloat PointsRequiredref refBookshort Daysshort Debugshort doOnceshort doOnce2short readingstring_var refNameBegin gamemode	;========== Initial setup of arrays and variables	if GetGameLoaded && doOnce == 0		let Read := ar_Construct StringMap			let When := ar_Construct StringMap			set doOnce to 1		printc "Smarter Intelligence arrays constructed."		set PointsRequired to 4		set fQuestDelayTime to 1	endif	if debug == 1		printc "Debug >> Game Mode "	endif		if doOnce2		set doOnce2 to 0	endifendBegin Menumode 1026	if doOnce2 == 0 		set refBook to GetActiveMenuObject  ;========= Get the object that activated the menu		set refName to GetName refBook		if debug == 1			printc "Debug >> MenuMode 1026 active object: %z, FormID %i." refName, refBook		endif				if Player.GetItemCount refBook == 1  ;======= Check to see if book is in player's inventory. if not, it won't count - skip processing			if debug == 1				printc "Debug >> Active object is in inventory.  Begin processing."			endif			if eval ar_HasKey Read refName				if debug == 1					printc "Debug >> %z was already in the array." refName				endif				message "I have already read this.  Maybe I should read it again later."			else 				let Read[refName] := 1				let When[refName] := GameDaysPassed				if debug == 1					printc "Debug >> %z added to the array." refName				endif				message " I have finished reading this."			endif		else			if debug == 1				printc "Debug >> Active object is not in inventory.  Not processed."			endif			message " I should pick this up and find a quiet place to read it."		endif		set doOnce2 to 1	endif	if debug == 1 && doOnce2 == 1		ar_dump Read		ar_dump When		set doOnce2 to 2	endif		returnendbegin MenuMode	if doOnce2		set doOnce2 to 0	endifend
I know about doing one thing at a time - still it would be nice to avoid game Mode and menu mode - for this you can use the arrays as doOnce2 - but I don't know what you want to do with the timers - once I know this I could maybe use the arrays as my doOnce2
Moreover now that I think about it why not have a second quest to initialize the quest script - one that will really only run once. Leave this for the end though - now it would complicate things needlessly (and dangerously).
Finally - no no Object scripts - terrible practice - as there are scripted books around and it would cause a mess in no time. Neither setScript - go with the quest script as you do.
User avatar
N3T4
 
Posts: 3428
Joined: Wed Aug 08, 2007 8:36 pm

Post » Thu Apr 14, 2011 3:49 am

latest iteration :
Spoiler
scn UDUNaaaaBookScriptarray_var Readarray_var Whenfloat fQuestDelayTimefloat PointsEarnedfloat PointsRequiredref refBookshort Daysshort Debugshort doOnceshort doOnce2short readingstring_var refNameBegin gamemode	;========== Initial setup of arrays and variables	if GetGameLoaded && doOnce == 0		let Read := ar_Construct StringMap		let When := ar_Construct StringMap		set doOnce to 1		printc "Smarter Intelligence arrays constructed."		set PointsRequired to 4		set fQuestDelayTime to 1	;performance friendly but a bit slow maybe (?)		set debug to 1	;use setDebugMode instead	endif	if debug == 1		printc "Debug >> Game Mode "	endif	if doOnce2		set doOnce2 to 0	endifendBegin Menumode 1026	; beware of console	if doOnce2 == 0 && doOnce	; if it has not initialized yet		set refBook to GetActiveMenuObject 1026 ;========= Get the object that activated the menu	; 1026		set refName to GetName refBook		if debug == 1			printc "Debug >> MenuMode 1026 active object: %z, FormID %i." refName, refBook		endif		if Player.GetItemCount refBook == 1  ;======= Check to see if book is in player's inventory. if not, it won't count - skip processing			if debug == 1				printc "Debug >> Active object is in inventory.  Begin processing."			endif			if eval ar_HasKey Read refName				if debug == 1					printc "Debug >> %z was already in the array." refName				endif				message "I have already read this.  Maybe I should read it again later."			else				let Read[refName] := 1				let When[refName] := GameDaysPassed				if debug == 1					printc "Debug >> %z added to the array." refName				endif				message " I have finished reading this."			endif		else			if debug == 1				printc "Debug >> Active object is not in inventory.  Not processed."			endif			message " I should pick this up and find a quiet place to read it."		endif		if refBook	; if command in line 46 does not work (if I got your OBSE thread post)			set doOnce2 to 1			set refBook to 0		endif	endif	if debug == 1 && doOnce2 == 1		ar_dump Read		ar_dump When		set doOnce2 to 2	endif	return	; Imortant !endbegin MenuMode	if doOnce2		set doOnce2 to 0	endifend

conscribe:
Spoiler
Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> MenuMode 1026 active object: HOD: Yurn's 2nd Passage, FormID 6B00B66C.Debug >> Active object is in inventory.  Begin processing.Debug >> HOD: Yurn's 2nd Passage added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: Yurn's 2nd Passage ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: Yurn's 2nd Passage ] : 581.000000Debug >> MenuMode 1026 active object: HOD: Yurn's 2nd Passage, FormID 6B00B66C.Debug >> Active object is in inventory.  Begin processing.Debug >> HOD: Yurn's 2nd Passage was already in the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: Yurn's 2nd Passage ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: Yurn's 2nd Passage ] : 581.000000Debug >> MenuMode 1026 active object: HOD: A scrap of paper, FormID 6B0698F9.Debug >> Active object is in inventory.  Begin processing.Debug >> HOD: A scrap of paper added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000Debug >> MenuMode 1026 active object: Ervvin Austel's First Journal, FormID 5800C579.Debug >> Active object is in inventory.  Begin processing.Debug >> Ervvin Austel's First Journal added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000Debug >> MenuMode 1026 active object: Mysterious Letter, FormID 3A003837.Debug >> Active object is in inventory.  Begin processing.Debug >> Mysterious Letter added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Mysterious Letter ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Mysterious Letter ] : 581.000000Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> MenuMode 1026 active object: HOD: Yurn's 2nd Passage, FormID 6B00B66C.Debug >> Active object is in inventory.  Begin processing.Debug >> HOD: Yurn's 2nd Passage was already in the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Mysterious Letter ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Mysterious Letter ] : 581.000000Debug >> MenuMode 1026 active object: The Ayleid Steps, FormID 5800C57E.Debug >> Active object is in inventory.  Begin processing.Debug >> The Ayleid Steps added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Mysterious Letter ] : 1.000000[ The Ayleid Steps ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Mysterious Letter ] : 581.000000[ The Ayleid Steps ] : 581.000000Debug >> Game Mode Debug >> Game Mode Debug >> MenuMode 1026 active object: Implements of Violence, FormID 06011574.Debug >> Active object is in inventory.  Begin processing.Debug >> Implements of Violence added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Implements of Violence ] : 1.000000[ Mysterious Letter ] : 1.000000[ The Ayleid Steps ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Implements of Violence ] : 581.000000[ Mysterious Letter ] : 581.000000[ The Ayleid Steps ] : 581.000000Debug >> MenuMode 1026 active object: Mystery of Talara, v 3, FormID 000243FB.Debug >> Active object is in inventory.  Begin processing.Debug >> Mystery of Talara, v 3 added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Implements of Violence ] : 1.000000[ Mysterious Letter ] : 1.000000[ Mystery of Talara, v 3 ] : 1.000000[ The Ayleid Steps ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Implements of Violence ] : 581.000000[ Mysterious Letter ] : 581.000000[ Mystery of Talara, v 3 ] : 581.000000[ The Ayleid Steps ] : 581.000000Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode 

:)
User avatar
Michael Korkia
 
Posts: 3498
Joined: Mon Jul 23, 2007 7:58 pm

Post » Thu Apr 14, 2011 11:42 am

latest iteration :
Spoiler
scn UDUNaaaaBookScriptarray_var Readarray_var Whenfloat fQuestDelayTimefloat PointsEarnedfloat PointsRequiredref refBookshort Daysshort Debugshort doOnceshort doOnce2short readingstring_var refNameBegin gamemode	;========== Initial setup of arrays and variables	if GetGameLoaded && doOnce == 0		let Read := ar_Construct StringMap		let When := ar_Construct StringMap		set doOnce to 1		printc "Smarter Intelligence arrays constructed."		set PointsRequired to 4		set fQuestDelayTime to 1	;performance friendly but a bit slow maybe (?)		set debug to 1	;use setDebugMode instead	endif	if debug == 1		printc "Debug >> Game Mode "	endif	if doOnce2		set doOnce2 to 0	endifendBegin Menumode 1026	; beware of console	if doOnce2 == 0 && doOnce	; if it has not initialized yet		set refBook to GetActiveMenuObject 1026 ;========= Get the object that activated the menu	; 1026		set refName to GetName refBook		if debug == 1			printc "Debug >> MenuMode 1026 active object: %z, FormID %i." refName, refBook		endif		if Player.GetItemCount refBook == 1  ;======= Check to see if book is in player's inventory. if not, it won't count - skip processing			if debug == 1				printc "Debug >> Active object is in inventory.  Begin processing."			endif			if eval ar_HasKey Read refName				if debug == 1					printc "Debug >> %z was already in the array." refName				endif				message "I have already read this.  Maybe I should read it again later."			else				let Read[refName] := 1				let When[refName] := GameDaysPassed				if debug == 1					printc "Debug >> %z added to the array." refName				endif				message " I have finished reading this."			endif		else			if debug == 1				printc "Debug >> Active object is not in inventory.  Not processed."			endif			message " I should pick this up and find a quiet place to read it."		endif		if refBook	; if command in line 46 does not work (if I got your OBSE thread post)			set doOnce2 to 1			set refBook to 0		endif	endif	if debug == 1 && doOnce2 == 1		ar_dump Read		ar_dump When		set doOnce2 to 2	endif	return	; Imortant !endbegin MenuMode	if doOnce2		set doOnce2 to 0	endifend

conscribe:
Spoiler
Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> MenuMode 1026 active object: HOD: Yurn's 2nd Passage, FormID 6B00B66C.Debug >> Active object is in inventory.  Begin processing.Debug >> HOD: Yurn's 2nd Passage added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: Yurn's 2nd Passage ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: Yurn's 2nd Passage ] : 581.000000Debug >> MenuMode 1026 active object: HOD: Yurn's 2nd Passage, FormID 6B00B66C.Debug >> Active object is in inventory.  Begin processing.Debug >> HOD: Yurn's 2nd Passage was already in the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: Yurn's 2nd Passage ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: Yurn's 2nd Passage ] : 581.000000Debug >> MenuMode 1026 active object: HOD: A scrap of paper, FormID 6B0698F9.Debug >> Active object is in inventory.  Begin processing.Debug >> HOD: A scrap of paper added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000Debug >> MenuMode 1026 active object: Ervvin Austel's First Journal, FormID 5800C579.Debug >> Active object is in inventory.  Begin processing.Debug >> Ervvin Austel's First Journal added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000Debug >> MenuMode 1026 active object: Mysterious Letter, FormID 3A003837.Debug >> Active object is in inventory.  Begin processing.Debug >> Mysterious Letter added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Mysterious Letter ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Mysterious Letter ] : 581.000000Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode Debug >> MenuMode 1026 active object: HOD: Yurn's 2nd Passage, FormID 6B00B66C.Debug >> Active object is in inventory.  Begin processing.Debug >> HOD: Yurn's 2nd Passage was already in the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Mysterious Letter ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Mysterious Letter ] : 581.000000Debug >> MenuMode 1026 active object: The Ayleid Steps, FormID 5800C57E.Debug >> Active object is in inventory.  Begin processing.Debug >> The Ayleid Steps added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Mysterious Letter ] : 1.000000[ The Ayleid Steps ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Mysterious Letter ] : 581.000000[ The Ayleid Steps ] : 581.000000Debug >> Game Mode Debug >> Game Mode Debug >> MenuMode 1026 active object: Implements of Violence, FormID 06011574.Debug >> Active object is in inventory.  Begin processing.Debug >> Implements of Violence added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Implements of Violence ] : 1.000000[ Mysterious Letter ] : 1.000000[ The Ayleid Steps ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Implements of Violence ] : 581.000000[ Mysterious Letter ] : 581.000000[ The Ayleid Steps ] : 581.000000Debug >> MenuMode 1026 active object: Mystery of Talara, v 3, FormID 000243FB.Debug >> Active object is in inventory.  Begin processing.Debug >> Mystery of Talara, v 3 added to the array.** Dumping Array #4 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 1.000000[ HOD: A scrap of paper ] : 1.000000[ HOD: Yurn's 2nd Passage ] : 1.000000[ Implements of Violence ] : 1.000000[ Mysterious Letter ] : 1.000000[ Mystery of Talara, v 3 ] : 1.000000[ The Ayleid Steps ] : 1.000000** Dumping Array #302 **Refs: 1 Owner B0: UDUNaellisBookTest.esp[ Ervvin Austel's First Journal ] : 581.000000[ HOD: A scrap of paper ] : 581.000000[ HOD: Yurn's 2nd Passage ] : 581.000000[ Implements of Violence ] : 581.000000[ Mysterious Letter ] : 581.000000[ Mystery of Talara, v 3 ] : 581.000000[ The Ayleid Steps ] : 581.000000Debug >> Game Mode Debug >> Game Mode Debug >> Game Mode 

:)

Absoluttely cool! See, I told you I probably mucked it up.

But, I've started in a different direction. I've found out a small problem (from my viewpoint) and scruggsy confirmed it, the GetActiveMenuObject cmd is mouse senistive. If you open a book and the cursor is outside of the "book", a new element [ ] with FormID 00000000 is added.
I suppose this wouldn't be an issue, but... better safe than deal with the inevitable problems / complaints.

I appreciate your time and advice.

If you're ok with it, I'd like to continue to get your input on stuff, but by pm.

Thanks
User avatar
My blood
 
Posts: 3455
Joined: Fri Jun 16, 2006 8:09 am


Return to IV - Oblivion