RPG-Forum: Script RMVX - RPG-Forum

Aller au contenu

Page 1 sur 1

Script RMVX Avoir des accessoires permettant d'utiliser des competences

#1 L'utilisateur est hors-ligne   ASHKA 

  • Ecuyer
  • PipPipPip
  • Groupe : Membres +
  • Messages : 136
  • Inscrit(e) : 12/11/2007
  • Genre :Homme
  • Lieu :Je suis le " LOGOS " donc je suis partout !!

Posté mardi 17 juin 2008 à 11:17

Nom : Script pour avoir des accessoires permettant d'utiliser des competences
Auteur : ASHKA
Nombre de script : 1
Info : Ce script permet d'avoir des " cristaux de competences " plus ou moins inspiré des oeufs Mana de Grandia ...
Il s'agit d'accessoire qui, une fois equipé, confere au porteur l'usage d'une competence.
Plus le porteur gagne de combat, plus le cristal se " remplit " d'energie/mana/exp/...
Ce " remplissage " permet au porteur d'utiliser de plus en plus de competence !!!
Le cristal " possede " les competences, pas le héros.
( Du moins pas avec ce script là ... ;) )
C'est-a-dire qu'en changeant de cristal, il perd les competences.
Si un autre porteur utilise un cristal déjà " plein ", il beneficie de toutes les competences déjà acquises.
( Le temps où il portera le cristal evidement !! )

Les cristaux sont des exemplaires uniques !!
Pour en avoir plusieurs identiques, il faut en créer plusieurs dans la base de données.
( Chacun d'eux devra alors etre " remplit " ... )

Configuration en debut de script ...


Créer un nouveau script dans " materials " et collez y ceci :

#	Avoir des accessoires permettant d'utiliser des competences

# Un accessoire, une fois equipé permet au porteur d'utiliser certaines competences.
# Le nombre de competence augmente plus le porteur combat avec l'accessoire equipé.
# Une fois déséquipé, il perd l'usage des competences.
# Les competences " debloqué " par un porteur sont transmise au second porteur.
# Ces accessoires sont des exemplaires unique.
# Pour en avoir plusieurs identiques, il faut en créer plusieurs dans la base de donnée.
# Chacun devra alors etre porté pour debloqué toute les competences qu'il contient.
################################################################################
module Cskill
# Ce tableau stocke l'ID de tout les " cristals "
  ID_CRISTAL = [32, 33, 34, 35, 36, 37]
# Ce tableau contient les competences qu'apprend chaque " cristals "
# A l'interieure des crochets, chaque blocs de crochets represente un cristal
# dont l'ordre correspond à celui du tableau precedent !!
  SKILL = [[nil, 59, 60, 61, 62], [63, 64, 65, 66], [75, 76], [67, 68, 69, 70], [77, 78], [79, 80]]
# Exp gagné par combat remporter ( si equipé )
  EXP = 5
# reference = ID du héros de labase de donnée dont les stats servent de base à la courbe d'exp du " cristal "  
  REF = 10
# chaque type correspond à une courbe de stats du héros de reference
# 1 = hp / 2 = mp / 3 = force / 4 = defense / 5 = intelligence / 6 = agilité
# distribuer vos cristaux entre ces 6 types d'evolutions
  TYPE1 = [32]
  TYPE2 = [33]
  TYPE3 = [34]
  TYPE4 = [35]
  TYPE5 = [36]
  TYPE6 = [37]
end
################################################################################
class Window_Status < Window_Base
  def draw_equipments(x, y)
	self.contents.font.color = system_color
	self.contents.draw_text(x, y, 120, WLH, Vocab::equip)
	for i in 0..4
	  draw_item_name(@actor.equips[i], x + 16, y + WLH * (i + 1))
	end
	acc = @actor.equips[4].id
	if Cskill::ID_CRISTAL.include?(acc)
	  test = $cristal_skill[acc]
	  lv = 0
####
	  ref = $data_actors[Cskill::REF]
	  if Cskill::TYPE1.include?(acc)
		type = 0
	  elsif Cskill::TYPE2.include?(acc)
		type = 1
	  elsif Cskill::TYPE3.include?(acc)
		type = 2
	  elsif Cskill::TYPE4.include?(acc)
		type = 3
	  elsif Cskill::TYPE5.include?(acc)
		type = 4
	  elsif Cskill::TYPE6.include?(acc)
		type = 5
	  end
	  need_exp = ref.parameters[type, (lv + 1)]
	  while test >= need_exp
		test -= need_exp
		lv += 1
		need_exp = ref.parameters[type, (lv + 1)]
	 end
####
	  num = Cskill::ID_CRISTAL.index(acc)
	  max = Cskill::SKILL[num].size
	  if Cskill::SKILL[num][0] != nil
		lv += 1
	  end
	  self.contents.draw_text( x + 16, y + WLH * 5 + 20, 150, 32, "Apprentissage : ") 
	  if lv < max
		self.contents.draw_text(x + 16 + 150, y + WLH * 5 + 20, 100, 32, lv.to_s + " / " + max.to_s)
	  else
		self.contents.draw_text(x + 16 + 150, y + WLH * 5 + 20, 100, 32, "MAX")
	  end
	end
  end
end
################################################################################
class Scene_Equip < Scene_Base
  def update_item_selection
	if Input.trigger?(Input::B)
	  Sound.play_cancel
	  @equip_window.active = true
	  @item_window.active = false
	  @item_window.index = -1
	elsif Input.trigger?(Input::C)
	  Sound.play_equip
	  last_item = @actor.equips[@equip_window.index]
	  @actor.change_equip(@equip_window.index, @item_window.item)
	  if Cskill::ID_CRISTAL.include?(last_item.id)
		num = Cskill::ID_CRISTAL.index(last_item.id)
		for x in 0..(Cskill::SKILL[num].size - 1)
		  id = Cskill::SKILL[num][x]
		  if id != nil	#
			@actor.forget_skill(id)
		  end   #
		end
	  end
	  if @equip_window.index == 4
		item_id = @item_window.item.id
		if Cskill::ID_CRISTAL.include?(item_id)
		  test = $cristal_skill[item_id]
		  lv = 0
####
	  ref = $data_actors[Cskill::REF]
	  if Cskill::TYPE1.include?(item_id)
		type = 0
	  elsif Cskill::TYPE2.include?(item_id)
		type = 1
	  elsif Cskill::TYPE3.include?(item_id)
		type = 2
	  elsif Cskill::TYPE4.include?(item_id)
		type = 3
	  elsif Cskill::TYPE5.include?(item_id)
		type = 4
	  elsif Cskill::TYPE6.include?(item_id)
		type = 5
	  end
	  need_exp = ref.parameters[type, (lv + 1)]
	  while test >= need_exp
		test -= need_exp
		lv += 1
		need_exp = ref.parameters[type, (lv + 1)]
	 end
####
		  for i in 0..lv
			num = Cskill::ID_CRISTAL.index(item_id)
			unless i >= Cskill::SKILL[num].size
			  skill_id = Cskill::SKILL[num][i]
			  if skill_id != nil	#
				@actor.learn_skill(skill_id)
			  end   #
			end
		  end
		end
	  end
	  @equip_window.active = true
	  @item_window.active = false
	  @item_window.index = -1
	  @equip_window.refresh
	  for item_window in @item_windows
		item_window.refresh
	  end
	end
  end
end

################################################################################
class Scene_Battle < Scene_Base
  def process_victory
	@info_viewport.visible = false
	@message_window.visible = true
	RPG::BGM.stop
	$game_system.battle_end_me.play
	unless $BTEST
	  $game_temp.map_bgm.play
	  $game_temp.map_bgs.play
	end
	display_exp_and_gold
	display_drop_items
	display_level_up
	for actor in $game_party.existing_members
	  if Cskill::ID_CRISTAL.include?(actor.armor4_id)
		$cristal_skill[actor.armor4_id] += Cskill::EXP
	  end
	end
	for actor in $game_party.members
	  if Cskill::ID_CRISTAL.include?(actor.armor4_id)
		test = $cristal_skill[actor.armor4_id]
		lv = 0
 ####
	  ref = $data_actors[Cskill::REF]
	  if Cskill::TYPE1.include?(actor.armor4_id)
		type = 0
	  elsif Cskill::TYPE2.include?(actor.armor4_id)
		type = 1
	  elsif Cskill::TYPE3.include?(actor.armor4_id)
		type = 2
	  elsif Cskill::TYPE4.include?(actor.armor4_id)
		type = 3
	  elsif Cskill::TYPE5.include?(actor.armor4_id)
		type = 4
	  elsif Cskill::TYPE6.include?(actor.armor4_id)
		type = 5
	  end
	  need_exp = ref.parameters[type, (lv + 1)]
	  while test >= need_exp
		test -= need_exp
		lv += 1
		need_exp = ref.parameters[type, (lv + 1)]
	 end
####
		for i in 0..lv
		  num = Cskill::ID_CRISTAL.index(actor.armor4_id)
		  unless i >= Cskill::SKILL[num].size
			skill_id = Cskill::SKILL[num][i]
			if skill_id != nil	#
			  actor.learn_skill(skill_id)
			end	 #
		  end
		end
	  end
	end
	battle_end(0)
  end
end
################################################################################
class Scene_Title < Scene_Base
  def start
	super
	$cristal_skill = Hash.new(0)
	load_database					 # Load database
	create_game_objects			   # Create game objects
	check_continue					# Determine if continue is enabled
	create_title_graphic			  # Create title graphic
	create_command_window			 # Create command window
	play_title_music				  # Play title screen music
  end
  def command_new_game
	confirm_player_location
	Sound.play_decision
	for id in Cskill::ID_CRISTAL
	  $cristal_skill[id] = 0
	end
	$game_party.setup_starting_members			# Initial party
	$game_map.setup($data_system.start_map_id)	# Initial map position
	$game_player.moveto($data_system.start_x, $data_system.start_y)
	$game_player.refresh
	$scene = Scene_Map.new
	RPG::BGM.fade(1500)
	close_command_window
	Graphics.fadeout(60)
	Graphics.wait(40)
	Graphics.frame_count = 0
	RPG::BGM.stop
	$game_map.autoplay
  end
end
################################################################################
class Scene_File < Scene_Base
  def write_save_data(file)
	characters = []
	for actor in $game_party.members
	  characters.push([actor.character_name, actor.character_index])
	end
	$game_system.save_count += 1
	$game_system.version_id = $data_system.version_id
	@last_bgm = RPG::BGM::last
	@last_bgs = RPG::BGS::last
	Marshal.dump(characters,		   file)
	Marshal.dump(Graphics.frame_count, file)
	Marshal.dump(@last_bgm,			file)
	Marshal.dump(@last_bgs,			file)
	Marshal.dump($game_system,		 file)
	Marshal.dump($game_message,		file)
	Marshal.dump($game_switches,	   file)
	Marshal.dump($game_variables,	  file)
	Marshal.dump($game_self_switches,  file)
	Marshal.dump($game_actors,		 file)
	Marshal.dump($game_party,		  file)
	Marshal.dump($game_troop,		  file)
	Marshal.dump($game_map,			file)
	Marshal.dump($game_player,		 file)
	Marshal.dump($cristal_skill,	   file)
  end
  def read_save_data(file)
	characters		   = Marshal.load(file)
	Graphics.frame_count = Marshal.load(file)
	@last_bgm			= Marshal.load(file)
	@last_bgs			= Marshal.load(file)
	$game_system		 = Marshal.load(file)
	$game_message		= Marshal.load(file)
	$game_switches	   = Marshal.load(file)
	$game_variables	  = Marshal.load(file)
	$game_self_switches  = Marshal.load(file)
	$game_actors		 = Marshal.load(file)
	$game_party		  = Marshal.load(file)
	$game_troop		  = Marshal.load(file)
	$game_map			= Marshal.load(file)
	$game_player		 = Marshal.load(file)
	$cristal_skill	   = Marshal.load(file)
	if $game_system.version_id != $data_system.version_id
	  $game_map.setup($game_map.map_id)
	  $game_player.center($game_player.x, $game_player.y)
	end
  end
end


Pour que le cristal debute de 0 plutôt qu'il ne donne au depart une competence, il suffit de mettre un "nil" comme premier element.
Donc [10, 11, 12] donne la competence 10 des le debut puis la 11 puis la 12 a chaque evolution.
[nil, 10, 11, 12] ne donne rien au niveau de depart, puis la competence 10 au niveau 1, la 11 au niveau 2, ...

Pour le niveau d'exp necessaire augmentant de niveau en niveau, plutôt que de vous obliger à configurer un hash stockant toutes ces valeurs d'exp par accessoires ( ce qui aurait été tres laborieux pour vous !! ), j'utilise un systeme plus simple.
Il y a 6 types d'evolution, ce qui correspond au 6 courbe de stat d'un héros ( HP / MP / Force / Defense / Intelligence / Agilité ).
Créez un héros de reference, indiquez son ID dans le script et repartissez vos accessoires dans les 6 tableaux type.

Les valeurs d'exp necessaires à chaque niveau seront les valeurs de la stats du héros de reference correspondante au type choisit.
J'espere que c'est suffisamment clair ...


ASHKA
FIGHT THE POWER !!
0

Partager ce sujet :


Page 1 sur 1


Réponse rapide

  

1 utilisateur(s) en train de lire ce sujet
0 members, 1 guests, 0 anonymous users