Construction Set Der Scriptthread

Danke für die Blumen. :D

Wenn ich helfen kann helfe ich gerne .

Lg

Thinker

Falls es nicht klappt schau ich morgen noch mal drüber.
 
Ist mir gestern im Bett noch eingefallen ;)


begin caff_skript
short Status
short doonce
GetItemCount , "01111schluessel"
short objectcount
set objectcount to ( player -> GetItemCount , "01111schluessel" )
set ( status to 0 )
If ( status == 0 )
01skriptest->disable
if ( GetItemCount , "01111schluessel" == 1 )
01skriptest->enable
set ( status to 1 )
endif
endif
if ( doonce==0 )
if ( status==1 )
if ( GetItemCount , "01111schluessel" == 1 )
If ( getdistance player < 512 )
01skriptest->activate , player ;npc spricht player an
01skriptest->startcombat , player ; npc greift player an
set ( doonce to 1 )
endif
endif
endif
end
 
Zuletzt bearbeitet:
Ich bin gespannt, was der ScriptCompiler zu dem Script sagt :p

Code:
begin caff_skript
short doonce

IF ( menumode != 0 )
 Return
ElseIF ( doonce < 0 )
 Return
ElseIF ( doonce == 0 )
 01skriptest->disable 
 set doonce to 1
 return
EndIF

IF ( GetDisabled )
 IF ( ( player->GetItemCount "01111schluessel" )  >= 1 )
  01skriptest->enable
 EndIF
 return
EndIF

If ( ( GetDistance player )  <= 512 )
 IF ( ( player->GetItemCount "01111schluessel" )  >= 1 )
  set doonce to -1
  ForceGreeting
 EndIF
EndIF

end
Dieses Script sorgt dafür, dass:

1. die NPC einmalig disabled wird.
2. Sie wird wieder aktiviert, sobald der Spieler auch nur einmal den Schlüssel bei sich trägt, während er die Zelle betritt.
3. wenn sich der Spieler dann der NPC nähert, ohne den Schlüssel noch bei sich zu haben, passiert nichts.
4. Hat er den Schlüssel dabei und kommt der NPC zu nahe, wird er angesprochen.

Die NPC benötigt allerdings noch ein Greeting, das über die Variable doonce angesteuert wird. Es könnte ja sein, dass der Spieler diesen Schlüssel nicht dabei hat und die NPC von sich aus anspricht... dann sollte nichts passieren. Dies regelt man am einfachsten über die Greeting selbst, indem man ihr die Condition:

Local "doonce" == -1

verpaßt. Dieses Greeting wird also nur dann aktiv, wenn das Script im Frame zuvor festgestellt hat, dass der Spieler den Schlüssel im Inventar trägt und der NPC von sich aus den Dialog beginnt. Dann muß nur noch In das Result des Greeting folgendes eingetragen werden:

SetFight 100
StartCombat player
Goodbye


Das sollte es gewesen sein.

Grüße,
£exa
 
  • Like
Reaktionen: Bloodmoon
begin caff_skript
short Status
short doonce
if ( menumode != 0 )
return
; danke lexa habe ich vergessen
GetItemCount , "01111schluessel"
short objectcount
set objectcount to ( player -> GetItemCount , "01111schluessel" )
set ( status to 0 )
If ( status == 0 )
01skriptest->disable
if ( GetItemCount , "01111schluessel" == 1 )
01skriptest->enable
set ( status to 1 )
endif
endif
if ( doonce==0 )
if ( status==1 )
if ( GetItemCount , "01111schluessel" == 1 )
If ( getdistance player < 512 )
01skriptest->activate , player ; ( oder Forcegreeting )npc spricht player an
01skriptest->startcombat , player ; npc greift player an
set ( doonce to 1 )
endif
endif
endif
end


Lg

Thinker

Das rote habe ich nach lexas beitrag hinzugefügt
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Bloodmoon
Mich verwirrt jetzt die färbung. :D
soll ich das rote nicht mit aufschreiben weil es falsch ist?
und warum ist das blaue eigentlich blau? aber auf jeden fall Danke euch beiden:D

Habs ausprobiert:
http://img191.imageshack.us/content_round.php?page=done&l=img191/6735/fehlermeldung.jpg&via=mupload

begin caff_skript
short Status
short doonce
if ( menumode != 0 )
return
endif
GetItemCount , "01111schluessel"
short objectcount
set objectcount to ( player -> GetItemCount , "01111schluessel" )
set ( status to 0 )
If ( status == 0 )
01skriptest->disable
if ( GetItemCount , "01111schluessel" == 1 )
01skriptest->enable
set ( status to 1 )
endif
endif
if ( doonce==0 )
if ( status==1 )
if ( GetItemCount , "01111schluessel" == 1 )
If ( getdistance player < 512 )
01skriptest->activate , player
01skriptest->startcombat , player set ( doonce to 1 )
endif
endif
endif
endif
end


Lg

Thinker
 
Nun kommt folgende Fehlermeldung:

fehlermeldung2.jpg
 
Nun kommt folgende Fehlermeldung:

fehlermeldung2.jpg

begin caff_skript
short Status
short doonce
if ( menumode != 0 )
return
endif
GetItemCount , "01111schluessel"
short objectcount
set objectcount to ( player -> GetItemCount , "01111schluessel" )
set status to 0
If ( status == 0 )
01skriptest->disable
if ( GetItemCount , "01111schluessel" == 1 )
01skriptest->enable
set status to 1
endif
endif
if ( doonce==0 )
if ( status==1 )
if ( GetItemCount , "01111schluessel" == 1 )
If ( getdistance player < 512 )
01skriptest->activate , player
01skriptest->startcombat , player
set doonce to 1
endif
endif
endif
endif
end


Lg

Thinker

PS: warscheinlich hatte ich einen Impuls Klammern zu schreiben ( kommt bei mir oft vor ;) )
 
Im CS kommt keine Fehlermeldung aber im Spiel ist der Typ von anfang an da und steht da. Wenn ich dann den Schlüssel nehme spricht der mich auch nicht an. Ist also so wie ohne Script. :|
 
hey eek!
Es klappt. Danke sehr :)
Ich bin euch beiden wirklich sehr dankbar :D
ach herrje. jetzt bin ich aber aufgeregt XD
Das Script speicher ich auch gleich mal seperat ab. Man weiß ja nicht wann man es nochmal benötigt :D.
Vielen dank.
MFG
Bloodmoon ^^
 
Gude,

Ich suche ein paar Scripte ich hoffe ihr könnt mir dabei helfen

Also der 1. script denn ich brauche ist für eine Pflanze
Der Script soll dafür sorgen das die Pflanze nur zur einer Bestimmten zeit zu sehen ist. Dazu möchte ich noch fragen ob es möglich sei das so zu Scripten
wie bei ein Fahrstuhl? Also das die Pflanze so 5Uhr morgens im Boden verschwindet und um 22Uhr Abend wider hochkommt. da mit es realer aus sieht. Es sieht sonnst komisch aus wen man auf einer Wiese ist wo erst nichts ist und plötzlich stehen um einen herum Pflanzen^^

Der 2. Script soll dafür sorgen das eine Kreatur sich nur von EINER bestimmten Waffe töten lässt

Der 3. Script brauche ich zum 2. und zwar das die Kreatur niemanden angreift und sich nicht bewegt (Es sei es hielft schon wen man ihn eine Fahichkeit giebt das er sich selbst dauerhaft lähmen tut)

Ich hoffe das es nciht zu schwer wird
 
Gude,

Ich suche ein paar Scripte ich hoffe ihr könnt mir dabei helfen

Also der 1. script denn ich brauche ist für eine Pflanze
Der Script soll dafür sorgen das die Pflanze nur zur einer Bestimmten zeit zu sehen ist. Dazu möchte ich noch fragen ob es möglich sei das so zu Scripten
wie bei ein Fahrstuhl? Also das die Pflanze so 5Uhr morgens im Boden verschwindet und um 22Uhr Abend wider hochkommt. da mit es realer aus sieht. Es sieht sonnst komisch aus wen man auf einer Wiese ist wo erst nichts ist und plötzlich stehen um einen herum Pflanzen^^

Der 2. Script soll dafür sorgen das eine Kreatur sich nur von EINER bestimmten Waffe töten lässt

Der 3. Script brauche ich zum 2. und zwar das die Kreatur niemanden angreift und sich nicht bewegt (Es sei es hielft schon wen man ihn eine Fahichkeit giebt das er sich selbst dauerhaft lähmen tut)

Ich hoffe das es nciht zu schwer wird


Also für deine Fahrstuhlblumen kannst du sowas in der Art versuchen:

Code:
If ( GameHour < 5 )
    if ( GetPos Z >= 300 )
        MoveWorld z, -0.1 ; Blume geht runter
    else
        disable Disable wegen performance gründen und um grafikfehler zu vermeiden (bei schiefen ebenen bspw)
    endif
