[WIPz/RELz] Drake's Anthro-Dragon Race (#3)

Post » Fri May 27, 2011 3:20 pm

I have a request for anybody who'd like to fulfill it.

Fearils clothing meshes were uploaded onto filefront, which, in its revamping, has lost the file. as such, I'd appreciate it if someone would reupload the clothing meshes for the dragon legs, as I don't have them now, due to a reinstall. I mentioned this in my last report, but it seems to have been glossed over to deal with the issue (don't get me wrong, I'm fine with that, but this has been bugging me non-stop for a while now.)

I reuploaded it quick to Filefront.

http://www.filefront.com/14221739/Clothing_for_dragon.rar
User avatar
vanuza
 
Posts: 3522
Joined: Fri Sep 22, 2006 11:14 pm

Post » Fri May 27, 2011 7:25 am

I'm glad this got sorted out. Thanks.

I actually didn't ignore it last time or missed it because of the issues posted. There's just nothing I could do without access to my files, so I left this action to another kind person visiting my thread and with access to the files in question.


No news from Dell yet. They wrote in an e-mail my package is at UPS now, so I guess it could arrive anytime soon... but likely I have to wait till after the weekend first.
User avatar
Liii BLATES
 
Posts: 3423
Joined: Tue Aug 22, 2006 10:41 am

Post » Fri May 27, 2011 9:41 am

thanks for doing that! I downloaded it and tested, and it's working perfectly. Thanks LSS

and don't worry Drake, I understood that you wouldn't be able to do it, so I didn't really expect you to post in response to it. I was waiting for someone else, and looks like I got that
User avatar
Mistress trades Melissa
 
Posts: 3464
Joined: Mon Jun 19, 2006 9:28 pm

Post » Fri May 27, 2011 7:50 am

thanks for doing that! I downloaded it and tested, and it's working perfectly. Thanks LSS

and don't worry Drake, I understood that you wouldn't be able to do it, so I didn't really expect you to post in response to it. I was waiting for someone else, and looks like I got that

No problem. I try to keep all of the files up to date as best I can. ^_^
User avatar
CxvIII
 
Posts: 3329
Joined: Wed Sep 06, 2006 10:35 pm

Post » Fri May 27, 2011 5:31 am

Uh, that's been a while now. Still nothing new from my laptop. It's said to be on its way to me since the 8th, delivered by UPS. The tracking website told me, 4 days after this last message I should receive an email from UPS telling me when it will arrive. Estimated date of arrival would be at or before the 19th. And now I'm heavily confused...

1. Why does it take 4 days for the parcel service to give me an arrival date?
2. When I got the message it's at the parcel service already for delivery, how could it possibly take from the 8th to the 19th (=11 days!) to deliver a simple package?
What about those "over-night deliveries" and such, "order today before 7 PM and it will arrive the next work day" and all these conventions?
3. After all we're talking about a distance from Frankfurt to my home in north-western end of NRW, round-about 300 kilometers, approx. 3 hours per car (at least that's what it takes us each time to visit some relatives living near Frankfurt)... It is totally beyond me how this could possible take UPS longer than 1 day to deliver my laptop! It's more than a week now already! :blink:


Ah well, guess there's no need to worry until the 19th then at least... we will see...

Anyways, the project seems to die rather quickly without me being able to continue my work... and that's something I'll never let happen!
So, back to the current issue, the race token script is not working at all anymore apparently.

Now, I can't find any really obvious causes for such behavior, but maybe this new script might help shedding some light on this mystery:
scn DrakeDragonRaceTokenScriptref actorRefref actorRaceref actslotContentref oldslotContentref tempItemshort initshort actorFemaleshort switchItemsshort wearsAdaptedshort foundAdaptedshort requirementshort foundRequirementshort currentRequirementshort slotCodeshort index2long frameNumlong slotMasklong tempNumarray_var confArrayarray_var itemArrayarray_var defaultItemArrayarray_var replacerTemplateArrayarray_var slotArrayarray_var repeatArrayarray_var keysArrayarray_var itemarray_var item2string_var indexstring_var tagIdstring_var tagCodestring_var currentlyWearingstring_var shouldBeWearingstring_var slotIdstring_var raceIdfloat healthBufferbegin gameMode	if eval(-1 == ar_Size confArray)		set init to 0	endif	if(init != 1)		set actorRef to 0		if(DrakeDragonRaceQuest.init != 1)			return		endif		let confArray := DrakeDragonRaceQuest.confArray		let itemArray := DrakeDragonRaceQuest.itemArray		let defaultItemArray := DrakeDragonRaceQuest.defaultItemArray		let replacerTemplateArray := DrakeDragonRaceQuest.replacerTemplateArray		let slotArray := ar_Construct StringMap		let repeatArray := ar_Construct StringMap		set frameNum to 0		set actorFemale to -1		set init to 1	endif	if(actorRef == 0)		set actorRef to getContainer		return	endif	if(actorFemale == -1)		set actorFemale to actorRef.isFemale	endif	if(DrakeDragonRaceQuest.debug == 1 && DrakeDragonRaceQuest.debugShowRaceToken == 1)		actorRef.playMagicShaderVisuals DrakeDEFriendlyDetectedXR	else		actorRef.stopMagicShaderVisuals DrakeDEFriendlyDetectedXR	endif		if(actorRace != actorRef.getRace)		set actorRace to actorRef.getRace		let confArray := DrakeDragonRaceQuest.confArray		let raceId := ar_Find actorRace confArray["races"]		if eval (raceId != "")			let confArray := confArray[raceId] ;race-specific part of confArray			let keysArray := ar_Keys confArray			ForEach item <- keysArray				let slotId := item["value"]				let slotArray[slotId] := DrakeEmptyItem ;initialize empty				let repeatArray[slotId] := 0			Loop			let slotId := ""			if(DrakeDragonRaceQuest.debug == 1 && actorRef.getIsReference player == 1)				printToConsole "Player race identified as dragon."			endif		else			;is not a dragon, remove bodyparts, if present!			ForEach item <- defaultItemArray				ForEach item2 <- item["value"]					let tempItem := item2["value"]					set tempNum to actorRef.getItemCount tempItem					if(tempItem != DrakeEmptyItem && tempNum > 0)						actorRef.removeItemNS tempItem tempNum					endif				Loop			Loop			if(DrakeDragonRaceQuest.debug == 1 && actorRef.getIsReference player == 1)				printToConsole "Player race identified as NON-dragon!"			endif			removeMe ;is not a dragon, should not have this!		endif		return	endif	if(frameNum < DrakeDragonRaceQuest.framesToSkip)		set frameNum to (frameNum + 1)		return ;dont run every frame	endif	if eval (slotId == "" || slotId == ar_Last confArray)		let slotId := ar_First confArray		set frameNum to 0		return ;finished all slots this run	else		let slotId := ar_Next confArray slotId	endif	if(actorRef.getInSameCell player != 1)		if(DrakeDragonRaceQuest.debug == 1 && DrakeDragonRaceQuest.debugShowRaceToken == 1)			actorRef.stopMagicShaderVisuals DrakeDEFriendlyDetectedXR		endif		set init to 0		removeMe	endif	;provide with bodyparts	ForEach item2 <- defaultItemArray[slotId]		let tempItem := item2["value"]		if(tempItem != DrakeEmptyItem && actorRef.getItemCount tempItem < 1)			actorRef.addItemNS tempItem 1		endif	Loop	let oldslotContent := slotArray[slotId]			;check slot for changes	let slotMask := confArray[slotId]["slotmask"]	set actslotContent to (actorRef.getEquipmentSlotMask slotMask)	if eval (actslotContent != oldslotContent || repeatArray[slotId] == 1)		let index := ""		let index2 := ar_First confArray[slotId]["combinations"]		While eval ((index == "") && (index2 != ar_BadNumericIndex))			let tagId := confArray[slotId]["combinations"][index2]["tag"]			let index := ar_Find oldslotContent itemArray[tagId]			let index2 := ar_Next confArray[slotId]["combinations"] index2		Loop					if eval (index != "") ;needs exchange			if(actorRef.getItemCount oldslotContent > 0)				let tempItem := itemArray["original"][index]				actorRef.removeItemNS oldslotContent 1				actorRef.addItemNS tempItem 1			endif		endif				let shouldBeWearing := "original"		set foundAdapted to 0		set foundRequirement to 0		ForEach item2 <- confArray[slotId]["combinations"]			let tagId := item2["value"]["tag"]			if eval (item2["key"] == ar_Last confArray[slotId]["combinations"])				let tagCode := "_" + tagId			else				let tagCode := "_" + tagId + ".nif"			endif			let requirement := item2["value"]["req"]						if(actorFemale == 1 && isBipedModelPathValid 1 actslotContent == 1)				set wearsAdapted to compareFemaleBipedPath $tagCode actslotContent			else				set wearsAdapted to compareMaleBipedPath $tagCode actslotContent			endif						if(wearsAdapted == 1 && foundAdapted != 1) ;always take the 1st one				set foundAdapted to 1				let currentlyWearing := tagId				set currentRequirement to requirement			endif			if(requirement == 1 && foundRequirement != 1) ;always take the 1st one				set foundRequirement to 1				let shouldBeWearing := tagId			endif		Loop				set switchItems to 0		if(foundAdapted == 1) ;is wearing an adapted item			if(foundRequirement == 1) ;only if slot in question should be controlled according to selected shape				if(currentRequirement == 0) ;in case of shape shifting races and worn adapted item not fitting selected shape					let index := ar_Find actslotContent itemArray[currentlyWearing]					if eval (index != "") ;safety check						let tempItem := itemArray[shouldBeWearing][index]						set switchItems to 1					endif				endif			else ;is wearing adapted item or bodypart but should not				let index := ar_Find actslotContent itemArray[currentlyWearing]				if eval (index != "") ;no bodypart					let tempItem := itemArray["original"][index]					set switchItems to 1				else ;bodypart					set tempItem to 0					set switchItems to 2				endif			endif		else ;not wearing any adapted item			if(foundRequirement == 1) ;only if slot in question should be controlled according to selected shape				if(actslotContent != 0) ;normal clothing					let index := ar_Find actslotContent itemArray["original"]					if eval (index != "") ;already an adapted present						if eval (ar_HasKey itemArray[shouldBeWearing] index)							let tempItem := itemArray[shouldBeWearing][index]						else							let tempItem := itemArray[(ar_Last itemArray)][index]						endif						set switchItems to 1					else ;try to find adapted item						set switchItems to 3					endif				else ;empty					let tempItem := defaultItemArray[slotId][shouldBeWearing]					set switchItems to 2				endif			endif		endif		;handle updates		let repeatArray[slotId] := 0		if(switchItems == 1 && tempItem != 0) ;just swap			set slotCode to getEquipmentSlot actslotContent			set healthBuffer to actorRef.getEquippedCurrentHealth slotCode			actorRef.addItemNS tempItem 1			actorRef.equipItemNS tempItem			actorRef.removeItemNS actslotContent 1			actorRef.setEquippedCurrentHealth healthBuffer slotCode		elseif(switchItems == 2) ;equip bodyparts			if(tempItem == 0)				actorRef.unequipItemNS actslotContent			else				actorRef.equipItemNS tempItem			endif		elseif(switchItems == 3) ;check for presence of alternatives			let index := $(ar_Size itemArray["original"]) ;prepare this outside of foreach			ForEach item2 <- confArray[slotId]["combinations"]				let tagId := item2["value"]["tag"]				let tagCode := ".nif|_" + tagId + ".nif"								if(isBipedModelPathValid 0 actslotContent == 1)					copyMaleBipedPath actslotContent DrakeTempItem				else					setMaleBipedPath "empty" DrakeTempItem				endif				modMaleBipedPath $tagCode DrakeTempItem				if(isBipedModelPathValid 1 actslotContent == 1)					copyFemaleBipedPath actslotContent DrakeTempItem				else					setFemaleBipedPath "empty" DrakeTempItem				endif				modFemaleBipedPath $tagCode DrakeTempItem				if(isBipedModelPathValid 0 DrakeTempItem == 1 || isBipedModelPathValid 1 DrakeTempItem == 1) ;adapted clothing exists for at least one gender					if eval ((ar_HasKey itemArray["original"] index) == 0)						let itemArray["original"][index] := actslotContent ;do this only once					endif					set tempItem to cloneForm actslotContent					if(isBipedModelPathValid 0 DrakeTempItem == 1) ; male does exist						copyMaleBipedPath DrakeTempItem tempItem					endif					if(isBipedModelPathValid 1 DrakeTempItem == 1) ; female does exist						copyFemaleBipedPath DrakeTempItem tempItem					endif					let itemArray[tagId][index] := tempItem				else ;use replacer templates instead					if eval (confArray[slotId]["forced"] == 1) ;forced unequipping for this slot						if eval (getBipedSlotMask actslotContent == slotMask || DrakeDragonRaceQuest.forcecombined == 1) ;must not be a combined-slot item or combined-slot items exception must be turned off							let tempItem := replacerTemplateArray[slotId][tagId]							if(tempItem != DrakeEmptyItem)								if(isBipedModelPathValid 0 tempItem == 1)									copyMaleBipedPath tempItem DrakeTempItem								else									setMaleBipedPath "empty" DrakeTempItem								endif								if(isBipedModelPathValid 1 tempItem == 1)									copyFemaleBipedPath tempItem DrakeTempItem								else									setFemaleBipedPath "empty" DrakeTempItem								endif								if(isBipedModelPathValid 0 DrakeTempItem == 1 || isBipedModelPathValid 1 DrakeTempItem == 1) ;replacer template exists for at least one gender									if eval ((ar_HasKey itemArray["original"] index) == 0)										let itemArray["original"][index] := actslotContent ;do this only once									endif									set tempItem to cloneForm actslotContent									if(isBipedModelPathValid 0 DrakeTempItem == 1) ; male does exist										copyMaleBipedPath DrakeTempItem tempItem									endif									if(isBipedModelPathValid 1 DrakeTempItem == 1) ; female does exist										copyFemaleBipedPath DrakeTempItem tempItem									endif									let itemArray[tagId][index] := tempItem								endif							endif						endif					endif				endif			Loop			if eval (ar_HasKey itemArray["original"] index) ;at least 1 adapted clothing was found during foreach				let repeatArray[slotId] := 1 ;do exchange next frame			else ;no adapted clothing found				if eval (confArray[slotId]["forced"] == 1) ;forced unequipping for this slot					if eval (getBipedSlotMask actslotContent == slotMask || DrakeDragonRaceQuest.forcecombined == 1) ;must not be a combined-slot item or combined-slot items exception must be turned off						let tempItem := defaultItemArray[slotId][shouldBeWearing]						if(tempItem == 0)							actorRef.unequipItemNS actslotContent						else							actorRef.equipItemNS tempItem						endif					endif				endif			endif		endif	endif	set oldslotContent to (actorRef.getEquipmentSlotMask slotMask)	let slotArray[slotId] := oldslotContentendbegin menuMode 1002 || 1008	if eval(-1 == ar_Size confArray)		set init to 0	endif	if(init != 1)		set actorRef to 0		if(DrakeDragonRaceQuest.init != 1)			return		endif		let confArray := DrakeDragonRaceQuest.confArray		let itemArray := DrakeDragonRaceQuest.itemArray		let defaultItemArray := DrakeDragonRaceQuest.defaultItemArray		let replacerTemplateArray := DrakeDragonRaceQuest.replacerTemplateArray		let slotArray := ar_Construct StringMap		let repeatArray := ar_Construct StringMap		set frameNum to 0		set actorFemale to -1		set init to 1	endif	if(actorRef == 0)		set actorRef to getContainer		return	endif	if(actorRef.getIsReference player != 1)		return ;NPCs don't need control during MenuMode	endif	if(actorFemale == -1)		set actorFemale to actorRef.isFemale	endif	if(actorRace != actorRef.getRace)		set actorRace to actorRef.getRace		let confArray := DrakeDragonRaceQuest.confArray		let raceId := ar_Find actorRace confArray["races"]		if eval (raceId != "")			let confArray := confArray[raceId] ;race-specific part of confArray			let keysArray := ar_Keys confArray			ForEach item <- keysArray				let slotId := item["value"]				let slotArray[slotId] := DrakeEmptyItem ;initialize empty				let repeatArray[slotId] := 0			Loop			let slotId := ""			if(DrakeDragonRaceQuest.debug == 1 && actorRef.getIsReference player == 1)				printToConsole "Player race identified as dragon."			endif		else			;is not a dragon, remove bodyparts, if present!			ForEach item <- defaultItemArray				ForEach item2 <- item["value"]					let tempItem := item2["value"]					set tempNum to actorRef.getItemCount tempItem					if(tempItem != DrakeEmptyItem && tempNum > 0)						actorRef.removeItemNS tempItem tempNum					endif				Loop			Loop			if(DrakeDragonRaceQuest.debug == 1 && actorRef.getIsReference player == 1)				printToConsole "Player race identified as NON-dragon!"			endif			removeMe ;is not a dragon, should not have this!		endif		return	endif	if(frameNum < DrakeDragonRaceQuest.framesToSkip)		set frameNum to (frameNum + 1)		return ;dont run every frame	endif	if eval (slotId == "" || slotId == ar_Last confArray)		let slotId := ar_First confArray		set frameNum to 0		return ;finished all slots this run	else		let slotId := ar_Next confArray slotId	endif	if(actorRef.getInSameCell player != 1)		if(DrakeDragonRaceQuest.debug == 1 && DrakeDragonRaceQuest.debugShowRaceToken == 1)			actorRef.stopMagicShaderVisuals DrakeDEFriendlyDetectedXR		endif		set init to 0		removeMe	endif	;provide with bodyparts	ForEach item2 <- defaultItemArray[slotId]		let tempItem := item2["value"]		if(tempItem != DrakeEmptyItem && actorRef.getItemCount tempItem < 1)			actorRef.addItemNS tempItem 1		endif	Loop	let oldslotContent := slotArray[slotId]			;check slot for changes	let slotMask := confArray[slotId]["slotmask"]	set actslotContent to (actorRef.getEquipmentSlotMask slotMask)	if eval (actslotContent != oldslotContent || repeatArray[slotId] == 1)		let index := ""		let index2 := ar_First confArray[slotId]["combinations"]		While eval ((index == "") && (index2 != ar_BadNumericIndex))			let tagId := confArray[slotId]["combinations"][index2]["tag"]			let index := ar_Find oldslotContent itemArray[tagId]			let index2 := ar_Next confArray[slotId]["combinations"] index2		Loop					if eval (index != "") ;needs exchange			if(actorRef.getItemCount oldslotContent > 0)				let tempItem := itemArray["original"][index]				actorRef.removeItemNS oldslotContent 1				actorRef.addItemNS tempItem 1			endif		endif				let shouldBeWearing := "original"		set foundAdapted to 0		set foundRequirement to 0		ForEach item2 <- confArray[slotId]["combinations"]			let tagId := item2["value"]["tag"]			if eval (item2["key"] == ar_Last confArray[slotId]["combinations"])				let tagCode := "_" + tagId			else				let tagCode := "_" + tagId + ".nif"			endif			let requirement := item2["value"]["req"]						if(actorFemale == 1 && isBipedModelPathValid 1 actslotContent == 1)				set wearsAdapted to compareFemaleBipedPath $tagCode actslotContent			else				set wearsAdapted to compareMaleBipedPath $tagCode actslotContent			endif						if(wearsAdapted == 1 && foundAdapted != 1) ;always take the 1st one				set foundAdapted to 1				let currentlyWearing := tagId				set currentRequirement to requirement			endif			if(requirement == 1 && foundRequirement != 1) ;always take the 1st one				set foundRequirement to 1				let shouldBeWearing := tagId			endif		Loop				set switchItems to 0		if(foundAdapted == 1) ;is wearing an adapted item			if(foundRequirement == 1) ;only if slot in question should be controlled according to selected shape				if(currentRequirement == 0) ;in case of shape shifting races and worn adapted item not fitting selected shape					let index := ar_Find actslotContent itemArray[currentlyWearing]					if eval (index != "") ;safety check						let tempItem := itemArray[shouldBeWearing][index]						set switchItems to 1					endif				endif			else ;is wearing adapted item or bodypart but should not				let index := ar_Find actslotContent itemArray[currentlyWearing]				if eval (index != "") ;no bodypart					let tempItem := itemArray["original"][index]					set switchItems to 1				else ;bodypart					set tempItem to 0					set switchItems to 2				endif			endif		else ;not wearing any adapted item			if(foundRequirement == 1) ;only if slot in question should be controlled according to selected shape				if(actslotContent != 0) ;normal clothing					let index := ar_Find actslotContent itemArray["original"]					if eval (index != "") ;already an adapted present						if eval (ar_HasKey itemArray[shouldBeWearing] index)							let tempItem := itemArray[shouldBeWearing][index]						else							let tempItem := itemArray[(ar_Last itemArray)][index]						endif						set switchItems to 1					else ;try to find adapted item						set switchItems to 3					endif				else ;empty					let tempItem := defaultItemArray[slotId][shouldBeWearing]					set switchItems to 2				endif			endif		endif		;handle updates		let repeatArray[slotId] := 0		if(switchItems == 1 && tempItem != 0) ;just swap			set slotCode to getEquipmentSlot actslotContent			set healthBuffer to actorRef.getEquippedCurrentHealth slotCode			actorRef.addItemNS tempItem 1			actorRef.equipItemNS tempItem			actorRef.removeItemNS actslotContent 1			actorRef.setEquippedCurrentHealth healthBuffer slotCode		elseif(switchItems == 2) ;equip bodyparts			if(tempItem == 0)				actorRef.unequipItemNS actslotContent			else				actorRef.equipItemNS tempItem			endif		elseif(switchItems == 3) ;check for presence of alternatives			let index := $(ar_Size itemArray["original"]) ;prepare this outside of foreach			ForEach item2 <- confArray[slotId]["combinations"]				let tagId := item2["value"]["tag"]				let tagCode := ".nif|_" + tagId + ".nif"								if(isBipedModelPathValid 0 actslotContent == 1)					copyMaleBipedPath actslotContent DrakeTempItem				else					setMaleBipedPath "empty" DrakeTempItem				endif				modMaleBipedPath $tagCode DrakeTempItem				if(isBipedModelPathValid 1 actslotContent == 1)					copyFemaleBipedPath actslotContent DrakeTempItem				else					setFemaleBipedPath "empty" DrakeTempItem				endif				modFemaleBipedPath $tagCode DrakeTempItem				if(isBipedModelPathValid 0 DrakeTempItem == 1 || isBipedModelPathValid 1 DrakeTempItem == 1) ;adapted clothing exists for at least one gender					if eval ((ar_HasKey itemArray["original"] index) == 0)						let itemArray["original"][index] := actslotContent ;do this only once					endif					set tempItem to cloneForm actslotContent					if(isBipedModelPathValid 0 DrakeTempItem == 1) ; male does exist						copyMaleBipedPath DrakeTempItem tempItem					endif					if(isBipedModelPathValid 1 DrakeTempItem == 1) ; female does exist						copyFemaleBipedPath DrakeTempItem tempItem					endif					let itemArray[tagId][index] := tempItem				else ;use replacer templates instead					if eval (confArray[slotId]["forced"] == 1) ;forced unequipping for this slot						if eval (getBipedSlotMask actslotContent == slotMask || DrakeDragonRaceQuest.forcecombined == 1) ;must not be a combined-slot item or combined-slot items exception must be turned off							let tempItem := replacerTemplateArray[slotId][tagId]							if(tempItem != DrakeEmptyItem)								if(isBipedModelPathValid 0 tempItem == 1)									copyMaleBipedPath tempItem DrakeTempItem								else									setMaleBipedPath "empty" DrakeTempItem								endif								if(isBipedModelPathValid 1 tempItem == 1)									copyFemaleBipedPath tempItem DrakeTempItem								else									setFemaleBipedPath "empty" DrakeTempItem								endif								if(isBipedModelPathValid 0 DrakeTempItem == 1 || isBipedModelPathValid 1 DrakeTempItem == 1) ;replacer template exists for at least one gender									if eval ((ar_HasKey itemArray["original"] index) == 0)										let itemArray["original"][index] := actslotContent ;do this only once									endif									set tempItem to cloneForm actslotContent									if(isBipedModelPathValid 0 DrakeTempItem == 1) ; male does exist										copyMaleBipedPath DrakeTempItem tempItem									endif									if(isBipedModelPathValid 1 DrakeTempItem == 1) ; female does exist										copyFemaleBipedPath DrakeTempItem tempItem									endif									let itemArray[tagId][index] := tempItem								endif							endif						endif					endif				endif			Loop			if eval (ar_HasKey itemArray["original"] index) ;at least 1 adapted clothing was found during foreach				let repeatArray[slotId] := 1 ;do exchange next frame			else ;no adapted clothing found				if eval (confArray[slotId]["forced"] == 1) ;forced unequipping for this slot					if eval (getBipedSlotMask actslotContent == slotMask || DrakeDragonRaceQuest.forcecombined == 1) ;must not be a combined-slot item or combined-slot items exception must be turned off						let tempItem := defaultItemArray[slotId][shouldBeWearing]						if(tempItem == 0)							actorRef.unequipItemNS actslotContent						else							actorRef.equipItemNS tempItem						endif					endif				endif			endif		endif	endif	set oldslotContent to (actorRef.getEquipmentSlotMask slotMask)	let slotArray[slotId] := oldslotContentend

Now there should be nothing preventing the debug shaders from playing anymore, unless there really is no token in the inventory.
Also I've added some debug outputs to console, only readable when "DrakeDragonRaceQuest.debug" is "1" and the token is on the player (didn't want to cause spam by having all tokens in game putting out these messages all over), which should tell us if the player was recognized as dragon or not, thus if the race check was passed or failed.
Ideally the race won't change during runtime, so this message will only popup once in the console. But if it does change at any point while playing, the debug output will again tell you what race it identified.

I'm searching for a way to get a complete "ShowVariables" output of the token script's variables, but unless I know the actual form id of the token in the player's inventory (if there even is one) or any way to access it from outside, there's no way for me to gather these information.

Feel invited to mess around with the scripts in any way that could shed some light on this issue at hand. I really need to figure this one out, but can't test it myself due to the reasons well known.
User avatar
Marcia Renton
 
Posts: 3563
Joined: Fri Jan 26, 2007 5:15 am

Post » Fri May 27, 2011 2:49 am

Okay. I tried out the new script. Initially, there was a bit of randomness to everything, but I think I got most of what was happening figured out.

First of all, The debug is still not showing me to be a dragon. Some things seem to contradict this, but the debug says I have no token.

Second. When loading a save with me a dragon from the initial startup of oblivion (Turn on oblivion, load dragon save, nothing in between). I get the hand claws, the wings/tail, and the legs. but not the feet. debug says I am not a dragon, but items are not removed. However, when I equip something that takes up one of the slots (ie, pants) then enequip, I do not get dragon legs back. I get human legs. And yes, everything is set to defaults.

