- pingouinmutantMembre
- Nombre de messages : 204
Age : 25
Localisation : En Bordeciel
Distinction : aucune
Date d'inscription : 27/06/2012
Script pour désactiver la course par interrupteur
Mer 4 Juin 2014 - 15:22
Bonjour,
Je cherchait un script pour désactiver la course par event car je n'ai pas trouvé de commande dans les commandes d'event ( y en a ptete mais je suis pas au courant).
J'essaye d'apprendre le rgss3 et du coup j'ai ajouté quelques lignes (n'allez pas croire que j'ai fait 200 lignes, juste 4-5 environ) au script Game_Player qu'on a de base (chose facile pour les scripteurs mais pas pour moi):
Euh, ba donc voila, y avait ptete un script du style qu'existait, je sais pas et bien sûr, étant un débutant en script, je ne l'ai pas optimisé niveau ligne et tout et tout.
EDIT: J'ai oublié de préciser qu'il faut remplacer Game_Player par ce script là.
Je cherchait un script pour désactiver la course par event car je n'ai pas trouvé de commande dans les commandes d'event ( y en a ptete mais je suis pas au courant).
J'essaye d'apprendre le rgss3 et du coup j'ai ajouté quelques lignes (n'allez pas croire que j'ai fait 200 lignes, juste 4-5 environ) au script Game_Player qu'on a de base (chose facile pour les scripteurs mais pas pour moi):
- Code:
module Pingouin_M
DISABLE_SWITCH = 101 # Active cet interrupteur pour bloquer la course.
#Crédit pas obligatoire
#------------------------------------------------------------------------------#
# END SETUP OPTIONS
#------------------------------------------------------------------------------#
end
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# This class handles the player. It includes event starting determinants and
# map scrolling functions. The instance of this class is referenced by
# $game_player.
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :followers # Followers (party members)
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super
@vehicle_type = :walk # Type of vehicle currently being ridden
@vehicle_getting_on = false # Boarding vehicle flag
@vehicle_getting_off = false # Getting off vehicle flag
@followers = Game_Followers.new(self)
@transparent = $data_system.opt_transparent
clear_transfer_info
end
#--------------------------------------------------------------------------
# * Clear Transfer Player Information
#--------------------------------------------------------------------------
def clear_transfer_info
@transferring = false # Player transfer flag
@new_map_id = 0 # Destination map ID
@new_x = 0 # Destination X coordinate
@new_y = 0 # Destination Y coordinate
@new_direction = 0 # Post-movement direction
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
@character_name = actor ? actor.character_name : ""
@character_index = actor ? actor.character_index : 0
@followers.refresh
end
#--------------------------------------------------------------------------
# * Get Corresponding Actor
#--------------------------------------------------------------------------
def actor
$game_party.battle_members[0]
end
#--------------------------------------------------------------------------
# * Determine if Stopping
#--------------------------------------------------------------------------
def stopping?
return false if @vehicle_getting_on || @vehicle_getting_off
return super
end
#--------------------------------------------------------------------------
# * Player Transfer Reservation
# d: Post move direction (2,4,6,8 )
#--------------------------------------------------------------------------
def reserve_transfer(map_id, x, y, d = 2)
@transferring = true
@new_map_id = map_id
@new_x = x
@new_y = y
@new_direction = d
end
#--------------------------------------------------------------------------
# * Determine if Player Transfer is Reserved
#--------------------------------------------------------------------------
def transfer?
@transferring
end
#--------------------------------------------------------------------------
# * Execute Player Transfer
#--------------------------------------------------------------------------
def perform_transfer
if transfer?
set_direction(@new_direction)
if @new_map_id != $game_map.map_id
$game_map.setup(@new_map_id)
$game_map.autoplay
end
moveto(@new_x, @new_y)
clear_transfer_info
end
end
#--------------------------------------------------------------------------
# * Determine if Map is Passable
# d: Direction (2,4,6,8 )
#--------------------------------------------------------------------------
def map_passable?(x, y, d)
case @vehicle_type
when :boat
$game_map.boat_passable?(x, y)
when :ship
$game_map.ship_passable?(x, y)
when :airship
true
else
super
end
end
#--------------------------------------------------------------------------
# * Get Vehicle Currently Being Ridden
#--------------------------------------------------------------------------
def vehicle
$game_map.vehicle(@vehicle_type)
end
#--------------------------------------------------------------------------
# * Determine if on Boat
#--------------------------------------------------------------------------
def in_boat?
@vehicle_type == :boat
end
#--------------------------------------------------------------------------
# * Determine if on Ship
#--------------------------------------------------------------------------
def in_ship?
@vehicle_type == :ship
end
#--------------------------------------------------------------------------
# * Determine if Riding in Airship
#--------------------------------------------------------------------------
def in_airship?
@vehicle_type == :airship
end
#--------------------------------------------------------------------------
# * Determine if Walking Normally
#--------------------------------------------------------------------------
def normal_walk?
@vehicle_type == :walk && !@move_route_forcing
end
#--------------------------------------------------------------------------
# * Determine if Dashing
#--------------------------------------------------------------------------
def dash?
return false if $game_switches[Pingouin_M::DISABLE_SWITCH]
return false if @move_route_forcing
return false if $game_map.disable_dash?
return false if vehicle
return Input.press?(:A)
end
#--------------------------------------------------------------------------
# * Determine if Debug Pass-through State
#--------------------------------------------------------------------------
def debug_through?
$TEST && Input.press?(:CTRL)
end
#--------------------------------------------------------------------------
# * Detect Collision (Including Followers)
#--------------------------------------------------------------------------
def collide?(x, y)
!@through && (pos?(x, y) || followers.collide?(x, y))
end
#--------------------------------------------------------------------------
# * X Coordinate of Screen Center
#--------------------------------------------------------------------------
def center_x
(Graphics.width / 32 - 1) / 2.0
end
#--------------------------------------------------------------------------
# * Y Coordinate of Screen Center
#--------------------------------------------------------------------------
def center_y
(Graphics.height / 32 - 1) / 2.0
end
#--------------------------------------------------------------------------
# * Set Map Display Position to Center of Screen
#--------------------------------------------------------------------------
def center(x, y)
$game_map.set_display_pos(x - center_x, y - center_y)
end
#--------------------------------------------------------------------------
# * Move to Designated Position
#--------------------------------------------------------------------------
def moveto(x, y)
super
center(x, y)
make_encounter_count
vehicle.refresh if vehicle
@followers.synchronize(x, y, direction)
end
#--------------------------------------------------------------------------
# * Increase Steps
#--------------------------------------------------------------------------
def increase_steps
super
$game_party.increase_steps if normal_walk?
end
#--------------------------------------------------------------------------
# * Create Encounter Count
#--------------------------------------------------------------------------
def make_encounter_count
n = $game_map.encounter_step
@encounter_count = rand(n) + rand(n) + 1
end
#--------------------------------------------------------------------------
# * Create Group ID for Troop Encountered
#--------------------------------------------------------------------------
def make_encounter_troop_id
encounter_list = []
weight_sum = 0
$game_map.encounter_list.each do |encounter|
next unless encounter_ok?(encounter)
encounter_list.push(encounter)
weight_sum += encounter.weight
end
if weight_sum > 0
value = rand(weight_sum)
encounter_list.each do |encounter|
value -= encounter.weight
return encounter.troop_id if value < 0
end
end
return 0
end
#--------------------------------------------------------------------------
# * Determine Usability of Encounter Item
#--------------------------------------------------------------------------
def encounter_ok?(encounter)
return true if encounter.region_set.empty?
return true if encounter.region_set.include?(region_id)
return false
end
#--------------------------------------------------------------------------
# * Execute Encounter Processing
#--------------------------------------------------------------------------
def encounter
return false if $game_map.interpreter.running?
return false if $game_system.encounter_disabled
return false if @encounter_count > 0
make_encounter_count
troop_id = make_encounter_troop_id
return false unless $data_troops[troop_id]
BattleManager.setup(troop_id)
BattleManager.on_encounter
return true
end
#--------------------------------------------------------------------------
# * Trigger Map Event
# triggers : Trigger array
# normal : Is priority set to [Same as Characters] ?
#--------------------------------------------------------------------------
def start_map_event(x, y, triggers, normal)
return if $game_map.interpreter.running?
$game_map.events_xy(x, y).each do |event|
if event.trigger_in?(triggers) && event.normal_priority? == normal
event.start
end
end
end
#--------------------------------------------------------------------------
# * Determine if Same Position Event is Triggered
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers)
start_map_event(@x, @y, triggers, false)
end
#--------------------------------------------------------------------------
# * Determine if Front Event is Triggered
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
x2 = $game_map.round_x_with_direction(@x, @direction)
y2 = $game_map.round_y_with_direction(@y, @direction)
start_map_event(x2, y2, triggers, true)
return if $game_map.any_event_starting?
return unless $game_map.counter?(x2, y2)
x3 = $game_map.round_x_with_direction(x2, @direction)
y3 = $game_map.round_y_with_direction(y2, @direction)
start_map_event(x3, y3, triggers, true)
end
#--------------------------------------------------------------------------
# * Determine if Touch Event is Triggered
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
start_map_event(x, y, [1,2], true)
end
#--------------------------------------------------------------------------
# * Processing of Movement via Input from Directional Buttons
#--------------------------------------------------------------------------
def move_by_input
return if !movable? || $game_map.interpreter.running?
move_straight(Input.dir4) if Input.dir4 > 0
end
#--------------------------------------------------------------------------
# * Determine if Movement is Possible
#--------------------------------------------------------------------------
def movable?
return false if moving?
return false if @move_route_forcing || @followers.gathering?
return false if @vehicle_getting_on || @vehicle_getting_off
return false if $game_message.busy? || $game_message.visible
return false if vehicle && !vehicle.movable?
return true
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
last_real_x = @real_x
last_real_y = @real_y
last_moving = moving?
move_by_input
super
update_scroll(last_real_x, last_real_y)
update_vehicle
update_nonmoving(last_moving) unless moving?
@followers.update
end
#--------------------------------------------------------------------------
# * Scroll Processing
#--------------------------------------------------------------------------
def update_scroll(last_real_x, last_real_y)
ax1 = $game_map.adjust_x(last_real_x)
ay1 = $game_map.adjust_y(last_real_y)
ax2 = $game_map.adjust_x(@real_x)
ay2 = $game_map.adjust_y(@real_y)
$game_map.scroll_down (ay2 - ay1) if ay2 > ay1 && ay2 > center_y
$game_map.scroll_left (ax1 - ax2) if ax2 < ax1 && ax2 < center_x
$game_map.scroll_right(ax2 - ax1) if ax2 > ax1 && ax2 > center_x
$game_map.scroll_up (ay1 - ay2) if ay2 < ay1 && ay2 < center_y
end
#--------------------------------------------------------------------------
# * Vehicle Processing
#--------------------------------------------------------------------------
def update_vehicle
return if @followers.gathering?
return unless vehicle
if @vehicle_getting_on
update_vehicle_get_on
elsif @vehicle_getting_off
update_vehicle_get_off
else
vehicle.sync_with_player
end
end
#--------------------------------------------------------------------------
# * Update Boarding onto Vehicle
#--------------------------------------------------------------------------
def update_vehicle_get_on
if !@followers.gathering? && !moving?
@direction = vehicle.direction
@move_speed = vehicle.speed
@vehicle_getting_on = false
@transparent = true
@through = true if in_airship?
vehicle.get_on
end
end
#--------------------------------------------------------------------------
# * Update Disembarking from Vehicle
#--------------------------------------------------------------------------
def update_vehicle_get_off
if !@followers.gathering? && vehicle.altitude == 0
@vehicle_getting_off = false
@vehicle_type = :walk
@transparent = false
end
end
#--------------------------------------------------------------------------
# * Processing When Not Moving
# last_moving : Was it moving previously?
#--------------------------------------------------------------------------
def update_nonmoving(last_moving)
return if $game_map.interpreter.running?
if last_moving
$game_party.on_player_walk
return if check_touch_event
end
if movable? && Input.trigger?(:C)
return if get_on_off_vehicle
return if check_action_event
end
update_encounter if last_moving
end
#--------------------------------------------------------------------------
# * Update Encounter
#--------------------------------------------------------------------------
def update_encounter
return if $TEST && Input.press?(:CTRL)
return if $game_party.encounter_none?
return if in_airship?
return if @move_route_forcing
@encounter_count -= encounter_progress_value
end
#--------------------------------------------------------------------------
# * Get Encounter Progress Value
#--------------------------------------------------------------------------
def encounter_progress_value
value = $game_map.bush?(@x, @y) ? 2 : 1
value *= 0.5 if $game_party.encounter_half?
value *= 0.5 if in_ship?
value
end
#--------------------------------------------------------------------------
# * Determine if Event Start Caused by Touch (Overlap)
#--------------------------------------------------------------------------
def check_touch_event
return false if in_airship?
check_event_trigger_here([1,2])
$game_map.setup_starting_event
end
#--------------------------------------------------------------------------
# * Determine if Event Start Caused by [OK] Button
#--------------------------------------------------------------------------
def check_action_event
return false if in_airship?
check_event_trigger_here([0])
return true if $game_map.setup_starting_event
check_event_trigger_there([0,1,2])
$game_map.setup_starting_event
end
#--------------------------------------------------------------------------
# * Getting On and Off Vehicles
#--------------------------------------------------------------------------
def get_on_off_vehicle
if vehicle
get_off_vehicle
else
get_on_vehicle
end
end
#--------------------------------------------------------------------------
# * Board Vehicle
# Assumes that the player is not currently in a vehicle.
#--------------------------------------------------------------------------
def get_on_vehicle
front_x = $game_map.round_x_with_direction(@x, @direction)
front_y = $game_map.round_y_with_direction(@y, @direction)
@vehicle_type = :boat if $game_map.boat.pos?(front_x, front_y)
@vehicle_type = :ship if $game_map.ship.pos?(front_x, front_y)
@vehicle_type = :airship if $game_map.airship.pos?(@x, @y)
if vehicle
@vehicle_getting_on = true
force_move_forward unless in_airship?
@followers.gather
end
@vehicle_getting_on
end
#--------------------------------------------------------------------------
# * Get Off Vehicle
# Assumes that the player is currently riding in a vehicle.
#--------------------------------------------------------------------------
def get_off_vehicle
if vehicle.land_ok?(@x, @y, @direction)
set_direction(2) if in_airship?
@followers.synchronize(@x, @y, @direction)
vehicle.get_off
unless in_airship?
force_move_forward
@transparent = false
end
@vehicle_getting_off = true
@move_speed = 4
@through = false
make_encounter_count
@followers.gather
end
@vehicle_getting_off
end
#--------------------------------------------------------------------------
# * Force One Step Forward
#--------------------------------------------------------------------------
def force_move_forward
@through = true
move_forward
@through = false
end
#--------------------------------------------------------------------------
# * Determine if Damage Floor
#--------------------------------------------------------------------------
def on_damage_floor?
$game_map.damage_floor?(@x, @y) && !in_airship?
end
#--------------------------------------------------------------------------
# * Move Straight
#--------------------------------------------------------------------------
def move_straight(d, turn_ok = true)
@followers.move if passable?(@x, @y, d)
super
end
#--------------------------------------------------------------------------
# * Move Diagonally
#--------------------------------------------------------------------------
def move_diagonal(horz, vert)
@followers.move if diagonal_passable?(@x, @y, horz, vert)
super
end
end
Euh, ba donc voila, y avait ptete un script du style qu'existait, je sais pas et bien sûr, étant un débutant en script, je ne l'ai pas optimisé niveau ligne et tout et tout.
EDIT: J'ai oublié de préciser qu'il faut remplacer Game_Player par ce script là.
- ZangtherMembre
- Nombre de messages : 913
Distinction : aucune
Date d'inscription : 06/02/2013
Re: Script pour désactiver la course par interrupteur
Mer 4 Juin 2014 - 16:04
Tu peux remplacer tout ton code par ça :
Pourquoi ? Déjà, tout ce qui est déjà présent dans les scripts de base tu n'as pas besoin de le recopier, si tu le recopie ça écrase les méthodes (def truc ... end). Cela peut changer certains comportements modifiés par d'autres scripts alors que tu n'as pas besoin d'y toucher. Ensuite, si la classe est déjà définie tu n'est pas obligé de spécifier le lien d'héritage (Game_Player < Game_Character devient donc Game_Player). Pour finir, les alias : ils permettent de reprendre "l'ancien" contenu d'une méthode pour pouvoir la réutiliser plus tard. Ce qui permet ici d'ajouter la nouvelle instruction, puis d'appeler le comportement défini précédemment, encore une fois à des fins de compatibilité entre script.
Voila =)
- Code:
class Game_Player
#--------------------------------------------------------------------------
# * Disable dash if Switch X is enabled
#--------------------------------------------------------------------------
alias old_dash? dash?
def dash?
# Change switch ID here
return false if $game_switches[1]
old_dash
end
end
Pourquoi ? Déjà, tout ce qui est déjà présent dans les scripts de base tu n'as pas besoin de le recopier, si tu le recopie ça écrase les méthodes (def truc ... end). Cela peut changer certains comportements modifiés par d'autres scripts alors que tu n'as pas besoin d'y toucher. Ensuite, si la classe est déjà définie tu n'est pas obligé de spécifier le lien d'héritage (Game_Player < Game_Character devient donc Game_Player). Pour finir, les alias : ils permettent de reprendre "l'ancien" contenu d'une méthode pour pouvoir la réutiliser plus tard. Ce qui permet ici d'ajouter la nouvelle instruction, puis d'appeler le comportement défini précédemment, encore une fois à des fins de compatibilité entre script.
Voila =)
- pingouinmutantMembre
- Nombre de messages : 204
Age : 25
Localisation : En Bordeciel
Distinction : aucune
Date d'inscription : 27/06/2012
Re: Script pour désactiver la course par interrupteur
Mer 4 Juin 2014 - 16:55
J'ai pas compris tout ce que tu as dit, mais tu as l'air de bien t'y connaitre, donc merci pour les ptits trucs que tu viens de m'apprendre.
J'ai oublié de préciser qu'il fallait remplacer le script Game_Player par celui-là, il n'est pas à ajouter en plus de l'ancien donc j'edit le sujet pour préciser.
Mais au total, tu te retrouves avec 2 scripts (à moins que tu l'ajoutes à Game_Player) et au final je n'ai ajouté que:
mais je ne sais pas vraiment à quoi sert le "module", j'ai juste vu sur un autre script qu'il y avait un truc du style là ou il mettait le choix de l'interrupteur.
Donc la partie de code que j'ai ajoutée est plutôt courte (je trouve)
J'ai oublié de préciser qu'il fallait remplacer le script Game_Player par celui-là, il n'est pas à ajouter en plus de l'ancien donc j'edit le sujet pour préciser.
Mais au total, tu te retrouves avec 2 scripts (à moins que tu l'ajoutes à Game_Player) et au final je n'ai ajouté que:
- Code:
module Pingouin_M
DISABLE_SWITCH = 101 # Active cet interrupteur pour bloquer la course.
#Crédit pas obligatoire
#------------------------------------------------------------------------------#
# END SETUP OPTIONS
#------------------------------------------------------------------------------#
end
- Code:
return false if $game_switches[Pingouin_M::DISABLE_SWITCH]
mais je ne sais pas vraiment à quoi sert le "module", j'ai juste vu sur un autre script qu'il y avait un truc du style là ou il mettait le choix de l'interrupteur.
Donc la partie de code que j'ai ajoutée est plutôt courte (je trouve)
- ZangtherMembre
- Nombre de messages : 913
Distinction : aucune
Date d'inscription : 06/02/2013
Re: Script pour désactiver la course par interrupteur
Mer 4 Juin 2014 - 17:43
Le module, dans la plupart des scripts RPG Maker, est utilisé pour externaliser certaines constantes à des fins de configuration. Par exemple si t'as un script de 1000 lignes et que t'as une valeur à modifier tu peux utiliser une constante dans un module que tu places au début du script pour permettre aux utilisateurs de la modifier facilement.
Par contre, il est fortement déconseillé de remplacer les scripts de base. Pourquoi ? Tout simplement car ça permet de retourner en arrière facilement. Quelqu'un ne veut plus de ton script ? Il le supprime et voila. Si tous les scripts devaient remplacer les scripts de base en mettre plusieurs dans un projet serait impossible pour un maker lambda.
Par contre, il est fortement déconseillé de remplacer les scripts de base. Pourquoi ? Tout simplement car ça permet de retourner en arrière facilement. Quelqu'un ne veut plus de ton script ? Il le supprime et voila. Si tous les scripts devaient remplacer les scripts de base en mettre plusieurs dans un projet serait impossible pour un maker lambda.
- vincent26Membre
- Nombre de messages : 766
Age : 29
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010
Re: Script pour désactiver la course par interrupteur
Mer 4 Juin 2014 - 18:01
De manière générale une bonne façon de scripter et de ne pas modifier les script de base (c'est ce que je faisait au début mais c'est le caca ^^)
L'utilisation de alias permet de modifier un script a partir d'un nouvelle emplacement de script
Ce que zangther veut dire c'est que à partir du moment ou tu met "class Game_Player" le logiciel comprend que ce qui suis va être ajouter a la class de base donc ce n'est pas utile de recopier la class en entière ^^
ensuite pour utiliser les alias c'est simple
en faite l'alias fonctionne ainsi :
alias nouveau_nom ancien_nom
tu met le nouveaux nom que tu veut donnée a la def suivit de son ancien nom
et ensuite seulement tu créer la nouvelle def modifier
c'est toujours bien de faire un retour a la def de base comme l'a fait zangther
Cela permet de faire des modif beaucoup plus courte
Pour ce qui est des modules il servent a stocker des Constant .Dans la plupart des gros script
on les met en tête de script et on peut ainsi les appeler a tout moment plus tard mais il ne sont utile que si tu souhaite pouvoir modifier plein de configuration. En autre ici avec une seul il n'ai pas vraiment utile
Le script de zangther et donc le plus court possible
En tout cas merci pour cette participation et je te soutient dans ton apprentissage du rgss
Voilou j’espère que ça a pu t'être utile.
L'utilisation de alias permet de modifier un script a partir d'un nouvelle emplacement de script
Ce que zangther veut dire c'est que à partir du moment ou tu met "class Game_Player" le logiciel comprend que ce qui suis va être ajouter a la class de base donc ce n'est pas utile de recopier la class en entière ^^
ensuite pour utiliser les alias c'est simple
en faite l'alias fonctionne ainsi :
alias nouveau_nom ancien_nom
tu met le nouveaux nom que tu veut donnée a la def suivit de son ancien nom
et ensuite seulement tu créer la nouvelle def modifier
c'est toujours bien de faire un retour a la def de base comme l'a fait zangther
Cela permet de faire des modif beaucoup plus courte
Pour ce qui est des modules il servent a stocker des Constant .Dans la plupart des gros script
on les met en tête de script et on peut ainsi les appeler a tout moment plus tard mais il ne sont utile que si tu souhaite pouvoir modifier plein de configuration. En autre ici avec une seul il n'ai pas vraiment utile
Le script de zangther et donc le plus court possible
En tout cas merci pour cette participation et je te soutient dans ton apprentissage du rgss
Voilou j’espère que ça a pu t'être utile.
- pingouinmutantMembre
- Nombre de messages : 204
Age : 25
Localisation : En Bordeciel
Distinction : aucune
Date d'inscription : 27/06/2012
Re: Script pour désactiver la course par interrupteur
Mer 4 Juin 2014 - 18:07
Merci pour ces infos, effectivement j'y avait pas pensé à si quelqu’un veut supprimer (mais vu que se script ne fait que de rajouter une option, ce n'est pas très utile de l'enlever), donc il peut créer un nouveau projet (qu'il jartera après) pour récupérer le script d'origine et le coller sur son projet (je reconnais que c'est pas pratique).
Vincent26: merci pour tes explications qui m'ont appris de nouveaux trucs
Vincent26: merci pour tes explications qui m'ont appris de nouveaux trucs
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum