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 16:16:58


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
zogzog59
Grand Chevalier
Inscrit le: 16 Jan 2005
Messages: 123
Répondre en citant
Posté le : 24/01/2005 14:50:15 Sujet du message : script de rez et de repos

re bonjour lol....

je voudrai limité les repos pour pas que l'on se repose tout les 30 s et pour plus de realité que les repos s'effectus uniquement ds une tente une auberge etc...

qui seront definit par un "waypoint"

es-ce possible?

est la deuxieme question

personne n'aurrai ûn script de respawn
car quand on meurt on respawn a l'endroit ou l'on ai mort .
.
dc un script de respawn ou l'on rez a un endroit precit!

et si possible un "rez" a un endroit en fonction de la race Confused
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 24/01/2005 19:29:16 Sujet du message :

Salut,

Pour le respawn, voici le script présent dans le module « Dragon noir » créé par Konrad (Un excellent module). Tu devrais pouvoir te débrouiller avec quelques manips.
NWScript :
//:Confused///////////////////////// ////////////////////
//:: Created By:  Konrad
//:: Created On:  30/11/02
//:: Dragon Noir, l'Exil.
//:Confused///////////////////////// ////////////////////
#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()
{

    //* Return PC to Zacharie


    object oRespawner = GetLastRespawnButtonPresser();
    string sDestTag = "dnrespawn1";
    string sArea = GetTag(GetArea(oRespawner));
    int iNewvie = GetLocalInt(oRespawner,"vie")-1;
    /*
      Indication du point de Respawn en fonction de la zone
    */


    if (sArea == "ArKIrissLechteauenruineExtrieur" ||
    sArea == "ArKIrissLacabaneduGnome" ||
    sArea == "ArKIrissLebosquetbrumeux" ||
    sArea == "ArKIrissLeportail" ||
    sArea == "ArKIrissLechteauenruineIntrieur")
    {
        sDestTag = "dnrespawn1";
    }
    else
    {
      if (sArea == "ArKIrissLeplandecombat" ||
      sArea == "ArKIrissLacroisedeschemins" ||
      sArea == "ArKIrissLaFortdePnradLaclairires" ||
      sArea == "ArKIrissLaFortdePnradLevillagede" ||
      sArea == "ArKIrissLaFortdePnradLeVillageEl" ||
      sArea == "ArKIrissLaFortdePnradPortesElfiq" ||
      sArea == "ArKIrissLaFortdePnradUnlongchemi" ||
      sArea == "ArKIrissLavalledeGoblinsLaRouted" ||
      sArea == "ArKIrissLavalledesGoblinsLeMouli" ||
      sArea == "ArKIrissLavalledesGobelinsLeMoul" ||
      sArea == "ArKIrissLavalledesGobelinsLeMoul" ||
      sArea == "ArKIrissLeMontKarthmLaRouteduSud" ||
      sArea == "ArKIrissLeMontKarthmLaSourceMagi" ||
      sArea == "ArKIrissLesGrottesdesTrollsEntre" ||
      sArea == "ArKIrissLesCavernesdesTrollsLaCa" ||
      sArea == "ArKIrissLesCavernesdesTrollsTunn")
      {
      sDestTag = "dnrespawn2";
      }
      else
      {
            if (sArea == "ArKIrissLeSiege")
            {
            sDestTag = "dnrespawn3";
            }
            else
            {
              if (sArea == "ArKIrissLeDragonNoir" ||
                    sArea == "ArKIrissLaboutiqueduGnome" ||
                    sArea == "TentedeBlackFox")
                    {
                    sDestTag = "dnrespawn4";
                    }
                    else
                    {
                            if (sArea == "ArKIrissLeLacduDragon" ||
                            sArea == "ArKIrissLacavernedesNains" ||
                            sArea == "ArKIrissLesCavernesdesNainsLesmi" ||
                            sArea == "ArKIrissLesCavernesdesNainsLamai" ||
                            sArea == "ArKIrissLesCavernesdesNainsTunel" ||
                            sArea == "ArKIrissLesCavernesdesNainsLeVil" ||
                            sArea == "ArKIrissLescavernesdesnainsLesGa")
                            {
                                sDestTag = "dnrespawn5";
                            }
                            else
                            {
                            //ne rien faire
                            }
                    }

            }
      }
    }


//  Respawn si le module Dragon Noir - Pelude a ete termine

   
    if(GetIsObjectValid(GetItemPossessedBy(oRespawner, "rebelle")))
    {
        if(GetLocalInt(oRespawner,"vie")>0)
        {

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

        object oSpawnPoint = GetObjectByTag(sDestTag);
        AssignCommand(oRespawner,JumpToLocation(GetLocation(oSpawnPoint)));
        SetLocalInt(oRespawner,"vie",iNewvie);
        }
        else
        {
        //ne rien faire
        SendMessageToPC(oRespawner,"RESURECTION IMPOSSIBLE : PLUS DE VIE");
        }
    }
    else
    {
  //ne rien faire
    SendMessageToPC(oRespawner,"RESURECTION IMPOSSIBLE : VOUS N'AVEZ PAS L'AMULETTE DES REBELLES");
    }

}
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.



