RMEx
RMEx

Community


Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

Entrainement pour RME/Script

Voir le sujet précédent Voir le sujet suivant Aller en bas  Message [Page 1 sur 1]

Un peu différent des ateliers classiques. Je propose de regrouper, dans ce sujet divers, petits énoncés pour permettre à ceux qui veulent s’entraîner avec RME de pratiquer.

Le glaçon

Le problème de la glace, c'est qu'elle fond...
Créer un événement détruisant un objet lorsque certaines conditions sont remplies.
Exemple de condition: écoulement du temps, se trouver dans une région,...

Le superficiel

Quoi que l'on puisse dire l’apparence a toujours un rôle plus ou moins important.
Créer un PNJ accordant de l’intérêt au héros uniquement si il porte sur lui des équipements dont le prix est supérieure a une certaine somme.

Entrainement Pokémon

Les hautes herbes cache souvent de nombreuses surprises.
Dissimuler le héros lorsqu'il entre dans des hautes herbes.

Saut de l'ombre

Permettre au héros de se téléporté depuis et vers n'importe qu'elle zone d'ombre.

Aléatoire I : Coffre

Crée des coffres dont les loots sont aléatoire.
supplement: securité contre le try&retry devant le coffre

Aléatoire II : Les ressources

Faire apparaitre des ressources sur la map. les resources doivent apparaitre dans des endroit cohérant, ne pas bloquer le chemin, persister avec le changement de map, se regenerer, et avoir une limite maximun facilement modifiable.

Aléatoire III : 7 Boule de crystal

Certaine chose sont plus rare que d'autre, comme les 7 boules de cristal .
Structure une méthode d'ajout d'objet pour gérer des objets en édition limité avec l'aléatoire.

Combat I : Instinct

Crée une aptitude prévenant le personnage d’éventuels ennemis invisibles.

Combat II : Pyromanie

crée une compétence passive, qui augmente les dégâts de feu infligé uniquement si sous l'effet d'une altération d’état Brulure.

Participation

Ergo:Le superficiel
Ulis:Le superficiel
Ulis: Le glaçon



Dernière édition par Celestiel le Jeu 4 Juin - 21:09, édité 8 fois

Voir le profil de l'utilisateur

Le superficiel

Je trouve cet exercice très intéressant! Merci ! Après avoir dit des bétises avec Ulis, Cantarelle et Ely...quelquechose (+ Chevalier Noir), j'ai décidé de tenter de participer à l'atelier de Celestiel !

Voici le rendu :


Je me suis fortement aidé de ce tutoriel : Wiki de RME

J'utilise un événement commun pour calculer facilement le total des équipements :

CommonEvent - Calc-equip-sum
| > Commentaire : /!\ place le coût total de l'équipement dans la variable globale 999
| > Commentaire : -
| > Commentaire : Calcul du coût des armures
| > Appeler Script : V[999] = 0
| > Appeler Script : SV[2] = actor_armors(1)
| > Appeler Script : SV[3] = 0
| > Appeler Script : SV[4] = length(SV[2])
| > Boucle
| >| > Condition : Script : SV[3] == SV[4]
| >| >| > Sortir de la Boucle
| >| >| >
| >| > Fin - Condition
| >| > Appeler Script : V[999] += armor_price(SV[2][SV[3]])
| >| > Appeler Script : SV[3] += 1
| >| >
| > Fin - Boucle
| > Commentaire : -
| > Commentaire : Calcul du coût des Armes
| > Appeler Script : SV[2] = actor_weapons(1)
| > Appeler Script : SV[3] = 0
| > Appeler Script : SV[4] = length(SV[2])
| > Boucle
| >| > Condition : Script : SV[3] == SV[4]
| >| >| > Sortir de la Boucle
| >| >| >
| >| > Fin - Condition
| >| > Appeler Script : V[999] += weapon_price(SV[2][SV[3]])
| >| > Appeler Script : SV[3] += 1
| >| >
| > Fin - Boucle
| > Commentaire : -
| > Commentaire : Calcul du coût de l'accessoire
| > Condition : Script : actor_accessory(1) > 0
| >| > Appeler Script : V[999] += item_price(actor_accessory(1))
| >| >
| > Fin - Condition
| >
Ensuite je peux faire ça  (ici c'est l'événement de la fille !)

Event - EV003
| > Appeler Événement Commun : [Calc-equip-sum]
| > Condition : Variable [0999] >= 5000
| >| > Message : Ø, Ø, Normal, Haut
| >| > Message : Oh ! Tu es parfaitement mon type !
| >| > Afficher une émoticône : Cible - Cet événement, Coeur
| >| >
| > Sinon
| >| > Message : Ø, Ø, Normal, Haut
| >| > Message : Désolé, tu n'es pas assez bien équipé pour  
| >| > Message : me plaire... (ton équipement ne vaut que \V[999])
| >| >
| > Fin - Condition
| >
Voila Smile

Pour le glaçon

Je ne sais pas trop quoi faire... Il me semble que les Déclencheurs personnalisés suffisent simplement à réaliser cet atelier ? Qu'en dis-tu Celestiel?

Voir le profil de l'utilisateur

Ergo: Le superficiel

Code:
actor_armors(ID)
Une petite remarque sur la commande: l’accessoire est aussi une armure du coup tu ajoutes deux fois la valeur de l’accessoire.

Ergo: Le glaçon

En effet, un simple déclencheur personnalisé suffit, ces exercices n'ont pas seulement pour objectif de servir d'entrainement à RME mais aussi de montrer des exemples d'utilisation diverse pour donner un peu plus de de vie au jeu. Il y a de nombreuse possibilité très courte a réalisées qui peuvent toute avoir des impacts différant sur le jeu. la première étape pour réellement commencer cet le glaçon est de se fixer une condition et un contexte dans lequel, le glaçon disparait.



Dernière édition par Celestiel le Jeu 4 Juin - 20:01, édité 2 fois

Voir le profil de l'utilisateur
Merci, j'ai corrigé

Voir le profil de l'utilisateur
Celestiel, j'ai fait ça pour le superficiel :

Code:

beauty = 0
(0..4).each do |slot|
   if $game_actors[$game_party.leader.id].equips[slot]
    beauty += $game_actors[$game_party.leader.id].equips[slot].price
  end
end
$game_message.add(beauty >= 5000 ? "Bonjour !" : "Dégage !")

Placé dans l'event du superficiel, la fin simule une réponse. S'il doit y avoir plus de 5 slots d'équipement, je veux bien rechercher comment faire.

Merci à ma triche.

Voir le profil de l'utilisateur
Yo. Je pense répondre en deux points.

A propos de ta participation
Je trouve ça hors propos de répondre avec une solution "full" script et je trouve qu'il faudrait éventuellement une section destiné aux snippets de code.

A propos de ta proposition
N'hésite pas à regarder "Array#sum". et mieux vaudrait modifier un interrupteur que d'ajouter directement le message.

Voir le profil de l'utilisateur
Ergo, mes exercices sont en ruby, j'y réponds en ruby dans le but de partager quelque chose et d'animer le sujet. sum n'existe pas : / Pour le suivant, je le fais dans les deux versions :

Glaçon :

sans RME (+une variante)
http://image.noelshack.com/fichiers/2015/23/1433255585-glace.png



avec RME
Code:
items_possessed.each do |id|
  give_item(id,-item_count(id)) if item_name(id)== "glaçon"
end

La condition en dialogue, c'est le minimum, je me suis intéressée à la partie faire disparaître les glaçons. Pour le ruby, je fais disparaître le maximum car je n'ai pas trouvé comment rendre égale à 0 une quantité d'item.

Pour le RME, je retire le nombre existant, comme la documentation rassemble tout sur les objets dans une page, la partie de recherche désagréable disparaît : )

Voir le profil de l'utilisateur

Ulis: Le superficiel

Code:
beauty = 0
(0..4).each do |slot|
   if $game_actors[$game_party.leader.id].equips[slot]
    beauty += $game_actors[$game_party.leader.id].equips[slot].price
  end
end
each peux être utiliser directement sur le tableau, mais le tableau d’équipement contient des case vide.
compact permet d'obtenir le tableau sans les valeurs nil (case vide)
Code:

  beauty = 0
  $game_actors[$game_party.leader.id].equips.compact.each do |equip|
  beauty += equip.price
end
arr.reduce(memo){|memo , elt| code }
mémo est la valeur de départ
elt un élément du tableau
pour chaque élément elt

si arr contient des entiers

Code:
arr.reduce(:+)
Code:
arr.reduce(0){ |memo,elt| memo+elt}
pour chaque élément de array elt va être ajouté a mémo.

si arr contient des objets

Code:
arr.reduce(0){ |memo,elt| memo+elt.variable}
pour chaque élément de array la valeur contenue dans elt.variable va être ajouté a mémo.
Code:
beauty = $game_actors[$game_party.leader.id].equips.compact.reduce(0){|s,equip| s+equip.price}

Ulis: Le glaçon

Pas grand chose a dire

Ajout

Entrainement Pokémon
Saut de l'ombre
Aléatoire I : Coffre
Aléatoire II : Les ressources
Aléatoire III : 7 Boule de crystal
Combat I : Instinct
Combat II : Pyromanie

Voir le profil de l'utilisateur
Voici ce que j'ai fait pour le coffre.
Code:
CommonEvent - butin
| > Opération : Variable [0016:niveau] = [Zeld] : Niveau
| > Déplacer évènement : Cet événement (Attendre la fin)
| > Déplacer évènement  : > Direction fixe OFF
| > Déplacer évènement  : > Regarde vers la Gauche
| > Déplacer évènement  : > Attendre : 3 Frames
| > Déplacer évènement  : > Regarde vers la Droite
| > Déplacer évènement  : > Attendre : 3 Frames
| > Opération : Interrupteur local A = Activé
| > Opération : Variable [0015:butin] = (valeur aléatoire entre 1 et 5)
| > Condition : Variable [0015:butin] == 1
| > | > Modifier Objet : [Potion] + 1
| > | >
| > Sinon
| > | >
| > Fin - Condition
| > Condition : Variable [0015:butin] == 2
| > | > Modifier Objet : [Éther] + 1
| > | >
| > Fin - Condition
| > Condition : Variable [0015:butin] == 3
| > | > Modifier Objet : [Queue de phénix] + 1
| > | >
| > Fin - Condition
| > Condition : Variable [0015:butin] == 4
| > | > Modifier Objet : [Antidote] + 1
| > | >
| > Fin - Condition
| > Condition : Variable [0015:butin] == 5
| > | > Modifier Objet : [Élixir] + 1
| > | >
| > Fin - Condition
| >
Et pour un coffre avec un nombre aléatoire d'argent.
Code:
CommonEvent - coffre
| > Déplacer évènement : Cet événement (Attendre la fin)
| > Déplacer évènement  : > Direction fixe OFF
| > Déplacer évènement  : > Regarde vers la Gauche
| > Déplacer évènement  : > Attendre : 3 Frames
| > Déplacer évènement  : > Regarde vers la Droite
| > Déplacer évènement  : > Attendre : 3 Frames
| > Opération : Interrupteur local A = Activé
| > Opération : Variable [0012:coffre] = (valeur aléatoire entre 1 et 5000)
| > Modifier Argent : + Variable [0012:coffre]
| > Message :  Ø, Ø, Normal, Haut
| > Message  :  \V[12]Argent obtenus !
| >

Voilà Very Happy

Voir le profil de l'utilisateur
Sympa d'avoir une série d'ateliers Razz

Pour ma part, j'essaye de faire un projet qui regroupe le plus d'ateliers proposé ici, histoire d'avoir quelque chose d'assez regroupé (et pas des morceaux d'atelier un peu partout comme j'ai l'habitude de faire :v )

Progression Ateliers
  • Le Glaçon (En partie)
  • Superficiel (Fait)
  • Coffre aléatoire avec poids (Fait)
Explications Ateliers:
La Glaçon:
Pour l'atelier du glaçon, j'ai penser à faire des événements qui "fondrais" passer un certain temps sur certaines surfaces.
Pour cela j'ai un événement en processus parallèle qui dresse un tableau des événements cible (ici contenant "glaçon" dans leur nom d'événement) et un tableau de leur "statue de fonte".
Après cela, l'événement se charge de diminuer les stats de ceux qui sur certain "tile_id" (en utilisant RME) jusqu'à ce qu'ils "fondent" (disparaissent ici)


Mon petit soucis, c'est que je n'arrive pas à utiliser de sélecteur (comme indiqué dans le wiki / qui ne fais pas partis de la doc ?) pour récupéré la liste d'events que je veux, je dois donc passer par une méthode assez barbare et naze (car si on enlève un event de la map, ça fais tout foirer), et de plus la méthode pour diminuer les stats m'a l'air tout aussi foireuse, car elle bug lorsque plusieurs "glaçons" meurent en même temps Laughing, j'aurais aussi pu déclarer des variables locales avec RME plutôt que d'utiliser des variables globales en Ruby (My bad D:)

Aperçu du résultat (WEBM)
Superficiel:
Pour superficiel, tout était dans l'énoncé original, j'ai fait un événement qui entraine une série d'action uniquement si notre équipement complet dépasse une certaine valeur.

Pour cela j'ai tout simplement utiliser 4 commandes de RME : "actor_weapons" et "actor_armors" pour récuperer tout l'équipement du personnage, et j'ai additionné toutes les valeurs retourner par "weapon_price" et "armor_price" que j'ai foutu dans une variable RM Razz
Code:
V[1] = 0
actor_weapons(1).each do |id|
    V[1] += weapon_price(id)
end
actor_armors(1).each do |id|
    V[1] += armor_price(id)
end

J'aurais pu aussi faire en sorte que l'on calcul le total pour le Leader de l'équipe, mais je voulais rester en full RME pour cette fois, et je n'ai pas vu de quoi récupérer cela avec :v

Aperçu du résultat (WEBM)
Coffre aléatoire avec poids:
Dans cet atelier, j'ai voulu créer un coffre avec loot aléatoire, mais dont les items et les probabilités de loots sont lié à un "poids" (ici le prix de l'objet).
L'item looté dépend donc de ce poids, en plus d'un pourcentage pour savoir si on loot l'item ou rien.


Le but ici était de récuperer la liste des items du jeu avec RME (grâce à la table statique VXACE_ITEM) pour créer la liste d'item/poids du coffre.
Code:
Formule du poids = ceil(1 / prix objet * prix total de tout les objets du jeu)
On choisis ensuite de stocker les items/golds dans des variables locales en fonction de ses besoins, et en appliquant une formule de random en pourcentage.
Attention, fat script d'exemple en approche Very Happy

Code:
#Initialisation du coef poids
$price_coef = 0
VXACE_ITEM.each do |pk, record|
    $price_coef += record.price
end
Code:
#Code du coffre random avec poids
$item_list = []
$price_list = []
price_total = 0
#Liste des items/poids inférieur à 150 golds
VXACE_ITEM.each do |pk, record|
    if record.price <= 150 then
        $item_list.insert($item_list.size, pk)
        price_total += (1.0 / record.price * $price_coef)
        $price_list.insert($price_list.size, price_total.ceil)
    end
end
#Fonction qui permet d'avoir l'ID d'item_list selon la valeur obtenu dans le random
def get_rng(n)
    if n <= $price_list[0] then
        return $item_list[0]
    else
        for i in 1..$price_list.size-1
            if n > $price_list[i-1] && n <= $price_list[i] then
                return $item_list[i]
            end
        end
    end
end
#Gold random en fonction du niveau du joueur
SV[0] = (random(1, 30) * actor_level(1)) * (random(0,100)<50?0:1)
#Item random entre un poids de 0 et le poids max de la liste
SV[1] = get_rng(random(0, $price_list[$price_list.size - 1])) * (random(0,100)<25?0:1)
SV[2] = get_rng(random(0, $price_list[$price_list.size - 1])) * (random(0,100)<50?0:1)
SV[3] = get_rng(random(0, $price_list[$price_list.size - 1])) * (random(0,100)<90?0:1)

gain_gold(SV[0])
for i in 1..3
    if SV[i]>0 then
        give_item(SV[i], 1)
    end
end

D'ailleurs, un fat bug bien violent dans le système fait qu'il existe dans VXACE_ITEM un item avec l'ID "nil" qui coute 200 golds, donc il y a des chances, si cet item fait partis de la liste... que tout fasse BOOOOOOOM !

Aperçu du résultat (WEBM)
Hésitez pas à faire un retour sur mes scripts (tout pourris), y'a pas de petits profits Razz
Ci-dessous vous trouverez une archive contenant le projet RPG Maker VXACE, avec tout les ateliers que j'ai fait (et en bonus, vous pouvez être simple spectateur, tout est jouable Very Happy)
Download Project Archive (Last Update : 20.07.15 02:21)

Voir le profil de l'utilisateur
Quelques choses que je n'ai pas saisi à propos de "l'Aléatoire II" : faut-il comprendre le terme de "ressources" comme désignant l'élément graphique au sens de celui utilisé en mapping, donc directement inclu dans la map, ou comme n'importe quel élément affiché en événement ?
De même, qu'est-il question lorsqu'il s'agit de "se régénérer" ?

Voir le profil de l'utilisateur

Joke

avatar
Admin
Je pense qu'il s'agit de ressources dans le sens "collectable", comme des fleurs, des champignons, du bois, des pierres, des objets qu'on peut ramasser, et qui mettront un certain temps avant de réapparaître au même endroit ou ailleurs. (donc se régénérer)

Voir le profil de l'utilisateur

13

Contenu sponsorisé


Voir le sujet précédent Voir le sujet suivant Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum