Difference between revisions of "Talk:OnAttachedToCell - ObjectReference"

From the CreationKit Wiki
Jump to navigation Jump to search
imported>HawkFest
imported>Rasikko
 
(5 intermediate revisions by one other user not shown)
Line 2: Line 2:


:I second the above. This page needs to be more informative. [[User:Antares|Antares]] ([[User talk:Antares|talk]]) 10:21, 6 October 2012 (EDT)
:I second the above. This page needs to be more informative. [[User:Antares|Antares]] ([[User talk:Antares|talk]]) 10:21, 6 October 2012 (EDT)
::There's an example with Balimund who's a trainer and a merchant. The following script is attached to him:
::There's an example with Balimund who's Riften's Blacksmith, trainer and merchant. The following script is attached to him:
<source lang="papyrus">
<source lang="papyrus">
Scriptname TrainerGoldScript extends Actor
Scriptname TrainerGoldScript extends Actor
Line 33: Line 33:
EndEvent
EndEvent
</source>
</source>
::CheckGold function is called from OnDetachedFromCell and OnCellDetach events. When those events happen is a total mystery to me. However, a look at what CheckGold function does unveils a little clue : Balimund's TrainerType property is initialised to 2, which means that he'll end-up with maximum 800 gold when one of those two events happen. If he has less then he'll end up with the same amount. Personally I can't go further down the logic, since in my game I haven't seen this happen : either there's a 2 days merchant reset taking place, which does not leave the merchant with a lesser amount than the "default" one, either we can trade with whatever amount has been traded up until now, which does not remove any gold above some default value as is the case here via MaxGold function variable (set by the TrainerType property). A mystery... Could this be related to training? Or do some specific NPC as Balimund have their gold amount processed this way, in which case it could be related to going out - coming back into the cell or some "attachment" an actor could have with the cell?
::CheckGold function is called from OnDetachedFromCell and OnCellDetach events. When those events happen is a total mystery to me. However, a look at what CheckGold function does unveils a little clue : Balimund's TrainerType property is initialised to 2, which means that he'll end-up with maximum 800 gold when one of those two events happen. If he has less then he'll end up with the same amount. Personally I can't go further down the logic, since in my game I haven't seen this happen : either there's a 2 days merchant reset taking place, which does not leave the merchant with a lesser amount than the "default" one, either we can trade with whatever amount has been traded up until now, which does not remove any gold above some default value as is the case here via MaxGold function variable (set by the TrainerType property). A mystery... Could this be related to training? Or do some specific NPC as Balimund have their gold amount processed this way, related to some "attachment" an actor or location could have with the cell? What constitutes such attachment? This "attachment" thing is so blurred...
::'''EDIT''' - it looks like this would be more appropriate than using OnLoad event in some cases : the later won't fire up if the object is already loaded in memory. However, OnAttachedToCell would fire up everytime you get into that cell even though its objects are already loaded in memory.
::'''EDIT 2''' - it seems that '''OnCellAttach would be the way to go for exterior cells : OnAttachdToCell does NOT happen every time the player gets into a cell where however an OnCellAttach event fires up.''' Like the page says, this event fires when the related object is ''moved'' from one other cell to the current one.
::--[[User:HawkFest|HawkFest]] ([[User talk:HawkFest|talk]]) 21:49, 14 December 2012 (EST)
::--[[User:HawkFest|HawkFest]] ([[User talk:HawkFest|talk]]) 21:49, 14 December 2012 (EST)
:::: This driven some people bonkers, but once you mess with he events long enough, their inner workings becomes easy to understand -
Player goes into cell containing Ref -> OnCellAttach runs -> Ref Moves to new cell with player -> OnAttachedCell runs -> Ref moves back -> OnDetachedFromCell -> Player leaves ref's parent cell -> OnCellDetach.
--[[User:Rasikko|Rasikko]] ([[User talk:Rasikko|talk]]) 2021-10-14T15:27:18 (EDT)

Latest revision as of 14:27, 14 October 2021

It would be appreciated if this page would go over what "attached" and "unattached" mean as it relates to ObjectReferences, as I have no idea and I can't find information elsewhere. -- Chesko

I second the above. This page needs to be more informative. Antares (talk) 10:21, 6 October 2012 (EDT)
There's an example with Balimund who's Riften's Blacksmith, trainer and merchant. The following script is attached to him:
Scriptname TrainerGoldScript extends Actor
int Property TrainerType Auto  
miscobject Property gold001  Auto  

Function CheckGold()
int MaxGold
	if TrainerType==1
		MaxGold=500
	elseif TrainerType==2
		MaxGold=800
	elseif TrainerType==3
		MaxGold=1500
	else
		MaxGold=500
	endif
int GoldCount=GetItemCount(Gold001)
	if GoldCount > MaxGold
		RemoveItem(Gold001, (GoldCount-MaxGold))
	endif
EndFunction

Event OnDetachedFromCell()
	CheckGold()
EndEvent

Event OnCellDetach()
	CheckGold()
EndEvent
CheckGold function is called from OnDetachedFromCell and OnCellDetach events. When those events happen is a total mystery to me. However, a look at what CheckGold function does unveils a little clue : Balimund's TrainerType property is initialised to 2, which means that he'll end-up with maximum 800 gold when one of those two events happen. If he has less then he'll end up with the same amount. Personally I can't go further down the logic, since in my game I haven't seen this happen : either there's a 2 days merchant reset taking place, which does not leave the merchant with a lesser amount than the "default" one, either we can trade with whatever amount has been traded up until now, which does not remove any gold above some default value as is the case here via MaxGold function variable (set by the TrainerType property). A mystery... Could this be related to training? Or do some specific NPC as Balimund have their gold amount processed this way, related to some "attachment" an actor or location could have with the cell? What constitutes such attachment? This "attachment" thing is so blurred...
EDIT - it looks like this would be more appropriate than using OnLoad event in some cases : the later won't fire up if the object is already loaded in memory. However, OnAttachedToCell would fire up everytime you get into that cell even though its objects are already loaded in memory.
EDIT 2 - it seems that OnCellAttach would be the way to go for exterior cells : OnAttachdToCell does NOT happen every time the player gets into a cell where however an OnCellAttach event fires up. Like the page says, this event fires when the related object is moved from one other cell to the current one.
--HawkFest (talk) 21:49, 14 December 2012 (EST)
This driven some people bonkers, but once you mess with he events long enough, their inner workings becomes easy to understand -

Player goes into cell containing Ref -> OnCellAttach runs -> Ref Moves to new cell with player -> OnAttachedCell runs -> Ref moves back -> OnDetachedFromCell -> Player leaves ref's parent cell -> OnCellDetach. --Rasikko (talk) 2021-10-14T15:27:18 (EDT)