Partagez
Aller en bas
avatar
Tink
Membre

Nombre de messages : 407
Age : 27
Localisation : Finistère (Bretagne)
Distinction : aucune
Date d'inscription : 12/08/2008
http://network-rpg-maker.site.voila.fr

Incompatibilité entre script de chenille et script d'équipes

le Mer 15 Juil 2009 - 16:40
Bonjour à tous et à toutes !

J'ai un petit soucis avec deux scripts et je n'arrive pas à démêler le problème tout seul. J'utilise le script de chenille ci dessous :
Spoiler:
#===============================================================
#
# www.rpgmakervx-fr.com
#
#===============================================================


class Game_Player
#--------------------------------------------------------------------------
# * Move Down
# turn_enabled : a flag permits direction change on that spot
#--------------------------------------------------------------------------
def move_down(turn_enabled = true)
super(turn_enabled)
end
#--------------------------------------------------------------------------
# * Move Left
# turn_enabled : a flag permits direction change on that spot
#--------------------------------------------------------------------------
def move_left(turn_enabled = true)
super(turn_enabled)
end
#--------------------------------------------------------------------------
# * Move Right
# turn_enabled : a flag permits direction change on that spot
#--------------------------------------------------------------------------
def move_right(turn_enabled = true)
super(turn_enabled)
end
#--------------------------------------------------------------------------
# * Move up
# turn_enabled : a flag permits direction change on that spot
#--------------------------------------------------------------------------
def move_up(turn_enabled = true)
super(turn_enabled)
end
#--------------------------------------------------------------------------
# * Move Lower Left
#--------------------------------------------------------------------------
def move_lower_left
super
end
#--------------------------------------------------------------------------
# * Move Lower Right
#--------------------------------------------------------------------------
def move_lower_right
super
end
#--------------------------------------------------------------------------
# * Move Upper Left
#--------------------------------------------------------------------------
def move_upper_left
super
end
#--------------------------------------------------------------------------
# * Move Upper Right
#--------------------------------------------------------------------------
def move_upper_right
super
end
end

class Game_Follower < Game_Character
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :actor
attr_accessor :move_speed
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(actor)
super()
@through = true
@actor = actor
end
#--------------------------------------------------------------------------
# * Set Actor
#--------------------------------------------------------------------------
def actor=(actor)
@actor = actor
setup
end
#--------------------------------------------------------------------------
# * Setup
#--------------------------------------------------------------------------
def setup
if @actor != nil
@character_name = $game_actors[@actor].character_name
@character_index = $game_actors[@actor].character_index
else
@character_name = ""
@character_index = 0
end
@opacity = 255
@blend_type = 0
@priority_type = 1
end

#--------------------------------------------------------------------------
# * Screen Z
#--------------------------------------------------------------------------
def screen_z
if $game_player.x == @x and $game_player.y == @y
return $game_player.screen_z - 1
end
super
end
#--------------------------------------------------------------------------
# * Same Position Starting Determinant (Disabled)
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers)
result = false
return result
end
#--------------------------------------------------------------------------
# * Front Envent Starting Determinant (Disabled)
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
result = false
return result
end
#--------------------------------------------------------------------------
# * Touch Event Starting Determinant (Disabled)
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
result = false
return result
end
end

class Spriteset_Map
alias_method :spriteset_map_create_characters, :create_characters
def create_characters
spriteset_map_create_characters
$game_party.followers.each do |char|
@character_sprites << Sprite_Character.new(@viewport1, char)
end
end
end

class Game_Party
#--------------------------------------------------------------------------
# * Constants
#--------------------------------------------------------------------------
MAX_SIZE = 8
CATERPILLAR = 33
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :followers
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_party_initialize, :initialize
def initialize
trick_caterpillar_party_initialize
@followers = Array.new(MAX_SIZE - 1) {Game_Follower.new(nil)}
@move_list = []
end
#--------------------------------------------------------------------------
# * Update Followers
#--------------------------------------------------------------------------
def update_followers
flag = $game_player.transparent || $game_switches[CATERPILLAR]
@followers.each_with_index do |char, i|
char.actor = @actors[i + 1]
char.move_speed = $game_player.move_speed
if $game_player.dash?
char.move_speed += 1
end
char.update
char.transparent = flag
end
end
#--------------------------------------------------------------------------
# * Move To Party
#--------------------------------------------------------------------------
def moveto_party(x, y)
@followers.each {|char| char.moveto(x, y)}
@move_list.clear
end
#--------------------------------------------------------------------------
# * Move Party
#--------------------------------------------------------------------------
def move_party
@move_list.each_index do |i|
if @followers[i] == nil
@move_list[i...@move_list.size] = nil
next
end
case @move_list[i].type
when 2
@followers[i].move_down(*@move_list[i].args)
when 4
@followers[i].move_left(*@move_list[i].args)
when 6
@followers[i].move_right(*@move_list[i].args)
when 8
@followers[i].move_up(*@move_list[i].args)
when 1
@followers[i].move_lower_left
when 3
@followers[i].move_lower_right
when 7
@followers[i].move_upper_left
when 9
@followers[i].move_upper_right
when 5
@followers[i].jump(*@move_list[i].args)
end
end
end
#--------------------------------------------------------------------------
# * Add Move List
#--------------------------------------------------------------------------
def update_move(type, *args)
move_party
@move_list.unshift(Game_MoveListElement.new(type, args))
end
end

class Game_MoveListElement
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(type, args)
@type = type
@args = args
end
#--------------------------------------------------------------------------
# * Type
#--------------------------------------------------------------------------
def type
return @type
end
#--------------------------------------------------------------------------
# * Args
#--------------------------------------------------------------------------
def args
return @args
end
end

class Game_Player
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :move_speed

#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_update, :update
def update
$game_party.update_followers
trick_caterpillar_player_update
end
#--------------------------------------------------------------------------
# * Moveto
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_moveto, :moveto
def moveto(x, y)
$game_party.moveto_party(x, y)
trick_caterpillar_player_moveto(x, y)
end
#--------------------------------------------------------------------------
# * Move Down
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_move_down, :move_down
def move_down(turn_enabled = true)
if passable?(@x, @y+1)
$game_party.update_move(2, turn_enabled)
end
trick_caterpillar_player_move_down(turn_enabled)
end
#--------------------------------------------------------------------------
# * Move Left
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_move_left, :move_left
def move_left(turn_enabled = true)
if passable?(@x-1, @y)
$game_party.update_move(4, turn_enabled)
end
trick_caterpillar_player_move_left(turn_enabled)
end
#--------------------------------------------------------------------------
# * Move Right
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_move_right, :move_right
def move_right(turn_enabled = true)
if passable?(@x+1, @y)
$game_party.update_move(6, turn_enabled)
end
trick_caterpillar_player_move_right(turn_enabled)
end
#--------------------------------------------------------------------------
# * Move Up
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_move_up, :move_up
def move_up(turn_enabled = true)
if passable?(@x, @y-1)
$game_party.update_move(8, turn_enabled)
end
trick_caterpillar_player_move_up(turn_enabled)
end
#--------------------------------------------------------------------------
# * Move Lower Left
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_move_lower_left, :move_lower_left
def move_lower_left
if passable?(@x - 1, @y) and passable?(@x, @y + 1)
$game_party.update_move(1)
end
trick_caterpillar_player_move_lower_left
end
#--------------------------------------------------------------------------
# * Move Lower Right
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_move_lower_right, :move_lower_right
def move_lower_right
if passable?(@x + 1, @y) and passable?(@x, @y + 1)
$game_party.update_move(3)
end
trick_caterpillar_player_move_lower_right
end
#--------------------------------------------------------------------------
# * Move Upper Left
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_move_upper_left, :move_upper_left
def move_upper_left
if passable?(@x - 1, @y) and passable?(@x, @y - 1)
$game_party.update_move(7)
end
trick_caterpillar_player_move_upper_left
end
#--------------------------------------------------------------------------
# * Move Upper Right
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_move_upper_right, :move_upper_right
def move_upper_right
if passable?(@x + 1, @y) and passable?(@x, @y - 1)
$game_party.update_move(9)
end
trick_caterpillar_player_move_upper_right
end
#--------------------------------------------------------------------------
# * Jump
#--------------------------------------------------------------------------
alias_method :trick_caterpillar_player_jump, :jump
def jump(x_plus, y_plus)
new_x = @x + x_plus
new_y = @y + y_plus
if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y)
$game_party.update_move(5, x_plus, y_plus)
end
trick_caterpillar_player_jump(x_plus, y_plus)
end
end###########
###########
###########
avatar
Tink
Membre

Nombre de messages : 407
Age : 27
Localisation : Finistère (Bretagne)
Distinction : aucune
Date d'inscription : 12/08/2008
http://network-rpg-maker.site.voila.fr

Re: Incompatibilité entre script de chenille et script d'équipes

le Mer 15 Juil 2009 - 16:41
[Suite ici parce que j'avais pas la place de caler les scripts en 1 post :s]

Donc, ce scriptl fonctionne très bien d'ordinaire, mais dernièrement j'ai ajouté un script pour gérer des équipes de persos séparés (avec chacune leur inventaire, entre autres possibilités) :
Spoiler:
###################################
=begin MODE D'EMPLOI
Pour changer d'equipe, il faut utiliser l'insertion de script :

change_equipe(code)

Le code de chaque equipe sera defini ci-dessous

Pour reunir deux equipes, il faut utiliser l'insertion de script :

reunir_equipe(new, old1, old2)

new, old1, old2 sont des codes d'equipes
new designe l'equipe que vous controlerez apres la réunion.
( Ca peut etre une nouvelle equipe ou l'une des deux equipes réuni )
old1 et old2 sont les codes des equipes que vous souhaitez réunir.

Exemple :

reunir_equipe(4, 0, 2)

L'equipe 4 recevra les membres, l'inventaire et l'argent des equipes 0 et 2.

reunir_equipe(4, 4, 2)

L'equipe 4 recevra les membres, l'inventaire et l'argent de l'equipe 2.
=end
###################################
module Multi_equipe
# Indiquer ici le nombre maximum d'equipe que vous allez créer :
# ( Utilisé pour initialiser les valeurs )
Max = 2

Info = {}
# Configurer ici l'etat inital des equipes :
# Au minimum, un membre par equipe, le reste est facultatif !!
# Configuration pour equipe Code 0
Info[0] =
{
"equipe" => [1,5],
"or" => 100,
"obj" => [],
"arme" => [],
"armure" => []
}

# Configuration pour equipe Code 1
Info[1] =
{
"equipe" => [4,9,10,11],
"or" => 0,
"obj" => [[1, 2],[2,1]],
"arme" => [],
"armure" => []
}

# Indiquer ici le code de l'equipe que l'on controle des le debut
Depart = 0
end

###################################
class Game_Party < Game_Unit
def initialize
super
@equipe = Multi_equipe::Depart
@gold = {}
@steps = {}
@last_item_id = 0
@last_actor_index = 0
@last_target_index = 0
@actors = {}
@items = {}
@weapons = {}
@armors = {}
for x in 0...Multi_equipe::Max
ref = Multi_equipe::Info[x]
@gold[x] = ref["or"]
@steps[x] = 0
@actors[x] = ref["equipe"]
@items[x] = {}
for bloc in ref["obj"]
@items[x][bloc[0]] = bloc[1]
end
@weapons[x] = {}
for bloc in ref["arme"]
@weapons[x][bloc[0]] = bloc[1]
end
@armors[x] = {}
for bloc in ref["armure"]
@armors[x][bloc[0]] = bloc[1]
end
end
end

def get_equipe
return @equipe
end

def set_equipe(num)
@equipe = [[num, 0].max, Multi_equipe::Max].min
end

def gold
return @gold[get_equipe]
end

def steps
return @steps[get_equipe]
end

def reunir_equipe(new, old1, old2)
set_equipe(new)
for code in [old1, old2]
next if code == new
gain_gold(@gold[code])
@gold[code] = 0
for id in @actors[code]
add_actor(id)
end
@actors[code].clear
for i in @items[code].keys.sort
item = $data_items[i]
n = @items[code][i]
gain_item(item, n)
@items[code][i] = 0
end
for i in @weapons[code].keys.sort
item = $data_weapons[i]
n = @weapons[code][i]
gain_item(item, n)
@weapons[code][i] = 0
end
for i in @armors[code].keys.sort
item = $data_armors[i]
n = @armors[code][i]
gain_item(item, n)
@armors[code][i] = 0
end
end
end

def members
result = []
for i in @actors[get_equipe]
result.push($game_actors[i])
end
return result
end

def items
result = []
for i in @items[get_equipe].keys.sort
result.push($data_items[i]) if @items[get_equipe][i] > 0
end
for i in @weapons[get_equipe].keys.sort
result.push($data_weapons[i]) if @weapons[get_equipe][i] > 0
end
for i in @armors[get_equipe].keys.sort
result.push($data_armors[i]) if @armors[get_equipe][i] > 0
end
return result
end

def setup_starting_members
for i in $data_system.party_members
@actors[Multi_equipe::Depart].push(i)
end
end

def name
if @actors[get_equipe].size == 0
return ''
elsif @actors[get_equipe].size == 1
return members[0].name
else
return sprintf(Vocab::PartyName, members[0].name)
end
end

def max_level
level = 0
for i in @actors[get_equipe]
actor = $game_actors[i]
level = actor.level if level < actor.level
end
return level
end

def add_actor(actor_id)
if @actors[get_equipe].size < MAX_MEMBERS and not @actors[get_equipe].include?(actor_id)
@actors[get_equipe].push(actor_id)
$game_player.refresh
end
end

def remove_actor(actor_id)
@actors[get_equipe].delete(actor_id)
$game_player.refresh
end

def gain_gold(n)
@gold[get_equipe] = [[@gold[get_equipe] + n, 0].max, 9999999].min
end

def increase_steps
@steps[get_equipe] += 1
end

def item_number(item)
case item
when RPG::Item
number = @items[get_equipe][item.id]
when RPG::Weapon
number = @weapons[get_equipe][item.id]
when RPG::Armor
number = @armors[get_equipe][item.id]
end
return number == nil ? 0 : number
end

def gain_item(item, n, include_equip = false)
number = item_number(item)
case item
when RPG::Item
@items[get_equipe][item.id] = [[number + n, 0].max, 99].min
when RPG::Weapon
@weapons[get_equipe][item.id] = [[number + n, 0].max, 99].min
when RPG::Armor
@armors[get_equipe][item.id] = [[number + n, 0].max, 99].min
end
n += number
if include_equip and n < 0
for actor in members
while n < 0 and actor.equips.include?(item)
actor.discard_equip(item)
n += 1
end
end
end
end

def all_dead?
if @actors[get_equipe].size == 0 and not $game_temp.in_battle
return false
end
return existing_members.empty?
end
end
###################################
class Game_Interpreter
def change_equipe(num)
$game_party.set_equipe(num)
$game_player.refresh
end
def reunir_equipe(new, old1, old2)
$game_party.reunir_equipe(new, old1, old2)
$game_player.refresh
end
end
###################################

Et voilà que le script de chenille fait planter le jeu avec le message d'erreur suivant :

????? 'script_Chenille' ? 180 ??? NoMethodError ????????

undefined method 'each' for nil:NilClass

La ligne 180 est dans la partie "Move To Party"

Sans le script de groupes ça fonctionne, mais j'ai du mal à voir ce qui fait planter la chenille dans le 2e script :/
D'avance, merci pour l'aide et le temps que vous voudrez bien apporter au problème ! Smile
avatar
Wax
Staffeux retraité

Nombre de messages : 646
Age : 25
Localisation : Dans tes rêves ma belle...
Distinction : Pandanomalie du cerveau

Waxxoutoudoupoutchet
Panda armé d'une banane, warning!
[Coco' Smile]
Date d'inscription : 20/03/2008
http://dream-soft.c.la

Re: Incompatibilité entre script de chenille et script d'équipes

le Mer 15 Juil 2009 - 16:59
Vu que tu as deux parties le script de chenille ne peux marcher.

->1-il va continué à agir sur les deux groupe a la fois (ou marquer le symbole erreur)

pour corriger il faudrait ajouter les ligne de script qui différencie les deux party dans la parties move to party et les alterner avec le scripts déjà présent.Genre...Si 1 bouger l'ID 1-2-3-4 en chenille Si 2 bouger 5-6-7-8 en chenille.

Pour le codage je ne peu pas vraiment le faire puisque j'ai mal a la tête présentement mais je peu mis mettre plus tard.
avatar
Tink
Membre

Nombre de messages : 407
Age : 27
Localisation : Finistère (Bretagne)
Distinction : aucune
Date d'inscription : 12/08/2008
http://network-rpg-maker.site.voila.fr

Re: Incompatibilité entre script de chenille et script d'équipes

le Lun 20 Juil 2009 - 20:08
En fait le script d'équipe ne permet pas de jouer les différentes équipes simultanément. On joue soit l'une, soit l'autre. C'est juste qu'on peut leur allouer des inventaires, budgets et armements différents pour éviter que ce que les personnages de la 1ere ont trouvé soit aussi dans l'inventaire de la deuxième...

[edit : petite précision, le script fais planter le jeu quand on clique sur nouvelle partie, pas dès le début.]
[Reedit : petit remontage de sujet. J'ai toujours pas trouvé la solution à mon problème... personne qui en sache plus là dessus ? :s]
Contenu sponsorisé

Re: Incompatibilité entre script de chenille et script d'équipes

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