Pour le repos, voici le script présent dans le module "Le Batard de Kosigan" créé par Fabien Cerutti (un autre excellent module). Pareil, en manipulant un peu, tu devrais pouvoir t'en sortir.

NWScript :
//:Confused///////////////////////// ////////////////////
//:: Name: Zimero's Limited Resting v1.2
//:: FileName: z_mod_onrest
//:Confused///////////////////////// ////////////////////

//:Confused///////////////////////// ////////////////////
//:: Created By: Jonas Boberg aka. zimero
//:: Created On: 20021212
//:: Modified On: 20030107

//:: Traduit le: Vendredi 31 Janvier 2003
//:Confused///////////////////////// ////////////////////

//VARIABLE MODIFIABLES
//Le nombres d'heure durant lequelles le joueurs doit attendre

int TIMEBETWEENRESTING=5;
//Le nombre reel de minutes qui correspond a 1 heure dans le jeu
int REALTIMEMINUTES=1;
//FIN DES VARIABLES MODIFIABLES
int CurrentTime();

void main()
{
    //initiation des varibles
    object oPC = GetLastPCRested();
    int iCurrentTime, iLastRestTime, iTimeSinceRest, iTimeUntilRest;
    float fTimePenalty;

    switch (GetLastRestEventType())
    {
    case REST_EVENTTYPE_REST_STARTED:
        iCurrentTime = CurrentTime();
        iLastRestTime = GetLocalInt(oPC,"REST_HOUR");
        iTimeSinceRest = iCurrentTime-iLastRestTime;

        SetLocalInt(oPC, "REST_SECOND", GetTimeSecond());

        if (iLastRestTime==0 || iTimeSinceRest >= TIMEBETWEENRESTING)
        {
            SetLocalInt(oPC, "REST_ALLOWED", TRUE);
        }
        else
        {
            SetLocalInt(oPC, "REST_ALLOWED", FALSE);
            iTimeUntilRest = TIMEBETWEENRESTING-iTimeSinceRest;
            if (REALTIMEMINUTES == 1)
                {
                iTimeUntilRest = FloatToInt(HoursToSeconds(iTimeUntilRest)/60);
                //Vous pouvez changer le message si le repos n'est pas encore
                //autorise
                if (iTimeUntilRest == 1)
                    {
                    FloatingTextStringOnCreature("Vous devez attendre " +
                                " heure avant de pouvoir vous reposer", oPC);
                    }
                else
                    {
                    FloatingTextStringOnCreature("Vous devez attendre "+
                                              IntToString(iTimeUntilRest)+
                              " heures avant de pouvoir vous reposer", oPC);
                    }
                }
            else
                {
                if (iTimeUntilRest == 1)
                    {
                    FloatingTextStringOnCreature("Vous devez attendre " +
                                  " heure avant de pouvoir vous reposer", oPC);
                    }
                else
                    {
                    FloatingTextStringOnCreature("Vous devez attendre "+
                                              IntToString(iTimeUntilRest)+
                                " heures avant de pouvoir vous reposer", oPC);

                    }

                }
        //Annuler le repos
        AssignCommand(oPC,ClearAllActions());
        }
        break;

    case REST_EVENTTYPE_REST_CANCELLED:
        //variable sur le temps de repos
        if (GetLocalInt(oPC, "REST_ALLOWED") == TRUE)
        {
            iCurrentTime = GetTimeSecond();
            iLastRestTime = GetLocalInt(oPC, "REST_SECOND");
            iTimeSinceRest = iCurrentTime - iLastRestTime;
            if (iTimeSinceRest<0) iTimeSinceRest+= 60;

            fTimePenalty = TIMEBETWEENRESTING*(iTimeSinceRest/(0.5*GetHitDice(oPC)+10));

            SetLocalInt(oPC,"REST_HOUR", CurrentTime()-(TIMEBETWEENRESTING-FloatToInt(fTimePenalty)));
        }
        break;

    case REST_EVENTTYPE_REST_FINISHED:
        SetLocalInt(oPC, "REST_HOUR", CurrentTime());
    }
}

int CurrentTime()
{
return GetCalendarYear()*8064 + GetCalendarMonth()*672 + GetCalendarDay()*24 + GetTimeHour();
}
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.


@+.f€r. Surprised
_________________
L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
zogzog59
Grand Chevalier
Inscrit le: 16 Jan 2005
Messages: 123
Répondre en citant
Posté le : 25/01/2005 04:57:08 Sujet du message :

merci bcq santos je vais me depatouillé avec cela ... Smile

j'irai voir ces deux modules si tu dis qu'ils sont exellents ...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
zogzog59
Grand Chevalier
Inscrit le: 16 Jan 2005
Messages: 123
Répondre en citant
Posté le : 25/01/2005 05:11:18 Sujet du message :

juste une precisions santos le sript de repos il ce place ou ?
propriete module mais ds kel evenements ????

et le script de respawn c dans "onplayerdeath" ou "onplayerrespawn"?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Dreams
Ecuyer
Inscrit le: 30 Juil 2004
Messages: 41
Localisation: val de marne
Répondre en citant
Posté le : 25/01/2005 10:17:05 Sujet du message :

LE script du respawn se place effectivement dans la OnPlayerRespawn. Pour ce qui est du script du repos c'est dans le OnPlayerRest.

Tu avais demandé aussi un script pour limiter le repos à une zone. Voici un script qui oblige le joueur à être près d'un feu de camp. Il te faudra donc creer un feu de camp avec un tag, tag que tu spécifieras dans le script. A mettre dans le OnPlayerRest.

NWScript :
void main()
{
object oPC = GetLastPCRested();
object oFireCamp = GetObjectByTag(" TAG_A_REMPLIR ");
float fDistance = GetDistanceBetween(oPC,oFireCamp);

if (fDistance > 2.0f)
{
AssignCommand(oPC, ClearAllActions());
FloatingTextStringOnCreature(" Impossible de se reposer si loin du feu de camps... ", oPC,TRUE);
SendMessageToPC(oPC,"Ca fonctionne pourtant") ;
}
else { SendMessageToPC(oPC, "La distance entre le pc et le feu de camp est : "+FloatToString(fDistance)) ;}
}
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.


J'espère que ca t'ira
_________________
La raison de la réussite des gens du mal est l'inaction des gens du bien
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
zogzog59
Grand Chevalier
Inscrit le: 16 Jan 2005
Messages: 123
Répondre en citant
Posté le : 25/01/2005 14:15:41 Sujet du message :

merci dreams ca m'ira a la perfection lol

ca va m'aider pour une zone en plus c cool mercii.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Dreams
Ecuyer
Inscrit le: 30 Juil 2004
Messages: 41
Localisation: val de marne
Répondre en citant
Posté le : 25/01/2005 18:07:39 Sujet du message :

J'ai rarement l'occasion de pouvoir aider donc ce fut avec plaisir Smile

Si je puis me rendre à nouveau utile, je le ferai. Entre concepteur faut s'entraider ^^
_________________
La raison de la réussite des gens du mal est l'inaction des gens du bien
 
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 105.419ms