This guide is intended to show how to use the scripting capabilities of the ARCC, Advanced Ryzom Content Creator.
It is recommended to read the volume I for having an overview of the use of the ARCC.
The functions of the script are classified into five groups.
This group has only one function, one of the simplest and most common.
Once in "Advanced Edit" mode, it is no longer possible to return to the "Basic Edition" mode.
The description of functions in that guide will always be in "Advanced Edit" mode.
The specific "Advanced objects" are indicated by [expert]
It is "wise" to finish the scripts systematically by an "End of Script". The "End of script" can be judiciously used to abort a script. At the end of the script, it helps to have a single output accessed by conditional branches as weAJump (jump).
This function allows you to interrupt the sequence of steps (also called "stages" in ARCC) by connecting to another function within the script.
It only allows to jump "foreward." To go back, use the function weAWhile .
The only parameter to provide is the function that will be executed next.
Include →
Migration
Please use the migrated document at URL shown below.
|
Function name : lInclude_v4
|
This function allows you to call another script for the event and after back to proccessing other stages.
- 1) [expert] Reset scripts to be run (Yes / No)
- 2) Name of the script to run.
While →
Migration
Please use the migrated document at URL shown below.
Do not work
|
Function name : weAWhile
|
⇒OK till here⇐
Window (webig windows management) →
|
Function name : weAWindow_v3
|
This feature allows you to manage dialogs (open / close, size and position)
- 1) Execute action : (Activate/Close). Used to open a new window or close an existing one (see below).
- 2) Resize : (Yes / No) If yes, use the values in W(3) et H(4) .
- 3) W : Width in pixels (In the example of the IG window, the value is 400)
- 4) H : Height in pixels (In the example of the IG window, the value is 300)
- 5) Move : (Yes / No) If yes, use the values in X(6) et Y(7) . These values are in percent relatively to the dimensions of the window Ryzom.
- 6) X en %: Relative position in X, 100% box on the right (Like here, in the example of the IG window).
- 7) Y en %: Relative position in Y, 100 % box on the top. (In the example of the IG window, the value 50 % put de box in the middle)
- 8) [expert] Webig window. The default is "Current" in basic mode. This setting determines what kind of WebIG window has to be controlled.
- → BBCode :
- →$_GET[« current_window »] :
- → Webig: Is the window that opens when you do <shift> + w. This is the one that displays web apps
- → Browse Npc: Is the window that opens when talking to an NPC. So this is the one that opens when you link a script to an NPC.
- → Web Transaction: This is a hidden window that receives responses from the server. The player should never see.
- 9) windowTitle : The title of the window when that last one is visible.
Display message in game (broadcast, crafting information...) →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weADisplayIgMessage
|
Cette fonction permet d'afficher des messages dans les canaux de discussions (2).
Il faut noter que l'utilisation de la traduction permet d'avoir le texte dans la langue du joueur. Le texte en anglais étant : « We call it Voight-Kampff for short. » (Blade Runner).
WeADisplayIgMessagewindow
Le tableau suivant donne la liste les caractéristiques des choix de canaux offerts par la fonction (4).
Mode
|
où
|
couleur
|
canal
|
SYS. INFOS
|
Default message system
|
|
blanc
|
|
Oui
|
Only in arround channel
|
|
jaune
|
alentours
|
Non
|
Ambiance
|
haut
|
jaune
|
|
Oui (3)
|
Task
|
bas
|
blanc
|
|
Oui
|
Broadcast messages
|
haut
|
blanc
|
alentours
|
Oui
|
Title
|
bas
|
jaune
|
|
Oui (1)
|
Taged broadcast messages...
|
haut
|
blanc
|
alentours
|
Oui
|
XP gain
|
bas
|
jaune
|
|
Oui (1)
|
SP gain
|
bas
|
jaune
|
|
Oui (1)
|
Zone
|
haut
|
blanc
|
|
Oui
|
Damage to me
|
|
rouge
|
|
Oui (2)
|
Damage to me
|
|
rouge
|
|
Oui (2)
|
Damage to me from player
|
|
rouge foncé
|
|
Oui
|
Damage from me
|
|
orange
|
|
Oui
|
The opponent misses
|
|
gris
|
|
Oui (4)
|
I miss
|
|
blanc
|
|
Oui
|
Item
|
bas
|
vert
|
|
Oui
|
Item other in group
|
bas
|
gris
|
|
|
Item failed
|
bas
|
magenta
|
|
Oui
|
Spell to me
|
|
bleu
|
|
Oui
|
Spell from me
|
|
bleu clair
|
|
Oui
|
Emote
|
|
rose
|
|
Oui
|
Message of the day
|
bas
|
jaune
|
|
Oui (1)
|
Forage Locate Deposit
|
bas
|
vert
|
|
|
False
|
haut
|
orange
|
|
Oui
|
False in battle
|
haut
|
jaune
|
|
Oui (3)
|
PVP timer
|
bas
|
orange
|
|
|
Thema finished
|
bas
|
jaune
|
|
Oui (1)
|
Item special effec
|
|
cyan-gris
|
|
Oui (4)
|
Item special effect with center text
|
haut
|
cyan-gris
|
|
Oui
|
Outpost state message
|
haut
|
bleu clair
|
|
Oui
|
Ring invitation
|
|
vert
|
alentour
|
|
ShapeManager →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weAShapeManager_v2
|
WeAShapeManager permet de poper des objets dans l'espace de Ryzom. Ici, un sac à dos magique apparaît en lévitation au dessus du personnage.
WeAShapeManager Main Window
- 2) shapes: N'importe quelle quantité d'objet (litérallement: de formes) peut être ajouté. Leur description est donnée en bas:
- 3) [commun] Nom interne de la fonction. Ce nom est utilisé notamment pour les sauts, boucles...
- {shape}: <un_objet>.ps
- {shapeName}: Nom donné à l'objet.
- {shapeUrl}: ???
- {texture}: ???
- {posX}: Position x en position absolue dans la carte de Ryzom.
- {posY}: Position y en position absolue dans la carte de Ryzom.
- {posZ}: Position z en position absolue dans la carte de Ryzom.
some strange problem with calculated position.
- {scale}: Échelle. Par défaut = 1.
Save value in the database →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weADatabase_v2
|
Cette fonction sert à stocker une information dans une base locale exploitable par la suite dans le même script ou dans un autre du même event. Elle peut aussi incrémenter les valeurs numériques.
Il est préférable d'utiliser le mode d'édition assisté dans un premier temps, comme visualisé ici.
- 1) Database name : une base de l'event (omega dans l'exemple).
- 2) {databaseRow} : une colonne de la base(1) (Khi, dans l'exemple)
- 3) {databaseId} :
- player,... : signification ?
- [get]bag[/get] signification, fonctionnement ?
- 4) Conversion method : (setvalue/addvalue) : il y a deux mode d'insertion dans la base, soit en écrasant le contenu antérieur, soit en ajoutant au sens algébrique du terme une autre valeur.
- 5) {param} : peut être différente valeurs statiques, récupérée ailleurs ou calculée :
- Le champ vide en mode « setvalue » met à « vide » la cellule de la base consernée. Dans un calcul, le « vide » peut-être assimilé à « zéro ».
- <empty> (rien)
- Une constante : « -1 » en mode « addvalue » permet de créer une décrémentation.
- Un paramètre commun à l'event : [param]Max_player_bag[/param] (comment a été créé ce paramètre?)
- Une valeur contenue dans une base : [db=Player_Bag]Last[/db]
- Une fonction : [func]now[/func]
- Un calcul :
[func=min]
[math]
([func]now[/func]
-
[db=Bags]
Status:[get]bag[/get]
[/db])
[/math]
..|12
[/func]
Save items given by the player in the event database →
Migration
Please use the migrated document at URL shown below.
Obsolète ??
|
Nom interne de la fonction : weAItemsDatabase
|
Player received item →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weAReceiveItems
|
|
WeAReceiveItems script window
- 1) Objet ajouté (ici une la peluche a été mise dans le sac du joueur)
- 2) Plusieurs objet peuvent être ajoutés. Il en faut au moins un.
- 3) Emplacement où sera déposé l'objet: le sac, la maison, la hall de guilde, un animal (mektoub de monte ou de bât), voire un emplacement temporaire.
- 4) Au hasard (Oui/Non) Par rapport à quoi
- 5) Requiert une réponse. A tester. Par défaut "Oui"
- 6) Il s'agit d'une commande magique (Oui/Non) ???
- 7) [commun] Nom interne de la fonction.
- 8) Paramètres créés par la fonction.
Question: comment connait-on la liste exhaustive des items?
- 10) Quatité
- 11) Qualité
- 12) Contenu du sac.
- 13) Quantité Max
- 14) Qualité Max
- 15) Nom personnalisé de l'objet
- 16) Description personnalisée de l'objet
|
DeleteItems →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weADeleteItems
|
WeADeleteItems script window
- 1) Objet à enlever (ici une la peluche). La feuille de description de l'objet est identique à celle utilisée pour la réception de l'objet.
- 2) Plusieurs objet peuvent être enlevés. Il en faut au moins un.
- 3) Emplacement d'où sera retiré l'objet: le sac, la maison, la hall de guilde, un animal (mektoub de monte ou de bât), voire un emplacement temporaire.
- 4) Au hasard (Oui/Non) Par rapport à quoi
- 5) [commun] Nom interne de la fonction.
- 6) Paramètres créés par la fonction.
NpcManager →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weANpcManager
|
Gestion du PNJ.
- 1) groupName ???
- 2) Liste de hmagicActions pour le PNJ
- 3) [commun] Nom interne de la fonction. Ce nom est utilisé notamment pour les sauts, boucles...
weAGroupScript
weASpawnBot
|
- 1) Sheet name
- 2) Quantity
- 3) dispersion
- 4) orientation
- 5) botName
- 6) posX
- 7) posY
- 8) look
|
weADeSpawnBot
weAGroupScriptSay
weAGroupScriptEmote
weAGroupScriptAiAction
Send command to server →
Migration
Please use the migrated document at URL shown below.
WIP
in Arbeit -
work in progress -
trabajo en curso -
travaux en cours -
незавершенное
|
Nom interne de la fonction : Hmagic
|
Hmagic permet d'envoyer une commande au serveur.
- 1) Liste de hmagicActions
- 2) Chaque hmagicActions est éditable.
- 3) On peut ajouter derrière chacun ou globalement un nouvel hmagicActions
- 4) Les hmagicActions peuvent être réordonnés.
- 5) callAfterCheck (Oui/Non)
- 6) valideAction: action qui sera réalisée si Hmagic est validé. Les choix sont les même que ceux proposé par la fonction Jump.
- 7) failAction: action qui sera réalisée si Hmagic est invalidé. Les choix sont les même que ceux proposé par la fonction Jump.
- 8) [commun] Nom interne de la fonction. Ce nom est utilisé notamment pour les sauts, boucles...
weASendUrl
|
- 2) playerName: il peut s'agir de données récupérées dans les étapes antérieures ou stockées dans les DB de l'évent.
- 3) appName: il peut s'agir de données récupérées dans les étapes antérieures ou stockées dans les DB de l'évent.
- 4) appParams: il peut s'agir de données récupérées dans les étapes antérieures ou stockées dans les DB de l'évent.
|
weATeleport
Ne marche pas toujours?
Téléportage du joueur et éventuellement de sa monture.
|
- 1) x: coordonnées X
- 2) y: coordonnées Y
- 3) z: coordonnées Z. La valeur 0 indique que l'objet est posé sur le sol.
- 4) t: délai en secondes pour lancer la téléportation.
- 5) tpMektoub (Oui/Non): téléportage du Mektoub. Par défaut: Non
- 6) forbidWhenPvpFlag (Oui/Non): Interdiction de téléporter avec le drapeau PVP positionné. Par défaut: Oui.
|
weATeleportToEntity
Ne marche pas?
|
- 1) entity: Entity vers laquelle sera téléporté le joueur.
- 2) tpMektoub (Oui/Non): téléportage du Mektoub. Par défaut: Non
- 3) forbidWhenPvpFlag (Oui/Non): Interdiction de téléporter avec le drapeau PVP positionné. Par défaut: Oui.
|
weAManageMoney
Donner ou Prendre des Dappers
|
- 1) hmagicAction: (give/take)
- 2) Dappers: Combien (nombre direct, fourni ou calculé).
|
weAChangeFame
|
- 1) faction: parmi Fyros, Matis, Tryker, Zoraï, Kami et Karavan.
- 2) hmagicAction: add/delete/set
- 3) Quantité: Nombre direct, fourni ou calculé
|
weAChangeFactionPoints
|
- 1) faction: parmi Fyros, Matis, Tryker, Zoraï, Kami et Karavan.
- 2) hmagicAction: add/delete/set
- 3) Quantité: Nombre direct, fourni ou calculé
|
weAManageGuildMoney
|
- 1) hmagicAction: (give/take)
- 2) Dappers: Combien (nombre direct, fourni ou calculé).
|
weAManageBuilding
Vendre / Rendre accessible un appartement de joueur ou de guilde
|
- 1) hmagicAction: achat/vente d'appartement/hall de guilde.
- 2) building: une longue liste d'immeuble disponible, mais sans références compréhensibles.
|
weATriggerPacs
Déclencher un évènement PACS (pour activer un ascenseur ou vortex)
|
- 1) hmagicAction: (in/out)
- 2) triggerId: déclencheur?!!
|
weASetOrganization
But de la fonction?
Définir la Tierce Faction du joueur
|
- 1) orgName: une seule valeur "maraudeur.
|
weAFixOldBuildings
But et fonctionnement de la fonction
|
- 1) scopeAction: (Joueur/guilde)
|
Dans les fonction il faudra analyser:
Les Data Processors
- processor bbcode
- Timestamp
- processor splitdata
- processor splitparam
- processor randint
- Random number
Checks
Datas →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weCDatas
|
Cette fonction est l'équivalent d'un si test VRAI alors A sinon B .
- 1) Valeur
- 2) testFunction
- 3) testValue
- 4) valideAction
- 5) failAction
- 6) [commun] Nom interne de la fonction. Ce nom est utilisé notamment pour les sauts, boucles...
Switch →
Migration
Please use the migrated document at URL shown below.
Translation requested, please.
|
Nom interne de la fonction : weCSwitch_v2
|
Cette fonction permet de proposer 10 branchements conditionnels + 1 par défaut en fonction d'une valeur fournie en premier paramètre de comparaison.
- 1) Valeur à analyser fournie par les paramètres locaux ou la base de données.
- 2) Type de test (==, !=, <, >, <=, >=)
- 3) Valeur du test
- 4) Action si le test est "Vrai". La dernière ligne donne l'action par défaut, c'est à dire quand tous les test précédent on donné "Faux".
- 5) [commun] Nom interne de la fonction.
Verification of value in database →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weCDatabase
|
Cette fonction permet d'enchainer un action ou une autre selon une valeur contenue dans une pase de donnée de l'event.
- 1) Database name : une base de l'event (omega dans l'exemple).
- 2) databaseRow : une colonne de la base(1) (omega, dans l'exemple)
- 3) databaseId : (global, player, guild) : signification ?
- 4) testFunction: (==, !=, <, >, <=, >=)
- 5) testValue: Valeur du test
- 6) valideAction: Action si le test est "Vrai".
- 7) failAction: Action si le test est "Faux".
- 8) [commun] Nom interne de la fonction.
Player verification check from server (Fames, Dapper, Position...) →
|
Nom interne de la fonction : weCPlayerInfos
|
weCPlayerInfos permet de tester toutes les informations stockées sur le serveur concernant le joueur.
- 1) checks: Liste des tests qui vont être exécuté dans cette étape ajouté par les icones "plus".
- 2) valideAction: action si les test sont validés (tous à Vrai).
- 3) failAction: action si au moins un test est invalidé (Statu Faux)
- 4) resetScriptIfFailed: (Oui/Non) Réinitialisation du script en cas d'échec.
- 5) openWindow: Fenêtre ouverte pour afficher les tests (Aucune, WebIG, PNJ au survol, Transaction Web).
- 6) hiddenWindow (Oui/Non)
- 7) [commun] Nom interne de la fonction.
weCPlayerFaction
Teste si le joueur appartient à la faction demandée.
|
- 1) faction: faction à tester. Cette faction peut prendre l'une des valeurs suivantes:
- neutre de civilisation, neutre de culte, neutre des deux à la fois;
- fyros, matis, tryker, zoraï
- kami, karavan
- maraudeur, ranger, trytoniste
|
weCPlayerDappers
Teste si le joueur a une certaine quantité de dappers.
|
- 1) Quantity: quantité de dappers requise.
|
weCPlayerPosition
Examine la position du joueur. Si le joueur se trouve dans le rectangle délimité parles coordonnées min/max de x/y la valeur retournée est VRAI.
|
- 1) min_x: cordonnée minimum en x en absolu par rapport à la carte d'Atys.
- 2) min_y: cordonnée minimum en y en absolu par rapport à la carte d'Atys.
- 3) max_x: cordonnée maximum en x en absolu par rapport à la carte d'Atys.
- 4) max_y: cordonnée maximum en y en absolu par rapport à la carte d'Atys.
|
weCPlayerItem
Teste si une certaine quantité d'item d'une certain niveau est présent dans l'un des emplacements du joueur.
|
- 1) inventory: Emplacement où devrait se trouvé l'objet: le sac, la maison, la hall de guilde, un animal (mektoub de monte ou de bât), voire un emplacement temporaire.
- 2) Nom du sheet: Question: comment connait-on la liste exhaustive des items???
- 3) Qualité: la qualité requise de l'item
- 4) minQuantity: sa quantité minimum.
|
weCPlayerTarget
Teste si la cible est celle souhaitée.
|
- 1) type de cible: objet, PNJ, joueur, membre d'équipe, de guilde ou de ligue.
- 2) Valeur: les trois premiers types demandent une précision du nom (nom du sheet, du PNJ ou du joueur)
|
weCPlayerFame
Teste la réputation dans les nations et factions standard.
|
- 1) faction: les faction qui peuvent être testées sont:
- fyros, matis, tryker, zoraï
- kami, karavan
Les autres se déduisent de ces comparaisons.
- 2) below_or_above: détermine si le test porte sur les valeurs inférieures ou supérieures du champ suivant donnée dans Valeur.
- 3) Valeur: niveau de réputation requis, maximum ou minimum selon la comparaison choisie dans le champ précédent below_or_above.
|
weCPlayerGuild
Teste le grade du joueur dans sa guilde
|
- 1) rank: Chef, Officier supérieur, Officier, Membre.
|
weCPlayerGuildDappers
Teste si une quantité minimum de dappers est dans le trésor de la guilde.
|
- 1) Quantity: quantité de dappers requise.
|
weCPlayerFreetrial
Test si le joueur est en version gratuite ou non.
Captures information
Captures information on the player →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weGPlayerInfos
|
weGPlayerInfos permet de prendre toutes les informations stockées concernant la cible du joueur ou la position de ce dernier.
- 1) source de l'info (cible, position de la cible, position du joueur)
- 2) [commun] Nom interne de la fonction. Ce nom est utilisé notamment pour les sauts, boucles...
Steps to be validated by player
NewGiveItems →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weSNewGiveItems
|
weSNewGiveItems permet de donner des items de qui à qui?
WeSNewGiveItems main window
- 1) Items demandés, au moins un.
- 2) [commun] Nom interne de la fonction.
Description des items demandés.
WeSNewGiveItems item sub window
- 1) Nom du sheet: Question: comment connait-on la liste exhaustive des items???
- 2) Quantité: la quantité requise de l'item
- 3) Qualité: la qualité requise de l'item
- 4) quantity_max: la quantité maximum.
- 5) quality_max: la qualité maximum.
NPC dialog bubble option (like classic missions) →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weSNpcDialog_v2
|
Cette fonction permet de créer une bulle de dialogue d'un PNJ.
Cette bulle es composée de deux parties.
- La partie supérieure contient un texte d'introduction, qui peut être un long monologue.
- La partie inférieure contient un ensemble de choix qui enchaîneront d'autres actions.
- 1) À noter que cette fonction active un parametre: weSNpcDialog_v2_1rpqpga2:SELECTED qui retourne le numéro du choix de l'utilisateur.
- 3) Ce champ contient la parie supérieur de la bulle. Le texte peut être relativement long.
- 4) Cette zone contient 8 choix disponibles pour les joueurs.
- 5) Chaque option peut conduire à une action spécifique.
- 5.1) La colonne de droite donne le libellé de la question tel que le joueur la verra éventuellement dans sa langue si on utilise la traduction. Si le champ est vide, il n'y a pas d'option affichée dans la bulle.
- 5.2) La colonne de gauche affiche les actions découlant des choix des joueurs.
- Les actions sont divisées en:
- 5.2.1) none
- 5.2.2) resume or finish de script
- 5.2.3) open or finish the URL
- 5.2.4) jump to a stage (seulement après l'étape courante, comme la fonction Jump
- 5.2.5) run script
- 5.2.6) include script (même fonction que Include
←ARCC Guide FR
The player must wait X seconds for validation (automated validation possible) →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weSTimer
|
Cette fonction déclenche un compte à rebours visualisé en haut de la scène IG par le remplissage de la flèche.
- 1) Durée du compte à rebours en secondes
- 2) Annuler l'action si le joueur se déplace: (Oui/Non)
- 3) [commun] Nom interne de la fonction. Ce nom est utilisé notamment pour les sauts, boucles...
Mission →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weSMission
|
Cette fonction permet de créer des missions comme ici. Le PNJ qui annonce l'action "Replicant Kitin Eradicator", a donné la mission "Eradication mission" qui consiste à "You have to kill goo-kitins , now!".
La fonction mission ne permet d'activer qu'une seule mission à la fois.
- 1) Selection d'une mission.
- 2) Icône, nom et description de la mission.
- 4) [commun] Nom interne de la fonction. Ce nom est utilisé notamment pour les sauts, boucles...
weAMissionGeneric
|
- 1) target
- 2) title
- 3) Description
- 4) obj
|
weAMissionLoot
|
- 1) target
- 2) tool
- 3) no_tool_message
- 4) title
- 5) Description
- 6) obj
|
weAMissionTalkTo
|
- 1) target
- 2) actionText
- 3) title
- 4) Description
- 5) obj
|
weAMissionKillFauna
|
- 1) target
- 2) title
- 3) Description
- 4) obj
|
weAMissionKillNpc
|
- 1) target
- 2) title
- 3) Description
- 4) obj
|
weAMissionRemove
Itemshop →
Migration
Please use the migrated document at URL shown below.
|
Nom interne de la fonction : weSItemshop
|
Achat d'item? comment le PNJ a ces items?
La fonction Itemshop ne permet d'acheter qu'une seule type d'item à la fois.
WeSItemshopScript main window
- 1) Selection d'un type d'item.
- 2) Icône, nom et description de l'item.
- 3) prix de l'item
- 4) timer: ???
- 5) (money/pvp_points) payé en dappers ou en points de faction???
- 6) stockage en DB de l'item acheté?
- 7) action suivante si l'item à bien été acheté???
- 8) fenêtre ouvert pour afficher les tests (Aucune, WebIG, PNJ au survol, Transaction Web).
- 9) [commun] Nom interne de la fonction.
weItems
Description technique de l'item
|
- 1) Nom du sheet: Question: comment connait-on la liste exhaustive des items???
- 2) Quantité
- 3) quantité max
- 4) Qualité
- 5) qualité max
- 6) Nom personnalisé
- 7) texte descriptif personnalisé
|
Items in bag: Il est possible d'afficher le contenu du sac, mais comment s'en servir IG?
weNamedItem
Nom de l'item. Pourquoi ne pas passer par la fonction traduction?
|
- 1) phrase clef identifiant l'item
- 2) Nom de l'item en FR
- 3) Nom de l'item en EN
- 4) Nom de l'item en DE
- 5) Nom de l'item en RU
- 6) Nom de l'item en ES
|
weVirtualItem
Un virtual item, c'est quoi?
|
- 1) virtualItem
- 2) Icon
- 3) itemName
- 4) Quantity
|