Ihr wollt ein Event unsichtbar machen und es soll trotzdem da sein? Ganz einfach mit dem Stealth Script...
Was braucht ihr?
- Ein Item und ein Common Event...
Das Item ist sozusagen euer Infrarotsichtgerät, welches durch den Common Event befehl mit der Zeile
$infrared.toggle ein/aus geschaltet wird...
Man kann es natürlich auch durch ein Event auf der Map machen...
Außerdem braucht ihr noch das wichtigste:
Das Script...
#-------------------------------------------------------------------------------
#
# Infrared System
# code by HamsterHai aka. Sartekk
# Released 12.08.2010
# version 1.0
#
#-------------------------------------------------------------------------------
# Comment um ein Event als Stealth anzeigen zu lassen
STEALTH_COMMAND = "Stealth"
# Comment um einem Stealth Event einen gewissen Schimmer ala MGS zu geben
LIGHTSEER_COMMAND = "Lightseer"
# Sichtbarkeitsgrad bei Lighseer
LIGHTSEER_GRADE = 40
# Comment um mit einem gestealthten Event interagieren zu können
ST_INTERACT_COMMAND = "Interact"
# Condition ob bei Toggle Player auch rot werden soll
RED_PLAYER = true
#-------------------------------------------------------------------------------
class Infrarot
attr_accessor :toggled
def initialize
@toggled = false
end
def toggle
@old_tone = $game_map.screen.tone
case @toggled
when true;@toggled = false
$game_map.screen.start_tone_change(Tone.new(0,0,0,0),1)
if RED_PLAYER
$game_player.blend_type = 0
end
when false;@toggled = true
$game_map.screen.start_tone_change(Tone.new(255,70,70,20),1)
if RED_PLAYER
$game_player.blend_type = 1
end
end
end
end
class Scene_Title < Scene_Base
alias infrarot create_game_objects
def create_game_objects
infrarot
$infrared = Infrarot.new
end
end
class Game_Event < Game_Character
alias infrarot_init initialize
alias infrarot_refresh refresh
alias infrared_update update
attr_reader :id
attr_accessor :interact
attr_accessor :lightseer
attr_accessor :stealth
def initialize(map_id, event)
infratoggle
@lightseer = lightseer
@stealth = stealth
@interact = interact
infrarot_init(map_id, event)
end
def refresh
infrarot_refresh
@stealth = check_comment(STEALTH_COMMAND)
@lightseer = check_comment(LIGHTSEER_COMMAND)
@interact = check_comment(ST_INTERACT_COMMAND)
end
def update
infrared_update
infratoggle
end
def infratoggle
if @stealth
case $infrared.toggled
when false
if @lightseer
@opacity = LIGHTSEER_GRADE if not @opacity == LIGHTSEER_GRADE
else
@opacity = 0 if not @opacity == 0
end
@through = true
when true
@opacity = 255
@blend_type = 1 if not @blend_type== 1
@through = false
end
else
case $infrared.toggled
when true;@blend_type = 1 if not @blend_type== 1
when false;@blend_type = 0 if not @blend_type == 0
end
end
end
def check_comment(comment)
com = comment.downcase
return false if @list.nil? or @list.size <= 0
for item in @list
if item.code == 108 or item.code == 408
if item.parameters[0].include?(com)
return true
end
end
end
return false
end
alias infra_touch check_event_trigger_touch
def check_event_trigger_touch(x, y)
return if not @interact and not $infrared.toggled and @stealth
check_event_trigger_touch(x, y)
end
end
class Game_Player < Game_Character
attr_accessor :opacity
attr_accessor :blend_type
def check_event_trigger_here(triggers)
return false if $game_map.interpreter.running?
result = false
for event in $game_map.events_xy(@x, @y)
return if not event.interact and not $infrared.toggled and event.stealth
if triggers.include?(event.trigger) and event.priority_type != 1
event.start
result = true if event.starting
end
end
return result
end
#--------------------------------------------------------------------------
# * Determine if Front Event is Triggered
# triggers : Trigger array
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
return false if $game_map.interpreter.running?
result = false
front_x = $game_map.x_with_direction(@x, @direction)
front_y = $game_map.y_with_direction(@y, @direction)
for event in $game_map.events_xy(front_x, front_y)
return if not event.interact and not $infrared.toggled and event.stealth
if triggers.include?(event.trigger) and event.priority_type == 1
event.start
result = true
end
end
if result == false and $game_map.counter?(front_x, front_y)
front_x = $game_map.x_with_direction(front_x, @direction)
front_y = $game_map.y_with_direction(front_y, @direction)
for event in $game_map.events_xy(front_x, front_y)
return if not event.interact and not $infrared.toggled and event.stealth
if triggers.include?(event.trigger) and event.priority_type == 1
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Determine if Touch Event is Triggered
# x : x-coordinate
# y : y-coordinate
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
return false if $game_map.interpreter.running?
result = false
for event in $game_map.events_xy(x, y)
return if not event.interact and not $infrared.toggled and event.stealth
if [1,2].include?(event.trigger) and event.priority_type == 1
event.start
result = true
end
end
return result
end
end
Das Script ist auf Version 1.0
v 2.0 folgt bald mit neuen features ;) Also freut euch drauf
viel Spaß damit
mfG HamsterHai
doch man kann das ganze mit switchs machen, allerdings ist es unnötig weil man dafür dann mehrere Conditions braucht oder 2 pages.. mit dem Script brauhcst du max. 3 comments...
Bin nicht so gut im erklären, also hab ich ma 2 Screens gemacht
Einmal mit Toggle = aus, also ohne infrarot zu aktivieren...
(http://img833.imageshack.us/img833/4686/toggleaus.png)
Und einmal mit Toggle = an
(http://img101.imageshack.us/img101/6133/togglean.png)
Bei Toggle = aus sieht man den im stealth ohne lightseer nicht, die mit lightseer kann man nur ein bisschen erkennen(ala metal gear solid).. ist Toggle allerdings an sieht man alles in einem Rot Ton, auch die gestealthten
Aber wie gesagt, bis jetzt ist das interagieren noch nicht fertig, dass wird in v2.0 kommen