Partagez
Aller en bas
avatar
Mister-Maker
Membre

Nombre de messages : 9
Distinction : aucune
Date d'inscription : 25/12/2011

[Résolu] Position perso formation

le Mer 28 Déc 2011 - 13:13
Salut amis maker ! Very Happy

Je crée ce topic car j'ai un problème dans VX Ace. En fait je suis en train de créer mes propres combats en event.
Je n'ai aucun problème à placer mes personnages en combat du moment qu'ils sont fixes dans l'histoire par exemple et que
je n'aurais que 1 à 4 personnages qui pourront combattre pour toute l'aventure, je sais pas si vous comprenez ce que je veux dire.
Il suffit de mettre pour un évenement (qui est la place du combattant au combat) "Si Héros1 est présent, alors mettre apparence..." etc

Mais si je veux pouvoir utiliser les personnages que je veux dans l'ordre que je veux (grâce au système de formation dans le menu)
je ne peux pas, j'ai besoin de la position du personnage 1, 2, 3 et 4 dans le menu pour indiquer à l’évènement quel personnage est à tel position.
Or je ne sais pas où trouver cette information ni comment l'avoir.

Merci !
avatar
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 27
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 14:11
Bon je commence seulement à toucher au RGSS3 mais voilà ce que j'en retire :

Dans la méthode de changement de formation du menu :
Spoiler:
def on_formation_ok
if @status_window.pending_index >= 0
$game_party.swap_order(@status_window.index,
@status_window.pending_index)

@status_window.pending_index = -1
@status_window.redraw_item(@status_window.index)
else
@status_window.pending_index = @status_window.index
end
@status_window.activate
end

On a ici le $game_party.swap_order() qui échange effectivement la position des deux persos sélectionnés. M'est avis de dire que tu devras probablement utiliser un truc du genre $game_party.order ou $game_party.index, je continue mes recherches.
avatar
Mister-Maker
Membre

Nombre de messages : 9
Distinction : aucune
Date d'inscription : 25/12/2011

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 14:35
D'accord merci. Donc je vais devoir utiliser des scripts... J'espère que je serais pas bloqué à d'autres endroits. Tu apprends par quel moyen le RGSS3 ?
avatar
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 27
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 14:55
Alors le RGSS3 je l'apprends tout seul avec l'aide de Mist' pour le moment, mais bon j'ai fait des études de programmation donc ça aide vachement à la compréhension ^^

Sinon, je cherche toujours pour ton problème ^^
avatar
Mister-Maker
Membre

Nombre de messages : 9
Distinction : aucune
Date d'inscription : 25/12/2011

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 14:58
Ah ok d'accord. Merci Smile
Mais sinon je m'en passerai tant pis je n'ai commencer aucun projet sur Ace donc je peux créer mon scénario de façon à ne pas utiliser de formation mais bon c'est un manque de liberté quand même.
avatar
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 27
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 15:07
Bon j'ai une piste. En fait, le RGSS3 gère le groupe de héros sous forme d'un tableau de personnages. Ainsi, si tu as 4 héros dans ton groupe, tu auras un tableau de 4 cases commençant à l'indice 0 (un tableau commence toujours à l'indice 0 en programmation).

Voici un exemple qui reprend le contenu du tableau avec l'équipe de base, dont tu n'as pas modifié la formation :

@actors[0] = 1 (ID du héros)
@actors[1] = 2
@actors[2] = 3
@actors[3] = 4


Imaginons maintenant que tu échange le héros d'ID 1 avec le héros d'ID 4. Ton tableau devient :

@actors[0] = 4
@actors[1] = 2
@actors[2] = 3
@actors[3] = 1


Ainsi, le tableau des personnages est mis à jour directement, sans fioritures. Je te fais une fonction permettant de savoir quel héros est à l'indice demandé, et je poste ça dès que j'ai terminé Wink

EDIT

Remplace le script "Game_Party" par celui-ci :
Code:
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
# スのインスタンスは $game_party で参照されます。
#==============================================================================

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 定数
  #--------------------------------------------------------------------------
  ABILITY_ENCOUNTER_HALF    = 0          # エンカウント半減
  ABILITY_ENCOUNTER_NONE    = 1          # エンカウント無効
  ABILITY_CANCEL_SURPRISE  = 2          # 不意打ち無効
  ABILITY_RAISE_PREEMPTIVE  = 3          # 先制攻撃率アップ
  ABILITY_GOLD_DOUBLE      = 4          # 獲得金額二倍
  ABILITY_DROP_ITEM_DOUBLE  = 5          # アイテム入手率二倍
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader  :gold                    # 所持金
  attr_reader  :steps                    # 歩数
  attr_reader  :last_item                # カーソル記憶用 : アイテム
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super
    @gold = 0
    @steps = 0
    @last_item = Game_BaseItem.new
    @menu_actor_id = 0
    @target_actor_id = 0
    @actors = []
    init_all_items
  end
  #--------------------------------------------------------------------------
  # ● 全アイテムリストの初期化
  #--------------------------------------------------------------------------
  def init_all_items
    @items = {}
    @weapons = {}
    @armors = {}
  end
  #--------------------------------------------------------------------------
  # ● 存在判定
  #--------------------------------------------------------------------------
  def exists
    !@actors.empty?
  end
  #--------------------------------------------------------------------------
  # ● メンバーの取得
  #--------------------------------------------------------------------------
  def members
    in_battle ? battle_members : all_members
  end
  #--------------------------------------------------------------------------
  # ● 全メンバーの取得
  #--------------------------------------------------------------------------
  def all_members
    @actors.collect {|id| $game_actors[id] }
  end
  #--------------------------------------------------------------------------
  # ● バトルメンバーの取得
  #--------------------------------------------------------------------------
  def battle_members
    all_members[0, max_battle_members].select {|actor| actor.exist? }
  end
  #--------------------------------------------------------------------------
  # ● バトルメンバーの最大数を取得
  #--------------------------------------------------------------------------
  def max_battle_members
    return 4
  end
  #--------------------------------------------------------------------------
  # ● リーダーの取得
  #--------------------------------------------------------------------------
  def leader
    battle_members[0]
  end
  #--------------------------------------------------------------------------
  # ● アイテムオブジェクトの配列取得
  #--------------------------------------------------------------------------
  def items
    @items.keys.sort.collect {|id| $data_items[id] }
  end
  #--------------------------------------------------------------------------
  # ● 武器オブジェクトの配列取得
  #--------------------------------------------------------------------------
  def weapons
    @weapons.keys.sort.collect {|id| $data_weapons[id] }
  end
  #--------------------------------------------------------------------------
  # ● 防具オブジェクトの配列取得
  #--------------------------------------------------------------------------
  def armors
    @armors.keys.sort.collect {|id| $data_armors[id] }
  end
  #--------------------------------------------------------------------------
  # ● 全ての装備品オブジェクトの配列取得
  #--------------------------------------------------------------------------
  def equip_items
    weapons + armors
  end
  #--------------------------------------------------------------------------
  # ● 全てのアイテムオブジェクトの配列取得
  #--------------------------------------------------------------------------
  def all_items
    items + equip_items
  end
  #--------------------------------------------------------------------------
  # ● アイテムのクラスに対応するコンテナオブジェクトを取得
  #--------------------------------------------------------------------------
  def item_container(item_class)
    return @items  if item_class == RPG::Item
    return @weapons if item_class == RPG::Weapon
    return @armors  if item_class == RPG::Armor
    return nil
  end
  #--------------------------------------------------------------------------
  # ● 初期パーティのセットアップ
  #--------------------------------------------------------------------------
  def setup_starting_members
    @actors = $data_system.party_members.clone
  end
  #--------------------------------------------------------------------------
  # ● パーティ名の取得
  #    一人ならそのアクターの名前、複数なら "○○たち" を返す。
  #--------------------------------------------------------------------------
  def name
    return ""          if battle_members.size == 0
    return leader.name  if battle_members.size == 1
    return sprintf(Vocab::PartyName, leader.name)
  end
  #--------------------------------------------------------------------------
  # ● 戦闘テストのセットアップ
  #--------------------------------------------------------------------------
  def setup_battle_test
    setup_battle_test_members
    setup_battle_test_items
  end
  #--------------------------------------------------------------------------
  # ● 戦闘テスト用パーティのセットアップ
  #--------------------------------------------------------------------------
  def setup_battle_test_members
    $data_system.test_battlers.each do |battler|
      actor = $game_actors[battler.actor_id]
      actor.change_level(battler.level, false)
      actor.init_equips(battler.equips)
      actor.recover_all
      add_actor(actor.id)
    end
  end
  #--------------------------------------------------------------------------
  # ● 戦闘テスト用アイテムのセットアップ
  #--------------------------------------------------------------------------
  def setup_battle_test_items
    $data_items.each do |item|
      gain_item(item, max_item_number(item)) if item && !item.name.empty?
    end
  end
  #--------------------------------------------------------------------------
  # ● パーティメンバーの最も高いレベルの取得
  #--------------------------------------------------------------------------
  def highest_level
    lv = members.collect {|actor| actor.level }.max
  end
  #--------------------------------------------------------------------------
  # ● アクターを加える
  #--------------------------------------------------------------------------
  def add_actor(actor_id)
    @actors.push(actor_id) unless @actors.include?(actor_id)
    $game_player.refresh
    $game_map.need_refresh = true
  end
  #--------------------------------------------------------------------------
  # ● アクターを外す
  #--------------------------------------------------------------------------
  def remove_actor(actor_id)
    @actors.delete(actor_id)
    $game_player.refresh
    $game_map.need_refresh = true
  end
  #--------------------------------------------------------------------------
  # ● 所持金の増加(減少)
  #--------------------------------------------------------------------------
  def gain_gold(amount)
    @gold = [[@gold + amount, 0].max, max_gold].min
  end
  #--------------------------------------------------------------------------
  # ● 所持金の減少
  #--------------------------------------------------------------------------
  def lose_gold(amount)
    gain_gold(-amount)
  end
  #--------------------------------------------------------------------------
  # ● 所持金の最大値を取得
  #--------------------------------------------------------------------------
  def max_gold
    return 99999999
  end
  #--------------------------------------------------------------------------
  # ● 歩数増加
  #--------------------------------------------------------------------------
  def increase_steps
    @steps += 1
  end
  #--------------------------------------------------------------------------
  # ● アイテムの所持数取得
  #--------------------------------------------------------------------------
  def item_number(item)
    container = item_container(item.class)
    container ? container[item.id] || 0 : 0
  end
  #--------------------------------------------------------------------------
  # ● アイテムの最大所持数取得
  #--------------------------------------------------------------------------
  def max_item_number(item)
    return 99
  end
  #--------------------------------------------------------------------------
  # ● アイテムを最大まで所持しているか判定
  #--------------------------------------------------------------------------
  def item_max?(item)
    item_number(item) >= max_item_number(item)
  end
  #--------------------------------------------------------------------------
  # ● アイテムの所持判定
  #    include_equip : 装備品も含める
  #--------------------------------------------------------------------------
  def has_item?(item, include_equip = false)
    return true if item_number(item) > 0
    return include_equip ? members_equip_include?(item) : false
  end
  #--------------------------------------------------------------------------
  # ● 指定アイテムがメンバーの装備品に含まれているかを判定
  #--------------------------------------------------------------------------
  def members_equip_include?(item)
    members.any? {|actor| actor.equips.include?(item) }
  end
  #--------------------------------------------------------------------------
  # ● アイテムの増加(減少)
  #    include_equip : 装備品も含める
  #--------------------------------------------------------------------------
  def gain_item(item, amount, include_equip = false)
    container = item_container(item.class)
    return unless container
    last_number = item_number(item)
    new_number = last_number + amount
    container[item.id] = [[new_number, 0].max, max_item_number(item)].min
    container.delete(item.id) if container[item.id] == 0
    if include_equip && new_number < 0
      discard_members_equip(item, -new_number)
    end
    $game_map.need_refresh = true
  end
  #--------------------------------------------------------------------------
  # ● メンバーの装備品を破棄する
  #--------------------------------------------------------------------------
  def discard_members_equip(item, amount)
    n = amount
    members.each do |actor|
      while n > 0 && actor.equips.include?(item)
        actor.discard_equip(item)
        n -= 1
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムの減少
  #    include_equip : 装備品も含める
  #--------------------------------------------------------------------------
  def lose_item(item, amount, include_equip = false)
    gain_item(item, -amount, include_equip)
  end
  #--------------------------------------------------------------------------
  # ● アイテムの消耗
  #    指定されたオブジェクトが消耗アイテムであれば、所持数を 1 減らす。
  #--------------------------------------------------------------------------
  def consume_item(item)
    lose_item(item, 1) if item.is_a?(RPG::Item) && item.consumable
  end
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの使用可能判定
  #--------------------------------------------------------------------------
  def usable?(item)
    members.any? {|actor| actor.usable?(item) }
  end
  #--------------------------------------------------------------------------
  # ● 戦闘時コマンド入力可能判定
  #--------------------------------------------------------------------------
  def inputable?
    members.any? {|actor| actor.inputable? }
  end
  #--------------------------------------------------------------------------
  # ● 全滅判定
  #--------------------------------------------------------------------------
  def all_dead?
    super && ($game_party.in_battle || members.size > 0)
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーが 1 歩動いたときの処理
  #--------------------------------------------------------------------------
  def on_player_walk
    members.each {|actor| actor.on_player_walk }
  end
  #--------------------------------------------------------------------------
  # ● メニュー画面で選択中のアクターを取得
  #--------------------------------------------------------------------------
  def menu_actor
    $game_actors[@menu_actor_id] || members[0]
  end
  #--------------------------------------------------------------------------
  # ● メニュー画面で選択中のアクターを設定
  #--------------------------------------------------------------------------
  def menu_actor=(actor)
    @menu_actor_id = actor.id
  end
  #--------------------------------------------------------------------------
  # ● メニュー画面で次のアクターを選択
  #--------------------------------------------------------------------------
  def menu_actor_next
    index = members.index(menu_actor) || -1
    index = (index + 1) % members.size
    self.menu_actor = members[index]
  end
  #--------------------------------------------------------------------------
  # ● メニュー画面で前のアクターを選択
  #--------------------------------------------------------------------------
  def menu_actor_prev
    index = members.index(menu_actor) || 1
    index = (index + members.size - 1) % members.size
    self.menu_actor = members[index]
  end
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの使用対象となったアクターを取得
  #--------------------------------------------------------------------------
  def target_actor
    $game_actors[@target_actor_id] || members[0]
  end
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの使用対象となったアクターを設定
  #--------------------------------------------------------------------------
  def target_actor=(actor)
    @target_actor_id = actor.id
  end
  #--------------------------------------------------------------------------
  # ● 順序入れ替え
  #--------------------------------------------------------------------------
  def swap_order(index1, index2)
    @actors[index1], @actors[index2] = @actors[index2], @actors[index1]
    $game_player.refresh
  end
  #--------------------------------------------------------------------------
  # ● セーブファイル表示用のキャラクター画像情報
  #--------------------------------------------------------------------------
  def characters_for_savefile
    battle_members.collect do |actor|
      [actor.character_name, actor.character_index]
    end
  end
  #--------------------------------------------------------------------------
  # ● パーティ能力判定
  #--------------------------------------------------------------------------
  def party_ability(ability_id)
    battle_members.any? {|actor| actor.party_ability(ability_id) }
  end
  #--------------------------------------------------------------------------
  # ● エンカウント半減?
  #--------------------------------------------------------------------------
  def encounter_half?
    party_ability(ABILITY_ENCOUNTER_HALF)
  end
  #--------------------------------------------------------------------------
  # ● エンカウント無効?
  #--------------------------------------------------------------------------
  def encounter_none?
    party_ability(ABILITY_ENCOUNTER_NONE)
  end
  #--------------------------------------------------------------------------
  # ● 不意打ち無効?
  #--------------------------------------------------------------------------
  def cancel_surprise?
    party_ability(ABILITY_CANCEL_SURPRISE)
  end
  #--------------------------------------------------------------------------
  # ● 先制攻撃率アップ?
  #--------------------------------------------------------------------------
  def raise_preemptive?
    party_ability(ABILITY_RAISE_PREEMPTIVE)
  end
  #--------------------------------------------------------------------------
  # ● 獲得金額二倍?
  #--------------------------------------------------------------------------
  def gold_double?
    party_ability(ABILITY_GOLD_DOUBLE)
  end
  #--------------------------------------------------------------------------
  # ● アイテム入手率二倍?
  #--------------------------------------------------------------------------
  def drop_item_double?
    party_ability(ABILITY_DROP_ITEM_DOUBLE)
  end
  #--------------------------------------------------------------------------
  # ● 先制攻撃の確率計算
  #--------------------------------------------------------------------------
  def rate_preemptive(troop_agi)
    (agi >= troop_agi ? 0.05 : 0.03) * (raise_preemptive? ? 4 : 1)
  end
  #--------------------------------------------------------------------------
  # ● 不意打ちの確率計算
  #--------------------------------------------------------------------------
  def rate_surprise(troop_agi)
    cancel_surprise? ? 0 : (agi >= troop_agi ? 0.03 : 0.05)
  end
  #--------------------------------------------------------------------------
  # *** get_hero_ID - par Gummy de rpgmakervx-fr.com ***
  # ● Retourne l'ID du héros selon l'indice demandé du tableau @actors.
  #--------------------------------------------------------------------------
  def get_hero_ID(i)
    return (@actors[i])
  end
