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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Besoin d'un script tout simple

Par Alustriel_LZ le 17/10/2002 à 14:54:49 (#2351891)

Bonjour

Je sais que je vais en agacer plus d'un par ma requête, je m'en excuse donc par avance.
Oui je sais qu'il y a plein de tutorial bien faits a propos des scripts mais compte tenu de mon niveau dans ce domaine là cela me prendrait - si j'y arrive - une après-midi de recherche alors que pour bon nombre d'entre vous il s'agira de 5 minutes de votre temps.

Voilà j'ai besoin d'un script qui fait que lorsque un joueur entre dans la partie, le jeu vérifie si ce joueur a en sa possession un objet précis (par le TAG). S'il ne possede pas cet objet, il apparait dans son inventaire, s'il l'a déjà, il ne fait rien.

A priori ce scrit serait destiné au OnClientEnter du Module. Allez dîtes moi que j'ai bon pour ça !

:sanglote:

D'avance merci

Alustriel_LZ
EVENINGSTAR : Module indépendant de Soirétoile dans le Cormyr.
PS : Beta en cours de test, requiert HakPack25in1 d'Arkanius et dernière mise à jour de la VF (actuellement 1.24), 50 zones, 9 quêtes implémentées - me contacter par e-mail si vous désirez participer.

Par eMRaistlin le 17/10/2002 à 16:53:23 (#2352625)


void main()
{
object oPC = GetEnteringObject();
string sItem = "TAG_OBJET ";

if (GetItemPossessedBy(oPC,sItem) == OBJECT_INVALID )
{
CreateItemOnObject("RESREF ", oPC, 1);
}
}



Ca devrait faire l'affaire...

Par Morethil le 17/10/2002 à 22:23:43 (#2354502)

Autre solution avec l'editeur wizard.
Tu crée un scripte qui enleve l'objet au joueur (par le tag) et qui lui donne (tjs par le tag)
Comme ça si le joueur a l'objet, il le perd et le recupèrd, et si il n'a pas l'objet il ne le perd pas, et le recupère.
Ca donne le meme resultat, mais tu n'a plus a verifier si le personnage a l'item ou pas.

Pt'et que je dit une connerie ?

PS : sinon y'a toujours la solution du PNJ qui donne les items que le joueur est supposé avoir depuis la dernière quete. Le même PNJ qui résume l'histoire aux joueurs solo.

script

Par Alustriel_LZ le 18/10/2002 à 10:16:27 (#2356200)

Merci de ton aide Raistlin, mais apparament le script ne fais rien, j'ai beau le bidouiller. J'ai essayé en le mettant dans le OnClientEnter ou le OnModuleLoading du module ou de la zone de départ mais rien. :baille:
J'ai opté pour l'option de le faire donner par un NPC qui n'est pas la + pratique mais cela suffira pour le moment.

Par eMRaistlin le 18/10/2002 à 10:53:08 (#2356392)

J'en suis surpris...


Essaye ca : dans le OnEnter de la premiere area :


void main()
{
object oPC = GetEnteringObject();
string sItem = "TAG_OBJET ";

if (!GetIsValidObject(GetItemPossessedBy(oPC,sItem)))
{
CreateItemOnObject("RESREF ", oPC, 1);
WriteTimestampedLogEntry("le if a bien reagis, donc c'est le create qui marche pas. Verifier le Resref");
}
else {WriteTimestampedLogEntry("C'est le Get Item qui marche pas. Retourne sur le forum pour prevenir");}
}


(en oubliant pas bien sur de remplacer TAG_OBJET et RESREF par les valeur qui vont bien...

euh ...

Par Alustriel_LZ le 18/10/2002 à 10:57:30 (#2356417)

... j'ai honte :chut: , j'ai bien entré le tag de l'objet, mais pas la resref !
Je vais essayer là, ça devrait marcher.

Par eMRaistlin le 18/10/2002 à 11:07:46 (#2356474)

^^

vi, je savais pas si tu faisais des tag egaux aux resref ou pas, donc je t'ai mis les 2 ^^

Par TheRack le 19/10/2002 à 17:03:55 (#2364308)

Moi, il me faut le même genre de script, pour que :

- lorsque le joueur clique sur un trigger de transition, un object X soit crée dans son inventaire avant que le joueur ne soit téléporté dans la nouvelle aire. Est-ce que je peux utiliser le script proposé précédemment ?

Merci.

Par eMRaistlin le 19/10/2002 à 17:47:37 (#2364494)

oui, mais tu dois changer le GetEntering pour mettre un GetClickingObject(); et tu met ca sur ton OnClick de ta transition

Par TheRack le 20/10/2002 à 12:03:10 (#2367965)

Merci, tes scripts, c'est de la balle !!!

Maintenant, j'ai encore besoin de ton aide:

Dans un de mes scripts, j'aimerais créer la condition suivante:

- Si le trigger sur lequel tu as cliqué = TAG_DU_TRIGGER_A,
alors: créer l'objet X sur le PC

- Si le trigger sur lequel tu as cliqué = TAG_DU_TRIGGER_B,
alors: créer l'objet Y sur le PC

- etc.

Merci encore.
TheRack

Par eMRaistlin le 20/10/2002 à 12:24:12 (#2368076)


void main()
{
object oPC = GetEnteringObject();
string sItem1 = "TAG_OBJET_1"; //Pas de 0 devant... (exemple : recompense_1
string sItem2 = "TAG_OBJET_2"; //Pas de 0 devant... (exemple : recompense_2
//....Copie /colle avec changement du numero,
//en gardant pour tes objet un tag equivalent,
//avec juste le numero qui change.

string sTriggerNB = GetTag(OBJECT_SELF);
//Tu DOIS ABSOLUMENT mettre un tag de trigger qui finisse par
//2 chiffre, pour les identifier... (exemple : TRIGGER_02)

nNumero = StringToInt(GetStringRight(sTriggerNB,2));
sItem = sItem + IntToString(nNumero);

if (!GetIsValidObject(GetItemPossessedBy(oPC,sItem)))
{
CreateItemOnObject("RESREF"+IntToString(nNumero), oPC, 1);
}
//Ici aussi, tu dois faire en sorte que le Resref soit le meme pour tous, avec juste le dernier chiffre qui change.

}

Par TheRack le 20/10/2002 à 18:37:20 (#2370154)

Encore une fois, merci. Je vais essayer, même si ça me parait moins évident que les autres scripts. J'aurais encore quelques questions:

- Lorsqu'un joueur (oPC) est téléporté vers un Waypoint, comment fait-on pour que tous les autres joueurs dans la partie soient également téléportés en même temps vers ce WP ?

- Comment fait-on pour faire des portes secrètes ou des passages secrets (pour les voleurs) ?

- J'aurai encore sûrement d'autres questions par la suite, mais ça suffit déjà comme ça pour le moment.

Merci. Je commence à apprendre. Faudra que j'te paie une bouffe, l'ami.

Par eMRaistlin le 20/10/2002 à 20:08:20 (#2370827)

- Lorsqu'un joueur (oPC) est téléporté vers un Waypoint, comment fait-on pour que tous les autres joueurs dans la partie soient également téléportés en même temps vers ce WP ?

je te fais ca... mais pour les henchmen et autre invoc, pas de problemes, ils suivent automatiquement leur maitres...


- Comment fait-on pour faire des portes secrètes ou des passages secrets (pour les voleurs) ?


Je pourrait te faire des pages de scripts differents pour faire ca, mais dans le patch 1.26, y'a un mod de demo expres... je te laisse le decouvrir ^^ (il est pas mal)

J'aurai encore sûrement d'autres questions par la suite, mais ça suffit déjà comme ça pour le moment

J'aurai encore surement plein de reponse a fournir, mais tu as raison, ca suffit pour le moment =P

Merci. Je commence à apprendre. Faudra que j'te paie une bouffe, l'ami.


Ok... ^^ fais gaffe, vaut mieux m'avoir en scripteur qu'en pension...:mdr: :mdr: :mdr: :mdr:

Par eMRaistlin le 20/10/2002 à 21:06:02 (#2371169)

Tiens :


void main()
{
object opc = GetFirstPC();
object ohench;
object ofam;
object osumm;
object odom;
float wayPointFacing;

object opoint = GetObjectByTag ("PlaceWaypointTaghere!");
wayPointFacing = GetFacing(opoint);
while (GetIsObjectValid (opc))
{
ohench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, opc);
ofam = GetAssociate (ASSOCIATE_TYPE_FAMILIAR, opc);
osumm = GetAssociate (ASSOCIATE_TYPE_SUMMONED, opc);
odom = GetAssociate (ASSOCIATE_TYPE_DOMINATED, opc);
PlaySound ("al_mg_ballmagic1");
AssignCommand(opc, ActionJumpToObject (opoint, FALSE));
AssignCommand(opc, ActionJumpToObject (opoint, FALSE));
AssignCommand (ohench, ClearAllActions());
AssignCommand(ohench, ActionJumpToObject (opoint, FALSE));
AssignCommand (ohench, ActionForceFollowObject (opc, 5.0));
AssignCommand (ofam, ClearAllActions());
AssignCommand(ofam, ActionJumpToObject (opoint, FALSE));
AssignCommand (ofam, ActionForceFollowObject (opc, 5.0));
AssignCommand (osumm, ClearAllActions());
AssignCommand(osumm, ActionJumpToObject (opoint, FALSE));
AssignCommand (osumm, ActionForceFollowObject (opc, 5.0));
AssignCommand (odom, ClearAllActions());
AssignCommand(odom, ActionJumpToObject (opoint, FALSE));
AssignCommand (odom, ActionForceFollowObject (opc, 5.0));
opc = GetNextPC();
}
}

Par TheRack le 21/10/2002 à 11:53:08 (#2373845)

J'ai encore besoin d'un script.

Script de condition dans une conversation ( à mettre dans "Text appears when...") :

Si TOUS les joueurs dans la partie (même s'il n'y en a qu'un) ont 1000 Po, alors, return True, sinon, return else.

C'est la condition de la première ligne que je n'arrive pas à compiler.

Encore une fois merci.

Par eMRaistlin le 21/10/2002 à 12:09:43 (#2373961)

essaye ca ^^


//GetFactionGold(object)
//Get the amount of gold held by all members of a certain faction.

int GetFactionGold(
object oFactionMember
);


ca me semble pas mal...

donc, tu peut faire ca :


int Starting Conditionnal()
{
object oPC = GetPCSpeaker();
int oArgentDispo = GetFactionGold(oPC);

if (oArgentDispo >=1000)
{
return TRUE;
//Ici, tu peut faire appel a une fonction qui va enlever l'or de la party
}
else return FALSE;
}


Mais je te conseille d'avoir le PNJ qui demande 1000gold au speaker et ce sera a l'equipe de donner l'argent au chef d'equipe... ca me parait plus simple et plus realiste ^^

Par TheRack le 23/10/2002 à 11:46:20 (#2388390)

Merci encore une fois, tu es un maitre. Maintenant, j'arrive de plus en plus à faire mes scripts tout seul. Neanmoins, il y en a un qui me résiste: Voilà:

- J'aimerais que chaque Po (Pièce d'or) d'un joueur lui pèse 1 unité de poids dans son équipement.

Par exemple si le joueur a 50 de poids en objets, et 100 Po en argent, j'aimerais que son poids total soit de 150. C'est possible, ça ?

Par Nylou le 23/10/2002 à 12:07:45 (#2388537)

Une piece d'or qui pèse 1, je trouve ça exagéré.
En temps normal, on peut compter 100 Po = 1 kg

Tu comptes faire du troc dans ton module, ou les PJ vont devoir se trimballer avec une brouette pour acheter une armure de plate ?

Par eMRaistlin le 23/10/2002 à 12:23:46 (#2388680)

La seule facon de faire ca, de ce que j'en sait, c'est de creer des items et de les equiper sur les emplacement de Creature, en caché...

Honnetement, tu va te galerer pour rien, et comme l'as dit Nylou, ca va en plus contraindre tes joueurs a mort.

Mais bon, c'est ton choix ^^

Donc, tu crée des items de tout poids (1,10,100,1000,...) et il te faudra les combiner dans un INVENTARY_SLOT_C* pour pouvoir les cacher. Sachant qu'en plus, aucun Event ne se declenche sur la perte/gain d'argent, il te faudra le faire :

-Soit sur le OnHeartBeat, mais tu va charger le CPU
-Soit sur le OnPlayerRest, donc le poid changera a chaque repos.
-Soit sur les transition d'area
- Soit sur un ch'tit mix de tout ca...

Par TheRack le 23/10/2002 à 13:24:22 (#2389230)

Non, le truc, c'est que j'ai fait une banque dans ma ville. Et comme je joue sur plusieurs modules (=un monde gigantesque totalement non-linéaire), j'ai fait des reçus que le PC reçoit chaque fois qu'il pose de l'argent à la banque. Comme ça, lorsqu'il revient dans le module après l'avoir quitté, il peut récupèrer son argent.

Le tout, c'est que j'aimerais bien trouver une utilité à cette banque. Les reçus devants peser moins que les pièces. Car l'argent pèse aussi son poids. Et je n'ai pas envie que le PC se promène avec 20000 pièces dans les poches sans encombrement (=pas réaliste).

A cause de cette histoire de plusieurs modules, le seul moyen de garder des infos concernants les PC sont les objets qu'ils portent. Donc, le vol ou la perte de leur argent n'est pas une réponse pour la banque car ils perdraient aussi leurs reçus.

A quoi elle sert, la banque ? :(

Par eMRaistlin le 23/10/2002 à 13:47:56 (#2389488)

ben, dans ce cas : solution = Creature item ^^

Mais ... bon courage pour le parametrage, paske tu va devoir en créer, des items ^^

Par Symphonik le 23/10/2002 à 14:17:38 (#2389780)

je n'ai pas de solution pour ton pb, mais j'ai crée un mod solo et je voulais aussi des banques, donc pour justifier leur utilité j'ai crée des montress "mangeurs d'or" :)
- bandit qui te pique tes tunes (furtif bien sur)
- gremlin qui mange l'or (le mange vraiment donc disparition de l'or)
- perte de beaucoup d'or à la mort (donc si en banque l'or reste intact)

je pense qu'on peut trouver encore plein d'idée
t'en sème un peu partout et hop...

mais bon comme je n'ai jamais testé un multi module je ne peux pas te répondre vraiment ....

Par TheRack le 23/10/2002 à 15:45:01 (#2390470)

Ok. Tes propositions sont pas mal. Je vais essayer de chercher dans ce sens. Même si les joueurs vont gueuler...

Merci.

Par eMRaistlin le 23/10/2002 à 15:55:19 (#2390552)

Même si les joueurs vont gueuler...


T'inkiete pas : de toute facon, si les pieces pesent du poids, et les limite, alors ils gueuleront anyway...

Et pis, pour les gens comme moi, je gueulerai anyway si je devait aller a la banque in-Game :mdr: :mdr: :mdr: :mdr:

Par TheRack le 23/10/2002 à 16:03:27 (#2390621)

Et encore, je t'ai pas dit que les magasins ont des horaires d'ouverture et de fermeture (script pompé sur ce site) !!!

Avec moi, c'est fini de taper, acheter des potions, taper, acheter des potions, taper, acheter des potions, etc. Maintenant, il y a des contraintes, en plus de celles du MD.

Par Nylou le 23/10/2002 à 17:22:01 (#2391203)

Et ta banque elle fait crédit ?
On y fait la queue pendant 3 tours et il y a pas de siege pour s'assoir ?

Y a t il moyen d'utiliser des GAB ( Golem d'Acquisition de Blé) pour récupérer des pieces d'or ou des TPE (Transfert de Po Ethéré) pour payer sans avoir de monnaie sur soi ?

Y aura t il des distributeurs de potion et d'alcool sur le principe des TPE ?

Pourra t on spéculer sur le cout des ingrédients magiques ?

...

Par coolstar le 23/10/2002 à 17:44:58 (#2391396)

lol

Par TheRack le 23/10/2002 à 20:57:42 (#2392717)

Oui, comme à la poste. Il faut prendre un ticket, et attendre son tour. En sachant qu'il y aura 600000 tickets, et que chaque heure de jeu réel, tu passeras par exemple du ticket 2 au ticket 3... Et que lorsque ton numéro sortira (tirage aléatoire toutes les minutes), tu auras 35 secondes pour faire ta transaction...

:D :D :D mdr :rasta:

Par TheRack le 24/10/2002 à 17:43:35 (#2398620)

Salut eMRaistlin, c'est encore moi. Tu peux m'aider encore une fois ?

Voilà mon script :

void main()
{
object oPC = GetFirstPC();
object oPoids = GetObjectByTag("poids");
string sItem = "poids";
int oGold = GetGold(oPC);
int oTotal = oGold/200;
while (GetIsObjectValid (oPC))
{
if ( oPoids != OBJECT_INVALID)
DestroyObject(oPoids, 0.0f);
CreateItemOnObject("poids", oPC, 1);
oPC = GetNextPC();
}
}

- Voilà. Comment détruire tous les objets de même type (oPoids)de l'inventaire d'un joueur, peu importe le nombre ?

- De même, comment créer des objets (oPoids) en une quantité se référant à une variable (oTotal), et comment faire pour que ces objets (oPoids) soient invisibles et inaccessibles par le joueur ?

Encore une fois, merci !

Par eMRaistlin le 24/10/2002 à 17:54:54 (#2398690)

Pour la deuxieme partie : Tu utilise des items qui se "stack"...

Et tu peux compter le nombre d'item dans le stack. De la meme facon,tu peut supprimer le stacj en un coup...


(exemple :


int nVARIABLE = GetGold(oPC);
CreateItemOnObject("poids", oPC, ,nVARIABLE);

)


PS : je donne cet exemple, mais of course, le stack ne sera jamais de 200002Po...

Mais tu peut creer des pieces de 10 stackables...

Pour le poid de ces items... euh... ben....

JOL Archives 1.0.1
@ JOL / JeuxOnLine