collapse collapse

 Community


 User Info




Willkommen Gast. Bitte einloggen oder registrieren.

 Partnerseiten

rpgvx.net

Das Forum ist offline

Autor Thema: DirectionFix  (Gelesen 3768 mal)

EusthEnoptEron

  • Gast
DirectionFix
« am: April 28, 2008, 23:42:56 »
Heyho heyho

Ich habe ein kleines Scriptchen geschrieben, mit dem man die Begehbarkeit von Tiles etwas einschränken kann.
Heisst: Man platziert ein Event, haut irgendwo in den Eventnamen einen String im Stil von "\s[olru]" und schon werden die entsprechenden Richtungen geblockt.
o = Oben
u = Unten
r = Rechts
l = Links

Beispiel
Würde man also in den Eventnamen schreiben:
Blockbla \s[o]
... dann wäre das etwa mit der Einstellung im alten Maker vergleichbar:



Script
Das Script ist nur schnell hingepfuscht, weil mich diese groben Einstellungen genervt haben. ;)

Spoiler for Hiden:
#==============================================================================
# ** DirectionFix
#------------------------------------------------------------------------------
#  Ein kleines Script, um gewisse Richtungen zu blockieren. Wurde
#  nur schnell, schnell hingepfuscht. Ich bitte um Verzeihung wegen dem
#  dreckigen Code.
#
#  ** Anwendung
#  Im Namen des Events irgendwo \s[*] eingeben, den Stern dabei mit den Richtungen
#  ersetzen, die blockiert werden sollen.
#  o = von oben kann man nicht mehr auf das Event treten
#  u = von unten kann man nicht mehr auf das Event treten
#  l = von links kann man nicht mehr auf das Event treten
#  r = von rechts kann man nicht mehr auf das Event treten
#
#  ** Sample
#  Heinz \s[r] => quasi rechts neben ihm ist nun eine unsichtbare Wand
#
#  @author Casha/EusthEnoptEron
#  @version 0.5
#==============================================================================

#==============================================================================
# Kleine Methoden um den Caller herauszufinden
#==============================================================================
def caller_method_name
    parse_caller(caller(2).first).last
end

