Construction Set Der Scriptthread

Guten Morgen (bin gerade erst aufgestanden hust),

für meine Mod muss sich der Spieler von seinem Inventar verabschieden, das heißt er kommt nur durch eine Tür wenn er nur noch unter 3 kg bei sich trägt. Ich finde dazu kein Script, gibt es vielleicht einen Befehl der (wie bei den gestohlenen Sachen, die in einer Truhe landen wenn man erwischt wird) abfrägt, wieviel Kilo man im Inventar trägt?
 
Guten Morgen (bin gerade erst aufgestanden hust),

für meine Mod muss sich der Spieler von seinem Inventar verabschieden, das heißt er kommt nur durch eine Tür wenn er nur noch unter 3 kg bei sich trägt. Ich finde dazu kein Script, gibt es vielleicht einen Befehl der (wie bei den gestohlenen Sachen, die in einer Truhe landen wenn man erwischt wird) abfrägt, wieviel Kilo man im Inventar trägt?

Ja, dazu gibt es eine äußerst komplizierte Möglichkeit. Du analysierst die Stärke des Spielers, schließt Last und Federeffekte aus und fügst ihm modular spezielle Lastzauber hinzu, die ihn bis auf 1 Kilo belasten. Die Zauber sind natürlich Fähigkeiten mit Werten der 2er-Potenzen. Das überprüfst du alle paar Sekunden und aktualisierst ggf. die Lastzauber (wenn sich die Stärke ändert). Jetzt kann sich der Spieler nur noch bewegen, wenn er weniger als 1 Kilo bei sich trägt.

Die Tür, durch die er gehen muss, muss natürlich hinter einer Ecke liegen, so dass er auch tatsächlich laufen muss, um sie zu erreichen.
 
:eek: ich glaub das pack ich nicht, auch da ich nicht weiß wie das mit den federzaubern des spielers funktionieren soll. Trotzdem danke für die Antwort, ich denke dass ich das ganze wohl irgendwie umgehen sollte.
 
Hallo
-Ich brauche ein script( nur als Schablone), womit man ein Item erst ab einer bestimmten Menge einsetzen kann.
-Das Script werde ich wohl öfters verändern.
-Es wird wohl am ehesten an Werkbänke, Spinnräder, Schlachttische, Ambosse
et cetera angehängt.

Mfg und danke im vorraus
Ich
 
:eek: ich glaub das pack ich nicht, auch da ich nicht weiß wie das mit den federzaubern des spielers funktionieren soll. Trotzdem danke für die Antwort, ich denke dass ich das ganze wohl irgendwie umgehen sollte.

So hier ein Script aus einem (leider gestorbenen) Modprojekt von mir. Die Zauber haben als Effektstärke immer den angegebenen Wert.

Code:
begin pa_inventar_ablegen_script

float nochkraft
float timer
short state

if ( state == 0 )

Player->RemoveEffects 7
Player->RemoveEffects 8
set nochkraft to Player-> GetStrength
set nochkraft to nochkraft * 5

if ( nochkraft >= 4096 )
	Player->AddSpell "pa_last4096"
	set nochkraft to nochkraft - 4096
endif

if ( nochkraft >= 2048 )
	Player->AddSpell "pa_last2048"
	set nochkraft to nochkraft - 2048
endif

if ( nochkraft >= 1024 )
	Player->AddSpell "pa_last1024"
	set nochkraft to nochkraft - 1024
endif

if ( nochkraft >= 512 )
	Player->AddSpell "pa_last512"
	set nochkraft to nochkraft - 512
endif

if ( nochkraft >= 256 )
	Player->AddSpell "pa_last256"
	set nochkraft to nochkraft - 256
endif

if ( nochkraft >= 128 )
	Player->AddSpell "pa_last128"
	set nochkraft to nochkraft - 128
endif

if ( nochkraft >= 64 )
	Player->AddSpell "pa_last64"
	set nochkraft to nochkraft - 64
endif

if ( nochkraft >= 32 )
	Player->AddSpell "pa_last32"
	set nochkraft to nochkraft - 32
endif

if ( nochkraft >= 16 )
	Player->AddSpell "pa_last16"
	set nochkraft to nochkraft - 16
endif

if ( nochkraft >= 8 )
	Player->AddSpell "pa_last8"
	set nochkraft to nochkraft - 8
endif

if ( nochkraft >= 4 )
	Player->AddSpell "pa_last4"
	set nochkraft to nochkraft - 4
endif

if ( nochkraft >= 2 )
	Player->AddSpell "pa_last2"
	set nochkraft to nochkraft - 2
endif

