La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 20:08:35


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Hyolanric
Novice
Inscrit le: 14 Jan 2006
Messages: 8
Répondre en citant
Posté le : 16/01/2006 11:43:55 Sujet du message : Respawn et "sac à cadavre"

Bonjour à tous,

Voilà je ne script que depuis octobre 2005, et je commencerais à vous remercier car j'ai considérablement progresser dans ce domaine grâce à vos posts.

Jusqu'ici, j'ai toujours réussi à trouver la réponse dans les scripts proposés, quelquefois après de longues heures de recherches, mais là je suis ennuyé depuis une bonne semaine avec deux scripts de resapawn que je n'arrive pas à associer.

Le premier est celui-ci : script de respawn avec perte d'XP et PO ramenant à un point de respawn/alignement


NWScript :

////////////////////////////// ////////////////////////////// ////////////////////
/////Script de BlamReconstruit par Fed et fini par Kemay////
////////////////////////////// ////////////////////////////// ////////////////////
/////Objet: Rappel dans les temples correspondants a l'alignement du joueur/////
/////Date : 10 /08/2002////////////////////// ////////////////////////////// /////
////////////////////////////// ////////////////////////////// ////////////////////

#include "nw_i0_plot"

// * Applies an XP and GP penalty
// * to the player respawning
void ApplyPenalty(object oDead)
{
    int nXP = GetXP(oDead);
    int nPenalty = 50 * GetHitDice(oDead);
    int nHD = GetHitDice(oDead);
    // * 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;
    SetXP(oDead, nNewXP);
    int nGoldToTake = FloatToInt(0.10 * GetGold(oDead));
    // * a cap of 10 000gp taken from you
    if (nGoldToTake > 10000)
    {
        nGoldToTake = 10000;
    }
    AssignCommand(oDead, TakeGoldFromCreature(nGoldToTake, oDead, TRUE));
    DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oDead, FALSE));
    DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oDead, FALSE));

}

void main()
{

object oRespawner = GetLastRespawnButtonPresser();
int nAlignementLawChaos = GetAlignmentLawChaos(oRespawner);
int nAlignementGoodEvil = GetAlignmentGoodEvil(oRespawner);


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


// Return PC to respawn point based on alignement.

string sDestTag = "WP_";

switch (nAlignementLawChaos)
{
case ALIGNMENT_CHAOTIC:
sDestTag = sDestTag + "CHAOTIC_";
break;

case ALIGNMENT_NEUTRAL:
sDestTag = sDestTag + "NEUTRAL_";
break;

case ALIGNMENT_LAWFUL:
sDestTag = sDestTag + "LAWFUL_";
break;
}

switch (nAlignementGoodEvil)
{
case ALIGNMENT_GOOD:
sDestTag = sDestTag + "GOOD";
break;

case ALIGNMENT_NEUTRAL:
sDestTag = sDestTag + "NEUTRAL";
break;

case ALIGNMENT_EVIL:
sDestTag = sDestTag + "EVIL";
break;
}

// Apply any penalties.
ApplyPenalty(oRespawner);

object oDest = GetWaypointByTag(sDestTag);

// si le waypoint de destination n'existe pas
if (!GetIsObjectValid(oDest))
{
// utilise le waypoint par defaut
oDest = GetWaypointByTag("Resp001");
}

if (GetIsObjectValid(oDest))
{

SetLocalLocation(oRespawner, "NW_L_I_DIED_HERE", GetLocation(oRespawner));
SetLocalInt(oRespawner, "NW_L_I_DIED", 1);
AssignCommand(oRespawner,JumpToLocation(GetLocation(oDest)));
}
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.



le deuxième est celui-ci : script "cad_onrespawn" à mettre avec le script que j'ai eu avec le "sac à cadavre" de Kemo (merci à lui au passage)

NWScript :

void main()
{
object oPC = GetExitingObject();
// sac a cadavre
if (GetLocalInt(oPC, "cadavre") == 1)
// le PJ est dans le sac a cadavre
{
object oCad = GetLocalObject(oPC, "cadavre");
ExecuteScript("cad_raz", oCad);
DestroyObject(GetLocalObject(oCad, "corps"));
SendMessageToPC(GetLocalObject(oPC, "cadavre"), "Le cadavre que vous portiez s'est deconnectee");
}
if (GetLocalInt(oPC, "cadavre") == 2)
// le PJ porte un cadavre
{
object oCad = GetLocalObject(oPC, "cadavre");
ExecuteScript("cad_raz", oCad);
DestroyObject(GetLocalObject(oCad, "corps"));
SendMessageToPC(oCad, "La personne qui vous portait s'est deconnectee");
ExecuteScript("_respawn", oCad);
}
// fin sac
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


le problème rencontré quand je les associe est :
Code :
16/01/06 11:38:18 : Erreur. 'lodoss_resp_7' n'est pas compilé.
lodoss_resp_7.nss: ERREUR : DUPLICATE FUNCTION IMPLEMENTATION (main)


quand je retire le voidmain() :sur une acolade que je retire
Code :
16/01/06 11:39:16 : Erreur. 'lodoss_resp_7' n'est pas compilé.
lodoss_resp_7.nss(105): ERREUR : INVALID DECLARATION TYPE


je retire l'accolade est j'ai ce message sur :if (GetLocalInt(oPC, "cadavre") == 1)
Code :
16/01/06 11:40:11 : Erreur. 'lodoss_resp_7' n'est pas compilé.
lodoss_resp_7.nss(108): ERREUR : INVALID DECLARATION TYPE


Or là je ne dois pas le retirer, alors si quelqu'un verrait mieux que moi ce qu'il y a lieu de corriger, ça serait super.

D'avance merci.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 17/01/2006 13:27:29 Sujet du message :

Bonjour, pour une implémentation complète du sac à cadavre tu en trouveras une dans la version 6.67 du bouchon lyonnais qui lui est un module publié.
Tu pourras en trouver une version ici
Les haks sont là :
http://nwn.twiny.org/viewtopic.php?t=13216
le BL_Ren_Mini16 doit être renommé en BL_Ren_Mini14
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mage Blanc
Voyageur
Inscrit le: 28 Jan 2008
Messages: 4
Répondre en citant
Posté le : 28/01/2008 17:37:44 Sujet du message :

Bonjour !

Voilà j'utilise le sac à cadavre et un script de respawn classique lorsqu'un Pj est seul et n'a pas d'autre choix.
Lorsque le pj mort respawn de la facon classique il peut deco et revenir et son respawn est pris ne compte.
Par contre lorsque c'est un pretre pnj qui le respwan, son respawn n'est pas pris en compte lors de sa prochaine connexion...
(script : 1je pose mon compagnon au sol 2je parle au pretre pour qu'il le soigne et 3celui ci le rez)

Pourquoi ? est ce que j'ai mal instalé le script ?

Si quelqu'un à une reponse merci d'avance !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 29/01/2008 00:00:06 Sujet du message :

C'est du script, je déplace dans le bon forum.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline
Répondre en citant
Posté le : 01/02/2008 08:23:52 Sujet du message :

Quelqu'un peut il poster son script compilé svp ? Le mien ne marche pas et pourtant j'ai suivi vos instructions a la lettre !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 44.272ms