Jump to content
Sign in to follow this  
TobiPL

Perełka !...

Recommended Posts

44.png.c8a3abeeee31d3d1e5256bc0fe544c24.png

 

Jesteście prawdziwą Perełką !...

Lubię przeglądać nowości w programowania, każdego tygodnia wyszukują C++ Kurs oraz C++ Poradnik na YouTube i ustawiam filtr na ostatni tydzień

Od niedawna zacząłem interesować się również forami...

 

Jakim cudem jest tak wiele postów sprzed ponad 2/4 lat !...

na pierwszych stronach są widoczne posty z 2013 roku... powinniście zareklamować skuteczniej swoje Formu :x...

 

Co prawda ma sporo niedociągnięć oraz braków jednak wygląda zdecydowanie lepiej niż cpp0x czy inne beznadziejne fora...

 

 

Jednak aby nie być oskarżonym o bezwartościowy post... to OK...

Mam taki problem że mi to się nie kompiluje...

Kompilator wywala błąd i nie umiem znaleźć powodu :)... ahh ja !... Ja !...

 

CZEMU?... Ktoś mi odpowie?... jest to Język Skryptowy Papyrus dla Bethesdy...

Scriptname QLG_Script_SwitchLight extends ObjectReference  
{ Script to Light Up all Lights in List and turn them out after Time
	This script is created by TobiPL for Braverock 3 }
Import Sound
;===- Base Info. -===;
 ;Created: 2019-03-17
 ;Update: 2019-04-19
 ;Author: TobiPL
 ;Unit: M.PC<1>
;===- Var. setup -============================================
	Actor Property QPlayer Auto
	{ Player Ref. }
;===- Items Var. -===============================
;***********************************************;
	FormList Property QData auto
	{ List of Used items
		<< Order >>
		 :0: - Light
		 :1: - Light Effect
		 :2: - Static
		 :3: - Sound Marker }
	ObjectReference[] QDataArray
	
	Sound Property QSoundFireUp Auto
	{ Sound to Play on fire activate }
	
	Sound Property QSoundFireOut Auto
	{ Sound to Play on fire deactivate }

	Float Property QTurnOffDelay auto
	{ Time in GameH to Off Light, 0.5 Mean 30 Min }
	
	Float Property QTrunOffMin Auto
	{ Min. in GameH time to Off Light, after this use only Delay }
	
	GlobalVariable Property QDebug Auto
	{ Global, true/false to show Debug Notifications ! 
		please, use "QLG_DEBUG_SCRIPT" }
;================================================
;===- Main Script -==============================
;***********************************************;
Ev ent OnInit()
	If( QDebug as bool )
		Debug.Notification( "Starting Initialization" )
			EndIf
	;*********************************;
	If( FirstUse )
			Constructor()
			FirstUse = false
	EndIf
	If( QFired )
		GoToState( "QState_Working" )
			Else
		GoToState( "QState_Ready" )
	EndIf
	;*********************************;
	If( QDebug as bool )
		Debug.Notification( "Initialization Finished" ) 
			EndIf
EndEvent;==- Var. List -==;
	Bool FirstUse = true
	;
;*************************;
	State Wait
		; Do Nothing
	EndState
;================================================
;***********************************************;
State QState_Ready
	Event OnTriggerEnter( ObjectReference QRef )
		If( QRef != QPlayer )
			Return
		EndIf
		
		If( QDebug as bool )
		Debug.Notification( "Triggered QLG_Script_SwitchLight" ) 
			EndIf
	
		QFired = true;
		GoToState( "QState_Working" )
		QLFireUp()
		RegisterForSingleUpdateGameTime( QTurnOffDelay + QTrunOffMin )
		
	EndEvent
EndState;==- Var. List -==;
;*************************;
	Bool QFired = false;
	;
;================================================
;***********************************************;
State QState_Working
	Event OnUpdateGameTime()
		If( QLUpdateFire() )
			RegisterForSingleUpdateGameTime( QTurnOffDelay )
			
			If( QDebug as bool )
				Debug.Notification( "Update Fire, Fires left: " + AMT )
			EndIf
		Else
			QFired = false;
			UnregisterForUpdateGameTime()
			GoToState( "QState_Ready" )
			
			If( QDebug as bool )
				Debug.Notification( "Fire out" )
			EndIf
		EndIf
	EndEvent
EndState;==- Var. List -==;
	;
	;
;================================================
;***********************************************;
Bool Function QLUpdateFire()
	Int Rand = QChain_GetRandomID()
	
	If( QDebug as bool )
		Debug.Notification( "Fire Update, ID: " + Rand )
	EndIf
	
	ObjectReference[] TempArray
	TempArray = new ObjectReference [ 4 ]	; Light, Effect, Static, Sound
	
	TempArray[ 0 ] = QDataArray[ 4 * Rand ]
	TempArray[ 1 ] = QDataArray[ 4 * Rand + 1 ]
	TempArray[ 2 ] = QDataArray[ 4 * Rand + 2 ]
	TempArray[ 3 ] = QDataArray[ 4 * Rand + 3 ]
	
	If( ( TempArray[0] ) || ( TempArray[1] ) || ( TempArray[2] ) || ( TempArray[3] ) )
		Debug.Notification( "Fire Update, All Objects are Good" )
			Else
		Debug.Notification( "Fire Update, Few Objects are Bad" )
	EndIf
	
	QLPlayFireOut( TempArray )
	QChain_RemoveID( Rand )
	
		If( AMT == 0 )
			Return False
		EndIf
	Return true
EndFunction;==- Var. List -==;
	;
	;
;================================================
;***********************************************;
Function QLFireUp()
	ObjectReference[] TempArray
	TempArray = new ObjectReference [ 4 ]	; Light, Effect, Static, Sound
	
	Int DataSize = QData.GetSize()
		DataSize /= 4
	Int i = 0
	While ( i < DataSize )
		TempArray[ 0 ] = QDataArray[ 4 * i ]
		TempArray[ 1 ] = QDataArray[ 4 * i + 1 ]
		TempArray[ 2 ] = QDataArray[ 4 * i + 2 ]
		TempArray[ 3 ] = QDataArray[ 4 * i + 3 ]
		
		If( ( TempArray[0] ) || ( TempArray[1] ) || ( TempArray[2] ) || ( TempArray[3] ) )
			Debug.Notification( "Fire UP, All Objects are Good" )
				Else
			Debug.Notification( "Fire UP, Objects are Bad" )
		EndIf
		
		QChain_Add( i )
		QLPlayFireUp( TempArray )
		Utility.Wait( 0.1 )
			
		i += 1
		If( QDebug as bool )
			Debug.Notification( "Fire Created, ID: " + i )
		EndIf
	EndWhile
EndFunction;==- Var. List -==;
	;
	;
;================================================
;***********************************************;
Function QLPlayFireUp( ObjectReference[] Data )
	Int SoundTemp = QSoundFireUp.Play( Data[2] )
		Data[0].Enable( true )		; Enable Light
		Data[1].Enable( true )		; Enable Effect
	
		Utility.Wait( 0.1 )		; Wait
	
		Data[1].Disable( true )		; Disable Effect
		Data[2].Enable( true )		; Enable Static
		Data[3].Enable()			; Enable Sound Marker
		
		Utility.Wait( 0.2 )		; Wait
	StopInstance( SoundTemp )
EndFunction;==- Var. List -==;
	;
	;
;================================================
;***********************************************;
Function QLPlayFireOut( ObjectReference[] Data )
	Int SoundTemp = QSoundFireOut.Play( Data[2] )
		Data[2].Disable( true )		; Disable Static
		
		Utility.Wait( 0.3 )		; Wait
		
		Data[0].Disable( true )		; Disable Light
		Data[3].Disable( true )		; Disable Sound Marker
		
		Utility.Wait( 0.3 )		; Wait
	StopInstance( SoundTemp )
EndFunction
;==========================================================
;*******************************************************************;
;===- Class QChain -=================================================
;*******************************************************************;
;==========================================================
		; Item Structure ;		;
			Int[] NextID		; Next Item ID
			Int[] PrevID		; Prev Item ID
			Int[] RefID			; Value to Object ID
	;*******************************************;
		; Free Strusture ;		;
			Int[] List			; List of Free IDs
			Int First			; First Free ID
	;*******************************************;
		; Var. List ;			;
			Int LastUsed		; Last Used Item
			Int FirstID			; First Item
			Int LastID			; Last Item
			Int AMT				; Amount Of Items
			Int Size = 32		; Size of Array
	;*******************************************;
;================================================
;***********************************************;
Int Function QChain_GetRandomID()
	Int Temp = FirstID
	Int Rand = Utility.RandomInt( 0 , AMT )
	Int i = 0
		While ( i < Rand )
			Temp = NextID[ Temp ]
			i += 1
		EndWhile
	Return RefID[ Temp ]
EndFunction
;_______________________________________________;
;===============================================;
;***********************************************;
Bool Function QChain_Add( int NewValue )
		If( AMT == Size )
			Return false
		EndIf
		
		int NewItemID = List[ First ]
		
		PrevID[ FirstID ] = NewItemID
		NextID[ LastID ] = NewItemID
		
		NextID[ NewItemID ] = FirstID
		PrevID[ NewItemID ] = LastID
		RefID[ NewItemID ] = NewValue
		
		LastID = NewItemID;
    
		First -= 1
		AMT += 1
		
		Return true
EndFunction
;_______________________________________________;
;===============================================;
;***********************************************;
Bool Function QChain_RemoveID( int ID )
		If( AMT == 0 )
			Return false
		EndIf
		int ItemID = FirstID
		Int i = 0
		While ( i < AMT )
			If( ID == ItemID )
				
				AMT -= 1
				First += 1
				List[ First ] = ID
				NextID[ PrevID[ ItemID ] ] = NextID[ ItemID ]
				PrevID[ NextID[ ItemID ] ] = PrevID[ ItemID ]
				
				If( ItemID == FirstID )
						FirstID = NextID[ ItemID ]
					EndIf
				If( ItemID == LastID )
						LastID = PrevID[ ItemID ]
					EndIf
				Return true
			EndIf
			ItemID = NextID[ ItemID ]
			i += 1
		EndWhile
	Return false
EndFunction
;_______________________________________________;
;===============================================;
;***********************************************;
Function Constructor()
	NextID = new Int [ 32 ]
	PrevID = new Int [ 32 ]
	RefID = new Int [ 32 ]
	List = new Int [ 32 ]
	QDataArray = new ObjectReference [ 128 ]

	Int T = 0
	Int DataSize = QData.GetSize()
	While ( T < DataSize )
		QDataArray[ T ] = QData.GetAt( T ) as ObjectReference
		T += 1
	EndWhile
	
	First = Size - 1
	
	Int i = 0
		While ( i < Size )
			List[i] = ( Size - i ) - 1 ;
			NextID[i] = 0;
			PrevID[i] = 0;
			RefID[i] = 1;
			i += 1
		EndWhile
	AMT = 0;
	LastUsed = 0;
	FirstID = 0;
	LastID = 0;
EndFunction
;***********************************************;
;=============- QChain Class END -==============;
;***********************************************;
; Hello I'm Tobi and my Sexy Cat is Nicole !...

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...