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 22:51:54


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
mum's
Novice
Inscrit le: 07 Fév 2006
Messages: 15
Répondre en citant
Posté le : 15/02/2006 18:44:40 Sujet du message : deco-reco-respawn!!

Bon voila mon problème:

En cherhcant sur les forums nombre de sujets concernent egalement ce probleme, celui qui fait respawn un pj mort rienque en deco-reco. J'ai essayé plusieurs scripts mais je ne trouve pas celui qui permet de fairemourir un perso a la connection s'il possède un item (qui aura été obtenu à la mort du pj). Pouvez-vous m'aider?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
aklyord
Novice
Inscrit le: 03 Jan 2006
Messages: 11
Répondre en citant
Posté le : 16/02/2006 03:02:01 Sujet du message :

met ca dans le onCliententer de ton module

NWScript :

//tue un pj mort
  object oMort = GetItemPossessedBy(oPC,"ICI LE TAG DE L OBJET");
  if(oMort != OBJECT_INVALID)
        {
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(TRUE, TRUE), oPC);
        DestroyObject(oMort);
        }

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.


sinon avec plus de truck :
NWScript :

void CreateIfNeeded(object oPC, string sTag, string sRes)
    {
    if (GetItemPossessedBy(oPC, sTag)==OBJECT_INVALID)
        CreateItemOnObject(sRes, oPC);
    }

// fonction creation outils DM
    void CreateDMTools(object oPC)
    {
    SendMessageToPC( oPC, "MESSAGE A TES MD");
    CreateIfNeeded( oPC, "BatonBM", "batonbm"); // Reloader
    CreateIfNeeded( oPC, "DMsHelper", "dmshelper"); //
        }

void main()
{

    object oPC = GetEnteringObject();
    string sIPName = GetPCIPAddress(oPC);
    string sCDKey = GetPCPublicCDKey(oPC);
    string sPlayerName = GetPCPlayerName(oPC);
    string sName = GetName(oPC);
    int nXP = GetXP(oPC);
    string sLvl = IntToString(GetHitDice(oPC));
    string sXP = IntToString(nXP);
    string PCKey = "(CDkey:"+sCDKey+") ";
    string VarNameBAN = sCDKey+"_BAN";

//log
    if (GetLocalInt(GetModule(),VarNameBAN) || GetLocalInt(GetModule(), sName+VarNameBAN)) // Banni par un DM online -> ejecte (jusqu'au prochain demarrage)
        {
        WriteTimestampedLogEntry("[ClientEnter]"+sName+PCKey+" n'a pas pu entrer (BAN) !");
        BootPC(oPC);
        return;
        }

  if (GetIsDM (oPC))
        {
        SendMessageToPC(oPC,"MESSAGE AU MD");
        CreateDMTools (oPC);
        SetLocalInt(oPC, "mod_initpc", 1);
        //WriteTimestampedLogEntry(&qu ot;[Entree_MD] ["+sPlayerName+"] ["+sName+"] ["+sIPName+"] ["+sCDKey+"] ["+sLvl+"] ["+sXP+"]");
        return;
        }

        {

  object oPC = GetEnteringObject();
  if (GetPCPlayerName(oPC)=="")
        {
        WriteTimestampedLogEntry("[ClientEnter] Nouveau perso invalide -> BootPC");
        BootPC(oPC);
        return;
        }




WriteTimestampedLogEntry("[Entree_Joueur] ["+sPlayerName+"] ["+sName+"] ["+sIPName+"] ["+sCDKey+"] ["+sLvl+"] ["+sXP+"]");

//tue un pj mort
  object oMort = GetItemPossessedBy(oPC,"ICI LE TAG DE L OBJET");
  if(oMort != OBJECT_INVALID)
        {
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(TRUE, TRUE), oPC);
        DestroyObject(oMort);
        }
        {
object oPC = GetEnteringObject();

if (!GetIsDM (oPC) && GetXP(oPC) == 0)
{
  GiveXPToCreature(oPC, 5000);
  GiveGoldToCreature(oPC, 100000 - GetGold(oPC));
}
}
}
}


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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
mum's
Novice
Inscrit le: 07 Fév 2006
Messages: 15
Répondre en citant
Posté le : 16/02/2006 12:04:37 Sujet du message :

Ok merci pour tout mais en fait j'ai un probleme pour creer le script quand le pj meurt, theoriquement je rajoute un script dans le ondeath qui cree mon item de mort qd le pj meurt mais au fait c'est quoi ce script?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
aklyord
Novice
Inscrit le: 03 Jan 2006
Messages: 11
Répondre en citant
Posté le : 16/02/2006 19:40:40 Sujet du message :

NWScript :
void Raise(object oPlayer)
{
        effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION);

        effect eBad = GetFirstEffect(oPlayer);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer);
        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));
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer);
}

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

    // * make friendly to Each of the 3 common factions
    AssignCommand(oPlayer, ClearAllActions());

    // * Note: waiting for Sophia to make SetStandardFactionReptuation to clear all personal reputation
    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);
    }
    /*  Le desarmement a la mort du joueur
    int oLev = GetHitDice(oPlayer);
    if (d20(1)+ oLev &gt; 20 )
        {
        object oArme = GetItemInSlot(INVENTORY_SLOT_R IGHTHAND, oPlayer);
        location oLoc = GetLocation(oPlayer);
        if (oArme!= OBJECT_INVALID)
            {
            object oDrop = CreateObject(OBJECT_TYPE_PLACE ABLE,"plc_lootbag1", oLoc);
            //object oDrop = GetNearestObjectToLocation(OBJ ECT_TYPE_PLACEABLE,oLoc);
            AssignCommand(oDrop, ActionTakeItem(oArme, oPlayer));
            }
        }
    */


    //donne une carte de mort
    CreateItemOnObject("TAG DE L OBJET A DONNER", oPlayer);

    //stop bleeding ynot
    DeleteLocalInt(oPlayer, "BLEED_STATUS");
    AssignCommand(oPlayer, ClearAllActions());

    // retour au deroulement normal
    DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH));

}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 951
Répondre en citant
Posté le : 16/02/2006 20:25:44 Sujet du message :

cliquer sur " rechercher " , forum -> scripts , mot clé : mort

Résultat = [http]

La solution proposée te permet de ne pas encombrer l'inventaire du joueur avec un item dont il n'a rien a faire , et ça marche aussi bien !
_________________
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-Nog-
Chevalier
Inscrit le: 25 Jan 2006
Messages: 81
Répondre en citant
Posté le : 17/02/2006 09:41:15 Sujet du message :

bonjour a vous
moi je voudrais faire comme le serveur Terre d'espoir en persistant role cest a dire que quand on a plus de point de vie on s'evanouie et toute les 5 secondes on perds de la vie jusqua -10, durant ce temps la on peu etre rammené a la vie avec un sort de soin, apres il faut un rez... donc il faudrais le meme systeme anti deco reco mais avec ça en plus si vous pouviez essayer ce serais sympa
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Harmelyo
Chevalier
Inscrit le: 06 Oct 2005
Messages: 84
Répondre en citant
Posté le : 17/02/2006 11:54:42 Sujet du message :

Sans vouloir etre vexant. On vient d'expliquer qu'une petite recherche permettait de répondre à bien des questions. Dans le cas présent, ce système de mort est un classique (si j'ose dire), un petit tour sur la fonction recherche ou même sur le Vault pourrait bien apporter une réponse satisfaisante.

Et encore une fois, ce n'est pas un self service du Script Smile
 
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 : 21/02/2006 13:20:32 Sujet du message :

Bah c'est déjà fait en ce qui me concerne

Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

//:: ly_lib_time.nss
int ly_day()
{
    int iCTY = GetCalendarYear() ;
    int iCTM = GetCalendarMonth() ;
    int iCTD = GetCalendarDay() ;
    int iCDay = iCTY*12*28 + iCTM*28 + iCTD ;
    return iCDay ;
}

int ly_time()
{
    // Bug Minutes &amp; Secondes ...
    // 3 minutes/heures =&gt; 1h RP &lt;=&gt; 180 sec IRL
    int iTH = GetTimeHour();
    int iTM = GetTimeMinute();
    int iTS = GetTimeSecond();
    int iCTime = FloatToInt(HoursToSeconds(iTH)) + iTM*60 + iTS ;
    return iCTime ;
}

void ly_grant_rest(object oPC)
{
//
// Init du repos et mort
    SetLocalInt(oPC, "PC_LastRest", ly_time()-540);
    SetLocalInt(oPC, "PC_LastDayRest", ly_day());
    SetLocalInt(oPC, "DyingHP", -1);
    SendMessageToPC(oPC, "Vous pouvez vous reposer pour recuperer." ) ;
}

void ly_anti_deco(object oPC) {
  if (!GetIsDM (oPC)) {
  // don't let players to cheat deco/reco
      talent tFeat, tSpell;
      int nIndex, i, nTalentID;
      for (nIndex=1; nIndex<1000; nIndex++) {
        tFeat = TalentFeat (nIndex);
        tSpell = TalentSpell(nIndex);
        if (GetIsTalentValid(tFeat)) {
            nTalentID = GetIdFromTalent(tFeat);
            for (i=1; i<40; i++) {
              DecrementRemainingFeatUses(oPC, nTalentID);
              if (!GetHasFeat(nTalentID, oPC)) i = 40;
            }
        }
        if (GetIsTalentValid(tSpell)) {
            nTalentID = GetIdFromTalent(tSpell);
            for (i=1; i<40; i++) {
              DecrementRemainingSpellUses(oPC, nTalentID);
              if (!GetHasSpell(nTalentID, oPC)) i = 40;
            }
        }
      }
      SendMessageToPC(oPC, "Sorts et Dons desactives : vous devez vous reposez pour recuperer." ) ;
  // end cheating section
  }
}

// void main() {}
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.


Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

//:: ly_lib_death.nss
//:: ////////////////////////////
//:: // update lylver 2005-04-03
//:: // optimisation de code dans les
//:: // recherches d'objets par Tag
//:: // externalisation de la commande DestroyObject
//:: // dans une sous-fonction pour effet effectif en retour de l'appel
//:: // tsss sale bug
//:: ////////////////////////////

int MustHaveNoItem(object oPC, string sObjectTag) {
  int iNbItem=0;
  object oItem = GetFirstItemInInventory(oPC);
  while( GetIsObjectValid(oItem) ){
      if( GetTag(oItem) == sObjectTag ){
        iNbItem += GetNumStackedItems(oItem);
        DestroyObject(oItem);
      }
      oItem = GetNextItemInInventory(oPC);
  }
  return iNbItem;
}

void CleanDeathCard(object oDead) { // wrapper
// Gestion des cartes de mort
  if( GetItemPossessedBy(oDead, "mortNODROP") != OBJECT_INVALID ){
      MustHaveNoItem(oDead,"mortNODROP");
  }
}
// end carte mort

void CleanAgoCard(object oDead) {
// Gestion des cartes d'agonie
  if( GetItemPossessedBy(oDead, "agoNODROP") != OBJECT_INVALID ){
      MustHaveNoItem(oDead,"agoNODROP");
  }
}
// end carte agonie

void GiveDeathCard(object oPC) {
  // donne une carte de mort pour la deco et une variable d'etat
  string sCarte = "mortNODROP", sRef = "mortnodrop" ;
  if( GetItemPossessedBy(oPC, sCarte) == OBJECT_INVALID )
      CreateItemOnObject(sRef, oPC, 1);
}

void GiveAgoCard(object oPC) {
  // donne une carte d'agonie pour la deco et une variable d'etat
  string sCarte = "agoNODROP", sRef = "agonodrop" ;
  if( GetItemPossessedBy(oPC, sCarte) == OBJECT_INVALID )
      CreateItemOnObject(sRef, oPC, 1);
}

int ChkDeathCard(object oPC) {
// Gestion des cartes de mort
  int nCard = 0 ;
  if( GetItemPossessedBy(oPC, "mortNODROP") != OBJECT_INVALID ){
      nCard = MustHaveNoItem(oPC,"mortNODROP");
  }
  if( nCard>0 ) ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),oPC);
// end carte mort
  return nCard ;
}

int ChkAgoCard(object oPC) {
// Gestion des cartes d'agonie
  int nCard = 0 ;
  if( GetItemPossessedBy(oPC, "agoNODROP") != OBJECT_INVALID ){
      nCard = MustHaveNoItem(oPC,"agoNODROP");
  }
  if( nCard>0 ){
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectMovementSpeedDecrease(75),oPC,60.0);
  ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectAbilityDecrease(ABILITY_CONSTITUTION, 1),oPC);
  }
// end carte agonie
  return nCard ;
}

void ChkAgoSpeed(object oPC) {
// Gestion des cartes d'agonie
  if( GetItemPossessedBy(oPC, "agoNODROP") != OBJECT_INVALID ){
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectMovementSpeedDecrease(75),oPC,60.0);
  }
// end carte agonie
}

// void main(){}
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.


Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

//:: tn_mod_o0_dying.nss
//:: ////////////////////////////// /////////////////
//:: Lylver 2004-12-15
//:: pour SoW : agonie
//:: ////////////////////////////// /////////////////
//:: Dying Script
//:: NW_O0_DEATH.NSS
//:: Copyright (c) 2001 Bioware Corp.
//:: ////////////////////////////// ////////////////
/*
    This script handles the default behavior
    that occurs when a player is dying.
    DEFAULT CAMPAIGN: player dies automatically
*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Brent Knowles
//:: Created On: November 6, 2001
//:Confused///////////////////////// ////////////////////
//:: Updated On: 2004-04_19
//:: Updated By : Lylver
//:: Based on Henson Gallian Asmodee
//:: Player agonies
//
//#include "ly_aps_include"
//:: Update : 2005-01-24 : Lylver

#include "nw_i0_spells"
#include "ly_lib_death"

//Nombre de PV perdus par round
int nAgonie = 1;
// Seuil Bas avant de mourrir
int nDEATHDOOR = -9;
//Delai en secondes entre la perte de PV (6.0 = 1 round)
float fDelai = 6.0;
//DC du Jet de Vigueur permettant de se stabiliser
int nDCFort = 13;
//% de chance d'etre stabilise (entre 1 et 10; 10=100%)
int nStab = 1;

void LoopDying(object oDying) {
// divers tests : grop coup =&gt; si suis deja dans le script de mort : retour
  if( GetLocalInt(oDying,"BLOKE_PC_MORT") == 1 ){
      // SendMessageToPC(oDying, "Exit Agonie : BLOKE_PC_MORT=1");
      return ;
  }
// si je suis deja passe par OnDeath annule et retour
  if( GetLocalInt(oDying,"BLOKE_PC_AGO")==2 ){
      // SendMessageToPC(oDying, "Exit Agonie : BLOKE_PC_AGO=2");
      return ;
  }
/* eventuellement restore les PVs perdus dus a la bataille qui continue */
/* considerant agonie independante des dommages */
/* possibilite de KO */
  int nPv=0 ; // compteur independant des fluctuations
  int CurHP = GetCurrentHitPoints(oDying);
  int DyingHP = GetLocalInt(oDying, "DyingHP");
  int nBonusCon = GetAbilityModifier(ABILITY_CONSTITUTION, oDying);
  int bAgo = (GetLocalInt(oDying,"BLOKE_PC_AGO")==1) ? TRUE : FALSE ;
// maj compteur independant des fluctuations
  if (CurHP<=0) nPv = DyingHP; else nPv=CurHP;
// statut calcule
// reprise du cours normal de l'agonie : agonie ou mort
  if( bAgo ){
      // SendMessageToPC(oDying, "Boucle Agonie : Test Pvs");
      if( nPv>=nDEATHDOOR ){
        FloatingTextStringOnCreature("Agonisant" ,oDying);
      } else { // nPv&lt;nDEATHDOOR
  // Test si on depasse l'endurance du PJ
        effect eMort = EffectDeath(FALSE, FALSE);
        SpeakString("Vous etes mort.");
        // Remise a zero pour mort future
        SetLocalInt(oDying,"DyingHP", -1);
        DeleteLocalInt(oDying,"BLOKE_PC_AGO");
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eMort, oDying);
        return;
      }
  } else { // (!bAgo)
// Reprise de la conscience : stabilise et positif
      // SendMessageToPC(oDying, "Fin Agonie : Mise au minimum a 1 Pv");
      if( nPv >= 0 ){
      // Remise a zero pour mort future
        DeleteLocalInt(oDying,"DyingHP");
        DeleteLocalInt(oDying,"BLOKE_PC_AGO");
        SendMessageToPC(oDying, "Vous etes sauf.") ;
        if (CurHP<=0) {
            effect eStabilise = EffectHeal(1-GetCurrentHitPoints(oDying));
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eStabilise, oDying);
        }
        PlayVoiceChat(VOICE_CHAT_LAUGH, oDying);
        AssignCommand(oDying, ClearAllActions());
      // Gestion des cartes de mort
        CleanDeathCard(oDying);
        ChkAgoSpeed(oDying) ;
      // end carte mort
  // pas sur avoir besoin
        effect eRaise = EffectResurrection() ;
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oDying);
        return;
      } else { // nPv &lt; 0
        // nouvelle blessure reblocage (effet saignement ?)
        SetLocalInt(oDying,"BLOKE_PC_AGO",1);
        SendMessageToAllDMs("Cas d'agonie bizarre : ajuste") ;
      }
  }
// perte ou stable ?
  nAgonie = (nPv<0) ? 1 : 0 ;
  // SendMessageToPC(oDying, "Boucle Agonie : perte ou non de Pvs");
  // mise a jour : perte ou stable
  SetLocalInt(oDying,"DyingHP",nPv-nAgonie);
// KO ou en train de mourir, test de recuperation
  // JS Fortitude
  int nStvig = FortitudeSave(oDying, nDCFort,SAVING_THROW_TYPE_DIVINE);
  int nChanceStab;
  switch(nStvig) {
      case 0:
        nChanceStab = 11; // Aucune chance si JS Fortitude rate
      break;
      case 1:
        nChanceStab = d10(1);
      break;
      case 2:
        nChanceStab = 0; // Immortel
      break;
      default:
        nChanceStab = 11;
      break;
  }
//
// deux cas de sortie : chance ou soins exterieurs
//
  // SendMessageToPC(oDying, "Boucle Agonie : possibilite de retour a la conscience.");
  if (nChanceStab <= nStab) { // chance : ramene a 0 : attendre encore 6 secondes de KO
      if (nPv<0) SendMessageToPC(oDying, "Vous luttez pour survivre");
      else SendMessageToPC(oDying, "Vous reprenez connaissance."); // parfois debout avant le message
      SetLocalInt(oDying,"BLOKE_PC_AGO",0);
      SetLocalInt(oDying,"DyingHP",0);
      if (CurHP<0) {
        effect eStabilise = EffectHeal(-CurHP);
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eStabilise, oDying); // reste a 0 KO
      } else ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oDying,5.9);
      // force le KO qq secondes
      // La mort s'eloigne
  } else {
      if (nPv<0) {
        SendMessageToPC(oDying, "La mort approche.");
        if (d3() == 1) PlayVoiceChat(VOICE_CHAT_NEARDEATH, oDying);
      } else { // soins exterieurs
//        SendMessageToPC(oDying, "Le dernier choc vous fait encore mal.");
      // Remise a zero pour mort future
        SetLocalInt(oDying,"DyingHP", 0);
        SetLocalInt(oDying,"BLOKE_PC_AGO",0);
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oDying,5.9);
      }
  }
  DelayCommand(fDelai, LoopDying(oDying));
}

void CheckDying(object oDying) {
// si suis deja dans le script : retour
  if (GetLocalInt(oDying,"BLOKE_PC_AGO")!=0) return ;
// marqueur d'entree dans le script
  SetLocalInt(oDying,"BLOKE_PC_AGO",1);
  GiveAgoCard(oDying) ;
  // Initialisation temps d'agonie : de -1 a -9
  SetLocalInt(oDying,"DyingHP", -1);
// divers tests : gros coup =&gt; si suis deja dans le script de mort : retour
  if( GetLocalInt(oDying,"BLOKE_PC_MORT") == 1 ){
      // SendMessageToPC(oDying, "Test Agonie : de script de mort deja execute");
      return ;
  }
// au cas ou Pv&lt;=-10 le script OnPlayerDeath gere normalement
// mais les deux scripts peuvent etre legerement decales : on renvoie la-bas
  if (GetCurrentHitPoints(oDying) <= -10) {
      //donne une carte de mort
      FloatingTextStringOnCreature("Mort", oDying) ;
      ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(FALSE,FALSE), oDying);
      return ;
  }
// contre les gens qui deco en ago
  GiveDeathCard(oDying) ;
//  ChkAgoCard(oDying) ; oups... -1 constit ca tue
//
  PlayVoiceChat(VOICE_CHAT_HEALME, oDying);
//  AssignCommand(oDying, ClearAllActions());
  AssignCommand(GetLastDamager(oDying), ClearAllActions(TRUE));
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectEthereal(), oDying, fDelai);
// agonie
  DelayCommand(fDelai, LoopDying(oDying));
}

void main()
{
  object oDying = GetLastPlayerDying();
  // desynchroniser dying et death
  DelayCommand(2.0,CheckDying(oDying)) ;
  RemoveSpecificEffect(EFFECT_TYPE_POLYMORPH,oDying) ;
}
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.


Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

//:: tn_mod_o0_death.nss
//:: ////////////////////////////// /////////////////
//:: Lylver 2005-01-08
//:: modification de la remise a neutre des reputations
//:: envers les factions
//:: probleme possible de reputation personnelle
//:: ////////////////////////////// /////////////////
//:: Lylver 2004-12-15
//:: pour SoW : agonie
//:: ////////////////////////////// /////////////////
//:: Death Script
//:: NW_O0_DEATH.NSS
//:: Copyright (c) 2001 Bioware Corp.
//:: ////////////////////////////// ////////////////
/*
    This script handles the default behavior
    that occurs when a player dies.

    BK: October 8 2002: Overriden for Expansion
*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Brent Knowles
//:: Created On: November 6, 2001
//:Confused///////////////////////// ////////////////////
#include "ly_lib_death"

void main()
{
  object oDead = GetLastPlayerDied();
  location lDead = GetLocation(oDead) ;
  object oKiller = GetLastKiller();
  // marqueur d'entree dans le script
  if( GetCurrentHitPoints(oDead) <= -10 ){
      SetLocalInt(oDead,"BLOKE_PC_MORT",1);
      // SendMessageToPC(oDead, "OnDeath Pv&lt;=-10 : dead");
  } else {
      SendMessageToPC(oDead, "OnDeath Event Bogus : exiting");
      DeleteLocalInt(oDead,"BLOKE_PC_MORT");
      return ;
  }
  // si on est dans la boucle d'agonie, mettre un flag pour forcer la sortie
  // ou empecher son deroulement
  SetLocalInt(oDead,"BLOKE_PC_AGO",2);
  // donne une carte de mort pour la deco et une variable d'etat
  GiveDeathCard(oDead) ;
  // * make friendly to Each of the 3 common factions
//  AssignCommand(oDead, ClearAllActions());
  // * Note: waiting for Sophia to make SetStandardFactionReptuation to clear all personal reputation
  // Lylver : modification de reputation personnelle a faire le cas echeant.
  if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oDead) < 50)
  { SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 50, oDead);
  }
  if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oDead) < 50)
  { SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 50, oDead);
  }
  if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oDead) < 50)
  { SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 50, oDead);
  }
  ClearPersonalReputation(oDead,oKiller) ; // permanent en cas de mort
  ClearPersonalReputation(oKiller,oDead) ; // simultanee et respawn
      // ceux qui ont vu le deces perdent leur inimitie personnelle
      // envers le mort, l'amitie reste.
  object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 40.0f, lDead);
  while (GetIsObjectValid(oTarget)) {
      if(!GetIsReactionTypeFriendly(oTarget)) {
        ClearPersonalReputation(oDead,oTarget) ;
        ClearPersonalReputation(oTarget,oDead) ;
      }
      // creature suivante dans un rayon de 4 tiles
      oTarget = GetNextObjectInShape(SHAPE_SPHERE, 40.0f, lDead);
  }
  DelayCommand(2.5, PopUpGUIPanel(oDead,GUI_PANEL_PLAYER_DEATH));
}
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.


Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

//:: tn_mod_o0_respaw.nss
//:: ////////////////////////////// /////////////////
//:: Generic On Pressed Respawn Button
//:: Copyright (c) 2001 Bioware Corp.
//:: ////////////////////////////// ////////////////
/*
// * June 1: moved RestoreEffects into plot include
*/

//:: ////////////////////////////// ////////////////
//:: Created By:  Brent
//:: Created On:  November
//:Confused///////////////////////// ////////////////////
#include "nw_i0_plot"
#include "ly_lib_time"
void main()
{
    object oRespawner = GetLastRespawnButtonPresser();
    ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
    ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
    RemoveEffects(oRespawner);
    //* Return PC to temple
    // * destroy death item : mort
    // * Applies an XP and GP penalty to level &gt;3
    // * to the player respawning

    DestroyObject( GetItemPossessedBy(oRespawner,"mortNODROP"));
    DeleteLocalInt(oRespawner,"BLOKE_PC_MORT");
    DeleteLocalInt(oRespawner,"BLOKE_PC_AGO");

if ( GetHitDice(oRespawner)!= 1 )
    {
        int nXP = GetXP(oRespawner);
        int nLvl ;
        int nPenalty = 50 * GetHitDice(oRespawner);
        int nHD = GetHitDice(oRespawner);
        // total level
        // * 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;
            }
        nLvl=GetHitDice(oRespawner);
//        SendMessageToPC(oRespawner,&qu ot;Vous etes lvl " + IntToString(nLvl));
        if(nLvl>3)
        {
            SetXP(oRespawner, nNewXP);
            int nGoldToTake = FloatToInt(0.10 * GetGold(oRespawner));
            // * a cap of 10 000gp taken from you
            if (nGoldToTake > 50000)
            {
                nGoldToTake = 50000;
            }
            AssignCommand(oRespawner, TakeGoldFromCreature(nGoldToTake, oRespawner, TRUE));
            DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oRespawner, FALSE));
            DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oRespawner, FALSE));
        }
    }



    object oSpawnPoint = GetObjectByTag("NW_DEATH_TEMPLE");
    AssignCommand(oRespawner,JumpToLocation(GetLocation(oSpawnPoint)));
    ly_grant_rest(oRespawner) ;
}
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.


Note : il faut également modifier les sorts rappel à la vie et résurrection pour qu'ils suppriment la carte de mort (mortNODROP) et la carte d'agonie (agoNODROP)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé 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 160.711ms