RPG-Forum: Script RMVX - RPG-Forum

Aller au contenu

Page 1 sur 1

Script RMVX Systeme d'apprentissage dans le maniement des armes

#1 L'utilisateur est hors-ligne   ASHKA Icône

  • Ecuyer
  • PipPipPip
  • Groupe : Membres +
  • Messages : 136
  • Inscrit(e) : 12-novembre 07
  • Gender:Male
  • Location:Je suis le " LOGOS " donc je suis partout !!

Posté 17 juin 2008 - 11:27

Nom : Systeme d'apprentissage dans le maniement des armes
Auteur : ASHKA
Nombre de script : ... 1 !!
Info : Ce script vous permet de faire un systeme d'evolution semblable à celui de FF2 ou de Koudelka ( pour ne citer qu'eux ... )
Plus un héros utilise un type d'arme, plus il en maitrise le maniement, plus il infligera de degats !!

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

=begin

			  Systeme d'apprentissage dans le maniement des armes
			  
			  
Dans l'onglet " System " de la base de donnée, créer autant d'attribut que vous
aurez de type d'arme dans votre jeu. Associé ces attributs aux armes qu'il 
represente dans l'onglet " Weapon ". ( Pensez à configurer la liste ci-dessous !! )
Plus un héros utilisera un type d'arme, plus il fera de degat avec ce type d'arme.
=end
module Maitrise
# Ci-dessous : Liste des attributs associé à un type d'arme
  TABLE_ATTRIBUT = [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
# Exp gagné à chaque utilisation du type d'arme ( Attaque normale )  
  EXP = 3 
# Montant d'exp necessaire par niveau ( fixe )  
  EXP_NEED = 100 
# Bonus gagné par niveau ( 0.2 par niveau => degat doublé au niveau de maitrise 5 )
  BONUS = 0.2 
end
class Game_Battler
  
  def make_attack_damage_value(attacker)
	damage = attacker.atk * 4 - self.def * 2		# base calculation
	damage = 0 if damage < 0						# if negative, make 0
	damage *= elements_max_rate(attacker.element_set)   # elemental adjustment
	damage /= 100
	if damage == 0								  # if damage is 0,
	  damage = rand(2)							  # half of the time, 1 dmg
	elsif damage > 0								# a positive number?
	  @critical = (rand(100) < attacker.cri)		# critical hit?
	  @critical = false if prevent_critical		 # criticals prevented?
	  damage *= 3 if @critical					  # critical adjustment
	end
	damage = apply_variance(damage, 20)			 # variance
	damage = apply_guard(damage) 
####
	if attacker.actor? and damage > 0
	  for attribut in $data_weapons[attacker.weapon_id].element_set
		if Maitrise::TABLE_ATTRIBUT.include?(attribut)
		  $maitrise_arme[attacker.id][attribut] += Maitrise::EXP
		  exp = $maitrise_arme[attacker.id][attribut]
		  indice = 1
		  while exp > Maitrise::EXP_NEED
			exp -= Maitrise::EXP_NEED
			indice += Maitrise::BONUS
		  end
		  damage *= indice
		end
	  end
   end
####
	@hp_damage = damage.to_i							 # damage HP
  end
end
################################################################################
class Scene_Title < Scene_Base
  def start
	super
	$maitrise_arme = 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 1..8 # Nombre de héros dans la base de donnée
	  $maitrise_arme[id] = {}
	end
	for id in 1..8 # Nombre de héros dans la base de donnée
	  for i in Maitrise::TABLE_ATTRIBUT 
		$maitrise_arme[id][i] = 0
	  end
	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($maitrise_arme,	   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)
	$maitrise_arme	   = 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


Voici un window de base pour voir vos stats.

Collez ceci à la suite du premier script :

class Window_Maitrise < Window_Base
# Ce tableau sert à associé un icone à chaque type d'arme :
# Chaque bloc est constitué comme ceci :
# [colonne de l'icone, ligne de l'icone]  
# En comptant à partir de 0
  TABLE_ICONE = [[11, 0], [3, 3], [8, 0], [3, 0], [10, 1], [4, 0], [14, 1], [3, 1], [5, 1], [0, 1]]
# Ce tableau sert à determiné les noms des differentes catégories d'arme.
# Il faut respecter l'ordre des elements dans chaque tableau !!
# L'ordre est egalement le même que celui du tableau TABLE_ATTRIBUT du 1er script !!
  TABLE_NOM = ["Griffe", "Gants", "Dague", "Epée", "Epée lourde", "Lance", "Hache", "Marteau", "Baton", "Arc"]
  
  def initialize(actor)
# Les quatres nombres ci-dessous sont :
# Position x / Position y / Largueur / Hauteur
# Pour avoir la fenetre au centre de l'ecran :
# Pos x = (544 / 2) - (largueur / 2)
# Pos y = (416 / 2) - (hauteur / 2)
	super(82, 43, 380, 330)
	@actor = actor
	refresh
  end

  def refresh
	self.contents.clear
	for i in 0..(Maitrise::TABLE_ATTRIBUT.size - 1)
	  bitmap = Cache.system("Iconset")
	  rect = Rect.new(TABLE_ICONE[i][0] * 24, TABLE_ICONE[i][1] * 24, 24, 24)
	  self.contents.blt(0, i * 30, bitmap, rect, 255)
	  self.contents.draw_text(30, i * 30, 150, 25, TABLE_NOM[i].to_s)
	  att = Maitrise::TABLE_ATTRIBUT[i]
	  text = $maitrise_arme[@actor.id][att]
	  level = 0
	  while text >= Maitrise::EXP_NEED
		text -= Maitrise::EXP_NEED
		level += 1
	  end
	  self.contents.draw_text(130, i * 30, 200, 25, "Lv : " + level.to_s + " - Exp : " + text.to_s, 2)
	end
  end
end
################################################################################
class Scene_Status < Scene_Base

  def start
	super
	create_menu_background
	@actor = $game_party.members[@actor_index]
	@status_window = Window_Status.new(@actor)
	@maitrise = Window_Maitrise.new(@actor)
	@maitrise.back_opacity = 255
	@maitrise.z = 150
	@maitrise.visible = false
  end

  def terminate
	super
	dispose_menu_background
	@status_window.dispose
	@maitrise.dispose
  end

  def update
	update_menu_background
	@status_window.update
	@maitrise.update
	if @maitrise.visible
	  update_maitrise
	  return
	end
	if Input.trigger?(Input::B)
	  Sound.play_cancel
	  return_scene
	elsif Input.trigger?(Input::R)
	  Sound.play_cursor
	  next_actor
	elsif Input.trigger?(Input::L)
	  Sound.play_cursor
	  prev_actor
	elsif Input.trigger?(Input::C)
	  Sound.play_decision
	  @maitrise.visible = true
	end
	super
  end
  
  def update_maitrise
	if Input.trigger?(Input::B)
	  Sound.play_cancel
	  @maitrise.visible = false
	end
  end
  
end


Il y a des instructions pour la configuration.

Ce script rajoute une petite fenetre accessible en appuyant sur la touche " Action " dans l'ecran " Status " du menu.

Un screen pour vous montrer :

Image IPB


Dernier conseil : Profiter de l'occasion pour donner aux ennemis des resistances à certains types d'armes !!
( Puisque un element permet de connaitre le type d'arme ... )

ASHKA
FIGHT THE POWER !!
0

#2 L'utilisateur est hors-ligne   dragoduval Icône

  • Au bistrot du coin
  • Pip
  • Groupe : Membres
  • Messages : 1
  • Inscrit(e) : 26-août 08

Posté 26 août 2008 - 08:56

oubliez sa, je suis pas dans la section xp :D

a et j'aime les scrip que tu fais !!!

Ce message a été modifié par dragoduval - 27 août 2008 - 18:25 .

0

#3 L'utilisateur est hors-ligne   Sam the rpg man Icône

  • Au bistrot du coin
  • Pip
  • Groupe : Membres
  • Messages : 2
  • Inscrit(e) : 07-février 10

Posté 11 février 2010 - 19:43

Salut. Jaime beaucoup ce script mais je dois avouer, j'ai un probleme! Je pense que je mets pas le script la ou il faut. "Materials?"
Ou c'est?
Sinn il marque: Line 57 type error
Underfined Superclass 'scene_base'
Merci beaucoup!
0

Page 1 sur 1


Réponse rapide

  

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)