Voici un petit tuto qui vous apprendra comment gérer deux joueurs sur une même map, un qui sera le héros de base de rmxp et l'autre un évent que l'on aura garni de commandes!
Si vous ne shouaitez pas apprendre quelque chose mais simplement utilisez ce tuto, il est tout à fait possible de sauter la partie I! (exit la démo^^)I/ la théorie♦Déjà, la demo!http://www.megaupload.com/?d=GIU2YPU6♦Ensuite, regardons le second joueur, comme tout les évents de ce tuto, il est en processus parallèle!

En langage français on à:
La variable $vic prend la valeur de l'ID de cette évènement (ici 1, mais parfois non^^)
L'interrupteur Go est activé (utile pour éviter un ptit bug, si les autres évènements s'activent avant que la variables $vic ai pris la bonne valeur, y'a un problème)
si il n'y a pas de message et que l'evenement d'ID $vic ne bouge pas alors:
-si la touche Z est préssé, l'event va vers le haut
-si la touche Q est préssé, l'event va vers la gauche
-si la touche S est préssé, l'event va vers le bas
-si la touche D est préssé, l'event va vers la droiteet voila! notre petit évent bouge grâce aux touches ZQS et D!
♦ Maintenant, débrouillons nous pour que nos deux héros puissent interagir avec les pnjs!
on stock le code de la touche appuyée dans une variable
si on appuie sur la touche A
-si le héros est sur la case au dessus de l'event
--si il regarde vers le bas
--sauter vers l'etiquette A
(etc pour les autres directions et pour le héros principal)
voila, si le héros ou le second joueur est bien placé, alors on saute vers l'etiquette A! la voici:
Si il se passe quelque chose d'impossible (pour eviter que il n'y ai le message à chaque tour de l'event c'est à dire à chaques frames...ici j'ai mis "si un interrupteur est désactivé et activé en meme temps" mais faites vous plaisir, vous pouvez mettre "si 1 est égale à 2" ou n'importe quoi x) )
l'etiquette A (donc en mettant "aller vers etiquette A", l'event se lira depuis ce point)
Ce que vous voulez, ici un message (c'est la seule chose à changer d'un event à un autre, je l'ai mis en valeur par des commentaires^^)
et ensuite on rétablit la direction de l'event♦ Maintenant, un ptit bonus, des monstres qui se baladent et agressent^^
Cette fois, on a de la détection de zone, sa fait:
si le héros est à moins de 5-6 cases du fantôme, alors ce dernier avance vers lui
sinon, si le second joueur est à moins de 5-6 case du fantôme, alors ce dernier s'avance vers le second joueur
Si le héros est au CaC du fantôme, alors on saute vers l'etiquette 1
sinon, si le second joueur est au CaC du fantôme, alors on saute vers l'etiquette 1Le reste de l'event marche de la meme façon que la fin de l'event des pnjs (on remplace le message par un combat et supprime le changement de directions)
pensez à suprimer l'event aprés le combat!
II/ les scriptsLe script de regard, crée un nouveau script au dessus de main:
- Code: Tout sélectionner
# appelez ce script en tapant "regard( l'id de l'event)"
# l'event concerné se tournera vers le second personnage
class Interpreter
def regard(id)
d = ($game_map.events[id].x - $game_map.events[$vic].x).abs
h = ($game_map.events[id].y - $game_map.events[$vic].y).abs
$game_map.events[id].turn_right if d >= h and $game_map.events[id].x < $game_map.events[$vic].x
$game_map.events[id].turn_left if d >= h and $game_map.events[id].x > $game_map.events[$vic].x
$game_map.events[id].turn_down if d < h and $game_map.events[id].y < $game_map.events[$vic].y
$game_map.events[id].turn_up if d < h and $game_map.events[id].y > $game_map.events[$vic].y
end
end
(l'explication est dedans)
Pour que le second joueur puisse passer les messages, une ptite modif:
ligne 237 de Window_Message, remplacez:
- Code: Tout sélectionner
if Input.trigger?(Input::C)
par:
- Code: Tout sélectionner
if Input.trigger?(Input::C) or Input.trigger?(Input::X)
Scripts de différentes commandes utilisés dans ce tuto:- Code: Tout sélectionner
=begin
Pour se servir de "stocker le code de la touche appuyée dans ..."
(FLECHE BAS) ==> 2
(FLECHE GAUCHE) ==> 4
(FLECHE DROITE) ==> 6
(FLECHE HAUT) ==> 8
Z ou (SHIFT) ==> 11
X , 0 ou (ECHAP) ==> 12
C , (ENTRER) ou (SPACE) ==> 13
A ==> 14
S ==> 15
D ==> 16
Q ou (DEFIL HAUT) ==> 17
W ou (DEFIL BAS) ==> 18
pour détection de zone:
condition si:
Math.sqrt(($game_map.events[@event_id].x-$game_player.x)**2+($game_map.events[@event_id].y-$game_player.y)**2) <= 10 (10 à changer)
______________________________
pour comparer x,y event et héros:
condition si:
$game_player.x == ($game_map.events[@event_id].x)-1 and $game_player.y == ($game_map.events[@event_id].y)-1 (-1 à changer et parenthèse enlevable)
______________________________
pour mettre en condition, si il n'y a pas de messages:
$game_temp.message_window_showing == false
______________________________
pour mettre en condition, si l'event d'id $vic (le personage secondaire) ne bouge pas:
not $game_map.events[$vic].moving?
=end
III/ la pratiqueL'event du second héros: est à copier\coller sans rien changer^^
les Pnjs: Changer uniquement apparence, type de déplacements et ce qu'il y'a entre les grandes barres vertes^^
Les monstres: J'ai pas mis de grande barre verte, mais le principe est le même
de plus, dans les conditions script commençant par "math", vous pouvez changez le dernier chiffre pour modifiez la zone.
en changeant le 6 des deux premières conditions, vous changerez le champ de vision du monstre (quand il commencera a vous courir après)
en changeant le 1 des deux conditions après, vous changerez la distance que doit séparer monstre et héros pour une aggro
Changement de Map: C'est trés rare, mais il peut y'avoir un bug si vous ne désactivez pas l'interrupteur Go avant d'arriver sur une nouvelle map. (en clair, pendant une fraction de seconde, les ennemis se tromperons peut être entre l'event incarnant le second joueur et n'importe quelle autres, quelques fractions de secondes suffisant au lancement d'un combat x) )
faite simplement:
interrupteur "Go" désactivé
teleporter équipe vers blablabla...
IV/ autreJe vais ptet rajouter un event pour pouvoir interagir entre les deux héros, (à la army of two x) ) mais normalement si vous avez compris les commandes scripts c'est facile à faire à partir des events de pnjs
merci de votre lecture et désolé si je fait des fautes ou suis pas assez clair x)
EDIT: merci!^^