Und hier ist sie: Die Version 3.0 des Bedürfnissystems von mir, Herendil Turindo Aldadur.
Seit 2.0 hat sich einiges getan:
- Das Script ist jetzt komplett variablengestützt zur einfacheren Handhabung
- Es gibt nun beliebig viele Bedürfnisse, die individuell bestimmbar sind
- Code wurde verschlankt und übersichtlicher gestaltet
- Neues HUD
Was macht dieses Script?
Das Script fügt Bedürfnis(se) zum Spiel hinzu. Das ganze ist basierend auf Variablen und Common Events
Was macht es nicht?
Es hat nicht jeder Charakter Bedürfnisse sondern die ganze Gruppe
Screenshots (mit Kommentaren!):
1.: HUD ist an und ausschaltbar, außerdem kann man die Ränder des HUDs ein- und ausschalten
[desc=Raender werden ausgeblendet](http://www.abload.de/img/beduerfnisse1wprd.png)[/desc] [desc=Raender werden angezeigt](http://www.abload.de/img/beduerfnisse27sh9.png)[/desc]
2.: Auch im Menu befindet sich optional ein Fenster mit den Werten
[desc=Funktioniert auch, wenn zusaetzliche Menu-Punkte genutzt werden](http://www.abload.de/img/beduerfnisse3qtx4.png)[/desc]
3.: Erreicht ein Bedürfnis zwei benutzerdefinierte Werte, wird jeweils eine Warnung angezeigt, die wie eine Fehlermeldung aussieht
[desc=Die Meldungen sind selbstverständlich individuell!](http://www.abload.de/img/beduerfnisse4do1y.png)[/desc]
4.: Die Anzahl der Bedürfnisse ist natürlich ebenfalls individuell!
(http://www.abload.de/img/beduerfnisse5drps.png)
[desc=Sehr... individuell](http://www.abload.de/img/beduerfnisse6wsms.png)[/desc]
Anwendung:Über Main einbauen und konfigurieren.
Um ein neues Bedürfnis hinzuzufügen, müsst ihr nach den anderen eine neue Ziele machen. Dabei gilt vollgendes Muster:
"Name" => [(Welche Variable nutzt das Bedürfnis), (Der maximale Wert des Bedürfnisses), (id des Common-Events, das ausgelöst wird, wenn die Variable gleich 0 ist), (nach wie vielen Sekunden sinkt der Wert um einen Punkt -> "Intervall"; wenn 0: Bedürfnis sinkt nicht automatisch)]
Da Bedürfnisse in der Wüste bspw. schneller sinken als in einem Keller, kann man in Map- Area- und Event-Namen [F:i] unterbringen. Wenn sich der Spieler in einer Map oder Area mit einem solchen Tag befindet oder auf einem solchen Event steht, wird die Abnahme der Bedürfnisse mit i multipliziert.
Bespiele: Der Spiele auf einer Map mit dem Namen "[F:4] Wüste". Seine Bedürfnisse nehmen pro Intervall um 4 ab. Wer in Mathe aufgepasst hat, weiß, dass es auch negative Faktoren gibt; will heißen: Heißt eine Map zum Beispiel "[F:-10]" dann bekommt der Spieler auf seine Bedürfnisse pro Intervall 10 Punkte zurück
Wenn noch Fragen offen sind, einfach stellen.
Rechtshinweis:(http://i.creativecommons.org/l/by-sa/3.0/88x31.png)
Bedürfnissystem von Herendil Turindo Aldadur steht unter einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz. (http://creativecommons.org/licenses/by-sa/3.0/)
Will heißen: Ihr creditet mich, wenn ihr das Script benutzt oder nennt mich als Helfen, wenn ihr ein eigenes Script auf Basis von diesem erstellt. Verbreitung erfolgt selbstverständlich auch nur unter Namensnennung!
Verstöße stellen einen Urheberrechtsverstoß dar und werden geahndet.
Der Code:#+###=-............-=###*.............-**-.............+#=##=+-...........
#*####:............-####=-..........-*####=:...........*##########*+-.....
#*##@#:............-####=-........-*@@######=:.........*###==########*....
#*####:............-####=-......-*#######=####=:.......*##=#:.-+=##==-....
#*#######=+--......-####=-....-=#########=######=:.....*####+-............
#*#####@#####@#=+:--#####-..-=@###==-:####*-*###@#=-...*#@######=+-.......
#*####+:*#############===-..-###==-..:##==*..-*####-...*#==##########+....
#*####+.....-:*#########=-...-==-....:####*....-*#-....*####**=######-....
#*#######*+-......-:####=-...........:####*............*####:.....-:-.....
#*####==##=###=+:-.-=##==-...........:##==*............*#=##:.............
#*####+:*==#############=-...........:####*............*###=:.............
#*####:.....-+=##=######=-...........:###=*............*##=#:.............
#*####:..........-:=####=-...........:###=*............*####:.............
#*@###:............-#=##=-...........:####*............*##@#:.............
#*####:............-####=-...........:###=*............*##=#:.............
#*####:............-####=-...........:####*............*####:.............
#*####:............-####=-...........:####*............*####:.............
#*#==#:............-=###=-...........:###=*............*####:.............
#-+++:..............:+++-.............++++-............-++++..............
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 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
Da herendil nu ne lange Zeit nichmehr da war und sich einige beschwert haben das das Script nicht geht, hab ichs mir mal kurz angeguckt und den Fehler gefunden. Auch habe ich das Script ein bisschen upgedated, so wird nun die Nachricht dass ein Status unter die Grenzen fällt per printbefehl angezeigt wird, sondern per Textnachricht.
Script
#+###=-............-=###*.............-**-.............+#=##=+-...........
#*####:............-####=-..........-*####=:...........*##########*+-.....
#*##@#:............-####=-........-*@@######=:.........*###==########*....
#*####:............-####=-......-*#######=####=:.......*##=#:.-+=##==-....
#*#######=+--......-####=-....-=#########=######=:.....*####+-............
#*#####@#####@#=+:--#####-..-=@###==-:####*-*###@#=-...*#@######=+-.......
#*####+:*#############===-..-###==-..:##==*..-*####-...*#==##########+....
#*####+.....-:*#########=-...-==-....:####*....-*#-....*####**=######-....
#*#######*+-......-:####=-...........:####*............*####:.....-:-.....
#*####==##=###=+:-.-=##==-...........:##==*............*#=##:.............
#*####+:*==#############=-...........:####*............*###=:.............
#*####:.....-+=##=######=-...........:###=*............*##=#:.............
#*####:..........-:=####=-...........:###=*............*####:.............
#*@###:............-#=##=-...........:####*............*##@#:.............
#*####:............-####=-...........:###=*............*##=#:.............
#*####:............-####=-...........:####*............*####:.............
#*####:............-####=-...........:####*............*####:.............
#*#==#:............-=###=-...........:###=*............*####:.............
#-+++:..............:+++-.............++++-............-++++..............
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 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(15))
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)
$game_message.texts.push(NEEDS::WARNING.gsub('%s', name))
@warned30 << name
end
def run_crit_warning(name)
$game_message.texts.push(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
viel spaß damit, funktioniert auch (wurde selbst getestet) und jo, Credits bleiben noch die selben, für das bisschen was ich da gemacht habe brauch und will ich keine Credits.
lg flip