Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
273 connectés actuellement
30679471 visiteurs depuis l'ouverture
1768 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Ephy -
posté le 16/09/2024 à 19:48:35 (30099 messages postés)
- | [BIG SHOT] | Domaine concerné: Script
Logiciel utilisé: RM VXAce
Bonjour bonsoir.
Désolé pour le titre mais trouver un nom pour ça c'est aussi aussi angoissant que mon problème lui même. Si le staff vous avez une meilleure idée je suis preneur.
J'utilise actuellement ce script de combat (adapté et customisé à ma sauce): https://pastebin.com/raw/nrbunzeP
(le script de base est ici si jamais ça vous intéresse : https://pastebin.com/raw/GWfAQQeN)
Avec ces Window_BattleSkill et Window_BattleItem customisées aussi:
Spoiler (cliquez pour afficher)
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
| #==============================================================================
# ** Window_BattleSkill
#------------------------------------------------------------------------------
# This window is for selecting skills to use in the battle window.
#==============================================================================
class Window_BattleSkill < Window_SkillList
#--------------------------------------------------------------------------
# * Object Initialization
# info_viewport : Viewport for displaying information
#--------------------------------------------------------------------------
def col_max
return 1
end
def initialize(help_window, info_viewport)
y = help_window.height
# super(0, y, Graphics.width, info_viewport.rect.y - y)
super(0, y, (Graphics.width / 5) * 2, info_viewport.rect.y - y)
# super(Graphics.width - (Graphics.width / 5) * 2, y, (Graphics.width / 5) * 2, info_viewport.rect.y - y)
self.visible = false
self.opacity = 170
@help_window = help_window
@info_viewport = info_viewport
end
#--------------------------------------------------------------------------
# * Show Window
#--------------------------------------------------------------------------
def show
select_last
@help_window.show
super
end
#--------------------------------------------------------------------------
# * Hide Window
#--------------------------------------------------------------------------
def hide
@help_window.hide
super
end
end
|
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
| #==============================================================================
# ** Window_BattleItem
#------------------------------------------------------------------------------
# This window is for selecting items to use in the battle window.
#==============================================================================
class Window_BattleItem < Window_ItemList
#--------------------------------------------------------------------------
# * Object Initialization
# info_viewport : Viewport for displaying information
#--------------------------------------------------------------------------
def col_max
return 1
end
def initialize(help_window, info_viewport)
y = help_window.height
# super(0, y, Graphics.width, info_viewport.rect.y - y)
super(0, y, (Graphics.width / 5) * 2, info_viewport.rect.y - y)
self.visible = false
self.opacity = 170
@help_window = help_window
@info_viewport = info_viewport
end
#--------------------------------------------------------------------------
# * Include in Item List?
#--------------------------------------------------------------------------
def include?(item)
$game_party.usable?(item)
end
#--------------------------------------------------------------------------
# * Show Window
#--------------------------------------------------------------------------
def show
select_last
@help_window.show
super
end
#--------------------------------------------------------------------------
# * Hide Window
#--------------------------------------------------------------------------
def hide
@help_window.hide
super
end
end
|
En gros, en combat ça donne ça quand on utilise une magie et qu'on cible un ennemi:
Mais la fenêtre de skill/item est toujours à droite quelque soit la cible:
Ce qui est très moyen pour les cibles situées à gauche, sous la fenêtre.
Mon problème:
Je veux décaler les fenêtre Window_BattleSkill et Window_BattleItem sur la droite quand les ennemis ciblés sont dans la moitié gauche de l'écran et la remettre sur la gauche quand l'ennemi ciblié est sur la droite. Comme ceci:
Sur le papier, je vois à peu près comment je pourrais faire.
Comme les ennemis sont rangés dans l'ordre de gauche à droite, si l'index de la cible est inférieur à la moitié de l'index max, je change la position x des fenêtres pour la mettre à droite (Graphics.width - (Graphics.width / 5) * 2 pour la position exacte). Sinon, je la recale à gauche à x=0.
Mais ça s'arrête là. Dans la pratique, je sais pas exactement comment je dois récupérer ces ID et à quel moment du script devrait se trouver ces conditions et ces changements de position.
J'avais pensé à la ligne 1116, def update_cursor. Si je comprend bien, c'est là (du moins entre autre) que la sélection des ennemis se passe.
Pour tout le reste des trucs à modifier j'ai pu le faire moi même mais là, je sèche. Mais ces deux fenêtres me posent vraiment problème. Ca tient trop de place sur l'écran de combat et elles gênent toujours la lisibilité quelque soit leur emplacement. D'où mon idée de les déplacer dynamiquement.
|
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 |
Mack -
posté le 16/09/2024 à 20:13:32 (2309 messages postés)
- | | C'est l'idée oui
Le problème d'aller le foutre dans la Window_BattleEnemy, c'est que tu n'auras pas accès à la Window_Skill, donc ça va être la merde pour la bouger
Le mieux, c'est trouver la boucle de sélection ( habituellement c'est un truc du genre @enemy_window.update ), et de s'y foutre dedans
Mais j'arrive pas à trouver où c'est pour l'instant
Edit :
Ah putaingue, c'est vrai que VXAce utilise une methode de handler, donc t'auras pas de XX.update
J'ai fait un truc dégueu, mais qui marche :
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
| #==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias old_update update
def update
old_update
###
if (@enemy_window.open? and @enemy_window.active)
enemy_index = @enemy_window.index
if (enemy_index < $game_troop.members.size)
if ($game_troop.members[enemy_index].screen_x < Graphics.width / 2)
@skill_window.x = 0
else
@skill_window.x = (Graphics.width - (Graphics.width / 5) * 2)
end
end
end
###
end
end
|
La partie entre ###, c'est ce qu'il faudrait copier au bon endroit pour faire un truc propre, là, le mettre dans l'update de la scene, même si ça marche c'est pas bien beau
Le "gros" problème de VXAce, c'est qu'il gère de manière unique toute les windows ( en gros, pas besoin d'appeler la fonction update manuellement ).
C'est super parce que ça évite de trop se faire chier, mais du coup ça peut devenir chiant pour gérer des updates "à la main" selon qu'elle fenêtre est active
J'vais voir si y a une meilleure méthode, mais là je vois pas trop
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Ephy -
posté le 16/09/2024 à 21:01:25 (30099 messages postés)
- | [BIG SHOT] | Merci
Ca fonctionne à l'envers mais ça fonctionne.
J'ai juste changé en ça pour remettre d'aplomb:
1
2
3
4
5
6
| if ($game_troop.members[enemy_index].screen_x < Graphics.width / 2)
@skill_window.x = (Graphics.width - (Graphics.width / 5) * 2)
else
@skill_window.x = 0
end
|
J'ai rajouté la version item_window aussi.
Et enfin, en condition j'ai mis (pour le moment)
1
| if ($game_troop.members[enemy_index].screen_x <= (Graphics.width / 5) * 2) |
C'est plus joli avec la fenêtre à gauche donc j'ai limité la portion de screen qui force la fenêtre à droite après tests.
Si tu trouve plus propre, je suis preneur. Mais si tu trouve pas, ça me va très bien.
Je suis pas au top avec le scripting VXAce mais je comprend mieux pourquoi je galérais à trouver le update de tout ce bazar. J'aurais pu chercher un moment.
Je sais pas si c'est que je sais pas où chercher mais c'est dommage de pas avoir une liste des fonctions et de comment récupérer les informations de ce type là.
Clairement un truc du genre $game_troop.members[enemy_index].screen_x, même si c'est parfaitement logique quand on l'a sous les yeux, j'aurais pas pu l'inventer.
|
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 |
Mack -
posté le 16/09/2024 à 21:08:57 (2309 messages postés)
- | | En vrai, faut passer par l'aide en ligne, t'as souvent pas mal de truc
L'autre truc à faire, c'est de lire le code
Ou au moins le nom des méthodes / fonctions ( les def XXX ), ça peut pas mal aider ^^
J'dis que c'est un peu crado, mais en vrai, je pense pas que y ai de meilleure méthode
Une autre solution serait de se mettre dans l'update de la Window_Enemies ( j'ai plus le nom exacte ), et d'arriver à accéder à la Window_Skills, mais c'est vraiment pas mieux, pour un truc surement bien plus chiant
Ephy a dit: Merci
Ca fonctionne à l'envers mais ça fonctionne. |
Ah oui, j'ai fait les positions sans réfléchir
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Ephy -
posté le 23/09/2024 à 20:55:42 (30099 messages postés)
- | [BIG SHOT] | Petite mise à jour du script de Mack (par Mack):
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
| #==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias old_update update
def update
old_update
###
if (@enemy_window.open? and @enemy_window.active)
enemy = @enemy_window.enemy
if (enemy != nil)
if (enemy.screen_x < (Graphics.width / 5) * 2)
@skill_window.x = (Graphics.width - (Graphics.width / 5) * 2)
@item_window.x = (Graphics.width - (Graphics.width / 5) * 2)
else
@skill_window.x = 0
@item_window.x = 0
end
end
end
###
end
end |
L'ancien code utilisait la position du curseur qui sélectionne l'ennemi plutôt que la position de l'ennemi lui même ce qui posait problème quand une partie des ennemis est vaincue.
|
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 | Index du forum > Entraide > [RESOLU] [RM VXAce] Le super titre parce que j'ai aucune idée de comment résumer ma demande ici
|
|
|