Willkommen Anonymous, es sind 45 User online. [ Anzeigen ]


[RPG]Board Neverwinter Nights NWN Scripting


[ Login ] [ Registrieren ] [ Abo ] [ Suche ] [ Profil ] [ Hilfe ]


Operatoren: zauriel, Avantenor
Moderatoren: NWN Moderat, Camael, IRQ
[ ANTWORTEN ]
[ FAQ ]
Autor Druckansicht   Thema: [RQ] Teleport in ein Gebiet wenn man stirbt?
Seite: 1
Soran28

Profil anschauen ]

Gilde/Clan:
Zirkel der Winde

erstellt am 09.12.2011 um 02:01 Uhr     Skype meisterderwinde83  Zitatantwort        #1785638

Hier dieses Script hab ich herausgepiekt und wollte Fragen was ich ändern oder ergänzen muss um nachdem Tod wieder Automatisch geheilt wurde in einem Anderen Gebiet aufwache hier was muss ich ergänzen:

void ClearAllFactionMembers(object oMember, object oPlayer)
{
// AssignCommand(oMember, SpeakString("EbenederGefallenenHelden"));
AdjustReputation(oPlayer, oMember, 100);
SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
object oClear = GetFirstFactionMember(oMember, FALSE);
while (GetIsObjectValid(oClear) == TRUE)
{
ClearPersonalReputation(oPlayer, oClear);
oClear = GetNextFactionMember(oMember, FALSE);
}
}
void Raise(object oPlayer)
{
SetLocalLocation(oPlayer, "DeathPoint", GetLocation(GetLastPlayerDied()));


effect eVisual = EffectVisualEffect(VFX_IMP_DEATH_WARD);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVisual, oPlayer, 5.0);


effect eBad = GetFirstEffect(oPlayer);
DelayCommand(5.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer));
DelayCommand(5.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer));

//Search for negative effects
while(GetIsEffectValid(eBad))
{
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
{
//Remove effect if it is negative.
RemoveEffect(oPlayer, eBad);
}
eBad = GetNextEffect(oPlayer);
}
//Fire cast spell at event for the specified target
SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));



}

void main()
{
object oPlayer = GetLastPlayerDied();



string sArea = GetTag(GetArea(oPlayer));



Raise(oPlayer);
string sDestTag = "EbenederGefallenenHelden";
object oSpawnPoint = GetObjectByTag(sDestTag);


DelayCommand(5.0, AssignCommand(oPlayer, JumpToLocation(GetLocation(oSpawnPoint))));
return;









AssignCommand(oPlayer, ClearAllActions());

if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPlayer) <= 10)
{ SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPlayer);
}
if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPlayer) <= 10)
{ SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer);
}
if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10)
{ SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer);
}
}





--
Das Elbenreich Zuna

Uranochos

Profil anschauen ]

erstellt am 11.12.2011 um 12:12 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1785924

Hallo,

Der Teil mit der Versetzung an einen anderen Ort funktioniert, solange Du nicht vergessen hast, einen Wegpunkt mit der Kennzeichnung "EbenederGefallenenHelden" zu plazieren.

mit

object oPlayer = GetLastPlayerDied();


hast Du festgelegt, dass das Script im Eventhandler des Moduls OnPlayerDeath abläuft.
Wenn Du dem Spieler mehrere Möglichkeiten einräumen willst, was er nach seinem Tod tun kann, solltest Du lieber das GUI-Panel starten und Dein Wiederbelebungsscript unter OnPlayerRespawn starten.

Das SearchForNegativeEffects kannst Du Dir sparen und stattdessen RemoveEffects benutzen.

Es fehlt noch die Heilung.
Der Scriptteil mit Wiederbelebung, Heilung und dem Entfernen der negativen Effekte könnte dann so aussehen:

ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer); 
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer); 
RemoveEffects(oPlayer);


Du solltest Dir angewöhnen, ganz oben erst einmal alle Variablen zu definieren und unten die Scripte auszuführen, dann kommst Du nicht so leicht durcheinander.
Welche Spielversion benutzt Du? Beide Addons?

Gruß,
Uranochos


--
"Geschichten von der Alten Erde"
Deutschsprachiges Rollenspielprojekt.
-Work-in-progress-
[Externer Link - Bitte einloggen oder registrieren]
alte-erde.spdns.org

Soran28

Profil anschauen ]

Gilde/Clan:
Zirkel der Winde

erstellt am 12.12.2011 um 00:23 Uhr     Skype meisterderwinde83  Zitatantwort        #1786095

[RQ]: Teleport nach Tod in ein anderes Gebiet:

Mein Script sieht nun so aus:

void ClearAllFactionMembers(object oMember, object oPlayer)
{
// AssignCommand(oMember, SpeakString("EbenederGefallenenHelden"));
AdjustReputation(oPlayer, oMember, 100);
SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
object oClear = GetFirstFactionMember(oMember, FALSE);

while (GetIsObjectValid(oClear) == TRUE)
{
ClearPersonalReputation(oPlayer, oClear);
oClear = GetNextFactionMember(oMember, FALSE);
}
}
void Raise(object oPlayer)
{
SetLocalLocation(oPlayer, "EbenederGefallenenHelden", GetLocation(GetLastPlayerDied()));


effect eVisual = EffectVisualEffect(VFX_IMP_DEATH_WARD);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVisual, oPlayer, 5.0);


effect eBad = GetFirstEffect(oPlayer);
DelayCommand(5.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer));
DelayCommand(5.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer));

//Search for negative effects
while(GetIsEffectValid(eBad))
{
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
{
//Remove effect if it is negative.
RemoveEffect(oPlayer, eBad);
}
eBad = GetNextEffect(oPlayer);
}
//Fire cast spell at event for the specified target
SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));



}

void main()
{
object oPlayer = GetLastPlayerDied();





string sArea = GetTag(GetArea(oPlayer));



Raise(oPlayer);
string sDestTag = "EbenederGefallenenHelden";
object oSpawnPoint = GetObjectByTag(sDestTag);

DelayCommand(5.0, AssignCommand(oPlayer, JumpToLocation(GetLocation(oSpawnPoint))));
return;


AssignCommand(oPlayer, ClearAllActions());

if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPlayer) <= 10)
{ SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPlayer);
}
if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPlayer) <= 10)
{ SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer);
}
if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10)
{ SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer);

// Deklaration des Spieler- u. Wegpunktobjekts
object oPC = GetLastPlayerDied();
object oWP = GetWaypointByTag("EbenederGefallenenHelden");


// da oPC tot ist, kann es keine ihm mittels AssignCommand()
// zugewiesene Aktion ausführen.
// Ergo: Objekt wiederbeleben u. Hitpoints wieder auffüllen.
int nMaxHP = GetMaxHitPoints(oPC);
effect eHeal = EffectHeal(nMaxHP);
effect eRes = EffectResurrection();

ApplyEffectToObject(DURATION_TYPE_INSTANT, eRes, oPC);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC);

// oPC wird die Methode JumpToObject() zugewiesen,
// woraufhin oPC so nahe wie möglich zu oWP
// teleportiert wird
AssignCommand(oPC, JumpToObject(oWP, FALSE));
}
}

Leider jedoch werde ich zwar geheilt aber bleib in den Gebiet wo ich gestorben bin und werde nicht in die Ebene der gefallenen Helden teleportiert was ist daran noch Falsch oder was ist noch zu ergänzen im Script?

--
Das Elbenreich Zuna

Uranochos

Profil anschauen ]

erstellt am 12.12.2011 um 11:44 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1786151

Hallo,

Du hast da jetzt ein Script, das immer unübersichtlicher wird.

Du hast zwei Schleifen (while), die erste, um die Reputation innerhalb der Spielergruppe (faction) wieder zurückzusetzen (wozu das Ganze???), die zweite Schleife, um die negativen Effekte zu entfernen, falls welche vorhanden sind.
Schleifen sind immer potentiell gefährlich.

Die erste ist überflüssig, die zweite kannst Du ersetzen durch RemoveEffects(oPC).

Du hast jetzt die Spielerfigur als Objekt dreimal definiert:
oPlayer, oPC, oClear. Da gibts zuviel Durcheinander.

SetLocalLocation(oPlayer, "EbenederGefallenenHelden", GetLocation(GetLastPlayerDied()));


Diese Zeile bewirkt, dass auf der Spielerfigur die Location mit dem Variablennamen "EbenederGefallenenHelden" abgelegt wird, und zwar die Location, an der der Spieler gestorben ist. Diese Variable fragst Du später nicht ab, ist also überflüssig.

Im Prinzip hast Du alles, was Du brauchst, im letzten Abschnitt NOCHMAL untergebracht, und so könnte dann auch Dein KOMPLETTES Script aussehen:

 
#include "nw_i0_plot"//Include, damit RemoveEffects funktioniert 
 
object oPC = GetLastPlayerDied();//Spieler, der zuletzt gestorben ist  
object oWP = GetWaypointByTag("WP_PLAYER_RESPAWN");//Wegpunkt zur Wiederbelebung  
int nMaxHP = GetMaxHitPoints(oPC);//Lebenspunkte des Spielers ermitteln  
effect eHeal = EffectHeal(nMaxHP);//definieren, wieviele Lebenspunkte wiedergegeben werden sollen 
effect eRes = EffectResurrection();//Auferstehung definieren, damit Aktionen zugewiesen werden können 
effect eVisual = EffectVisualEffect(VFX_FNF_STRIKE_HOLY);//Special-Effect  
  
void main() 
{ 
ClearAllActions(TRUE);//alle laufenden Aktionen und Animationen beenden 
RemoveEffects(oPC);//alle Effekte entfernen 
ApplyEffectToObject(DURATION_TYPE_INSTANT, eRes, oPC);//wiederbeleben  
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC);//heilen  
AssignCommand(oPC,JumpToLocation(GetLocation(oWP)));//zur Location teleportieren 
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPC));//Special-Effect abspielen 
 
SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 50, oPC);// nach dem Tod einen Neubeginn ermoeglichen 
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 50, oPC); 
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 99, oPC); 
} 



Und das wäre dann auch eigentlich schon Dein ganzes Script mit den wesentlichen Funktionen, die Du brauchst.

Das Script gehört in den Eventhandler des Moduls "OnPlayerDeath".

Du brauchst unbedingt einen Wegpunkt mit der Kennzeichnung "WP_PLAYER_RESPAWN", damit das Teleportieren funktioniert!

Gruß,
Uranochos


--
"Geschichten von der Alten Erde"
Deutschsprachiges Rollenspielprojekt.
-Work-in-progress-
[Externer Link - Bitte einloggen oder registrieren]
alte-erde.spdns.org

Soran28

Profil anschauen ]

Gilde/Clan:
Zirkel der Winde

erstellt am 13.12.2011 um 00:30 Uhr     Skype meisterderwinde83  Zitatantwort        #1786357

Danke, dir Uranochos! Funzt jetzt endlich! Soran!

--
Das Elbenreich Zuna

Uranochos

Profil anschauen ]

erstellt am 13.12.2011 um 11:40 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1786383

Gern geschehen.

Solltest Du doch noch das GUI-Panel einbauen, damit dem Spieler nach seinem Ableben mehr Möglichkeiten zur Verfügung stehen, ändere einfach die erste Zeile in:

object oPC = GetLastRespawnButtonPresser();


und setze das Ganze in den Eventhandler OnPlayerRespawn.

Schönen Gruß,
Uranochos


--
"Geschichten von der Alten Erde"
Deutschsprachiges Rollenspielprojekt.
-Work-in-progress-
[Externer Link - Bitte einloggen oder registrieren]
alte-erde.spdns.org

Sebwie

Profil anschauen ]

erstellt am 29.11.2012 um 03:22 Uhr eMail schreiben      Zitatantwort        #1836169

Hallo allerseits.
Ich möchte nicht stören, habe aber seid ca. 8 Jahren eine Frage mit dem NwN Aurora toolset. Ich bin leider noch sehr unerfahren und habe keinerlei Wissen über Skripten u.ä. ! Es geht darum das ich wenn ich module für NwN Lan-Partys baue, nicht weiß wie ich (und wo ich) einstellen kann, dass ein Charakter Gold und exp verliert wenn er/Sie stirbt. Auch wäre es schön wenn der/die Tote im Tempel wiederbelebt wird, statt da wo er/sie gestorben ist.

Es wäre wirklich sehr nett wenn mir das jemand mit einfachen Worten erklären könnte.

Gruß

Sebwie ^^
Uranochos

Profil anschauen ]

erstellt am 29.11.2012 um 12:33 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1836217

Hallo, Sebwie!

Was kann man tun? Eine gute Möglichkeit ist immer, sich ein aus dem Netz heruntergeladenes Modul anzuschauen, bei dem nach dem Sterben der Spielfigur alles so läuft, wie Du es auch haben willst, und dann hemmungslos abzukupfern.

Dazu musst Du Dir im Toolset unter Bearbeiten--> Modul-Eigenschaften--> Ereignisse die sogenannten Event Handler ansehen, OnPlayerDeath und OnPlayerRespawn, und die entsprechenden Scripte in Dein Modul importieren.

Anschließend musst Du in den Scripten die Variablen finden, die Du verändern musst, damit es bei Dir funktioniert.
Das sind meistens zwei Integer nXPPenalty und nGoldPenalty (oder mit so ähnl Namen) und der Wegpunkt, an dem die Spieler wiederauferstehen sollen, heisst meist irgendwas mit WP_RESPAWN oder NW_DEATH_TEMPLE.
Dabei musst Du Schritt für Schritt vorgehen und Dir merken oder aufschreiben, was Du geändert hast, falls irgendetwas schiefgeht.

Ach ja, noch etwas: Wenn Du Skripte in den Eventhandlern änderst, musst Du anschließend das Modul "erstellen", das heißt, kompilieren, damit Deine Änderungen sich auch bemerkbar machen.

EDIT:
Wenn Du schreibst, dass Du Module für LAN-Parties machst, stelle ich mir vor, dass Du den Spielern erlauben möchtest, gefallene Kameraden wiederzubeleben.

In dem Falle solltest Du das GUI-Death-Panel benutzen, damit die Spieler Auswahlmöglichkeiten haben.

Du könntest dann zB diese Scripte verwenden (wir kupfern einfach mal oben ab):

1. EventHandler OnPlayerDeath

 
//#include "x3_inc_horse" //Einkommentieren, falls Du Pferde benutzt 
 
object oPC = GetLastPlayerDied(); 
string sMsg = "Wollt Ihr auf Hilfe warten oder neu einsteigen? Neu einsteigen kostet eine Strafe an Gold und Erfahrungspunkten." 
 
void main() 
{ 
DelayCommand(3.0, PopUpDeathGUIPanel(oPC, TRUE, TRUE, 0, sMsg)); 
} 



2. EventHandler OnPlayerRespawn

 
#include "nw_i0_plot"//Include, damit RemoveEffects funktioniert 
  
//VARIABLEN DEFINIEREN: 
  
object oPC = GetLastRespawnButtonPresser();//Spieler, der zuletzt wiederauferstanden ist   
object oWP = GetWaypointByTag("WP_PLAYER_RESPAWN");//Wegpunkt zur Wiederbelebung   
int nMaxHP = GetMaxHitPoints(oPC);//Lebenspunkte des Spielers ermitteln   
effect eHeal = EffectHeal(nMaxHP);//definieren, wieviele Lebenspunkte wiedergegeben werden sollen  
effect eRes = EffectResurrection();//Auferstehung definieren, damit Aktionen zugewiesen werden können  
effect eVisual = EffectVisualEffect(VFX_FNF_STRIKE_HOLY);//Special-Effect 
 
// XP-ABZUG FESTLEGEN:  
 
int nXP = GetXP(oPC); 
int nPenalty = 30 * GetHitDice(oPC);// 30XP pro Level 
int nHD = GetHitDice(oPC); 
// * You can not lose a level with this respawning 
int nMin = ((nHD * (nHD - 1)) / 2) * 1000; 
int nNewXP = nXP - nPenalty; 
    if (nNewXP < nMin) 
       nNewXP = nMin; 
 
// GOLD-ABZUG FESTLEGEN: 
 
int nGoldToTake = FloatToInt(0.10 * GetGold(oPC));// 1/10 des Goldes abziehen 
 
     
// HAUPTTEIL: 
   
void main()  
{  
ClearAllActions(TRUE);//alle laufenden Aktionen und Animationen beenden  
RemoveEffects(oPC);//alle Effekte entfernen  
ApplyEffectToObject(DURATION_TYPE_INSTANT, eRes, oPC);//wiederbeleben   
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC);//heilen   
AssignCommand(oPC,JumpToLocation(GetLocation(oWP)));//zur Location teleportieren  
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPC));//Special-Effect abspielen 
 
// XP abziehen: 
SetXP(oPC, nNewXP); 
 
// Gold abziehen: 
if (nGoldToTake > 10000) 
    { 
    nGoldToTake = 10000;//Maximal 10000 Gold abziehen 
    } 
AssignCommand(oPC, TakeGoldFromCreature(nGoldToTake, oPC, TRUE)); 
 
// Nachrichten, dass Gold und XP abgezogen wurden: 
DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oPC, FALSE)); 
DelayCommand(5.0, FloatingTextStrRefOnCreature(58300, oPC, FALSE));  
 
// nach dem Tod einen Neubeginn ermoeglichen:   
SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 50, oPC); 
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 50, oPC);  
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 99, oPC);  
}  



Du musst dann noch einen Wegpunkt mit der Kennzeichnung WP_PLAYER_RESPAWN in Deinen Wiederauferstehungstempel setzen, fertig.
:EDIT END



Gruß,
Uranochos

PS. Warte nächstes Mal nicht acht Jahre, OK?

--
"Geschichten von der Alten Erde"
Deutschsprachiges Rollenspielprojekt.
-Work-in-progress-
[Externer Link - Bitte einloggen oder registrieren]
alte-erde.spdns.org

Sebwie

Profil anschauen ]

erstellt am 29.11.2012 um 19:10 Uhr eMail schreiben      Zitatantwort        #1836294

Hallo,
da sich hier sehr viele gute skripter geantwortet haben, wollte ich mal fragen ob Ihr mir vielleicht auch helfen könntet?

Gruß

Sebwie
Uranochos

Profil anschauen ]

erstellt am 29.11.2012 um 20:19 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1836311

Äh, hallo, Sebwie,

Wenn Du mal einen Post weiter oben schaust---das SIND genau die Scripte, die Du haben wolltest. Habe ich extra für Dich hier reingestellt. Oder gibt es noch einen anderen Sebwie..?

Alles, was Du tun musst, ist, 1. LESEN; 2. die EventHandler in Deinem Modul ausfindig machen; 3. die beiden Scripttexte oben markieren, mit strg + c kopieren und dann in Dein Modul einfügen (strg + v); 4. den Wegpunkt für die Wiederbelebung in eines Deiner Gebiete setzen.

Hoffe, das kriegst Du hin.

Viel Spaß,
U.

--
"Geschichten von der Alten Erde"
Deutschsprachiges Rollenspielprojekt.
-Work-in-progress-
[Externer Link - Bitte einloggen oder registrieren]
alte-erde.spdns.org

Sebwie

Profil anschauen ]

erstellt am 06.12.2012 um 05:54 Uhr eMail schreiben      Zitatantwort        #1837301

Hallo,
ich sehs gerade, vielen vielen Dank!!!!
Allerdings sterbe ich jetzt in diesem Gebiet und bleibe ohne Auswahlmöglichkeit liegen. Was habe ich falsch gemacht?

LG

Sebwie ^^
Sebwie

Profil anschauen ]

erstellt am 06.12.2012 um 05:59 Uhr eMail schreiben      Zitatantwort        #1837302

PS: Da ich nächste Woche Neueinsteiger an das Spiel bringen möchte, brauchen die Leichen nicht liegen bleiben. ^^
Bei Stufe 1-8 gibt es bei mir keinen Wiederbelebungszauber (oder Zepter, oder ähnliches.). ^^
Sebwie

Profil anschauen ]

erstellt am 06.12.2012 um 06:01 Uhr eMail schreiben      Zitatantwort        #1837303

Und eine Frage hätte ich noch, ich habe das jetzt erst einmal im Tempeldie skripte geändert. Reicht das, oder muss ich das jetzt in jedem der 45 Gebiete machen?? O.o
:-D

Und nochmal Danke! ^^
Uranochos

Profil anschauen ]

erstellt am 06.12.2012 um 14:35 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1837338

@Sebwie:

OK, ich gebs ja zu, Du kannst nichts dafür.

Beim ersten Script fehlt nach der Textnachricht das Semikolon.

Beim zweiten Script gehört die if-Bedingung in den void main()-Teil.
So, habe ich jetzt korrigiert.

Also, noch einmal alles ganz langsam, Schritt für Schritt.

1. Wenn Du diesen Text liest, Deinen Browswer nicht schließen, sondern nur minimieren, wenn Du jetzt Dein Modul im Aurora-Toolset öffnest. Sicherheitskopie Deines Moduls machen!

2. Das Toolset minimieren und wieder zum Browser wechseln, hier weiterlesen. Noch besser: Diese Anleitung ausdrucken!

3. Folgenden Text (=Scriptcode) mit der Maus markieren und mit strg + c in die Zwischenablage kopieren:
//MOD_ON_PLAYER_DEATH 
// 
//#include "x3_inc_horse" //Einkommentieren, falls Du Pferde benutzt 
 
object oPC = GetLastPlayerDied(); 
string sMsg = ("Wollt Ihr auf Hilfe warten oder neu einsteigen? Neu einsteigen kostet eine Strafe an Gold und Erfahrungspunkten."); 
 
void main() 
 
{ 
DelayCommand(3.0, PopUpDeathGUIPanel(oPC, TRUE, TRUE, 0, sMsg)); 
}


4. Wieder den Browser minimieren und Dein Modul maximieren. Im linken Fenster Rechtsklick auf "Skripte", ein neues Script anlegen, der Script-Editor öffnet sich. Den bereits vorhandenen Script-Text mit der Maus markieren, jetzt strg + v drücken: der vorhandene Text wird mit dem Script ersetzt, was Du in der Zwischenablage hast. Speichern unter dem Namen "mod_on_death".

5. Wieder zum Browser wechseln, jetzt den nächsten Script-Text kopieren (strg + c):
//MOD_ON_PLAYER_RESPAWN 
 
 
#include "nw_i0_plot"//Include, damit RemoveEffects funktioniert 
 
//VARIABLEN DEFINIEREN: 
 
object oPC = GetLastRespawnButtonPresser();//Spieler, der zuletzt wiederauferstanden ist 
object oWP = GetWaypointByTag("WP_PLAYER_RESPAWN");//Wegpunkt zur Wiederbelebung 
int nMaxHP = GetMaxHitPoints(oPC);//Lebenspunkte des Spielers ermitteln 
effect eHeal = EffectHeal(nMaxHP);//definieren, wieviele Lebenspunkte wiedergegeben werden sollen 
effect eRes = EffectResurrection();//Auferstehung definieren, damit Aktionen zugewiesen werden können 
effect eVisual = EffectVisualEffect(VFX_FNF_STRIKE_HOLY);//Special-Effect 
 
// XP-ABZUG FESTLEGEN: 
 
int nXP = GetXP(oPC); 
int nPenalty = 30 * GetHitDice(oPC);// 30XP pro Level 
int nHD = GetHitDice(oPC); 
// * You can not lose a level with this respawning 
int nMin = ((nHD * (nHD - 1)) / 2) * 1000; 
int nNewXP = nXP - nPenalty; 
 
 
// GOLD-ABZUG FESTLEGEN: 
 
int nGoldToTake = FloatToInt(0.10 * GetGold(oPC));// 1/10 des Goldes abziehen 
 
 
// HAUPTTEIL: 
 
void main() 
{ 
ClearAllActions(TRUE);//alle laufenden Aktionen und Animationen beenden 
RemoveEffects(oPC);//alle Effekte entfernen 
ApplyEffectToObject(DURATION_TYPE_INSTANT, eRes, oPC);//wiederbeleben 
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC);//heilen 
AssignCommand(oPC,JumpToLocation(GetLocation(oWP)));//zur Location teleportieren 
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPC));//Special-Effect abspielen 
 
// XP abziehen: 
SetXP(oPC, nNewXP); 
if (nNewXP < nMin) 
       nNewXP = nMin; 
 
// Gold abziehen: 
if (nGoldToTake > 10000) 
    { 
    nGoldToTake = 10000;//Maximal 10000 Gold abziehen 
    } 
AssignCommand(oPC, TakeGoldFromCreature(nGoldToTake, oPC, TRUE)); 
 
// Nachrichten, dass Gold und XP abgezogen wurden: 
DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oPC, FALSE)); 
DelayCommand(5.0, FloatingTextStrRefOnCreature(58300, oPC, FALSE)); 
 
// nach dem Tod einen Neubeginn ermoeglichen: 
SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 50, oPC); 
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 50, oPC); 
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 99, oPC); 
}


6. Wieder zum Toolset wechseln, im linken Fenster Rechtsklick auf Scripte, "neu", im Script-Editor den vorhandenen Text markieren und mit strg + v ersetzen durch den Inhalt Deiner Zwischenablage, das so entstandene Script speichern unter dem Namen "mod_on_respawn".

7. Wieder zum Browser wechseln, als nächstes kopieren wir (mit strg + c) folgendes:
//WRAP_ON_DEATH 
// ein Wrapper ist eine einfache Moeglichkeit, Deine eigenen Scripte zustzlich zu denen des Standard-Spiels ausfuehren zu lassen 
 
void main() 
{ 
ExecuteScript("nw_o0_death", OBJECT_SELF); 
ExecuteScript("mod_on_death", OBJECT_SELF); 
}


8. Wieder zum Toolset wechseln, Rechtsklick und "neu" auf "Scripte" im linken Fenster, den vorhandenen Text markieren und mit strg + v durch den Inhalt der Zwischenablage ersetzen. Das Script speichern unter dem Namen "wrap_on_death".

9. Wieder zum Browser wechseln, folgenden Text in die Zwischenablage kopieren:
//WRAP_ON_RESPAWN 
// ein Wrapper ist eine einfache Moeglichkeit, Deine eigenen Scripte zustzlich zu denen des Standard-Spiels ausfuehren zu lassen 
 
void main() 
{ 
ExecuteScript("nw_o0_respawn", OBJECT_SELF); 
ExecuteScript("mod_on_respawn", OBJECT_SELF); 
}


10. Wieder zum Toolset wechseln, Rechtsklick und "neu" auf "Scripte" im linken Fenster, den vorhandenen Text markieren und mit strg + v durch den Inhalt der Zwischenablage ersetzen. Das Script speichern unter dem Namen "wrap_on_respawn".

