Autor |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Eskortieren - Scriptproblem |  |
Hi
Ich hab schon wieder ein Problem bei einem Script.
Folgendes Script verwende ich, damit ein NPC den PC begleitet, dabei kommt es irgendwann zu einem Kampf, sobald dieser Vorbei ist, kommt der Tagebucheintrag br_anschlag 50 und der NPC soll den PC nicht mehr weiter folgen. Dazu verwende ich diesen Befehl, aber aus irgend einem Grund funktioniert es nicht. Obwohl der Eintrag korrekt kommt, folgt der NPC dem PC weiter, kann mir jemand sagen warum?
Dieser Teil bestimmt nur wann der NPC auftaucht
Da ich den NPC noch benötige soll er nicht sterben sondern nur zusammenbrechen.
Begin br_beleg_begleitung
short noLore
short followNow
short distanceCheck
short br_beleg_talk
float timer
if ( cellchanged == 1 )
..if ( GetJournalindex br_erz < 80 )
...."br_beleg_1"->disable
....return
..endif
endif
if ( cellchanged == 1 )
..if ( GetJournalindex br_erz > 85 )
...."br_beleg_1"->disable
....return
..endif
endif
if ( cellchanged == 1 )
..if ( GetJournalindex br_erz == 80 )
...."br_beleg_1"->enable
....endif
endif
if ( MenuMode == 1 )
..Return
endif
if ( "br_beleg_1"->Gethealth <= 20 )
.."br_beleg_1"->SetHealth 265
.."br_beleg_1"->SetFatigue 0
endif
if ( GetJournalIndex br_anschlag >= 50 )
..set followNow to 0
..AiWander 256 0 0 40 20 20 0 0 0 0 0 0
endif
if ( GetCurrentAiPackage == 3 )
..set followNow to 1
..SetHello 0
..set br_beleg_talk to 0
..if ( timer < 2 )
....set timer to ( timer + GetSecondsPassed )
....return
..endif
..if ( GetJournalIndex br_anschlag >= 50)
....set followNow to 0
....AiWander 256 0 0 40 20 20 0 0 0 0 0 0
....SetHello 30
..endif
..if ( GetDistance Player < NPCVoiceDistance )
....if ( GetDistance Player < 500 )
......set distanceCheck to 0
....endif
....set timer to 0
....return
..endif
..if ( distanceCheck == 0 )
....Say "VoDMFlw_DM001.mp3" "Wo wollt Ihr hin?"
....set distanceCheck to 1
..endif
else
..set followNow to 0
endif
End
Ich habe das Script in nahezu unveränderter Form schon wo anders benutzt , dort funktioniert es problemlos, der Unterschied ist, daß ich dort GetDistance zu einem Activator als Auslöser für das Beenden der Begleitung verwende und nicht GetJournalIndex.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
02.05.2003, 08:14 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Hat sich erledigt! Ich hab's hinbekommen, funktioniert jetzt wie geplant.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
02.05.2003, 15:40 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9269
 |
|
Wäre dann natürlich von Vorteil, du würdest dein neuerworbenes wissen teilen: Wo war der Fehler?
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
02.05.2003, 21:20 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Wo der Fehler war? Jetzt wird's peinlich. Um ehrlich zu sein, ich weiß es auch nicht. Nach dem ich alles, was mir logisch erschienen ist ausprobiert hatte, wollte ich das Script nur verkleiner, damit es übersichtlicher wird. Dazu habe ich alle Kommentare, die ich hier nicht angeführt habe, entfernt und außerdem folgenden Absatz gelöscht:
if ( GetJournalIndex br_anschlag >= 50 )
..set followNow to 0
..AiWander 256 0 0 40 20 20 0 0 0 0 0 0
endif
Da er ja weiter unten, in leicht unterschiedlicher Form nocheinmal vorkommt. Und siehe da auf einmal funktioniert es.
Ich glaube nicht, daß es an diesem Absatz gelegen hat. Die einzige Möglichkeit, die ich mir vorstellen kann, ist daß bei einem der Kommentare der ; gefehlt hat und es deswegen nicht funktioniert hat. Aber wie gesagt so wirklich sicher bin ich mir da auch nicht.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
04.05.2003, 15:59 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Ich schreib einfach hier weiter, auch wenn es sich um ein ganz anderes Problem handelt:
Ich wollte eine Kreatur erstellen, die sich nur von einer bestimmten waffe töten läßt, also habe ich auf die Kreatur ein Script mit folgenden Zeilen gelegt:
if ( onPCEquip "br_ritualdolch" == 1 )
..StopScript br_gander_script
endif
if ( onPCEquip "br_ritualdolch" == 0 )
.."br_gander"->SetHealth 100
endif
Aber aus ein, mir nicht ganz ersichtlichen Grund funktioniert es nicht. Kann es sein, daß der Befehl OnPCEquip immer auf dem Gegenstand liegen muß auf den er sich bezieht? Fehlermeldung erhalte ich nämlich keine, es funktioniert nur einfach nicht. In der Hilfe habe auch keine Informationen zu dem Befehl gefunden.
Wenn ich im Spiel die Variablen überprüfe erhalte ich onPCEquip =0, egal welche Waffe verwendet wird, es wird also die "tödliche" Waffe nicht erkannt.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
27.05.2003, 12:30 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9269
 |
|
Bestätigt: OnPCEquip ist gar kein Befehl, sondern eine Variable, die das System automatisch setzt, falls sie im script auf dem Gegenstand vorkommt. Einfacher wär es übrigens, du schaust Dir das script auf lorkans Herz an, da ist auch eine Abfrage darin, ob sunder oder Keening das teil getroffen haben! weis den befehl grade icht auswendig... hitonme waffenid? irgend so was....
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
27.05.2003, 12:45 |
|
chris_tm
Bard
  
Dabei seit: Februar 2003
Geschlecht: 
Herkunft: München
Beiträge: 37
 |
|
Um nochmal über OnPCEquip zu sprechen:
Könnte das funktionieren? :
short check
set check to br_ritualdolch.OnPCEquip
if ( irgendwas == X )
.. if ( check == 1 )
.. .. ..StopScript br_gander_script
.. .. ..set irgendwas to Y
.. elseif ( check == 0 )
.. .. .."br_gander"->SetHealth 100
.. .. ..set irgendwas to Y
.. .. endif
endif
Edit:
Obwohl...eigentlich ne blöde Frage weil wenn an br_gander kein Script hängt wirds wahrscheinlich ne Fehlermeldung ala "OnPCEquip not found on br_gander" geben.
__________________
Meine Site
Dieser Beitrag wurde von chris_tm am 27.05.2003, 13:07 Uhr editiert.
|
|
27.05.2003, 12:57 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9269
 |
|
Ja, die wird es geben - nimm bitte die hitonme-sache! Funktioniert prima, wird auch im PMM-Mod verwendet und hat keinerlei fehler verursacht!
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
27.05.2003, 13:27 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Ich hab's mit HitOnMe versucht, aber scheinbar hab ich dich nicht richtig verstanden:
if ( HitOnMe "br_ritualdolch" == 1 )
..StopScript br_gander_script
endif
if ( HitOnMe "br_ritualdolch" == 0 )
.."br_gander"->SetHealth 100
endif
Jetzt läßt sich das Ding überhaupt nicht mehr killen, ich vermute das liegt daran, das die Kreatur bei jedem Durchlauf in dem kein Treffer erfolgt geheilt wird. Aber wie kann ich das verhindern? Muß ich da parallel mit OnPCEquipt arbeiten, oder gibt es einen einfacheren Weg?
Achja, das Script für Lokans Herz hab ich mir angeschaut, aber um ganz ehrlich zu sein blick' ich da nicht durch.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
27.05.2003, 18:28 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9269
 |
|
Ja, Du hast recht, und beim Herzscript ist die unverwundbarkeit ja auch absicht.. ich sehe 2 Lösungsmöglichkeiten:
a) Du ziehst bei jedem Treffer mit der speziellen waffe einen gewissen schaden ab und stellst die Gesundheit mit
sethealth maxgesundheit
modcurrenthealth -Trefferschaden*trefferanzahl
ein
b) Zwischenspeichern der gesundheit:
if ( HitOnMe "br_ritualdolch" == 1 )
.. set merkgesundheit to gethealth
.. set merkGesundheit to maxhealth - merkgesundheit
else
.. sethealth maxgesundheit
.. modcurrenthealth -merkgesundheit
endif
Letzteres in der hoffnung, dass der verursachte schaden in dem Frame abgezogen wird, in dem auch Hitonme ausgelöst wird. Damit keien Elementarschäden dazwischenpfuschen solltest Du auf den Gegner entsprechende Resistenzfähigkeiten legen!
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
27.05.2003, 22:12 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Zitat: Letzteres in der hoffnung, dass der verursachte schaden in dem Frame abgezogen wird, in dem auch Hitonme ausgelöst wird.
Tja, scheinbar leider nicht . Zumindest hat es bei mir nicht funktioniert. Aber durch deine Vorschläge ist es mir schließlich (um 3 in der Nacht, im Halbkoma ) gelungen eine Version zu basteln die funktioniert:
if ( gethealth > 0 )
..if ( HitOnMe "br_ritualdolch" == 1 )
....set br_gandertreffer to ( br_gandertreffer + 1 )
....return
..else
....set br_ganderhealth to (-10*br_gandertreffer)
....sethealth 200
....modhealth br_ganderhealth
..endif
endif
Der einzige Nachteil dabei: Die Health-Anzeige der Kreatur ist permanent auf max. und macht bei einem Treffer nur einen kleinen Zucker, bis das Ding schließlich unerwartet tod umfällt, aber damit kann ich leben.
Ach ja, der Befehl sethealth läßt sich nicht mit einer Variable verwenden, oder? Ich hab das nämlich einige Male ausprobiert und im Spiel immer einen Syntax Error erhalten.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
28.05.2003, 17:47 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9269
 |
|
War noch nie ein guter trockenschwimmer beim scripten - kann aber nicht alles erst testen, was ich poste...
Das mit der lebensanzeige liegt aber daran, dass Du mit ModHealth die Maximalgesundheit manipulierst - ersetze das durch ModCurrentHealth, dann sollte die lebensanzeige funktionieren...
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
28.05.2003, 20:10 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Zitat: War noch nie ein guter trockenschwimmer beim scripten - kann aber nicht alles erst testen, was ich poste...
Um Himmels willen, das sollte keinesfalls ein Vorwurf sein. Im Gegenteil, hab beim herum probieren wieder einiges gelernt. Kenn' jetzt einige neue Befehle, die ich vielleicht einmal brauchen kann .
Übrigens mit ModCurrentHealth hattest du recht, jetzt funktioniert's perfekt.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
28.05.2003, 22:14 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Okay, wo ich gerade so schön im "ich-hab-keine-Ahnung-vom scripten-aber probiers-trotzdem" bin, mach ich gleich weiter:
ich wollte einen Schalter erzeugen, der mittels eines Pfeilschusses betätigt werden kann (ich weiß schon, ist ein abegnutztes Klische) und hab dazu einen entsprechenden Activator mit einem Script versehen, daß unter anderem folgende Zeile enthält:
if ( "schalter_7"->onpchitme == 1 )
Aber aus irgendeinen Grund funktioniert das ganze nicht. Funktioniert der Befehl nur mit NPC's und Kreaturen?
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
29.05.2003, 17:54 |
|
Garak
Admin
     

Dabei seit: Juli 2002
Geschlecht: 
Herkunft: Cardassia Prime
Beiträge: 9269
 |
|
Jep, nur mit actors! Einzuige möglichkeit, die mir bekannt ist: Neue (nicht spielbare) rasse erstellen deren einziger Bodypart Dein schalter ist - am besten als kopf, dann kannst Du die rasse öfter für so was benutzen... dann NPC mit dauerhafter paralyse drauf sowie ein stopcombat pro frame - damit die kampfmusik wieder aufhört... ist allerdings furchtbar schwer, das teil dann zu positionieren...
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen 
|
|
29.05.2003, 19:07 |
|
Hephaistos
Verschollen


Dabei seit: Februar 2003
Geschlecht: 
Herkunft: Wien
Beiträge: 2102
 |
|
Dann werd ich das ganze wohl besser bleiben lassen. War sowieso keine besonders gute Idee.
Trotzdem, Vielen Dank für deine Hilfe.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
29.05.2003, 20:32 |
|
|