PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : global-script?^^



Kargo-
26-02-07, 12:40
huhu erstmal http://forums.ubi.com/infopop/emoticons/icon_wink.gif
bin zwar kein Anfänger mit dem Construction set (verfolge ja schon länger dieses forum und habe auch schon so ein bisschen was selber gemacht http://forums.ubi.com/infopop/emoticons/icon_wink.gif ), aber ist länger her das ich damit gearbeitet habe^^
und nun habe ich mal wieder anfgefangen und schon weiß ich nicht mehr weiter http://www.ubisoft.de/smileys/bag.gif
Nun wie schon in der überschrift steht geht es um Global-scripts, also welche die nicht an gegenständer oder NPC´s ect. gebunden sind... und nun wusste ich nicht mehr genau ob ich die einfach so schreibe un nirgends ranhänge oder ob ich da was bestimmtes beachten muss http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif
achja... und noch eine frage^^ gibt es sowas wie unsichtbare Plattformen mit denen man testen kann ob der Spieler sich gerade dadrauf befindent oder nicht? Also man kann die Plattformen weder sehen noch berühren sollen nur testen ob sich der Spieler in einem bestimmtem Gebiet befindet... Das würde ich sonst halt mit Global-Script versuchen zu sehen ob der spieler sind da aufhält jedoch erscheint es mir mit solchen Platformen leichter ^^

Danke schonmal im vorraus http://forums.ubi.com/infopop/emoticons/icon_smile.gif

MFG Kargo- (kargo war schon besetzt...)

Kargo-
26-02-07, 12:40
huhu erstmal http://forums.ubi.com/infopop/emoticons/icon_wink.gif
bin zwar kein Anfänger mit dem Construction set (verfolge ja schon länger dieses forum und habe auch schon so ein bisschen was selber gemacht http://forums.ubi.com/infopop/emoticons/icon_wink.gif ), aber ist länger her das ich damit gearbeitet habe^^
und nun habe ich mal wieder anfgefangen und schon weiß ich nicht mehr weiter http://www.ubisoft.de/smileys/bag.gif
Nun wie schon in der überschrift steht geht es um Global-scripts, also welche die nicht an gegenständer oder NPC´s ect. gebunden sind... und nun wusste ich nicht mehr genau ob ich die einfach so schreibe un nirgends ranhänge oder ob ich da was bestimmtes beachten muss http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif
achja... und noch eine frage^^ gibt es sowas wie unsichtbare Plattformen mit denen man testen kann ob der Spieler sich gerade dadrauf befindent oder nicht? Also man kann die Plattformen weder sehen noch berühren sollen nur testen ob sich der Spieler in einem bestimmtem Gebiet befindet... Das würde ich sonst halt mit Global-Script versuchen zu sehen ob der spieler sind da aufhält jedoch erscheint es mir mit solchen Platformen leichter ^^

Danke schonmal im vorraus http://forums.ubi.com/infopop/emoticons/icon_smile.gif

MFG Kargo- (kargo war schon besetzt...)

Der_Buhmann1989
26-02-07, 14:06
<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">und nun wusste ich nicht mehr genau ob ich die einfach so schreibe un nirgends ranhänge oder ob ich da was bestimmtes beachten muss Big Grin </div></BLOCKQUOTE>WILLKOMMEN IM FORUM http://forums.ubi.com/infopop/emoticons/icon_smile.gif


wenn du tribunal hast kannst du scripts in eine Liste einfügen. Alle die darin stehen werden dann automatisch gestartet.

---&gt; das script läuft aber so lange, bis es beendet wird.



besser ist, du startest es von einem anderen Script aus:


zb.

Begin XY

if ( .... )
StartScript NAME
endif

...


Beenden kannst dus mit

StopScript NAME



außerdem gibts dann noch ScriptRunning NAME..

diese funktion gibt 1 aus, wenn das Script läuft und 0 wenn nicht





<hr class="ev_code_hr" />
NAME ist natürlich der Name des Scripts, dass gestartet / gestoppt werden soll^^

<hr class="ev_code_hr" />

<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content"> achja... und noch eine frage^^ gibt es sowas wie unsichtbare Plattformen mit denen man testen kann ob der Spieler sich gerade dadrauf befindent oder nicht? Also man kann die Plattformen weder sehen noch berühren sollen nur testen ob sich der Spieler in einem bestimmtem Gebiet befindet... Das würde ich sonst halt mit Global-Script versuchen zu sehen ob der spieler sind da aufhält jedoch erscheint es mir mit solchen Platformen leichter ^^ </div></BLOCKQUOTE> Es geht auch leichter, in dem du einfach die Disttanz zu name objekt in dem Raum abfragst^^

oder einfach abfrägst, ob der Spielder in der Zelle ist ...



es gibt zwar schon ne unsichtbare Box, (ist im editor blau --&gt; schau einfach mal bei dem Sklavenschiff in Seyda neen) aber an die kann man anrennen ^^ (hat kollisionen)

wenn du abfragen willst, ob jemand draufsteht kannst du das nehmen:

GetStandingPC --&gt; 1 wenn Player drauf steht, 0 wenn nicht

GetStandingActor --&gt; 1 wenn irgendwer (NPC, Creature, Player etc.) drauf steht, 0 wenn nicht


PS. du kannst statt der platform auch einfach ein raumbauteil nehmen http://forums.ubi.com/infopop/emoticons/icon_wink.gif (also eins mit boden^^)

ercvomnil
26-02-07, 14:15
Also, soweit ich weiß müssen Global Scripts per Hand gestartet und wieder beendet werden (bzw mit startscript/stopscript in anderen scripten/dialog). Diese blauen Wände (Static-&gt;CollisionWall) zB, oder in Gramfeste, diese Dinger über der Stadt.
Der Befehl zum überprüfen wäre glaub ich getPCColliding aber sicher bin ich mir net, ich hab grad keine Befehlsliste vor mir
mfg erc

Der_Buhmann1989
26-02-07, 14:17
<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">wäre glaub ich getPCColliding </div></BLOCKQUOTE>
fast^^ das überprüft nur, ob der PC dagegen rennt --&gt; ließ mal mein edit^^

Kargo-
26-02-07, 14:40
vielen Dank für die schnelle Antwort http://forums.ubi.com/infopop/emoticons/icon_wink.gif

jedoch ist es auf einen kleineren exterior-bereich bezogen, also keine ganze zelle und denke von daher werde ich es mit den blauen klötzen versuchen^^

dann habe ich aber noch eine andere frage...
naja mein Script funzt nicht und verstehe nicht wieso...
mage den mal wer durchsehen was da falsch ist?^^ (bis zum timer klappt alles suppi also bis zu den buttons^^)

begin MY_Steinblume

short done
short gießen
short toll
short weg
short button

float timer

if ( MenuMode == 1 )
return
endif

if ( OnActivate == 1 )
if ( done == 0 )
if ( toll != 3 )
Messagebox "Die Pflanze sieht sehr trocken aus!", "gießen", "nichts machen"
set done to 1
elseif ( toll == 3 )
activate
set weg to ( weg + GetSecondsPassed )
endif
elseif ( done == 1 )
Messagebox "Die Pflanze wurde schon gegossen", "Ok"
endif
endif

if ( done == 1 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set gießen to 1
set button to -1
set toll to ( toll + 1 )
elseif ( button == 1 )
set button to -1
endif
endif

if ( gießen == 1 )
set timer to ( timer + GetSecondsPassed )
if timer == 10
set gießen to 0
set done to 0
set timer to 0
Messagebox "Pflanze sieht wieder durstig aus"
endif
endif

if weg &gt;= 5
disable
Messagebox "Die Pflanze verwelkt!", "NEIN!!! MEIN LEBENSWERK IST DAHIN!!!"
endif

End MY_Steinblume


also bis zu elseif ( button == 0 ) funktioniert es... ( mit messagebox getestet nur die wiederholte sich dann die ganze zeit weshalb ich die ausgestellt habe)

P.S.: Ja einer der Hintergedanken war Harvest Moon :P

Der_Buhmann1989
26-02-07, 14:52
<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">short weg </div></BLOCKQUOTE>
--&gt; <BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">set weg to ( weg + GetSecondsPassed ) </div></BLOCKQUOTE>proibiers mal mit float weg --&gt; ist ja auch ein timer...


<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">set button to -1 </div></BLOCKQUOTE>das kannst du weg lassen


<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">f timer == 10 </div></BLOCKQUOTE>nimm lieber timer &gt;= 10


<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">elseif ( button == 0 )
set gießen to 1
set button to -1
set toll to ( toll + 1 ) </div></BLOCKQUOTE>
toll wird auf toll + 1 gesetzt, wenn button == 0 ist --&gt; du jetzt button davor aber auf -1



<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content"> ( mit messagebox getestet nur die wiederholte sich dann die ganze zeit weshalb ich die ausgestellt habe) </div></BLOCKQUOTE> dann stimmt was mit der bedinung (damit sie angezeigt wird) nicht..

Kargo-
26-02-07, 14:59
gut, vielen dank http://forums.ubi.com/infopop/emoticons/icon_smile.gif
irgendwie alles blöde fehler http://forums.ubi.com/images/smilies/16x16_smiley-sad.gif
nun habe es gleich ausprobiert aber ändert immer noch nichts http://forums.ubi.com/infopop/emoticons/icon_frown.gif
bleibt wieder bei timer hängen... nachdem ich gießen gemacht habe kommt immer nurnoch " Messagebox "Die Pflanze wurde schon gegossen", "Ok" " egal wie lange ich warte

Der_Buhmann1989
26-02-07, 15:02
das set button to -1 auch weggelassen?

Kargo-
26-02-07, 15:03
jop alles geändert wie du meintest

Der_Buhmann1989
26-02-07, 15:07
<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">elseif ( done == 1 )
Messagebox "Die Pflanze wurde schon gegossen", "Ok"
endif
endif

if ( done == 1 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
set gießen to 1
set button to -1
set toll to ( toll + 1 )
elseif ( button == 1 )
set button to -1
endif
endif </div></BLOCKQUOTE>
vielleicht liegts daran, also dass sich das GetButtonPressed auf die Messagebox mit "Die Pflanze ...","ok" bezieht...

Kargo-
26-02-07, 15:12
hmm habe mal die zweite Messagebox ganz weggelassen und nun passiert garnichts mehr wenn ich die Pflanze anklicke nachm gießen http://forums.ubi.com/infopop/emoticons/icon_frown.gif

ReneMiner
26-02-07, 22:37
Falls Du's noch wissen wolltest:

Befehle wie "return" sind in globalen bzw. Startup-Scripts nicht erlaubt. Z.B. das hier:

begin meinStartup

if ( Chargenstate &gt; -1 )
;sobald die Charaktergeneration abgeschlossen ist
; wird ChargenState an der ChargenExitDoor auf -1 gesetzt

return

endif

; blabla....

end

Dieses "Return" würde mit einer "EXPRESSION!"-Fehlermeldung und sofortigem Spielabbruch quittiert. Das PlugIn würde nur mit einem Spielstand funktionieren der die Charaktergeneration bereits hinter sich gebracht hat.


Andere globale Scripts die von einem lokalen Script/Dialog aus gestartet werden sind nicht wirklich global sondern werden als "targeted" bezeichnet.
Ausnahme sind also nur das Main-Script sowie alle aus einem StartUp-Script gestarteten Scripts. Alles andere ist bezugnehmend auf das Objekt von dessen Script/Dialog es gestartet wurde, hier ein Beispiel zur Anwendung:


Mach Dir einen Test-NPC, an dem NPC bringe ein lokales Script an in dem steht:

begin meinTestNPCScript


if ( OnActivate )

;if ( Scriptrunning "meinTestNPCTargeted" == 0 )
;startscript meinTestNPCTargeted
;endif

endif

end

Speichere das Script erstmal so, dann bringe es an dem NPC an, das zweite Script wäre:

begin meinTestNPCTargeted
short Stark


if ( menumode == 0 )
set Stark to GetStrength
messagebox "Der NPC hatte %.0f Stark Stärkepunkte"
additem "Gold_001" 1234
sethealth 0
stopscript meinnTestNPCTargeted

endif

end

speichern, und dann im oberen Script die Semikoli (";" vor den Zeilen) wegmachen.
Stell den NPC irgendwo auf und besuch ihn im Testspiel und sprich ihn an...

Kargo-
27-02-07, 09:29
hmmm^^ also erstmal ist mein script der nicht geht nicht global sondern an einen Gegenstand gebunden.
Der Globalscript war für was anderes gedacht.
und wie ist das mit dem npc gemeint?^^ das verstehe ich nicht
aber auf jedenfall dank http://forums.ubi.com/infopop/emoticons/icon_biggrin.gif

ReneMiner
27-02-07, 21:49
Es ist so gemeint: wenn der NPC in seinem Script oder Dialog ein anderes Script startet gehen alle Befehle in dem zusätzlich gestarteten Script an den NPC (bzw. das Objekt) der das Script gestartet hat.

Dabei dran denken:
Wenn der NPC/das Objekt NICHT als persistent markiert ist sollte das targeted Script nur einen Durchlauf machen und sofort wieder stoppen, denn wenn es länger läuft und der Spieler speichert und lädt neu dann "vergisst" die Engine wer das Script gestartet hat.