Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: "Dread Mac Farlane", (...) / Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

622 connectés actuellement

29443676 visiteurs
depuis l'ouverture

9753 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Zarok

Eclipso

Alex d'Or

RPG Maker Détente

Lunae - le bazar d'Emz0

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [Scripts] Petites questions connes sur les SCRIPTS!!

Aller à la page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

Reprise du message précédent:

1mag0 - posté le 08/12/2012 à 01:00:05 (794 messages postés)

❤ 0

Dessinateur amateur

Support : RPG Maker XP
Question 1 : Pas facile à expliquer ... Quel script modifier pour que mon "characters" (personnage en exploration) soit entièrement "bloquable" (des pieds à la tête) ou soit bloquable sur un carré de 64 pixels de coté et pas seulement un carré de 32 pixels de coté en bas du charac (symbolisant les pieds).

Sinon le site http://www.rpgrevolution.com/rgss-script-ref/ est pas mal pour décortiqué quelque généralités!

Ma galerie / Les Alt-code / Nouveau screen dans ma galerie! (mars 2019 réédit)


Suite du sujet:

Estheone - posté le 08/12/2012 à 08:54:28 (312 messages postés)

❤ 0

Je suis pas sûr à 100% d'avoir compris ce que tu veux mais c'est juste pour bloquer le perso joueur sur un rectangle de 32*64 (les pieds et le carreau au dessus donc) tu as juste à remplacer la fonction passable? de la classe Game_Player par celle-là :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
def passable?(x, y, d)
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    if not $game_map.valid?(new_x, new_y) or not $game_map.valid?(new_x, new_y-1)
      return false
    end
    if $DEBUG and Input.press?(Input::CTRL)
      return true
    end
    if @through
      return true
    end
    if not $game_map.passable?(x, y, d, self) or not $game_map.passable?(x, y-1, d, self)
      return false
    end
    if not $game_map.passable?(new_x, new_y, 10 - d) or not $game_map.passable?(new_x, new_y-1, 10 - d)
      return false
    end
    for event in $game_map.events.values
      if event.x == new_x and (event.y == new_y or event.y == new_y-1)
        unless event.through
          if self != $game_player
            return false
          end
          if event.character_name != ""
            return false
          end
        end
      end
    end
    if $game_player.x == new_x and $game_player.y == new_y
      unless $game_player.through
        if @character_name != ""
          return false
        end
      end
    end
    return true
  end
 



C'est la solution du pauvre par contre et ça ne s'applique qu'au joueur, pas aux autres events.

Wandering Souls : Jeu complet / Topic sur Oniro


1mag0 - posté le 10/12/2012 à 00:59:21 (794 messages postés)

❤ 0

Dessinateur amateur

C'est exactement ça sauf que c'était 64 pixels par 64. Mais ce n'est pas grave en trifouillant un peu ça sera surement possible. Ou sans bidouille dans le script je peux jouer sur le panorama et réservé une couche pour gérer les passages. Merci quand même! mieux vos avoir 2 méthodes sous le coude!

Edit pour le blocage du personnage en exploration: ou sinon existe il un moyen de centrer le carreaux de blocage? Par défaut il est centré milleu à l'horizontal mais pas à la verticale? Car avec le script donné il dédouble la ligne de blocage si je déchiffre bien.
Edit pour esziaprez: euh les 2 sont assez complexe alors soit tu met les mains dans le ruby et tu va galérer quelque mois surement soit tu fait quelque chose de plus simple mais mieux maitriser. Après tu peux toujours faire des graphique "style" 2D iso avec un déplacement en damier classique.

Ma galerie / Les Alt-code / Nouveau screen dans ma galerie! (mars 2019 réédit)


esziaprez game - posté le 10/12/2012 à 01:28:45 (441 messages postés)

❤ 0

Je suis dans le game !

C'est possible de combiner un script de 2D iso avec un autre de A rpg ?

Projet en cours: INRAL / En pause :NEOTORI /// Pause : L'ANKH DE KINBRA /// Pause : GRASS SHOPPER  /// GALERIE


Estheone - posté le 10/12/2012 à 10:00:31 (312 messages postés)

❤ 0

Citation:

C'est exactement ça sauf que c'était 64 pixels par 64.



Le problème c'est qu'un blocage de 64*64 centré n'a aucun sens si on conserve le système de déplacement de base carreau par carreau.
Soit tu bloques sur 96*96 centré (mais je suppose que c'est trop, et ça va poser d'autres problèmes), soit tu bloques sur 64*64 excentré (nécessite de modifier ton sprite pour qu'il soit décalé, et ça posera des problèmes de déclenchement d'events), soit tu modifies les scripts pour du déplacement en demi-carreau et tu peux faire du 64*64 centré (mais la ça devient tendu niveau prog).

Bref malheureusement t'as pas vraiment de solution miracle. :leure2

Wandering Souls : Jeu complet / Topic sur Oniro


1mag0 - posté le 10/12/2012 à 23:12:37 (794 messages postés)

❤ 0

Dessinateur amateur

C'est pour cela que, j'ai une préférence pour le carreau de blocage, centré en vertical et horizontal, de 32 pixels de coté (ha mince j'avais oublié de préciser plus haut) et une couche réserver au déplacement. Effectivement ça devient vite compliqué avec du carreau de 64 et 96 pixels de coté. J'ai regardé le script Game_Player ça n'a pas l'air d'être ici que le logiciel gère le carreau de blocage :sriden.

Ma galerie / Les Alt-code / Nouveau screen dans ma galerie! (mars 2019 réédit)


esziaprez game - posté le 12/12/2012 à 19:45:06 (441 messages postés)

❤ 0

Je suis dans le game !

La quest la plus stupide depuis 400 ans ! Comment ont entre les caractere speciaux dans les string

Non je ne de,ande pas comment entrer vincent macdoom dans ses sous vetement tres fin mais bel et bien comment entrer de ' "/...dans les variable string sans avoir un truc muche

Merci les froufrou !

Je suis gai parceque j ai fini ce qui ressemble a un script...(gai comme content est-il utile de le preciser)

Projet en cours: INRAL / En pause :NEOTORI /// Pause : L'ANKH DE KINBRA /// Pause : GRASS SHOPPER  /// GALERIE


arttroy - posté le 12/12/2012 à 21:44:32 (2394 messages postés)

❤ 0

Just working

Support :RMVX Ace [Résolu]

Question 1 :

Bonsoir j'aurais aimé savoir comment on rend une partie du menu inaccessible (grisée) parce que je n'arrive pas à trouver...

Je voudrais faire une condition dans ce genre là :

if $data_armors[66] == 0
@command_window.set handler(: skill).enabled = false
end

mais je ne sais pas trop comment faire ni ou placer la condition d'ailleurs

J'ai essayé de regarder dans l'aide mais je ne trouve pas... Et je sais plus trop où chercher dans les scripts, je m'embrouille à force...

Edit : j'ai testé pas mal de trucs en regardant dans les script de base mais je n'arrive à rien personne pour un petit coup de main ?

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Zeus81 - posté le 14/12/2012 à 17:27:38 (11071 messages postés)

❤ 0

Dans Window_MenuCommand tu cherches les add_command, le dernier argument est un booléen pour activer/désactiver.


arttroy - posté le 14/12/2012 à 17:40:21 (2394 messages postés)

❤ 0

Just working

Merci déjà ça m'as avancé du coup j'ai modifié comme ça :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
  #--------------------------------------------------------------------------
  # * Add Main Commands to List
  #--------------------------------------------------------------------------
  def add_main_commands
    add_command(Vocab::skill,  :skill,      main_commands_enabled = false)
    add_command(Vocab::equip,  :equip,      main_commands_enabled = true)
    add_command("Soutien",     :soutien,    main_commands_enabled = false)
    add_command(Vocab::status, :status,     main_commands_enabled = true)
    add_command("Historique",  :historique, main_commands_enabled = true)
    add_command("Orbe Exodus", :orbe,       main_commands_enabled = true)
  end
 



L'ennui c'est que si j'essaie de sélectionner skill ou soutien ça m'envoie à l'écran du Scene_End ??? comment ça se fait ?

Edit : Ça doit être à cause de ça...

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  def update
    super
    if Input.trigger?(:DOWN)
      @quit_index=true
      if @quit_index==true
        @sprite_g.visible=true
        @command_window.active=false
      else
        @sprite_g.visible=false
        @command_window.active=true
      end
    elsif Input.trigger?(:UP)
      @quit_index=false
      @sprite_g.visible=false
      @command_window.active=true
    end
    if @quit_index=true and Input.trigger?(:C)
      command_game_end
      return
    end
    update_roue_menu
  end
 



Mais du coup comment faire ?

Donc revenons à nos moutons, cette portion de code sert normalement à accéder à la partie game_end parce que je ne voulais pas l'inclure dans ma roue de menu. L'ennui c'est qu'apparement si une commande n'est pas active ("enabled"), le logiciel considère que :

@quit_index=true

D'où mon souci cité plus haut quand j'appuie pour confirmer. Donc si je comprend bien il faut que je modifie cette condition :

Portion de code : Tout sélectionner

1
2
3
4
5
6
    if @quit_index=true and Input.trigger?(:C)
      command_game_end
      return
    end
    update_roue_menu
  end



Mais je ne vois vraiment pas comment faire...

Edit : Bon je crois que la seule solution que j'ai, c'est de changer de touche pour le game_end ou pour la confirmation dans le menu... Mais je sais pas laquelle de ces deux solutions serait le plus viable quelqu'un aurait un avis sur le sujet ?

Bon finalement j'ai trouvé comment faire, j'ai modifié la condition par :

if sprite_g.visible = true and Input.trigger?(:C)


Ca fonctionne nickel encore une fois merci à Zeus, son petit coup de main m'a bien aidé !!

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Vyniea - posté le 29/12/2012 à 22:48:34 (83 messages postés)

❤ 0

Support : RMXV Ace

Question : Est-il possible de mettre 0 comme niveau minimum?

J'ai regardé partout dans les scripts et sur le net mais j'ai rien trouvé. Je compte me servir des niveaux comme monnaie d'échange (je vais les renommer '' Point de Capacité '') et c'est plutôt étrange un minimum de 1! J'imagine que c'est possible comme on peu augmenter le niveau max. Quoique peut-être qu'une valeur de 0 pause problème.


Support : RMXV Ace

Problème : Problème avec script

En gros je regardais un tuto video sur le net et j'ai décidé de tester, parce qu'imiter c'est une bonne façon d'apprendre, mais quand je le fais ça fonctionne pas, et a ce que je sache je fais exactement la même chose que le mec dans le video.

J'ai cette erreur : " unexpected ',', expecting keyword_end " sur la ligne 3, et j'imagine la 4 et la 5 vu que c'est la même chose sur les trois :p

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
class Window_skillpoints < Window_Command
  def make_command_list
    add_command|"Item", :item|
    add_command|"Skill", :skill|
    add_command|"Status", :status|
  end
end



Sinon, si y'a un site qui explique clairement les messages d'erreurs ça serait bien, parce qu'ils sont pas très clair pour un néophyte!

Merci d'avance :D


Berka - posté le 05/01/2013 à 17:46:20 (493 messages postés)

❤ 0

planchant sur un script

Vyniea

Pour ton second problème, tu utilises l'opérateur "or" : | à la place des parenthèses. "add_command" est une méthode qui prend deux paramètres. Donc :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
class Window_skillpoints < Window_Command
  def make_command_list
    add_command("Item", :item)
    add_command("Skill", :skill)
    add_command("Status", :status)
  end
end



Et puis pense à utiliser la notation "camelcase" pour tes noms de classes, c'est la convention :
Window_SkillPoints

Bonne soirée,

Berka

Twitter: Pensées politiques et juridiques. Réflexions informatiques


Estheone - posté le 05/01/2013 à 18:30:50 (312 messages postés)

❤ 0

Citation:

Est-il possible de mettre 0 comme niveau minimum?



Dans le setup du Game_Actor remplace

Portion de code : Tout sélectionner

1
@level = actor.initial_level


par

Portion de code : Tout sélectionner

1
@level = 0


Tous tes persos commenceront au niveau 0 par contre, peu importe la valeur de niveau de départ que tu mettras dans la base de données.

Ensuite rajoute ce script au-dessus du main :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
class RPG::Class < RPG::BaseItem
  def exp_for_level(level)
    lv = (level+1).to_f
    basis = @exp_params[0].to_f
    extra = @exp_params[1].to_f
    acc_a = @exp_params[2].to_f
    acc_b = @exp_params[3].to_f
    return (basis*((lv-1)**(0.9+acc_a/250))*lv*(lv+1)/
      (6+lv**2/50/acc_b)+(lv-1)*extra).round.to_i
  end
end



Tu peux remercier Berka, j'avais complètement oublié ce topic. :p

Wandering Souls : Jeu complet / Topic sur Oniro


Cortez - posté le 13/01/2013 à 21:10:13 (523 messages postés)

❤ 0

Bonjour à tous je repasse sur oniro pour demander un coup de pouce des scripteurs sur un système simple de boussole.

Système concerné : RmXP

Type de demande : Traduction et explication

J'ai trouvé une formule sur le net permetant de calculer à l'aide de 2 points l'angle qui les sépare.
Ceci permet d'obtenir un angle compris entre 0 et 360 et ainsi afficher une image ayant la bonne rotation.

Imaginons un point A (le héros du jeu) positionné en x1 et y1, et un point B (l'objectif), en x2 et y2.

Je souhaite connaître un angle (en degré) afin qu’une aiguille d'une boussole pointe dans la direction du point B.

Portion de code : Tout sélectionner

1
float a = ((float)(Math.atan2 (y2-y1, x2-x1)*180.0d/Math.PI))+90.0f



Cependant c'est un code JAVA et j'aimerais qu'un scripteur charitable le traduise en langage ruby et m'explique comment l'utiliser (script audessus de main, insertion de script).

Note: je sais déjà remplacer y2, x2 ... par des

Portion de code : Tout sélectionner

1
$game_variables(id)

et je dispose d'un moyen pour afficher l'image en fonction d'un angle.


Estheone - posté le 13/01/2013 à 21:21:49 (312 messages postés)

❤ 0

En insertion de script :

Portion de code : Tout sélectionner

1
$game_variables[1] = (Math.atan2($game_variables[5]-$game_variables[4], $game_variables[3]-$game_variables[2])*180.0/Math::PI)+90.0



Wandering Souls : Jeu complet / Topic sur Oniro


Cortez - posté le 13/01/2013 à 21:52:42 (523 messages postés)

❤ 0

ok je teste ça tout de suite.

Merci pour la réponse rapide.


TheZalera - posté le 01/02/2013 à 20:46:43 (16 messages postés)

❤ 0

Support : RM VX ACE

Question 1 :
Je cherche à comprendre utilise se script : Level up item bonus.

Dans le script il est écrit :

Portion de code : Tout sélectionner

1
2
3
4
5
#==============================================================================
#       TO USE:
#       Weapon or Armor tag - <stat: +x bonus>
#       Where STAT is mhp, mmp, atk, def, mdf, mat, agi, or luk, and X is an integer.
#==============================================================================



Je débute quelque peux et je n'ai pas trouver comment ajouter ce "tag".


Ephy - posté le 01/02/2013 à 21:17:18 (30085 messages postés) - honor

❤ 0

[BIG SHOT]

Dans les commentaires de l'arme/armure? Je pense. C'est là qu'on ajoute les tag en général.



Power Level: 1 148 355,38|Mystic Slayer (Value!+)|Le monde d'Adélaïde|Reikon no Yume|★ H-Project|Toho Danmaku Arena|Loli versus Ponies|Mes vidéos|Ma galerie|Débuter sur VX:10, 11|Tuto: Importation de ressources|Mapper avec les RTP VX|Touhou|Fan de Omenides|Fan de Estheone|Eph'ille: 14


TheZalera - posté le 01/02/2013 à 21:33:00 (16 messages postés)

❤ 0

j'y vais à l'aveuglette du coup j'y connais rien :/

Edit : je te remercie j'ai compris le fonctionnement. Par exemple mettre <mhp: +10 bonus> pour gagner 10 hp par level up avec l'arme équipé. A insérer dans la fenetre de note de l'objet en question.


Nelfe - posté le 07/02/2013 à 17:00:29 (3 messages postés)

❤ 0

Support : RM VX Ace

Question 1 :

J'aimerais faire un sorte qu'un message apparaisse lorsque le joueur se trouve sur une case (et idéalement que le sprite soit dirigé vers le bas).
Pour ce qui est du message pas de problème, la détection de l'orientation du sprite est faisable aussi si je dis pas de bêtises, mais je n'arrive pas à trouver comment faire la détection : j'ai utilisé les trigger Player touch et Event touch, mais le premier ne fonctionne que quand on colle la case (or je veux que ça soit quand on soit dessus), le second ne semble rien faire.

Merci aux âmes charitables :)


arttroy - posté le 07/02/2013 à 18:00:22 (2394 messages postés)

❤ 0

Just working

Tu as essayé l'option "sous le héros" pour ton event en priorité d'affichage ? Combiné avec l'option "player touch" ça devrait le faire. Ou alors il faut que tu gère avec des variables, il y a un tutoriel là dessus de Joke (tous les autres du même auteur sont pas mal aussi) ici :

http://www.rpg-maker.fr/tutoriels-176-joke-s-tuts-5-base-de-programmation-les-zones-par-variables-.html

Sinon ici c'est plus pour les questions de programmation (les scripts... la puissance ultime de rpg maker...) pour ce que tu veux toi c'est le domaine des events, à ne pas confondre...

Le plus simple quand tu as un souci, c'est de faire un screen de ce que tu as déjà fait, ça aide beaucoup fais moi confiance !

Sinon vu le faible nombre de messages à ton actif, je te souhaite la bienvenue chez nous et bon courage dans la découverte de ce fabuleux logiciel !

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


ratorix - posté le 11/02/2013 à 01:42:28 (99 messages postés)

❤ 0

Support : RMXP

Question 1 :
Bonjour, alors voila, je voudrais savoir comment intégré du texte venant d'un fichier texte (assez long) .

Ce ou ces fichiers, contiendrais l'histoire de chaque personnages et serais intégré à une fenêtre que j'ai déjà rajouté dans le menus "Statue", chaque personnage a sont histoire.

Je n'ai pas trouvé grand chose sur internet concernant les fichier texte, j'avais trouver la description de la commande file.open( "teste.txt", "r"), mais je n'ai pas eu de succès.

J'ai aussi suivit ce tuto même si ce n'est pas toute a fait ce que je veut :
http://www.rpg-maker.fr/tutoriels-268-ruby-ecrire-et-lire-un-fichier.html

Mais j'en reviens toujours au même problème principalement "fichier "teste.txt" introuvable".

Edit : je viens de retrouver (je pensais avoir été assez con pour tout effacé mais je l'avais quand même mis de coté :p) le code ou au moins une parti de celui ci, j'ai tout rassembler dans un seul fichier que j'avais mis de coter mais il ce peut que j'avais dispatcher le code entre les script.

désolé si c'est pas trés claire j'avais mis de coter le code juste pour moi a la base.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#==============================================================================
# ** Window_Descriptions
#------------------------------------------------------------------------------
#  This window displays actor description.
#==============================================================================
 
class Window_Descriptions < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
 file = File.open("description.txt", "r")
    fichiertexte = file
    fichiertexte = fichiertexte.read
    fichiertexte = fichiertexte.split(";")
    desc01 = fichiertexte[0]
    desc02 = fichiertexte[1]
    desc03 = fichiertexte[2]
    desc04 = fichiertexte[3]
    desc05 = fichiertexte[4]
    desc06 = fichiertexte[5]
    desc07 = fichiertexte[6]
    desc08 = fichiertexte[7]
    desc09 = fichiertexte[8]
    
    desc01 = desc01.split("=")
    @desc01 = desc01[1]
    desc02 = desc02.split("=")
    @desc02 = desc02[1]
    desc03 = desc03.split("=")
    @desc03 = desc03[1]
    desc04 = desc04.split("=")
    @desc04 = desc04[1]
    desc05 = desc05.split("=")
    @desc05 = desc05[1]
    desc06 = desc06.split("=")
    @desc06 = desc06[1]
    desc07 = desc07.split("=")
    @desc07 = desc07[1]
    desc08 = desc08.split("=")
    @desc08 = desc08[1]
    desc09 = desc09.split("=")
    @desc09 = desc09[1]
    
    
    file.close
  def initialize(actor)
    super(0, 0, 630, 600)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_description(@actor, 400, 112)
 
  end
end
  #--------------------------------------------------------------------------
  # * Draw description
  #     actor : actor
  #     x     : draw spot x-coordinate
  #     y     : draw spot y-coordinate
  #--------------------------------------------------------------------------
  def draw_actor_description(actor, x, y)
    
    
    
    descriptionb = fichiertexte[0]
    description = RPG::Cache.face(descriptionb)
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, 236, 32,description)
  file.close
    end
  


les desc01 etc corresponde a l'intérieur de mon fichier texte qui étais présenter comme ça :
desc01 = description du premier perso.
desc02 = description du deuxième perso.
etc.


Question 2 :

Elle va avec la première, j'essaye d'anticiper le problème ^^.

Il faudrait aussi (du faite que chaque personnage a sont histoire) que je puisse lier le fichier au personnage, je pense pouvoir trouver une fois le premier problème résolue mais on sait jamais ^^.


Ayop - posté le 11/02/2013 à 15:33:48 (847 messages postés)

❤ 0

Désolé ratorix de passer devant toi alors que personne ne t'as encore répondu, mais j'ai aussi besoin d'un coup de main. Ne l'oubliez pas quand même. :sourire2

Support : RM VX Ace
Question : Alors voilà, j'essaye d'installer quelques scripts pour rendre les déplacement du héros plus cool. Mais j'ai un petit problème.
Donc pour résumer, j'ai installé ces scripts de Victor :
1) Le Victor Engine - Basic Engine : Script ici.
2) Le Rotation Turning (qui permet de faire faire une rotation sur lui même au héros lors d'un demi-tour) : Script ici.
3) Le Pixel Movement (qui ne permet pas le déplacement en diagonale) : Script ici.
4) Le Diagonal Movement (pour pallier au défaut du script précédent) : Script ici.
(Je précise que tous ces script sont du même auteur, Victor donc.

Le problème vient de ce dernier script, Diagonal Movement : Lorsque je lance le jeu, tout va bien, l'écran titre apparait et je peux lancer ma partie. Mais dès que je bouge le héros, dans n'importe quelle directions, ce message d'erreur s'affiche :

Spoiler (cliquez pour afficher)


Alors comme je suis une teub en Ruby, quand j'ai une erreur comme ça, j'efface la ligne. Pour voir.:grossourire
Donc je relance le jeu, pareil, écran titre, je lance ma partie et là, dès que je bouge mon héros :

Spoiler (cliquez pour afficher)


Donc une fois de plus, j'efface cette ligne et je relance le jeu. Il s'agit de ces deux lignes donc :

Portion de code : Tout sélectionner

1
2
    sy = (index / 4 * 4 + dir) * @ch
    self.src_rect.set(sx, sy, @cw, @ch)


Et là tout marche, même les diagonales, mais sans les animations du héros pendant ces dernières.
Je m'explique : Après avoir effacé ces deux lignes, les quatre directions normales du héros fonctionnent avec tous les script que j'ai installé (pixel par pixel et rotation lors d'un demi tour); mais lors des diagonales, l'animation de marche du héros n'est plus affiché.

Voilà mon petit problème, je ne pense pas que ce soit très dur à régler, mais comme je l'ai dit, je suis vraiment un teub en Ruby. Il faut comprendre par là que je ne connais absolument rien. Donc un peu d'aide ne serait vraiment pas de refus.
Merci beaucoup d'avance à celui qui saura m'aider. :)

EDIT : Bon, bah je viens aussi de remarquer que la touche action ne marche plus ... A part dans le menu qui lui marche très bien.
Apparemment ça vient du script pixel par pixel, puisque quand je le supprime tout remarche. Je vais voir si je ne peux pas régler ça. :)
Et après quelques test, j'ai l'impression que ça vient d'une incompatibilité entre le script Pixel Movement de Victor et le Awesome Light Effect de Khas :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
#-------------------------------------------------------------------------------
# * [ACE] Khas Awesome Light Effects
#-------------------------------------------------------------------------------
# * By Khas Arcthunder - arcthunder.site40.net
# * Version: 1.0 EN
# * Released on: 17/01/2012
#
#-------------------------------------------------------------------------------
# * Terms of Use
#-------------------------------------------------------------------------------
# When using any Khas script, you agree with the following terms:
# 1. You must give credit to Khas;
# 2. All Khas scripts are licensed under a Creative Commons license;
# 3. All Khas scripts are for non-commercial projects. If you need some script 
#    for your commercial project (I accept requests for this type of project), 
#    send an email to nilokruch@live.com with your request;
# 4. All Khas scripts are for personal use, you can use or edit for your own 
#    project, but you are not allowed to post any modified version;
# 5. You can’t give credit to yourself for posting any Khas script;
# 6. If you want to share a Khas script, don’t post the direct download link, 
#    please redirect the user to arcthunder.site40.net
#
#-------------------------------------------------------------------------------
# * Features
#-------------------------------------------------------------------------------
# - Realistic Light
# - Light does not pass over walls, blocks and roofs
# - Static Light Sources
# - Dynamic Light Sources (like a player's lantern)
# - Multiple effects
# - Easy to use (comments)
#
#-------------------------------------------------------------------------------
# * WARNING - Performance
#-------------------------------------------------------------------------------
# This script may be too heavy to old processors! The Awesome Light Effects was
# tested on a Core 2 Duo E4500 and on a Core i5, without any lag. However,
# there's other factors that may influence the script performance:
#
# 1. Map size
# This script searches surfaces on the map, in order to cut the light pictures.
# In a huge map, the number of surfaces may increase a lot, affecting the
# DYNAMIC LIGHT SOURCE only. Map size does not influence the static sources.
#
# 2. Number of effects
# This script draws the effects on the screen, but before drawing, it checks 
# if the effect is out of screen (in this case, the script will skip the 
# light drawing). Too much effects may cause lag, but this is just a prevision.
#
# 3. Effect's picture size
# The picture size of the DYNAMIC LIGHT SOURCE influences directly on your 
# game's performace. The bigger is the picture, the slower it will be to
# draw it dynamically. The recommended maximum size is 200x200 pixels
# 
#-------------------------------------------------------------------------------
# * WARNING - Light pictures
#-------------------------------------------------------------------------------
# In order to run this script correctly, the light pictures MUST obey the
# following conditions:
# 1. The picture's size MUST be multiple of 2. Example: 150x150
# 2. The picture's width MUST be equal to it's height. Example: 156x156
# 3. The picture's colors MUST be inverted! This is necessary because
#    the script inverts the colors to draw the effect. The black color
#    will be transparent!
#
#-------------------------------------------------------------------------------
# * Instructions - 1. Setup your effects!
#-------------------------------------------------------------------------------
# In order to setup your static effects, go to the setup part and define your
# effects inside the Effects hash. Do as the following mode:
#
# X => [picture,opacity,variation,cut],   <= Remember to put a comma here!
#
# Where:
# picture => Picture's name, inside the Graphics/Lights folder;
# opacity => Effect's opacity;
# variation => Effect's opacity variation;
# cut => Put true to cut the effect or false to don't;
# X => The effect's ID, it will be used on events. 
#
# Check the default effects to understand how they work.
#
#-------------------------------------------------------------------------------
# * Instructions - 2. Use your effects!
#-------------------------------------------------------------------------------
# In order to use a effect, put the following comment on a event:
# 
# [light x]
#
# Where x must be the Effect's ID.
# 
#-------------------------------------------------------------------------------
# * Instructions - 3. Use an awesome lantern!
#-------------------------------------------------------------------------------
# The dynamic light source (lantern) is initialized invisible by default. 
# You may call the following commands:
# 
# l = $game_map.lantern
# Gets the lantern into a variable
 
