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 11/11/2024 17:42:05
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 |
Fantome Ecuyer Messages: 63 |
Bonsoir,
J'ai plusieurs questions : 1- j'aimerais qu'un livre qui est dans un coffre soit consultable mais pas prenable. 2- Qui aurait un script pour faire rire, pleurer ou autre, un PNJ ? 3- Un pb déjà évoquer dans un précédent post mais pour lequel j'ai toujours pas de solution viable : Un pj récupère une information (INFO1), puis en se déplaçant passe dans une zone. A ce moment un PNJ(Tag_PNJ) vient vers le PJ pour lui parler. (le pnj ne se déplace que si le pj a l'info et s'il passe dans la zone). Voilà le script que j'ai mis : NWScript :
void main() { object oPC = GetEnteringObject(); object oNPC = GetNearestObjectByTag("Tag_PNJ"); if (GetLocalInt(GetPCSpeaker(), "INF01")== 1) { if (GetIsObjectValid(oNPC)) { if (!IsInConversation(oNPC)) { AssignCommand(oNPC, ClearAllActions()); } AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE)); AssignCommand(oNPC, ActionStartConversation(oPC)); } DestroyObject(OBJECT_SELF); } } Ca ne marche pas. J'ai mis ce script dans la zone de déclenchement sur OnEnter Aidez moi, c'est un des points essentiels de ma campagne. Merci. |
Revenir en haut | |
Cassin Papa-poule(t) & poissard intemporel Messages: 7471 Localisation: 6 bis rue de la Couveuse, Poulailler 39b |
Pour ton 2, c'est possible dans un dialogue (onglet "Autres actions"), mais hors dialogue, je vois pas... Mais ça doit pouvoir se faire, on peut bien faire prier un PNJ...
Sinon pour ton script moi j'aurais plutôt fait ça : NWScript :
object oVu = GetLastPerceived(); void main() { if( GetIsPC(oVu) && GetLocalInt(oVu,"INFO1") == 1 ) ActionStartConversation(oVu, "garde_temple",TRUE); } Tu mets ça dans le OnPerceived du PNJ et normalement il ne devrait venir te voir QUE si la variable est à 1 (mais pense à la remettre à 0 après, sinon c'est chiant le perso te courre après tout le temps ) _________________ Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ? http://cassin1306.spaces.live.com |
Revenir en haut | |
bloodydemon Acolyte Messages: 32 |
1. pour le livre :
Tu met ca dans le OnPlayerAcquiertItem : NWScript :
void main () { object oItem = GetModuleItemAcquired(); object oPC = GetModuleItemAcquiredBy(); if (GetTag (oItem) == "Tag_du_livre") { DestroyObject (oItem); CreateItemOnObject("resref_du_livre", GetObjectByTag("tag_du_coffre")) SendMessageToPC (oPC,"On regarde mais on ne touche pas !") } } 3.Tu met ca dans le OnEnter de la zone NWScript : void main() { object oPC = GetEnteringObject(); object oNPC = GetNearestObjectByTag("Tag_PNJ"); if (GetLocalInt(GetPCSpeaker(), "INF01")== 1) { if (GetIsObjectValid(oNPC)) { if (!IsInConversation(oNPC)) { AssignCommand(oNPC, ClearAllActions()); } AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE)); AssignCommand(oNPC, ActionStartConversation(oPC,"nom_de_la_conversation")); } DelayCommand (100.0, DestroyObject(OBJECT_SELF)); } } |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Se serait pas mieu de passe par le OnDisturbed du coffre a la place de OnAcquireItem car c'est très souvent sollicité non ?
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
Dîtes, la nécromancie, vous croyez que c'est une bonne chose? Je ne sais pas si Fantome est encore là, ni s'il surveille le sujet, mais voilà quoi...
2002 - 2005 ! Trois ans de nécromancie _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
J'avais même pas fait gaffe vu que le sujet était remonté...
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
bloodydemon Acolyte Messages: 32 |
héhéhé ^^
|
Revenir en haut | |
lylver Héros Messages: 274 |
Pour le livre : activer la case dans les propriétés de l'objet non-transférable : celà suffit.
Même si le coffre est détruit il sera impossible de récupérer le livre dans le body-bag du coffre. |
Revenir en haut | |
edisnotdead Grand Chevalier Messages: 132 |
NWScript :
void main() { object oPC = GetLastOpenedBy(); object oSelf = OBJECT_SELF; CreateItemOnObject("resref de ton livre",OBJECT_SELF,1); } a mettre dans le open de ton coffre NWScript :
void main() { object oPC = GetLastDisturbed(); object oSelf = OBJECT_SELF; object oItem = GetInventoryDisturbItem(); string sItemTag = GetTag(oItem); string sTagSelf = GetTag(oSelf); string sItemResRef; object oA = GetObjectByTag("livre1"); if (GetInventoryDisturbType()== INVENTORY_DISTURB_TYPE_ADDED) { string sNoDropFlag = (GetStringLeft(GetTag(oItem),6)); if (sNoDropFlag == "NoDrop" || sNoDropFlag == "TOKEN_"||sNoDropFlag=="_TBOX_") return; if (GetBaseItemType(oItem)==BASE_ITEM_LARGEBOX) { DestroyObject(oItem); SendMessageToPC(oPC,"??"); return; } CopyItem(oItem,oPC,TRUE); DestroyObject(oItem); FloatingTextStringOnCreature("impossible de remplir l inventaire ",oPC,FALSE); return; } if (oItem == oA) { CopyObject(oItem,GetLocation(oSelf),oSelf,GetTag(oItem)); DestroyObject(oItem); { } } } a mettre dans le disturb configure ton coffre en intrigle utilisable inventaire et ne met rien dedant ton livre s y mettra tous seul personne ne pourra mettre d objet dans ce coffre ou prendre le ou les livre a l interieur j espere que c est ce que tu voulait |
Revenir en haut | |
edisnotdead Grand Chevalier Messages: 132 |
le systeme de dessus peut etre utilisé pour differente chose
exemple de tapage de code dans l inventaire suite a ceux code une action NWScript :
void main() { object oPC = GetLastOpenedBy(); object oSelf = OBJECT_SELF; string sTagSelf = GetTag(oSelf); string sCode = ""; SetCampaignString("SPENCER","sCode",sCode,oPC); CreateItemOnObject("doder",OBJECT_SELF,1); CreateItemOnObject("doder001",OBJECT_SELF,1); CreateItemOnObject("doder002",OBJECT_SELF,1); CreateItemOnObject("doder003",OBJECT_SELF,1); CreateItemOnObject("doder004",OBJECT_SELF,1); CreateItemOnObject("doder005",OBJECT_SELF,1); CreateItemOnObject("doder006",OBJECT_SELF,1); CreateItemOnObject("doder007",OBJECT_SELF,1); CreateItemOnObject("doder008",OBJECT_SELF,1); CreateItemOnObject("doder009",OBJECT_SELF,1); CreateItemOnObject("doder010",OBJECT_SELF,1); CreateItemOnObject("doder011",OBJECT_SELF,1); CreateItemOnObject("doder012",OBJECT_SELF,1); CreateItemOnObject("doder013",OBJECT_SELF,1); CreateItemOnObject("doder014",OBJECT_SELF,1); CreateItemOnObject("doder015",OBJECT_SELF,1); CreateItemOnObject("doder016",OBJECT_SELF,1); CreateItemOnObject("doder017",OBJECT_SELF,1); CreateItemOnObject("doder018",OBJECT_SELF,1); CreateItemOnObject("doder019",OBJECT_SELF,1); CreateItemOnObject("doder020",OBJECT_SELF,1); CreateItemOnObject("doder021",OBJECT_SELF,1); CreateItemOnObject("doder022",OBJECT_SELF,1); CreateItemOnObject("doder023",OBJECT_SELF,1); CreateItemOnObject("doder024",OBJECT_SELF,1); CreateItemOnObject("doder025",OBJECT_SELF,1); CreateItemOnObject("doder026",OBJECT_SELF,1); CreateItemOnObject("metal247",OBJECT_SELF,1); CreateItemOnObject("metal247",OBJECT_SELF,1); CreateItemOnObject("metal247",OBJECT_SELF,1); CreateItemOnObject("metal247",OBJECT_SELF,1); CreateItemOnObject("metal247",OBJECT_SELF,1); CreateItemOnObject("metal247",OBJECT_SELF,1); CreateItemOnObject("metal247",OBJECT_SELF,1); CreateItemOnObject("metal247",OBJECT_SELF,1); } a mettre dans le open de l objet NWScript :
void main() { object oPC = GetLastDisturbed(); object oSelf = OBJECT_SELF; object oItem = GetInventoryDisturbItem(); string sItemTag = GetTag(oItem); string sTagSelf = GetTag(oSelf); string sItemResRef; object oA = GetObjectByTag("A_Runess"); object oB = GetObjectByTag("B_Runess"); object oC = GetObjectByTag("C_Runess"); object oD = GetObjectByTag("D_Runess"); object oE = GetObjectByTag("E_Runess"); object oF = GetObjectByTag("F_Runess"); object oG = GetObjectByTag("G_Runess"); object oH = GetObjectByTag("H_Runess"); object oI = GetObjectByTag("I_Runess"); object oJ = GetObjectByTag("J_Runess"); object oK = GetObjectByTag("K_Runess"); object oL = GetObjectByTag("L_Runess"); object oM = GetObjectByTag("vali_Runess"); object ooM = GetObjectByTag("M_Runess"); object oN = GetObjectByTag("N_Runess"); object oO = GetObjectByTag("O_Runess"); object oP = GetObjectByTag("P_Runess"); object oQ = GetObjectByTag("Q_Runess"); object oR = GetObjectByTag("R_Runess"); object oS = GetObjectByTag("S_Runess"); object oT = GetObjectByTag("T_Runess"); object oU = GetObjectByTag("U_Runess"); object oV = GetObjectByTag("V_Runess"); object oW = GetObjectByTag("W_Runess"); object oX = GetObjectByTag("X_Runess"); object oY = GetObjectByTag("Y_Runess"); object oZ = GetObjectByTag("Z_Runess"); effect eResDec = EffectDamageImmunityDecrease( DAMAGE_TYPE_COLD, 100 ); effect eDam = EffectDamage(d6(2), DAMAGE_TYPE_COLD); object oDoor = GetObjectByTag ("tag de la porte"); string sCode = ""; if (GetInventoryDisturbType()== INVENTORY_DISTURB_TYPE_ADDED) { string sNoDropFlag = (GetStringLeft(GetTag(oItem),6)); if (sNoDropFlag == "NoDrop" || sNoDropFlag == "TOKEN_"||sNoDropFlag=="_TBOX_") return; if (GetBaseItemType(oItem)==BASE_ITEM_LARGEBOX) { DestroyObject(oItem); SendMessageToPC(oPC,"impossinle de prendre l inventaire "); return; } CopyItem(oItem,oPC,TRUE); DestroyObject(oItem); FloatingTextStringOnCreature("pas actif ",oPC,FALSE); return; } sCode = GetCampaignString("SPENCER","sCode",oPC); if (oItem == oA) {sCode = sCode + "A"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oB) {sCode = sCode + "B"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oC) {sCode = sCode + "C"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oD) {sCode = sCode + "D"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oE) {sCode = sCode + "E"; SetCampaignString("SPENCER","sCode",sCode,oPC); } if (oItem == oF) {sCode = sCode + "F"; SetCampaignString("SPENCER","sCode",sCode,oPC); } if (oItem == oG) {sCode = sCode + "G"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oH) {sCode = sCode + "H"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oI) {sCode = sCode + "I"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oJ) {sCode = sCode + "J"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oK) {sCode = sCode + "K"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oL) {sCode = sCode + "L"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oM) {sCode = sCode + "M"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oN) {sCode = sCode + "N"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oO) {sCode = sCode + "O"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oP) {sCode = sCode + "P"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oQ) {sCode = sCode + "Q"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oR) {sCode = sCode + "R"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oS) {sCode = sCode + "S"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oT) {sCode = sCode + "T"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oU) {sCode = sCode + "U"; SetCampaignString("SPENCER","sCode",sCode,oPC); } if (oItem == oV) {sCode = sCode + "V"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oW) {sCode = sCode + "W"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oX) {sCode = sCode + "X"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oY) {sCode = sCode + "Y"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } if (oItem == oZ) {sCode = sCode + "Z"; SetCampaignString("SPENCER","sCode",sCode,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eResDec, oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } CopyObject(oItem,GetLocation(oSelf),oSelf,GetTag(oItem)); DestroyObject(oItem); FloatingTextStringOnCreature(sCode,oPC,FALSE); if (oItem == ooM) { if (sCode == "FEU") { AssignCommand (oDoor, ActionOpenDoor(oDoor)); SetLocked (oDoor, FALSE); } SetCampaignString("SPENCER","sCode",sCode); } } a mettre dans le disturbe NWScript :
void main() { object oItem = GetFirstItemInInventory(OBJECT_SELF); object oSelf = OBJECT_SELF; if (oItem == OBJECT_INVALID) return; while (oItem != OBJECT_INVALID) { DestroyObject(oItem); oItem = GetNextItemInInventory(OBJECT_SELF); if (oItem == OBJECT_INVALID) break; } } a mettre dans le close voili voila si on tape le bon code qui est FEU la porte s ouvre si on tape sur une mauvaise touche on meurt je l utilise aussi pour fair des console de teleportaion a plusieur destination mais la j ai un includ en effet les date sont loin loin mais sa servira pour d autre ^^ |
Revenir en haut | |
Fantome Ecuyer Messages: 63 |
Citation : Dîtes, la nécromancie, vous croyez que c'est une bonne chose? Je ne sais pas si Fantome est encore là, ni s'il surveille le sujet, mais voilà quoi...
un souffle d'outre tombe vient doucement fair frémir ce topic...
2002 - 2005 ! Trois ans de nécromancie Je vous avouerais que je ne sais même plus pour quelle raison j'avais posé cette question mais puisque que vous y avez répondu, je me ferais un plaisir d'utiliser vos solutions dans mes futurs quêtes. Merci. _________________ Arcantia |
Revenir en haut | |
Allaster Chevalier Messages: 73 Localisation: toulouse |
Fantome a écrit : 1- j'aimerais qu'un livre qui est dans un coffre soit consultable mais pas prenable.
pas besoin de script pour ne pas prendre les livres il sufit de cocher la case "ne pas être laché" ds les propriété du livre |
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