if ( nochkraft >= 1 )
	Player->AddSpell "pa_last1"
	set nochkraft to nochkraft - 1
endif

if ( nochkraft < 1 )
	set nochkraft to 0
	set state to 1
endif

endif

if ( state == 1 )
	set timer to timer + GetSecondsPassed
	if ( timer >= 10 )
		Player->RemoveSpell "pa_last1" 
		Player->RemoveSpell "pa_last2" 
		Player->RemoveSpell "pa_last4" 
		Player->RemoveSpell "pa_last8" 
		Player->RemoveSpell "pa_last16" 
		Player->RemoveSpell "pa_last32" 
		Player->RemoveSpell "pa_last64" 
		Player->RemoveSpell "pa_last128" 
		Player->RemoveSpell "pa_last256" 
		Player->RemoveSpell "pa_last512" 
		Player->RemoveSpell "pa_last1024" 
		Player->RemoveSpell "pa_last2048"
		Player->RemoveSpell "pa_last4096"  
		set timer to 0
		set state to 0
	endif
endif

end

Hallo
-Ich brauche ein script( nur als Schablone), womit man ein Item erst ab einer bestimmten Menge einsetzen kann.
-Das Script werde ich wohl öfters verändern.
-Es wird wohl am ehesten an Werkbänke, Spinnräder, Schlachttische, Ambosse
et cetera angehängt.

Mfg und danke im vorraus
Ich

Dieser Codeblock sollte dir reichen:

Code:
short state

if ( state == 0 )
  if ( OnActivate == 1 )
    if ( Player->GetItemCount, "Item_ID" >= 10 )
      set state to 1
    endif
  endif
elseif ( state == 1 )
  ;mach was auch immer dein Gegenstand machen soll
  set state to 0
endif
 
Hi,

will jetzt über Weihnachten eventuell an meinem Leveling-Mod weiterarbeiten und stell hier mal eine kurze (und noch nicht ganz fertige) Variante rein, in der Hoffnung dass Skript-Experten mal ihr Meinung dazu abgeben bzw. mögliche Fehler & Inkompatibilitäten finden.

Zur Funktionsweise: man levelt seine Attribute nicht mehr über einen Multiplikator mit anschließendem Rasten, stattdessen wird ein Attribut automatisch um 1 hochgestuft wenn man 3x einen Skill mit dem passenden Attribut gelevelt hat. Wenn man 7 Attributssteigerungen hat erscheint automatisch das LevelUpmenu wo man nochmal 3 Punkte frei verteilen kann. In meinem Beispiel beschränke ich mich mal nur auf den Skill Akrobatik und das Attribut Stärke - insgesamt werden im fertigen Mod dann natürlich alle Skills und Attribute berücksichtigt.

Damit das alte Leveling-System ausgehebelt wird sind folgende GMST-Änderungen nötig:

Code:
iLevelupMajorMult = 0
iLevelupMajorMultAttribute = 0
iLevelupMinorMult = 0
iLevelupMinorMultAttribute = 0
iLevelupMiscMultAttribute = 0

Folgende Faktoren habe ich schon berücksichtigt:
1) wenn man Werwolf ist wird nichts gemacht
2) wenn man Vampir ist werden die Boni entfernt und wieder hinzugefügt, damit alles korrekt berechnet werden kann
3) wenn man im Gefängnis war und Skills gesunken sind wird das berücksichtigt
4) Zauber mit Fertigkeit festigen werden berücksichtigt, d.h. es wird die Stärke des Zaubers ermittelt und nicht mit eingerechnet

Hier erstmal das Startscript:

Code:
begin tommy_start

if ( CharGenState != -1 )
   return
endif

set tommy_leveling.acrobatics_last to ( player->getacrobatics )
startscript tommy_leveling

messagebox "Skills initialisiert"

stopscript tommy_start

end

und hier dann die Logik in einem Skript zusammengefasst:

Code:
begin tommy_leveling

short acrobatics
short acrobatics_last

short fortify
short base
short strpoints
short levelpoints

short jailed

if ( player->IsWerewolf == 1 )
   return
endif

if ( PCVampire == 1 )
   player->removespell "vampire skills"
   player->removespell "vampire aundae specials"
   player->removespell "vampire berne specials"
   player->removespell "vampire quarra specials"
endif 

if ( GetPCInJail == 1 )
   set jailed to 1
   return
else
   if ( jailed == 1 )
      set jailed to 0
      if ( ( player->getacrobatics ) < acrobatics_last )
         set acrobatics_last to ( player->getacrobatics )
      endif
   endif
endif