# l.set_graphic(i)
# Sets the lantern's graphic to i, where i must be the picture's file name on 
# Graphics/Lights folder.
#
# l.set_multiple_graphics(h)
# Sets the lantern's graphics to h, where h must be a hash with the following
# structure:
#
# h = {2=>"ld",4=>"ll",6=>"lr",8=>"lu"}
# 
# Where: 
# "ld" is the name of the picture when the lantern's owner is looking down;
# "ll" is the name of the picture when the lantern's owner is looking left;
# "lr" is the name of the picture when the lantern's owner is looking right;
# "lu" is the name of the picture when the lantern's owner is looking up.
#
# l.change_owner(char)
# Sets the lantern's owner to char. Char must be ONE of the following commands:
# $game_player           <= The player itself;
# self_event             <= The event where the command was called;
# $game_map.events[x]    <= The event ID x.
#
# l.set_opacity(o,p)
# Sets the lantern's opacity, where:
# o is the opacity itself;
# p is the opacity variation.
#
# l.show
# After setting the lantern with the commands above, you may set it to visible
# using this command.
#
# l.hide
# Use this command to set the lantern as invisible.
#
#-------------------------------------------------------------------------------
# * Instructions - 4. Use the effect's surface!
#-------------------------------------------------------------------------------
# The Awesome Light Effects draws the effects on a surface. In order to make
# the effects visible, the effect's surface MUST be visible. The Effect's 
# Surface is initialized with it's opacity set to zero. You can call the
# following commands:
#
# s = $game_map.effect_surface
# Gets the Effect's Surface into a variable
#
# s.set_color(r,g,b)
# Changes the Effect's Surface color instantly, where:
# r => red level;
# g => green level;
# b => blue level;
#
# s.set_alpha(a)
# Changes the Effect's Surface opacity instantly to a.
#
# s.change_color(time,r,g,b)
# Changes the Effect's Surface color ONLY in a certain time, where:
# time => The change's time (frames);
# r => red level;
# g => green level;
# b => blue level;
#
# s.change_color(time,r,g,b,a)
# Changes the Effect's Surface color and it's opacity in a certain time, where:
# time => The change's time (frames);
# r => red level;
# g => green level;
# b => blue level;
# a => opacity
#
# s.change_alpha(time,a)
# Changes the Effect's Surface opacity in a certain time, where:
# time => The change's time (frames);
# a => opacity
#
#-------------------------------------------------------------------------------
# * Instructions - 5. Use the effect's surface with Tone command!
#-------------------------------------------------------------------------------
# You can access the Effect's Surface with the "Screen Tone" command. In order
# to turn this feature on, set the "Surface_UE" constant to true.
#
# If you decided to use this feature, please note some details:
# 1. The colors values must be between 0 and 255;
# 2. The time is in frames;
# 3. The "gray" value will be sent as the opacity value
#
#-------------------------------------------------------------------------------
# * Instructions - 6. Setup your Tileset Tags!
#-------------------------------------------------------------------------------
# In order to cut the effect's picture correctly, there's 3 types of behavior
# for a tile: wall, block and roof. Walls will make shadows as real walls, 
# blocks as blocks and roofs as roofs. So, the tileset tags MUST be configured.
# Check the demo to understand how this system works. If the tilesets aren't 
# configured correctly, the script won't cut the effects correctly.
# 
#-------------------------------------------------------------------------------
# * Setup Part
#-------------------------------------------------------------------------------
module Light_Core
  Effects = { #  <= DON'T change this!
#-------------------------------------------------------------------------------
# PUT YOUR EFFECTS HERE!
#-------------------------------------------------------------------------------
  0 => ["light",255,0,true],
  1 => ["torch",200,20,true],
  2 => ["torch_m",180,30,true],
  3 => ["light_s",255,0,true],
  4 => ["lumifen",255,0,true],
  5 => ["light",255,50,true],
  6 => ["light_m",100,0,true],
  
#-------------------------------------------------------------------------------
# End of effecs configuration
#------------------------------------------------------------------------------- 
  } #  <= DON'T change this!
  
  # Z coordinate of the Effect's Surface
  Surface_Z = 180
  
  # Enable Effect's Surface control by "Screen Tone" command?
  Surface_UE = true
  
  # Roof behavior tag
  Roof_Tag = 3
  # Wall behavior tag
  Wall_Tag = 2
  # Block behavior tag
  Block_Tag = 1
  
  # Don't change this!
  ACC = Math.tan(Math::PI/26)
end
#-------------------------------------------------------------------------------
# Script
#-------------------------------------------------------------------------------
module Cache
  def self.light(filename)
    load_bitmap("Graphics/Lights/", filename)
  end
end
module Light_Bitcore
  include Light_Core
  def self.initialize
    @@buffer = {}
    Effects.values.each { |effect| Light_Bitcore.push(effect[0])}
  end
  def self::[](key)
    return @@buffer[key]
  end
  def self.push(key)
    return if @@buffer.keys.include?(key)
    @@buffer[key] = Cache.light(key)
  end
end
Light_Bitcore.initialize
class Light_SSource
  attr_reader :real_x
  attr_reader :real_y
  attr_reader :range
  attr_accessor :bitmap
  attr_reader :w
  attr_reader :h
  attr_reader :hs
  def initialize(char,bitmap,opacity,plus,hs)
    sync(char)
    @key = bitmap
    @bitmap = Light_Bitcore[@key].clone
    @range = @bitmap.width/2
    @w = @bitmap.width
    @h = @bitmap.height
    @mr = @range - 16
    @opacity = opacity
    @plus = plus
    @hs = hs
    render if @hs
  end
  def render
    tx = x
    ty = y
    tsx = x + @range
    tsy = y + @range
    dr = @range*2
    for s in $game_map.surfaces
      next if !s.visible?(tsx,tsy) || !s.within?(tx,tx+dr,ty,ty+dr)
      s.render_shadow(tx,ty,tsx,tsy,@range,@bitmap)
    end
  end
  def restore
    return unless @bitmap.nil?
    @bitmap = Light_Bitcore[@key].clone
    render if @hs
  end
  def opacity
    @plus == 0 ? @opacity : (@opacity + rand(@plus))
  end
  def sx
    return $game_map.adjust_x(@real_x)*32-@mr
  end
  def sy
    return $game_map.adjust_y(@real_y)*32-@mr
  end
  def sync(char)
    @real_x = char.real_x
    @real_y = char.real_y
  end
  def x
    return (@real_x*32 - @mr).to_f
  end
  def y
    return (@real_y*32 - @mr).to_f
  end
  def dispose
    return if @bitmap.nil?
    @bitmap.dispose
    @bitmap = nil
  end
