Après les différents problèmes rencontrés par certains, j'ai eu l'idée de refaire ce topic avec plus d'explications pour que vous compreniez bien, et si un problème subsiste toujours, je suis la
Donc tout d'abord, la démo, toujours basée sur les mêmes maps que toutes les démos que je fait :p (merci encore pour le chateau et la foret dinonico
)
J'ai upper sur Megaupload, si il le faut je suis pret a réupper sur un ou deux autres hebergeurs
J'ai aussi ajouté (RM-Land), histoire que les hotlinker aille voir un peu plus loin si il ne veulent pas que je les engueule :p
Voila le script à présent que vous collerez comme toujours au dessus de main :
- Spoiler:
- Code:
-
#==========================================================================
# Veiw Range Script
#--------------------------------------------------------------------------
# By: Near Fantastica
# Date: 25/11/04
#==========================================================================
class View_Range
#--------------------------------------------------------------------------
# ● Range system works by sereching the area of a circle for the Player's xy
# The Veiw is set in each event and is the radius of the circle
# The Eaquation used is (Px-EX)^2 + (Py-Ey)^2 = radius^2
# If the Radius is less than or equal to the View the Player is inside the circle
#--------------------------------------------------------------------------
attr_accessor :event_num
attr_accessor :view_range
#--------------------------------------------------------------------------
# ● Initialization
#--------------------------------------------------------------------------
def initialize(event_num,veiw_range,els)
@event_num = event_num
@event_locial_switch = els
@view_range = veiw_range
@playerx = $game_player.x
@playery = $game_player.y
@eventx = $game_map.events[@event_num].x
@eventy = $game_map.events[@event_num].y
@event_direction = $game_map.events[@event_num].direction
end
#--------------------------------------------------------------------------
# ● Event Veiw
#--------------------------------------------------------------------------
def event_view
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
$game_self_switches = {[$game_map.map_id, @event_num, @event_locial_switch] => true}
$game_map.need_refresh = true
end
end
#--------------------------------------------------------------------------
# ● Enemies veiw
#--------------------------------------------------------------------------
def enemies_view
if @event_direction == 2
if @playery >= @eventy
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
$game_self_switches = {[$game_map.map_id, @event_num, @event_locial_switch] => true}
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 4
if @playerx <= @eventx
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
$game_self_switches = {[$game_map.map_id, @event_num, @event_locial_switch] => true}
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 6
if @playerx >= @eventx
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
$game_self_switches = {[$game_map.map_id, @event_num, @event_locial_switch] => true}
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
if @event_direction == 8
if @playery <= @eventy
@playerx-=@eventx
@playerx*=@playerx
@playery-=@eventy
@playery*=@playery
@playerx+=@playery
@view_range*=@view_range
if @playerx <= @view_range
$game_self_switches = {[$game_map.map_id, @event_num, @event_locial_switch] => true}
$game_system.timer = 420
$game_system.timer_working = true
$game_map.need_refresh = true
end
end
end
end
#--------------------------------------------------------------------------
# ● check = View_Range.new(EventID, Veiw Range, Local Switch)
# check.enemies_straight_view
#--------------------------------------------------------------------------
def enemies_straight_view
# checks the x direction
if @playerx == @eventx
$game_self_switches = {[$game_map.map_id, @event_num, @event_locial_switch] => true}
$game_map.need_refresh = true
end
# checks the y direction
if @playery == @eventy
$game_self_switches = {[$game_map.map_id, @event_num, @event_locial_switch] => true}
$game_map.need_refresh = true
end
end
end
A présent je vais allez étape par étape pour que vous compreniez parfaitement, et si un autre membre ne comprend pas, ce n'est pas la peine de gueuler en disant que c'est très clair, nous n'avons pas tous la même approche par rapport a certain point.
1) Tout d'abord ce script, vous le collez au dessus de main et vous l'appelez comme vous voulez (View Range serait le plus pratique pour s'y retrouver ensuite ^^)
2) Vous choisissez l'emplacement de votre event sur la map
3) Vous ouvrez votre event, et vous ajoutez une commande : "Insérer un script", il se trouve sur le troisième onglet.
Un cadre s'ouvre, copiez y à l'intérieur ce morceau de code
- Code:
-
check = View_Range.new(X,Y,"loc")
check.event_view
X correspond au numéro d'ID de votre event, vous ne devez prendre que le nombre entier (regardez sur le shoot), par ex, si c'est l'event EV073, X vaudra 73, etc...
Y correspond à la taille du champ de vision, c'est à dire le nombre de cases autour de l'event qui déclenchera des actions quelconques
loc correspond à l'interrupteur locale utilisé pour faire fonctionner les actions quelconques, il ne peut etre égale qu'a A, B, C ou D. Attention ! On doit bien laisser les guillemets !
Un bon exemple : (43,4,"B") ==> il s'agit de l'event EV043, d'un rayon de 4 cases et de l'interrupteur locale B
4) Sur ce MEME event, créer une deuxième page grace au bouton "Nouvelle page"
5) Grace au menu de gauche, vous pouvez mettre directement la condition "Si l'interrupteur locale A/B/C/D est activé" (choisissez logiquement celui que vous avez installé au préalable
6) Ensuite vous avez juste à mettre une série de commandes dans la cadre principale de la page 2 de cet event
Pour ma part, dans la démo j'ai mis deux messages, une animation et la fin du jeu automatique, mais vous pouvez mettre ce que vous voulez ! Démarrer un combat (genre pokémon), mettre en route une cinématique, etc...
A vous d'etre imaginatif ^^
INFOS SUPPLEMENTAIRES :
Ce dont je vais parler la ne sera peut-etre pas compris par tous, mais ce n'est aps un réel problème, c'est juste que je veux signaler certain point concernant ce script.
Autant je considère NF comme un dieu, autant ce script n'est aps parfait et d'ailleurs il l'avoue sur un forum, il parle d'update également mais elles ne sont jamais arrivées...
Tout d'abord un point important, il utilise les interrupteurs locaux par souci de simplicité dans le code, mais il y a plusieurs inconvénients... Tout d'abord, ca peut générer des bugs (infos du net donc moyennement sur mais le plus souvent les gens ne se plaignent que rarement pour le fun XD), ensuite imaginez vous a vouloir créer 10 garde sur votre map qui protège un fort, il n'y a que 4 interrupteur locaux différents ! A, B, C et D !
Mais RMXP, arrive à gérer une mutiplicité d'event avec un même interrupteur. Mainteannt imaginer que vos gardes bougent aléatoirement, histoire de faire plus naturel, les deux champs de 2 gardes se coupent parfois, et si vous passez sur la case reliant les deux champs, boum, conflit, RMXP va surchauffer et vous pondre un belle erreur XD bah oui comment voulez vous qu'il execute deux actions différentes prononcées par 2 events différents, c'est trop pour lui, il va craquer complet XD Il suffisait d'utiliser les interrupteurs normaux et la il y en avait suffisament pour enpas générer de bugs ^^ Mais bon, NF devait penser a autre chose à ce moment la ^^
Mon avis sur ce script : Il est loin d'etre parfait, et je préfèrerait largement utiliser une solution de facilité en case par case avec plusieurs events, qui a booster le truc avec une zone délimité de la même manière grace à un graphique. Par contre, il est conseillé pour les débutants en events ou ceux ayant des difficultés
Les screenshoot arriveront bientot, j'ai des petits problèmes avec l'ordi