elseif ( GameHour >= 17)
    enable
    if ( GetPos Z < 320 )
        MoveWorld z, 0.1 ; Blume geht hoch
    else
        enable Blume wird enabled sollte das noch nicht getan worden sein.
    endif
endif
Hab das jetzt aus dem Kopf raus aufgeschrieben. sind also vielleicht syntaxfehler drin.



zu 2.

da fallen mir mehrere lösungen ein.

du könntest ne globale variable pc-has-swordxyz auf 1 stellen sobald der PC diese bestimmte waffe equipped, else auf 0

auf dem tier-skript setzt du dann eine abfrage dieser variable bei OnPCHit und wenn
if(pc-has-swordxyz != 1) {
sethealth - 1000; so in der art
}
else modhealth = 1000 (oder modcurrenthealth. weiss nit mehr)

das müsst ich erst mal ausprobieren XD

für 3. da kannste nen auszug von nem Mannquin script nehmen. bspw:

Code:
begin tierskript

SkipAnim; wichtig da hier das tier zum stillstand gebracht wird

if ( menumode == 1 )
return
endif

if (onactivate == 1)
return
endif

end tierskript
keine garantie auf funktionalität XD

aber vielleicht hilfts dir ja etwas ^^
 
  • Like
Reaktionen: Houdini
Trotzdem danke bei Gelegenheit teste ich das. :)
Wo kann ich bei der Blume im script ein stellen um welche uhrzeiten es sich nach oben und unten bewegen soll?
 
Trotzdem danke bei Gelegenheit teste ich das. :)
Wo kann ich bei der Blume im script ein stellen um welche uhrzeiten es sich nach oben und unten bewegen soll?


Kein Problem ;-)

Die Abfrage steht hier drin: If ( GameHour < 5 ) Wenn die Uhrzeit kleiner als 5 uhr morgens ist, dann führe das aus.


If ( GameHour >= 17) wenn es nach 5 uhr abends ist dann führe das aus.

Du kannst nur mit grösser oder kleiner als arbeiten da die Variable Gamehour jeden Frame geändert wird und nicht immer genau 5 oder so ist, sondenr mal 5.245 oder 4.987 und somit eine genaue abfrage if gamehour == 5 nicht funktionieren würde.
 
  • Like
Reaktionen: Houdini
Gut danke^^
Ich brauch denn Script für ne Pflanze die nur nachts zu sehen ist und da ist dieser Script ganz nützlich^^

EDIT: So ich habe denn Script getestet. Die Pflanze geht schön langsam hoch aber leider nicht mehr runter^^


Edit: So ich habe noch ne Frage kann mir vielleicht einer diesen Script einstelllen?
Es ist ein script für ein Activator der ein mit Feuerbällen beschiesen tut aber er ballert ununterbrochen
es währe besser wen es alle 2 bis 3 Sekunden ein Feuerball auf ein wirft.
begin Schussturm_Feuer

short istriggered

set istriggered to "shrine_trigger".triggered

if ( istriggered == 0 )
cast "feuerS" player
set istriggered to istriggered - 1
set "shrine_trigger".triggered to istriggered
endif

end
 
Zuletzt bearbeitet:
Ich habe eine neue Fehlermeldung entdeckt. :)

Eigentlich wollte ich mit GetWaterLevel rausbekommen, ob eine Interiorzelle Wasser besitzt. Leider liefert mir dieses Script , wenn es in einer Zelle ohne Wasser ausgeführt wird einen "StackUnderflowError", was auch immer der heißen soll. Führt man GetWaterLevel in der Konsole aus, wird einfach 0 zurückgegeben. Hat hierfür jemand eine Erklärung?
 
StackUnderflow heißt dass der Prozess (Prozessor) auf Teufel komm raus daten holt wo keine sind (jede Zahl wäre ja auch eine "falsche" Antwort), leider kann man in MW halt keine errors abfangen.


EDIT: Nur so ein Idee (für die ich zum ausprobeiren zu faul bin):
Man könnte bei -10.000 (oder sonst irgend eine Tiefe in der keiner baut) zwei dummies platzieren und den einen einen Target-Cast auf den anderen machen lasse. Wenn keine wasser da ist, trifft der cast, und sonst nicht. Da sich die Tatsache ob Wasser überhaupt da ist nicht ändert, muss man das nur bei CellChange tun.
 
Zuletzt bearbeitet: