Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contr√īle

Recherche | Retour aux forums

JOL Archives

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

Par Mel Ethybem le 18/2/2003 à 13:21:21 (#3261517)

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 ? :rolleyes:

Merci d'avance,
Mel Ethybem :merci:

Par Amaranthe le 18/2/2003 à 13:30:03 (#3261603)

RTFM

Par eMRaistlin le 18/2/2003 à 15:50:53 (#3262792)

Je dirait plut√īt
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)

et voilà eM nous invente des mots :)

curieusement ce script ne fonctionne pas

Par Blam le 18/2/2003 à 16:30:52 (#3263214)

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.


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)

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 :)

Par RAT le 18/2/2003 à 16:37:56 (#3263269)

voila normalement , comme ça c'est plus rapide et il fait tout l'inventaire du pc quand il rentre :).




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)

Ne se compile pas

invalide declaration type sur le

while(GetIsObjectValid(oitem))

autrement c'est vachement plus court :)

Par eMRaistlin le 18/2/2003 à 16:46:49 (#3263352)

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

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)

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 :p

Par RAT le 18/2/2003 à 16:53:57 (#3263430)

huhu ^^ :mdr: :mdr:

Par eMRaistlin le 18/2/2003 à 17:05:33 (#3263539)

tu veux eviter la boucle infinie ? :mdr:

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)

pour l'or

Par Blam le 18/2/2003 à 17:47:15 (#3263868)

pour l'or qun a une idée ?

Par RAT le 18/2/2003 à 17:52:30 (#3263915)

essaye comme ca :)



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)

alors l√† je comprend plus ... est ce que quelqu'un pourrait m'expliquer o√Ļ est la diff√©rence avec la fonction "vider un inventaire" :doute:
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)

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

non ca ne marche pas

Par Blam le 18/2/2003 à 19:47:47 (#3264778)

si tu avais essayé tu aurais vu !!!

:)


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)

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.

Par eMRaistlin le 19/2/2003 à 9:23:50 (#3267797)

mauvaise langue :

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)

oui lool :mdr: c'est comme dire que des scripts qui ne se compilent pas alors qu'ils se compilent très bien ;) :mdr:

exact !

Par Blam le 19/2/2003 à 14:18:53 (#3269999)

par contre 2eme tentative, ca compilais pas :) Manque tout le merdier du void main et tutti quanti !!!!!!
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
Par Mind