Construction Set Der Scriptthread

Ok, das gleiche wollte ich auch. Die Musikdatei die ich nutzen will heißt Greensleeves_ und befindet sich im Music Ordner. Gespielt soll die Music in dem Pu ... in dem Freudenhaus in Suran ^^ Der Script sieht bei mir gerade so aus:

Code:
Begin Greensleeves

if ( GetPCCell "Suran, Deseles Haus der irdischen Freuden" == 1 )
    StreamMusic, "Greensleeves_"
endif

end Greensleeves
Ich denke ich aheb alles richtig gemacht, doch im Spiel ist rein gar keine Veränderung zu spüren :(

Und ja, ich hab die Lautsprecher an, und auch nicht die Musik ausgestellt ^^

Was dieses Problem angeht: Hast du die Dateiendung hinzugefügt? (StreamMusic, "Greensleeves.mp3")Ohne Dateiendung wird dir StreamMusic nämlich keine Musik abspielen. :-D auch funktionieren nur WAV, MP3 und MIDI, falls du ggbfalls WMA nutzen solltest... Die gehn nämlich auch nicht.

Bzw, wie wird das Skript aufgerufen?
 
Weiterhin gibt es wie £exa neulich gepostet hat eine Beschränkung in der Qualität. Die Stücke dürfen nur Mono sein und eine Bitrate von 64 kBit.
 
Scriptproblem

Hallo,
ich wollte einen Nebel machen der rauf und runtergeht und wenn man den berührt, man eisschaden bekomment:

begin todesnebel

short up

if ( menumode == 1 )
return
endif

if ( up == 0 )
;runter
MoveWorld Z -50
else
;rauf
MoveWorld Z 50
endif

if ( (GetPos, Z) < 13924.653)
;zu weit unten
set up to 1
endif

if ( (GetPos, Z) > 15011.815)
;zu weit oben
set up to 0
endif


if ( GetDistance, player <= 10 )
if ( player->GetSpell, "spezialfrost" == 0 )
player->AddSpell, "spezialfrost"
endif
else
if ( player->GetSpell, "spezialfrost" == 1 )
player->RemoveSpell , "spezialfrost"
endif
endif

end todesnebel

das der nebel sich auf und ab bewegt funktioniert, aber dass man schaden bekommt nicht. Der Zauber "Spezialfrost" ist auch ein Fluch, müsste doch eig gehn oda???
Ich hoffe ihr könnt mir helfen und mir sagen wo das problem liegt.
Danke!
 
Zuletzt bearbeitet:
~Beitrag verschoben~

Das Problem liegt hier:
if ( GetDistance, player <= 10 )
if ( player->GetSpell, "spezialfrost" == 0 )
player->AddSpell, "spezialfrost"
endif
else
if ( player->GetSpell, "spezialfrost" == 1 )
player->RemoveSpell , "spezialfrost"
endif
endif
Du entziehst dem Spieler praktisch, sobald er den Fluch hat, im nächsten Frame den Fluch sofort wieder, der Schaden wird also nicht berechnet.
Du hast nun 3 Möglichkeiten:
1) Du machst den Damage indem du direkt die HP veränderst. Hat den Vorteil, dass man dem mit zB Frost-Resi nicht widerstehen kann.
2) Du arbeitest mit nem Timer nach dem adden des Fluchs
3) Du gehst über die Entfernung, sodass der Fluch erst wieder vom Spieler genommen wird, wenn er zB weiter als 10 vom Nebel entfernt ist :)
mfg erc
 
  • Like
Reaktionen: Illidan_00
Ein weiteres Problem ist der Abstand. 10 Editoreinheiten sind nicht 10 Fuß, die man von den Zaubern kennt. Allein der Spieler ist etwa 85 Einheiten breit. Also muss das Zentrum des Spielers quasi genau mit dem Zentrum des Nebels übereinstimmen.
 
  • Like
Reaktionen: Illidan_00
Danke für die Hilfe, hat auch teils geklappt.
ich habe den script nun so

begin todesnebel

short up
float tempDamage
float timer

float myX
float myY
float myZ

float playerX
float playerY
float playerZ

float squaredDistance

if ( menumode == 1 )
return
endif

if ( up == 0 )
;runter
MoveWorld Z -50
else
;rauf
MoveWorld Z 50
endif

if ( (GetPos, Z) < 13924.653)
;zu weit unten
set up to 1
endif

if ( (GetPos, Z) > 15011.815)
;zu weit oben
set up to 0
endif

; nun entfernung. manuell 8[
set myX to GetPos, X
set myY to GetPos, Y
set myZ to GetPos, Z

set myX to (myX-(player->GetPos, X))
set myY to (myY-(player->GetPos, Y))
set myZ to (myZ-(player->GetPos, Z))

set myX to myX*myX
set myY to myY*myY
set myZ to myZ*myZ


set squaredDistance to myX+myY+myZ

if ( squaredDistance <= 160000 ) ;das ist 400 * 400. das muss so sein
set tempDamage to (timer * -10)
player->ModHealth, tempDamage
endif

set timer to GetSecondsPassed

end todesnebel

aber da kommt immer ein fehler bei line 44 dass er GetPos nicht kennt...
also dasda is geht iwie nich

set myX to (myX-(player->GetPos, X))
set myY to (myY-(player->GetPos, Y))
set myZ to (myZ-(player->GetPos, Z))
 
set myX to (myX-(player->GetPos, X))
set myY to (myY-(player->GetPos, Y))
set myZ to (myZ-(player->GetPos, Z))
Wundert mich nicht, der Scriptcompiler kann bei sowas manchmal zickig sein - schreib es so:

set myX to ( myX - ( player->GetPos X ) )

Das sollte eigentlich funktionieren. Wenn nicht, mußt du die Entfernung des Spielers erst in einer TempVariable puffern.
 
  • Like
Reaktionen: Illidan_00
hm, jez kommt irgend ein syntax fehler und die nebel machen garnichts, weder bewegen noch schaden
 
Zuletzt bearbeitet:
Dann geht das nicht in einer Befehlszeile, du muß diese Operation in zwei Zeilen packen. Du kannst squaredDistance dafür mißbrauchen, muß man ja keine eigene Variable für machen. GetPos ist halt etwas eigenwilig:

set myX to GetPos, X
set squaredDistance to ( player->GetPos X )
set myX to ( myX - squaredDistance )

Das sollte gehen.
 
  • Like
Reaktionen: Illidan_00
Dann geht das nicht in einer Befehlszeile, du muß diese Operation in zwei Zeilen packen. Du kannst squaredDistance dafür mißbrauchen, muß man ja keine eigene Variable für machen. GetPos ist halt etwas eigenwilig:

set myX to GetPos, X
set squaredDistance to ( player->GetPos X )
set myX to ( myX - squaredDistance )

Das sollte gehen.
ach sch.... GetPos, X
 
wenn ich will, das etwas erst in der dritten ausbaustufe der festung erscheint, brauche ich dann die exteriors nur mit dem dazugehörigen script zu belegen?

ich hätte tel uvirith halt gerne etwas grüner und größer, aber nichts so riesiges wie green uvirith und nichts, was vorher schon steht und nix, wo ich noch ne quest machen muß... kann man so scripts auch auf bäume legen?
 
Hallo Leute. :)
Ich hab mal eine Frage.
Ich würd gerne wissen ob es möglich ist, dass ich in ein Portal gehe, einen Schlüssel nehme, wieder durch das Portal zurück gehe, dann steht da ein NPC der da vorher nicht stand, er spricht mich an und sagt mir etwas wie:"Geb mir den Schlüssel" und dann greift er mich an. Ich hab hier mal das Script nur macht er das bisher immer wenn ich ihm zunah komme und nicht wenn ich den schlüssel nehme:

"Begin caff_disablescript
Short status
If ( status == 0 )
NPC1->disable
Set status to 1
endif
end

Begin caff_kampfscript
Short status
If ( status == 0 )
If ( getdistance player < 512 )
NPC1->enable
Forcegreeting
Set status to 1
Endif
Setfight 100
Startcombat player
Endif
end"

NPC1 steht für die Charakterid des NPC's.


Danke für alle (sinnvollen/nützlichen) Antworten. :D
MFG
Bloodmoon
 
Hallo Leute. :)
Ich hab mal eine Frage.
Ich würd gerne wissen ob es möglich ist, dass ich in ein Portal gehe, einen Schlüssel nehme, wieder durch das Portal zurück gehe, dann steht da ein NPC der da vorher nicht stand, er spricht mich an und sagt mir etwas wie:"Geb mir den Schlüssel" und dann greift er mich an. Ich hab hier mal das Script nur macht er das bisher immer wenn ich ihm zunah komme und nicht wenn ich den schlüssel nehme:

"Begin caff_disablescript
Short status
If ( status == 0 )
NPC1->disable
Set status to 1
endif
end

Begin caff_kampfscript
Short status
If ( status == 0 )
If ( getdistance player < 512 )
NPC1->enable
Forcegreeting
Set status to 1
Endif
Setfight 100
Startcombat player
Endif
end"

NPC1 steht für die Charakterid des NPC's.


Danke für alle (sinnvollen/nützlichen) Antworten. :D
MFG
Bloodmoon


mach das doch mit einem Befehl, der Überprüft, ob der Schlüssel im Inventar des Spielers vorhanden ist..

Lg

Thinker
 
Kannst du mir den sagen? :D

Gerne , immer doch ;)

der Befehl lautet:

------------

GetItemCount , "ObjectID"

short objectcount
set objectcount to ( player -> GetiIemCount , "Object_ID" )

if ( GetItemCount , "Object_ID" == 1

endif

------------

-"Object_ID" die ID deines SChlüssels,
-statt "player hättest du auch irgenteine ID von einem NPC eingeben können
-groß und kleinschreibung ist nur in der ID wichtig
-statt "==" kannst du auch <=; >=; != ; etc. eingeben
-statt "1" kannst du jede psoitive Zahl eingeben ( auch 0 ) ;)
Lg

Thinker
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Bloodmoon
Vieelen dank :)
Wenn ich aber statt player die ID eines NPC's eingebe erscheint der typ doch erst wenn dieser NPC den gegenstand aufnimmt oder?
Und öhm. Wo muss ich das eintragen? Zusammen mit den beiden anderen Script's?
Und wenn ja muss es oben oder unten hin?
Und brauch ich nicht auch ein Begin "Name des Scriptes" und ein end?
 
Zuletzt bearbeitet:
Gerne , immer doch ;)

der Befehl lautet:

------------

GetItemCount , "ObjectID"

short objectcount
set objectcount to ( player -> GetiIemCount , "Object_ID" )

if ( GetItemCount , "Object_ID" == 1
.

endif

------------

-"Object_ID" die ID deines SChlüssels,
-statt "player hättest du auch irgenteine ID von einem NPC eingeben können
-groß und kleinschreibung ist nur in der ID wichtig
-statt "==" kannst du auch <=; >=; != ; etc. eingeben
-statt "1" kannst du jede psoitive Zahl eingeben ( auch 0 ) ;)
Lg

Thinker

Das war nur der Skriptbefehl für das überprüfen des Vorhandenseins im Inventar ;)

Vieelen dank :)
Wenn ich aber statt player die ID eines NPC's eingebe erscheint der typ doch erst wenn dieser NPC den gegenstand aufnimmt oder?
Und öhm. Wo muss ich das eintragen? Zusammen mit den beiden anderen Script's?
Und wenn ja muss es oben oder unten hin?
Und brauch ich nicht auch ein Begin "Name des Scriptes" und ein end?

Wenn du die NPC ID eingibst, wird das Vorhandensein im Inventar des NPCs überprüfen, nict in dem des Spielers .

Du kannst den Skript so aufbauen, dass der NPC früher erscheint, aber erst wenn du den Schlüssel nimmst dich angreift .

Das ist ein if - Bedingung , benutzt du wie alle anderen if Bedingungen;)

------------

begin "der_Name_dieses_Skripts"

GetItemCount , "ObjectID"

short objectcount
set objectcount to ( player -> GetiIemCount , "Object_ID" )

; das lässt den Computer zählen wieviele Objekte der genannten ID der Spieler in seinem Inventar hat

if ( GetItemCount , "Object_ID" == 1


; hier setzt du die Bedingung wieviele von den Objekten vorhanden ( oder nicht ) sein müssen, damit der Befehl nach den Bedingungen ausgefürt wird

; hier kommen weiter Bedingungen hin ( falls du welche hast )


;bis dann schließlich hier der Befehl kommt, was der Skript denn schließlich , falls er die Bedingungen von oben erfüllt macht ..

end ; kommt GANZ am ende

Lg

Thinker
 
Ich hab das jetzt grad mal ausprobiert, sodass er mich angreift nachdem ich den schlüssel nehme und durchs portal zurück gehe. Aber der erscheint gar nicht erst wieder.
Hier das Script:

Begin caff_disablescript
Short status
If ( status == 0 )
01skriptest->disable
Set status to 1
endif
GetItemCount , "01111schluessel"
short objectcount
set objectcount to ( player -> GetItemCount , "01111schluessel" )
if ( GetItemCount , "01111schluessel" == 1 )
endif
end

Begin caff_kampfscript
Short status
If ( status == 1 )
If ( getdistance player < 512 )
01skriptest->enable
Forcegreeting
Set status to 1
Endif
Setfight 100
Startcombat player
Endif
end
 
Zuletzt bearbeitet:
Ich hab das jetzt grad mal ausprobiert, sodass er mich angreift nachdem ich den schlüssel nehme und durchs portal zurück gehe. Aber der erscheint gar nicht erst wieder.
Hier das Script:

Begin caff_disablescript
Short status
If ( status == 0 )
01skriptest->disable
Set status to 1
endif
GetItemCount , "01111schluessel"
short objectcount
set objectcount to ( player -> GetItemCount , "01111schluessel" )
if ( GetItemCount , "01111schluessel" == 1 )
endif
end

Begin caff_kampfscript
Short status
If ( status == 1 )
If ( getdistance player < 512 )
01skriptest->enable
Forcegreeting
Set status to 1
Endif
Setfight 100
Startcombat player
Endif
end

----------

Ich schreib einfach mal - bin jetzt unter Zeitdruck, muss noch weg..

Begin caff_skript
Short status
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 ( status==1 )
if ( GetItemCount , "01111schluessel" == 1 )
If ( getdistance player < 512 )
01skriptest->activate , player ;npc spricht player an
01skriptest->startcombat , player ; npc greift player an
endif
endif
endif
end

; leg den skript auf deinen npc
--------------

warscheinlich sind viele fehler drin :D, sorry ich musste mich beeilen.
Wenn dus mal getestet hast , unds nicht klappt können dir vielleicht andere helfen, ich kann dann morgen nochmal drübergucken .

Lg

Thinker
 
  • Like
Reaktionen: Bloodmoon