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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

[Script-Cours] Premiers pas en scripting

Par rituel le 4/1/2003 à 14:34:59 (#2942796)

[ Attention : Ce tutorial est passé de forums en forums, son contenu a pu être alteré notamment les contenus des balises
Si vous trouvez une erreur ou une ligne manquante merci de me la signaler. ]

Maintenant que votre shard est correctement configuré et totalement spawné vous ressentez certainement le besoin de créér de nouveaux objets pour diversifier votre shard et le transformer à votre guise ...

1] Squelette d'un objet

La structure d'un objet basique se compose des lignes suivantes :
ITEMDEF : Il correspond à l'identifiant d'un objet , celui-ci doit être unique , car dans le meilleur des cas s'il ne l'est pas un des deux objets sera ignoré par Sphère , et dans le pire des cas si l'objet ignoré à des dépendances avec d'autres objets , beaucoup d'objets peuvent être considérés comme inexistants et donc créér la pagaille sur votre serveur .
NAME : Il correspond au nom qui sera affiché sur l'objet lorsque celui-ci sera cliqué .
ID : Il correspond à l'identifiant de l'objet à partir duquel vous voulez créér votre objet .
Par exemple :

[ITEMDEF i_robe_test]
NAME=TEST
ID=i_robe

L'objet qui sera crée ici aura pour identifiant i_robe_test , aura pour nom TEST et prendra les caractéristiques de l'objet i_robe , soit une robe banale .

2] Fonction Triggers et Return

La structure d'un objet complexe est toute différente , l'entête reste la même (bien qu'un peu ameliorée) mais apparaît en plus le corps du script qui permet d'intéragir avce l'objet ...
Les différentes commandes pour intéragir avec un objet sont appellées TRIGGER , voici la liste des plus intéressantes à utiliser :
@ABORT : Il intervient lorsque j'annule une action
@CLICK : Il intervient dès que l'objet est cliqué
@CREATE : Il intervient dès que l'objet a été créé
@DAMAGE : Il intervient lorsque j'ai été blessé ou qu'un objet de type arme a touche une cible
@DCLICK : Il intervient dès que l'objet est double-cliqué
@DEATH : Il intervient dès que je suis mort
@DESTROY : Il intervient lorsque l'objet est détruit
@DROPON_GROUND : Il intervient dès que je pose l'objet sur le sol
@DROPON_ITEM : Il intervient dès que je pose l'objet (peu importe où)
@ENTER : Il intervient lorsque j'entre dans une region spécifique
@ENVIRONCHANGE : Il intervient lorsque je passe d'une région dont la lumière ou le temps a changé
@EQUIP : Il intervient lorsque j'équipe l'objet
@EXIT : Il intervient lorsque je quitte une region spécifique
@FAIL : Il intervient lorsque je loupe une action
@FEAROFDEATH : Il intervient lorsque je suis presque mort
@GETHIT : Il intervient lorsque j'ai été touché (en combat)
@HIT : Il intervient lorsque je touche quelqu'un (en combat)
@HITMISS : Il intervient lorsque je loupe mon adversaire (en combat)
@HITTRY : Il intervient lorsque je n'ai pas encore touché ni loupé mon adversaire , c'est à dire lorsque je tente de le toucher (en combat)
@TARGON_CHAR : Il intervient lorsque je vise un personnage
@TARGON_GROUND : Il intervient lorsque je vise le sol
@TARGON_ITEM : Il intervient lorsque je vise l'objet
@ITEMDAMAGE : Il intervient lorsque j'endommage l'objet
@ITEMSPELL : Il intervient lorsque je lance un sort sur l'objet
@ITEMSTACKON : Il intervient lorsque je tente de poser un item sur un autre (de même type)
@LOGIN : Il intervient lorsque je me connecte sur le serveur
@LOGOUT : Il intervient lorsque je me déconnecte du serveur
@NPCACCEPTITEM : Il intervient lorsqu'un PNJ accepte un item
@NPCHEARUNKNOWN : Il intervient lorsqu'un PNJ entends un mot qu'il ne comprends pas
@NPCREFUSEITEM : Il intervient lorsqu'un PNJ ne veut pas de l'item que je lui tends
@NPCSEENEWPLAYER : Il intervient lorsqu'un PNJ voit un nouveau joueur , après la mort du joueur il est reconsidéré comme nouveau joueur
@NPCSEEWANTITEM : Il intervient lorsqu'un PNJ voit un item qu'il désire
@PERSONNALSPACE : Il intervient lorsque je susi à la même position qu'un PNJ
@PROFILE : Il intervient lorsque quelqu'un affiche mon profil
@RECEIVEITEM : Il intervient lorsque le menu secure trade apparait
@SKILLABORT : Il intervient lorsque j'annule l'action provoquée par une skill
@SKILLFAIL : Il intervient lorsque je loupe l'action provoquée par une skill
@SKILLSTART : Il intervient lorsque je démarre l'action provoquée par une skill
@SKILLSUCCESS : Il intervient lorsque je termine l'action provoquée par une skill par un succès
@SPELLCAST : Il intervient lorsque je lance un sort
@SPELLEFFECT : Il intervient lorsque je recois un sort dont il faudra préciser l'identifiant avec
@STEP : Il intervient lorsque je marche sur un objet
@TARGON_CHAR : Il intervient lorsque je cible un personnage avec le viseur
@TARGON_GROUND : Il intervient lorsque je cible le sol avec le viseur
@TARGON_ITEM : Il intervient lorsque je cible un objet avec le viseur
@TIMER : Il intervient lorsque un timer assigné à l'objet où la personne se décrémente à 0
@UNEQUIP : Il intervient lorsque je déséquipe l'objet
Chacun de ces TRIGGERS devra être précédé d'un ON= pour signifier qu'on utilise le trigger , par exemple :

[ITEMDEF i_robe_test]
NAME=TEST
ID=i_robe
ON=@CREATE
COLOR=0481
Dans cet exemple notre objet , en plus des caractéristiques assignées précédemment , aura la couleur 0481 à sa création , soit la couleur blanche .
On peut aussi annuler ou confirmer un TRIGGER avec respectivement la commande Return 1 et Return 0 , voici un exemple d'utilisation de RETURN :

[ITEMDEF i_robe_test]
NAME=TEST
ID=i_robe

ON=@CREATE
COLOR=0481

ON=@GETHIT
RETURN 1

Dans cet exemple le porteur de la robe ne pouvra pas recevoir de coup , car le trigger @GETHIT est annulé par le RETURN 1
Vous pouvez donc constater que par ce moyen l'objet intéragit légèrement avec le joueur , ile ne modifie en rien les caractéristiques du porteur , ni même de celui qui envoye le coup , pour pallier à ca il existe plusieures fonctions ...

3] Les pointeurs

Les pointeurs ont pour but de créér un lien entre l'objet , le porteur , un autre objet ou un personnage ...
ACT : Ce pointeur se réfère au dernier objet sur lequel on a agis
CONT : Ce pointeur refère au container de l'objet lui même
FINDID : Ce pointeur suivi d'un identifiant va chercher l'identifiant specifié dans un container
FINDLAYER : Ce pointeur suivi d'un numéro de couche va chercher la couche specifiée sur un personnage
FINDTYPE : Ce pointeur suivi d'un type valide , va rechercher le type indiqué sur un container
LINK : Ce pointeur sert à relier un objet ou personnage à un autre objet ou personnage , les objets ou personnage reliés pourront alors totalement intéragir entre eux
SRC : Ce pointeur désigne la source d'une action
TARG : Ce pointeur designe la cible ayant été désignée par un viseur
TOPOBJ : Ce pointeur se réfère au container le plus exterieur à l'objet , si un objet est contenu dans un sac qu'un personnage porte , le personnage est désigné par le TOPOBJ
UID : Ce pointeur se refère à l'identifiant d'un objet
Exemple :

[ITEMDEF i_robe_test]
NAME=TEST
ID=i_robe
ON=@CREATE
COLOR=0481
ON=@EQUIP
SRC.COLOR=0481

Dans cet exemple la source de l'action qu'est equiper la robe verra sa couleur changée a 0481 soit le code couleur du blanc

[ITEMDEF i_robe_test]
NAME=TEST
ID=i_robe
ON=@CREATE
COLOR=0481
ON=@GETHIT
SRC.SAY Je frappe
SRC.SAY me frappe

Dans cet exemple la source de l'action de frapper le porteur de la robe dira : "Je frappe" suivi du nom du porteur de la robe , puis l'objet que la source a frappé dira le nom de la source de l'action de frapper suivi de "vous frappe" , pour être plus clair :
Celui qui frappe le porteur de la robe dira "je frappe" suivi du nom du porteur de la robe , et celui qui porte la robe dira le nom de celui qui le tape suivi de "vous frappe"
Autre exemple :

[ITEMDEF i_robe_test]
NAME=TEST
ID=i_robe
ON=@DCLICK
SRC.NEWITEM=i_objet_bidon
SRC.ACT.LINK=
SRC.ACT.TIMER=10
SRC.ACT.BOUNCE
REMOVE

Dans cet exemple lorsque la robe sera double cliquée , un nouvel objet (i_objet_bidon) sera crée à la source soit celui qui a double-clickeur , l'objet sera linké au double-clickeur , se verra assigné un timer de 10 , puis mis dans le sac du joueur (bounce) , enfin la robe sera détruite .

[ITEMDEF i_objet_bidon]
NAME=OBJET BIDON
ID=i_gold
ON=@EQUIP
CONT.SAY Je porte l'objet bidon
LINK.SAY Je porte l'objet bidon
ON=@TIMER
LINK.FINDLAYER.25.REMOVE
LINK.UPDATE
SAY Celui qui me porte s'appelle
RETURN 1

Dans cet exemple le fameux objet bidon , lorsqu'il sera equippe , fera dire à celui qui le contient : "Je porte l'objet bidon" , et à celui à qui il est lié la même phrase .
De même lorsque le timer aura décrémenté à 0 la couche 25 (monture : cheval ,lama ...) du lien de l'objet (ici celui qui le porte) sera enlevée , et l'objet bidon dira : "Celui qui me porte s'appelle" suivi du nom du porteur
Pour plus de précisions voici la liste des différentes Layers :

layer_hand1 (1) désigne la main droite
layer_hand2 (2) désigne la main gauche
layer_shoes (3) désigne les chaussures
layer_pants (4) désigne le pantalon
layer_shirt (5) désigne le t-shirt
layer_helm (6) désigne le heaume
layer_gloves (7) désigne les gants
layer_ring (8) désigne l'anneau
layer_light (9) désigne la lumière du sort light
layer_collar (10) désigne le collier
layer_hair (11) désigne les cheveux
layer_half_apron (12) désigne le tablier
layer_chest (13) désigne le plastron
layer_wrist (14) désigne le bracelet
layer_hidden (15) inutilisé : provoque des erreurs console quand on équipe quelque chose dessus
layer_beard (16) désigne la barbe
layer_tunic (17) désigne la tunique
layer_ears (18) désigne les boucles d'oreilles
layer_arms (19) désignes les brassières
layer_cape (20) désigne la cape
layer_pack (21) désigne le sac à dos
layer_robe (22) désigne la robe
layer_skirt (23) désigne la jupe
layer_legs (24) désigne les jambières
layer_horse (25) désigne la monture
layer_vendor_stock (26) désigne le stock du vendeur
layer_vendor_extra (27) désigne les objets achetés par le vendeur
layer_vendor_buys (28) désigne les objets à vendre du vendeur
layer_bankbox (29) désigne la banque
layer_special (30) désigne la couche où l'on équipe les items mémoires
layer_dragging (31) désigne l'item pris en main provenant du sol ou d'un contenair
LAYER_SPELL_STATS (32) désigne tous les sorts modifiants les statistiques (sauf polymorph)
LAYER_SPELL_Reactive (33) désigne le sort réactive armor
LAYER_SPELL_Night_Sight (34) désigne le sort nightsight
LAYER_SPELL_Protection (35) désigne le sort protection
LAYER_SPELL_Incognito (36) désigne le sort protection
LAYER_SPELL_Magic_Reflect (37) désigne le sort magic reflection
LAYER_SPELL_Paralyze (38) désigne le sort paralyze
LAYER_SPELL_Invis (39) désigen le sort invisibilitée
LAYER_SPELL_Polymorph (40) désigne le sort polymorphisme
LAYER_SPELL_Summon (41) désigne le sort invocation
LAYER_FLAG_Poison (42) désigne le sort poison
LAYER_FLAG_Criminal (43) désigne l'item memoire criminal quand il arrive a 0 il retire le flag
LAYER_FLAG_Potion (44) désigne les effets des potions
LAYER_FLAG_SpiritSpeak (45) désigne l'item memoire spirit speak quand il arrive a 0 il retire le flag
LAYER_FLAG_Wool (46) désigne la laine sur les mouton, quand il arrive a 0 la laine repousse
LAYER_FLAG_Drunk (47) désigne la rune de curse indiquant qu'on est saoul
LAYER_FLAG_ClientLinger (48) Aucune information sur cette layer
LAYER_FLAG_Hallucination (49) désigne l'item memoire hallucination quand il arrive a 0 il retire le flag
LAYER_FLAG_PotionUsed (50) désigne la couche limitant l'utilisation des potions à 20 secondes d'intervalle
LAYER_FLAG_Stuck (51) désigne le fait d'être pris dans une toile d'araignee
layer_flag_murders (52) désigne l'item memoire murder quand il arrive a 0 il retire le flag
layer_flag_bandage (53) désigne le bandage en cours d'utilisation

4] Les variables

Dans Sphère il existe deux types de variables , les variables locales (appellées TAG) et les variables globales , ces variables permettent de retenir une valeur qu'on leur assigne .
Pour utiliser un tag , la syntaxe est la suivante tag.mavariable=valeur , voici un exemple :

[ITEMDEF i_robe_test]
NAME=TEST
ID=i_robe
TYPE=t_script
ON=@CREATE
TAG.COMPTEUR=0
ON=@DCLICK
TAG.COMPTEUR= + 1
SAY Vous avez clicke sur moi <EVAL > fois

Dans cet exemple la robe a , lors de sa création , un tag du nom de "compteur" égal à 0 , lorsque vous cliquez dessus , il s'incrémente de 1 et vous indique le nombre de fois que vous l'avez double-clické
La var s'utilise de la même manière que le tag mais sans pointeurs, de plus elle est modifiable par tous les clients , elle est globale et s'efface après un World save .
Bien que je ne puisse pas tout expliquer dans ce tutoriel vous voilà maintenant en mesure de créér des objets relativement variés qui offreront la possibilité à votre shard d'être complètement unique .
Vous voilà désormais seul maître à bord sur votre serveur , vous avez sûrement du constaté que celui-ci était totalement vide , il va donc falloir tout d'abord vous faire la main sur les commandes Sphère pour pouvoir , par la suite mieux configurer votre serveur et el spawner .

Rituel

Par Shatouille le 4/1/2003 à 16:10:52 (#2943522)

Merci Rituel :)

Par Merlin Astaldo le 4/1/2003 à 17:35:58 (#2943969)

Merci, sympa pour débuter sa clarifie quelques points.

Par rituel le 4/1/2003 à 22:33:31 (#2946024)

Si t'a des questions ou tu veux eclaircir d'autres points fais en moi part dans un nouveau topic

Par Alghaf le 8/1/2003 à 3:44:01 (#2969988)

:aide: J'ai tout très bien configurer mon serveur, j'ai fait mon account comme tu l'a dit.Et quand j'entre je suit Player normal...:enerve: c plate parce que je veut me faire mon serveur et j'ai plein d'idée.

Par rituel le 8/1/2003 à 19:17:35 (#2975155)

Tapes .GM :rolleyes:

Par Alghaf le 8/1/2003 à 22:33:42 (#2976732)

Merci!!!:bouffon: :cool:

Par Zephyr le 19/1/2003 à 18:48:03 (#3054913)

on remonte ce post cest quand meme quelque chose qui va aider pas mal de monde selon moi

Par rituel le 19/1/2003 à 20:38:01 (#3055603)

Il faudrait avoir un sous forum dedié pour le scripting pour pas perdre ce genre de posts ... mais ca c'est à Mind de voir ...

Par Zephyr le 19/1/2003 à 20:46:55 (#3055666)

ouep bien vrai sa :) sa serait super au lieu d'avoir une petite section scripting sur 10 forums différents on pourrait en avoir un gros qui aiderait beaucoup de gens je suis certain

JOL Archives 1.0.1
@ JOL / JeuxOnLine