11. Wenn Du alles richtig gemacht hast, hast Du jetzt im linken Fenster unter "Scripte" vier neue: mod_on_death, mod_on_respawn, wrap_on_death, wrap_on_respawn.

12. Zur Entspannung machen wir jetzt mal den Wegpunkt, an dem die Spieler wieder ins Leben zurückkehren. Aus dem rechten Fenster einen Standard-Wegpunkt nehmen und dorthin platzieren, wo Du willst. Anschliessend die KENNZEICHNUNG ändern in "WP_PLAYER_RESPAWN".

***Verschnaufpause und Modul speichern***

13. In der Menüleiste des Toolsets auf Bearbeiten, dann Modul-Eigenschaften, dann Ereignisse gehen.
Jetzt bist Du im Event Handler des Moduls. Hier werden Spielmechanismen festgelegt, die für das gesamte Modul gelten.

14. Im Event Handler OnPlayerDeath sollte stehen: "nw_o0_death". Wenn da etwas anderes steht, schreibs Dir auf und schick mir eine Nachricht, was da anderes steht!
Wenn da nichts anderes steht, kannst Du weitermachen.

15. Den Inhalt dieser Zeile wieder einmal blau markieren und die Buchstaben "wra" eintippen. Mit der Laufleiste (schwarzer Pfeil nach unten) rechts daneben etwas weiterscrollen, bis Du "wrap_on_death" gefunden hast. Durch Klick wird das in die Zeile übernommen.

16. Etwas weiter unten in der Tabelle sollte im Event Handler OnPlayerRespawn stehen: "nw_o0_respawn". Wenn da etwas anderes steht, schreibs Dir auf und schick mir eine Nachricht, was da anderes steht!
Wenn da nichts anderes steht, kannst Du weitermachen.

17. Den Inhalt dieser Zeile wieder einmal blau markieren und die Buchstaben "wra" eintippen. Mit der Laufleiste rechts daneben scrollen, bis Du diesmal "wrap_on_respawn" gefunden hast (es steht direkt unter "wrap_on_death"). Durch Klick wird das in die Zeile übernommen. Anschließend unten im Fenster auf "OK" klicken. Modul speichern.

18. Wenn Du bisher vom Toolset keine Fehlermeldung bekommen hast, hast Du es so gut wie geschafft.
Wenn Du Fehlermeldungen bekommst, schick mir eine Nachricht!

Jetzt brauchst Du noch zum Testen einen starken Feind, der Dich probehalber ins Jenseits schickt.

In der Menüleiste des Toolsets oben auf "Erstellen" klicken, weiter zu "Modul erstellen". Im sich öffnenden Fenster muss das Häkchen rechts oben bei "Kompilieren" gesetzt sein. Auf "Erstellen" klicken. Durchlauf abwarten, der hoffentlich ohne Fehler abläuft. Modul speichern, ausprobieren, fertig!

Ich hoffe, jetzt funktioniert es.
Falls nicht, schick mir eine PM.

Uranochos

--
"Geschichten von der Alten Erde"
Deutschsprachiges Rollenspielprojekt.
-Work-in-progress-
[Externer Link - Bitte einloggen oder registrieren]
alte-erde.spdns.org

Sebwie

Profil anschauen ]

erstellt am 07.12.2012 um 02:48 Uhr eMail schreiben      Zitatantwort        #1837498

Vielen Dank. ^^

Habe dir bereits geschrieben! ;-)

LG

Sebwie
Seite: 1
Druckansicht   Thema: [RQ] Teleport in ein Gebiet wenn man stirbt?  
[ ANTWORTEN ]

[RPG]Board Neverwinter Nights NWN Scripting

  


[RPG]Board 1.94.01 wird betrieben von Sebastian "Pandur" Olle.
Programmiert von Andreas "Monti" Bytzek.
Nutzungsbedingungen / Impressum / Haftungsausschluss / Datenschutz
Scriptlaufzeit: 0.27 sec