end
class Light_DSource < Light_SSource
  attr_reader :bitmap
  attr_reader :visible
  def initialize
    @key = nil
    @bitmap = nil
    @opacity = 255
    @plus = 0
    @char = $game_player
    @visible = false
  end
  def set_opacity(o,p)
    @opacity = o
    @plus = p
  end
  def set_graphic(sb)
    dispose
    @key = {2=>sb,4=>sb,6=>sb,8=>sb}
    Light_Bitcore.push(sb)
    @bitmap = {2=>Light_Bitcore[@key[2]].clone,4=>Light_Bitcore[@key[4]].clone,6=>Light_Bitcore[@key[6]].clone,8=>Light_Bitcore[@key[8]].clone}
    @range = @bitmap[2].width/2
    @w = @bitmap[2].width
    @h = @bitmap[2].height
    @mr = @range - 16
  end
  def set_multiple_graphics(ba)
    dispose
    @key = ba
    @key.values.each {|key| Light_Bitcore.push(key)}
    @bitmap = {2=>Light_Bitcore[@key[2]].clone,4=>Light_Bitcore[@key[4]].clone,6=>Light_Bitcore[@key[6]].clone,8=>Light_Bitcore[@key[8]].clone}
    @range = @bitmap[2].width/2
    @w = @bitmap[2].width
    @h = @bitmap[2].height
    @mr = @range - 16
  end
  def get_graphic
    return @bitmap[@char.direction].clone
  end
  def show
    return if @bitmap.nil?
    @visible = true
  end
  def hide
    @visible = false
  end
  def restore
    return if @key.nil?
    @key.values.each {|key| Light_Bitcore.push(key)}
    @bitmap = {2=>Light_Bitcore[@key[2]].clone,4=>Light_Bitcore[@key[4]].clone,6=>Light_Bitcore[@key[6]].clone,8=>Light_Bitcore[@key[8]].clone}
  end
  def dispose
    return if @bitmap.nil?
    @bitmap.values.each { |b| b.dispose }
    @bitmap = nil
  end
  def change_owner(char)
    @char = char
  end
  def render
  end
  def sx
    return $game_map.adjust_x(@char.real_x)*32-@mr
  end
  def sy
    return $game_map.adjust_y(@char.real_y)*32-@mr
  end
  def x
    return (@char.real_x*32 - @mr).to_f
  end
  def y
    return (@char.real_y*32 - @mr).to_f
  end
