Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Comment faire pour que le PJ démarre à poil ?
Comment faire pour que le PJ démarre à poil ?
Par Mel Ethybem le 18/2/2003 Ã 13:21:21 (#3261517)
Merci d'avance,
Mel Ethybem :merci:
Par Amaranthe le 18/2/2003 Ã 13:30:03 (#3261603)
Par eMRaistlin le 18/2/2003 Ã 15:50:53 (#3262792)
RTFP*
http://forums.jeuxonline.info/showthread.php?s=&threadid=127619
(*read the f**** persistant :mdr: :mdr: :mdr: )
Non, plus sérieusement, les persistants sont la pour ca, Mel, et ca prouve que tu as vraiment envie qu'on t'aide, de les avoir lu avant, pas que tu as envie qu'on taff a ta place :D ;)
Par RAT le 18/2/2003 Ã 16:02:25 (#3262956)
curieusement ce script ne fonctionne pas
Par Blam le 18/2/2003 Ã 16:30:52 (#3263214)
et les explications qui se veulent claires sur ce post ne le sont qu'a moitié.
j'utilise cela dans le OnEnter d'une zone mais il reste un problème, le sac a dos (inventaire pas équipé) ne se vide pas.
void main()
{
object oEnteringPC; //PC entering area
object oInvItem; //Items that PC has equipped
object oHolder; //Object that will hold the PC's items
object oHolderItem; //New spawned replica of item for chest
// Get the object that last entered this area
oEnteringPC = GetEnteringObject();
oHolder = GetObjectByTag("it_pcItemChest");
// Make sure the object is a PC
if (GetIsPC(oEnteringPC))
{
// Only clear inventory if we haven't already done it before
if (GetLocalInt(oEnteringPC, "CLEAR_INV_SCENE1") == 0)
{
// Go through each slot, creating a copy of the item in the
// chest and destroying the item on the character. This
// will leave the PC nekkid
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_ARROWS, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_BELT, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_BOLTS, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_BOOTS, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_BULLETS, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_NECK, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( OBJECT_INVALID != (oInvItem = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oEnteringPC)) )
oHolderItem = CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItem, GetPlotFlag(oInvItem));
SetIdentified(oHolderItem, GetIdentified(oInvItem));
DestroyObject(oInvItem);
// Make sure this script doesn't run anymore for the current PC
SetLocalInt(oEnteringPC, "CLEAR_INV_SCENE1", 1);
}
}
}
Par RAT le 18/2/2003 Ã 16:34:51 (#3263244)
Par RAT le 18/2/2003 Ã 16:37:56 (#3263269)
object oPC=GetEnteringObject();
object oitem=GetFirstItemInInventory(oPC);
while(GetIsObjectValid(oitem))
{
DestroyObject(oitem);
oitem=GetNextItemInInventory(oPC);
}
Par Blam le 18/2/2003 Ã 16:46:41 (#3263349)
invalide declaration type sur le
while(GetIsObjectValid(oitem))
autrement c'est vachement plus court :)
Par eMRaistlin le 18/2/2003 Ã 16:46:49 (#3263352)
void main()
{
object oPC=GetEnteringObject();
object oitem=GetFirstItemInInventory(oPC);
while(GetIsObjectValid(oitem))
{
DestroyObject(oitem);
oitem=GetNextItemInInventory(oPC);
}
int nSlot = 17;
while (nSlot >=0)
{DestroyObject(GetItemInSlot(nSlot,oPC)); nSlot--;}
}
:doute: :monstre: :doute:
Par RAT le 18/2/2003 Ã 16:49:52 (#3263388)
Provient du message de Blam
Ne se compile pas
invalide declaration type sur le
while(GetIsObjectValid(oitem))
autrement c'est vachement plus court :)
Heuu y a un problème car moi il se compile très bien chez moi :)
Enfin eM a remontré le reste de ce qui faut faire :)
Mais ne t'inquiète pas eM , cela sera les persistants j'en suis convaincu :)
excellent
Par Blam le 18/2/2003 Ã 16:52:07 (#3263408)
et si je rajoute une ligne pour tout mettre dans un autre contenant ? ca marche ?
autre question; car la vous etes efficace non seulement en scripts mais en inspiration :)
j'explique dans une piece ou il y a deux joueurs comment intervertir leur equipement (pssst pas de commentaires sur le maitre de jeu, hein ? )
enfin si c'est possible :p
Par RAT le 18/2/2003 Ã 16:53:57 (#3263430)
Par eMRaistlin le 18/2/2003 Ã 17:05:33 (#3263539)
Tu fais un On trigger qui declenche ca, avec 2 objet invisibles qui prennent chacun l'quipement d'un joueur, et une fois le vidage inventaire fait, il le donne a l'autre joueur...
Attention a ne pas utiliser destroyobject, mais void ActionTakeItem(
object oItem,
object oTakeFrom
);
^^
Description (US)
Par RAT le 18/2/2003 Ã 17:52:30 (#3263915)
int igold=GetGold(oPC);
TakeGoldFromCreature(igold, oPC,TRUE);
Par Blam le 18/2/2003 Ã 18:02:12 (#3264009)
void main()
{
object oPC=GetEnteringObject();
object oitem=GetFirstItemInInventory(oPC);
while(GetIsObjectValid(oitem))
{
DestroyObject(oitem);
oitem=GetNextItemInInventory(oPC);
}
int nSlot = 17;
while (nSlot >=0)
{DestroyObject(GetItemInSlot(nSlot,oPC)); nSlot--;}
int igold=GetGold(oPC);
TakeGoldFromCreature(igold, oPC,TRUE);
}
ne marche pas pour l'or, !!!!
Re: excellent
Par Jaha Effect le 18/2/2003 Ã 18:35:45 (#3264268)
Provient du message de Blam
j'explique dans une piece ou il y a deux joueurs comment intervertir leur equipement (pssst pas de commentaires sur le maitre de jeu, hein ? )
enfin si c'est possible :p
Hum, je me demande ou il va chercher tout ça :)
LÃ c'est plus du MD sadique, c'est un cas clinique ;)
Jaha Effect :D
Par Reyan le 18/2/2003 Ã 18:49:42 (#3264364)
parce qu'en plus elle copie l'inventaire en même tps qu'elle le détruit (peut p-e servir pour l'autre fou là :rasta: )
pour l'or, pourquoi tu le met dans la boucle ?
//Vide l'inventaire de la cible et la met dans le contenant
//Si pas de contenant specifier, detruit tout simplement
void viderInventaire(object cible, object contenant=OBJECT_INVALID)
{
int i;
object item;
object copiItem;
int igold=GetGold(cible);
TakeGoldFromCreature(igold, cible,TRUE);
while((item = GetNextItemInInventory(cible)) != OBJECT_INVALID){
if(contenant != OBJECT_INVALID){
copiItem = CreateItemOnObject(GetTag(item), contenant);
SetPlotFlag(copiItem, GetPlotFlag(item));
SetIdentified(copiItem, GetIdentified(item));
}
DestroyObject(item);
}
for(i = 0 ; i <= NUM_INVENTORY_SLOTS ; i++){
item = GetItemInSlot(i,cible);
if(contenant != OBJECT_INVALID){
copiItem = CreateItemOnObject(GetTag(item), contenant);
SetPlotFlag(copiItem, GetPlotFlag(item));
SetIdentified(copiItem, GetIdentified(item));
}
DestroyObject(item);
}
}
ca marche pas ca ?
Je suis vraiment une grosse quiche !
Par Mel Ethybem le 18/2/2003 Ã 19:47:39 (#3264777)
J'en viens à ma question (une grosse quiche, que je vous dit) :
Tout ces scripts... je les tapes où ? Et sinon, quel est le bon script dans tout ça (si possible sans or) ?? :eureka:
Merci,
Mel
non ca ne marche pas
Par Blam le 18/2/2003 Ã 19:47:47 (#3264778)
:)
Mel dans le OnEnter d'une zone, tu met ce script.
lequel ?
void main()
{
object oPC=GetEnteringObject();
object oitem=GetFirstItemInInventory(oPC);
while(GetIsObjectValid(oitem))
{
DestroyObject(oitem);
oitem=GetNextItemInInventory(oPC);
}
int nSlot = 17;
while (nSlot >=0)
{DestroyObject(GetItemInSlot(nSlot,oPC)); nSlot--;}
}
celui ci de RAT/eM fonctionne, sauf pour l'or
celui que j'avais mis (1km de texte) ne fonctionne que pour enlever les items dont le perso est aquipé
je cherche toujours deux trucs
1 enlever tout l'or aussi
2 tout envoyer dans un contenant (comme dans le mien)
Re: Je suis vraiment une grosse quiche !
Par RAT le 18/2/2003 Ã 19:52:42 (#3264809)
Provient du message de Mel Ethybem
Je vous remercie de vous débattre sur sujet, ça me touche :rolleyes: ... Et en effet, si je pose la question directement, c'est bien parce que certains scripts des PERSISTANTS sont louches.
J'en viens à ma question (une grosse quiche, que je vous dit) :
Tout ces scripts... je les tapes où ? Et sinon, quel est le bon script dans tout ça (si possible sans or) ?? :eureka:
Merci,
Mel
Ba de rien, on est là pour aider :) Mel.
Pour mettre les scripts, dans ton éditeur aurora:) tu clikes sur outils et sur editeur de scripts et tu colles le script directement la dedans :)
il faudrait que tu lises des tutoriaux pour t'aider :).
Ba en fait tous les scripts sont bons plus ou moins long mais ils sont bon, celui de eM est le plus court et ne compte pas l'or dans son script.
Donc voilà en gros :).
:rolleyes:
Re: non ca ne marche pas
Par Reyan le 18/2/2003 Ã 21:42:12 (#3265485)
si tu avais essayé tu aurais vu !!!
:)
...
2 tout envoyer dans un contenant (comme dans le mien)
mais, macarel, personne ne lit ce que je dis où quoi ? c'est si pas interessant :confus: :aide:
parce que le "viderinventaire" il envoi dans un contenant ...
allez, tester :
dans le onEnter de la zone
void main()
{
object oPC = GetEnteringObject();
//le PC quand il entre
object oContenant = GetObjectByTag("CONTENANT");
//on recupre le gars qui va recevoir l'inventaire
if(GetIsPC(oPC))
{
SetLocalObject(GetObjectByTag("CONTENANT"), "CIBLE", oPC);
//on lance le vidage et on met le joueur en cible
ExecuteScript("tm_vider", oContenant);
}
}
le script "tm_vider" à enregstrer à coté
//la on dfinit une fonction tres pratique
//Vide l'inventaire de la cible et la met dans le contenant
//Si pas de contenant specifier, detruit tout simplement
//enleve l'or aussi
void viderInventaire(object cible, object contenant=OBJECT_INVALID)
{
int i;
object item;
object copiItem;
int igold = GetGold(cible);
TakeGoldFromCreature(igold, cible);
while((item = GetNextItemInInventory(cible)) != OBJECT_INVALID){
if(contenant != OBJECT_INVALID){
copiItem = CreateItemOnObject(GetTag(item), contenant);
SetPlotFlag(copiItem, GetPlotFlag(item));
SetIdentified(copiItem, GetIdentified(item));
}
DestroyObject(item);
}
for(i = 0 ; i <= NUM_INVENTORY_SLOTS ; i++){
item = GetItemInSlot(i,cible);
if(contenant != OBJECT_INVALID){
copiItem = CreateItemOnObject(GetTag(item), contenant);
SetPlotFlag(copiItem, GetPlotFlag(item));
SetIdentified(copiItem, GetIdentified(item));
}
DestroyObject(item);
}
}
void main()
{
object oPC = GetLocalObject(OBJECT_SELF, "CIBLE");
//on recupre la cible
if (GetIsPC(oPC))
viderInventaire(oPC, OBJECT_SELF);
//on vide
}
alors, il faut créer un gars avec le TAG "CONTENANT" et c'est tout bon.
ca vide l'or, et tt. mais ca équipe pas ... si faut que ca équipe, je pense que c'est possible, mais ch*** compliqué :p
Mouhahahahahahah
Par Blam le 18/2/2003 Ã 23:57:22 (#3266215)
ça c'est la réponse exacte et complète a la question posée des le début.
Scripts complets avec l'option récupération des affaires.
excellent pour le début d'un module, d'une action spéciale ou d'un piège.
Maerci Reyan, c'est exactement cela.
Par eMRaistlin le 19/2/2003 Ã 9:23:50 (#3267797)
Je me demandais : Comment faire pour que le PJ démarre le module/le serveur à poil ; c'est à dire sans rien, sans armes, sans armure, sans vêtements ?
C'est ca, la question du debut :p
Par RAT le 19/2/2003 Ã 10:50:16 (#3268522)
exact !
Par Blam le 19/2/2003 Ã 14:18:53 (#3269999)
m'enfin ce que j'en dis, moi, c'est que vous oubliez a qui vous parlez, qui vous pose les questions :)
Menfin, vous le savez bien, que je suis le plus vieux newbie de ce forum !!!
JOL Archives 1.0.1
@ JOL / JeuxOnLine