Partagez
Aller en bas
oO-Hony-Oo
Membre

Nombre de messages : 139
Age : 22
Localisation : Sur RPGMVX =)
Distinction : aucune
Date d'inscription : 31/07/2008

Livre de points de caractéristiques

le Dim 3 Aoû 2008 - 10:30
Bonjour ! ceci est mon premier tuto, en espérant qu'aucun autre tuto n'y ressemble (si c'est le cas, supprimer le) je vais vous montrez comment faire un livre qui vous permettras, à chaque passage de niveau, de répartir vos points de caractéristiques.

Déjà, il vous faut ce script, a placer juste au dessus de main, bien sur (il n'est pas de moi mais de Douk)

Spoiler:
#==============================================================================
# Simples Distribuição de Pontos
#------------------------------------------------------------------------------
# Criado por CACAO
# Versão 1.01
#==============================================================================
# :: Como utilizar
#
# Utilisation ou de commande événement "Appeller Script" pour appeller une fenêtre de
# Points de distribution. A l'intérieur de la boîte de texte qui apparaît fenêtre nd
# Command "Appeller Script", ou inserer code suivante:
#
# $game_temp.next_scene = "spoint"
#
#==============================================================================

class Game_Interpreter
alias _cbs_execute_command execute_command
def execute_command
if @index >= @list.size-1
command_end
return true
else
return command_108_line if @list[@index].code == 108
end
_cbs_execute_command
end
def command_108_line
for i in 0...6
@params = @list[@index].parameters[0]
command_108
break if @list[@index + 1].code != 408
@index += 1
end
return true
end
def command_108
end
end


class Scene_Map < Scene_Base
alias _cbs_update_scene_change update_scene_change
def update_scene_change
return if $game_player.moving?
update_scene_change_cao
_cbs_update_scene_change
end
def update_scene_change_cao
return if $game_player.moving?
end
end

module CAO; class Status

#--------------------------------------------------------------------------
# Configuração do Script
#--------------------------------------------------------------------------
# Número de pontos a ser ganho quando subir de nível
#--------------------------------------------------------------------------
STATUS_POINT = 5
#--------------------------------------------------------------------------
# Máximo de pontos a serem adicionados a um atributo
#--------------------------------------------------------------------------
MAX_SORT = 10
#--------------------------------------------------------------------------
# 1 ponto aumenta quantos pontos nos atributos?
#--------------------------------------------------------------------------
UP_HP = 5 # HP
UP_MP = 5 # MP
UP_ATK = 1 # Ataque
UP_DEF = 1 # Defesa
UP_SPI = 1 # Inteligência
UP_AGI = 1 # Agilidade
#--------------------------------------------------------------------------
# Frase de pontos restantes
#--------------------------------------------------------------------------
INFOS_REMAINING_POINT = "Points Restants:"
end; end

class Game_Actor < Game_Battler
attr_accessor :spoint
alias _cao_setup_status setup
def setup(actor_id)
@spoint = 0
_cao_setup_status(actor_id)
end
alias _cao_level_up_status level_up
def level_up
_cao_level_up_status
$game_actors[self.id].spoint += CAO::Status::STATUS_POINT
end
end


class Scene_Map < Scene_Base
alias _update_scene_change_cao_spoint update_scene_change_cao
def update_scene_change_cao
_update_scene_change_cao_spoint
if $game_temp.next_scene == "spoint"
$game_temp.next_scene = nil
$scene = Scene_ActorSelect_S.new
end
end
end


class Scene_Menu < Scene_Base
def start_spoint(type = 0)
@from_spoint = type
start_actor_selection
end
alias _cao_update_actor_selection_spoint update_actor_selection
def update_actor_selection
if Input.trigger?(Input::C) && @from_spoint == 0
@from_spoint = nil
Sound.play_decision
actor_id = $game_party.members[@status_window.index].id
$scene = Scene_StatusPoint.new(actor_id, @command_window.index)
end
_cao_update_actor_selection_spoint
end
end

class Window_ParaStatus < Window_Base
def initialize(actor_id)
super(132, 28, 280, 128)
@actor = $game_actors[actor_id]
refresh
end
def refresh
draw_actor_name(@actor, 2, WLH * 0)
draw_actor_class(@actor, 2, WLH * 1)
draw_actor_hp(@actor, 2, WLH * 2)
draw_actor_mp(@actor, 2, WLH * 3)
for i in 0...4
draw_actor_parameter(@actor, 132, WLH * i, i)
end
end
def draw_actor_parameter(actor, x, y, type)
case type
when 0
parameter_name = Vocab::atk
parameter_value = actor.atk
when 1
parameter_name = Vocab::def
parameter_value = actor.def
when 2
parameter_name = Vocab::spi
parameter_value = actor.spi
when 3
parameter_name = Vocab::agi
parameter_value = actor.agi
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 72, WLH, parameter_name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 72, y, 40, WLH, parameter_value, 2)
end
end

class Window_StatusPoint < Window_Selectable
def initialize(actor_id)
super(132, 156, 280, 176)
@actor = $game_actors[actor_id]
@spoint = @actor.spoint
@psort = Array.new(6, 0)
s = CAO::Status
@s_rate = [s::UP_HP, s::UP_MP, s::UP_ATK, s::UP_DEF, s::UP_SPI, s::UP_AGI]
@dumy_status = Array.new(6, 0)
@item_max = 6
@index = 0
refresh
end
def refresh
self.contents.clear
s_name = [Vocab.hp, Vocab.mp, "ATA", "DEF", "INT", "AGI"]
for i in 0...6
self.contents.font.color = system_color
self.contents.draw_text(0, WLH * i, 48, WLH, s_name[i], 1)
gauge(WLH * i, @psort[i])
total_point = @psort[i] * @s_rate[i]
if total_point < 10
total_point = "000" + total_point.to_s
elsif total_point < 100
total_point = "00" + total_point.to_s
elsif total_point < 1000
total_point = "0" + total_point.to_s
end
self.contents.font.color = normal_color
self.contents.draw_text(184, WLH * i, 16, WLH, "+", 2)
self.contents.draw_text(200, WLH * i, 48, WLH, total_point, 2)
end
end
def gauge(y, point)
color = Color.new(200, 200, 200)
g1, g2 = Color.new(240, 120, 30), Color.new(230, 160, 50)
for i in 0...point
x = 120 / CAO::Status::MAX_SORT * i + 58
w = 80 / CAO::Status::MAX_SORT
self.contents.fill_rect(x + 2, y + 3, w, 18, color)
self.contents.gradient_fill_rect(x + 3, y + 4, w - 2, 16, g1, g2)
end
end
def update
if cursor_movable?
last_index = @index
if Input.repeat?(Input::DOWN)
cursor_down(Input.trigger?(Input::DOWN))
end
if Input.repeat?(Input::UP)
cursor_up(Input.trigger?(Input::UP))
end
if Input.repeat?(Input::RIGHT)
cursor_right
refresh
end
if Input.repeat?(Input::LEFT)
cursor_left
refresh
end
if @index != last_index
Sound.play_cursor
end
end
update_cursor
call_update_help
end
def cursor_right
if @actor.spoint > 0 && @psort[@index] < CAO::Status::MAX_SORT
status = [ @actor.maxhp, @actor.maxmp,
@actor.atk, @actor.def, @actor.spi, @actor.agi ]
@psort[@index] == 0 ? ps = 1 : ps = @psort[@index]
if @index < 2 && status[@index] + @s_rate[@index] * ps < 9999
Sound.play_cursor
@actor.spoint -= 1
@psort[@index] += 1
elsif status[@index] + @s_rate[@index] * ps < 999
Sound.play_cursor
@actor.spoint -= 1
@psort[@index] += 1
else
Sound.play_buzzer
end
end
end
def cursor_left
if @psort[@index] > 0
Sound.play_cursor
@actor.spoint += 1
@psort[@index] -= 1
end
end
def update_cursor
if @index < 0
self.cursor_rect.empty
else
row = @index / @column_max
if row < top_row
self.top_row = row
end
if row > bottom_row
self.bottom_row = row
end
rect = item_rect(@index)
rect.x = 50
rect.width = 134
rect.y -= self.oy
self.cursor_rect = rect
end
end
def cancel_sort
@actor.spoint = @spoint
end
def decision_sort
for i in 0...6
case i
when 0 ; @actor.maxhp += @s_rate[i] * @psort[i]
when 1 ; @actor.maxmp += @s_rate[i] * @psort[i]
when 2 ; @actor.atk += @s_rate[i] * @psort[i]
when 3 ; @actor.def += @s_rate[i] * @psort[i]
when 4 ; @actor.spi += @s_rate[i] * @psort[i]
when 5 ; @actor.agi += @s_rate[i] * @psort[i]
end
end
end
end

class Window_SpointInfos < Window_Base
def initialize(actor_id)
super(132, 332, 280, 56)
@actor = $game_actors[actor_id]
@spoint = @actor.spoint
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
text = CAO::Status::INFOS_REMAINING_POINT
self.contents.draw_text(12, 0, 200, WLH, text)
if @actor.spoint < 10
spoint_s = "00" + @actor.spoint.to_s
elsif @actor.spoint < 100
spoint_s = "0" + @actor.spoint.to_s
end
self.contents.font.color = normal_color
self.contents.draw_text(200, 0, 36, WLH, spoint_s, 1)
end
def update
if @spoint != @actor.spoint
@spoint = @actor.spoint
refresh
end
end
end

class Scene_StatusPoint < Scene_Base
def initialize(actor_id, from = -1)
@actor_id = actor_id
@from = from
end
def start
super
create_menu_background
@pstatus_window = Window_ParaStatus.new(@actor_id)
@spoint_window = Window_StatusPoint.new(@actor_id)
@sinfos_window = Window_SpointInfos.new(@actor_id)
end
def terminate
super
dispose_menu_background
@pstatus_window.dispose
@spoint_window.dispose
@sinfos_window.dispose
end
def return_scene
@from == -1 ? $scene = Scene_Map.new : $scene = Scene_Menu.new(@from)
end
def update
super
update_menu_background
@pstatus_window.update
@spoint_window.update
@sinfos_window.update
if Input.trigger?(Input::C)
Sound.play_decision
@spoint_window.decision_sort
return_scene
end
if Input.trigger?(Input::B)
Sound.play_cancel
@spoint_window.cancel_sort
return_scene
end
end
end

class Scene_ActorSelect_S < Scene_Base
def start
super
create_menu_background
create_command_window
end
def post_start
super
open_command_window
end
def pre_terminate
super
close_command_window
end
def terminate
super
dispose_command_window
dispose_menu_background
end
def update
super
update_menu_background
@command_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
actor_id = $game_party.members[@command_window.index].id
$scene = Scene_StatusPoint.new(actor_id)
end
end
def update_menu_background
super
@menuback_sprite.tone.set(0, 0, 0, 128)
end
def create_command_window
para = []
for i in 0...$game_party.members.size
para[i] = $game_party.members[i].name
end
@command_window = Window_Command.new(172, para)
@command_window.x = (544 - @command_window.width) / 2
@command_window.y = (416 - @command_window.height) / 2
@command_window.openness = 0
end
def dispose_command_window
@command_window.dispose
end
def open_command_window
@command_window.open
begin
@command_window.update
Graphics.update
end until @command_window.openness == 255
end
def close_command_window
@command_window.close
begin
@command_window.update
Graphics.update
end until @command_window.openness == 0
end
end

Maintenant que vous avez placer ce script ,(je le répète), au dessus de main, voila ce que nous allons faire :

¤ 1èrement, créons un évènement commun pour appeler le script :


Spoiler:
http://i48.servimg.com/u/f48/12/78/33/84/0000110.jpg

Le script à entrer dans la fenêtre de script est : $game_temp.next_scene = "spoint"
Une fois cet évènement créer, vous pouvez le nommez comme vous voulez.


Bien, 2èmement créons le livre qui nous serviras à appeler le script (où l'évènement)

Faites comme ceci :

Spoiler:
http://i48.servimg.com/u/f48/12/78/33/84/0000210.jpg

des explications s'impose, pour ceux qui s'y connaisse c'est bête mais pour les débutants on sais pas ^^ :
Pourquoi cible = aucune ? tout simplement car si vous mettez ennemi, cela ne marchera pas car il n'est disponible QUE dans le menu, et vous, vous avez déjà vu quelqu'un modifier ses caractéristiques dans un combat ?
Et si vous mettez cible = allié ou utilisateur hé bien ça ne marcheras tout simplement pas (si, si essayer !)

Ensuite... illimité ? oui car si votre objet n'est pas illimité, il ne vous servira qu'une seule fois, exemple :

-Une potion : illimité = non car on l'utilise une fois puis c'est fini y'en a plus !
-Un livre on le lit autant de fois qu'on veut !

Puis le plus important, il faut appeler l'évènement commun "spoint" (ou le nom que vous lui avez donné, sinon, bonne chance pour appeler le script ^^)

Et voila le résultat :

Spoiler:
http://i48.servimg.com/u/f48/12/78/33/84/0000310.jpg

Sélectionner le personnage qui doit recevoir les caractéristiques (pour cela montez de niveau ^^ 1 niveau = 5 points de caractéristiques)
il suffit de pousser votre touche droit (->) du clavier pour augmenter une caractéristiques.

Si jamais cela ne marche pas, mp moi, j'essayerai de trouver une solution.
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum