Ergebnis 1 bis 20 von 1418

Thema: Technik-Sammelthread für Probleme und Antworten

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hallo Linkey,

    vielen Dank, dieses Script funktioniert wirklich besser. Ich muss jetzt nur noch auf eine Sache beim Mappen achten (siehe Spoiler), aber sonst ist alles gut.
    Wenn du Zeit, Lust und Güte dafür hast, kannst du dir das vielleicht noch anschauen, aber sonst muss ich einfach etwas ummappen.

    Nochmals: Vielen Dank.

  2. #2
    Ist denn nur der Zaun auf Terrain 7 gestellt oder auch die Baumkrone? Und wie ist das ganze genau gemappt?

  3. #3
    Nur der Zaun. Die Baumkrone ist mittels einem "Above Hero"-Event ohne sonstige Anmerkungen oder Befehlen realisiert worden.

  4. #4
    Hey Agura,

    ich habe es nun so erweitert, dass "above hero" events immer "on top" angezeigt werden:
    Code:
    ##-----------------------------------------------------------------------------
    #  Large Sprite ☆ Display Fix v1.3
    #  Created by Neon Black at request of seita
    #  v1.4 - 12.18.14 - Added position tuning
    #  v1.3 - 1.12.14  - Viewport/position issue fixes
    #  v1.1 - 8.18.13  - Fixed an odd lag issue
    #  v1.0 - 8.17.13  - Main script completed
    #  For both commercial and non-commercial use as long as credit is given to
    #  Neon Black and any additional authors.  Licensed under Creative Commons
    #  CC BY 4.0 - http://creativecommons.org/licenses/by/4.0/
    ##-----------------------------------------------------------------------------
    
    # -- Update: LDT0319
    # -- Date:   2019.03.30
    # -- User:   D.T. Linkey
    # -- Change: Enabled Game_Followers too
    
    ##------
    ## By default, this script only affects the player.  To allow it to affect
    ## an event page as well, add a comment with the tag <large sprite> to the page
    ## of the event you would like to have affected by this.
     
    class Sprite_Character < Sprite_Base
      ##------
      ## The ID of the terrain used to display the large character above ☆ tiles.
      ## If the player is below this tile (y position), the sprite will appear
      ## above all tiles and events from that y position up.  If the player is on
      ## the same tile or above (y position) the event will appear BELOW ☆ tiles
      ## from that position up.
      ##------
      UpperTerrain = 7
     
      ##------
      ## This value is the pixel tuning used to check the location.  This is
      ## because characters tagged with a '!' in their name are drawn lower than
      ## normal characters and are considered to be lower than these.  This causes
      ## the script to think they are on the tile below where they really are and
      ## draw them above tiles they should appear under.
      ##------
      Tuning = -1
     
      alias :cp_011214_update_bitmap :update_bitmap
      def update_bitmap(*args)
        if graphic_changed? && @set_upper_area_sprite
          @force_no_gfx_change = true
        else
          @force_no_gfx_change = false
        end
        cp_011214_update_bitmap(*args)
      end
     
      ## Alias the update method to add in the new graphic check.
      alias :cp_073013_update_pos :update_position
      def update_position(*args)
        cp_073013_update_pos(*args)
        check_encompassed_area if sprite_is_onscreen?
      end
     
      ## Alias the dispose to dispose the upper sprite.
      alias :cp_073013_dispose :dispose
      def dispose(*args)
        @upper_area_sprite.dispose if @upper_area_sprite
        cp_073013_dispose(*args)
      end
     
    #~   ## Alias the graphic changed method to allow the sprite to revent to what it
    #~   ## was during the last frame.  This allows the check to work again.
    #~   alias :cp_073013_graphic_changed? :graphic_changed?
    #~   def graphic_changed?(*args)
    #~     cp_073013_graphic_changed?(*args) || @set_upper_area_sprite
    #~   end
     
      ## Check if the sprite is onscreen.  Reduces redundant drawing.
      def sprite_is_onscreen?
        #LDT0319 enabled game_follower & put "above hero" events always on top
        self.z = 500 if(@character.is_a?(Game_Event) && @character.priority_type >= 2)
        return false if @character.is_a?(Game_Vehicle)
        return false unless @character.is_a?(Game_Player) || @character.is_a?(Game_Follower) || @character.large_sprite
        return false if @character.screen_z >= 200
        top_left, bot_right = get_edge_corner_dis
        return false if top_left[0] > Graphics.width
        return false if top_left[1] > Graphics.height
        return false if bot_right[0] < 0
        return false if bot_right[1] < 0
        return true
      end
     
      ## Get the top left and bottom right positions.
      def get_edge_corner_dis
        top_left = [self.x - self.ox, self.y - self.oy]
        bot_right = [top_left[0] + self.width, top_left[1] + self.height]
        return [top_left, bot_right]
      end
     
      ## Long method that checks each position and draws the upper sprite.
      def check_encompassed_area
        if @set_upper_area_sprite && !@force_no_gfx_change
          old_src = self.src_rect.clone
          self.bitmap = @old_bitmap
          self.src_rect = old_src
        end
        @set_upper_area_sprite = false
        top_left, bot_right = get_edge_corner_dis
        last_x, last_y, copy_region = nil, nil, 0
        map_xd, map_yd = $game_map.display_x * 32, $game_map.display_y * 32
        total_height = (self.height + @character.jump_height).round
        self.width.times do |x|
          xp = map_xd.to_i + top_left[0] + x
          unless xp / 32 == last_x
            last_x = xp / 32
            last_y, copy_region = nil, 0
            total_height.times do |y|
              yp = map_yd.to_i + bot_right[1] + @character.jump_height - y + Tuning
              next if yp.to_i / 32 == last_y
              last_y = yp.to_i / 32
              if last_y == (@character.screen_y + @character.jump_height + Tuning +
                            map_yd).to_i / 32
                break if $game_map.terrain_tag(last_x, last_y) == UpperTerrain
                next
              end
              next if $game_map.terrain_tag(last_x, last_y) != UpperTerrain
              copy_region = [self.height, total_height - y + 1].min
              set_upper_sprite
              break
            end
          end
          next if copy_region == 0
          rect = Rect.new(src_rect.x + x, src_rect.y, 1, copy_region)
          @upper_area_sprite.bitmap.blt(x, 0, self.bitmap, rect)
          self.bitmap.clear_rect(rect)
        end
        if !@set_upper_area_sprite && @upper_area_sprite
          @upper_area_sprite.visible = false
        end
      end
     
      ## Creates the upper sprite that's a copy of the current sprite.
      def set_upper_sprite
        return if @set_upper_area_sprite
        @upper_area_sprite ||= Sprite.new
        @upper_area_sprite.bitmap = Bitmap.new(self.width, self.height)
        props = ["x", "y", "ox", "oy", "zoom_x", "zoom_y", "angle", "mirror",
                 "bush_depth", "opacity", "blend_type", "color", "tone", "visible",
                 "viewport"]
        props.each do |meth|
          @upper_area_sprite.method("#{meth}=").call(self.method(meth).call)
        end
        @upper_area_sprite.z = 200
        @set_upper_area_sprite = true
        @old_bitmap, old_src_rect = self.bitmap, self.src_rect.clone
        self.bitmap = Bitmap.new(@old_bitmap.width, @old_bitmap.height)
        self.bitmap.blt(0, 0, @old_bitmap, @old_bitmap.rect)
        self.src_rect = old_src_rect
      end
    end
     
    class Game_Event < Game_Character
      attr_reader :large_sprite
      
      alias :cp_081713_setup_page_settings :setup_page_settings
      def setup_page_settings(*args)
        cp_081713_setup_page_settings(*args)
        get_large_sprite_conditions
      end
      
      def get_large_sprite_conditions
        @large_sprite = false
        return if @list.nil? || @list.empty?
        @list.each do |line|
          next unless line.code == 108 || line.code == 408
          case line.parameters[0]
          when /<large sprite>/i
            @large_sprite = true
          end
        end
      end
    end

  5. #5
    Hallo Linkey,

    Absolut perfekt, on top, top notch, (insert another "top"-Joke her).
    Vielen, vielen Dank.

  6. #6
    Hallo ich weiß nicht ob ich hier richtig bin, aber ich versuchs einfach mal:
    Wenn ich meine RPGs spiele dann kommt es bei manchen vor, dass der Bildschirm immer mal wieder zwischendrin für einen kurzen Moment schwarz wird nur für 1-2 Sekunden, in Kämpfen kann sich das manchmal auch häufen.

    Ist mein PC dafür zu modern? Früher war das nie so. Leider weiß ich nicht so genau wann es anfing das geht schon ne Weile so.
    Also ich rede von Spielen wie VD, VD2, Der Brief für den König, Zauberer und Prinzessin usw..
    Ich wäre das gerne los.

  7. #7
    Hallo ihr guten Frauen und Männer der Technik, ich habe leider wieder ein Problem. Da ich leider keinerlei Rubyerfahrung habe, kann ich das Problem auch nicht selber lösen.

    Folgendes: Ich verwende den Vx-Ace und das Pop-Up-Message-Script von Yami. Da diese/r allerdings die Scripts nicht mehr aktuell hällt, bzw. diese von der Seite aus nicht mehr zu finden sind, musste ich eine zufällige Version nehmen. Diese hat allerdings noch einen gravierenden Fehler.

    Wie man sehen kann, ist die Textbox wesentlich größer, als sie sein muss. Wenn man sich das ganze im Maker ansieht, habe ich eine Vermutung.

    Ich gehe davon aus, dass es sich um die Befehle handelt welche dafür da sind, um die Textbox über den NPC anzeigen zu lassen und um den Namen in einer seperaten Box dazustellen.
    Anscheinend werden beim berechnen der Textboxbreite ALLE Zeichen mitgenommen, so auch die Befehle.


    Das ist der Ausschnitt vom Script, der die Breite berechnet. Ich weiß, dass man das mit regulären Ausdrücken rausfiltern kann. Wie gesagt, ich habe keine Rubyerfahrung und weiß daher nicht, wie ich das implementieren muss.
    Den regulären Ausdruck kann ich liefern:
    Code:
    \\[a-z]{1,3}[\[<][\w\säöüÄÖÜß]+[\]>]
    Kann mir jemand den kompetent einarbeiten? Wenn das komplette Skript gebraucht, kann ich das gerne liefern.

    Allternativ kann man mir auch einfach die aktuellste Version von Yamis Skript geben. ^^'

    Ich bedanke mich schon mal im Vorraus.

  8. #8
    So, ich hab auch mal wieder eine Frage, zu der Funktion "Shop Processing" im Eventmodus des 2k3.

    Mein Vorhaben:
    Ich habe im Spiel einen Händler erstellt.
    Dieser soll einem nur spezielle Items abkaufen, die sonst kein Händler im Ankauf annehmen würde (in diesem Fall Kristalle und Edelsteine, er ist ein ehemaliger Minenarbeiter).
    Wie kann ich das vom Eventcode her lösen?
    Meine Idee war die Option "Sell Only" zu nehmen, aber dann könnte ich ihm ja auch alles andere verkaufen, was ich nicht will.

    Habt ihr Lösungsvorschläge?

  9. #9
    Mit dem Standard-Shop geht es nicht. Du könntest aber ein eigenes Event schreiben, mit dem die Gegenstände per "Show Choices" verkauft werden können.

  10. #10
    Zitat Zitat von Kelven Beitrag anzeigen
    Mit dem Standard-Shop geht es nicht. Du könntest aber ein eigenes Event schreiben, mit dem die Gegenstände per "Show Choices" verkauft werden können.
    Das ist eine einfache, super Idee! So werde ich es probieren! Danke dir und danke WildGuess!

  11. #11
    Nochmal eine Frage, dieses Mal zum KS vom 2k3... wie kann ich dafür sorgen, dass Gegner im KS nach einer gewissen Situation / Rundenzahl Verstärkung rufen? Stehe gerade irgendwie auf dem Schlauch und finde die Option dafür nicht... :/

  12. #12
    Zitat Zitat von Ben Beitrag anzeigen
    Nochmal eine Frage, dieses Mal zum KS vom 2k3... wie kann ich dafür sorgen, dass Gegner im KS nach einer gewissen Situation / Rundenzahl Verstärkung rufen? Stehe gerade irgendwie auf dem Schlauch und finde die Option dafür nicht... :/
    Du musst den Gegner zuerst ausblenden. Dazu klickst du einfach unter "Troops" mit der rechten Maustaste auf ihn und wählst "Appear Midway" aus. Mit dem Battle Event "Enemy Encounter" lässt du ihn dann während des Kampfes auftauchen. Unter "Conditions" stellst du ein, wann das passieren soll. Willst du ihn z.B. nach 5 Runden auftauchen lassen, machst du ein Häkchen bei "Turn No." und gibst "0x + 5" ein.

  13. #13
    (Ohne Gewähr)
    Ich glaube zwar, dass das im 2k3 möglich, aber aufwendig ist. Hoffentlich hat hier jemand eine bessere Idee.
    Soweit ich weiß, ist der Verkauf immer direkt abhängig von deinem tatsächlichen Inventar. Also muss man direkt das Inventar modifizieren.
    Wenn du unbedingt dss Shopmenü anzeigen willst und das dir den Aufwand Wert ist, würde ich:
    1. Alle Gegenstände im Inventar als Variablen abspeichern,
    2. Alle Gegenstände abseits der Edelsteine entfernen
    3. Nach Verkaufsabschluss alle Gegenstände wieder hinzufügen, abseits der Edelsteine.

    Wenn du das so machst, würde ich noch vorschlagen, dass du die Abwicklung in ein CommonEvent packst, damit du einen schnellen Blick auf den Codewulst hast, wenn du ein neues Item einfügst.

    Andernfalls kannst du dir die Frage stellen, ob der Shopbildschirm überhaupt notwendig ist, gerade im Fall, falls es keinen anderen Nutzen für die Steine geben sollte, als sie zu verkaufen.
    In dem Fall würde:
    1. Einfache Dialogauswahl mit "Edelsteine verkaufen"
    2. "Du hast \[n] viele Rubine, etc gesammelt. Insgesamt bin ich bereit für die Menge x$ zu zahlen"
    3. Alle Edelsteine aus dem Inventar entfernen

    oder so wie Kelven es gerade auch vorgeschlagen hat.

Berechtigungen

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