collapse collapse

 Community


 User Info




Willkommen Gast. Bitte einloggen oder registrieren.

 Partnerseiten

rpgvx.net

Das Forum ist offline

Autor Thema: Ruf System  (Gelesen 4004 mal)

Offline Kasaar

  • Epic Scripter !!
  • Eventmeister
  • ***
  • Beiträge: 305
  • Satanistischer Misantroph... noch Fragen? ]:)
Ruf System
« am: August 12, 2010, 22:00:06 »
Fraktionen ala WoW per Events zu kompliziert und aufwendig? Kein Problem... Mit dem Fame System von HamsterHai ist dies möglich... Einfach Script einfügen und den Events die Befehle geben.

Spoiler for Hiden:
#-------------------------------------------------------------------------------
#
#                           Ruf System
#                    code by HamsterHai aka. Sartekk
#                           Released 13.08.2010
#                           version 1.1
#
#-------------------------------------------------------------------------------
#   * Veränderbarer Teil...
#
#   MAX_RUF         = Maximaler Ruf-Wert
#   MIN_RUF         = Minimaler Ruf-Wert
#   FAME_VOCAB      = Verwendeter Ruf-Name
#   MAP_BUTTON      = Taste zum aufrufen des Ruf-Status (Nichtim Menü aufrufbar!!)
#   POPUP_SIZE      = Schriftgröße des Popups bei Rufzuwachs/verlust
#   POPUP_DURATION  = Dauer der Anzeige
#   FRAKTIONEN      = Liste aller Fraktionen
#   TITEL           = Liste aller Statustitel der Fraktionen
#
#-------------------------------------------------------------------------------
#   * Befehle...
#
#   $fame.gain_fame(faction_id,wert)
#   Erhöht den Ruf der Fraktion aus Fraktionen um wert
#
#   $fame.lose_fame(faction_id,wert)
#   Verringert den Ruf der Fraktion aus Fraktionen um wert
#
#   $fame.discover(faction_id)
#   Macht die Fraktion für die Liste sichtbar
#
#   $fame.discovered?(faction_id)
#   Gibt die Sichtbarkeit der Fraktion in der Liste wieder
#
#   $fame.current_fame?(faction_id)
#   Gibt den Ruf-Wert der Fraktion wieder
#
#   $fame.current_title?(faction_id)
#   Gibt den itel der Fraktion wieder
#
#-------------------------------------------------------------------------------
module Rufconfig
   
  MAX_RUF = 35000
  MIN_RUF = -35000
  FAME_VOCAB = "Ruf"
  MAP_BUTTON = Input::Z
  POPUP_SIZE = 22
  POPUP_DURATION = 60
   
  FRAKTIONEN = [
          # ["Name", Start-Ruf, Start-Titel, Start-Sichtbarkeit]
            [nil,nil,nil,nil],   #Don't remove!!
            ["Maghar",0,"Neutral",true],
            ["Frakti2",23000,"Respektvoll",false],
            ]
             
  TITEL = [
          # ["Titel-Name", Ab welchem Ruf]
            ["Hasserfüllt",-10000],
            ["Unfreundlich", -3000],
            ["Neutral",0],
            ["Freundlich",3000],
            ["Wohlwollend",10000],
            ["Respektvoll",16000],
            ["Ehrfürchtig",35000],
          ]
end
#-------------------------------------------------------------------------------
#   * NICHT Veränderbarer Teil... Punkt!!
#       
#-------------------------------------------------------------------------------
class Ruf_System
  attr_accessor :faction
  attr_accessor :title
  attr_accessor :visible
   
  def initialize
    @faction = Rufconfig::FRAKTIONEN
    @title = Rufconfig::TITEL
    @visible = []
    for i in 1..@faction.size-1
      if @faction[i][3] == true
        @visible.push(i)
      end
    end
  end
   
  def gain_fame(faction,val)
    if @faction[faction][1] <= Rufconfig::MAX_RUF - val
      @faction[faction][1] += val
    else
      @faction[faction][1] = Rufconfig::MAX_RUF
    end
    $fame_popup.show_fame_popup(true,@faction[faction],val)
    update
  end
   
   
  def lose_fame(faction,val)
    if @faction[faction][1] >= Rufconfig::MIN_RUF + val
      @faction[faction][1] -= val
    else
      @faction[faction][1] = Rufconfig::MIN_RUF
    end
    $fame_popup.show_fame_popup(false,@faction[faction],val)
    update
  end
     
  def discover(faction)
    if !@faction[faction][3] == true
      @faction[faction][3] = true
      @visible.push(faction)
      @visible.sort!
      update
    end
  end
   
  def current_fame?(faction)
    return @faction[faction][1]
  end
   
  def current_title?(faction)
    return @faction[faction][2]
  end
   
  def discovered?(faction)
    return @faction[faction][3]
  end
   
  def update
    for j in 1..@faction.size-1
      for i in 0..@title.size-1
        if @faction[j][1] >= @title[i][1]
          @faction[j][2] = @title[i][0]
        end
      end
    end
  end
end
#-------------------------------------------------------------------------------
class Scene_Ruf < Scene_Base
   
  def start
    super
    @ruf_win = Ruf_Window.new
    @page = 0
  end
   
  def terminate
    super
    @ruf_win.dispose
  end
   
  def update
    super
    @ruf_win.update
    update_input
  end
   
  def update_input
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::DOWN)
      Sound.play_cursor
      if $fame.visible.size > (@page+1)*8
        @page += 1
        @ruf_win.refresh(@page)
      end
    elsif Input.trigger?(Input::UP)
      Sound.play_cursor
      if @page > 0
        @page -= 1
        @ruf_win.refresh(@page)
      end
    end
  end
end
#-------------------------------------------------------------------------------
class Ruf_Window < Window_Base
   
  def initialize
    super(0,0,544,416)
    refresh
  end
   
  def refresh(page=0)
    self.contents.clear
    @item_max = $fame.visible.size
    old_size = self.contents.font.size; self.contents.font.size = 40
    self.contents.font.bold = true
    self.contents.draw_text(200,0,200,40,Rufconfig::FAME_VOCAB)
    self.contents.font.bold = false
    self.contents.font.size = old_size
    if page == 0
      for i in 0..$fame.visible.size-1
        self.contents.draw_text(5,20+40*((i+1)),200,40,$fame.faction[$fame.visible[i]][0])
        draw_ruf($fame.faction[$fame.visible[i]],230,20+40*((i+1)))
      end
    elsif page > 0
      for i in page*7+page..$fame.visible.size-1
        self.contents.draw_text(5,20+40*((i+1)-(page*7+page)),200,40,$fame.faction[$fame.visible[i]][0])
        draw_ruf($fame.faction[$fame.visible[i]],230,20+40*((i+1)-(page*7+page)))
      end
    end
  end
   
  def draw_ruf(faction, x, y, width = 270)
    draw_ruf_gauge(faction, x, y, width)
    last_font_size = self.contents.font.size
    self.contents.draw_text(x-180, y, 244, WLH, faction[1], 2)
    self.contents.font.color = normal_color
    self.contents.draw_text(x-100, y, 211, WLH, "/", 2)
    self.contents.draw_text(x, y, 244, WLH, faction[2], 2)
  end
 
  def draw_ruf_gauge(faction, x, y, width = 240)
    if faction[1] >= 0
      gw = width * faction[1] / Rufconfig::MAX_RUF
      gc1 = Color.new(102,160,96)
      gc2 = Color.new(56,140,47)
    else
      gw = width * -1*faction[1] / Rufconfig::MAX_RUF
      gc1 = Color.new(206,70,83)
      gc2 = Color.new(147,29,41)
    end
    self.contents.fill_rect(x, y + WLH - 8, width, 12, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 12, gc1, gc2)
  end
end
#-------------------------------------------------------------------------------
class Scene_Title < Scene_Base
  alias ruf_system create_game_objects
  def create_game_objects
    ruf_system
    $fame = Ruf_System.new
    $fame_popup = Fame_Popup.new
  end
end
#-------------------------------------------------------------------------------
class Scene_Map < Scene_Base
  alias ruf_system_update update
  def update
    $fame_popup.update_popup
    ruf_system_update
    if Input.trigger?(Rufconfig::MAP_BUTTON)
      $scene = Scene_Ruf.new
    end
  end
end
#-------------------------------------------------------------------------------
class Fame_Popup
  def initialize
    @popup_duration = 0
  end
 
  def show_fame_popup(pre,faction,val)
    if @popup_sprite != nil
      dispose_popup
    end
    bitmap = Bitmap.new(360,160)
    old_color = bitmap.font.color
    if pre == true
      preval = "+"
      bitmap.font.color = Color.new(102,160,96)
    else
      preval = "-"
      bitmap.font.color = Color.new(206,70,83)
    end
    @popup_duration = Rufconfig::POPUP_DURATION
    bitmap.font.bold = true
    old_size = bitmap.font.size; bitmap.font.size = Rufconfig::POPUP_SIZE
    bitmap.draw_text(1,1,360,160,preval+val.to_s+" "+Rufconfig::FAME_VOCAB+" - "+faction[0],1)
    bitmap.font.size = old_size; bitmap.font.color = old_color
    bitmap.font.bold = false
    @popup_sprite = Sprite.new(Viewport.new(0,0,544,416))
    @popup_sprite.bitmap = bitmap
    @popup_sprite.x = 50
    @popup_sprite.y = (Graphics.height/2)-bitmap.font.size
    @popup_sprite.z = 999999
  end
   
  def dispose_popup
    return if @popup_sprite.bitmap == nil
    @popup_sprite.bitmap.dispose
    @popup_sprite.dispose
    @popup_sprite = nil
  end
 
  def update_popup
    if @popup_duration > 0
      @popup_duration -=1
      @popup_sprite.y -= 1
    elsif @popup_duration <= 0 and @popup_sprite != nil and !@popup_sprite.disposed?
      @popup_sprite.y -= 1
      @popup_sprite.opacity -= 5
      dispose_popup if @popup_sprite.opacity <= 0
    end
  end
end
#-------------------------------------------------------------------------------
class Scene_File < Scene_Base
  alias save_fame_hh write_save_data
  def write_save_data(file)
    save_fame_hh(file)
    Marshal.dump($fame,file)
  end
 
  alias read_fame_hh read_save_data
  def read_save_data(file)
    read_fame_hh(file)
    $fame = Marshal.load(file)
  end
end

viel Spaß damit
mfG HamsterHai

==================================================================

v1.1 Changelog
Spoiler for Hiden:
Durch den Befehl .discover(id) wurde die Fraktion unendlich oft hinzugefügt bei wiederholtem ausführen...
dieser Fehler wurde behoben

v1.2 Changelog
Spoiler for Hiden:
Das Fame System berücksichtigt ab jetzt auch gespeicherte Spielstände
« Letzte Änderung: Januar 09, 2011, 18:45:14 von HamsterHai »
Besucht mich auf


Und gebt Kommentare im Blog =)

Re: Ruf System

Offline PDM

  • Bibliothekar
  • Global Mod
  • VX-Kenner
  • ****
  • Beiträge: 468
    • Mein Blog
Re: Ruf System
« Antwort #1 am: August 12, 2010, 22:10:25 »
Und was macht das Script genau?
PDM's Gameplays
Skype-Name: lordpdm

Re: Ruf System

Offline Kasaar

  • Epic Scripter !!
  • Eventmeister
  • ***
  • Beiträge: 305
  • Satanistischer Misantroph... noch Fragen? ]:)
Re: Ruf System
« Antwort #2 am: August 12, 2010, 22:22:42 »
Mit dem Script kannste dir Fraktionen/Gruppen/wie-auch-immer-dus-nennst erstellen die ihre eigene Meinung von dir haben... Also ob sie dich mögen oder nicht... z.b wennu quests bei ihnen machst und aufgaben für sie erfüllst kriegst du Ruf und sie mögen dich mehr oder du verlierst Ruf... so kannst du z.b einstellen, dassu bestimmte sachen nur dann machen kannst, wennu bei einer bestimmten grp einen bestimmten Ruf hast
Besucht mich auf


Und gebt Kommentare im Blog =)

Re: Ruf System

Offline PatrickStar

  • SH1>RE, aber RE>SH5
  • Database-Verunstalter
  • **
  • Beiträge: 152
Re: Ruf System
« Antwort #3 am: August 13, 2010, 19:11:56 »
Mit dem Script kannste dir Fraktionen/Gruppen/wie-auch-immer-dus-nennst erstellen die ihre eigene Meinung von dir haben... Also ob sie dich mögen oder nicht... z.b wennu quests bei ihnen machst und aufgaben für sie erfüllst kriegst du Ruf und sie mögen dich mehr oder du verlierst Ruf... so kannst du z.b einstellen, dassu bestimmte sachen nur dann machen kannst, wennu bei einer bestimmten grp einen bestimmten Ruf hast

Klingt interressant. Werde ich Eventuell mal benutzen.

PS. Kleiner Rechtschreibfehler im erklärungsteil:

#   $fame.current_title?(faction_id)
#   Gibt den Titel der Fraktion wieder


Treffen sich 2 stumme sagt der eine: " ".
Darauf der andere: " ".

Re: Ruf System

Offline lilsnow

  • Ralph
  • *
  • Beiträge: 9
Re: Ruf System
« Antwort #4 am: September 03, 2010, 03:56:13 »
Hay leute,

finde das script toll, aber ich bekomm einen fehler zur info benutze die engin von Vlad ( online engine )

Fehler:

"Script 'Rufsystem' line 300 NoMethodError occurred.
undefined method ` update_popup' for nil:NilClass"

könnt ihr mir helfen bitte?

mfg

Re: Ruf System

Offline Varman

  • Ralph
  • *
  • Beiträge: 7
Re: Ruf System
« Antwort #5 am: September 21, 2010, 16:38:51 »
Hallo,

ich habe mich für den Skript interessiert und ihn getestet. Aber ich habe dann in der Config des Skripts angegeben:

module Rufconfig
 
  MAX_RUF = 35000
  MIN_RUF = -35000
  FAME_VOCAB = "Ruf"
  MAP_BUTTON = Input::R
  POPUP_SIZE = 22
  POPUP_DURATION = 60

Aber wenn ich im Spiel "r" auf der Tastatur wähle passiert nichts.
Was mach ich da falsch?

MfG,
Varman

Re: Ruf System

Offline Devoli

  • Event-Jongleur
  • **
  • Beiträge: 72
Re: Ruf System
« Antwort #6 am: September 21, 2010, 16:50:14 »
Das liegt daran, das das nicht die R-Taste ist sondern die W-Taste. Ist Standardmäßig so belegt.
Ist zugebener weise dämlich aber was solls...
Aber wenn du im Testspiel auf F1 drückst kannst du die Belegung ändern. Wenn du aber genau diese Belegen willst bracht du ein skript das es hier auch wo gibt ^^

Re: Ruf System

Offline Redeemer

  • Database-Verunstalter
  • **
  • Beiträge: 179
Re: Ruf System
« Antwort #7 am: September 24, 2010, 11:07:19 »
Mit dem Script kannste dir Fraktionen/Gruppen/wie-auch-immer-dus-nennst erstellen die ihre eigene Meinung von dir haben... Also ob sie dich mögen oder nicht... z.b wennu quests bei ihnen machst und aufgaben für sie erfüllst kriegst du Ruf und sie mögen dich mehr oder du verlierst Ruf... so kannst du z.b einstellen, dassu bestimmte sachen nur dann machen kannst, wennu bei einer bestimmten grp einen bestimmten Ruf hast

Hmm

und wie mach ich des jetzt mit den Befehlen wenn ich z.b will das Person A nur ne Quest für mich hat wenn mein Ruf nen bestimmten Wert hat oder ich nen bestimmten Titel in der Fraktion hab?

Man kann mit den Befehlen doch nur den Ruf erhöhen/senken oder anzeigen lassen.

Re:Ruf System

Offline Kasaar

  • Epic Scripter !!
  • Eventmeister
  • ***
  • Beiträge: 305
  • Satanistischer Misantroph... noch Fragen? ]:)
Re:Ruf System
« Antwort #8 am: September 24, 2010, 16:27:16 »
Spoiler for Hiden:
Zitat
#-------------------------------------------------------------------------------
#   * Befehle...
#
#   $fame.gain_fame(faction_id,wert)
#   Erhöht den Ruf der Fraktion aus Fraktionen um wert
#
#   $fame.lose_fame(faction_id,wert)
#   Verringert den Ruf der Fraktion aus Fraktionen um wert
#
#   $fame.discover(faction_id)
#   Macht die Fraktion für die Liste sichtbar
#
#   $fame.discovered?(faction_id)
#   Gibt die Sichtbarkeit der Fraktion in der Liste wieder
#
#   $fame.current_fame?(faction_id)
#   Gibt den Ruf-Wert der Fraktion wieder
#
#   $fame.current_title?(faction_id)
#   Gibt den itel der Fraktion wieder
#
#-------------------------------------------------------------------------------

Du kannst also auch abfragen, wieviel Ruf oder welchen Titel du bei der Fraktion hast ;) oder ob dein Held überhaupt weiß, dasses diese Fraktion überhaupt gibt. wieviel Ruf du hast kannste mit $fame.current_fame?(faction_id) abfragen ;)

mfG Hamster
Besucht mich auf


Und gebt Kommentare im Blog =)

Re:Ruf System

Offline Redeemer

  • Database-Verunstalter
  • **
  • Beiträge: 179
Re:Ruf System
« Antwort #9 am: September 29, 2010, 14:45:03 »
Ja schon kapiert ^^,

nur ich meinte das eher so:

Der Held (sagen wir er heist ma Ralph xD) kommt in eine Stadt z.b. dort soll er nun von einem Typen ne Quest bekommen diese aber nur wenn er in der Fraktion ist in dem der Typ, der Ihm die Quest gibt, auch ist ansonsten ist der Typ gar nicht im da.

So meinte ich das also eine Art Bedingung

^^"

Re:Ruf System

Offline himbeere

  • Ralph
  • *
  • Beiträge: 4
Re:Ruf System
« Antwort #10 am: September 30, 2010, 00:56:09 »
Das selbe Problem wie mein Vorschreiber habe ich auch. Das Skript an sich ist super gelungen, aber es bringt (mir) nichts wenn man den Ruf der Fraktionen nicht bei NPCs abfragen kann.

Zum Beispiel kann man in WoW (bestes Beispiel sind die Söhne Hodir's) teilweise nur Quests annehmen oder NPCs sehen, wenn man bereits durch Pre-Quests einen bestimmen Ruf erlangt hat.. das scheint mit dem RufScript nicht zu gehen.


Ich habs mit der Ruf-Abfrage probiert in folgenden Variantionen (via Conditional Branch):

$fame.current_fame?(faction_id) rufwert
$fame.current_fame?(faction_id, rufwert)

In meinem Beispiel hatte die faction_id 1 keinen Ruf am Anfang (war also bei 0, sprich "Neutral").. damit mein Questgeber zum Test "Hallo" sagt, brauchte man aber mindestens 150 Ruf. Ein weiter NPC hat mir die 150 Ruf gegeben aber nichts ist passiert. Nur 2 unterschiedliche Fehlermeldungen.


Liebe Grüße,

Sophie

Re:Ruf System

Offline FlipelyFlip

  • Will sein Alter nicht verraten xD
  • Administrator
  • VX-Großmeister
  • ****
  • Beiträge: 884
  • Heyho (=
    • Flips Musik Kariere auf Facebook xD
Re:Ruf System
« Antwort #11 am: September 30, 2010, 02:05:44 »
macht ihr schon bei der conditional Branch die Scriptbedingung mit:

$fame.current_fame?(faction_id) == rufwert

faction_id wird dabei aber mit dem Namen der Fraktion.

zB.:

$fame.current_fame?("Mahar2") == 60

so dürfte es eigentlich funktioniern, habs zwar nich getestet, aber müsste^^"

lg flip

Re:Ruf System

Offline himbeere

  • Ralph
  • *
  • Beiträge: 4
Re:Ruf System
« Antwort #12 am: September 30, 2010, 16:36:07 »
Alles klar hat geklappt, ich fasse noch mal die Conditional Branch-Befehle zusammen:

== - Der Ruf MUSS diesen exakten Wert haben (z.B. genau 100 Ruf, nicht mehr nicht weniger)
>= - Der Ruf muss den exakten Wert haben oder darüber liegen (z.B. mindestens 100 Ruf, oder mehr)
<= - Der Ruf muss den exakten Wert haben oder kleiner sein (z.B. maximal 100 Ruf, oder weniger

Re:Ruf System

Offline FlipelyFlip

  • Will sein Alter nicht verraten xD
  • Administrator
  • VX-Großmeister
  • ****
  • Beiträge: 884
  • Heyho (=
    • Flips Musik Kariere auf Facebook xD
Re:Ruf System
« Antwort #13 am: September 30, 2010, 17:36:03 »
genau, gibt aber auch noch die möglichkeiten Größer (>), Kleiner (<) und Ungleich (<>)

Re:Ruf System

Offline himbeere

  • Ralph
  • *
  • Beiträge: 4
Re:Ruf System
« Antwort #14 am: September 30, 2010, 23:24:29 »
Korrekt Flipely, die hatte ich vergessen :) Aber denke das Wichtigste ist die "größer-als"-Kombination weil man für Quests, Items und Co ja einen Mindest-Ruf braucht.

 


 Bild des Monats

rooftop party

Views: 3099
By: papilion

 Umfrage

  • Wer soll das BdM gewinnen?
  • Dot Kandidat 1
  • 3 (25%)
  • Dot Kandidat 2
  • 1 (8%)
  • Dot Kandidat 3
  • 2 (16%)
  • Dot Kandidat 4
  • 0 (0%)
  • Dot Kandidat 5
  • 6 (50%)
  • Stimmen insgesamt: 12
  • View Topic

 Schnellsuche





SimplePortal 2.3.3 © 2008-2010, SimplePortal