Third. If a dragon save is loaded after a different save is loaded (this includes the dragon save itself) you do not get any dragon items. This also happened when I loaded up my sewer exit save to change to a dragon race.

The debug does still show non-dragons to be non-dragons.


I'll clarify all of that with an example; I start up oblivion, load of my dragon save. I get wings/tail, legs, and arms, but not feet. They do not stick around if I equip items. Kill some bandits, check debug. They are not dragon, and I get no shader on myself at all. Think to self 'wtf'. Reload save, thinking something messed up during the load. Appear with no dragon parts at all. Ragequit.
User avatar
Christine
 
Posts: 3442
Joined: Thu Dec 14, 2006 12:52 am

Post » Fri May 27, 2011 7:36 am

Alright, that helps. At least we can eliminate a few causes.

First off, when you load a save game where you are a dragon already, you don't "get" the bodyparts, you "had" them all the time. They're clothing items after all. You were even wearing them when you last saved.
Why you end up without any of these the second time you load the exact same savegame is beyond me though. Must have something to do with the awfully weird way this engine is handling saving and loading.
When I "load" a game I expect the resulting situation to be the same "every time"... Seems in Oblivion the outcome of a game load is also dependent on the current situation when you initiated the load!
That's just designed nonsense... and now I understand perfectly well why "corrupted saves" happen that frequently. :shakehead:

What's also confusing me is that the feet are missing when you load your dragon save. Were they somehow not equipped when you created the save? Like, were you wearing some modded boots or something, which disappeared when you removed the mod they were coming from?

All symptoms (not keeping the bodyparts equipped or exchanging them with proper fitting ones) fit the assumption there are no race tokens running on you... I was hesitant to believe it's "absence" of the items last time, but now it gets more believable the tokens' script isn't the main cause.
Maybe it IS the token providing part of the mod failing somehow? Did I mess up the last quest script I posted here?
To really prove that once and for all a simple "player.getItemCount xxx" (where xxx is the mod-index-dependent form id of the race token base object) call in the console should do. If there's no race token in the player's inventory at all, then at least it can't be a stalling token script.

Now, let me have a closer look at the quest script, and maybe also the spell one, while I'm waiting for somebody to do me this favor.
(Damn you, Dell! I need my laptop back now!) :swear:


edit: It could be advisable to always start a fresh new game when a quest script got altered.
Some time ago I experienced weird behavior when altering the script of a quest which was already running in my game. It seemed to take over "some" changes I made but "not all".
I could've sworn if I'd have been able to view the source code of the running script, I'd have been presented a mixture of new and old code parts!
Since then I always stop my quests and save before altering their scripts and reload. Therefore I have a clean save of me being a dragon but without running quest and with no tokens in my inventory. I think I also added a reverter token once and let it do its job, to revert all items I had back to their original state (but this was only necessary for me who I was porting contents from Pluggy arrays at the time).
User avatar
abi
 
Posts: 3405
Joined: Sat Nov 11, 2006 7:17 am

Post » Fri May 27, 2011 2:34 am

Blarg. It seems I wasn't perfectly clear. I always start each new script from a save I have at the end of the sewers. That save is not dependant on any mods at all, so whenever I load it up I have to go through the dragon setup.

What I did was start from that save, change to a dragon, and the walk outside. When I changed to the dragon race, I did not receive any dragon parts. That meaning, that the autosave that was made from walking outside had no dragon parts equipped to it. Every time I was referring to the "dragon save" in my last post, I was referring to that auto save. This means that whenever I loaded that save up before anything else, your scripts gave me the arm bits, the tail/wings, and the leg parts. But not the feet. After that, they did nothing.

So, at least for a moment, I get a race token. The token then runs through some of the item swapping script before removing itself.

I'm thinking the problem is where the race token checks the race to remove itself, mostly because I'd have to have one (even if only momentarily) to get any of the dragon items. I'm not sure why everything happens differently if you don't load it first.
User avatar
Blaine
 
Posts: 3456
Joined: Wed May 16, 2007 4:24 pm

Post » Fri May 27, 2011 3:59 pm