if ( acrobatics_last < ( player->getacrobatics ) )
   if ( acrobatics != ( player->getacrobatics ) )
      set acrobatics to ( player->getacrobatics )
      set fortify to ( player->getacrobatics )
      set base to ( player->getacrobatics )
      while ( fortify == base )
         player->modacrobatics 1
         set fortify to ( fortify + 1 )
         set base to ( player->getacrobatics )
      endwhile
      set base to ( acrobatics - ( ( player->getacrobatics ) - 100 ) )
      while ( base > acrobatics_last )
         set acrobatics_last to acrobatics_last + 1
         set strpoints to strpoints + 1
      endwhile
      set base to ( base - 100 )
      player->modacrobatics base
   endif
endif

while ( strpoints > 2 )
   set strpoints to strpoints - 3 
   set levelpoints to levelpoints + 1
   player->modstrength 1
   messagebox "Eure Stärke hat sich verbessert."
endwhile

if ( levelpoints > 6 )
   set levelpoints to levelpoints - 7
   enablelevelupmenu
endif

if ( PCVampire == 1 )
   player->addspell "vampire skills"
   if ( VampClan == 1 )
      player->addspell "vampire aundae specials"
   elseif ( VampClan == 2 )
      player->addspell "vampire berne specials"
   elseif ( VampClan == 3 )
      player->addspell "vampire quarra specials"
   endif
endif 

end

Ursprünglich war vorgesehen, dass der Level auch automatisch angepasst wird, aber wegen der Probleme mit setlevel (kann keine Variablen verarbeiten, Anzeige im Charscreen wird nicht korrekt geupdatet) habe ich die unkompliziertere Variante mit enablelevelupmenu gewählt - gefällt mir inzwischen eigentlich ganz gut.

Ich hoffe man kann hier meinen Ausführungen halbwegs folgen und ich warte nun auf Feedback ;).
 
schwimmende schiffe

aloha community!

nach einer langen morrowind-abstinez hats mich jetzt wieder gepackt.

warum auch nur musst mein kumpel auch morrowind auf der hdd haben ??!!;)

also gings gleich wieder ans basteln.

geplant ist ein eine größere insel im norden, ein gemeinschaftsprojekt, an dem wir zu zweit arbeit.

nun zu meinem problem:

die schiffe sollen in den hafen einlaufen und durch die gegend fahren.

nachdem ich einiges probiert habe (creaturen eine schiff-mesh verpassen-fail;
eine neue rasse mit schiff-mesh erstellen; fail... das schiff wackelt wie blöde rum...)

also hab ich mich ans scripten gewagt.

derzeit sieht der script folgendermaßen aus:

begin ship_movement


float timer


set timer to timer + GetSecondsPassed
AAA_SHIP->move y -200

if timer > 0
if timer < 15
AAA_SHIP->move y 200
endif
endif

if timer > 19
if timer < 22
AAA_SHIP->rotate z -5
endif
endif

if timer > 35
if timer < 38
AAA_SHIP->rotate z 5
endif
endif


end ship_movement


das problem: das schiff verschwindet nach einer weile einfach (zellengrenze überschritten)

gibt es einen trick, dies zu umgehen?

mit einem targeted global script habens wir noch nicht zum laufen bekommen....

jetzt seid ihr gefragt.

die mod findet ihr hier:

http://ul.to/77bh1c

wenn ihr euch mit "coc hafen" zum hafen teleportiert, seht ihr ein schiff, welches nach 15 sek losfährt... wenn ihr diesem follgt, werdet ihr sehen, dass es irgendwann verschwindet..

ich hoffe, dass ihr uns helfen könnt.

habe gelesen, dass der modder MadMax in seiner mod "fishing acadamy" genau diesen trick verwendet, den ich suche, aber ich finde nix und kriegs nbicht selber raus.

PS: bei der mod ist ansonsten noch nicht wirklich viel los... in seyda neen, westlich des schlickschreiters, gibts einen teleporter, der euch zur insel bringt. diese mod zeigt jedoch bisher nur den südlichen teil der insel, die bisher nur ein kleines dörfchen, ein paar fischerhütten und den hafensteg beinhaltet.

greetz
 
hab ma ne ganz kurze frage:
wie kann ich es machen, dass mich ein npc von selbst anspricht, also in einen dialog verwickelt und ich ihn nich zuerst anquatschen muss? :)
 
hab ma ne ganz kurze frage:
wie kann ich es machen, dass mich ein npc von selbst anspricht, also in einen dialog verwickelt und ich ihn nich zuerst anquatschen muss? :)

Nicht sonderlich schwer:

Code:
begin my_npc_quatsch_script

short doonce

if ( doonce == 0 )
  if ( GetDistance, Player < 512 )
    set doonce to 1
    ForceGreeting
  endif
endif

end
 
  • Like
Reaktionen: Vav
Hi,
Ich bräuchte ein paar Scripts für eine art Sternenwarte.

Frage daher: Kann man mit Scripts in einer Incell, die als Exteriocell gewertet wird so verstellen, dass man per Knopfdruck ein beliebiges Datum eingibt, auf einer Schaltfläche, mit Räder usw. und das bei einem weiterem Knopfdruck eines weiterem Hebels, die Zeit/das Datum ''laden'' kann?

Der Aufbau wäre dann wie folgt, um es etwas verständlicher auszudrücken.

Mit 3-4 Hebeln sollen das Jahr, der Monat, der Tag und die Stunde verstellbar sein, eventuell noch die Ära. Beim betätigen der Hebel wird die Anzeige entsprechend ausgelöst, eben dafür, wofür diese ausgelegt ist. Man bewegt den Tages-hebel und die Anzeige wandert einen bei Tagen verwärts usw.
Wenn man dann das Entsprechende Datum eingegeben hat, muss man nur noch den Auslöserhebel betätigen und wird in die anzeigende Zeit ''teleportiert'', was auch immer, man ist eben in genau dieser Zeit und kann den Himmel zu genau der Zeit vor sich sehen, den Sternenhimmel, Monde usw.

[Hier zu dann noch mal eine Frage, ob das überhaupt sinn macht:
Wird bei MW eigendlich immer der selbe Himmel nachts angezeigt, oder verändert der sich den Monaten und Tagen entsprechend. Wenn nicht wäre der Aufwand ziehmlich hoch für keinen Effect, aber trotzdem schön zumindest im Glauben zu sein, man sei in der jeweiligen Zeit.]

Da man je jetzt in einer ''falschen'' Zeit, muss man ja wieder in seine Zeit zurück. Damit man jetzt aber nicht wieder mühsam seine Zeit raussuchen muss, oder so gar vergessen hat, sollte es sowas wie eine ''Zeit-dekontaminationskammer'' geben.
Die Kammer sollte wie folgt funkionieren:
Drei Hebel steuern die Kammer. Man betritt die Kammer durch einen Eingang, z.B. ein Forcefield (diese halbdurchsichtige Wand). Wenn man die Warte betreten will, muss man zuerst den Mittleren Hebel betätigen, dieser Speichert beim ersten mal die Zeit in der man sich immoment befindet(falls das nötig ist) und schließt das Forcefield durch das man gekommen ist, dann nur so kann man den zweiten Hebel betätigen, der Stille auf einem, damit man keine Zauber mehr wirken kann und der Eingang zur Warte wird frei.
Wenn man nun wieder raus will, muss man den Mittleren Hebel wieder betätigen, dieser Läd dann die Zeit aus der man kam und das Forcefield geht wieder zu und man ist erneut ''gefangen''. Nun kann man auch wieder den ersten Hebel betätigen, der sich beim rausgehen vorher nicht bewegt hat, genau wie der dritte, so wie sie es vorher auch beim eintreten gemacht haben.
Dann betätigt man den ersten wieder. Dieser öffnet nun wieder den Eingang und man kann wider raus, neben bei entfernt er einem noch von dem Stillezauber.


Das wäre es eigendlich auch. Wenn der Himmel immer der selbe ist, ist es auch egal. Es ist zumindest eine schöne Idee, die auch ohne das gut klappen könnte, da man ja selbst irgendetwas einfügen könnte, was den Anschein hat, um noch Quests mit einzubeziehen.


Gruß: TakoTatsujin
 
der Himmel ist meines Wissens immer der gleiche, abgesehen von den Mondphasen (und dem Stand der Sonne).
Die Zeit setzen kann aber einige Quests und sicherlich auch einige Funktionen von Mods abschießen und ich würde die Figner davon lassen.
 
  • Like
Reaktionen: TakoTatsujin
Das mit den Mondphasen reicht mir auch schon. Es wäre zwar schöner wenn sich die Sterne auch noch bewegen würden, aber so ist es auch ok.

Und das mit der Zeit. Würde das mit der Kammer da nicht reichen?, oder ist es überhaupt möglich die Zeit ''abzuspeichern'' und anschließend wieder zu ''laden''?

Ansonsten bau ich eben einfach eine nur schön anzusehende Sternenwarte. Wäre zwar besser, wenn man sie auch bediehnen könnte, aber wenn nicht geht, gehts eben nicht.


Gruß: TakoTatsujin
 
Also, die Mondphasen habe ich schon versucht zu berechnen, ich bin relativ kläglich gescheitert. Sei scheinen zumindest nicht ganze Tage zu dauern.

Der Sternenhimmel verändert sich meines Wissens, ich weiß aber nicht wie.

Zeit kannst du abspeichern. Einfach die globalen Variablen Day, Month und Year in andere Variablen übertragen und dann auf einen beliebigen Wert setzen. Dadurch sollten zumindest die Mondphasen angepasst werden. Es könnte aber ein Zellenwechsel erforderlich sein um das zu aktualisieren.

Ich würde keine Stille, sondern DisableLevitation und DisableTeleport verwenden.
 
Heyho, alle zusammen. Ich wage mich nun auch in die Scripting-Gefilde von Morrowind vor. Allerdings bin ich sehr an die Vorgehensweise im Oblivion-CS gewöhnt und fühle mich daher recht hilflos. In Oblivion konnte man sich das Scripten sehr leicht selbst beibringen, idnem man vorhandene Scripts angeschaut hat. Hier verzweifle ich ein wenig. Könnte mir jemand diese beiden Oblivion-Scripts in Morrowind-Scripts umschreiben? Wäre sehr nett. Vielleicht versteh ich das Prinzip dann ein wenig besser. Der MorrowindScriptung-Kurs konnte mir nämlich irgendwie auch nicht so recht weiterhelfen:?

Code:
scn name

begin onactivate
if player.getitemcount ITEM-ID > 0
player.removeitem ITEM-ID 1
REF.enable
endif
end
und
Code:
scn name

begin onactivate
player.additem ITEM-ID 1
disable
end
 
Die sehen in Morrowind Script eigentlich identisch aus:

Code:
begin scriptname    ;den musst du dir halt ausdenken

if ( OnActivate == 1 )
  if ( Player->GetItemCount "Item_ID" > 0 )
    Player->RemoveItem "Item_ID" 1
  endif
  Enable
endif

end


Code:
begin scriptname    ;den musst du dir halt ausdenken

if ( OnActivate == 1 )
  Player->AddItem "Item_ID" 1
  Disable
endif

end
 
  • Like
Reaktionen: Der_W@ldmeister
Hmmm...Okay. Im Prinzip hatte ich die Scripts genauso geschrieben. Das erste hat scheinbar sogar funktioniert,wie es sollte. Aber das zweite lief irgendwie nicht... Hab jetzt ein paar Zeilen gelöscht (die ich aber eig sowieso auskommentiert hatte:?) und jetzt geht es... Finde ich seltsam. Aber solange es läuft, will ich mich natürlich nicht beschweren^^

Edit: So jetzt gehts wieder nicht :roll:
Das zweite Script liegt auf einer Waffe und wenn ich sie aktiviere, wird sie nun eingesammelt und ich erhalte nicht das gewünschte Item... Eig hab ich nur folgendes hinzugefügt:

Code:
if (menumode==0)
rotate,x,360
rotate,y,360
endif
end
Edit2: Und gibt es einen Befehl, mit dem ma die Zelle abfragen kann, in der sich der Spieler gerade befindet?
 
Zuletzt bearbeitet:
Die sehen in Morrowind Script eigentlich identisch aus:

Code:
begin scriptname    ;den musst du dir halt ausdenken

if ( OnActivate == 1 )
  if ( Player->GetItemCount "Item_ID" > 0 )
    Player->RemoveItem "Item_ID" 1
  endif
  Enable
endif

end
Dieses Script dürfte nicht funktionieren, denn wie willst du ein Objekt aktivieren, welches disabled ist?
Ich habe zwar keine Ahnung von Oblivion, aber das Script schaut so aus, als würde man beim Aktivieren ein anderes Objekt enablen.
Dazu schreibst du
Code:
id_des_objekts->enable
und das Objekt muss Reference Persists angehakt haben, und sollte nach Möglichkeit nur einmal existieren.

Edit2: Und gibt es einen Befehl, mit dem ma die Zelle abfragen kann, in der sich der Spieler gerade befindet?
GetPCCell
siehe auch: http://www.uesp.net/morrow/editor/mw_cscommands.shtml#getpccell
 
  • Like
Reaktionen: Der_W@ldmeister
Ja den Fehler hatte ich aber schon selbst gesehen und ausgemerzt;)
Es hat ja soweit alles geklappt, aber sobald ich eben das mit menumode hinzuschreibe, geht beides nicht mehr...
 
Teleport

Ich möchte, dass bei der aktivierung eines Gegenstandes eine Kreatur erscheint. Kann mir jemand den Skript dazu sagen, oder mir die Zutaten sgen, welche solch einen Skript aufweisen?