RPG Creator : créez votre MMORPG ou RPG sans aucune connaissance en programmation


Disponible le 4 Juin !




- Jouez à votre jeu sur tablettes tactiles, Smartphones et navigateurs Web
- Personnalisez vos menus
- Dessinez facilement et rapidement vos cartes
- Créez des actions pour le combat A-RPG


www.rpgcreator.net


Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


-Mettez un titre clair et explicite, pas un titre vague.
-Fournissez le plus d'informations possible, soyez clair et concis.
-Pensez à éditer votre sujet afin d'ajouter [Résolu] dans le titre, lorsque votre demande est résolue.



Publier un nouveau sujet Répondre au sujet  [ 13 messages ]  Aller à la page Précédent  1, 2
Auteur Message
 Sujet du message: Re: Système de puzzle comme Lolo Adventure
MessagePublié: 08 Jan 2012, 01:57 
Artisan (Nv 5)
Avatar de l’utilisateur

Inscrit le: 22 Nov 2011, 22:01
Messages: 199
Niveau RPG Maker: Moyen
Logiciel(s) préféré(s): RPG Maker XP
Point(s) Fort(s): Scripts
Sexe: Masculin
Points d'aide: 17/60

Créations :

Voir ses créations

Je vais encore retardé le tuto (voir l'annulé dsl :oops: ),

J'ai terminé les scripts (grosso-modo) et j'ai réalisé que c'était pas
forcément évident pour quelqu'un qui ne s'y connait pas trop niveau ruby de s'y
retrouver c'est pourquoi je vais finalement te passer des portions de codes et t'expliquer
comment s'en servir pour récupérer des informations et les mettre dans des variables.
Tu pourras tout de même faire certaines choses plus rapidement et plus facilement.
Je vais éditer ce message pour les explications.


--------------------------------------------------------------------------------------------------------------------------------
Edit:
Tu dois créer un script au dessus de main et y coller tout ça.

Code: Tout sélectionner
module GameLolo
  # #########################################################################
  # Interrupteurs
  # ========================================================================
  HEROSPOSSPC = 1
  TIRPOSSPC = 2
  # #########################################################################
  # Variables
  # ========================================================================
  HEROSTYPEPOS = 1
  TIRTYPEPOS = 2
  XTIR = 3
  YTIR = 4
  DTIR = 5
  # #########################################################################
end

Alors ici on a le module GameLolo,
Ce module nous servira à savoir dans quelles variables ou interrupteurs mettre les valeurs
calculées par les scripts. Exemple: pour l'interrupteur HEROSPOSSPC, j'ai mis 1 après le "="
ça veut dire que la valeur false ou true sera mise dans l'interrupteur d'id 1.

Maintenant à quoi sert ce que j'ai écrit:
HEROSPOSSPC : Détermine si le héros se trouve à une position spéciale qui l'empêcherais
de faire un tir simple. (devant un monstre, devant un coffre déplaçable, devant un rocher,
devant les façades extérieures, devant une flèche). false ou true.
TIRPOSSPC : Détermine si le tir se trouve à une position spéciale (sur un rocher, sur un
monstre, sur un coffre déplaçable).

HEROSTYPEPOS : Devant quoi se trouve le héros?
TIRTYPEPOS : Sur quoi se trouve le tir?
0 = monstre
1 = coffre déplaçable
2 = rocher
3 = flèche
4 = eau
5 = rien
6 = murs extérieurs (les bords)
XTIR : Position x du tir.
YTIR : Position y du tir.
DTIR : Direction du tir.


Code: Tout sélectionner
def initialiser_jeu
  $event = nil
end

Tu dois créer un event en démarage automatique et mettre dans cet event:
insérer un script: tu écris dedans "initialiser_jeu" sans les guillemets.
Tu peux déjà copier l'événement sur toutes tes maps de jeu.


Code: Tout sélectionner
def pos_heros
  x = $game_player.x
  y = $game_player.y
  d = $game_player.direction
  return x, y, d
end

Cette méthode ne sert pas à grand chose mais je préfère appeler les positions
du héros en faisant pos_heros[0] que $game_player.x. Il faut quand même la garder
car je m'en sert dans les prochains codes.


Code: Tout sélectionner
def events(id, event_id, type)
  # 0 = monstre
  # 1 = coffre
  # 2 = rocher (pour le marteau)
  # 3 = fleche
  # 4 = eau (pour les ponts)
  x = $game_map.events[event_id].x
  y = $game_map.events[event_id].y
  d = $game_map.events[event_id].direction
  proprietes = [x, y, d]
  # emplacements 0 à 9 pour les monstre (10 monstres par map)
  id += 10 if type == 1 # emplacements 10 à 19 pour les coffres (10 coffres par map)
  id += 20 if type == 2 # emplacements 20 à 49 pour les rochers (30 rochers par map)
  id += 50 if type == 3 # emplacements 50 à 59 pour les fleches (10 fleches par map)
  id += 60 if type == 4 # emplacements 60 à 149 pour l'eau (90 eau par map)
  $event = []
  $event[id] = proprietes
end

Ça c'est le code le plus important. ça met dans un tableau nommé $event
des infos utiles sur justement les événements de la map. Leur nature, leurs positions x
et y et leur direction. Comment s'en servir?
Pour un monstre tu mets dans l'event:
inséter un script: tu écris "event(id_du_monstre, id_event, type)
id_du_monstre : 0 si c'est le premier monstre de la carte que tu créer.
id_event : ben l'id de l'event
type : 0 # si c'est un monstre
type : 1 # si c'est un coffre
type : 2 # si c'est un rocher
type : 3 # si c'est une fleche
type : 4 # si c'est de l'eau(pont)
En bref, event(0,2,0) = event de type monstre d'id 2 et dont le monstre est d'id 0.
Il y a d'autres infos dans le code.


Code: Tout sélectionner
def positionner_tir
  x = pos_heros[0]
  x -= 1 if pos_heros[2] == 4
  x += 1 if pos_heros[2] == 6
  y = pos_heros[1]
  y -= 1 if pos_heros[2] == 8
  y += 1 if pos_heros[2] == 2
  $game_variables[GameLolo::XTIR] = x
  $game_variables[GameLolo::YTIR] = y
  $game_variables[GameLolo::DTIR] = pos_heros[2]
end

Cette méthode sert à positionner le tir,
-> Créer un nouvel événement c'est le tir du héros
-> insérer un script: "positionner_tir"
-> Placer un event (tu choisis les variables d'id dont la valeur est la même que XTIR et YTIR)
Et là l'event qui représente le tir du héros se retrouvera devant le héros (le mouvement
est à faire sans scripts)


Code: Tout sélectionner
def positions_spc?(testeur="heros", event_id=0) # event_id à définir si testeur = "tir"
  x = pos_heros[0] if testeur == "heros"
  y = pos_heros[1] if testeur == "heros"
  d = pos_heros[2] if testeur == "heros"
  x = $game_map.events[event_id].x if testeur == "tir"
  y = $game_map.events[event_id].y if testeur == "tir"
  d = $game_map.events[event_id].direction if testeur == "tir"
  value = false
  type = 5
  # 5 = le héros peut tirer
  # 6 = le héros fait face aux murs extérieurs.
  for i in 0..9 # monstres
    if $event[i] != nil
      if testeur == "heros"
        if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 0 ; end
        if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 0 ; end
        if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 0 ; end
        if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 0 ; end
      elsif testeur == "tir" ; if x == $event[i][0] and y == $event[i][1]; value = true ; type = 0 ; end
      end
    end
  end
  for i in 10..19 # coffres
    if $event[i] != nil
      if testeur == "heros"
        if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 1 ; end
        if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 1 ; end
        if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 1 ; end
        if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 1 ; end
      elsif testeur == "tir" ; if x == $event[i][0] and y == $event[i][1]; value = true ; type = 1 ; end
      end
    end
  end
  for i in 20..49 # rochers
    if $event[i] != nil
      if testeur == "heros"
        if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 2 ; end
        if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 2 ; end
        if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 2 ; end
        if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 2 ; end
      elsif testeur == "tir" ; if x == $event[i][0] and y == $event[i][1]; value = true ; type = 2 ; end
      end
    end
  end
  for i in 50..59 # fleches
    if $event[i] != nil
      if testeur == "heros"
        if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 3 ; end
        if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 3 ; end
        if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 3 ; end
        if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 3 ; end
      end
    end
  end
  for i in 60..149 # eau
    if $event[i] != nil
      if testeur == "heros"
        if y+1 == $event[i][1] and x == $event[i][0] and d == 2 ; value = true ; type = 4 ; end
        if x-1 == $event[i][0] and y == $event[i][1] and d == 4 ; value = true ; type = 4 ; end
        if x+1 == $event[i][0] and y == $event[i][1] and d == 6 ; value = true ; type = 4 ; end
        if y-1 == $event[i][1] and x == $event[i][0] and d == 8 ; value = true ; type = 4 ; end
      end
    end
  end
  if testeur == "heros"
    if y == 11 and d == 2 ; value = true ; type = 6 ; end
    if x == 3 and d == 4 ; value = true ; type = 6 ; end
    if x == 13 and d == 6 ; value = true ; type = 6 ; end
    if y == 1 and d == 8 ; value = true ; type = 6 ; end
  end
  if testeur == "heros"
    $game_switches[GameLolo::HEROSPOSSPC] = value
    $game_variables[GameLolo::HEROSTYPEPOS] = type
  elsif testeur == "tir"
    $game_switches[GameLolo::TIRPOSSPC] = value
    $game_variables[GameLolo::TIRTYPEPOS] = type
  end
end

J'expliquerais ce code aujourd'hui quand j'aurais dormi un petit peu (fatigé^^')

Edit 2: Ici on a la méthode qui permet de savoir si le héros où le tir se trouve
à une certaine position. Par exemple si tu créer un event en processus parallèle,
tu mets une condition "si la touche C est appuyée".
Tu fais à l'intérieur insérer un script où tu écris : positions_spc?("heros"), ceci va calculer
les positions de ton héros et des événements qui peuvent interagir avec lui et renvoyer
deux valeurs.
La première, value qui sera placée dans l'interrupteur d'id HEROSPOSSPC (true ou false)
Si c'est true le héros se trouve à une position spéciale. si c'est false c'est pas le cas et
il peut tirer normalement.
La seconde, type qui sera placée dans la variable d'id HEROSTYPEPOS (0 à 6)
Si c'est 0 devant un monstre, si c'est 2 devant un coffre déplaçable ...
Tu peux remplacer le héros entre parenthèses par tir et à ce moment ce qui sera calculé
c'est la position du tir. J'espère que ça t'aidera au moins un petit peu.
Si tu as besoins de scripts pour obtenir des positions ou quelque chose du genre
n'hésites pas à demander.

_________________
--- Bad_maker ---


Haut
 Profil  
 
 Sujet du message: Re: Système de puzzle comme Lolo Adventure
MessagePublié: 09 Jan 2012, 02:05 
Villageois (Nv 1)

Inscrit le: 14 Mar 2011, 11:56
Messages: 17
Sexe: Masculin
Points d'aide: 0/60

Créations :

Voir ses créations

Salut, j'ai lu un peu ce que tu a dit.
id += 10 if type == 1 # emplacements 10 à 19 pour les coffres (10 coffres par map)
id += 20 if type == 2 # emplacements 20 à 49 pour les rochers (30 rochers par map)
id += 50 if type == 3 # emplacements 50 à 59 pour les fleches (10 fleches par map)
id += 60 if type == 4 # emplacements 60 à 149 pour l'eau (90 eau par map)

À noter que dans ce genre de jeu, il y a assez souvent plus de 30 rochers dans une map. Certes elles ne sont pas tous forcément dans une zone ou elles peuvent changer quelque chose et les supplémentaire peuvent être ignoré.

Mais pour les flèches, je me demandais.... Est-ce nécessaire de les gérer? C'est assez simple de juste mettre un code qui empêche l'utilisateur d’avancer. Et aussi, il y a très régulièrement plus de 10 flèches par map.

Il y a les tour qui se déplace également dans le jeu et les dragon qui font pareil a l'exception qu'il ne tu pas automatiquement, on peu éviter leur projectile.

Dans lolo 3, il existe aussi un ennemie qui nous aspires vers lui si on passe devant.


Haut
 Profil  
 
 Sujet du message: Re: Système de puzzle comme Lolo Adventure
MessagePublié: 09 Jan 2012, 02:47 
Artisan (Nv 5)
Avatar de l’utilisateur

Inscrit le: 22 Nov 2011, 22:01
Messages: 199
Niveau RPG Maker: Moyen
Logiciel(s) préféré(s): RPG Maker XP
Point(s) Fort(s): Scripts
Sexe: Masculin
Points d'aide: 17/60

Créations :

Voir ses créations

Salut XGuarden,
je n'ai joué qu'au premier donc je ne connais pas tout (et j'ai arrêté à un petit
niveau...). D'ailleurs je n'ai commencé à y jouer que pour voir comment aider à la base ^^'.
Pour avoir plus de rocher tu as juste à remplacer ça:
Code: Tout sélectionner
id += 10 if type == 1 # emplacements 10 à 19 pour les coffres (10 coffres par map)
id += 20 if type == 2 # emplacements 20 à 49 pour les rochers (30 rochers par map)
id += 50 if type == 3 # emplacements 50 à 59 pour les fleches (10 fleches par map)
id += 60 if type == 4 # emplacements 60 à 149 pour l'eau (90 eau par map)

Par:
Code: Tout sélectionner
id += 10 if type == 1 # emplacements 10 à 19 pour les coffres (10 coffres par map)
id += 20 if type == 2 # emplacements 20 à 89 pour les rochers (70 rochers par map)
id += 50 if type == 3 # emplacements 90 à 99 pour les fleches (10 fleches par map)
id += 60 if type == 4 # emplacements 100 à 199 pour l'eau (100 eau par map)

XGuarden a écrit:
Mais pour les flèches, je me demandais.... Est-ce nécessaire de les gérer? C'est assez simple de juste mettre un code qui empêche l'utilisateur d’avancer. Et aussi, il y a très régulièrement plus de 10 flèches par map.

Tu n'es pas obligé d'utiliser la méthode event si tu n'en a pas besoin. Elle ne fait que
mettre dans un tableau les propriétés de ce dernier en fonction de son type (monstre,
fleche...) Elle permet de faire des calculs en bref.

XGuarden a écrit:
Il y a les tour qui se déplace également dans le jeu et les dragon qui font pareil a l'exception qu'il ne tu pas automatiquement, on peu éviter leur projectile.

Tu n'as qu'à tester les positions de tes monstres dans un event parallèle et ainsi
les positions seront mises à jour lorsque le monstre en question se déplace.

Si tu veux un code demande clairement ce que tu veux tester.

_________________
--- Bad_maker ---


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 13 messages ]  Aller à la page Précédent  1, 2

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728