- ZouzakaMembre
- Nombre de messages : 302
Age : 25
Distinction : aucune
Date d'inscription : 25/12/2011
Capture de Monstres style Dofus
Mar 16 Oct 2018 - 21:44
Ce script permet de capturer des groupes de monstres afin de les ré-affronter plus tard avec une logique semblable a celle de dofus, ou, afin que la capture soit un succès il faut être dans un état donnée et posséder un pierre de capture avec une puissance supérieur a celle du groupe.
j'ai essayer de faire en sorte que le script soit assez personnalisable.
Le script :
https://www.mediafire.com/file/6ujc6zcwlhbvzcn/CAPTURE.exe/file
j'ai essayer de faire en sorte que le script soit assez personnalisable.
Le script :
- Spoiler:
- Code:
=begin
Auteur: Zouzaka
Ce script permet de capturer les ames d'un groupe de monstre dans des objets
afin de pouvoir les réaffonter plus tards.
-- Elements a preciser dans les notes des monstres:
<cap_mob: X>
<cap_price: Y>
X: la puissance du monstre
Y: Le prix du monstre
-- Elements a preciser dans les notes des objets de capture:
<cap_power: X>
<cap_chance: Y>
X: La puissance de la pierre de capture
Y: Les Chance de reussite de la capture avec cette pierre (pourcentage)
-- Faire Appel a un magasin de Capture:
Faire un appel de script avec "monster_shop(liste)" ou liste est une array des
groupes de monstres a vendre
Exemple: monster_shop([1,2,3])
le magasin vendra les groupes de monstres 1 et 2 et 3.
-- Bugs Connu:
* lorsque vous continuez une partie apres avoir changer la base de donnée des
objets, les objets avec des ames serons inutilisables.
=end
#ID de l'etat nessecaire afin de capturer le monstre
State_ID = 26
#ID des objets de capture
Objets_Capture = [17,18,19,20]
#Les Vocabs
Vocab_NoStone = "Aucune pierre de capture valide trouvé"
Vocab_CaptureFail = "Echec de la capture"
Vocab_CaptureSucces = "Capture réussi !"
Vocab_CapBattle = "Impossible de capturer ces monstres"
#Parametres de l'objet contenant l'ame
FULL_CAP_NAME = "Pierre Pleine"
FULL_CAP_ICONE = 352
#Parametres Avancé
EFFECT_CONTAIN_SOUL = 61
CAN_ESCAPE = false
CAN_LOSE = true
=begin
========================================================================
Fin du parametrage
========================================================================
=end
module BattleManager
class << self
alias cap_setup setup
alias cap_process_victory process_victory
alias cap_setup setup
def setup(troop_id, can_escape = true, can_lose = false, capture_battle = false)
cap_setup(troop_id, can_escape, can_lose)
@cap_power = cap_calc_btlepower(troop_id)
@troop_id = troop_id
@capture_battle = capture_battle
end
def cap_power ; return @cap_power ; end
def cap_calc_btlepower(troop_id)
total_power = 0
$data_troops[troop_id].members.each do |member|
member_power = $data_enemies[member.enemy_id].note.match(/<cap_mob: (\d+)/)
total_power += member_power[1].to_i if member_power
end
return total_power
end
def capture_state?
$game_party.battle_members.each do |actor|
returned = false
actor.states.each{|state| returned=true if state.id == State_ID}
return returned
end
end
def capture_item?
returned = false
$game_party.items.each do |item|
power = item.note.match(/<cap_power: (\d+)/)
chance = item.note.match(/<cap_chance: (\d+)/)
if power && chance
returned = true if (power[1].to_i >= @cap_power)
end
end
return returned
end
def start_capture(item_id)
i = rand(101)
if i <= $data_items[item_id].note.match(/<cap_chance: (\d+)/)[1].to_i
#Enlever la pierre vide
$game_party.lose_item($data_items[item_id], 1)
#Ajouter la pierre pleine
$game_party.gain_item($data_items[find_item(@troop_id)], 1)
$game_message.add(Vocab_CaptureSucces)
else
$game_message.add(Vocab_CaptureFail)
end
end
def find_item(troop_id)
$data_items.each do |item|
if item
@match = item.note.match(/<contain_soul: (\d+)/)
if @match
return item.id if @match[1].to_i == troop_id
end
end
end
end
def process_victory
if capture_state?
if capture_item?
if !@capture_battle
@window_stone = Window_Stone.new(0,0)
@window_stone.set_handler(:selected, method(:command_selected))
while !(@window_stone.disposed?) do
Graphics.update
@window_stone.update
Input.update
end
else
$game_message.add(Vocab_CapBattle)
end
else
$game_message.add(Vocab_NoStone)
end
end
cap_process_victory
end
def command_selected
$game_party.items.each do |item|
if item.name == @window_stone.command_name(@window_stone.index)
start_capture(item.id)
break
end
end
@window_stone.dispose
end
end
def self.replay_bgm_and_bgs
@map_bgm.replay unless ($BTEST or @map_bgm == nil)
@map_bgs.replay unless ($BTEST or @map_bgs == nil)
end
end
class Window_Stone < Window_Command
def make_command_list
$game_party.items.each do |item|
power = item.note.match(/<cap_power: (\d+)/)
chance = item.note.match(/<cap_chance: (\d+)/)
add_command(item.name, :selected, (power[1].to_i >= BattleManager.cap_power)) if power && chance
end
end
end
module DataManager
class << self
alias cap_load_normal_database load_normal_database
def load_normal_database
cap_load_normal_database
create_captures_database
end
def create_captures_database
$data_captures = []
for i in (1..$data_troops.length-1)
item = RPG::Item.new
item.id = $data_items.length + i - 1
item.name = FULL_CAP_NAME
item.scope = 0
item.occasion = 2
item.icon_index = FULL_CAP_ICONE
item.effects << RPG::UsableItem::Effect.new(61, i)
item.note = "<contain_soul: "+i.to_s+">"
item.description = "Affrontez: "+$data_troops[i].name+" !"
item.price = calc_item_price(i)
$data_captures << item
end
$data_items.concat($data_captures)
end
def calc_item_price(troop_id)
price = 0
$data_troops[troop_id].members.each do |enemy|
price += $data_enemies[enemy.enemy_id].note.match(/<cap_price: (\d+)/).to_a[1].to_i
end
return price
end
end
end
class Game_Battler
alias cap_use_item use_item
def use_item(item)
cap_use_item(item)
item.effects.each {|effect| item_capture_effect_apply(effect) }
end
def item_capture_effect_apply(effect)
if effect.code == EFFECT_CONTAIN_SOUL
BattleManager.setup(effect.data_id, CAN_ESCAPE, CAN_LOSE, true)
SceneManager.call(Scene_Battle)
end
end
end
class Game_Interpreter
def monster_shop(liste)
goods = []
items = {}
$data_items.each do |item|
items.merge!(item.note.match(/<contain_soul: (\d+)/).to_a[1] => item.id) unless item == nil
end
liste.each do |troop_id|
goods << [0,items[troop_id.to_s],0,0]
end
SceneManager.call(Scene_Shop)
SceneManager.scene.prepare(goods, true)
end
end
https://www.mediafire.com/file/6ujc6zcwlhbvzcn/CAPTURE.exe/file
- DocRpg84Membre
- Nombre de messages : 44
Age : 27
Distinction : aucune
Date d'inscription : 12/06/2017
Re: Capture de Monstres style Dofus
Dim 21 Oct 2018 - 18:55
très bonne idée ! je testerais ça dans la semaine et je te ferais un retour ! ( j'aimerais apprendre a scripter aussi, mais même avec des connaissance en JS, c'est chaud car code propre au logiciel :/ )
- ZouzakaMembre
- Nombre de messages : 302
Age : 25
Distinction : aucune
Date d'inscription : 25/12/2011
Re: Capture de Monstres style Dofus
Lun 22 Oct 2018 - 19:35
d'accord avec plaisir, mais les scripts de VX et ACE sont en Ruby en non pas en JS comme les modules de MV ^^'
- DocRpg84Membre
- Nombre de messages : 44
Age : 27
Distinction : aucune
Date d'inscription : 12/06/2017
Re: Capture de Monstres style Dofus
Lun 22 Oct 2018 - 22:43
oui bien-sur j'ai oublier de préciser que je parlais de MV, vu que j'utilise MV :p
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|