end
class Light_Surface
  def initialize
    @ta = @a = 0
    @tr = @r = 255
    @tg = @g = 255
    @tb = @b = 255
    @va = @vr = @vg = @vb = 0.0
    @timer = 0
  end
  def refresh
    return if @timer == 0
    @a += @va
    @r += @vr
    @g += @vg
    @b += @vb
    $game_map.light_surface.opacity = @a
    @timer -= 1
  end
  def change_color(time,r,g,b,a=nil)
    r = 0 if r < 0; r = 255 if r > 255
    g = 0 if g < 0; g = 255 if g > 255
    b = 0 if b < 0; b = 255 if b > 255
    unless a.nil?
      a = 0 if a < 0; a = 255 if a > 255
    end
    @timer = time
    @tr = 255-r
    @tg = 255-g
    @tb = 255-b
    @va = (a.nil? ? 0 : (a-@a).to_f/@timer)
    @vr = (@tr - @r).to_f/@timer
    @vg = (@tg - @g).to_f/@timer
    @vb = (@tb - @b).to_f/@timer
  end
  def change_alpha(time,a)
    a = 0 if a < 0; a = 255 if a > 255
    @timer = time
    @ta = a
    @vr = @vg = @vb = 0.0
    @va = (a-@a).to_f/@timer
  end
  def set_color(r,g,b)
    r = 0 if r < 0; r = 255 if r > 255
    g = 0 if g < 0; g = 255 if g > 255
    b = 0 if b < 0; b = 255 if b > 255
    @tr = @r = 255-r
    @tg = @g = 255-g
    @tb = @b = 255-b
    @va = @vr = @vg = @vb = 0.0
    @timer = 0
  end
  def set_alpha(a)
    a = 0 if a < 0; a = 255 if a > 255
    @ta = @a = a
    $game_map.light_surface.opacity = @a
    @va = @vr = @vg = @vb = 0.0
    @timer = 0
  end
  def alpha
    return @a
  end
  def color
    return Color.new(@r,@g,@b)
  end
end
class Game_Map
  include Light_Core
  attr_accessor :light_surface
  attr_accessor :light_sources
  attr_accessor :surfaces
  attr_accessor :effect_surface
  attr_accessor :lantern
  alias kbl_setup_events setup_events
  alias kbl_initialize initialize
  alias kbl_update update
  def initialize
    kbl_initialize
    @effect_surface = Light_Surface.new
    @lantern = Light_DSource.new
  end
  def update(arg)
    @effect_surface.refresh if arg
    kbl_update(arg)
  end
  def first_tag(x,y)
    tag = tileset.flags[tile_id(x,y,0)] >> 12
    return tag > 0 ? tag : 0
  end
  def setup_events
    @light_sources.nil? ? @light_sources = [] : @light_sources.clear
    setup_surfaces
    merge_surfaces
    kbl_setup_events
  end
  def setup_surfaces
    @surfaces = []
    for x in 0..(width-1)
      for y in 0..(height-1)
        tag = first_tag(x,y)
        if tag == Wall_Tag
          i = tile_id(x,y,0)
          if i & 0x02 == 0x02
            @surfaces << Block_SD.new(x*32,y*32,x*32+32,y*32)
          end
          if i & 0x04 == 0x04
            @surfaces << Block_WR.new(x*32+31,y*32,x*32+31,y*32+32)
            @surfaces << Block_IL.new(x*32+32,y*32,x*32+32,y*32+32)
          end
          if i & 0x01 == 0x01
            @surfaces << Block_IR.new(x*32-1,y*32,x*32-1,y*32+32)
            @surfaces << Block_WL.new(x*32,y*32,x*32,y*32+32)
          end
        elsif tag == Roof_Tag
          i = tile_id(x,y,0)
          @surfaces << Block_SU.new(x*32,y*32,x*32+32,y*32) if i & 0x02 == 0x02
          @surfaces << Block_SR.new(x*32+31,y*32,x*32+31,y*32+32) if i & 0x04 == 0x04
          @surfaces << Block_SL.new(x*32,y*32,x*32,y*32+32) if i & 0x01 == 0x01
        elsif tag == Block_Tag
          f = tileset.flags[tile_id(x,y,0)]
          @surfaces << Block_SL.new(x*32,y*32,x*32,y*32+32) if f & 0x02 == 0x02
          @surfaces << Block_SR.new(x*32+31,y*32,x*32+31,y*32+32) if f & 0x04 == 0x04
          @surfaces << Block_SU.new(x*32,y*32,x*32+32,y*32) if f & 0x08 == 0x08
        end
      end
    end
  end
  def merge_surfaces
    new_surfaces = []
    hs = []; vs = []
    ws = []; is = []
    for surface in @surfaces
      if surface.type & 0x05 == 0
        hs << surface
      else
        if surface.type & 0x010 == 0
          vs << surface
        else
          if surface.type & 0x08 == 0
            ws << surface
          else
            is << surface
          end
        end
      end
    end
    for surface in hs
      surface.ready ? next : surface.ready = true
      for s in hs
        next if s.ready || s.y1 != surface.y1 || surface.type != s.type
        if s.x2 == surface.x1
          surface.x1 = s.x1
          s.trash = true
          s.ready = true
          surface.ready = false
        elsif s.x1 == surface.x2
          surface.x2 = s.x2
          s.trash = true
          s.ready = true
          surface.ready = false
        end
      end
    end
    hs.each { |s| @surfaces.delete(s) if s.trash}
    for surface in vs
      surface.ready ? next : surface.ready
      for s in vs
        next if s.ready || s.x1 != surface.x1
        if s.y2 == surface.y1
          surface.y1 = s.y1
          s.trash = true
          s.ready = true
          surface.ready = false
        elsif s.y1 == surface.y2
          surface.y2 = s.y2
          s.trash = true
          s.ready = true
          surface.ready = false
        end
      end
    end
    vs.each { |s| @surfaces.delete(s) if s.trash}
    for surface in ws
      surface.ready ? next : surface.ready
      for s in ws
        next if s.ready || s.x1 != surface.x1
        if s.y2 == surface.y1
          surface.y1 = s.y1
          s.trash = true
          s.ready = true
          surface.ready = false
        elsif s.y1 == surface.y2
          surface.y2 = s.y2
          s.trash = true
          s.ready = true
          surface.ready = false
        end
      end
    end
    ws.each { |s| @surfaces.delete(s) if s.trash}
    for surface in is
      surface.ready ? next : surface.ready
      for s in is
        next if s.ready || s.x1 != surface.x1
        if s.y2 == surface.y1
          surface.y1 = s.y1
          s.trash = true
          s.ready = true
          surface.ready = false
        elsif s.y1 == surface.y2
          surface.y2 = s.y2
          s.trash = true
          s.ready = true
          surface.ready = false
        end
      end
    end
    is.each { |s| @surfaces.delete(s) if s.trash}
  end
end
class Game_Event < Game_Character
  alias kbl_initialize initialize
  alias kbl_setup_page setup_page
  def initialize(m,e)
    @light = nil
    kbl_initialize(m,e)
  end
  def setup_page(np)
    kbl_setup_page(np)
    setup_light(np.nil?)
  end
  def setup_light(dispose)
    unless @light.nil?
      $game_map.light_sources.delete(self)
      @light.dispose
      @light = nil
    end
    unless dispose && @list.nil?
      for command in @list
        if command.code == 108 && command.parameters[0].include?("[light")
          command.parameters[0].scan(/\[light ([0.0-9.9]+)\]/)
          effect = Light_Core::Effects[$1.to_i]
          @light = Light_SSource.new(self,effect[0],effect[1],effect[2],effect[3])
          $game_map.light_sources << self
          return
        end
      end
    end
  end
  def draw_light
    sx = @light.sx
    sy = @light.sy
    w = @light.w
    h = @light.h
    return if sx > 544 && sy > 416 && sx + w < 0 && sy + h < 0
    $game_map.light_surface.bitmap.blt(sx,sy,@light.bitmap,Rect.new(0,0,w,h),@light.opacity)
  end
  def dispose_light
    @light.dispose
  end
  def restore_light
    @light.restore
  end
end
if Light_Core::Surface_UE
  class Game_Interpreter
    def command_223
      $game_map.effect_surface.change_color(@params[1],@params[0].red,@params[0].green,@params[0].blue,@params[0].gray)
      wait(@params[1]) if @params[2]
    end
  end
end
class Game_Interpreter
  def self_event
    return $game_map.events[@event_id]
  end
end
class Block_Surface
  include Light_Core
  attr_accessor :x1
  attr_accessor :y1
  attr_accessor :x2
  attr_accessor :y2
  attr_accessor :ready
  attr_accessor :trash
  def initialize(x1,y1,x2,y2)
    @x1 = x1
    @y1 = y1
    @x2 = x2
    @y2 = y2
    @ready = false
    @trash = false
  end
  def within?(min_x,max_x,min_y,max_y)
    return @x2 > min_x && @x1 < max_x && @y2 > min_y && @y1 < max_y
  end
end
class Block_SL < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x01
  end
  def visible?(sx,sy)
    return sx < @x1 
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = sy - @m1*sx
    @m2 = (@y2-sy)/(@x2-sx)
    @n2 = sy - @m2*sx
    for x in @x1..(sx+range)
      init = shadow_iy(x)
      bitmap.clear_rect(x-phx,init-phy,1,shadow_fy(x)-init+3)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_SR < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x04
  end
  def visible?(sx,sy)
    return sx > @x1 
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = sy - @m1*sx
    @m2 = (@y2-sy)/(@x2-sx)
    @n2 = sy - @m2*sx
    for x in (sx-range).to_i..@x1
      init = shadow_iy(x)
      bitmap.clear_rect(x-phx,init-phy,1,shadow_fy(x)-init+3)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_IL < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x019
  end
  def visible?(sx,sy)
    return sx < @x1 && sy > @y1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = @y1 - @m1*@x1
    @m2 = (@y2-sy)/(@x2-sx)
    @m2 = 0 if @m2 > 0
    @n2 = @y2 - @m2*@x2
    for x in @x1..(sx+range)
      init = shadow_iy(x).floor
      bitmap.clear_rect(x-phx,init-3-phy,1,shadow_fy(x)-init+3)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_IR < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x01c
  end
  def visible?(sx,sy)
    return sx > @x1 && sy > @y1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = @y1 - @m1*@x1
    @m2 = (@y2-sy)/(@x2-sx)
    @m2 = 0 if @m2 < 0
    @n2 = @y2 - @m2*@x2
    for x in (sx-range).to_i..@x1
      init = shadow_iy(x).floor
      bitmap.clear_rect(x-phx,init-3-phy,1,shadow_fy(x)-init+3)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_WL < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x011
  end
  def visible?(sx,sy)
    return sx < @x1 && sy < @y2
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = sy - @m1*sx
    @m2 = (@y2-sy)/(@x2-sx)
    @n2 = sy - @m2*sx
    for x in @x1..(sx+range)
      init = shadow_iy(x)
      bitmap.clear_rect(x-phx,init-phy,1,shadow_fy(x)-init+2)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_WR < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x014
  end
  def visible?(sx,sy)
    return sx > @x1 && sy < @y2
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    @m1 = (@y1-sy)/(@x1-sx)
    @n1 = sy - @m1*sx
    @m2 = (@y2-sy)/(@x2-sx)
    @n2 = sy - @m2*sx
    for x in (sx-range).to_i..@x1
      init = shadow_iy(x)
      bitmap.clear_rect(x-phx,init-phy,1,shadow_fy(x)-init+2)
    end
  end
  def shadow_iy(x)
    return @m1*x+@n1
  end
  def shadow_fy(x)
    return @m2*x+@n2
  end
end
class Block_SU < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x02
  end
  def visible?(sx,sy)
    return sy < @y1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    if @x1 == sx
      @m1 = nil
    else
      @m1 = (@y1-sy)/(@x1-sx)
      @m1 += ACC if @m1 < -ACC
      @n1 = @y1 - @m1*@x1
    end
    if @x2 == sx
      @m2 = nil
    else
      @m2 = (@y2-sy)/(@x2-sx)
      @n2 = sy - @m2*sx
    end
    for y in @y1..(sy+range)
      init = shadow_ix(y)
      bitmap.clear_rect(init-phx,y-phy,shadow_fx(y)-init+1,1)
    end
  end
  def shadow_ix(y)
    return @m1.nil? ? @x1 : (y-@n1)/@m1
  end
  def shadow_fx(y)
    return @m2.nil? ? @x2 : (y-@n2)/@m2
  end
end
class Block_SD < Block_Surface
  attr_reader :type
  def initialize(x1,y1,x2,y2)
    super(x1,y1,x2,y2)
    @type = 0x08
  end
  def visible?(sx,sy)
    return sy > @y1
  end
  def render_shadow(phx,phy,sx,sy,range,bitmap)
    if @x1 == sx
      @m1 = nil
    else
      @m1 = (@y1-sy)/(@x1-sx)
      @m1 -= ACC if @m1 > ACC
      @n1 = sy - @m1*sx
    end
    if x2 == sx
      @m2 = nil
    else
      @m2 = (@y2-sy)/(@x2-sx)
      @n2 = sy - @m2*sx
    end
    for y in (sy-range).to_i..@y1
      init = shadow_ix(y)
      bitmap.clear_rect(init-phx,y-phy,shadow_fx(y)-init+1,1)
    end
  end
  def shadow_ix(y)
    return @m1.nil? ? @x1 : (y-@n1)/@m1
  end
  def shadow_fx(y)
    return @m2.nil? ? @x2 : (y-@n2)/@m2
  end
end
class Spriteset_Map
  include Light_Core
  alias kbl_initialize initialize
  alias kbl_update update
  alias kbl_dispose dispose
  def initialize
    setup_lights
    kbl_initialize
  end
  def update
    kbl_update
    update_lights
  end
  def dispose
    kbl_dispose
    dispose_lights
  end
  def dispose_lights
    $game_map.lantern.dispose
    $game_map.light_sources.each { |source| source.dispose_light }
    $game_map.light_surface.bitmap.dispose
    $game_map.light_surface.dispose
    $game_map.light_surface = nil
  end
  def update_lights
    $game_map.light_surface.bitmap.clear
    $game_map.light_surface.bitmap.fill_rect(0,0,544,416,$game_map.effect_surface.color)
    $game_map.light_sources.each { |source| source.draw_light }
    return unless $game_map.lantern.visible
    @btr = $game_map.lantern.get_graphic
    x = $game_map.lantern.x
    y = $game_map.lantern.y
    r = $game_map.lantern.range
    sx = x + r
    sy = y + r
    dr = r*2
    $game_map.surfaces.each { |s| s.render_shadow(x,y,sx,sy,r,@btr) if s.visible?(sx,sy) && s.within?(x,x+dr,y,y+dr) }
    $game_map.light_surface.bitmap.blt($game_map.lantern.sx,$game_map.lantern.sy,@btr,Rect.new(0,0,dr,dr),$game_map.lantern.opacity)
  end
  def setup_lights
    @btr = nil
    $game_map.lantern.restore
    $game_map.light_sources.each { |source| source.restore_light }
    $game_map.light_surface = Sprite.new
    $game_map.light_surface.bitmap = Bitmap.new(544,416)
    $game_map.light_surface.bitmap.fill_rect(0,0,544,416,$game_map.effect_surface.color)
    $game_map.light_surface.blend_type = 2
    $game_map.light_surface.opacity = $game_map.effect_surface.alpha
    $game_map.light_surface.z = Surface_Z
  end
end


Lorsque l'un ou l'autre n'est pas activé, la touche d'action marche. Alors une fois de plus, je ne sais pas d'où ça vient...:triste2


FdRstar - posté le 27/02/2013 à 18:44:20 (10 messages postés)

❤ 0

Support : VX Ace

Bonjour, j'aimerais juste savoir comment récupérer l'id de l'ennemi à la position x dans un combat. En fait, je veux la stocker dans une variable dans un évènement commun. Merci.

Résolu : voir en-dessous


Estheone - posté le 06/03/2013 à 20:06:37 (312 messages postés)

❤ 0

En appel de script :

Portion de code : Tout sélectionner

1
2
enemy = $game_troop.members[y]
$game_variables[x] = enemy ? enemy.enemy_id : 0


En remplaçant x par l'id de ta variable et y par l'index de l'ennemi (en partant de 0).

Wandering Souls : Jeu complet / Topic sur Oniro


FdRstar - posté le 06/03/2013 à 21:02:52 (10 messages postés)

❤ 0

Merci, ça marche bien.^^

Aller à la page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

Index du forum > Entraide > [Scripts] Petites questions connes sur les SCRIPTS!!

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers