Script RMXP: Plusieurs objets par monstres et autres possibilités de drop

Voir le sujet précédent Voir le sujet suivant Aller en bas

Script RMXP: Plusieurs objets par monstres et autres possibilités de drop

Message par Larcange le Lun 17 Mai - 9:17

Oyé oyé, voici un script créé à l'instant, j'avais 10 minutes à perdre et l'envie de scripter...
Voici donc un script de résultat de combat, ou plutôt un système de résultat.
Vous en avez marre de pouvoir dropper qu'un seul objet par monstre? Vous en avez marre de n'avoir les drops qui névoluent pas au fur et à mesure du jeu?
Et bien voilà, j'ai conçu ce matin un petit système permettant plus de fonctionnalités que le système initial:
Dorénavant, chaque monstres peuvent droper plus d'objet, autant que vous le souhaiter, avec un taux de probabilité différent pour chaque objets.
Un facteur chance influe sur la probabilité de droper l'objet, à l'aide d'une variable:
Si la variable 2 (variable gérant la chance) est égale à 100, le joueur aura 100% de chance en plus de droper l'objet, donc il dropera à tous les coups. En revanche, si le joueur a - 100 en chance, il aura - 100% de chance de droper un objet.
Un objet à 50% de drop initial sera donc à -50% de chance, le drop étant alors nul pour cet objet.
Un autre facteur a aussi été ajouté: le facteur prospection:
Vous aimeriez faire des objets qui ne peuvent être droper qu'à un certain avancement du jeu? Vous aimeriez faire en sorte que le joueur s'intéresse à l'univers annexe de votre jeu, afin d'augmenter ses caractéristiques, afin de lui permettre de trouver des objets inédits ou autre... Le système est pour vous!
En effet, une fois encore, une caractéristique est gérée en variable: la prospection. Si la variable de prospection est inférieure à la condition de prospection réglée dans la table du monstre correspondant, l'objet se voit être impossible à droper tant que la variable ne soit pas au dessus du seuil requis.
Exemple: un fantôme à 50% de chance de droper une potion, avec une prospection requise de 0, et une super potion avec 100% de chance de droper la super potion, mais avec une prospection requise de 20.
Si la variable correspondant à la prospection est en dessous de 20, la super potion ne sera jamais dropée. En revanche, si la prospection est à 20 ou plus, la super potion sera tout le temps droper.
Le système est vraiment simple en lui même pour les modifications, mais si vous voulez une retouche sur mesure, je serais ravi de vous la faire ^^!
Au niveau du script, bah pas grand chose, simplement une modification du script Scene_Battle2, et un ajout d'un module de ma conception qui va pas super loin ^^!

Alors tout d'abord, supprimez Scene_Battle2 et mettez y à la place:
Spoiler:

#==============================================================================
# ■ Scene_Battle (分割定義 2)
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle
#--------------------------------------------------------------------------
# ● プレバトルフェーズ開始
#--------------------------------------------------------------------------
def start_phase1
# フェーズ 1 に移行
@phase = 1
# パーティ全員のアクションをクリア
$game_party.clear_actions
# バトルイベントをセットアップ
setup_battle_event
end
#--------------------------------------------------------------------------
# ● フレーム更新 (プレバトルフェーズ)
#--------------------------------------------------------------------------
def update_phase1
# 勝敗判定
if judge
# 勝利または敗北の場合 : メソッド終了
return
end
# パーティコマンドフェーズ開始
start_phase2
end
#--------------------------------------------------------------------------
# ● パーティコマンドフェーズ開始
#--------------------------------------------------------------------------
def start_phase2
# フェーズ 2 に移行
@phase = 2
# アクターを非選択状態に設定
@actor_index = -1
@active_battler = nil
# パーティコマンドウィンドウを有効化
@party_command_window.active = true
@party_command_window.visible = true
# アクターコマンドウィンドウを無効化
@actor_command_window.active = false
@actor_command_window.visible = false
# メインフェーズフラグをクリア
$game_temp.battle_main_phase = false
# パーティ全員のアクションをクリア
$game_party.clear_actions
# コマンド入力不可能な場合
unless $game_party.inputable?
# メインフェーズ開始
start_phase4
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (パーティコマンドフェーズ)
#--------------------------------------------------------------------------
def update_phase2
# C ボタンが押された場合
if Input.trigger?(Input::C)
# パーティコマンドウィンドウのカーソル位置で分岐
case @party_command_window.index
when 0 # 戦う
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# アクターコマンドフェーズ開始
start_phase3
when 1 # 逃げる
# 逃走可能ではない場合
if $game_temp.battle_can_escape == false
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 逃走処理
update_phase2_escape
end
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (パーティコマンドフェーズ : 逃げる)
#--------------------------------------------------------------------------
def update_phase2_escape
# エネミーの素早さ平均値を計算
enemies_agi = 0
enemies_number = 0
for enemy in $game_troop.enemies
if enemy.exist?
enemies_agi += enemy.agi
enemies_number += 1
end
end
if enemies_number > 0
enemies_agi /= enemies_number
end
# アクターの素早さ平均値を計算
actors_agi = 0
actors_number = 0
for actor in $game_party.actors
if actor.exist?
actors_agi += actor.agi
actors_number += 1
end
end
if actors_number > 0
actors_agi /= actors_number
end
# 逃走成功判定
success = rand(100) < 50 * actors_agi / enemies_agi
# 逃走成功の場合
if success
# 逃走 SE を演奏
$game_system.se_play($data_system.escape_se)
# バトル開始前の BGM に戻す
$game_system.bgm_play($game_temp.map_bgm)
# バトル終了
battle_end(1)
# 逃走失敗の場合
else
# パーティ全員のアクションをクリア
$game_party.clear_actions
# メインフェーズ開始
start_phase4
end
end
#--------------------------------------------------------------------------
# ● アフターバトルフェーズ開始
#--------------------------------------------------------------------------
def start_phase5
# フェーズ 5 に移行
@phase = 5
# バトル終了 ME を演奏
$game_system.me_play($game_system.battle_end_me)
# バトル開始前の BGM に戻す
$game_system.bgm_play($game_temp.map_bgm)
# EXP、ゴールド、トレジャーを初期化
exp = 0
gold = 0
treasures = []
# ループ
for enemy in $game_troop.enemies
# エネミーが隠れ状態でない場合
unless enemy.hidden
# 獲得 EXP、ゴールドを追加
exp += enemy.exp
gold += enemy.gold
# トレジャー出現判定
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items[enemy.item_id])
end
if enemy.weapon_id > 0
treasures.push($data_weapons[enemy.weapon_id])
end
if enemy.armor_id > 0
treasures.push($data_armors[enemy.armor_id])
end
end



tresor = LARC_TRESOR::LARCANGE_TRESOR[enemy.id]
for i in 0..(tresor.size - 1)
tresor2 = tresor[i]
tresor_type = tresor2[0]
tresor_id = tresor2[1]
tresor_prob = tresor2[2]
tresor_pp = tresor2[3]

if rand(100)*((100+$game_variables[$chancedrop])/100) < tresor_prob
if $game_variables[$prospection] >= tresor_pp
if tresor_type == 0
treasures.push($data_items[tresor_id])
end
if tresor_type == 1
treasures.push($data_weapons[tresor_id])
end
if tresor_type == 2
treasures.push($data_armors[tresor_id])
end
end # de la pp
end
end # de la cond

end
end
# トレジャーの数を 6 個までに限定
treasures = treasures[0..5]
# EXP 獲得
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.cant_get_exp? == false
last_level = actor.level
actor.exp += exp
if actor.level > last_level
@status_window.level_up(i)
end
end
end
# ゴールド獲得
$game_party.gain_gold(gold)
# トレジャー獲得
for item in treasures
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
# バトルリザルトウィンドウを作成
@result_window = Window_BattleResult.new(exp, gold, treasures)
# ウェイトカウントを設定
@phase5_wait_count = 100
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アフターバトルフェーズ)
#--------------------------------------------------------------------------
def update_phase5
# ウェイトカウントが 0 より大きい場合
if @phase5_wait_count > 0
# ウェイトカウントを減らす
@phase5_wait_count -= 1
# ウェイトカウントが 0 になった場合
if @phase5_wait_count == 0
# リザルトウィンドウを表示
@result_window.visible = true
# メインフェーズフラグをクリア
$game_temp.battle_main_phase = false
# ステータスウィンドウをリフレッシュ
@status_window.refresh
end
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# バトル終了
battle_end(0)
end
end
end

Pour ceux qui voudraient y jeter un oeil, la modification se fait dans la def: def start_phase5

Voici maintenant le script dans lequel vous devrez régler les drop ennemis:
Spoiler:

=begin
===============================================================================
=
=
= Multis trésors v 0.7 by Larcange
=
= Script créé pour Imagin, reservé exclusivement aux membres
=
=
= Pour les autres intéressés, merci de demander la permission à
=
= johann_LEVESQUE@hotmail.com
=
=
===============================================================================


A => [ [B,C,D,E],[B',C',D',E'] ],
A => ID du monstre
B => Type de l'objet qui sera dropé, 0 = objet, 1 = arme, 2 = armure
C => ID de l'objet
D => Probabilité de droper l'objet
E => Prospection: défini une certaine valeur pour que l'objet puisse être droper
cette valeur est stockée dans une variable, et agit donc comme une
caractéristique du héros, un peu comme une chance.
si la variable contenant la valeur de prospection est supérieure ou
égale à la valeur requise, l'objet peut être dropé, en calculant
toujours la probabilité si l'objet est dropé ou non.
Si la condition de prospection requise n'est pas respéctée, l'objet
ne peut être droper

Modifier la ligne 38 pour mettre l'ID de la variable contenant la valeur de prosp.



=end


$prospection = 1 # Changez ici l'ID de lavariable qui contiendra la prospection
$chancedrop = 2 # Changez ici l'ID de lavariable qui contiendra la chance

module LARC_TRESOR
LARCANGE_TRESOR = {
1=>[[0,1,20,0],[0,10,10,0],[0,14,25,0],[0,15,20,0]],
5=>[[0,10,20,0]],
8=>[[0,5,20,0],[0,12,25,0],[0,13,20,0]],
9=>[[0,1,20,0],[0,10,10,0],[0,14,25,0],[0,15,20,0]],
10=>[[1,1,60,0],[1,4,50,0]],
12=>[[0,16,100,0]],
13=>[[0,7,100,0]],
15=>[[0,4,20,0],[0,5,20,0]],
16=>[[2,9,20,0],[2,10,100,0]],
20=>[[0,15,10,0],[0,14,20,0],[0,13,30,0],[0,12,40,0]],
21=>[[0,1,50,0],[0,3,50,0],[0,7,50,0]],
24=>[[0,12,50,0],[0,13,50,0],[0,14,50,0],[0,15,50,0]],
33=>[[0,15,30,0]],
47=>[[0,15,100,99]]
}
end

Tout d'abord, commencer par régler les deux variables où seront contenues chance et prospection.
Si vous ne voulez pas du système de prospection, il suffit de mettre une variable que vous n'utiliserez pas et que vous laisserez tout le temps à 0. Idem pour la chance!
Pour régler les deux paramètre, ça se passe ligne 38 et 39, remplacez le 1 et le 2 par les ID des variables que vous voulez.
Ensuite, comment régler les drop ?
Code:

A => [  [B,C,D,E],[B',C',D',E']    ],
A => ID du monstre
B => Type de l'objet qui sera dropé, 0 = objet, 1 = arme, 2 = armure
C => ID de l'objet
D => Probabilité de droper l'objet
E => Prospection (mettre 0 si vous ne voulez aucune prospection requise)

Bref, voilà voilà, ce système peut être vraiment modifier, peut permettre de faire des probabilité à 0,001 % en modifiant quelques toutes petites choses, et autres choses plutôt sympatique du genre.
J'espère que ça vous plaira, et que je e suis pas trop trop mal exprimé ^^!
Sur ce, bon making!
avatar
Larcange
Soldat Lv.27
Soldat Lv.27

Messages : 796
Age : 25

Fiche
Palmarès:
Spécialité: Scripteur/Event Maker
Avertissements: Aucun

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Script RMXP: Plusieurs objets par monstres et autres possibilités de drop

Message par FoxFiesta le Lun 17 Mai - 18:03

Merci, ça me sera utile !!
avatar
FoxFiesta
Mec-qui-se-bat Lv.28
Mec-qui-se-bat Lv.28

Messages : 888
Age : 20

Fiche
Palmarès:
Spécialité: Manger
Avertissements: Aucun

Voir le profil de l'utilisateur http://www.youtube.com/FoxFiesta40

Revenir en haut Aller en bas

Re: Script RMXP: Plusieurs objets par monstres et autres possibilités de drop

Message par Larcange le Lun 17 Mai - 19:46

Ok Cool! Fox, mp moi avec un cahier de charge je te le personnaliserais pour ton projet Wink
avatar
Larcange
Soldat Lv.27
Soldat Lv.27

Messages : 796
Age : 25

Fiche
Palmarès:
Spécialité: Scripteur/Event Maker
Avertissements: Aucun

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Script RMXP: Plusieurs objets par monstres et autres possibilités de drop

Message par FoxFiesta le Mar 18 Mai - 17:21

Héhé, en fait j'ai pas de projet vraiment concret, pour tout dire.^^ Mais quand j'aurai besoin de quelque chose, je te demanderai, merci. Wink
avatar
FoxFiesta
Mec-qui-se-bat Lv.28
Mec-qui-se-bat Lv.28

Messages : 888
Age : 20

Fiche
Palmarès:
Spécialité: Manger
Avertissements: Aucun

Voir le profil de l'utilisateur http://www.youtube.com/FoxFiesta40

Revenir en haut Aller en bas

Re: Script RMXP: Plusieurs objets par monstres et autres possibilités de drop

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

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