Construction Set Skriptthread zum Construction Set

als ich eben mein cs eben gestarted habe

gab er mir folgende Warnung

Script on "aaarmorbroken" carryable form "aatestarmor" (01000EEA) contains getself function

bin mir sicher das das damit was zu tun hat weiß aber net was:huh:
 
Kann es sein das du in einem GameMode Block die Funktion GetSelf angewandt hast?
Das funktioniert nicht.

Eine Alternative wäre mit OBSE möglich.
Sofern es sich um jemand handelt der sich in der Nähe des Player befindet.
GetCrosshairRef, und falls er etwas weiter wegstehen sollte kannst du mit SetNumericGameSetting iActivatePickLenght (Oder so ähnlich) die Entfernung ändern in der das Ziel im Fadenkreuz angezeigt wird.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Orios das Auge
jep genau so was habe ich getan ^^"

ich habe den Skript jetzt so verändert
(@Gildur: If funktioniert ENDLICH ENDLICH;))
PHP:
scn aaarmorbrokenc
long halfStatus
long Status

begin GameMode
if halfStatus == 0
    set halfStatus to Player.GetObjectHealth aamodiamelion
    set halfStatus to halfStatus / 2
    return
else
   set Status to Player.GetCurrentHealth
    if ( Player.GetEquipped aamodiamelion )
       message "if funktioniert ENDLICH!"
       if ( Status <=  halfStatus )
                message "Test Rüstung ist Beschädigt"
                Player.UnEquipItem aamodiamelion
                Player.removeitem aamodiamelion 1
                Player.AddItem aamodiamelionbroken 1
                Player.EquipItem aamodiamelionbroken
       endif
    endif
endif
end

funktioniert auch teilweise
nur wird die if Anweisung (Status <= halfstatuß) auch bei einem zustand von 100% angewendet das heißt meine rüssi geht kaputt sobald ich sie anziehe :lol:
 
Code:
scn aaarmorbrokenc 
long halfStatus 
long Status 

Ref MyArmor

begin GameMode 
if halfStatus == 0 
    set halfStatus to Player.GetObjectHealth aamodiamelion 
    set halfStatus to halfStatus / 2 
    return 
else 
   Set MyArmor to Player.GetEquippedObject 2 ;2 ist Upper Body ich hoffe das is eine rüssi^^
   set Status to MyArmor.GetCurrentHealth 
    if ( Player.GetEquipped aamodiamelion ) 
       message "if funktioniert ENDLICH!" 
       if ( Status <=  halfStatus ) 
                message "Test Rüstung ist Beschädigt" 
                Player.UnEquipItem aamodiamelion 
                Player.removeitem aamodiamelion 1 
                Player.AddItem aamodiamelionbroken 1 
                Player.EquipItem aamodiamelionbroken 
       endif 
    endif 
endif 
end

So müsste es aussehen. Einziges Problem. Es wird nicht funktionieren.
Guckst du Hier Anscheinend ist jemanden aufgefallen das die funktion fehlerhaft ist.
 
ICH HABS GESCHAFFT:hah::yeah:

hab deb Skript jetzt so geschrieben

PHP:
scn aaarmorbroken
long BaseHealth
long CurrentHealth
float Status

begin GameMode
set BaseHealth to getObjectHealth aamodiamelion
   if ( Player.GetEquipped aamodiamelion )
       message "if funktioniert ENDLICH!"
       set CurrentHealth to player.GetEquippedCurrentHealth 2
       set Status to CurrentHealth / BaseHealth
       if ( Status <=  0.50 )
                message "Test Rüstung ist Beschädigt"
                Player.UnEquipItem aamodiamelion
                Player.removeitem aamodiamelion 1
                Player.AddItem aamodiamelionbroken 1
                Player.EquipItem aamodiamelionbroken
       endif
    endif
end

und ja 2 ist die rüssi link;)

iich weiß ich nerve aber 1 frage habe ich noch
Kann ich iwie den zustand von aamodiamelionbroken zu den zustand von aamodiamelion (zum Zeitpunkt wo der Skript Effekt ausgelöst wurde) setzen?
 
Zuletzt bearbeitet:
Na du speicherst die ObjectHealth des Objects am anfang des Scriptes via GetObjectHealth in eine Variable und setzt dann an einem Punkt via SetObjectHealth die Health des Objectes.

Syntax
Code:
(nothing) reference.SetObjectHealth nuHealth:long [I]objectID:ref[/I]
 
ok ich weiß jetzt nicht wie ich die variable dafür deklarieren soll

hab das jetzt so geschrieben und immer wenn die neuen befehle ausgelöst werden schmiert Obl mit der bekannten Fehlermeldung ab

PHP:
scn aaarmorbrokenb
long BaseHealth
long CurrentHealth
float Status
long NewHealth

begin GameMode
set BaseHealth to getObjectHealth aamodiamelion
if ( Player.GetEquipped aamodiamelion )
       message "if funktioniert ENDLICH!"
       set CurrentHealth to player.GetEquippedCurrentHealth 2
       set Status to CurrentHealth / BaseHealth
      if ( Status <=  0.75 )
                set NewHealth to GetObjectHealth aamodiamelion 
                message "Test Rüstung ist Beschädigt"
                Player.UnEquipItem aamodiamelion
                Player.removeitem aamodiamelion 1
                Player.AddItem aamodiamelionbroken 1
                Player.EquipItem aamodiamelionbroken
                Player.setobjecthealth NewHealth aamodiamelionbroken
       endif
    endif
end
 
Ich zitiere mich dann nochmal :D

Hier ist das Script disable und enable (fett markiert)

Code:
scn OblivionGateRandomScript

float timer
short count
ref mySpawnMarker
short rand				; this can be removed eventually. Put it in just to be able to see the numbers that were being rolled.
short destroyed		; set to 1 after destroyed script runs
short ignore

begin OnLoad
	disableLinkedPathPoints
	; reset count
	if count > 0
		set timer to 60
	endif
	set count to 0

	; if MQ is over, destroy me if I'm open
	if getdisabled == 0 && getdestroyed == 0 && getstage MQ16 >= 100
		ForceCloseOblivionGate 
		enablelinkedpathpoints
	endif

     [B]; solange die Quest nicht abgeschlossen ist, werden die Tore geschlossen
     if getdisabled == 0 && getdestroyed == 0 && getstage MWOBL < 100
          disable
       else
         enable
     endif[/B]

	; if we're not at max gates, we might open a new one here
     ; dies geht nur, wenn die Morrowind-Oblivion Überleitung abgeschlossen ist
     if MWOBL == 100
	if MQ00.openGates < MQ00.maxOpenGates && ( getdisabled == 1 || ( MQ00.allowGatesToReopen == 1 && destroyed == 1 ) )
		set rand to GetRandomPercent 
		if rand <= MQ00.randomGateChance
			set mySpawnMarker to getParentRef
			mySpawnMarker.enable
			enablelinkedpathpoints
			set MQ00.openGates to MQ00.openGates + 1
			if destroyed == 1
				setDestroyed 0
				set destroyed to 0
			endif
		endif
	endif
     endif
end

begin OnActivate
	if isActionRef player == 1
		; we aren't "near" any gate anymore (we're in Oblivion!)
		set MQ00.nearOblivionGate to 0
		ReleaseWeatherOverride
	endif
	Activate
	set ignore to 1
	return
end

begin gamemode
	if ignore == 1
		set ignore to 0
		return
	endif

	; no need to process further if destroyed
	if destroyed == 1
		return
	endif
		
	if getdestroyed == 1 && destroyed == 0
		set destroyed to 1
		set MQ00.destroyedGates to MQ00.destroyedGates + 1
	endif

	; start churning out creatures when I'm turned on
	if GetDisabled == 0 && GetDestroyed == 0
		if IsAnimPlaying == 0
			playgroup specialidle 1
		endif

		; make sure weather is eeeevil gate weather
		if getiscurrentweather OblivionStormTamriel == 0
			if getdistance player < 4000
				if MQ00.nearOblivionGate == 0 && getdistance player < 1000
					; this should only happen when I come out an Oblivion gate into Tamriel -- I'm suddenly close but the "near" variable hasn't been set
					forceweather OblivionStormTamriel 1
				else
					setweather OblivionStormTamriel 1
				endif
				set MQ00.nearOblivionGate to GetSelf
			endif
		else
			if getdistance player > 5000 && MQ00.nearOblivionGate == GetSelf
				set MQ00.nearOblivionGate to 0
				ReleaseWeatherOverride
			endif
		endif

		if timer > 0
			set timer to timer - getsecondspassed
		elseif count < MQ00.maxCreatureCount
			set count to count + 1
			playgroup forward 1
			mySpawnMarker.placeatme LL1DaedricBeast100
			set timer to 10
		endif
	endif
end

Und hier das Script, mit dem ich es am Anfang versucht habe:

Code:
scn OblivionGateRandomScript

float timer
short count
ref mySpawnMarker
short rand				; this can be removed eventually. Put it in just to be able to see the numbers that were being rolled.
short destroyed		; set to 1 after destroyed script runs
short ignore

