Comment faire pour que le PJ démarre à poil ?

Répondre
Partager Rechercher
curieusement ce script ne fonctionne pas
des problemes de compilation sans doute.

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.

Code PHP:

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_ARMSoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_ARROWSoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_BELToEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_BOLTSoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_BOOTSoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_BULLETSoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_CARMOURoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_CHESToEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_CLOAKoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_CWEAPON_BoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_CWEAPON_LoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_CWEAPON_RoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_HEADoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_LEFTHANDoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_LEFTRINGoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_NECKoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_RIGHTHANDoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
if ( 
OBJECT_INVALID != (oInvItem GetItemInSlot(INVENTORY_SLOT_RIGHTRINGoEnteringPC)) )
oHolderItem CreateItemOnObject(GetTag(oInvItem), oHolder);
SetPlotFlag(oHolderItemGetPlotFlag(oInvItem));
SetIdentified(oHolderItemGetIdentified(oInvItem));
DestroyObject(oInvItem);
// Make sure this script doesn't run anymore for the current PC
SetLocalInt(oEnteringPC"CLEAR_INV_SCENE1"1);
}
}

arggg heuu franchement si je peux me permettre tu t'embêtes pour un rien j'arrive je vous montre un script qui marche et qui est beaucoup plus rapide
voila normalement , comme ça c'est plus rapide et il fait tout l'inventaire du pc quand il rentre .


Code PHP:


object oPC
=GetEnteringObject();
object oitem=GetFirstItemInInventory(oPC);

while(
GetIsObjectValid(oitem))
{

DestroyObject(oitem);
oitem=GetNextItemInInventory(oPC);

Je commence vraiment a douter de l'interêt des persistants...

Code PHP:

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


Citation :
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
marche parfaitement, mais c un script capitaliste qui laisse l'or au joueur


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
__________________
Congnois toy toy mesme. Nulle gloire dans le sang inutile
tu veux eviter la boucle infinie ?

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
Code PHP:

void ActionTakeItem(
    
object oItem,
    
object oTakeFrom
); 
^^

Description (US)
Code PHP:

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(igoldoPC,TRUE);


ne marche pas pour l'or, !!!!
Re: excellent
Citation :
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
Hum, je me demande ou il va chercher tout ça
Là c'est plus du MD sadique, c'est un cas clinique

Jaha Effect
alors là je comprend plus ... est ce que quelqu'un pourrait m'expliquer où est la différence avec la fonction "vider un inventaire"
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à )

pour l'or, pourquoi tu le met dans la boucle ?
Code PHP:


//Vide l'inventaire de la cible et la met dans le contenant
//Si pas de contenant specifier, detruit tout simplement 

void viderInventaire(object cibleobject contenant=OBJECT_INVALID)
{
    
int i;
    
object item;
    
object copiItem;
    
int igold=GetGold(cible);
    
TakeGoldFromCreature(igoldcible,TRUE);

    while((
item GetNextItemInInventory(cible)) != OBJECT_INVALID){
        if(
contenant != OBJECT_INVALID){
            
copiItem CreateItemOnObject(GetTag(item), contenant);
            
SetPlotFlag(copiItemGetPlotFlag(item));
            
SetIdentified(copiItemGetIdentified(item));
        }
        
DestroyObject(item);
    }
    for(
<= NUM_INVENTORY_SLOTS i++){
        
item GetItemInSlot(i,cible);
        if(
contenant != OBJECT_INVALID){
            
copiItem CreateItemOnObject(GetTag(item), contenant);
            
SetPlotFlag(copiItemGetPlotFlag(item));
            
SetIdentified(copiItemGetIdentified(item));
        }
        
DestroyObject(item);
    }

ca marche pas ca ?
Je suis vraiment une grosse quiche !
Je vous remercie de vous débattre sur sujet, ça me touche ... 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) ??

Merci,
Mel
non ca ne marche pas
si tu avais essayé tu aurais vu !!!




Mel dans le OnEnter d'une zone, tu met ce script.
lequel ?

Code PHP:

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)
__________________
Congnois toy toy mesme. Nulle gloire dans le sang inutile
Re: Je suis vraiment une grosse quiche !
Citation :
Provient du message de Mel Ethybem
Je vous remercie de vous débattre sur sujet, ça me touche ... 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) ??

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 .



Re: non ca ne marche pas
Citation :
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
parce que le "viderinventaire" il envoi dans un contenant ...
allez, tester :

dans le onEnter de la zone
Code PHP:

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é

Code PHP:

//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 cibleobject contenant=OBJECT_INVALID)
{
    
int i;
    
object item;
    
object copiItem;
    
int igold GetGold(cible);
    
TakeGoldFromCreature(igoldcible);

    while((
item GetNextItemInInventory(cible)) != OBJECT_INVALID){
        if(
contenant != OBJECT_INVALID){
            
copiItem CreateItemOnObject(GetTag(item), contenant);
            
SetPlotFlag(copiItemGetPlotFlag(item));
            
SetIdentified(copiItemGetIdentified(item));
        }
        
DestroyObject(item);
    }
    for(
<= NUM_INVENTORY_SLOTS i++){
        
item GetItemInSlot(i,cible);
        if(
contenant != OBJECT_INVALID){
            
copiItem CreateItemOnObject(GetTag(item), contenant);
            
SetPlotFlag(copiItemGetPlotFlag(item));
            
SetIdentified(copiItemGetIdentified(item));
        }
        
DestroyObject(item);
    }
}



void main()
{
   
object oPC GetLocalObject(OBJECT_SELF"CIBLE");
  
//on recupre la cible
   
if (GetIsPC(oPC))
   
viderInventaire(oPCOBJECT_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é
Mouhahahahahahah
Ben dis donc, tout ces post pur en arriver la

ç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.
mauvaise langue :

Citation :
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
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés