Correction des collisions pour surf

2 Réponses • 683 Vues

Ceci est un bug commun a tous les SK dérivés de PSP.
Lorsqu'on essaye de rentrer ou sortir de l'eau, les évents et sens de passage de la case ne sont pas pris en compte.
Par exemple, si un PNJ est au bord de l'eau, on peut lui accoster dessus, et on peut également faire surf depuis le sommet d'une montagne...


Voici de quoi corriger ce bug :

Dans le script "Interpreter", cherchez ces lignes :

def player_front_passable?
  coord = $game_player.front_tile
  return $game_map.passable?(coord[0],coord[1], 10 - $game_player.direction)
  end

Et remplacez les par ça :

def player_front_passable?
  coord = $game_player.front_tile
  if $game_map.passable?(coord[0],coord[1], 10 - $game_player.direction) and $game_map.passable?($game_player.x,$game_player.y, $game_player.direction)
  for event in $game_map.events.values
  if event.x == coord[0] and event.y == coord[1]
  unless event.through
  if event.character_name != ""
  return false
  end
  end
  end
  end
  return true
  else
  return false
  end
  end

ensuite, dans l'évent commun de surf, cherchez ces conditions scriptées (la 1ere est présente 2 fois dans l'évent)
$pokemon_party.got_skill("SURF") and $game_player.terrain_tag != 7 and player_front_terrain_tag == 7
$game_player.terrain_tag == 7 and player_front_terrain_tag != 7

et ajoutez ceci au bout de chacune d'entre elles :
and player_front_passable?

Script Patch PSP

Un bien beau bug parfaitement corrigé ;)
Petite rectifications de dernière minute, je me suis appercu que dans certains cas particuliers, le message "Vous ne pouvez pas surfer ici." ne s'affichait pas.

Pour l'afficher aussi dans ces conditions (tentative de surf depuis une falaise, par ex), remplacez dans l'évent commun :
$game_player.terrain_tag != 7 and player_front_terrain_tag != 7
par
$game_player.terrain_tag != 7 and player_front_terrain_tag != 7 or not player_front_passable? and $game_player.terrain_tag != 7


et
$game_player.terrain_tag == 7 and player_front_terrain_tag == 7
par
$game_player.terrain_tag == 7 and player_front_terrain_tag == 7 or $game_player.terrain_tag == 7 and not player_front_passable?



Donc, au final, non, c’était pas parfait :ahdek:

There was an error while thanking
Thanking...