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 04/12/2024 20:07: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 |
samhuin Ecuyer Messages: 43 |
Voila le script que j'utilise pour que mes perso se repose, tous marche bien sauf un petit detail, il ne detruit pas l'objet une fois celui si utiliser. je ne comprend pas d'ou vient le probleme. surement autour du destroy object.
Si quelqu'un pourrai me trouver l'erreur que j'ai faite se serait super. NWScript : ////////////////////////// //////////////////// //:: Created By: Jouby //:: Created On: 2004 ////////////////////////// //////////////////// void ClearDarkness(object oOwner)//effacer l'effet du noir de l'ecran { effect eTemp=GetFirstEffect(oOwner); effect eEcranNoir = EffectVisualEffect(VFX_DUR_BLACKOUT); while(GetIsEffectValid(eTemp)) { if(GetEffectType(eTemp)==GetEffectType(eEcranNoir)) { RemoveEffect(oOwner, eTemp); } eTemp=GetNextEffect(oOwner); } } /////////////////////////// /////////////////// //Pas de repos sans nourriture////////////////// //script du Troubadour//////////////////// ///// ////////////////////////////// ////////////////// //Mode d'emploi : placer ce script dans le "OnRest" du module"// //Creer un ou plusieurs objets non stackable portant le tag "BOUFFE"// //Ce qui suit est une nouvelle fonction, elle n'est pas de moi// //Elle cherche un item donne dans l'inventaire du PJ// object CheckInventoryForItemToEat(object oPC) { string sTag; object oItem = GetFirstItemInInventory (oPC); while (oItem != OBJECT_INVALID) { sTag = GetTag(oItem); if (( sTag == "BOUFFE") || ( sTag == "cnrCherryPie") || ( sTag == "cnrBlkberryPie") || ( sTag == "cnrBluberryPie") || ( sTag == "cnrApplePie") || ( sTag == "cnrPecanPie") || ( sTag == "cnrOatsBread") || ( sTag == "cnrWheatBread") || ( sTag == "cnrCornBread") || ( sTag == "cnrRiceBread") || ( sTag == "cnrRyeBread ")) return oItem; oItem = GetNextItemInInventory (oPC); } return OBJECT_INVALID; } //VARIABLE MODIFIABLES //Le nombres d'heure durant lequelles le joueurs doit attendre int TIMEBETWEENRESTING=2; //Le nombre reel de minutes qui correspond a 1 heure dans le jeu int REALTIMEMINUTES=2; //FIN DES VARIABLES MODIFIABLES int CurrentTime(); void main() { object oPC = GetLastPCRested(); object oItemRequis = CheckInventoryForItemToEat(oPC); object oTarget = oPC; object oZone5 = GetArea(oPC); object oPlaceable = GetFirstObjectInArea(oZone5); string sTag = GetTag(oPlaceable); string sReposInterdit = "s3_repos_interdi"; string sRepos_Interdit_animation = "A cause d'une animation en cours, le repos est interdit dans la zone pour raison de RP"; 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); //Lorsque le joueur click sur "se reposer" le script verifie la presence de l'item "bouffe"// //S'il n'y en a pas le repos est annule et un message envoye au joueur// if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED) { if (oItemRequis == OBJECT_INVALID) { SendMessageToPC (oPC, "Impossible de vous reposer avec cette faim qui vous tenaille..."); AssignCommand (oPC,ClearAllActions()); } //si l'item "bouffe" est present le repos est lance et un seul item de ce type detruit// else { while (GetIsObjectValid(oPlaceable)) { if (sReposInterdit == sTag) { SendMessageToPC(oPC,sRepos_Interdit_animation); AssignCommand(oPC, ClearAllActions()); return; } oPlaceable = GetNextObjectInArea(oZone5); } if (GetLastRestEventType()== REST_EVENTTYPE_REST_STARTED) { PlayVoiceChat(VOICE_CHAT_REST, oPC); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_BLACKOUT), oTarget); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_IMP_SLEEP), oTarget); } if (GetLastRestEventType()== REST_EVENTTYPE_REST_CANCELLED) { ClearDarkness(oTarget); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oTarget, 30.0f); SendMessageToPC(oPC, "Le reveil suite a un repos interrompu est toujours tres difficile"); } if (GetLastRestEventType()== REST_EVENTTYPE_REST_FINISHED) { ClearDarkness(oTarget); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oTarget, 10.0f); SendMessageToPC(oPC, "S'arracher des bras de Sylune vous demande encore quelques instants"); } } } } else { SetLocalInt(oPC, "REST_ALLOWED", FALSE); iTimeUntilRest = (TIMEBETWEENRESTING-iTimeSinceRest); if (REALTIMEMINUTES == 1) { iTimeUntilRest = FloatToInt(HoursToSeconds(iTimeUntilRest)/60); if (iTimeUntilRest == 1) { FloatingTextStringOnCreature("Vous devez attendre " + "1 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 " + "1 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(); } Dernière édition par samhuin le 22/11/2005 09:31:07; édité 1 fois
|
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Il doit manquer qqchose dans ton script : j'ai eu beau chercher, je n'y ai trouvé aucune commande DestroyObject.
Donc ça ne risque pas de détruire EDIT : j'ai également édité ton code pour l'indenter correctement, parce que c'était assez obscur sinon _________________ » 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 | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Deja dit nous qu'est ce qu'on doit detruire ? (Tag, et quand est ce qu'il se detruit, s'il te plait)
_________________ [http] |
Revenir en haut | |
samhuin Ecuyer Messages: 43 |
if (( sTag == "BOUFFE") ||
( sTag == "cnrCherryPie") || ( sTag == "cnrBlkberryPie") || ( sTag == "cnrBluberryPie") || ( sTag == "cnrApplePie") || ( sTag == "cnrPecanPie") || ( sTag == "cnrOatsBread") || ( sTag == "cnrWheatBread") || ( sTag == "cnrCornBread") || ( sTag == "cnrRiceBread") || ( sTag == "cnrRyeBread ")) je doit detruire un de ces objets, celui une fois que celui ci a servis une fois pour se reposer |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Alors faut pas : un que tu le mette dans un "WHILE" et 2 tu a juste dire : DestroyObject(GetObjectByTag(sTag));, donc sTag representant l'item (GetTag(oItem))
_________________ [http] |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
je pense que c'est là :
NWScript :
if (GetLastRestEventType()== REST_EVENTTYPE_REST_STARTED) { PlayVoiceChat(VOICE_CHAT_REST, oPC); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_DUR_BLACKOUT), oTarget); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_IMP_SLEEP), oTarget); DestroyObject(oItemRequis); //La ligne a rajouter } Ca devrait marcher, la commande c'est la bonne, j'ai juste un petit doute sur l'endroit ou la placer. |
Revenir en haut | |
samhuin Ecuyer Messages: 43 |
Parfait, ca marche merci beaucoup.
|
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