Ergebnis 1 bis 13 von 13

Thema: [XP] def richtig aufrufen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Jemand vielleicht noch eine Idee?

  2. #2
    Idee: Poste mal den gesamten Code der Scripts, die du eingefügt hast, nicht nur das was du für relevant hältst.

  3. #3
    MSS: Initialize
    Code:
    class MSS # Monsta's Shoot System
       
      def initialize
    
        #===Optionen===#
        @active = false # Ist das Schusssystem von Anfang an aktiv
        @undurchlässiges_terrain = [7]   # Alle Zahlen von 0-7 können im Array verwendet werden. Einzelne Terrain ID's werden wie im Array gewohnt durch ein Komma getrennt
        @option_events_aktivieren = false # Mit dieser Option braucht man nicht immer die Waffe zu wechseln um ein "Push Key" Event zu starten. [x]
        @option_allow_weapon_change = true # Gibt an, ob die Waffe gewechselt werden darf
        @option_quake_sounds = [true,
         RPG::AudioFile.new('double',100,100),
         RPG::AudioFile.new('multi',100,100),
         RPG::AudioFile.new('ultra',100,100),
         RPG::AudioFile.new('monster',100,100)]
        @option_automatisches_nachladen = true # Gibt an, ob automatisch nachgeladen werden soll, wenn das Magazin leer ist.
        @option_hud_sichtbar = [false,true] # Gibt an, ob der HUD mit HP und Ammo Anzeige Sichtbar sein soll. Der 2. Wert steht für den Nachladebalken
        # Die Waffenzusammenstellung die man am Anfang des Spiels hat. Der nil wert ist für Waffe wegstecken.
        @waffe = [1,nil,
        {'Name' => 'Pistole', 'Munition' => '/', 'Magazin' => 15},
       # {'Name' => 'Deagle', 'Munition' => 30, 'Magazin' => 7},
        {'Name' => 'Shotgun', 'Munition' => 300, 'Magazin' => 1}
        ]
        @actor = 1 # Heldennummer (für z.B. HP Berechnung)
        @actor_graphic = 'player_normal_SICHERUNG' # Heldengrafik, als Figur ohne Waffe
        @waffenwechselsound = RPG::AudioFile.new('Waffe_wechsel',100,100)
        @leere_waffe_sound = RPG::AudioFile.new('leer',100,100)
        @standard_blut = [25,26,27,28]
        @spinne_blut = [109,109,109,109]
        @robospinne_blut = [33,33,33,33]
        
        @nachladetasten = [0,0,0]  # "R" - "Alt" - "Shift"
        
        @key_strafe = 65 # Strafelauf ist auf Taste A. Um Strafen zu deaktivierten nil nehmen
        @key_medikit = 0 # Medikit benutzen ist auf Taste S.
        @key_granate = 68 # Granate werfen ist auf Taste D.
        @key_mine = 0 # Mine legen ist auf Taste Q.
        @key_sprinten = 0 # Sprinten auf STRG.
        
        @sprinten_max = 100
        @sprinten = @sprinten_max
        @heal_power = 50
        @granate_power = [12,2] # Schaden, Radius
        @mine_power = [19,3] # Schaden, Radius
        @items = Hash.new(0) # Speichert zusätzliche Items. zB Medikits
        @event_database = 134 # Die Map wo Events wie Granaten gespeichert sind
        @movement_8_way = true
        
        @skills = [ ['HP','$game_actors[$MSS.actor].maxhp',100,50],  # Name, Wert, Preis, Steigerung
        ['Sprinten','$MSS.sprinten_max',50,20],
        ['Granatenschaden','$MSS.granate_power[0]',50,1],
        ['Minenschaden','$MSS.mine_power[0]',50,1] ]
        #===Ini===# (Hier bitte nichts verändern, wenn ihr euch nicht mit RGSS auskennt^^
        ini_waffen
        ini_gegner
        ini_statistik
        @waffe_aktuell = @waffe[@waffe[0]]
        @events = {'Gegner' => [],'Hindernis' => [], 'ID' => []}
        @key = Keys.new
        @wait = 0
        @schussrate = 0
        @hud_boss = nil
        @hud_boss_active = nil
      end
          attr_accessor :option_hud_sichtbar
      # VORSICHT!
      # Diese Daten werden beim Spielstand mitgespeichert (Da man diese Werte ja auch
      # während des Spiels verändern (Pimpen =) ) kann. Also Änderungen wirken sich
      # nur auf Neue Spiele aus
      
      def ini_waffen
        @waffen_atr = {
        'Pistole' => {
          'Schaden' => 1,
          'Schusssound' => RPG::AudioFile.new('Pistole',100,100),
          'Nachladesound' => RPG::AudioFile.new('Pistole Nachladen',100,100),
          'Nachladezeit' => 80,         # Nachladezeit in Frames. Bei 40 Frames pro Sekunde also hier 2 Sekunden.
          'Magazin' => 15,
          'Schussrate' => nil,          # Bei nicht automatischen Waffen "nil" hinschreiben. Ansonsten die Frame Wartezeit
          'Spielergrafik' => 'player_pistole',
          'Mündungsfeuer' => [1,2,3,29]  # Wenn keine Animation sein soll einfach "nil" (ohne Anführungszeichen) schreiben! Die Zahlen im Array stehen für die Animations ID in dieser Reihenfolge: [Unten, Links, Rechts, Oben]. Die ID "0" steht für keine Animation!
         },
         
        'Deagle' => {
          'Schaden' => 4,
          'Schusssound' => RPG::AudioFile.new('Deagle',100,100),
          'Nachladesound' => RPG::AudioFile.new('Deagle Nachladen',100,100),
          'Nachladezeit' => 75,
          'Magazin' => 7,
          'Schussrate' => nil,
          'Spielergrafik' => 'Deagle',
          'Mündungsfeuer' => [5,6,7,0]
         },
        
        'MP5' => {
          'Schaden' => 2,
          'Schusssound' => RPG::AudioFile.new('MP5',100,100),
          'Nachladesound' => RPG::AudioFile.new('MP5 Nachladen',100,100),
          'Nachladezeit' => 90,
          'Magazin' => 30,
          'Schussrate' => 3,
          'Spielergrafik' => 'MP5',
          'Mündungsfeuer' => [8,9,10,0]
         },
         
         'Colt' => {
          'Schaden' => 7,
          'Schusssound' => RPG::AudioFile.new('Colt',100,100),
          'Nachladesound' => RPG::AudioFile.new('Colt Nachladen',100,100),
          'Nachladezeit' => 125,
          'Magazin' => 6,
          'Schussrate' => nil,
          'Spielergrafik' => 'Colt',
          'Mündungsfeuer' => [11,12,13,0]
         },
         
         'M4' => {
          'Schaden' => 4,
          'Schusssound' => RPG::AudioFile.new('M4',100,100),
          'Nachladesound' => RPG::AudioFile.new('M4 Nachladen',100,100),
          'Nachladezeit' => 75,
          'Magazin' => 30,
          'Schussrate' => 4,
          'Spielergrafik' => 'M4',
          'Mündungsfeuer' => [14,15,16,0]
         },
         
        'Dual' => {
          'Schaden' => 1,
          'Schusssound' => RPG::AudioFile.new('Pistole',100,100),
          'Nachladesound' => RPG::AudioFile.new('Dual Nachladen',100,100),
          'Nachladezeit' => 135,
          'Magazin' => 30,
          'Schussrate' => nil,
          'Spielergrafik' => 'Dual',
          'Mündungsfeuer' => [40,41,42,43],
          'Spezial_Schuss' => 'dual_feuerwechsel'
         },
         
        'MG' => {
          'Schaden' => 6,
          'Schusssound' => RPG::AudioFile.new('MG',100,100),
          'Nachladesound' => RPG::AudioFile.new('MG Nachladen',100,100),
          'Nachladezeit' => 233,
          'Magazin' => 100,
          'Schussrate' => 5,
          'Spielergrafik' => 'MG',
          'Mündungsfeuer' => [17,18,19,0],
          'Spezial_Anlegen' => 'schwere_waffe',
          'Spezial_Ablegen' => 'schwere_waffe(false)'
         },
         
         'Shotgun' => {
          'Schaden' => 50,
          'Schusssound' => RPG::AudioFile.new('Shotgun',100,100),
          'Nachladesound' => RPG::AudioFile.new('Shotgun Nachladen',100,100),
          'Nachladezeit' => 65,
          'Magazin' => 1,
          'Schussrate' => nil,
          'Spielergrafik' => 'player_shotgun',
          'Mündungsfeuer' => [20,21,22,23]
         }
        }
        
      end
      
      def ini_gegner
        @gegner_atr = {
        'Bandit' => {
          'Schaden' => 15,
          'HP' => 10,
          'Trefferanimation' => 4,
          'Spezial' => nil,            # Dieser String wird beim Treffen des Eventes mit "eval" ausgeführt
          'Blut' => @standard_blut,     # Ein Array mit den Blutanimationen, ähnlich dem Mündungsfeuer bei den Waffen. Weil ich oft das gleiche Blut benutze, hab ich oben einen Array mit dem Standardblut gemacht
          'Kugeldurchlässig' => true
          },
         'Biene' => {
          'Schaden' => 20,
          'HP' => 4,
          'Trefferanimation' => 4,
          'Spezial' => '!A! hitsound("089-Attack01","089-Attack01")',
          'Blut' => @spinne_blut,
          'Kugeldurchlässig' => false
          },
         'Robospinne' => {
          'Schaden' => 20,
          'HP' => 4,
          'Trefferanimation' => 4,
          'Spezial' => '!A! hitsound("089-Attack01","089-Attack01")',
          'Blut' => @robospinne_blut,
          'Kugeldurchlässig' => false
          },      
          'Glas' => {
          'Schaden' => 0,
          'HP' => 1,
          'Trefferanimation' => 4,
          'Spezial' => nil,
          'Blut' => nil,
          'Kugeldurchlässig' => true
          },
          'Schiessender Gegner' => {
          'Schaden' => 100,
          'HP' => 10,
          'Trefferanimation' => 4,
          'Spezial' => nil, #"print ('Hey, du sollst mich nicht abschiessen! Ich bin nur ein Beispiel für einen Schiessenden Gegner und das Spezial Attribut ;-)');return",
          'Blut' => @standard_blut, #nil,
          'Kugeldurchlässig' => true
          },
          'Goblin' => {
          'Schaden' => 1,
          'HP' => 9999,
          'Trefferanimation' => 4,
          'Spezial' => nil,
          'Blut' => @standard_blut,
          'Kugeldurchlässig' => true
          },
          
         'Endgegner' => {
          'Schaden' => 100,
          'HP' => 300,
          'Trefferanimation' => 4,
          'Spezial' => nil,
          'Blut' => @standard_blut,
          'Kugeldurchlässig' => false
          },
          
         'Stampfi' => {
          'Schaden' => 100,
          'HP' => 1500,
          'Trefferanimation' => 4,
          'Spezial' => nil,
          'Blut' => [48,49,50,51],
          'Kugeldurchlässig' => false
          }
         }
       end
       
       def ini_statistik
         @statistik = {
         'Schuesse' => 0,
         'Treffer' => 0,  # Noch nicht programmiert!
         'Gegner' => 0,
         'Multikill' => 0,
         'Verlorene HP' => 0,
         'Zugefuegter Schaden' => 0
         }
       end
       
       def ini_events # Event erkennung. Bitte nur Ändern wenn ihr euch mit RGSS auskennt^^
         @events = {'Gegner' => [],'Hindernis' => [], 'ID' => []}
         begin
         for ev in $game_map.events.values
           case $game_map.map.events[ev.id].name.downcase
            when 'gegner'
              if ev.list[0].code == 108
               komm = $game_map.events[ev.id].list[0].parameters.pop
               if @gegner_atr[komm] == nil
                  print ("Bei dem Gegner mit der ID #{ev.id} wurde eine Monsterklasse angegeben, die nicht existiert.") if $DEBUG
                  next
                end
             else return
             end
              @events['Gegner'].push({'id' => ev.id, 'Klasse' => komm,
              'HP' => @gegner_atr[komm]['HP']})
              @events['ID'][ev.id] = @events['Gegner'].size - 1
              
            when 'spezial'
              if ev.list[0].code == 108
               komm = $game_map.events[ev.id].list[0].parameters.pop
             else 
               print ("Bei dem Spezialevent mit der ID #{ev.id} wurde kein Spezialaufruf gefunden.") if $DEBUG
               next
             end
            @events['Gegner'] << {'id' => ev.id, 'Spezial' => komm}
            @events['ID'][ev.id] = @events['Gegner'].size - 1
             
            when 'hindernis'
              @events['Hindernis'].push(ev.id)
               
            when 'flaches event'
              $game_map.events[ev.id].flat = true
           end
         end
       rescue StandardError, SyntaxError
         p ev
        end
       end
     end
    MSS: Update (Hier wird change_weapon standardmäßig aufgerufen)
    Code:
    class Scene_Map
      alias :mss_map_ini_original :initialize if $MSS.nil?
      def initialize
        mss_map_ini_original 
        $MSS.ini_hud
      end
    
      alias :mss_map_update_original :update if $MSS.nil?
      def update
        $MSS.update if $MSS.active
        mss_map_update_original
      end
    end
    
    class Window_Message
      alias :mss_dispose_original :dispose if $MSS.nil?
      def dispose
        mss_dispose_original
        $MSS.dispose
      end
    end
    
    class MSS
      def update
       return if $game_temp.message_window_showing
       $game_player.direction_fix = @key.getkey_id(@key_strafe) unless @key_strafe.nil?
       if @wait > 0
           @wait -= 1
           @hud_laden.refresh unless @hud_laden.nil?
           if @wait == 0
             $game_system.menu_disabled = false
             @hud_laden.dispose unless @hud_laden.nil?
             @hud_laden = nil
           end
           return
       end
       if @schussrate > 0
        @schussrate -= 1 
        return
      end
    
       # Sprinten
       if @sprinten_akt == true and @key.getkey_id(@key_sprinten) and @sprinten > 0
        @sprinten -= 1
        @hud_energie.refresh(@sprinten) if Graphics.frame_count % 2 == 0
        return
       elsif @sprinten_akt == true
        $game_player.move_speed -= 1
        @sprinten_akt = false
       end
      
       if @key.getkey_id(@key_sprinten) and @sprinten > 20
        @sprinten_akt = true 
        $game_player.move_speed += 1
        @hud_energie = MSS_HUD_ENERGIE.new(@sprinten_max) if @sprinten == @sprinten_max
       elsif @sprinten < @sprinten_max
        if Graphics.frame_count % ($game_player.moving? ? 6 : 3) == 0
         @sprinten += 1
         @hud_energie.refresh(@sprinten)
        end
       elsif @sprinten == @sprinten_max and !@hud_energie.nil?
        @hud_energie.dispose
        @hud_energie = nil
      end
      # /
      
      use_medikit if @key.getkey_id(@key_medikit)
      granate_wefen if @key.getkey_id(@key_granate)
      mine_legen if @key.getkey_id(@key_mine)
      
      if @key.getkey_id(69) # E
        granate_wefen(4,2)
        granate_wefen(4,4)
        granate_wefen(4,6)
        granate_wefen(4,8)
      end
      
       if @waffe_aktuell != nil
        if @waffen_atr[@waffe_aktuell['Name']]['Schussrate'].nil?
         schuss if Input.trigger?(Input::C)
       elsif @key.getkey_id(13) or @key.getkey_id(32)
        schuss
        @schussrate = @waffen_atr[@waffe_aktuell['Name']]['Schussrate']
       end
      end
    
      if @option_allow_weapon_change
        for taste in 0..@waffe.size - 2
          if @key.getkey_id(49+taste) and @waffe[0] != taste+1
          change_weapon(taste+1)
        end
       end
      end
      
       for taste in @nachladetasten
         nachladen if @key.getkey_id(taste)
       end
     end
    
     def dispose
       if @hud.is_a?(MSS_HUD)
          @hud.dispose
          @hud = nil
       end
       if @hud_laden.is_a?(MSS_HUD_LADEN)
          @hud_laden.dispose
          @hud_laden = nil
       end
       if @hud_boss.is_a?(MSS_HUD_BOSS)
          @hud_boss.dispose
          @hud_boss = nil
       end
        
       if !@hud_energie.nil?
          @hud_energie.dispose
          @hud_energie = nil 
      end
     end
     
     def ini_hud
      @hud = @option_hud_sichtbar[0] ? MSS_HUD.new : MSS_HUD_Dummy.new
      boss(true,@hud_boss_active[0],@hud_boss_active[1],true) if @hud_boss_active.is_a?(Array)
      @hud_energie = MSS_HUD_ENERGIE.new(@sprinten_max, false) unless @sprinten == @sprinten_max
     end
    end
    MSS: HUD
    Code:
    class MSS_HUD < Window_Base
     def initialize
      super(0, 0, 220, 85)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.back_opacity = 155
    
        refresh
      end
      
      def refresh
        self.contents.clear
        actor = $game_actors[$MSS.actor]
        self.contents.font.color = Color.new (200, 204, 300, 255)
        self.contents.draw_text(-1, -7, 180, 32, "HP: #{actor.hp} | #{actor.maxhp}")
        if $MSS.waffe_aktuell == nil
          muni = '/'
        else
          muni = "#{$MSS.waffe_aktuell['Magazin']} | #{$MSS.waffe_aktuell['Munition']}"
        end
        self.contents.draw_text(-1, 25, 180, 32, "Munition: #{muni}")
    
      end
      
     # def dispose
       # @items.dispose
       # super
     # end
    end
    
    
    
    class MSS_HUD_LADEN < Window_Base
      def initialize(max)
        @farbe_hintergrund = Color.new(155,155,155,100)
        @farbe_balken_innen = Color.new(0,0,255,160)
        @farbe_balken_rand = Color.new(20,20,20,200)
        super(-17, 70, 160, 50)
        self.contents = Bitmap.new(width-32, height-32)
        self.opacity = 0
        self.contents.clear
        self.contents.fill_rect(11, 2, 110, 15, @farbe_hintergrund)
        @max = max
        refresh
      end
      def refresh
        lo = 100 - $MSS.wait * 100 / @max
        self.contents.fill_rect(16, 4, lo, 10, @farbe_balken_innen)
        self.contents.fill_rect(15, 4, 1, 11, @farbe_balken_rand)
        self.contents.fill_rect(16, 4, lo, 1, @farbe_balken_rand)
        self.contents.fill_rect(16, 14, lo, 1, @farbe_balken_rand)
        self.contents.fill_rect(16 + lo, 4, 2, 11, @farbe_balken_rand)
      end
      
      def dispose
        super unless self.disposed?
      end
    end
    
    class MSS_HUD_ENERGIE < Window_Base
      def initialize(max, new=true)
        @farbe_hintergrund = Color.new(155,155,155,155)
        @farbe_balken_innen = Color.new(0,0,255,255)
        @farbe_balken_rand = Color.new(0,0,0,255)
        super(470, 105, 160, 50)
        self.contents = Bitmap.new(width-32, height-32)
        self.opacity = 0
        self.contents.clear
        @max = max
        refresh(max) if new
      end
      def refresh(value)
        lo = value * 100 / @max
        self.contents.clear
        self.contents.fill_rect(11, 2, 110, 15, @farbe_hintergrund)
        self.contents.fill_rect(16, 4, lo, 10, @farbe_balken_innen)
        self.contents.fill_rect(15, 4, 1, 11, @farbe_balken_rand)
        self.contents.fill_rect(16, 4, lo, 1, @farbe_balken_rand)
        self.contents.fill_rect(16, 14, lo, 1, @farbe_balken_rand)
        self.contents.fill_rect(16 + lo, 4, 2, 11, @farbe_balken_rand)
      end
      
      def dispose
        super unless self.disposed?
      end
    end
    
    class MSS_HUD_BOSS < Window_Base
      def initialize(id,name)
        super(175, 420, 360, 100)
        self.contents = Bitmap.new(width-32, height-32)
        self.opacity = 0
        @farbe_hintergrund = Color.new(155,155,155,155)
        @farbe_balken_rand = Color.new(0,0,0,255)
        $MSS.hud_boss_active = [id,name]
        @name = name
        @int = $MSS.id_to_int(id)
        refresh
      end
      def refresh
        @lo = $MSS.events['Gegner'][@int]['HP'] * 300 /
        $MSS.gegner_atr[$MSS.events['Gegner'][@int]['Klasse']]['HP']
        ecolor = Color.new(10, 255, 10, 255)  if @lo > 139   # Grün
        ecolor = Color.new(250, 250, 10, 255) if @lo < 140   # Gelb
        ecolor = Color.new(255, 10, 10, 255)  if @lo < 60    # Rot
        if @lo == 0
         $MSS.boss(false,0,"",true)
         return
        end
        self.contents.clear
        self.contents.fill_rect(11, 2, 310, 25, @farbe_hintergrund)
        self.contents.fill_rect(16, 4, @lo, 20, ecolor)
        self.contents.fill_rect(15, 4, 1, 21, @farbe_balken_rand)
        self.contents.fill_rect(16, 4, @lo, 1, @farbe_balken_rand)
        self.contents.fill_rect(16, 24, @lo, 1, @farbe_balken_rand)
        self.contents.fill_rect(16+@lo, 4, 1, 21, @farbe_balken_rand)
        self.contents.draw_text(0, -3, 330, 32,@name,1)
      end
    end
    
    class MSS_HUD_Dummy
      def update  ;end
      def refresh ;end
      def dispose ;end
    end
    MSS: Code (Hier befindet sich die def change_weapon)
    Code:
    class MSS
      attr_accessor :waffen_atr, :waffe_aktuell, :gegner_atr, :active, 
      :statistik, :waffe, :events, :actor, :key, :hud, :wait, :ziel,
      :hud, :hud_laden, :hud_boss, :hud_boss_active, :option_events_aktivieren,
      :option_allow_weapon_change, :option_quake_sounds, :option_automatisches_nachladen,
      :items, :actor_graphic, :heal_power, :sprinten_max, :granate_power, :mine_power,
      :movement_8_way, :skills
      def schuss(taeter=$game_player,ziel='Events',abfrage=false,spezial=true)
       @taeter = taeter; @ziel = ziel
       @taeter = $game_map.events[@taeter] if @taeter.is_a?(Integer)
       @hx = @taeter.x
       @hy = @taeter.y
       @hd = @taeter.direction
       
       if @ziel == 'Events'
        if not @waffe_aktuell['Magazin'] > 0
         $game_system.se_play(@leere_waffe_sound)
         return
       end
        spezschuss = @waffen_atr[@waffe_aktuell['Name']]['Spezial_Schuss']
        eval(spezschuss) unless spezschuss.nil?
        $game_system.se_play(@waffen_atr[@waffe_aktuell['Name']]['Schusssound'])
        @statistik['Schuesse'] += 1
        @waffe_aktuell['Magazin'] -= 1
        @hud.refresh
        if @waffen_atr[@waffe_aktuell['Name']]['Mündungsfeuer'] != nil
          $game_player.animation_id = @waffen_atr[@waffe_aktuell['Name']]['Mündungsfeuer'][$game_player.direction / 2 - 1]
        end
        @killed = 0; @int = 0
        treffer?
        quake_sound
        nachladen if @waffe_aktuell['Magazin'] == 0 and @option_automatisches_nachladen
        elsif @ziel == 'Player'
          treffer?
        end
      end
      
      def quake_sound
       @statistik['Multikill'] = @killed if @killed > @statistik['Multikill']
       if @killed > 1 and @option_quake_sounds[0]
         if @killed > @option_quake_sounds.size then sound = @option_quake_sounds.size else sound = @killed end
         $game_system.se_play(@option_quake_sounds[sound-1])
       end
      end
      
      def treffer?
        case @hd
         when 2 # Runter
          start = @hy + 1
          ende = $game_map.height
          counter = 1
          vari = 1 # Y
         when 4 # Links
          start = @hx - 1
          ende = -1
          counter = -1
          vari = 0 # X
         when 6 # Rechts
          start = @hx + 1
          ende = $game_map.width
          counter = 1
          vari = 0
         when 8 # Hoch
          start = @hy - 1
          ende = -1
          counter = -1
          vari = 1
        end
        x, y = @hx, @hy
        tile = start
        while tile != ende
          if vari == 0
            x = tile
          else
            y = tile
          end
          break if $game_map.passable?(x,y,0) == false and @undurchlässiges_terrain.include?($game_map.terrain_tag(x,y)) == false
          @id = $game_map.id_coordinates(x,y)
          break if @events['Hindernis'].include?(@id)
          if @ziel == 'Player'
           if @id == 0
             getroffen 
             return
           end
           tile += counter
           next
          end
          @int = id_to_int(@id)
          if @id > 0 and @int != nil and @events['Gegner'][@int] != nil and 
          $game_self_switches[[$game_map.map_id, @id, 'A']] == false
             getroffen
             break if @events['Gegner'][@int]['HP'] != nil and 
             not @gegner_atr[@events['Gegner'][@int]['Klasse']]['Kugeldurchlässig']
          end
          tile += counter
        end
      end
      
      def getroffen
        if @ziel == 'Player'
          gegner_schlag(@taeter.id)
          return
        end
    
        spezial = @events['Gegner'][@int]['Spezial']
        unless spezial.nil?
          eval(spezial)
          return
        end
        
        spezial = @gegner_atr[@events['Gegner'][@int]['Klasse']]['Spezial']
        if !spezial.nil?
         aftereval = spezial.include?('!A!')
         eval(spezial) unless aftereval
        end
      
       schaden = @waffen_atr[@waffe_aktuell['Name']]['Schaden']
       
       make_damage(@id,schaden,blut_animation(@id,@hd))
       @store_direction #ssssssssssssssssssssssss
       eval(spezial.gsub('!A!','')) if aftereval
       @restore_direction #ssssssssssssssssssssssss
      end
      
      def nachladen
        return if @waffe_aktuell.nil?
        magazin_max = @waffen_atr[@waffe_aktuell['Name']]['Magazin']
        magazin = @waffe_aktuell['Magazin']
        munition = @waffe_aktuell['Munition']
        noetig = magazin_max - magazin
        return if magazin == magazin_max
        return if munition == 0
        if munition == '/'
          magazin = magazin_max
        else
          if munition + magazin >= magazin_max
          munition -= noetig
          magazin = magazin_max
        else
          magazin += munition
          munition = 0
         end
        end
        @waffe_aktuell['Magazin'] = magazin
        @waffe_aktuell['Munition'] = munition
        $game_system.se_play(@waffen_atr[@waffe_aktuell['Name']]['Nachladesound'])
        wait_balken(@waffen_atr[@waffe_aktuell['Name']]['Nachladezeit'])
        @hud.refresh
      end
      
      def gegner_schlag(id)
    int = id_to_int(id)
        schaden = @gegner_atr[@events['Gegner'][int]['Klasse']]['Schaden']
        $game_actors[@actor].hp -= schaden
        @statistik['Verlorene HP'] += schaden
        $game_player.animation_id = 
        @gegner_atr[@events['Gegner'][int]['Klasse']]['Trefferanimation']
      end
      
      def dead?(id)
        return true if @events['Gegner'][id_to_int(id)]['HP'] == 0
        return false
      end
      
      def all_dead?
        ins = 0;@events['Gegner'].each { |g| ins += g['HP'] if !g['HP'].nil?}
        return true if ins == 0
        return false
      end
      
      def kill(id)
        id = [id] if id.is_a?(Numeric) 
        for i in id
         @events['Gegner'][id_to_int(i)]['HP'] = 0
         change_local_switch(i)
        end
      end
      
      def kill_all
       @events['ID'].each_index {|i|int = id_to_int(i);kill(i) if !int.nil? and !@events['Gegner'][int]['HP'].nil?}
      end
      
      def heal(id)
        id = [id] if id.is_a?(Numeric)
        for i in id
         int = id_to_int(i)
         @events['Gegner'][int]['HP'] = 
         @gegner_atr[@events['Gegner'][int]['Klasse']]['HP']
         change_local_switch(i,false)
        end
      end
      
      def heal_all
        @events['ID'].each_index {|i|int = id_to_int(i);heal(i) if !int.nil? and !@events['Gegner'][int]['HP'].nil?}
      end
      
      def add_ammo(name,ammo)
        @waffe[find_weapon_slot(name)]['Munition'] += ammo
      end
      
      def add_weapon(name,munition=300,magazin=30,id=0,double=false)
        return if !double and find_weapon_slot(name) != @waffe.size
        hash = {'Name' => name, 'Munition' => munition, 'Magazin' => magazin}
        if id == 0 then @waffe << hash else @waffe[id] = hash ;end
      end
      
      def remove_weapon(name)
        if name.is_a?(String)
         @waffe.delete_at(find_weapon_slot(name))
       else
         @waffe.delete_at(name)
        end
      end
      
      def find_weapon_slot(name='')
        name.to_s
        @waffe.each_with_index do |waffe,index|
          next if index < 2
          return index if name == waffe['Name']
        end
        return @waffe.size
      end
      
      def boss(show=true,id=1,name='',menu=false)
        @hud_boss.dispose if @hud_boss_active.is_a?(Array) and menu == false
        if show
         @hud_boss = MSS_HUD_BOSS.new(id,name)
         @hud_boss_active = [id,name]
        else
         @hud_boss.dispose
         @hud_boss = nil
         @hud_boss_active = nil
       end
     end
     
     def change_weapon(id=2)
       unless @waffe_aktuell.nil?
         spezab = @waffen_atr[@waffe_aktuell['Name']]['Spezial_Ablegen']
         eval(spezab) unless spezab.nil?
       end
       if @waffe[id].nil?
         $game_actors[@actor].set_graphic(@actor_graphic, 0, '', 0)
        else
         $game_actors[@actor].set_graphic(@waffen_atr[@waffe[id]['Name']]['Spielergrafik'], 0, '', 0)
         spezan = @waffen_atr[@waffe[id]['Name']]['Spezial_Anlegen']
         eval(spezan) unless spezan.nil?
       end
       $game_system.se_play(@waffenwechselsound)
       @waffe[0] = id
       @waffe_aktuell = @waffe[@waffe[0]]
       @hud.refresh
       $game_player.refresh
     end
     
     def change_local_switch(id,value=true,switch='A',map=$game_map.map_id)
      for i in id.to_a
       $game_self_switches[[map, i, switch]] = value
      end
      $game_map.need_refresh = true
     end
    
      def option_hud_sichtbar(hud=true,balken=true)
        @option_hud_sichtbar = [hud,balken]
        @hud.dispose
        if hud
          @hud = MSS_HUD.new
        else
          @hud = MSS_HUD_Dummy.new
        end
      end
      
      def make_saveable
        dispose
        @key = nil
      end
      
      def make_playable
        @key = Keys.new
      end
       
      def make_damage(id,schaden,ani=0)
        return if $game_self_switches[[$game_map.map_id, id, 'A']]
        int = id_to_int(id)
        @events['Gegner'][int]['HP'] -= schaden
        @statistik['Zugefuegter Schaden'] += schaden
        $game_map.events[id].animation_id = ani
        if @events['Gegner'][int]['HP'] <= 0
         @statistik['Zugefuegter Schaden'] += @events['Gegner'][int]['HP']
         @events['Gegner'][int]['HP'] = 0
         change_local_switch(id)
         @statistik['Gegner'] += 1
         @killed += 1
       end
       @hud_boss.refresh if @hud_boss_active.is_a?(Array) and @hud_boss_active[0] == id
     end
      
      def wait_balken(wait)
        return if @wait > 0
        @wait = wait
        $game_system.menu_disabled = true
        @hud_laden = @option_hud_sichtbar[1] ? MSS_HUD_LADEN.new(wait) : MSS_HUD_Dummy.new
      end
      
      def items_add(wert, key)
        $MSS.items[key] += wert
        @hud.refresh
      end
      
      def direction(x1,y1,x2,y2)
        x, y = x2 - x1, y2 - y1
        return -1 if x == 0 and y == 0
        if x.abs > y.abs
         return x > 0 ? 4 : 6
        else
         return y > 0 ? 8 : 2
       end
      end
     
      def blut_animation(id,d)
       blut = @gegner_atr[@events['Gegner'][id_to_int(id)]['Klasse']]['Blut']
       return blut.nil? ? 0 : blut[d / 2 - 1]
      end
     
      def id_to_int(id)
        return @events['ID'][id]
      end
     
      def garbage_collector
       $game_map.events.each{|e|$game_map.events.delete(e[1].id) if $game_self_switches[[$game_map.map_id, e[1].id, 'A']]}
      end
      
      def debug
       File.open('MSS.txt','w') {|f|f.write($MSS.inspect)}
      end
    end
    
    class Game_Map
      attr_reader   :map
      alias :mss_original_setup :setup if $MSS.nil?
      def setup(map_id)
        mss_original_setup(map_id)
        $MSS.ini_events
      end
      
      def id_coordinates(x=0,y=0)
        @events.each {|e|return e[1].id if e[1].x == x and e[1].y == y}
        return 0 if $game_player.x == x and $game_player.y == y
        return -1
      end
      
      def id_coordinates_mine(x=0,y=0,id=0)
        @events.each {|e|return e[1].id if e[1].x == x and e[1].y == y and e[1].id != id}
        return -1
      end
      
      def id_coordinates_array(x=0,y=0)
        array = []
        @events.each {|e|array << e[1].id if e[1].x == x and e[1].y == y}
        array << 0 if $game_player.x == x and $game_player.y == y
        return array
      end
      
      def id_rect(rect)
        ev = []
        @events.each {|e|ev << e[1].id if rect.inside?(e[1])}
        return ev
      end
    end
    
    class Game_Character
     attr_accessor :flat
     alias :mss_original_initialize :initialize if $MSS.nil?
     alias :mss_original_screen_z :screen_z if $MSS.nil?
     def initialize
       @flat = false
       mss_original_initialize
     end
     def screen_z(height = 0)
        return 0 if @flat
        mss_original_screen_z(height)
      end
    end
    
    class Keys
      def initialize
        @GetAsyncKeyState = Win32API.new('user32', 'GetAsyncKeyState', 'l','l')
        @keybd_event = Win32API.new('user32', 'keybd_event', %w(l l l l), '')
      end
      def getkey
        for i in 0..255
          if @GetAsyncKeyState.call(i) != 0
            return i
          end
        end
        return 0
      end
      def getkey_id(id)
         if @GetAsyncKeyState.call(id) != 0
           return true
         end
         return false
      end
      def setkey_id_down(id)
        @keybd_event.call(id,0,0,0)
      end
        def setkey_id_up(id)
        @keybd_event.call(id,0,2,0)
      end
    end
    
    class Game_Player < Game_Character
      def update
        last_moving = moving?
        unless moving? or $game_system.map_interpreter.running? or
               @move_route_forcing or $game_temp.message_window_showing
        #==========EDIT===========#
        if $MSS.movement_8_way
          case Input.dir8
          when 1
            move_lower_left
          when 2
            move_down
          when 3
            move_lower_right
          when 4
            move_left
          when 6
            move_right
          when 7
            move_upper_left
          when 8
            move_up
          when 9
            move_upper_right
          end
        else
          case Input.dir4
          when 2
            move_down
          when 4
            move_left
          when 6
            move_right
          when 8
            move_up
          end
        end
        #==========EDIT===========#
        end
        last_real_x = @real_x
        last_real_y = @real_y
        super
        if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
          $game_map.scroll_down(@real_y - last_real_y)
        end
        if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
          $game_map.scroll_left(last_real_x - @real_x)
        end
        if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
          $game_map.scroll_right(@real_x - last_real_x)
        end
        if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
          $game_map.scroll_up(last_real_y - @real_y)
        end
        unless moving?
          if last_moving
            result = check_event_trigger_here([1,2])
            if result == false
              unless $DEBUG and Input.press?(Input::CTRL)
                if @encounter_count > 0
                  @encounter_count -= 1
                end
              end
            end
          end
        #==========EDIT===========#
        if $MSS.active == false or $MSS.waffe_aktuell == nil or $MSS.option_events_aktivieren
          if Input.trigger?(Input::C)
            check_event_trigger_here([0])
            check_event_trigger_there([0,1,2])
            end
          end
        #==========EDIT===========#
        end
      end
    end
    
    class Game_System
      attr_accessor :mss_save
    end
    
    class Game_Character
      attr_accessor :direction_fix
    end
    
    class Rect
      def each
        for xx in x..x + width
          for yy in y..y + height
            yield xx, yy
          end
        end
      end
      
      def inside?(ox,oy=0)
       ox, oy = ox.x, ox.y unless ox.is_a?(Integer)
       return (ox.between?(x, x + width)) && (oy.between?(y, y + height))
      end
    end
    
    class Game_SelfSwitches
      def delete(key)
        @data.delete(key)
      end
    end
    
    class Game_Battler
      alias :mss_hpchange_original :hp= if $MSS.nil?
      def hp=(hp)
        mss_hpchange_original(hp)
        return unless self.is_a?(Game_Actor)
        $MSS.hud.refresh
        $game_temp.gameover = true if @hp == 0
      end
    end
    
    class Scene_Save < Scene_File
      alias :mss_write_save_data_original :write_save_data if $MSS.nil?
      def write_save_data(file)
        $MSS.make_saveable
        $game_system.mss_save = $MSS
        mss_write_save_data_original(file)
        $MSS.make_playable
      end
    end
    
    
    class Scene_Load < Scene_File
      alias :mss_read_save_data_original :read_save_data if $MSS.nil?
      def read_save_data(file)
        mss_read_save_data_original(file)
        $MSS = $game_system.mss_save
        $MSS.make_playable
      end
    end
    
    class Scene_Title
      alias :mss_title_ini_original :initialize if $MSS.nil?
      def initialize
       $MSS = MSS.new
       mss_title_ini_original
     end
    end
    MSS: Spezial
    Code:
    # Hier kann man die Methoden reinschreiben, die bei einem beschossenem 
    # Spezialevent aufgerufen werden sollen. Dies dient ausschließlich der Übersicht.
    # Die hier vorgegebenen Codes sind nur Beispiele und können verändert oder gelöscht
    # werden, dürfen aber natürlich auch einfach benutzt werden :D
    
    class MSS  
      def licht_ausschießen
        change_local_switch(@id)
        Audio.se_play('Audio/SE/glassbreak', 85, 100)
        c = $game_screen.tone
        $game_screen.start_tone_change(Tone.new(c.red-10,c.green-10,c.blue-10,c.gray),0)
      end
      
      def hitsound(sound,kill=nil)
        if dead?(@id)
          $game_system.se_play(RPG::AudioFile.new(kill,100,100)) unless kill.nil?
        else
          $game_system.se_play(RPG::AudioFile.new(sound,100,100))
        end
      end
      
      def explosives_fass
        change_local_switch(@id)
        $game_map.events[@id].animation_id = 29
        explosion(@id,2)
      end
      
      def explosion(id,rad,damage=9)
        @killed = 0
        ev = $game_map.events[id]
        rect = Rect.new(ev.x - rad, ev.y - rad, rad * 2 + 1,rad * 2) # Explosionsradius - Rechteck
        $game_map.id_rect(rect).each do |e|
          next if e == id
         case $game_map.map.events[e].name.downcase
          when 'gegner'
            make_damage(e,damage,blut_animation(e,direction($game_map.map.events[e].x,$game_map.map.events[e].y,ev.x,ev.y))) # id, schaden, animation
          when 'spezial'
    
          end
        end
        quake_sound
      end
      
      def create_rect(rad)
        return 
      end
      
      def schwere_waffe(status=true)
        $game_player.move_speed = status ? $game_player.move_speed - 1 : $game_player.move_speed + 1
      end
      
      def dual_feuerwechsel
        f = @waffen_atr[@waffe_aktuell['Name']]['Mündungsfeuer']
        f = f[0] == 40 ? [44,45,46,47] : [40,41,42,43]
        @waffen_atr[@waffe_aktuell['Name']]['Mündungsfeuer'] = f
      end
      
      def granate_wefen(wurfweite=8,d=$game_player.direction)
        if $MSS.items['Granate'] < 1
         $game_system.se_play($data_system.buzzer_se)
         @wait = 10
         return
        end
        $MSS.items['Granate'] -= 1
        $game_system.se_play(RPG::AudioFile.new('016-Jump02',70,100))
        id = $game_map.add_event(134,1,$game_player.x,$game_player.y) 
        $game_map.need_refresh = true
        $scene.spriteset.refresh
        x,y = granate_entfernung(wurfweite,d)
        $game_map.events[id].jump(x,y)
        wait_balken(40)
        @hud.refresh
      end
      
      def granate_entfernung(wurfweite,d)
        vari = [2,8].include?(d) ? 1 : 0
        counter = [2,6].include?(d) ? 1 : -1
        x,y = $game_player.x, $game_player.y
        while $game_map.passable?(x,y,0)
          if vari == 0 then x += counter else y += counter end
          wurfweite -= 1
          break if wurfweite == 0
        end
        x = vari == 0 ? x - ($game_player.x + counter) : 0
        y = vari == 1 ? y - ($game_player.y + counter) : 0
        return x, y
      end
       
      def use_medikit
        if $MSS.items['Medikit'] < 1 or $game_actors[@actor].hp == $game_actors[@actor].maxhp
         $game_system.se_play($data_system.buzzer_se)
         @wait = 10
         return
        end
        $game_actors[@actor].hp += @heal_power
        $game_player.animation_id = 31
        $MSS.items['Medikit'] -= 1
        @hud.refresh
        wait_balken(20)
      end
      
      def mine_legen
        return if $game_map.id_coordinates_mine($game_player.x,$game_player.y) > 0
        if $MSS.items['Mine'] < 1
         $game_system.se_play($data_system.buzzer_se)
         @wait = 10
         return
        end
        $MSS.items['Mine'] -= 1
        $game_system.se_play(RPG::AudioFile.new('005-System05',70,100))
        id = $game_map.add_event(@event_database,6,$game_player.x,$game_player.y)
        $game_map.need_refresh = true
        $scene.spriteset.refresh
        wait_balken(20)
        @hud.refresh
      end
    end

  4. #4
    Und welcher Teil davon ist das Menü, wo du das eingefügt hast?

  5. #5
    Danke fürs drüber schaun.
    Ganz unten, letzte def:

    Code:
    class Scene_waffen
      def main
        @actor= $game_party.actors[0]
        $data_weapons[@actor.weapon_id]
        @data= []
        @icon_name = []
        @name= []
        @description=[]
        
       get_equip
          @status = Window_status_ausrüstung.new(@actor)
        #  @status.active=false
        @command_window = Window_Ring_Command.new(1,$game_player.screen_x-30, $game_player.screen_y-50, @icon_name, 60)
        @beschreibung_window = Window_beschreibung.new(@name,@description)
        @beschreibung_window.z = 400
        @spriteset = Spriteset_Map.new
        # Main loop
        Graphics.transition
        loop do
          # Update game screen
          Graphics.update
          # Update input information
          Input.update
          # Frame update
          update
          # Abort loop if screen is changed
          if $scene != self
            break
          end
        end
            Graphics.freeze
        # Dispose of command window
        @command_window.dispose
        @beschreibung_window.dispose
        @spriteset.dispose
        @status.dispose
       
      end
      def update
        @command_window.update
        @beschreibung_window.update
      if Input.trigger?(Input::B)
          # Play cancel SE
          $game_system.se_play($data_system.cancel_se)
          # Switch to map screen
          $scene = Scene_Map.new 
          return
        end
    ausrüsten(0)
    if Input.repeat?(Input::	LEFT )
      @command_window.move_left
        $game_system.se_play($data_system.cursor_se)
    unless @command_window.index == 0
        equip
        end
        
      end
      if @command_window.index == 0
        @status.set_new_parameters(nil, nil, nil)
        end
    if Input.repeat?(Input::RIGHT)
     @command_window.move_right
        $game_system.se_play($data_system.cursor_se)
       unless @command_window.index == 0
        equip
        end
      end
      if Input.trigger? (Input::UP)
      $scene = Scene_ausrüstung_body.new
    end
    if Input.trigger? (Input::DOWN)
          $scene = Scene_Menu.new
      end
     #       case Input.dir4
    #  when 4 then @command_window.move_left
     #   $game_system.se_play($data_system.cancel_se)
     # when 6 then @command_window.move_right
     #   $game_system.se_play($data_system.cancel_se)
    
    #end
    #@index = 0
    #while @command_window.index != @index and @command_window.index !=0
     # @index= @command_window.index
    end    
     def equip
       item1=@data[0]
        item2 = @data[@command_window.index]
          @actor.equip(0, @data[@command_window.index].id)
          # Get parameters for after equipment change
          new_atk = @actor.atk
          new_pdef = @actor.pdef
          new_mdef = @actor.mdef
          # Return equipment
          if @data[0] == "nix"
            @actor.equip(2,0)
          else
          @actor.equip(2,item1.id)
          
          end
          # Draw in left window
          @status.set_new_parameters(new_atk, new_pdef, new_mdef)
        #@item1=$data_weapons[@actor.weapon_id]
        #
          #@actor.equip(0, @data[@command_window.index].id)
         
    #    end
          
        end 
        def update_icons
          @data.clear
        @icon_name.clear    
        @name.clear
        @description.clear
        get_equip
        @command_window.update_icons(@icon_name) 
        end
        def get_equip
          if $data_weapons[@actor.weapon_id] == nil
            @data.push("nix")
        @icon_name.push("nix")
        @name.push("")
        @description.push("")
        else
        @data.push($data_weapons[@actor.weapon_id])
        @icon_name.push($data_weapons[@actor.weapon_id].icon_name)
        @name.push($data_weapons[@actor.weapon_id].name)
        @description.push($data_weapons[@actor.weapon_id].description)
        end
        weapon_set = $data_classes[@actor.class_id].weapon_set 
        for i in 1...$data_weapons.size
            if $game_party.weapon_number(i) > 0 and weapon_set.include?(i) and $data_weapons[i] != $data_weapons[@actor.weapon_id] 
              @data.push($data_weapons[i])
              @icon_name.push($data_weapons[i].icon_name)
              @name.push($data_weapons[i].name)
              @description.push($data_weapons[i].description)     
            end
          end
    
          
      
        end
        def ausrüsten(type)
          if Input.trigger?(Input::C)
            $MSS.change_weapon(1)
            $game_system.se_play($data_system.equip_se)
            @actor.equip(type, @data[@command_window.index].id)
          update_icons
          @status.refresh
        end
        end
      end
    Im Endeffekt möchte ich abhängig von der ausgerüsteten Waffe $MSS.change_weapon(ausgerüstete Waffe) aufrufen.
    Ginge also auch über ein Common Event, nicht nur über dieses Menü.

  6. #6
    1. Bitte bitte bitte hör auf, Methoden als "defs" zu bezeichnen, nur weil def das Keyword ist. Danke,

    2. Hast du $MSS.change_weapon denn schon mal einzeln getestet? Sprich du packst es in ein Event auf der Map (Scriptbefehl) und laberst das an.
    2a. Wieso hast du da überhaupt noch ein se_play in ausrüsten (Umlaute in Methodennamen, urgh.), change_weapon sollte doch eh schon einen Sound abspielen, wenn du es aufrufst (was gleichzeitig ein guter Check ist, ob es überhaupt aufgerufen wurde).

  7. #7
    1. Wenn man nicht weiß, dass das Keyword für eine Methode "def" ist, wie soll man es dann richtig bezeichnen?
    Danke, danke, danke fürs Verständnis :P

    2. Hätte man echt auch selbst drauf kommen können das zu probieren, aber jedenfalls klappt es als Script im Event aufgerufen wunderbar.
    Danke vielmals für deine Hilfe!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •