User talk:AdiBeiElderScrolls

From the Oblivion ConstructionSet Wiki
Revision as of 18:16, 7 November 2006 by imported>AdiBeiElderScrolls
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Hi out there, in this great Wiki!

I've learned a lot here, as this wiki provides a lot of helpful hints, but still some questions I can't solve.

I'm still fighting with a good solution for this companion thing. There is some helpful code for having companions with horses, that follow. But it doesn't really work well. Still timing problems may occur and the NPC is standing in front of his horse, without mounting it or time displays that it has elapsed ...

Moreover I would like to give the NPC companion a possibility to call his horse. I tried to add some AI package in the GameMode script of the horse, if a certain script variable is set. But it seems, that the horse, if it is out of sight, just doesn't react or evaluate any package (which makes sense, to keep the game performance).

An answer to a special topic then set the RufVernommen variable.

Here is a code summary of the horse (sorry, but comments are in german)

ScriptName 0poScrPferdBegleiter01

; Variable, die dem Pferd mitteilt, es wurde gerufen
short RufVernommen
short Unterwegs
float Entfernung
short Abstand1000
short Abstand2000
short Abstand3000
short Abstand4000
short Abstand5000
short Abstand10000
short Abstand15000
short Abstand20000
short Abstand25000
short Abstand30000

Begin GameMode

   If ( Abstand1000 == 0)
      Set Abstand1000 To 1000
      Set Abstand2000 To 2000
      Set Abstand3000 To 3000
      Set Abstand4000 To 4000
      Set Abstand5000 To 5000
      Set Abstand10000 To 10000
      Set Abstand15000 To 15000
      Set Abstand20000 To 20000
      Set Abstand25000 To 25000
      Set Abstand30000 To 30000
   EndIf

   If RufVernommen
      ; lade das Package, um den Besitzer aufzusuchen
      If ( GetIsCurrentPackage "0poAIBegleiter01Aufsuchen" == 0 )
         ; jedes Package entfernen, das nicht dafür sorgt, das der Begleiter aufgesucht wird
         RemoveScriptPackage
         ; das Package veranlasst das Pferd zum Besitzer zu reisen
         AddScriptPackage "0poAIBegleiter01Aufsuchen"
         ; damit die Änderung sofort wirksam wird
         EvaluatePackage
      EndIf
      Set Entfernung To GetDistance "0poBegleiter01Ref"
      Message "Fabians Schimmel hat den Ruf vernommen. Es ist %.0f entfernt", Entfernung
      ; setze die Variable zurück
      Set RufVernommen To 0
      Set Unterwegs To 1
   EndIf

   ;prüfen, ob wir unser Ziel erreicht haben
   If Unterwegs

      If ( GetDistance "0poBegleiter01Ref" < 1000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand1000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 2000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand2000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 3000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand3000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 4000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand4000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 5000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand5000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 10000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand10000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 15000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand15000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 20000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand20000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 25000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand25000
      ElseIf ( GetDistance "0poBegleiter01Ref" < 30000 )
         Message "Fabians Schimmel ist weniger als %.0f entfernt", Abstand30000
      EndIf

      If ( GetDistance "0poBegleiter01Ref" < 350 )
         ; wir sind jetzt nahe genug, laden wir das PferdInDerWildnis Package
         If ( GetIsCurrentPackage "0poAIPferdInDerWildnis" == 0 )
            ; nicht benötigtes Package entfernen
            RemoveScriptPackage
            ; das Package veranlasst das Pferd zum Besitzer zu reisen
            AddScriptPackage "0poAIPferdInDerWildnis"
         EndIf
         ; setze die Variable zurück
         Set Unterwegs To 0
      EndIf
   EndIf

End

AdiBeiElderScrolls 18:16, 7 November 2006 (EST)