La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 27/11/2024 03:57:34
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
zogzog59 Grand Chevalier Messages: 123 |
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 |
Revenir en haut | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
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 :
//:///////////////////////// //////////////////// //:: Created By: Konrad //:: Created On: 30/11/02 //:: Dragon Noir, l'Exil. //:///////////////////////// //////////////////// #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"); } } 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 :
//:///////////////////////// //////////////////// //:: Name: Zimero's Limited Resting v1.2 //:: FileName: z_mod_onrest //:///////////////////////// //////////////////// //:///////////////////////// //////////////////// //:: Created By: Jonas Boberg aka. zimero //:: Created On: 20021212 //:: Modified On: 20030107 //:: Traduit le: Vendredi 31 Janvier 2003 //:///////////////////////// //////////////////// //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(); } @+.f€r. _________________ L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Le RP, cé vrémant tro z'injuste ! |
Revenir en haut | |
zogzog59 Grand Chevalier Messages: 123 |
merci bcq santos je vais me depatouillé avec cela ...
j'irai voir ces deux modules si tu dis qu'ils sont exellents ... |
Revenir en haut | |
zogzog59 Grand Chevalier Messages: 123 |
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 | |
Dreams Ecuyer Messages: 41 Localisation: val de marne |
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)) ;} } 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 | |
zogzog59 Grand Chevalier Messages: 123 |
merci dreams ca m'ira a la perfection lol
ca va m'aider pour une zone en plus c cool mercii. |
Revenir en haut | |
Dreams Ecuyer Messages: 41 Localisation: val de marne |
J'ai rarement l'occasion de pouvoir aider donc ce fut avec plaisir
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 | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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