end

Comment l'utiliser?

Ca fonctionne avec des conditions. Par exemple, tu veux faire en sorte que si le héros en première position est ton héros d'ID 1, tu affiches un certain perso.

Condition > Script > ($game_party.get_hero_ID(0)) == 1

Si c'est vrai, alors c'est que le héros en première position est bien ton héros d'ID 1. Sinon, c'est que c'est un autre héros à cette position.

Il faut jouer avec des conditions comme ceci, en modifiant la position dont tu souhaites connaître l'occupant (en orange, rappel, l'indice commence à 0) et l'ID du héros à vérifier (en vert).


Si tu as des soucis, n'hésite pas à poser des questions Wink
avatar
Mister-Maker
Membre

Nombre de messages : 9
Distinction : aucune
Date d'inscription : 25/12/2011

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 15:30
Je vais regarder tout ça et je ferais un édit. Merci beaucoup en tout cas !!! Very Happy

Edit :

Après quelques essais, ça fonctionne super bien ! Merci ! Wink
Je pense que je devrais réussir à faire les combats que je souhaite faire, sauf à un certain point.
Dans la barre de vie que je construis, Imaginons j'ai 150 PV, j'en perds 30 j'ai 120 PV. Pour afficher le changement je vais devoir utiliser des images ça ok, mais est ce que je dois créer une image pour chaque nombre entier ? (là je parle au niveau "écris" genre "130/150 PV" mais sinon pour la barre de vie je vais m'en sortir).
Merci.
avatar
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 27
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 16:06
En full event, oui, tu devrais avoir une image pour chaque chiffre (soit 10 images, allant de 0 à 9) et construire des nombres avec ces images.

Sinon, je peux me pencher sur un script qui affiche le contenu d'une variable à l'écran.
avatar
Mister-Maker
Membre

Nombre de messages : 9
Distinction : aucune
Date d'inscription : 25/12/2011

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 16:10
Héhé non t'inquiète je vais me débrouiller faut que je bosse aussi ^^ ! Mais merci de ton aide, si j'ai un autre problème je reviendrai. Smile
avatar
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 27
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 16:12
Ah bah non, ça existe déjà dans les codes messages de Ace :

\V[x] : Affiche le contenu d'une variable.

Moi ce que je te conseille, c'est d'avoir une variable HP qui vaut 150, tu travailles dessus, et tu ne fais que l'afficher par la suite. Le souci avec l'affichage par message, c'est que non seulement tu ne peux pas afficher le texte où tu veux, ni quand tu veux. D'où le petit script en question... Je vais y réfléchir.

Bref, je passe en résolu, n'hésite pas à reposer une question si tu as des soucis Wink
avatar
Mister-Maker
Membre

Nombre de messages : 9
Distinction : aucune
Date d'inscription : 25/12/2011

Re: [Résolu] Position perso formation

le Mer 28 Déc 2011 - 16:16
Je vois. Oui merci Wink
Contenu sponsorisé

Re: [Résolu] Position perso formation

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