Hallo,
ich würde gerne das Bedürfnisssystem von Herendil benutzen. Leider kommt folgender Fehler:
(http://img684.imageshack.us/img684/1276/fehlerl.png)
Da ich mit RGSS nicht auskenne, hab ich keine Ahnung was das für ein Fehler ist.
Hier nochmal das Script, ich hab alles gemacht, was in der Anleitung steht:
#+###=-............-=###*.............-**-.............+#=##=+-...........
#*####:............-####=-..........-*####=:...........*##########*+-.....
#*##@#:............-####=-........-*@@######=:.........*###==########*....
#*####:............-####=-......-*#######=####=:.......*##=#:.-+=##==-....
#*#######=+--......-####=-....-=#########=######=:.....*####+-............
#*#####@#####@#=+:--#####-..-=@###==-:####*-*###@#=-...*#@######=+-.......
#*####+:*#############===-..-###==-..:##==*..-*####-...*#==##########+....
#*####+.....-:*#########=-...-==-....:####*....-*#-....*####**=######-....
#*#######*+-......-:####=-...........:####*............*####:.....-:-.....
#*####==##=###=+:-.-=##==-...........:##==*............*#=##:.............
#*####+:*==#############=-...........:####*............*###=:.............
#*####:.....-+=##=######=-...........:###=*............*##=#:.............
#*####:..........-:=####=-...........:###=*............*####:.............
#*@###:............-#=##=-...........:####*............*##@#:.............
#*####:............-####=-...........:###=*............*##=#:.............
#*####:............-####=-...........:####*............*####:.............
#*####:............-####=-...........:####*............*####:.............
#*#==#:............-=###=-...........:###=*............*####:.............
#-+++:..............:+++-.............++++-............-++++..............
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Bedürfnissystem
# Version 3.0 (last edit 13.06.2011)
# by Herendil Turindo Aldadur
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Konfigurationsbereich - hier gemäß der Anleitung alles einstellen
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
module NEEDS
SEKUNDEN = 01 # Variable für die Sekundenberechnung
BEDUERFNISSE = {# Muster:
# Variable, Maximum, CE-id, Intervall
"Hunger" => [02, 100, 1, 10],
"Müdigkeit" => [03, 100, 2, 20],
"Hygene" => [04, 100, 1, 16]# Am dieser Stelle ein Komma
# einfügen, um neue Bedürfnisse
# hinzuzufügen
} # Unbedingt stehen lassen
S_X = 0 # Position des Bedürfnisfensters auf dem Bildschirm in X-Richtung
S_Y = 0 # Position des Bedürfnisfensters auf dem Bildschirm in Y-Richtung
OPACITY = 255 # Deckkraft der Fensterränder und -innren
ANZEIGE = 01 # Switch zur Regulierung der Fenstersichtbarkeit
# Switch off -> Anzeige an
WARN_TIME = 30 # Prozentualer Wert für erste Warnung
WARNING = "Das Bedürfnis %s ist unter 30% gesunken!" # Erste Warnung
CRIT_TIME = 10 # Prozentualer Wert für kritische Warnung
CRIT_WARN = "Das Bedürfnis %s ist unter 10% gesunken!!" # Zweite Warnung
START_MAX = true # Alle Bedürfnisse bei Spielstart maximiert?
# true -> ja; false -> nein
IN_MENU = true # Soll das Bedürfnisfenster im Menu zu sehen sein?
# true -> ja; false -> nein
RECOVER_ADD = 'all'# Der Event-Befehl "Recover all" maximiert auch alle
# Bedürfnisse, die automatisch sinken.
# true -> ja; false -> nein; 'all' -> nur bei ganze Gruppe
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Funktionaler Bereich - ab dieser Trennung sind alle Änderungen nicht empfohlen
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Window_Beduerfnisse
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Window_Beduerfnisse < Window_Base
def initialize
super(NEEDS::S_X, NEEDS::S_Y, 150, (24*NEEDS::BEDUERFNISSE.keys.size+24))
self.opacity = NEEDS::OPACITY
refresh
end
def refresh
self.contents.clear
self.contents.font.size = 16
a = []
for i in (NEEDS::BEDUERFNISSE).keys
o = NEEDS::BEDUERFNISSE[i]
self.contents.draw_text(0, (NEEDS::BEDUERFNISSE.keys.index(i)*24), 71, 16, "#{i}: ", 2)
draw_gauge(70,(NEEDS::BEDUERFNISSE.keys.index(i)*24-10), $game_variables[o[0]], o[1])
end
self.visible = !$game_switches[NEEDS::ANZEIGE]
end
def draw_gauge(x,y, value, max)
gw = 40 * value / max
c = get_colour(value, max)
gc1 = text_color(c[1])
gc2 = text_color(c[0])
self.contents.fill_rect(x-1, y + WLH - 9, 40+2, 6+2, text_color()
self.contents.fill_rect(x, y + WLH - 8, 40, 6, text_color(15))
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
def get_colour(value, max)
case (value*100.00)/max
when 0...11; return [10,18]
when 10...21; return [2,10]
when 20...31; return [21,14]
when 30...71; return [0,17]
when 70...81; return [24,29]
when 80...91; return [3,28]
when 90...101; return [11,28]
else
return [15,15]
end
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Scene_Map
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Scene_Map
alias needs_start start
alias needs_update update
alias need_terminate terminate
def start
needs_start
@beduerfnis_window = Window_Beduerfnisse.new
@warned30 = []
@warned10 = []
end
def update
needs_update
update_needs
check_needs
@beduerfnis_window.refresh
end
def terminate
@beduerfnis_window.dispose
need_terminate
end
def update_needs
if Graphics.frame_count % Graphics.frame_rate == 0
$game_variables[NEEDS::SEKUNDEN] += 1
for i in (NEEDS::BEDUERFNISSE).keys
o = NEEDS::BEDUERFNISSE[i]
next if o[3] <= 0
next unless $game_variables[NEEDS::SEKUNDEN] % o[3] == 0
@factor = 1
@factor = ($game_map.name.gsub('[F:','')).split(']')[0].to_f if $game_map.name.include?("[F:")
for area in $data_areas.values
next unless (area.map_id == $game_map.map_id)
next unless area.name.include?("[F:")
x = (area.rect.x)...(area.rect.x+area.rect.width)
y = (area.rect.y)...(area.rect.y+area.rect.height)
next unless x.include?($game_player.x) and y.include?($game_player.y)
@factor = (area.name.gsub('[F:','')).split(']')[0].to_f
end
@factor = event_factor? unless event_factor? == false
$game_variables[o[0]] -= (1*@factor)
end
end
end
def event_factor?
for i in $game_map.events.keys
event = $game_map.events[i]
next unless ((event.x == $game_player.x) && (event.y == $game_player.y))
next unless event.name.include?('[F:')
return ((event.name.gsub('[F:','')).split(']')[0].to_f)
end
return false
end
def check_needs
for i in (NEEDS::BEDUERFNISSE).keys
o = NEEDS::BEDUERFNISSE[i]
if $game_variables[o[0]] > o[1]
$game_variables[o[0]] = o[1]
elsif $game_variables[o[0]] <= 0
if o[2] != nil
$game_temp.common_event_id = o[2]
$game_variables[o[0]] += 1
end
elsif 100.00*$game_variables[o[0]]/o[1] <= NEEDS::CRIT_TIME
run_crit_warning i if not @warned10.include?(i)
elsif 100.00*$game_variables[o[0]]/o[1] <= NEEDS::WARN_TIME
run_warning i if not @warned30.include?(i)
elsif ($game_variables[o[0]]*100.00/o[1]) > NEEDS::WARN_TIME
@warned30.delete(i)
elsif ($game_variables[o[0]]*100.00/o[1]) > NEEDS::CRIT_TIME
@warned10.delete(i)
end
end
end
def run_warning(name)
p(NEEDS::WARNING.gsub('%s', name))
@warned30 << name
end
def run_crit_warning(name)
p(NEEDS::CRIT_WARN.gsub('%s', name))
@warned10 << name
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Scene_Menu
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Scene_Menu < Scene_Base
alias need_start start
alias need_update update
alias need_terminate terminate
def start
need_start
if NEEDS::IN_MENU
@needs = Window_Beduerfnisse.new
@needs.opacity = 255
@needs.x = 0
@needs.y = @command_window.height+@command_window.y
@needs.width = @command_window.width
end
end
def update
need_update
@needs.refresh
@needs.visible = true
end
def terminate
@needs.dispose
need_terminate
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Scene_Title
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Scene_Title < Scene_Base
alias load_database_name load_database
def load_database
load_database_name
$data_mapinfos = load_data("Data/MapInfos.rvdata")
for key in $data_mapinfos.keys
$data_mapinfos[key] = $data_mapinfos[key].name
end
end
alias command_new_needs command_new_game
def command_new_game
command_new_needs
if NEEDS::START_MAX
for i in (NEEDS::BEDUERFNISSE).keys
o = NEEDS::BEDUERFNISSE[i]
$game_variables[o[0]] = o[1]
end
end
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Game_Map
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Game_Map
def name
$data_mapinfos[@map_id]
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Game_Interpreter
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Game_Interpreter
def erholen_all(prozent = 100, absolut = 0)
for i in NEEDS::BEDUERFNISSE.keys
erholen(i, prozent, absolut)
end
end
def erholen(beduerfnis, prozent = 100, absolut = 0)
rel = NEEDS::BEDUERFNISSE[beduerfnis][1]*(prozent/100.00)
$game_variables[NEEDS::BEDUERFNISSE[beduerfnis][0]] += (rel+absolut)
end
def erschöpfen_all(prozent = 100, absolut = 0)
for i in NEEDS::BEDUERFNISSE.keys
erschöpfen(i, prozent, absolut)
end
end
def erschöpfen(beduerfnis, prozent = 100, absolut = 0)
rel = NEEDS::BEDUERFNISSE[beduerfnis][1]*(prozent/100.00)
$game_variables[NEEDS::BEDUERFNISSE[beduerfnis][0]] -= (rel+absolut)
end
alias command_314_needs command_314
def command_314
case NEEDS::RECOVER_ADD
when true
for i in NEEDS::BEDUERFNISSE.keys
erholen(i)
end
when 'all'
if @params[0] == 0
for i in NEEDS::BEDUERFNISSE.keys
next if NEEDS::BEDUERFNISSE[i][3] <= 0
erholen(i)
end
end
end
command_314_needs
end
end
class Game_Event < Game_Character
attr_reader :name
alias needs_initialize initialize
def initialize(map_id, event)
needs_initialize(map_id, event)
@name = event.name
end
end
MfG
NeoXodus