Projekt Geheimnisse der Magie - Teleportzauber - Alpha 1

Darkrai1991

Neuankömmling
Hallo Leute!

Ich bin gerade dabei für Morrowind eine Art Teleportplugin zu erstellen. Aber nicht einfach nur die Zauber sondern auch quests und neue Sternzeichen usw.

Momentan steht eine Alpha zur Verfügung.

Bisherige Features:
4 Neue Quests deren Start in der Balmora Magiergilde ist. (Mitgliedschaft in der Magiergilde ist nicht vonnöten) Sie werden immer schwerer. Man kann sie also nicht an einem durchmachen.
3 Neue Sternzeichen (ersteller der Bilder ist Ortega1302 aus dem Worldofplayers-Forum)
1 Neue Waffe und 1 neuer Ring - aus bestehenden Dateien
2 Neue Kampfzauber
2 Neue Fähigkeite
2 Neue Heilzauber

Bei Bugs und Problemen bei mir melden.

Bisher bekannte Bugs:
Keine bekannt.


Download

Ich würde mich um weitere Anregungen sowie Kritik, Lob und Vrebesserungsvorschläge freuen - Ich brauche sie um eventuelle Verbesserungen vornehmen zu können xd

Wenn neue Alphas verfügbar sind werde ich diesen Post hier immer nur aktualliesiern. Ich werde dann kein neues Thema machen.


Soweit erst ma zu meiner Alpha. Jetzt zu meinem kleinen Problem. Ich habe zwar schon ne Idee für ne 5. Quest aber für danach fehlen mir im Moment einfach die Ideen. Solltet ihr irgendwelche Ideen haben dann schreibt sie mir hier doch bitte rein. Sollten sie sich gut umsetzten lassen (am besten ohne scripts) werde ich eure Namen in der Letztendlichen Readme nennen (wolt ihr dies nicht so sagt mir dies bitte xd ).

Ich danke schonmal im Vorraus
 
Zuletzt bearbeitet:
Das Construction Set Forum ist für Fragen zum Construction Set. Mods vorstellen oder veröffentlichenmkannst du im Modifikations-Forum.
 
Neugierig: Wie funktionieren denn die Teleport-Zauber die immer abstürzen? Per script von einem Gegenstand aus dem Inventar heraus (bescriptete Schriftrollen/Tränke) ???
 
Also wird der Zauber nicht von einem 3d-Objekt in der Spielwelt gewirkt (Rüstung, "unsichtbarer" per PlaceAt eingefügter Gegenstand/Felsen/Npc o.ä.) sondern über ein globales Script ausgelöst wenn der xy-Zauber auf den Spieler wirkt?
Ich weiss das es aus dem Inventar heraus nicht möglich ist den Spieler per Script zu teleportieren und MW dabei immer abstürzt. Ausnahme sind nur "angelegte" Gegenstände die ja gleichzeitig in der Welt erscheinen...

Versuch mal einen Test: anstatt den Teleport-Zauber sofort vom globalen sript auszulösen wenn der Zauber registriert wurde, setze stattdessen per PlaceAtPC ein Objekt in die Nähe des Spielers. Nimm irgendeinen einen simplen Activator, eine Kiste, einen Ring oder eine Tür mit niedrigen grafischen Anforderungen. Das Objekt muss das letztendliche Teleportscript tragen.
Das Script am Objekt löst sofort den Zauber aus und das Objekt vernichtet sich danach selbst. (Geht nur wenn Du Tribunal hast)
Etwa so:
Code:
begin das_script

DontSaveObject

setscale 0.000001 ; so siehts keiner

if ( GetDisabled == 0 )
  Disable
  Player->Position[Cell]...dein teleport hier
else
  setDelete 1
endif

end
 
ähm es sollen ja zauber sein xd und der bug ist nicht immer nur manchmal xd bei mir is es eigentlich meistens nur das erste mal nach einem neuen spiel wenn ich davor abspeichere nach dem absturz wieder lade und den zauber erneut wirke gehts xd
 
Es wäre ja auch weiterhin ein Zauber- aber statt den Teleport-Effekt vom globalen Script zu starten glaube ich wäre es besser einen Gegenstand in die Welt zu setzen der den eigentlichen Teleport dann ausführt. Irgendwas war da mit globalen scripts und Player->Position[Cell] -

Ja ich hab's- mir ist es wieder eingefallen: Das globale Script wird beim Erreichen des Position[Cell]-Befehls unterbrochen und nicht zu Ende ausgeführt- stattdessen beginnt es wieder von oben....Das gilt aber nicht nur für globale sondern für alle Arten scripts. Entweder musst Du den Teleport ans Ende setzen oder auslagern
 
wie würde das script denn aussehen wenn ich das position cel ans ende setze? ich kenne mich damit leider nicht so gut aus xd

Und: Ich möchte Zauber aus dem grund weil man sich von jedem x-Belibiegen ort an seinen Wunschort teleportieren können soll xd
 
Du musst halt darauf achten das nach dem Teleport nichts mehr stattfindet. Beispielsweise setze eine Variable ein, "short TeleJetzt". Direkt vor dem Teleport-Befehl setzt Du sie auf 1 - so weiss das Script das es einen "Leerlauf" machen muss. Etwa so
Code:
Begin xx_script

short TeleJetzt

; ganz oben wird's abgefangen

If ( TeleJetzt ) 
  ; dann kommen wir grade vom Teleport hier oben an:
  If ( CellChanged == 0 )
    ; kein Zellwechsel (mehr) im Gang
    set TeleJetzt to 0
    ; nur auf 0 setzen und "leer" durchlaufen lassen
  EndIf 
  ; P.S.: Return + While sind in globalen Scripts nicht erlaubt

Else
; ....alles andere was vorher schon script war...


  if ( Bedingung )  
  ; irgendwas ist passiert - der Zauber wirkt- jetzt wird teleportiert...
    set TeleJetzt to 1
    Player->Position[Cell]....
  EndIf

EndIf

End
 
Geht das nicht irgendwie kürzer? xd weil das hier ist momentan das script wie ich es benutze xd

Code:
begin teleport_balmora

if ( Player -> GetSpellEffects, "GdM_teleportbalmora" == 1 )
    Player -> PositionCell -754.663, -1006.161, -640.235, 45.0 "Balmora, Magiergilde"
endif
end
 
Dieses Script ist aber nicht das Hauptscript zur Teleportgeschichte? Oder hast Du 20 solcher Scripte gleichzeitig laufen?
Problem bei dem Script ist das der Zauber noch wirkt. Probier mal in der Art:
Code:
begin teleport_balmora

if ( Player -> GetSpellEffects, "GdM_teleportbalmora" == 1 ) 
  Player -> RemoveEffect (HIER MUSST DU IN DER HILFE DIE NUMMER DES ZAUBER-EFFEKTS RAUSSUCHEN UND EINSETZEN)

  Player -> PositionCell -754.663, -1006.161, -640.235, 45.0 "Balmora, Magiergilde" 
endif
end

So wie es momentan aussieht wirst Du für die Dauer des Zaubers immer wieder teleportiert. Auch wenn's nur eine Sekunde ist, bei 50fps + Ladezeit möglicherweise 2-3 mal...
Ich hab leider kein MW mehr installiert kann's Dir also nicht genau sagen welche Effekt-Nummer - da musst Du wohl den Shield-Effect(?) entfernen.

Es sei denn dieses Script wird nur kurz gestartet und von aussen auch wieder gestoppt. Dann ist es ganz einfach:
Code:
begin teleport_balmora

StopScript teleport_balmora

if ( Player -> GetSpellEffects, "GdM_teleportbalmora" == 1 )
     Player -> PositionCell -754.663, -1006.161, -640.235, 45.0 "Balmora, Magiergilde"
endif

end
Das StopScript bewirkt nur das das Script nicht erneut startet- es läuft aber noch bis zum Ende durch.
 
nene alles sind zwar die gleichen scripts aber der zauber den ich benutze ist ein schild zauber der nur 1 sekunde gilt xd also gerade genug zeit das das script greift xd
 
öh wie meinste das jetzt? ich habe momentan für die 5 magiergilden und für seyda neen jeweils diesen zauber erstellt und für jeden dieser zauber wirkt ein eigenes script ich hoffe deine frage ist damit beantwortet xd
 
Dann hast Du für jeden Ziel-Ort ein eigenes globales Script am Laufen?
öh wie meinste das jetzt? ich habe momentan für die 5 magiergilden und für seyda neen jeweils diesen zauber erstellt und für jeden dieser zauber wirkt ein eigenes script ich hoffe deine frage ist damit beantwortet xd
Ich hab mir das mal angesehen, schaut wie folgt aus:

Das Plugin arbeitet mit einer Anzahl (z.Zt. sechs) Hintergrundscripts, die durch die "Start Scripts" Funktion automatisch gestartet werden und dann dauerhaft laufen. Per se ist das in Ordnung, aber unnötig - du kannst diese sechs Miniscripts zu einem Hintergrundscript zusammenfassen, das dann als Start Script eingetragen wird - wenn du so arbeiten willst. Es wäre alternativ möglich, dieses Script erst durch einen Questgeber zu starten, in einem Dialogresult... das wäre meine Wahl, da dann sichergestellt ist, dass die Funktion nur arbeitet, wenn der Spieler auch die nötige Quest (absolviert) hat.

Mein Vorschlag für ein Globales Script sähe so aus:

Code:
begin GdM_GlobalTelescan_scr
;Beobachtet den Einsatz der GdM Teleport-Zauber
float CoolDown

IF ( CoolDown > 0 )
	set Cooldown to ( CoolDown - GetSecondsPassed )
ELSE
	IF	( Player->GetSpellEffects, "GdM_teleportaldruhn" == 1 )
		set CoolDown to ( 2 + 0 * GetSecondsPassed )
		Player->PositionCell 2592.889, -511.854, -261.050, 270.0 "Ald'ruhn, Magiergilde"
	ElseIF	( Player->GetSpellEffects, "GdM_teleportbalmora" == 1 )
		set CoolDown to ( 2 + 0 * GetSecondsPassed )
		Player->PositionCell -754.663, -1006.161, -640.235, 45.0 "Balmora, Magiergilde"
	ElseIF	( Player->GetSpellEffects, "GdM_teleportcaldera" == 1 )
		set CoolDown to ( 2 + 0 * GetSecondsPassed )
		Player->PositionCell 525.714, 334.805, 490.127, 90.0 "Caldera, Magiergilde"
	ElseIF	( Player->GetSpellEffects, "GdM_teleportsadrithmora" == 1 )
		set CoolDown to ( 2 + 0 * GetSecondsPassed )
		Player->PositionCell -31.410, 212.681, 159.849, 45.0 "Sadrith Mora, Wolfenhalle: Magiergilde"
	ElseIF	( Player->GetSpellEffects, "GdM_teleportseydaneen" == 1 )
		set CoolDown to ( 2 + 0 * GetSecondsPassed )
		Player->Position -10994.985, -71073.180, 338.716, 343.5
	ElseIF	( Player->GetSpellEffects, "GdM_teleportvivec01" == 1 )
		set CoolDown to ( 2 + 0 * GetSecondsPassed )
		Player->PositionCell 3.520, 1391.325, -385.853, 180.0 "Vivec, Magiergilde"
	EndIF
EndIF

end GdM_GlobalTelescan_scr
Das Script fängt alle bisher vorhandenen Zielorte ab. Ich habe außerdem einen CoolDown eingebaut, der aktiv wird, sobald eine der sechs Teleportkonditionen greift. Er verhindert das erneute Teleportieren, solange der verursachende Zauber noch aktiv ist. Die Zeitspanne beträgt im Moment zwei Sekunden, aber das kann man beliebig verlängern oder kürzen. Wundere Dich nicht über diesen extrem seltsamen Aufruf mit 2 + 0*GetSecondsPassed. So setze ich den internen Timecounter seit dem letzten Aufruf definitiv auf Null, damit der CoolDown auf jeden Fall korrekt runterzählt und nicht durch irgendwelche willkürlichen Effekte beeinflusst wird.

Wenn das bisher wiederholte Aufrufen von PositionCell der Grund für die sporadischen Crashes sein sollte, müsste diese Variante das Problem beheben. Ansonsten müssen wir das noch mal analysieren. Eigentlich gibt es dafür aber keinen ersichtlichen Grund, denn so (oder ähnlich) arbeiten Teleportringe oder vergleichbare Dinge und es ist eigentlich unerheblich, ob man vorher schon einmal in der Zielzelle war.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Darkrai1991
@ReneMiner ähm ich kenne mich da leider nicht so aus aber wie gesagt für jeden einzelnen zauber (teleport balmora; teleport aldruhn; etc) greift an anderes script mit natürlich anderem namen und anderen koordinaten wenne das meinst ja es ist für jeden zielort ein eigenes script xd


@Eexa wenn ich jetzt also neue orte hinzufüge müsste ich die 2 normalen script zeilen einfach nur als ein weiteres elseif einfügen + der 3 zusätslichen cooldown zeile oder was? sry ich habe da kaum ahnung xd


@alle wir weichen ein wenig vom thema ab eigentlich sollte dieses thema nicht für script diskussionen dienen xd nix für ungut xd
 
Zuletzt bearbeitet:
Lexa- das Problem wird sein das der Interpreter nach dem PositionCell aussteigt und von oben anfängt.
Der cooldown sollte vor dem Teleport eingesetzt werden
Darkrai: wir wollen doch nur das es nicht mehr abstürzt :)