-Mettez un titre clair et explicite, pas un titre vague. -Fournissez le plus d'informations possible, soyez clair et concis. -Pensez à éditer votre sujet afin d'ajouter [Résolu] dans le titre, lorsque votre demande est résolue.
Bonjour, je m'excuse d'avance si je n'ai pas posé ma question au bon endroit, car je ne sais pas si ma requête nécessite un nouveau script ou simplement la modification d'un de base.
Y a-t-il moyen de faire en sorte que si un monstre est immunisé à un statut (que le statut a donc F de coché dans la base de donnée), il y ait écrit "Immunité" au lieu de "Manqué" quand ce monstre endure ce statut en combat? Le problème étant que si par exemple le joueur utilise la compétence "poison" et qu'il y a écrit "Manqué" sur la cible, il ne peut pas savoir si l'attaque a raté à cause d'une histoire de précision ou si c'est parce que le monstre ne peut pas être affecté par ce statut.
En espérant avoir été suffisamment clair, merci d'avance.
Dernière édition par Wingan le 01 Fév 2012, 08:45, édité 1 fois au total.
Ah, dommage, c'est presque ça. Le texte de la ligne 192 (189 dans mon logiciel) est bien celui qui gère ce qui est affiché quand un statut n'a pas pu être infligé. Mais si je le change en "Immunité", ce mot sera affiché dans les deux cas: si l'attaque a raté à cause d'un manque de précision, ou si le monstre est bel et bien immunisé face au statut en question.
if skill.power == 0 self.damage = "" unless @state_changed self.damage = "Manqué!" # <--- Ici remplace Manqué par Immunisé end end else self.damage = "Manqué!" # <--- Ici faut pas toucher sinon c'est normal d'avoir tout # le temps Immunisé end
Salut, merci d'avoir essayé. Mais de mon côté, même sur un projet vierge, le problème est toujours là J'ai pris des screens pour montrer.
Donc, on le voit, le fantôme a 'C' de coché dans son affinité avec le statut 'Sommeil', il n'est donc pas censé être immunisé, et la probabilité qu'il soit affecté par ce statut est moyenne.
Je lance en combat la compétence qui s'appelle par défaut 'Suppression réticulaire' (inflige 'Sommeil' à tous les ennemis), et comme on le voit, l'un des Fantômes arrive à se prendre le statut et s'endort. L'autre ne subit pas le Sommeil. Et vu que les Fantômes ne sont pas immunisés au Sommeil, ça veut dire que dans ce cas s'il ne s'est pas endormi, c'est parce que l'attaque ne l'a pas atteint. C'est une question de précision. Et pourtant il y a l'affichage de l'immunité
Voilà, si ça se trouve ça vient de mon script Game_Battler 3, vu qu'il a l'air d'avoir quelques lignes en plus. On sait jamais, je vous le passe:
class Game_Battler #-------------------------------------------------------------------------- # ● スキルの使用可能判定 # skill_id : スキル ID #-------------------------------------------------------------------------- def skill_can_use?(skill_id) # SP が足りない場合は使用不可 if $data_skills[skill_id].sp_cost > self.sp return false end # 戦闘不能の場合は使用不可 if dead? return false end # 沈黙状態の場合、物理スキル以外は使用不可 if $data_skills[skill_id].atk_f == 0 and self.restriction == 1 return false end # 使用可能時を取得 occasion = $data_skills[skill_id].occasion # 戦闘中の場合 if $game_temp.in_battle # [常時] または [バトルのみ] なら使用可 return (occasion == 0 or occasion == 1) # 戦闘中ではない場合 else # [常時] または [メニューのみ] なら使用可 return (occasion == 0 or occasion == 2) end end #-------------------------------------------------------------------------- # ● 通常攻撃の効果適用 # attacker : 攻撃者 (バトラー) #-------------------------------------------------------------------------- def attack_effect(attacker) # クリティカルフラグをクリア self.critical = false # 第一命中判定 hit_result = (rand(100) < attacker.hit) # 命中の場合 if hit_result == true # 基本ダメージを計算 atk = [attacker.atk - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 # 属性修正 self.damage *= elements_correct(attacker.element_set) self.damage /= 100 # ダメージの符号が正の場合 if self.damage > 0 # クリティカル修正 if rand(100) < 4 * attacker.dex / self.agi self.damage *= 2 self.critical = true end # 防御修正 if self.guarding? self.damage /= 2 end end # 分散 if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # 第二命中判定 eva = 8 * self.agi / attacker.dex + self.eva hit = self.damage < 0 ? 100 : 100 - eva hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) end # 命中の場合 if hit_result == true # ステート衝撃解除 remove_states_shock # HP からダメージを減算 self.hp -= self.damage # ステート変化 @state_changed = false states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) # ミスの場合 else # ダメージに "Miss" を設定 self.damage = "Manqué!" # クリティカルフラグをクリア self.critical = false end # メソッド終了 return true end #-------------------------------------------------------------------------- # ● スキルの効果適用 # user : スキルの使用者 (バトラー) # skill : スキル #-------------------------------------------------------------------------- def skill_effect(user, skill) # クリティカルフラグをクリア self.critical = false # スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0、 # またはスキルの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合 if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1) # メソッド終了 return false end # 有効フラグをクリア effective = false # コモンイベント ID が有効の場合は有効フラグをセット effective |= skill.common_event_id > 0 # 第一命中判定 hit = skill.hit if skill.atk_f > 0 hit *= user.hit / 100 end hit_result = (rand(100) < hit) # 不確実なスキルの場合は有効フラグをセット effective |= hit < 100 # 命中の場合 if hit_result == true # 威力を計算 power = skill.power + user.atk * skill.atk_f / 100 if power > 0 power -= self.pdef * skill.pdef_f / 200 power -= self.mdef * skill.mdef_f / 200 power = [power, 0].max end # 倍率を計算 rate = 20 rate += (user.str * skill.str_f / 100) rate += (user.dex * skill.dex_f / 100) rate += (user.agi * skill.agi_f / 100) rate += (user.int * skill.int_f / 100) # 基本ダメージを計算 self.damage = power * rate / 20 # 属性修正 self.damage *= elements_correct(skill.element_set) self.damage /= 100 # ダメージの符号が正の場合 if self.damage > 0 # 防御修正 if self.guarding? self.damage /= 2 end end # 分散 if skill.variance > 0 and self.damage.abs > 0 amp = [self.damage.abs * skill.variance / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # 第二命中判定 eva = 8 * self.agi / user.dex + self.eva hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100 hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) # 不確実なスキルの場合は有効フラグをセット effective |= hit < 100 end # 命中の場合 if hit_result == true # 威力 0 以外の物理攻撃の場合 if skill.power != 0 and skill.atk_f > 0 # ステート衝撃解除 remove_states_shock # 有効フラグをセット effective = true end # HP からダメージを減算 last_hp = self.hp self.hp -= self.damage effective |= self.hp != last_hp # ステート変化 @state_changed = false effective |= states_plus(skill.plus_state_set) effective |= states_minus(skill.minus_state_set) # 威力が 0 の場合 if skill.power == 0 # ダメージに空文字列を設定 self.damage = "" # ステートに変化がない場合 unless @state_changed # ダメージに "Miss" を設定 self.damage = "Immu" end end # ミスの場合 else # ダメージに "Miss" を設定 self.damage = "Manqué!" end # 戦闘中でない場合 unless $game_temp.in_battle # ダメージに nil を設定 self.damage = nil end # メソッド終了 return effective end #-------------------------------------------------------------------------- # ● アイテムの効果適用 # item : アイテム #-------------------------------------------------------------------------- def item_effect(item) # クリティカルフラグをクリア self.critical = false # アイテムの効果範囲が HP 1 以上の味方で、自分の HP が 0、 # またはアイテムの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合 if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or ((item.scope == 5 or item.scope == 6) and self.hp >= 1) # メソッド終了 return false end # 有効フラグをクリア effective = false # コモンイベント ID が有効の場合は有効フラグをセット effective |= item.common_event_id > 0 # 命中判定 hit_result = (rand(100) < item.hit) # 不確実なスキルの場合は有効フラグをセット effective |= item.hit < 100 # 命中の場合 if hit_result == true # 回復量を計算 recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp if recover_hp < 0 recover_hp += self.pdef * item.pdef_f / 20 recover_hp += self.mdef * item.mdef_f / 20 recover_hp = [recover_hp, 0].min end # 属性修正 recover_hp *= elements_correct(item.element_set) recover_hp /= 100 recover_sp *= elements_correct(item.element_set) recover_sp /= 100 # 分散 if item.variance > 0 and recover_hp.abs > 0 amp = [recover_hp.abs * item.variance / 100, 1].max recover_hp += rand(amp+1) + rand(amp+1) - amp end if item.variance > 0 and recover_sp.abs > 0 amp = [recover_sp.abs * item.variance / 100, 1].max recover_sp += rand(amp+1) + rand(amp+1) - amp end # 回復量の符号が負の場合 if recover_hp < 0 # 防御修正 if self.guarding? recover_hp /= 2 end end # HP 回復量の符号を反転し、ダメージの値に設定 self.damage = -recover_hp # HP および SP を回復 last_hp = self.hp last_sp = self.sp self.hp += recover_hp self.sp += recover_sp effective |= self.hp != last_hp effective |= self.sp != last_sp # ステート変化 @state_changed = false effective |= states_plus(item.plus_state_set) effective |= states_minus(item.minus_state_set) # パラメータ上昇値が有効の場合 if item.parameter_type > 0 and item.parameter_points != 0 # パラメータで分岐 case item.parameter_type when 1 # MaxHP @maxhp_plus += item.parameter_points when 2 # MaxSP @maxsp_plus += item.parameter_points when 3 # 腕力 @str_plus += item.parameter_points when 4 # 器用さ @dex_plus += item.parameter_points when 5 # 素早さ @agi_plus += item.parameter_points when 6 # 魔力 @int_plus += item.parameter_points end # 有効フラグをセット effective = true end # HP 回復率と回復量が 0 の場合 if item.recover_hp_rate == 0 and item.recover_hp == 0 # ダメージに空文字列を設定 self.damage = "" # SP 回復率と回復量が 0、パラメータ上昇値が無効の場合 if item.recover_sp_rate == 0 and item.recover_sp == 0 and (item.parameter_type == 0 or item.parameter_points == 0) # ステートに変化がない場合 unless @state_changed # ダメージに "Miss" を設定 self.damage = "Manqué!" end end end # ミスの場合 else # ダメージに "Miss" を設定 self.damage = "Manqué!" end # 戦闘中でない場合 unless $game_temp.in_battle # ダメージに nil を設定 self.damage = nil end # メソッド終了 return effective end #-------------------------------------------------------------------------- # ● スリップダメージの効果適用 #-------------------------------------------------------------------------- def slip_damage_effect # ダメージを設定 self.damage = self.maxhp / 10 # 分散 if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # HP からダメージを減算 self.hp -= self.damage # メソッド終了 return true end #-------------------------------------------------------------------------- # ● 属性修正の計算 # element_set : 属性 #-------------------------------------------------------------------------- def elements_correct(element_set) # 無属性の場合 if element_set == [] # 100 を返す return 100 end # 与えられた属性の中で最も弱いものを返す # ※メソッド element_rate は、このクラスから継承される Game_Actor # および Game_Enemy クラスで定義される weakest = -100 for i in element_set weakest = [weakest, self.element_rate(i)].max end return weakest end end
En tout cas merci pour vos réponses! J'espère qu'on trouvera une solution, ça corrigerait un bon truc.
Edition: J'ai édité mon 1er post. Un ennemi est immunisé à un statut uniquement quand c'est le F qui est coché. Si c'est E, la probabilité qu'il en soit affecté est très faible mais néanmoins existante. Donc on ne peut pas dire qu'il s'agit d'immunité avec le E.
Tu pourrais envoyer le script indenté (entre les balises [codde] et [/code]) et supprimer tout les commentaires(lignes vertes) après "class"? Et je modifierais le code quand j'aurais le temps.
Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum