RPGVX.net

  RPG-Maker VX => VX Skripte [Fertiger Code] => Thema gestartet von: Herendil am August 02, 2009, 00:29:59

Titel: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Herendil am August 02, 2009, 00:29:59
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
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Kyoshiro am August 02, 2009, 08:56:29
Nettes Script, habe es eingefügt und es scheint alles zu funktionieren.
Was ich bei deiner Erklärung nicht wirklich verstehe...wofür soll man ein CE machen?
Das System funktioniert ja auch so. ;)

Ein paar Screenshots wären ganz gut, damit man vorher mal ein Bild hat und
auch gut wäre eine Demo mit dann einem solchen CE, ich hätte das Ganze jetzt anders gelöst.

Kyoshiro

Achja, kleine Anmerkung:
Im Script steht "Öhnmächtigkeit", es gibt aber nur die "Ohnmacht". ;)
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Ðeity am August 02, 2009, 17:37:11
Hab es auch ausprobiert, und finde das es gut gelungen ist.
Schade dass, das Script nicht in jedem RPG gut einzustezen ist, trotzdem wird es sicherlich Projekte geben die auf so ein System nicht verzichten können. :P

@Kyo
Falls man in Ohnmacht fällt, sollte doch etwas geschehen wie z.B. in HM, man landet beim Arzt oder vllt. in einem RPG (AKS) ist man für eine kurze Zeit bewegungsunfähig etc. Und da es für jemanden Scriptkenntnisse diese Folgen von Ohnmacht schwer einzustellen sind, hat er ( denke ich ) sich für ein CE entschieden. Ist aber nur eine Vermutung garantiere für nichts :D

MfG
Deity
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: DarkSun am August 02, 2009, 17:52:18
Das Script ist eig ganz gut.
Man kann es z.B. in ein "Die Sims RPG" einsetzen^^
Ein paar Screenshots könntest du auch reinsetzen. Das wäre gut.
Trotzdem nettes Script von dir, Herendil :).

MFG
DS
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Herendil am August 02, 2009, 19:41:58
Danke für das positive Feedback :)

Hab es auch ausprobiert, und finde das es gut gelungen ist.
Schade dass, das Script nicht in jedem RPG gut einzustezen ist, trotzdem wird es sicherlich Projekte geben die auf so ein System nicht verzichten können. :P

@Kyo
Falls man in Ohnmacht fällt, sollte doch etwas geschehen wie z.B. in HM, man landet beim Arzt oder vllt. in einem RPG (AKS) ist man für eine kurze Zeit bewegungsunfähig etc. Und da es für jemanden Scriptkenntnisse diese Folgen von Ohnmacht schwer einzustellen sind, hat er ( denke ich ) sich für ein CE entschieden. Ist aber nur eine Vermutung garantiere für nichts :D

MfG
Deity

Ja genau das ist der Fall. Screenshots werde ich noch machen, wenn ich Zeit habe.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: syuka am Januar 12, 2010, 02:55:03
kannst du das window-HuD nochmal posten der link geht nicht thx
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Herendil am Januar 12, 2010, 06:48:25
Oh gut, dass du mich dran erinnerst, ich werde das Script Wahrscheinlich demnächst updaten, es gibt mit dieser Version diverse Probleme...
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Vizard am Januar 12, 2010, 12:43:54
wenns etwas ausgereifter ist, denke ich werde ichs auf jedenfall einbauen :D
die idee ist super!
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: syuka am Januar 12, 2010, 22:17:57
das is super bin schon richtig gespannt
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Galadriela am Juli 23, 2010, 17:52:27
(http://img195.imageshack.us/img195/2998/fehlerc.png)

das kommt bei mir :(
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Agito Ace am März 07, 2011, 12:47:43
Super Script! Kann man z.B. sehr gut für ein Life Simulation RPG verwenden, wo man Hunger bekommen kann bzw. sich ausruhen muss etc.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Anykey am Juni 01, 2011, 07:11:12
Wann kommnt ein Update bei mir geht es nämlich net mehr :(
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Herendil am Juni 02, 2011, 01:30:06
Oh.. das ja sogar noch eine etwas ältere Version des Skripts.. also wenn Bedarf besteht, kann ich mal ein Update ausarbeiten, dass deutlich besser funktioniert. Aber das dauert leider etwas, vielleicht ist es nächste Woche fertig.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Anykey am Juni 03, 2011, 06:53:26
Würde mich freuen das würde mein Projekt etwas würtze geben ;) wäre dann wie Monster Hunter :)
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Herendil am Juni 10, 2011, 21:44:03
Alles klar meine Damen und Herren hier ein Update zur nächsten Haupt-Version 3.0: Die Version, die ich mal von Fehlern befreit hatte (2.5) lässt sich nicht mehr auffinden. Daher habe ich geplant, das ganze System neu aufzulegen und dazu eine Demo mit vielen neuen Features zu erstellen.
Folgendes ist bislang teil der nächsten stabilen Version:

Wenn ihr noch Anregungen habt, immer her damit, dazu dient dieses Thema gerade^^
Mit einer stabilen Version ist noch diesen Monat zu rechnen.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Anykey am Juni 11, 2011, 15:15:21
Uiiiii nice ^^ ich freu mich schon ich schaue fast jeden tag rein um zu gucken wann es was neues gibt ;D
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Herendil am Juni 14, 2011, 00:36:27
Version 3.0 wurde gepostet.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Anykey am Juni 15, 2011, 21:34:44
Juhhh ;) bis der beste gleich testen ;)

Edit: Bei mir funzt wa net könntest du ne Demo hochladen ?
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Herendil am Juni 23, 2011, 21:48:05
Edit: Bei mir funzt wa net könntest du ne Demo hochladen ?

Ne Demo wäre zu umständlich. Was funkt denn nicht?
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Anykey am September 02, 2011, 21:08:59
Naja es ghet einfach net line 85 geht net
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Anykey am September 08, 2011, 23:32:18
Bei mir schreibt er das die Zeile 85 falsh ist (Sytaxx Erorr)
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Anykey am Oktober 31, 2011, 04:15:58
Also hilft mir keiner ?
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: NeoXodus am November 17, 2011, 23:14:57
Bei mir schreibt er das die Zeile 85 falsh ist (Sytaxx Erorr)

Bei mir ist genau das Gleiche. Bitte um Hilfe.
MfG
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Valentine am Dezember 06, 2011, 18:35:09
Sehr schönes Script! Werde das bei meinem Vampir Projekt gut gebrauchen können (Blutdurst) xD
Mal gespannt ob alles funktioniert.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am Februar 23, 2012, 19:23:06
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
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: NeoXodus am Februar 26, 2012, 12:50:48
Danke! :)
Aber jetzt habe ich noch ein Problem. Ich hab wirklich keine Ahnung vom Skripten. Was muss ich machen, dass die Bedürfnisse wieder aufgefüllt werden?
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am Februar 26, 2012, 13:51:32
einfach die Variablen auf 100 setzten die du im script definiert hast, bzw. + den Wert rechnen um den Erholt werden soll (:

lg flip
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Kouki am März 18, 2012, 09:42:42
Sobald ich den Script eingebunden habe und das Spiel neustarte.. seh ich zwar die Leisten von dem Menü, aber meine normalen Texte kommen nicht, die auf Autorun stehen und meine ganzen anderen Events sind dadurch schon ausgelöst ( z.B ne Brücke ist schon da, obwohl man sie erst hätte betätigen müssen.)

Das gleiche passiert auch wenn ich über nen Switch die Box grafisch ausstell.

Hilfe... :sad:
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am März 18, 2012, 11:21:30
dürfte eigentlich nix mit dem Script zu tun haben, ausser du verwendest irgendwelche Switches oder Variablen die im script vordefiniert wurden. Dann müsstest du da andre einstellen^^"
Ansonsten immer ein neues Spiel starten und nicht Spiel Laden ._.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Kouki am März 18, 2012, 11:24:36
Switch 100 ist nicht belegt und
Neues Spiel passiert das gleiche.


o.o´
Liegt es evtl an der X-Y des Fensters?
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am März 18, 2012, 11:27:06
hab grad nochmal meinen Beitrag editiert, da findest es noch sonst hier noch:

Wenn du Switches oder Variablen die im script vordefiniert wurden verwendest. Dann müsstest du da andre einstellen^^"
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Kouki am März 18, 2012, 12:33:50
hab für das script extra
variabeln angelegt und geändert.

Das an und ausstellen für die Anzeige klappt ja, aber alles andere wird nicht abgespielt.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am März 18, 2012, 13:08:26
ist das erst seitdem das script drin ist oder wars schon vorher?
bzw. nimm mal das script raus und probier nochmal.
Weil das Script selbst ändert ja nix ausser die eingetragenen Switches und Variablen^^"
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Kouki am März 18, 2012, 13:09:55
sobald ich es reintu. ^^ Sonst klappt alles o.O´
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am März 18, 2012, 15:45:35
das is ein seltsamer fehler, kannst ev. nicht nochmal gucken ob die selben switches und variablen verwendet wurden. Weil das wundert mich echt. oder schick mir mal bitte das projekt unverschlüsselt per PN zu, dann kann ichs mir angucken und schauen was falsch läuft (:
bzw. bilder würdens auch tun, wenn du nix zuschicken willst (:
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Kouki am März 18, 2012, 16:14:36
Solangsam wirds..  Ka woran es lag.. sind nun nur noch ein paar Events die ausgelöst sind.


Bzw.. Was passiert wenn eine Sache auf 0 geht?.. Kann man dafür auch iwas machen?..
Sonst wär es sinnlos .__.

Ps: Eben war meine hunger leiste leer.. und hygiene auf 50 .. nachdem hunger leer war wurde hygiene komplett aufgefüllt? o.ô
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am März 18, 2012, 16:41:33
klar kann man was machen, wenn ne leiste leer geht, müsstest nochmal nachgucken, weil da gibts im Script die möglichkeit nen common Event mit einzublenden.

zum wiederauffüllen der leiste: hmm, is seltsam, aber dürfte normal nicht sein, werds mir nochmal genauer angucken ._.
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Kouki am März 18, 2012, 17:26:17
und wie geht das mit dem common event in dem script?

Würd wenn eine leiste leer ist die person wohin teleportieren..

Sauberkeit - > Badezimmer
Essen -> krankenhaus (ohnmacht)
müdigkeit -> Bett
 
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am März 18, 2012, 18:05:59
weiß grad nicht auswendig, steht aber in den grünen Zeilen vom script
oder aber auch im Startpost (:
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: Kouki am März 19, 2012, 17:41:13
Dann zeig mir die Stelle mal bitte für die common events...

seh das echt nicht dort ^^

einzige was ich seh ist : bei 30 % text , 10 % Text..  aber CE nüchts o.o
Titel: Re: Bedürfnissystem by Herendil Turindo Aldadur
Beitrag von: FlipelyFlip am März 19, 2012, 20:38:55
das findest du bei der einstellung der Bedürfnisse, es ist der dritte wert ._.
SimplePortal 2.3.3 © 2008-2010, SimplePortal