|
-
"Atemverlängerung" beim Tauchen
Hi, ich möchte eine art taucheranzug machen, welcher es ermöglicht länger unter wasser zu bleiben, allerdings weiß ich nicht wie ich das am besten anstelle. falls das mit dem verlänger, wenn man die rüstung trägt nicht funktioniert würde es auch das "immunisieren" dagegen tun (also das es da ausgeschaltet wird).
Lord Helmchen
-
Du könntest versuchen:
Gil_Values.DIVE_TIME[GIL_HUMAN]
zu verändern. Die Angabe ist in Sekunden. Es gibt die Konstante TIME_INFINITE für unbegrenzte Zeit.
Es kann allerdings sein, dass sich eine Änderung nur auf neu erzeugten C_NPCs auswirkt.
Sehr wahrscheinlich ist eine solche Änderung (wenn sie überhaupt möglich ist) nach dem Laden eines Spielstandes verschwunden, dann müsstest du sie z.B. in der INIT_GLOBAL Funktion erneut verändern.
Wenn du das ausprobierst würde mich das Ergebnis interessieren!
-
Zitat von Sektenspinner
Gil_Values.DIVE_TIME[GIL_HUMAN]
ich werde es einmal probieren, aber kannst du mir sagen wo ich das genannte finde (in welcher datei, bzw. Ordner)
Lord Helmchen
-
Zitat von Lord Helmchen
kannst du mir sagen wo ich das genannte finde (in welcher datei, bzw. Ordner)
Content\AI\AI_Intern\Species.d
-
Ich habe verschiedene Wege ausprobiert, allerdings vergebens. Aber mein Lösungsanstz nummer 1. hat mir immer noch am besten gefallen, vllt könnt ihr den Faden weiter spinnen.
Neue Gilde "GIL_Human_A" gemacht, diese dann bei "Spezies.d" definiert (genauso wie Human, bloß beim Tauchen längere Zeitangabe). Danach beim Item einen Gildenwechsel machen. Natürlich sollte man der Gilde vorher den richtigen Namen geben.
Leider glaub ich scheiterte das daran, dass man nicht die "genetische Gilde" wechseln kann (also die definiert was ein NPC ist). Hat im übrigen ohne Parsen fehler geklappt... aber leider keine Wirkung erzielt.
Lord Helmchen
-
Der Ansatz von Sektenspinner ist schon ganz gut, allerdings hat er dir nicht alles verraten
Mach danach mal einen Teleport zum Wegpunkt "PC_HERO".
-
Zitat von Godfather75
Der Ansatz von Sektenspinner ist schon ganz gut, allerdings hat er dir nicht alles verraten
Mach danach mal einen Teleport zum Wegpunkt "PC_HERO".
ich glaube das ist zu hoch für mich ich hab leider null plan wovon du redest.
Lord Helmchen
-
Manche Eigenschaften werden erst übernommen, wenn der NPC neu initialisiert wird (so hab ich das Ganze zumindest verstanden).
Gil_Values.DIVE_TIME[GIL_HUMAN]
fällt wohl unter diese Eigenschaften.
Eine Neuinitialisierung kann man zum Glück mit einer simplen Teleportation erzeugen (AI_Teleport) (die Teleportation an sich kennst ja bestimmt schon von z.B. Teleportplattformen oder Zaubern).
Nun wäre es natürlich blöd den Helden dafür durch die Gegend zu teleportieren: Es würde sehr unschön aussehen.
aber zum Glück können als Zielkoordinaten auch andere Objekte, als WPs in der Welt angegeben werden.
Darunter zählt der Held selbst.
Über AI_Teleport(hero, "PC_HERO");
teleportiert sich der Held zu sich selbst.
Der Vorgang ist kaum bemerkbar, hat aber den Vorteil, dass der Held neu initialisiert und entsprechende Eigenschaften damit endlich an ihm übernommen werden.
-
Ihr habt ja meine "Idee" gesehen, es um zu setzen. Würde das so gehen? Oder denke ich richtig dass man "Die genetische Gilde" nicht wechseln kann? Also dass man die Gilde des Helden auf "GIL_HUMAN_A" zu setzenund diese neue Gilde bei Spezies mit neuen tauchatributen zu definieren?
Aber genau verstanden, wie es Sektenspinner gemacht hätte, habe ich nicht.
Lord Helmchen
-
Die Gildenänderung würde nix bringen, da die Tauchzeit für alle "Humans" gleich ist. Du kannst nicht den Söldner länger tauchen lassen wie einen Paladin.
Mit "Gil_Values.DIVE_TIME[GIL_HUMAN]" änderst du den Wert für alle NPC´s.
Egal in welcher Gilde sie sind.
Allerdings interessiert das nur NPCs die neu ins Spiel oder die Darstellungsglocke kommen.
Das einzig mir bekannte, was man so im Spiel ändern kann sind wohl die AIVAR´s, allerdings bringt das in diesem Falle nix.
Man könnte ausprobieren ob es mit "Gil_Values.DIVE_TIME[PC_HERO]" auch funktioniert, um nur den Spieler zu verändern.
Allerdings wirst du auch in diesem Falle, nicht um den Teleport rum kommen.
Der Spieler ist ja immer in der Darstellungsglocke und muß halt irgendwie neu ins Spiel gebracht werden.
Bei einem Teleport wird eine Kopie des SC/NPC eingefügt und die alte Instanz entfernt.
-
Zitat von Godfather75
Die Gildenänderung würde nix bringen, da die Tauchzeit für alle "Humans" gleich ist. Du kannst nicht den Söldner länger tauchen lassen wie einen Paladin.
Mit "Gil_Values.DIVE_TIME[GIL_HUMAN]" änderst du den Wert für alle NPC´s.
Egal in welcher Gilde sie sind.
Allerdings interessiert das nur NPCs die neu ins Spiel oder die Darstellungsglocke kommen.
Das einzig mir bekannte, was man so im Spiel ändern kann sind wohl die AIVAR´s, allerdings bringt das in diesem Falle nix.
Man könnte ausprobieren ob es mit "Gil_Values.DIVE_TIME[PC_HERO]" auch funktioniert, um nur den Spieler zu verändern.
Allerdings wirst du auch in diesem Falle, nicht um den Teleport rum kommen.
Der Spieler ist ja immer in der Darstellungsglocke und muß halt irgendwie neu ins Spiel gebracht werden.
Bei einem Teleport wird eine Kopie des SC/NPC eingefügt und die alte Instanz entfernt.
bloß ist mir nicht ganz klar, inwiefern mir das hilft, dass beim tragen der rüstung der atem verlängert wird und nicht nur generell. aber ich denke, dass es jetzt zu weit führen würde... ich machs anders, na ja, kann man nichts machen. trotzdem danke
Lord Helmchen
-
Ich sehe dabei eigentlich kein Problem.
In der Equip-Funktion verlängerst du die Atemzeit und teleportierst den SC zu sich selbst.
In der UnEquip natürlich das selbe. Ebenso kann man es mit Perks o.ä. machen, da die Tauchzeiten sowieso nur für den Helden relevant sind.
Für NPCs sind die Tauchzeiten irrelevant, da sich nach meinem Wissensstand sowieso nicht bzw. seeeeehr selten tauchen.
EDIT: Für den Fall, dass du nicht verstehst, was ich meine ein Rüstungsscript (Ja, ich mach sowas gerne *g*)
Code:
const var TAUCH_BESSER = 50;
const var TAUCH_NORMAL = x;
INSTANCE ITAR_TAUCHRÜSTUNG (C_Item)
{
name = "Taucherrüstung";
mainflag = ITEM_KAT_ARMOR;
flags = 0;
protection [PROT_EDGE] = 0;
protection [PROT_BLUNT] = 0;
protection [PROT_POINT] = 0;
protection [PROT_FIRE] = 0;
protection [PROT_MAGIC] = 0;
value = 100;
wear = WEAR_TORSO;
visual = "Tauchrüstung.3DS";
visual_change = "Tauchrüstung.asc";
visual_skin = 0;
material = MAT_LEATHER;
on_equip = Equip_Tauchrüstung;
on_unequip = UnEquip_Tauchrüstung;
description = name;
TEXT[1] = "Der Träger dieser Rüstung";
TEXT[2] = "hat die Fähigkeit, besonders";
TEXT[3] = "lange zu tauchen, ohne";
TEXT[4] = "Luft holen zu müssen.";
TEXT[5] = NAME_Value;
COUNT[5] = value;
};
FUNC VOID Equip_Tauchrüstung()
{
if Npc_IsPlayer (self)
{
Gil_Values.DIVE_TIME[GIL_HUMAN] = TAUCH_BESSER;
AI_Teleport(hero, "PC_HERO");
};
};
FUNC VOID UnEquip_Tauchrüstung()
{
if Npc_IsPlayer (self)
{
Gil_Values.DIVE_TIME[GIL_HUMAN] = TAUCH_NORMAL;
AI_Teleport(hero, "PC_HERO");
};
};
TAUCH_BESSER und TAUCH_NORMAL müsstest du natürlich auf deinen beliebigen Wert und auf den ursprünglichen Wert setzen, der mir leider unbekannt ist.
Alle fragen sich wie kann ich noch schöner werden,
aber keiner fragt sich für wen.
Geändert von Shadowblade (08.10.2007 um 21:08 Uhr)
-
Ich hab das ganze mal getestet, und zumindest bei G1 Funktioniert es beim Helden NICHT.
Teleport bringt nichts, erst beim inserten und Übernehmen eines neuen NPC wird die Änderung bemerkbar (selbst wenn der PC über weite Strecken teleportiert wird).
Hatte in der Vergangenheit schon öfter den Verdacht, dass G1 in dieser Hinsicht anders ist, der Held will einfach nicht neu initialisiert werden
Ob es in G2 Funktioniert weiß ich nicht (nehme ich mal an), aber immerhin scheint eine Änderung prizipiell möglich zu sein.
-
Alternativ wäre es natürlich auch anders möglich:
Das Ding ist keine Rüstung. Das Ding ist einfach ein benutzbares Item, so wie ein Lederbeutel.
Beim Gebrauchen passiert folgendes:
Bildschirm wird schwarz.
PC_Hero wird gespawnt.
Neuer PC_Hero wird übernommen.
Alter PC_Hero wird an den WP TOT geschickt.
Mesh und Textur des Helden werden geändert.
Tauchzeit wird verlängert.
Bildschirm wird wieder hell.
Seeehr umständlich, ich habe keine Ahnung ob es praktisch funktioniert.
Am Besten schreibst du dann noch in die Rüstungserklärung:
ACHTUNG! Vorher alle Gegenstände ablegen! Rüstung hat keine Taschen.
Oder ähnliches.
(Beim nochmaligen Benutzen, läuft das alles natürlich rückwärts ab.)
Alle fragen sich wie kann ich noch schöner werden,
aber keiner fragt sich für wen.
-
Also ich habs jetzt mal probiert und muss sagen, dass es nicht funktioniert hat (davon abgesehen, dass es const int heißen müsste, zumindest kam bei var immer ein parsenfehler). Dann mach ichs jetzt anders. na ja, trotzdem danke...
Lord Helmchen
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|
|