Construction Set Position ohne Reference annehmen! Aber wie?

RPG-BlackDragon

Reisender
Also ich möchte folgendes lösen:

Ich habe 2 Referencen:
Eine Schale und einen Apfel, der durch das Skript die gleiche Position bekommen soll.

Code:
scn schalenskript

short done
float pos

begin gamemode

if done == 0
set pos to schale.GetPos X
apfel.setpos x pos
set pos to schale.GetPos Y
apfel.setpos y pos
set pos to schale.GetPos Z
apfel.setpos z pos
set done to 1
endif

end

Soweit funktioniert alles ganz ordentlich.
Das Problem ist, ich mache seeeehr viele Schalen, wo ein Apfel die gleiche Position bekommen soll und es soll immer der gleiche Apfel sein.
Deshalb möchte ich nicht andauernd eine neue Reference plus Skript für die Schale erstellen, sondern einfach dem Activator im Object Window dieses Skript geben und dort soll dann überall ein Apfel erscheinen, bzw. die gleiche Pos bekommen.

Code:
scn schalenskript

short done
float pos
ref mySelf

begin gamemode

if done == 0
set pos to myself.GetPos X
apfel.setpos x pos
set pos to myself.GetPos Y
apfel.setpos y pos
set pos to myself.GetPos Z
apfel.setpos z pos
set done to 1
endif

end

Leider verschwindet mein Apfel, wenn die Schale keine Reference ist und ich ihr dieses Skript gebe.

Könnt ihr mir da weiterhelfen oder kann man mit OBSE da was machen?^^
 
Also ich versteh es so: Du hast zb. eine Halle in der sind Hundert Schalen und in jede soll ein Apfel.Wegen den Referencen würde ich deswegen einfach eine Triggerzone machen.

Dann hast du im Render Window ein Packet das du duplizieren kannst ohne dass du ein neues Skript für jedes machen musst.

Also Script: Trigger

Code:
scn triggerSC

ref TrigRef
ref Schale
ref Apfel

float pos

short done
Begin OnTrigger

if Apfel == 0 || Schale == 0 && done == 0
   set TrigRef to GetActionRef
   if TrigRef.GetIsID Apple == 1
      set Apfel to TrigRef
      Apfel.disable ; Platz für die Schale machen
   elseif TrigRef.GetIsID [SchaleID] == 1
      set Schale to TrigRef
      Schale.disable 
   endif
elseif Apfel == 1 && Schale == 1 && done == 0
   Apfel.enable
   Schale.enable
   set done to -1
endif

End

Begin GameMode

if done == -1
set pos to schale.GetPos X
apfel.setpos x pos
set pos to schale.GetPos Y
apfel.setpos y pos
set pos to schale.GetPos Z
apfel.setpos z pos
set done to 1

endif

Hoffen wir mal ich habe nichts vergessen.

Also dieses Script machst du auf eine Triggerzone, die skalierst du dann ganz klein so das soe möglichst genau um die Schüssel und den Apfel geht.
Der Apfel kann in der Schüssel liegen oder daneben,hauptsache in der Triggerzone.

Jetzt hast du ein Packet aus 3 Teilen das du beliebig oft verteilen kannst

wenn dein Problem anders war hoffe ich trotzdem ich konnte dir helfen ^^

:)

Gruß sinHHHans
 
Also ich denke, du musst erst mal die Referenz myself definieren.
So stelle ich mir das vor:
Code:
scn schalenskript

short done
float pos
ref mySelf

begin gamemode

if done == 0
set myself to getself
set pos to myself.GetPos X
apfel.setpos x pos
set pos to myself.GetPos Y
apfel.setpos y pos
set pos to myself.GetPos Z
apfel.setpos z pos
set done to 1
endif

end

Ich hoffe, ich konnte helfen.

MfG Gildur

Edit: To late^^
Edit: SinHHHans, einer von uns hat anscheinend irgendetwas falsch verstanden.^^
 
Zuletzt bearbeitet:
Puh, also erstmal danke euch beiden.
Leider funtzt keines der beiden skripte...oder ich hab was falsch gemacht.
@Gildur
Das mit dem myself hab ich schon probiert, geht aber nicht, ich muss immer dem Objekt eine Persistant ReferenceID geben.

@SinHHHans
Ich habe 3 Persistant Referencen gemacht, Apfel, Schale und TrigRef.

scn triggerSC

ref TrigRef
ref Schale
ref Apfel

float pos

short done
Begin OnTrigger

if Apfel == 0 || Schale == 0 && done == 0
set TrigRef to GetActionRef
if TrigRef.GetIsID Apple == 1
set Apfel to TrigRef
Apfel.disable ; Platz für die Schale machen
elseif TrigRef.GetIsID "Schale" == 1
set Schale to TrigRef
Schale.disable
endif
elseif Apfel == 1 && Schale == 1 && done == 0
Apfel.enable
Schale.enable
set done to -1
endif

End

Begin GameMode

if done == -1
set pos to Schale.GetPos X
Apfel.setpos x pos
set pos to Schale.GetPos Y
Apfel.setpos y pos
set pos to Schale.GetPos Z
Apfel.setpos z pos
set done to 1

endif
end
Ich hab außerdem festgestellt, dass ich die [] durch"" ersetzten musste, bei der Schale ID = Persistant Reference?
Leider tut sich nichts....aber ich glaube du hast mein Problem schon gut erfasst. (vllt. hab ich nen Fehler gemacht? )
Es geht mir auch hauptsächlich um den Arbeitsaufwand.

Deshalb möchte ich immer dasselbe Skript benutzen können, und KEINE Persistant Referencen.
Sodass ich nur einmal im Objekt Window beim Base Objekt das Skript mache und so dann bei allen Schalen ein Apfel erscheint.
Meiner Meinung nach, ist das vielleicht unmöglich, außer mit OBSE?

Naja, ich weiß nicht, ob es möglich ist, aber es soll möglichst wenig Arbeitsaufwand sein. :)

@SinHHHans
Ansonsten ist dein Skript ganz gut, wenn es funktionieren würde...(bzw. ich den Fehler finde^^).

Wie ist das genau? Muss ich nur der Triggerzone eine Persistant Ref geben?
Wenn ich das mache und die Schale und der Apfel keine Persitant Refs sind, gehts leider auch nicht....

Könntest du mir vielleicht eine esp schicken, oder hast du schon den Fehler entdeckt?^^

Edit:
Ich hab jetzt mein Skript ein wenig geändert. Jetzt muss ich immer dem Apfel und der Schale eine Persistant Ref geben und das Skript immer ändern, bzw. ein neues immer machen und die 2 Namen austauschen.
Code:
scn PosSkript

short done
float pos
ref mySelf
ref yourSelf

begin gamemode


if done == 0
set myself to Schale
set yourself to Apfel
set done to 1
endif

if done == 1
set pos to myself.GetPos X
yourSelf.setpos x pos
set pos to myself.GetPos Y
yourSelf.setpos y pos
set pos to myself.GetPos Z
yourSelf.setpos z pos
set done to 2
endif

end
 
Zuletzt bearbeitet:
@RPG-BlackDragon:Was du brauchst sin gar keine Persistent Reference Ids.Deshab ja der Trigger.Du musst die Sachen nur platzieren :)

Das [Schalen ID] musst du durch die Editor ID ersetzen,och weiß grad nicht wie die heißt ("Bowl01" , oder "LowerBowl01" oderso).
Sowie bei dem Apfel "Apple". Dann sollte es funktionieren.

Das Script funzt so: Die Triggerzone bemerkt dass ein Apfel und eine Schale drinnen sind und den beiden werden dann referencen zugewiesen.Der Rest laüft dann so wie in deinem Script.

:)

Gruß sinHHHans