begin OnLoad
	disableLinkedPathPoints
	; reset count
	if count > 0
		set timer to 60
	endif
	set count to 0

	; if MQ is over, destroy me if I'm open
	if getdisabled == 0 && getdestroyed == 0 && getstage MQ16 >= 100
		ForceCloseOblivionGate 
		enablelinkedpathpoints
	endif

 [B]    ; solange die Quest nicht abgeschlossen ist, werden die Tore geschlossen
     if getdisabled == 0 && getdestroyed == 0 && getstage MWOBL < 100
          ForceCloseOblivionGate
          enablelinkedpathpoints
     endif[/B]

	; if we're not at max gates, we might open a new one here
     ; dies geht nur, wenn die Morrowind-Oblivion Überleitung abgeschlossen ist
     if MWOBL == 100
	if MQ00.openGates < MQ00.maxOpenGates && ( getdisabled == 1 || ( MQ00.allowGatesToReopen == 1 && destroyed == 1 ) )
		set rand to GetRandomPercent 
		if rand <= MQ00.randomGateChance
			set mySpawnMarker to getParentRef
			mySpawnMarker.enable
			enablelinkedpathpoints
			set MQ00.openGates to MQ00.openGates + 1
			if destroyed == 1
				setDestroyed 0
				set destroyed to 0
			endif
		endif
	endif
     endif
end

begin OnActivate
	if isActionRef player == 1
		; we aren't "near" any gate anymore (we're in Oblivion!)
		set MQ00.nearOblivionGate to 0
		ReleaseWeatherOverride
	endif
	Activate
	set ignore to 1
	return
end

begin gamemode
	if ignore == 1
		set ignore to 0
		return
	endif

	; no need to process further if destroyed
	if destroyed == 1
		return
	endif
		
	if getdestroyed == 1 && destroyed == 0
		set destroyed to 1
		set MQ00.destroyedGates to MQ00.destroyedGates + 1
	endif

	; start churning out creatures when I'm turned on
	if GetDisabled == 0 && GetDestroyed == 0
		if IsAnimPlaying == 0
			playgroup specialidle 1
		endif

		; make sure weather is eeeevil gate weather
		if getiscurrentweather OblivionStormTamriel == 0
			if getdistance player < 4000
				if MQ00.nearOblivionGate == 0 && getdistance player < 1000
					; this should only happen when I come out an Oblivion gate into Tamriel -- I'm suddenly close but the "near" variable hasn't been set
					forceweather OblivionStormTamriel 1
				else
					setweather OblivionStormTamriel 1
				endif
				set MQ00.nearOblivionGate to GetSelf
			endif
		else
			if getdistance player > 5000 && MQ00.nearOblivionGate == GetSelf
				set MQ00.nearOblivionGate to 0
				ReleaseWeatherOverride
			endif
		endif

		if timer > 0
			set timer to timer - getsecondspassed
		elseif count < MQ00.maxCreatureCount
			set count to count + 1
			playgroup forward 1
			mySpawnMarker.placeatme LL1DaedricBeast100
			set timer to 10
		endif
	endif
end

Kann mir irgendjemand sagen, wie man diese Obliviontore schließen kann oder was ich im Script falsch gemacht habe?
 
Was is der Script um die Zeit um
12 Stunden vorstellen?

Dass sobald man z.b eine Kristallkugel ausrüstet,die Zeit vorgesstelt wird
 
Zuletzt bearbeitet:
Ich weiß grade nicht genau ob man einfach die Global GameHour vorstellen kann, aber versuchen kann mans ja:

Code:
Begin OnEquip
      Set GameHour to GameHour + 12
End

Kannst jetz natürlich noch deine sachen mit einbauen sodass es nicht bei jedem Equip 12 Stunden vorstellt oder was auch immer.
 
  • Like
Reaktionen: Lord4Ever
Hallo Fans, da ich ein absoluter Laie auf dem Gebiet bin und auch die Englische Sprache nicht beherrsche, wollte ich mal Fragen ob jemand so freundlich wäre mir ein Script zu schreiben für ein Mod.

Das Script ist für ein Magieteleporter und man sollte bei betreten des teleporters die Wahl haben zu welcher Gildenhalle man möchte.

Vielen Dank im voraus.
 
Player.GetObjectHealth ist ja auch falsch. Du musst die Reference der Waffe angeben dessen Health du haben willst. Die Ref der Waffe oder Rüstung bestimmst du mit GetEquippedObject.
 
ääm das war jetzt mehr als beispiel gedacht ^^" ich wollte das meinem Skript (siehe oben) bei mir und NPC´s funktioniert

Ps: ich sehe bei SetObjecthealth immer noch nicht durch :oops: (auch da siehe oben)
 
@Piet:
Code:
scn Teleportscript

short Gilde

Begin OnActivate
messagebox "Zu welcher Gilde wollt Ihr reisen?", "Chorrol", "Bruma", "Bravil"
end

Begin GameMode
set GetButtonPressed to Gilde
If Gilde == 0
player.moveto [XMarker-ID von Chorrol]
elseif Gilde == 1
player.moveto [XMarker-ID von Bruma]
elseif Gilde == 2
player.moveto [XMarker-ID von Bravil]
end
Die Eckigen Klammern weglassen und die richtige ID einsetzen. Musst eben nur noch die anderen Städte ergänzen ;)
 
  • Like
Reaktionen: Piet