def parse_caller(at)
    if /^(.+?):(\d+)(?::in `(.*)')?/ =~ at
        file = Regexp.last_match[1]
        line = Regexp.last_match[2].to_i
        method = Regexp.last_match[3]
        [file, line, method]
    end
end
#==============================================================================

class Game_Character
  alias dirfix_passable? passable?
  def passable?(x, y)
   
    #Richtung herausfinden
    case caller_method_name
      when 'move_down'
        direction = 'o'
      when 'move_up'
        direction = 'u'
      when 'move_left'
        direction = 'r'
      when 'move_right'
        direction = 'l'
      else
        direction = nil
    end
    #Wenn mein Script sagt, es geht da nicht weiter, dann geht's da auch nicht
    # weiter. Ansonsten wird die Antwort der normalen Methode genommen. Bei false
    # wird meines gar nicht erst aufgerufen.
    if dirfix_passable?(x,y) == true
      return $game_map.passablefromdir?(x,y,direction)
    else
      return false
    end
  end
end
 

class Game_Map
#===============================================================================
# Prueft, ob der Block an (x|y) in der angegebenen Richtung beschritten werden kann.
#-------------------------------------------------------------------------------
# @param Integer x X-Koordinate des zu beschreitenen Blockes
# @param Integer y Y-Koordinate des zu beschreitenen Blockes
# @param Char direction o/u/l/r die Seite, die geblockt wird
#
# @return Boolean ob passierbar oder nicht
#===============================================================================
  def passablefromdir?(x,y,direction)
    #ox, oy etc. sind die Positionen des vorigen Blockes, damit er beidsietig
    # blockiert wird.
    ox = x
    oy = y
    odir = ''
    case direction
      when 'o'
        oy -= 1
        odir = 'u'
      when 'u'
        oy += 1
        odir = 'o'
      when 'l'
        ox -= 1
        odir = 'r'
      when 'r'
        ox += 1
        odir = 'l'
    end
   
    defaultReturn = true
    for event in events_xy(x, y)            # events with matching coordinates
      defaultReturn = event.passable_from(direction) unless defaultReturn == false
    end
    for event in events_xy(ox, oy)            # events with matching coordinates
      defaultReturn = event.passable_from(odir) unless defaultReturn == false
    end
   
    return defaultReturn
  end
end
class Game_Event
 
#==============================================================================
# Gibt zurück, ob das Event von der angegebenen direction passierbar ist.
#------------------------------------------------------------------------------
# @param Char direction o/u/l/r die Seite, die geblockt wird
#
# @return Boolean ob passierbar oder nicht.
#==============================================================================
  def passable_from(direction)
    if direction =~ /[olru]/
      name = @event.name
      possibleDirs = name[/\\s\[([olru]{1,4})\]/]
      if possibleDirs == nil
        return true
      end
      possibleDirs = possibleDirs[/[olru]+/]
      if possibleDirs =~ /[#{direction}]/
        return false
      else
        return true
      end
    else
      return true
    end
  end
end


Schlusswörter
Falls jemand eine bessere Methode hat, bin ich immer offen. Die ganzen Events sind auch keine wirkliche Lösung. =/
Auch wenn schon jemand sowas gemacht hat, wäre ich interessiert zu schauen, wie er es gelöst hat. Lehrreich für die persönliche Weiterentwicklung im Bereich Rubyprogrammierung. ;D
Und natürlich bei Bugs sofort melden, können wohl gut noch ein paar drin sein, da ich noch nicht wirklich Zeit hatte, das Zeug ausgiebig zu testen.
« Letzte Änderung: September 20, 2009, 11:30:32 von EusthEnoptEron »

DirectionFix

Uryuu

  • Gast
DirectionFix
« Antwort #1 am: April 29, 2008, 09:05:55 »
Wow das find ich klasse!
Über die fehlende Funktion hab ich mich gestern noch geärgert. XD
Danke fürs posten :)

DirectionFix

Offline eugene222

  • König der Lügner
  • VX-Meister
  • ****
  • Beiträge: 675
DirectionFix
« Antwort #2 am: April 29, 2008, 14:48:04 »
Hallo, ich verstehe nur leider nicht was das Bringen soll, irgentwie check ich garnichts.
Vielleicht kann mir das jemand erklären?

DirectionFix

Dimidimadmitri

  • Gast
DirectionFix
« Antwort #3 am: April 29, 2008, 14:50:49 »
Also du siehst doch oben das Bild mit den Pfeilchen... das oben ist statt ein Pfeil nur ein Punkt. das heißt wenn du auf dem Feld bist kannst du nur nach links, rechts und unten gehen... also nicht nach unten.... das ist gut wenn man z.b. zu bestimten wegen nicht gehen können soll.

DirectionFix

Offline eugene222

  • König der Lügner
  • VX-Meister
  • ****
  • Beiträge: 675
DirectionFix
« Antwort #4 am: April 29, 2008, 16:16:50 »
achso danke, cool ich kann das aufjeden fall gebrauchen

DirectionFix

Dainreth

  • Gast
DirectionFix
« Antwort #5 am: April 29, 2008, 17:50:53 »
Erster Post von dir und gleich ein interessantes Skript..werde ich auf jeden Fall testen, sollte ich Fehler entdecken sag ich dir natürlich bescheid. Bin mal gespannt, wie's funktioniert!

DirectionFix

Offline Stef-san

  • Eventmeister
  • ***
  • Beiträge: 307
    • Space Live
DirectionFix
« Antwort #6 am: April 29, 2008, 18:40:52 »
finds dumm, dass diese Option nicht mehr im VX ist O.o
warum hat man die ueberhaupt ausgebaut. >_< tz tz

aber gut gemacht Casha xD
Ich hab davon oft gebraucht gemacht.
kann man bsp. bei einem Hausdach nutzen, bei nem Baum oder zaun oder Tuer. ^^
oder enge Wege.

Bsp. kennt ihr ja das Tutorial mit dem Mapping, dort muss man ja 2 Autotiles des gleichen Gebirges nehmen, eins begehbar, das andere nicht.
Koennte man sich sparen mit diesem Script.
wobei das viele Events kosten wuerde.

current projects
Arco Iris - A Fading World
School Days (Co-Project with Klex)

DirectionFix

ERZENGEL

  • Gast
DirectionFix
« Antwort #7 am: April 29, 2008, 22:40:28 »
Als erstes herzlich willkommen ^^

ALso ich finde, dass es sehr gut gecodet wurde. Kommentiert, keine sichtbaren Fehler und eine fehlende Funktion zurückgeholt, auch wenn diese sehr umständlich einzubauen ist und Performancetechnisch eine oder zwei Überlegung/en wert sein dürfte. Freu mich auf weitere so schöne Skripte.

Und falls es dich interessiert, sowas gibt es schon, aber das Skript zerstört für mich die Einfachheit des Mappingsys des VX => http://f44.aaa.livedoor.jp/~ytomy/tkool/rp...leset_extension
« Letzte Änderung: April 29, 2008, 22:41:51 von ERZENGEL »

DirectionFix

EusthEnoptEron

  • Gast
DirectionFix
« Antwort #8 am: April 30, 2008, 17:43:21 »
Vielen Dank alle für das Feedback. :D

Zitat
auch wenn diese sehr umständlich einzubauen ist und Performancetechnisch eine oder zwei Überlegung/en wert sein dürfte.
Ja, stimmt. Aber momentan weiss ich nicht, wie ich es sonst am besten einbaue. Habe schon überlegt, Areas miteinzubinden, für längere gerade Flächen - aber das wäre dann schlechtes Mapping. ;)
Und zum Performancetechnischen gebe ich dir auch Recht. Ich habe mich jetzt nicht so darauf geachtet, werde ich gegebenenfalls noch optimieren.

Und danke auch für den Link. Wie ich sehe hat er die move_DIR Methoden überschrieben. Dem bin ich einfach mit der caller_method_name() Methode ausgewichen. *g*

DirectionFix

Offline xelawebdev

  • Eventmeister
  • ***
  • Beiträge: 306
  • Webdeveloper, Designer
    • [Nicht fertig - Testseite]
DirectionFix
« Antwort #9 am: Mai 03, 2008, 03:53:17 »
Na danke, direction fix script hat mein projekt zerstört... nichts ist mehr bewegbar, kein schiff auch zu fuss net und noch dazu flugschiff... nichts geht nach dem ich eingefügt habe ... auch wenn ich den script lösche passiert nichts -_-

DirectionFix

EusthEnoptEron

  • Gast
DirectionFix
« Antwort #10 am: Mai 03, 2008, 15:48:35 »
Bist du dir sicher, dass du es komplett gelöscht hast ohne andere Scripts mitzureissen?
Komplikationen mit anderen Scripts können vorkommen, mir fehlt halt noch RGSS-Erfahrung. ;]
Aber, dass es dein Projekt zerstört, auch nach der Entfernung, das kann ich mit ziemlicher Sicherheit ausschliessen.
Gib evtl. noch ein paar Informationen, welche Scripts du benutzt. Dann schaue ich mal, ob sich da was mit meinem verhakt. ^^

Bug found ~

Offline ~Koya~

  • Xaru
  • Ralph
  • *
  • Beiträge: 17
  • Streuner
Bug found ~
« Antwort #11 am: September 15, 2009, 17:44:30 »
Da ich das Script mal getestet habe, habe ich ein kleinen "Bug" gefunden. ;)

Der Spieler selbst kann die Richtung zwar nicht passieren, dafür aber ein Event wie z.B. eine Katze.

Gibt es eine Lösung wie ich das verhindern kann?

Sehr altes Thema und ich hoffe, dass mir geholfen werden kann. :)
« Letzte Änderung: Februar 05, 2011, 06:57:37 von ~Koya~ »
Forever Friends.

Re: DirectionFix

Offline Colonios

  • Maker Nerd
  • VX-Kenner
  • ****
  • Beiträge: 596
  • Events <3
Re: DirectionFix
« Antwort #12 am: September 15, 2009, 18:24:02 »
Das kann man aber auch per Event lösen, dafür braucht man nicht das Script...
Ich glaube nicht wirklich, dass der Urheber dieses Scriptes nochmal was verändern wird,
da er nicht mehr Aktiv ist.

Vllt. erbarmt sich ja hier jemand und schreibt das noch rein, aber das Bezweifele ich.

Wenn du fragen zu der Eventtechnick hast, die ich angesprochen habe, dann schreib ins
Schnelle Hilfe Forum.

MfG

DirectionFix

Offline ~Koya~

  • Xaru
  • Ralph
  • *
  • Beiträge: 17
  • Streuner
DirectionFix
« Antwort #13 am: September 15, 2009, 18:53:26 »
Erstmal ein Danke für die schnelle Antwort. :)

Mit Events ist mir das ein bisschen zu umständlich, weil ich dann wieder alles umändern müsste.
Durch das Script kann ich es aber im Eventnamen festlegen. :)
« Letzte Änderung: Februar 05, 2011, 06:57:13 von ~Koya~ »
Forever Friends.

Re: DirectionFix

EusthEnoptEron

  • Gast
Re: DirectionFix
« Antwort #14 am: September 20, 2009, 11:32:14 »
Versuch's nochmal - ich hab den Code geupdated.

Ehrlich gesagt wundere ich mich, dass es mit dem Bug bisher überhaupt funktioniert hat... hatte zu der Zeit wohl zu viel VB im Kopf.

 


 Bild des Monats

rooftop party

Views: 3614
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