Hmm, could anybody perhaps post a print-out of the Scanner Aura spell script? I don't have this one at hand and it's quite possible there's something going on in there which could easily interfere with the other scripts. Apart from some "possible" weaknesses (like using a function call directly as input parameter) I fail to see anything obviously faulty in the scripts I already improved and posted here.
I need to eliminate every possible interference first, then finding the actual cause gets much easier, I hope.
(Maybe the player for some cause also gets a reverter token at the same time... you might have an idea what will happen then, when both tokens eliminate each other's effects.)

RIF, did you also try and use the "debug" flag to receive the debug output? If anything's changing mid-game and the token will go to remove itself, it will first tell you in the console about it.

Thanks again for all the help with this!


edit: For completeness' sake, here's the quest script with the possibly dangerous lines (function calls as parameters) fixed:
scn DrakeDragonRaceQuestScriptlong adaptedItemsArraylong itemsDCpartcArraylong itemsDCpartfArraylong itemsDCpartcfArraylong itemsDCpartArraylong itemsDCpartfoArraylong itemsDCpartfcArrayshort showclawsshort showfeetshort showtailshort showwingsshort showhelmetshort forcehelmetshort forceuppershort forcelowershort forcehandsshort forcefeetshort forcetailshort forcecombinedshort initshort debugshort debugShowRaceTokenshort debugShowRevTokenshort doConfigshort choicearray_var confArrayarray_var itemArrayarray_var defaultItemArrayarray_var replacerTemplateArrayarray_var tempArrayarray_var itemstring_var raceIdlong framesToSkiplong itemsRevertPerFrameref sourceref actorRacefloat timerfloat playerXfloat playerYfloat playerZfloat fQuestDelayTimebegin gameMode	set fQuestDelayTime to 0.5		if(init == 0)		if(getOBSEVersion < 17)			MessageBoxEX "Dragon Race:%rCurrent release requires OBSE v0017 or higher to run.%rYou don't have a proper version of OBSE!"			set init to -1			return		endif		set showhelmet to 1		set showclaws to 1		set showfeet to 1		set showtail to 1		set showwings to 1		set forcehelmet to 0		set forceupper to 0		set forcelower to 1		set forcehands to 1		set forcefeet to 1		set forcetail to 1		set forcecombined to 0		let confArray := ar_Construct StringMap		let confArray["races"] := ar_Construct StringMap		let confArray["races"]["dragon"] := DrakeDragon		let confArray["races"]["dragonblack"] := DrakeDragonBlack		let confArray["races"]["dragonredgold"] := DrakeDragonRedGold				foreach item <- confArray["races"]			let raceId := item["key"]						let confArray[raceId] := ar_Construct StringMap			let confArray[raceId]["hair"] := ar_Construct StringMap			let confArray[raceId]["hair"]["slotmask"] := 2			let confArray[raceId]["hair"]["combinations"] := ar_Construct Array			let confArray[raceId]["hair"]["combinations"][0] := ar_Construct StringMap			let confArray[raceId]["hair"]["combinations"][0]["tag"] := "dcpart"			let confArray[raceId]["hair"]["combinations"][0]["req"] := showhelmet			let confArray[raceId]["hair"]["forced"] := forcehelmet			let confArray[raceId]["upperbody"] := ar_Construct StringMap			let confArray[raceId]["upperbody"]["slotmask"] := 4			let confArray[raceId]["upperbody"]["combinations"] := ar_Construct Array			let confArray[raceId]["upperbody"]["combinations"][0] := ar_Construct StringMap			let confArray[raceId]["upperbody"]["combinations"][0]["tag"] := "dcpartc"			let confArray[raceId]["upperbody"]["combinations"][0]["req"] := eval (showclaws == 1 && showfeet == 0)			let confArray[raceId]["upperbody"]["combinations"][1] := ar_Construct StringMap			let confArray[raceId]["upperbody"]["combinations"][1]["tag"] := "dcpartf"			let confArray[raceId]["upperbody"]["combinations"][1]["req"] := eval (showclaws == 0 && showfeet == 1)			let confArray[raceId]["upperbody"]["combinations"][2] := ar_Construct StringMap			let confArray[raceId]["upperbody"]["combinations"][2]["tag"] := "dcpartcf"			let confArray[raceId]["upperbody"]["combinations"][2]["req"] := eval (showclaws == 1 && showfeet == 1)			let confArray[raceId]["upperbody"]["combinations"][3] := ar_Construct StringMap			let confArray[raceId]["upperbody"]["combinations"][3]["tag"] := "dcpart"			let confArray[raceId]["upperbody"]["combinations"][3]["req"] := showclaws			let confArray[raceId]["upperbody"]["forced"] := forceupper			let confArray[raceId]["lowerbody"] := ar_Construct StringMap			let confArray[raceId]["lowerbody"]["slotmask"] := 8			let confArray[raceId]["lowerbody"]["combinations"] := ar_Construct Array			let confArray[raceId]["lowerbody"]["combinations"][0] := ar_Construct StringMap			let confArray[raceId]["lowerbody"]["combinations"][0]["tag"] := "dcpart"			let confArray[raceId]["lowerbody"]["combinations"][0]["req"] := showfeet			let confArray[raceId]["lowerbody"]["forced"] := forcelower			let confArray[raceId]["hands"] := ar_Construct StringMap			let confArray[raceId]["hands"]["slotmask"] := 16			let confArray[raceId]["hands"]["combinations"] := ar_Construct Array			let confArray[raceId]["hands"]["combinations"][0] := ar_Construct StringMap			let confArray[raceId]["hands"]["combinations"][0]["tag"] := "dcpart"			let confArray[raceId]["hands"]["combinations"][0]["req"] := showclaws			let confArray[raceId]["hands"]["forced"] := forcehands			let confArray[raceId]["feet"] := ar_Construct StringMap			let confArray[raceId]["feet"]["slotmask"] := 32			let confArray[raceId]["feet"]["combinations"] := ar_Construct Array			let confArray[raceId]["feet"]["combinations"][0] := ar_Construct StringMap			let confArray[raceId]["feet"]["combinations"][0]["tag"] := "dcpart"			let confArray[raceId]["feet"]["combinations"][0]["req"] := showfeet			let confArray[raceId]["feet"]["forced"] := forcefeet			let confArray[raceId]["tail"] := ar_Construct StringMap			let confArray[raceId]["tail"]["slotmask"] := 32768			let confArray[raceId]["tail"]["combinations"] := ar_Construct Array			let confArray[raceId]["tail"]["combinations"][0] := ar_Construct StringMap			let confArray[raceId]["tail"]["combinations"][0]["tag"] := "dcpartt"			let confArray[raceId]["tail"]["combinations"][0]["req"] := eval (showtail == 1 && showwings == 0)			let confArray[raceId]["tail"]["combinations"][1] := ar_Construct StringMap			let confArray[raceId]["tail"]["combinations"][1]["tag"] := "dcpartw"			let confArray[raceId]["tail"]["combinations"][1]["req"] := eval (showtail == 0 && showwings == 1)			let confArray[raceId]["tail"]["combinations"][2] := ar_Construct StringMap			let confArray[raceId]["tail"]["combinations"][2]["tag"] := "dcpartwt"			let confArray[raceId]["tail"]["combinations"][2]["req"] := eval (showtail == 1 && showwings == 1)			let confArray[raceId]["tail"]["combinations"][3] := ar_Construct StringMap			let confArray[raceId]["tail"]["combinations"][3]["tag"] := "dcpart"			let confArray[raceId]["tail"]["combinations"][3]["req"] := eval (showtail == 1 && showwings == 1)			let confArray[raceId]["tail"]["forced"] := forcetail		Loop			let itemArray := ar_Construct StringMap		let itemArray["original"] := ar_Construct StringMap		;let itemArray["original"][x] := original_BaseId		let itemArray["dcpartc"] := ar_Construct StringMap		let itemArray["dcpartf"] := ar_Construct StringMap		let itemArray["dcpartcf"] := ar_Construct StringMap		let itemArray["dcpartw"] := ar_Construct StringMap		let itemArray["dcpartt"] := ar_Construct StringMap		let itemArray["dcpartwt"] := ar_Construct StringMap		let itemArray["dcpart"] := ar_Construct StringMap		;let itemArray[tagCode][x] := adapted_BaseId		;matching indices "x"!			let defaultItemArray := ar_Construct StringMap		let defaultItemArray["hair"] := ar_Construct StringMap		let defaultItemArray["hair"]["dcpart"] := 0		let defaultItemArray["upperbody"] := ar_Construct StringMap		let defaultItemArray["upperbody"]["dcpartc"] := DrakeEmptyItem ;no default item needed for upperbody		let defaultItemArray["upperbody"]["dcpartf"] := DrakeEmptyItem		let defaultItemArray["upperbody"]["dcpartcf"] := DrakeEmptyItem		let defaultItemArray["upperbody"]["dcpart"] := DrakeEmptyItem		let defaultItemArray["lowerbody"] := ar_Construct StringMap		let defaultItemArray["lowerbody"]["dcpart"] := DrakeDragonLegs		let defaultItemArray["hands"] := ar_Construct StringMap		let defaultItemArray["hands"]["dcpart"] := DrakeDragonClaws		let defaultItemArray["feet"] := ar_Construct StringMap		let defaultItemArray["feet"]["dcpart"] := DrakeDragonFeet		let defaultItemArray["tail"] := ar_Construct StringMap		let defaultItemArray["tail"]["dcpartt"] := DrakeDragonTail		let defaultItemArray["tail"]["dcpartw"] := DrakeDragonWings		let defaultItemArray["tail"]["dcpartwt"] := DrakeDragonWingsTail		let defaultItemArray["tail"]["dcpart"] := DrakeEmptyItem		;replacer templates		let replacerTemplateArray := ar_Construct StringMap		let replacerTemplateArray["hair"] := ar_Construct StringMap		let replacerTemplateArray["hair"]["dcpart"] := DrakeEmptyItem		let replacerTemplateArray["upperbody"] := ar_Construct StringMap		let replacerTemplateArray["upperbody"]["dcpartc"] := DrakeEmptyItem ;no replacer templates needed for upperbody		let replacerTemplateArray["upperbody"]["dcpartf"] := DrakeEmptyItem		let replacerTemplateArray["upperbody"]["dcpartcf"] := DrakeEmptyItem		let replacerTemplateArray["upperbody"]["dcpart"] := DrakeEmptyItem		let replacerTemplateArray["lowerbody"] := ar_Construct StringMap		let replacerTemplateArray["lowerbody"]["dcpart"] := DrakeDragonLegWraps		let replacerTemplateArray["hands"] := ar_Construct StringMap		let replacerTemplateArray["hands"]["dcpart"] := DrakeDragonHandWraps		let replacerTemplateArray["feet"] := ar_Construct StringMap		let replacerTemplateArray["feet"]["dcpart"] := DrakeDragonFootWraps		let replacerTemplateArray["tail"] := ar_Construct StringMap		let replacerTemplateArray["tail"]["dcpartt"] := DrakeEmptyItem		let replacerTemplateArray["tail"]["dcpartw"] := DrakeEmptyItem		let replacerTemplateArray["tail"]["dcpartwt"] := DrakeEmptyItem		let replacerTemplateArray["tail"]["dcpart"] := DrakeEmptyItem				let tempArray := ar_Construct StringMap				set framesToSkip to 10		set itemsRevertPerFrame to 100		MessageBoxEX "Dragon Race:%rAll requirements met. Arrays initialized successfully."		set doConfig to -1		set init to 1	endif	if(doConfig == 1)		MessageBoxEX "Dragon Race > Do You want to keep all default settings?|Yes|No"		set doConfig to -2		return	elseif(doConfig == -2)		set choice to getButtonPressed		if(choice == 0) ;stick to defaults			MessageBoxEX "Dragon Race > Forced unequipping:%rBy default this will also affect items%rcovering more than 1 slot at once,%r(e.g. The Arena Raiments or DB Armor)%rleaving actors running around naked,%rif they weren't adapted yet.%rDo You wish to make an exception%rto allow non-fitting combined-slot items?|Yes|No"			set doConfig to 12		elseif(choice == 1) ;customize			MessageBoxEX "Dragon Race > Select Your shape:%rDo You want to be Full-Dragon shape?|Yes|No"			set doConfig to 2		endif		return	elseif(doConfig == 2) ;full-dragon or custom?		set choice to getButtonPressed		if(choice == 0) ;stay full-dragon			set showclaws to 1			set showfeet to 1			set showtail to 1			set showwings to 1			MessageBoxEX "Dragon Race > Select Your shape:%rDo You want controlled helmet slot,%rnot actually force-equipping anything%rbut keeping non-fitting helmets unequipped?|Yes|No"			set doConfig to 5		elseif(choice == 1) ;further customize			MessageBoxEX "Dragon Race > Select Your shape:%rWhich wings & tail combination do You prefer?|Wings and tail|Only wings|Only tail|None at all"			set doConfig to 3		endif		return	elseif(doConfig == 3) ;tail & wings options		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;both				set showtail to 1				set showwings to 1			elseif(choice == 1) ;only wings				set showtail to 0				set showwings to 1			elseif(choice == 2) ;only tail				set showtail to 1				set showwings to 0			elseif(choice == 3) ;neither wings nor tail				set showtail to 0				set showwings to 0			endif			MessageBoxEX "Dragon Race > Select Your shape:%rWhich hands & feet/legs combination do You prefer?|Dragon hands and feet/legs|Dragon hands but human feet/legs|Human hands but dragon feet/legs|Human hands and human feet/legs"			set doConfig to 4		endif		return	elseif(doConfig == 4) ;hands & feet options		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;both				set showclaws to 1				set showfeet to 1			elseif(choice == 1) ;dragon hands, human feet				set showclaws to 1				set showfeet to 0			elseif(choice == 2) ;humand hands, dragon feet				set showclaws to 0				set showfeet to 1			elseif(choice == 3) ;all human				set showclaws to 0				set showfeet to 0			endif			MessageBoxEX "Dragon Race > Select Your shape:%rDo You want controlled helmet slot,%rnot actually force-equipping anything%rbut keeping non-fitting helmets unequipped?|Yes|No"			set doConfig to 5		endif		return	elseif(doConfig == 5) ;helmet options		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;controlled helmet				set showhelmet to 1			elseif(choice == 1) ;keep hairstyles				set showhelmet to 0			endif			MessageBoxEX "Dragon Race > Forced unequipping:%rBy default unequipping of non-fitting items%ris forced for all slots but upperbody.%rThis includes visual replacement while keeping stats.%rWhich settings do You prefer?|Keep default (All)|None at all|Customize..."			set doConfig to 6		endif		return	elseif(doConfig == 6)		set choice to getButtonPressed		if(choice > -1)			if(choice == 0); all slots				set forcehelmet to 1				set forceupper to 0				set forcehands to 1				set forcelower to 1				set forcefeet to 1				set forcetail to 1				MessageBoxEX "Dragon Race > Forced unequipping:%rBy default this will also affect items%rcovering more than 1 slot at once,%r(e.g. The Arena Raiments or DB Armor)%rleaving actors running around naked,%rif they weren't adapted yet.%rDo You wish to make an exception%rto allow non-fitting combined-slot items?|Yes|No"				set doConfig to 12			elseif(choice == 1) ;none at all				set forcehelmet to 0				set forceupper to 0				set forcehands to 0				set forcelower to 0				set forcefeet to 0				set forcetail to 0				MessageBoxEX "Dragon Race > Forced unequipping:%rBy default this will also affect items%rcovering more than 1 slot at once,%r(e.g. The Arena Raiments or DB Armor)%rleaving actors running around naked,%rif they weren't adapted yet.%rDo You wish to make an exception%rto allow non-fitting combined-slot items?|Yes|No"				set doConfig to 12			elseif(choice == 2) ;customize				MessageBoxEX "Dragon Race > Forced unequipping:%rDo You want the helmet/hair slot to be forced?%r(Only relevant, if it is controlled.)|Yes|No"				set doConfig to 7			endif		endif		return	elseif(doConfig == 7)		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;yes				set forcehelmet to 1			elseif(choice == 1) ;no				set forcehelmet to 0			endif			MessageBoxEX "Dragon Race > Forced unequipping:%rDo You want the lowerbody/legs slot to be forced?%r(Only relevant, if it is in Dragon shape.)|Yes|No"			set doConfig to 8		endif		return	elseif(doConfig == 8) ;lowerbody		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;yes				set forcelower to 1			elseif(choice == 1) ;no				set forcelower to 0			endif			MessageBoxEX "Dragon Race > Forced unequipping:%rDo You want the hands slot to be forced?%r(Only relevant, if it is in Dragon shape.)|Yes|No"			set doConfig to 9		endif		return	elseif(doConfig == 9) ;hands		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;yes				set forcehands to 1			elseif(choice == 1) ;no				set forcehands to 0			endif			MessageBoxEX "Dragon Race > Forced unequipping:%rDo You want the feet slot to be forced?%r(Only relevant, if it is in Dragon shape.)|Yes|No"			set doConfig to 10		endif		return	elseif(doConfig == 10) ;feet		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;yes				set forcefeet to 1			elseif(choice == 1) ;no				set forcefeet to 0			endif			MessageBoxEX "Dragon Race > Forced unequipping:%rDo You want the tail slot to be forced?%r(Only relevant, if tail or wings were selected.)|Yes|No"			set doConfig to 11		endif		return	elseif(doConfig == 11) ;tail		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;yes				set forcetail to 1			elseif(choice == 1) ;no				set forcetail to 0			endif			MessageBoxEX "Dragon Race > Forced unequipping:%rBy default this will also affect items%rcovering more than 1 slot at once,%r(e.g. The Arena Raiments or DB Armor)%rleaving actors running around naked,%rif they weren't adapted yet.%rDo You wish to make an exception%rto allow non-fitting combined-slot items?|Yes|No"			set doConfig to 12		endif		return	elseif(doConfig == 12) ;combined-slot items exception		set choice to getButtonPressed		if(choice > -1)			if(choice == 0) ;yes				set forcecombined to 0			elseif(choice == 1) ;no				set forcecombined to 1			endif			set doConfig to 13		endif		return	elseif(doConfig == 13) ;finish		MessageBoxEX "Dragon Race: Thank You for your time.%rYour Dragon race should now be successfully configured.%rIf You wish to do this again, just type%r'set DragonStartQuest.doConfig to 1'%rinto the console.%rIf You called this in the middle of a game,%rYou might need to reequip your clothing,%rfor the changes to take effect!"		set doConfig to 0	elseif(doConfig == -1) ;prepare for next frame		set doConfig to 1		return	endif		foreach item <- confArray["races"]		let raceId := item["key"]				;update shape shift settings, just in case		let confArray[raceId]["hair"]["combinations"][0]["req"] := showhelmet		let confArray[raceId]["upperbody"]["combinations"][0]["req"] := eval (showclaws == 1 && showfeet == 0)		let confArray[raceId]["upperbody"]["combinations"][1]["req"] := eval (showclaws == 0 && showfeet == 1)		let confArray[raceId]["upperbody"]["combinations"][2]["req"] := eval (showclaws == 1 && showfeet == 1)		let confArray[raceId]["upperbody"]["combinations"][3]["req"] := showclaws		let confArray[raceId]["lowerbody"]["combinations"][0]["req"] := showfeet		let confArray[raceId]["hands"]["combinations"][0]["req"] := showclaws		let confArray[raceId]["feet"]["combinations"][0]["req"] := showfeet		let confArray[raceId]["tail"]["combinations"][0]["req"] := eval (showtail == 1 && showwings == 0)		let confArray[raceId]["tail"]["combinations"][1]["req"] := eval (showtail == 0 && showwings == 1)		let confArray[raceId]["tail"]["combinations"][2]["req"] := eval (showtail == 1 && showwings == 1)				;update forced unequipping, just in case		let confArray[raceId]["hair"]["forced"] := forcehelmet		let confArray[raceId]["upperbody"]["forced"] := forceupper		let confArray[raceId]["lowerbody"]["forced"] := forcelower		let confArray[raceId]["hands"]["forced"] := forcehands		let confArray[raceId]["feet"]["forced"] := forcefeet		let confArray[raceId]["tail"]["forced"] := forcetail	Loop		if(actorRace != player.getRace)		set actorRace to player.getRace		let raceId := ar_Find actorRace confArray["races"]		if eval (raceId != "")			if(player.getItemCount DrakeDragonRaceToken < 1)				player.addItemNS DrakeDragonRaceToken 1			endif		else			if(player.getItemCount DrakeDragonRaceReverterToken < 1)				player.addItemNS DrakeDragonRaceReverterToken 1			endif		endif	endif		set source to DrakeDragonRaceScanner	;move into new cell with player and reset count so spell is cast immediately	if(source.getInSameCell player != 1)		source.moveTo player		set timer to 0	endif		if(timer <= 0)		set playerX to player.getPos X		source.setPos X playerX		set playerY to player.getPos Y		source.setPos Y playerY		set playerZ to player.getPos Z		source.setPos Z playerZ		source.cast DrakeDragonRaceScannerAura player		set timer to 1	else		set timer to (timer - getSecondsPassed)	endifend

The race check also got a bit improved and made more secure.
User avatar
Jessica Phoenix
 
Posts: 3420
Joined: Sat Jun 24, 2006 8:49 am

Post » Fri May 27, 2011 2:13 am

You know what's the easiest way to check if somethings in your inventory? Change it so it shows up in your damn inventory! I cannot believe that I didn't realize I could check if I had the tokens or not by checking off the "playable" box in the construction set. For the record, I do get the race token. So, that means that both the debug check is broken, and the swapping scripts.

I have not tested the new quest script, I'll do that in a moment. So, all of the above has been done without the most recent script.

EDIT: Your most recent changes appear to do nothing. I mean, they were already doing what they were supposed to be doing, before the changes. It's definitely the race token thats buggered.

So yeah, you do receive the race token no matter how the game is loaded, but the debug check says it's not there. The race token itself does not seem to be doing anything it's supposed to be doing.
User avatar
Katie Louise Ingram
 
Posts: 3437
Joined: Sat Nov 18, 2006 2:10 am

Post » Fri May 27, 2011 1:33 pm

Well, there are still many possibilities left as for the actual cause of this misbehavior...
...and some of my questions weren't answered yet, so I can't proceed...

At least my laptop arrived yesterday and I already managed to install the OS with everything I need for working again.
Until I have a working Oblivion install, which will also be able to play my savegames, though will likely take a longer while, I'm afraid.
However, I think it should only take another night to install the game up to a point where I can go bug-hunting on my own again... finally!
:celebration:
User avatar
yermom
 
Posts: 3323
Joined: Mon Oct 15, 2007 12:56 pm

Post » Fri May 27, 2011 2:36 am

Well, there are still many possibilities left as for the actual cause of this misbehavior...
...and some of my questions weren't answered yet, so I can't proceed...

At least my laptop arrived yesterday and I already managed to install the OS with everything I need for working again.
Until I have a working Oblivion install, which will also be able to play my savegames, though will likely take a longer while, I'm afraid.
However, I think it should only take another night to install the game up to a point where I can go bug-hunting on my own again... finally!
:celebration:


That's great news! :celebration:

Edit: Just tinkering around with my char again. :bigsmile:

http://img.photobucket.com/albums/v628/lordsoulstrike/Drake%20Dragon/en_guard.jpg

http://img.photobucket.com/albums/v628/lordsoulstrike/Drake%20Dragon/en_guard_sideview.jpg
User avatar
Paul Rice
 
Posts: 3430
Joined: Thu Jun 14, 2007 11:51 am

Post » Fri May 27, 2011 3:29 am

It's a shame your pics are always too small to make out many details on my 1920x1200 TFT. :(

Well, I got Oblivion and everything re-installed now. Left out many smaller minor mods, added in a few big ones, updated all I could find to the latest versions, ran BOSS, re-checked all tags and built the bashed patch in Wrye Bash, built the LOD with TES4LodGen (everything I always do when altering my LO) and finally gave my last save game a first try to check if everything's working.
So far everything's a massive success, I must say.

I never knew my little system could handle a heavily modded Oblivion (RAEVWD, All Natural, full UL pack and even OOO is in) that bloody well!
I mean, I knew it could handle it far better in the early beginning, several months before the last status quo... I never could explain why everything slowed down that much suddenly at one point in time... currently I'm starting to believe it was only caused by the forceware throttling down the card to minimal performance due to me once telling it to and never remembering it afterwards though...
This got sort of confirmed by the game in nearly the same configuration than before the forced reinstall now running fluently as never, 40 FPS and more in crowded areas outdoors (not yet thoroughly checked, only my first guesstimation) while it was greeting me with 1-2 FPS indoors before my laptop broke down!
To make a long story short, it seems this forced reinstall was only doing me good up to now... the involuntary time-out put aside. :rolleyes:

Hell, can you imagine my surprised look when I realized how damn fast the speed and athletics I maxed-out during long-time game play really make me moving?!
It's almost unbelievably fast... supernaturally even... but then the dragons in my imagination "are" damn fast... but this was rather with reflexes and when running and jumping... hell, I can outrun M'aik that crazy Khajiit while "sneaking"!!
Finally I can do more than just constantly pushing the mouse button when in combat... I can use tactics and maneuvers... time my blocks and thrusts, push a little fireball inbetween them now and then and still won't loose focus on combat... I can even evade some blows without using any dodging moves! This is amazing... this must be playing how the game was intended to be played for the first time of my live! :toughninja:

I have no idea why it is like that now... I only pray to The Nine, the spirits of the ancient dragons and our Christian God it will stay like this for a while! :bowdown:


...ahem... sorry for this off-topic pvssyr... guess it overwhelmed me or something... yeah...
Anyways, next I will incorporate all changes done in this thread into my scripts and see what could be the issue with the current state of the art for it no longer working at all...
Hopefully I will figure this out soon... and hopefully I won't get distracted too much by me finally being able to play seriously! :whistle:
User avatar
Ashley Hill
 
Posts: 3516
Joined: Tue Jul 04, 2006 5:27 am

Post » Fri May 27, 2011 2:28 pm

Glad to hear you're back up and running so soon.
You mentioned wanting to see our dragons in action, and I got a little bit slider-happy, and created an http://i189.photobucket.com/albums/z238/Silvonomon/Oblivion%20shots/Oblivion2009-08-0516-54-05-42.jpg by complete accident. Perhaps another variation with fringes instead of spikes at some point down the road? *drools happily*
User avatar
Max Van Morrison
 
Posts: 3503
Joined: Sat Jul 07, 2007 4:48 pm

Post » Fri May 27, 2011 1:29 pm

Very well possible.

After all, there "are" some aquatic dragons in my stories. They adapted to their new environment in the caves and caverns deep below the Crystal Lakes after hiding and finally living there for several milennia. They can breathe underwater now thanks to gills they grew and are very agile and quick swimmers thanks to the new webbing and frills(?) that evolved at certain places of their body. They blend in perfectly with the flora and fauna in the deeps of this giant lake system, harvesting the nutritious seaweed or whatever grows down there in the dark, never to be seen from the surface, no trails of their existance.

They're quite reclusive but very knowledgeable and highly skilled sorcerers. They have the same loyalty and honorable behavior in common as all my dragons, they just don't thrive for contact with the other part-colonies and communities... or any other living beings than their beloved fish and underwater-creatures they care for so much.
User avatar
Dona BlackHeart
 
Posts: 3405
Joined: Fri Dec 22, 2006 4:05 pm

Post » Fri May 27, 2011 12:38 pm

How is this race comming? Im really wanting to try it!
User avatar
Carlos Rojas
 
Posts: 3391
Joined: Thu Aug 16, 2007 11:19 am

Post » Fri May 27, 2011 4:29 pm

How is this race comming? Im really wanting to try it!

As do I want you all to try it... really.

But fixing this strange bug which seemingly prevents the token script from running gets more complex than I expected.
Due to debug output the token got added to the player and all initial checks were passed once... then at some point in time it suddenly died... or ceased execution... whatever, I have to find out where exactly... and of course why!
When I get this fixed the pre-beta, obtainable all the time from this thread, should be quite playable already.

I'm currently flooding the scripts with printToConsole debug outputs wherever it seems fit... this will get a hell of a lot of message spam in my console!
Luckily I already changed it to 50 lines to display and a history of 500 to keep track of older messages... especially all these run-by's!

Wish me luck... it doesn't look too promising at the moment...


edit: alright, that's the troublesome section in my code, somewhere in there the script must really "die"... without any errors or warnings:
	if eval (slotId == "" || slotId == ar_Last confArray)		let slotId := ar_First confArray		set frameNum to 0		printToConsole "finished all slots this run"		return;finished all slots this run	else		printToConsole "proceed with next slot"		let slotId := ar_Next confArray slotId	endif	if(actorRef.getInSameCell player != 1)		if(DrakeDragonRaceQuest.debug == 1 && DrakeDragonRaceQuest.debugShowRaceToken == 1)			actorRef.stopMagicShaderVisuals DrakeDEFriendlyDetectedXR		endif		set init to 0		printToConsole "about to remove token..."		removeMe	endif;provide with bodyparts	ForEach item2 <- defaultItemArray[slotId]		let tempItem := item2["value"]		if(tempItem != DrakeEmptyItem && actorRef.getItemCount tempItem < 1)			actorRef.addItemNS tempItem 1		endif	Loop	printToConsole "checked and added def items"

"finished all slots this run" comes up the very first time just like it should.
The next of the group I get to read is "proceed with next slot", which is also quite logical...
...but then not even "checked and added def items" appears... ever... although this is an "inevitable" line in this code, there's no way "not" to get there... when I don't get "about to remove token" either that is!

So let me see... maybe ar_Next itself dies already, which would be a really bad thing, considering it's no really "dangerous" situation it is in there.
Also maybe "slotId" becomes an invalid result (which also shouldn't be able to happen, but you never know), then the ForEach is about to die right away...
This all could explain it... I just have to nail it down where "exactly" it dies.
I think a few more debug outputs might come in handy now... especially showing me some string contents and the like.
User avatar
kitten maciver
 
Posts: 3472
Joined: Fri Jun 30, 2006 2:36 pm

Post » Fri May 27, 2011 6:47 am

Ah, hell!! Stupid stupid stupid dragon!

You won't believe what kept it from working all the time... no, you won't!
Luckily I stopped searching at the wrong place...

		let defaultItemArray := ar_Construct StringMap		let defaultItemArray["hair"] := ar_Construct StringMap		let defaultItemArray["hair"]["dcpart"] := 0		let defaultItemArray["upperbody"] := ar_Construct StringMap		let defaultItemArray["upperbody"]["dcpartc"] := DrakeEmptyItem;no default item needed for upperbody		let defaultItemArray["upperbody"]["dcpartf"] := DrakeEmptyItem		let defaultItemArray["upperbody"]["dcpartcf"] := DrakeEmptyItem		let defaultItemArray["upperbody"]["dcpart"] := DrakeEmptyItem		let defaultItemArray["lowerbody"] := ar_Construct StringMap		let defaultItemArray["lowerbody"]["dcpart"] := DrakeDragonLegs		let defaultItemArray["hands"] := ar_Construct StringMap		let defaultItemArray["hands"]["dcpart"] := DrakeDragonClaws		let defaultItemArray["feet"] := ar_Construct StringMap		let defaultItemArray["feet"]["dcpart"] := DrakeDragonFeet		let defaultItemArray["tail"] := ar_Construct StringMap		let defaultItemArray["tail"]["dcpartt"] := DrakeDragonTail		let defaultItemArray["tail"]["dcpartw"] := DrakeDragonWings		let defaultItemArray["tail"]["dcpartwt"] := DrakeDragonWingsTail		let defaultItemArray["tail"]["dcpart"] := DrakeEmptyItem

Notice the "amazingly obvious" difference between the "hair" slot and the others?
Any idea what happens when this value gets fed into the above posted ForEach?
Yeah, you guessed it... "0" is != "DrakeEmptyItem" and thus even if "getItemCount 0" doesn't cause a complete breakdown already, "addItemNS 0 1" definitely does!
One of those invalid function calls dies... and takes my script with it.

Stupid stupid stupid! I've had it right in front of my eyes all the time! This bloody damn out-of-place "0" was the ONLY stumbling stone for the script! Damn...

...ah well, now I only need to figure out why the "feet" slot (the first in row) always gets skipped and then I should be set.
But unfortunately it's past 6:10 AM already... so this is an exercise for the "next" night...

Till then! :wave:


last edit for tonight: figured that one out, too, already! cya... :snoring:
User avatar
Prohibited
 
Posts: 3293
Joined: Tue Jun 12, 2007 6:13 am

Post » Fri May 27, 2011 1:39 am

Yepp, that did the trick.
Now everything's working again so far.
I have yet to stumble across any issues... but that's nothing new, honestly, so don't count on it too much.

This time I always started a fresh new game to check it out, and so far I haven't found anything bothering me.
For the sake of crazy experiments I also added the races Argonian, Khajiit and Nord to the list of dragon races, to force an extreme amount of race tokens running on actors, if you like.
Well, let's say it was quite funny watching all those Drargonians, Drhajiit and Drords (yeah, I know, stupid names) running around... but still it served the purpose.

I think this will make a really well fixed ESP this time. I'll just add in a few more debugging mechanisms and replace my always-showing ones... maybe I'll even use the inert debug mechanism from the new OBSE instead.
Last I think I'll also make it so the skeletons are already in the "wings folded in" pose instead of the rigging pose, which should eliminate the real need to use animations to neutralize the wings, just in case something goes wrong.

Ah, well, with a little luck I'll have this all done by tonight and can provide you with a finally acceptable ESP and stuff. If then nothing's reported as faulty or buggy anymore, there's nothing in the way of the real beta release finally.
User avatar
Bitter End
 
Posts: 3418
Joined: Fri Sep 08, 2006 11:40 am

Post » Fri May 27, 2011 12:20 pm

Yepp, that did the trick.
Now everything's working again so far.
I have yet to stumble across any issues... but that's nothing new, honestly, so don't count on it too much.

This time I always started a fresh new game to check it out, and so far I haven't found anything bothering me.
For the sake of crazy experiments I also added the races Argonian, Khajiit and Nord to the list of dragon races, to force an extreme amount of race tokens running on actors, if you like.
Well, let's say it was quite funny watching all those Drargonians, Drhajiit and Drords (yeah, I know, stupid names) running around... but still it served the purpose.

I think this will make a really well fixed ESP this time. I'll just add in a few more debugging mechanisms and replace my always-showing ones... maybe I'll even use the inert debug mechanism from the new OBSE instead.
Last I think I'll also make it so the skeletons are already in the "wings folded in" pose instead of the rigging pose, which should eliminate the real need to use animations to neutralize the wings, just in case something goes wrong.

Ah, well, with a little luck I'll have this all done by tonight and can provide you with a finally acceptable ESP and stuff. If then nothing's reported as faulty or buggy anymore, there's nothing in the way of the real beta release finally.

The first one I tried worked fine. Just had that wing bug. Course I played in First person. O and I got the feet working. I had two of one of the files drake. That is why changing that one you told me did not work.
User avatar
Jesus Sanchez
 
Posts: 3455
Joined: Sun Oct 21, 2007 11:15 am

Post » Fri May 27, 2011 11:45 am

It's a shame your pics are always too small to make out many details on my 1920x1200 TFT. :(


Through Photoshop I optimize the pictures for the web. I know some do not like having to wait for a 2 or 3 meg picture to load up. <_< Either that or they are too large to view properly.
User avatar
Latisha Fry
 
Posts: 3399
Joined: Sat Jun 24, 2006 6:42 am

Post » Fri May 27, 2011 4:39 am

Through Photoshop I optimize the pictures for the web. I know some do not like having to wait for a 2 or 3 meg picture to load up. <_< Either that or they are too large to view properly.

While we're at it... are my pics too large to view or take too long to load?

I always keep them at my native resolution 1920x1200, only turn them into jpegs in paint.NET with 95% quality (application defaults) which usually limits their size to 1 MB at the largest, normally they're at 300 KB rather (depends on the amount of differently colored areas and the amount of different colors itself in the image it seems), and then imageshack "should" make them viewable properly regardless of browser size or resolution on your end "as far as I know"... and that's why I'm asking.

On my side they of course fit nicely, take only a few milliseconds to load (and I don't mean locally or from cache!) and everything's fine.
But I have no idea how it is for You, with different target resolutions, different download-bandwidths, different what-do-I-know...
...so, well? :angel:
User avatar
Jonathan Windmon
 
Posts: 3410
Joined: Wed Oct 10, 2007 12:23 pm

Post » Fri May 27, 2011 2:01 pm

While we're at it... are my pics too large to view or take too long to load?

I always keep them at my native resolution 1920x1200, only turn them into jpegs in paint.NET with 95% quality (application defaults) which usually limits their size to 1 MB at the largest, normally they're at 300 KB rather (depends on the amount of differently colored areas and the amount of different colors itself in the image it seems), and then imageshack "should" make them viewable properly regardless of browser size or resolution on your end "as far as I know"... and that's why I'm asking.

On my side they of course fit nicely, take only a few milliseconds to load (and I don't mean locally or from cache!) and everything's fine.
But I have no idea how it is for You, with different target resolutions, different download-bandwidths, different what-do-I-know...
...so, well? :angel:


I just checked. Yours seem to load fine. I'm just saying for people who have a slower connection/lower end computer/whatever....

If more people ask I'll make em larger for those who want em larger. :embarrass:
User avatar
Tiffany Carter
 
Posts: 3454
Joined: Wed Jul 19, 2006 4:05 am

Post » Fri May 27, 2011 6:25 am

And here, as promised, is the update. Includes a finally fixed ESP (or so I hope) and replacements for all skeletons with the wings nicely folded in.
That should eliminate any issues with them not properly neutralizing on a new player or not at all on NPCs... simply by eliminating the need for such neutralizing completely.

http://www.megaupload.com/?d=IYCBQ3GC

If I'm lucky, this will be the last upload before the beta release.
Now give it a try... and me some feedback... especially check out if this stuttering still occurs... please! :bowdown:
...oh, and... have fun! :whisper:

edit: Ups, almost forgot: This will need OBSE v0018!, due to me using v0018 myself now and there being some bytecode optimisations so scripts compiled with 18 won't run with 17... or whatever it was that the OBSE site/thread was telling about that.
User avatar
Georgia Fullalove
 
Posts: 3390
Joined: Mon Nov 06, 2006 11:48 pm

Post » Fri May 27, 2011 4:22 am

And here, as promised, is the update. Includes a finally fixed ESP (or so I hope) and replacements for all skeletons with the wings nicely folded in.
That should eliminate any issues with them not properly neutralizing on a new player or not at all on NPCs... simply by eliminating the need for such neutralizing completely.

http://www.megaupload.com/?d=IYCBQ3GC

If I'm lucky, this will be the last upload before the beta release.
Now give it a try... and me some feedback... especially check out if this stuttering still occurs... please! :bowdown:
...oh, and... have fun! :whisper:

edit: Ups, almost forgot: This will need OBSE v0018!, due to me using v0018 myself now and there being some bytecode optimisations so scripts compiled with 18 won't run with 17... or whatever it was that the OBSE site/thread was telling about that.

Everything works fine. Just edited this because I needed to customize the equipment settings for everything to work.
User avatar
electro_fantics
 
Posts: 3448
Joined: Fri Mar 30, 2007 11:50 pm

PreviousNext

Return to IV - Oblivion