PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Teleporten, aber wie?



LAP
15.05.2004, 01:40
Hi, ich habe folgendes Problem: Ich will aus einem Dialog heraus den Helden zu einem anderen WegPunkt teleporten, aber irgendwie funktioniert das nicht, hier mal der Code:


AI_StopProcessInfos(self); //Dialog beenden
AI_Teleport(hero, "NW_MONASTERY_PLACE_03"); //Teleport zum Ziel


Aber anscheinend reicht es nicht den Dialog hier nur über AI_StopProcessInfos abzubrechen, denn der Held ist anschließend (am Zielort) nicht steuerbar. Ich nehme an, dass er weiterhin im Dialogmodus ist ... irgendwelche Ideen?

[PB]Nico
15.05.2004, 02:16
Original geschrieben von LAP
Ich will aus einem Dialog heraus den Helden zu einem anderen WegPunkt teleportenDas wird nicht funktionieren, da der Infomanager das gar nicht mag...

Original geschrieben von LAP
Aber anscheinend reicht es nicht den Dialog hier nur über AI_StopProcessInfos abzubrechen, denn der Held ist anschließend (am Zielort) nicht steuerbar. Ich nehme an, dass er weiterhin im Dialogmodus istJupp.

Original geschrieben von LAP
...irgendwelche Ideen?Item oder Trigger.

LAP
15.05.2004, 02:45
Na gut, dann mach ich 'ne Teleportrolle draus, danke für die Hilfe ...

HornOx
15.05.2004, 03:04
Du kannst es auch per ZS machen:

func void ZS_TeleportHero ()
{
Perception_Set_Normal();
B_ResetAll (self);
//irgendwelche Zauberanimationen?
AI_Teleport(hero, "NW_MONASTERY_PLACE_03"); //Teleport zum Ziel
AI_StartState (self, ZS_Stand_WP, 0, "");
return;
};
Und in den Dialog kommt dann ein
AI_StopProcessInfos(self); //Dialog beenden
AI_StartState(self, ZS_TeleportHero, 0, "");

LAP
15.05.2004, 03:22
Danke, gute Idee, werds mal ausprobieren ...

Wenn man die "self" durch "hero" ersetzt (im ZS), funktioniert es!

Mist, wenn man das per ZS macht, ist der Hero anschließend nicht ansprechbar, man muss erst selber jemanden anquatschen (was beim ersten Mal auch nicht geht), damit es anschließend funktioniert.

LAP
15.05.2004, 16:37
Sorry für den Doppelpost, aber wie kannman sonst anzeigen lassen, dass sich das Thema geändert hat? Hab was ich sagen wollte bereits hier drüber reineditiert.

[PB]Nico
15.05.2004, 20:37
Original geschrieben von LAP
Mist, wenn man das per ZS macht, ist der Hero anschließend nicht ansprechbar, man muss erst selber jemanden anquatschen (was beim ersten Mal auch nicht geht), damit es anschließend funktioniert.Du kannst AIV_INVINCIBLE wieder zurücksetzen (wurde im ZS_Talk gesetzt).


Gruss Nico

ps: und vergiss nicht ranzuschreiben, dass es ein böser Hack ist ;)

Rolus
22.05.2004, 21:54
Ich habe auch mal ne Frage zum Thema Teleport. Also ich wollte für G1 ne Teleportrune machen, hab alles von den vorhandenen Teleportrunen abgeguckt aber jetzt stürzt Gothic immer ab, wenn ich die neue Rune anlegen will. Im zspy steht was von "freepoint not found". Aber den freepoint gibt's, den ich da angegeben habe. Ach und noch was: Geht das Teleportieren echt nur zu Freepoints oder auch zu allen Waypoints?

Fizzban
22.05.2004, 22:18
Man kann auf jeden Fall auch Waypoints angeben. Tatsächlich bin ich mir nicht mal sicher, ob Freepoints als Ziel überhaupt eine gute Idee sind.

Rolus
22.05.2004, 22:25
Ja, ich habe nochmal nachgeschaut und gesehen, dass bei denn anderen Runen auch Wegpunkte angegeben sind. Naja aber wenn ich bei meiner Teleportrune nen Wegpunkt angebe kommt auch dieso Meldung: "Freepoint not found". Weiß vielleicht einer was ich machen kann?

Fizzban
22.05.2004, 22:48
Poste bitte man deine Änderungen. Ganz ohne Details ist eine Ferndiagnose ziemlich schwierig.

Rolus
22.05.2004, 23:36
Okay ....
Also in \_work\Data\scripts\content\Items\Artifacts.d hab ich folgendes hinzugefügt:

// Teleport6 (Scrolls und Runen)

INSTANCE ItArRuneTeleport6 (C_Item)
{
name = NAME_Rune;

mainflag = ITEM_KAT_RUNE;
flags = 0;

visual = "ItAr_Rune_41.3ds"; //lila Rune
material = MAT_STONE;

spell = SPL_TELEPORT6;
//mag_circle = 4; //SN: Teleport-Spells müssen auch ohne Circle sprechbar sein!

description = "Teleport zum dunklen Turm"; //lila Rune
TEXT [0] = NAME_Mag_Circle; COUNT [0] = mag_circle;
TEXT [1] = NAME_Manakosten; COUNT [1] = SPL_SENDCAST_TELEPORT;
};

INSTANCE ItArScrollTeleport6 (C_Item)
{
name = NAME_Spruchrolle;

mainflag = ITEM_KAT_RUNE;
flags = ITEM_MULTI;

visual = "ItAr_Scroll_39.3DS";
material = MAT_STONE;

spell = SPL_TELEPORT5;
cond_atr[2] = ATR_MANA_MAX;
cond_value[2] = SPL_SENDCAST_TELEPORT;

description = "Teleport zum dunklen Turm";
//TEXT [0] = NAME_Mag_Circle; COUNT [0] = mag_circle;
TEXT [1] = NAME_Manakosten; COUNT [1] = SPL_SENDCAST_TELEPORT;
};

Dann hab ich in \_work\Data\scripts\content\Magic\ ne neue Datei namens spell_teleport.d erstellt, die folgendes enthält:


//-------- Spell Commands --------
// SPL_DONTINVEST = 0; // Es können keine weiteren Manapunkte investiert werden. Erst durch CTRL loslassen geht der Spell ab
// SPL_RECEIVEINVEST = 1; // Wirkung durchgeführt, es können weitere Invest kommen, zB.bei Heal nach jedem Pöppel
// SPL_SENDCAST = 2; // Starte den Zauber-Effekt (wie CTRL loslassen), automatischer Abbruch
// SPL_SENDSTOP = 3; // Beende Zauber ohne Effekt
// SPL_NEXTLEVEL = 4; // setze den Spruch auf den nächsten Level

func int Spell_Logic_Teleport6(var int manaInvested)
{
PrintDebugNpc (PD_MAGIC, "Spell_Logic_Teleport6");

if (manaInvested>= SPL_SENDCAST_TELEPORT)
{
AI_Teleport (self, "OW_FOGTOWER_TOP");
AI_PlayAni (self, "T_HEASHOOT_2_STAND" );

return SPL_SENDCAST;
};

return SPL_NEXTLEVEL;
};

So, und in die Datei \_work\Data\scripts\content\Intern\magic_intern.d
diese Zeile:

const int SPL_TELEPORT6 = 59;

Das war alles. Hoffe mir kann jemand helfen.

Fizzban
23.05.2004, 00:50
Mmh, da fehlt noch einiges:


*Spell_Logic_Teleport6() muss in Spell_ProcessMana() (spells_process_mana.d) aufgerufen werden
*Die Konstante MAX_SPELL muss auf 60 erhöht werden. Wahrscheinlich bessere Alternative: Statt eine neue Konstante zu definieren, eine der von Gothic nicht genutzten Konstanten SPL_NEW2 bis SPL_NEW5 verwenden.
*In Spell_ProcessMana_Release() (spells_process_mana_released.d) muss angegeben werden, was passiert, wenn der Spieler STRG zu früh loslässt.
*In spells_params.d müssen diverse Arrays angepasst und ein passendes Objekt der Klasse C_Spell_Proto erstellt werden.


Ohne diese Anpassungen sollte ein Wirken des Zaubers nicht möglich sein. Daher wohl die seltsame Fehlermeldung. Die eigentliche Spruch-Logik-Funktion scheint in Ordnung zu sein, ist ja eine 1:1-Kopie der anderen Teleport-Zauber.

Rolus
23.05.2004, 20:48
*In spells_params.d müssen diverse Arrays angepasst und ein passendes Objekt der Klasse C_Spell_Proto erstellt werden.

Könntest du das genauer und vorallem idiotensicher erläutern (wenn's nicht zuviel aufwand ist)? Egal was ich da verändere ich krieg immer ne Fehlermeldung (excpect "}"... kann aber garnicht sein und die zeilenangabe bringt sowieso nix). Also ich hoffe das ist nicht zuviel arbeit und schonmal im vorraus danke.