Ergebnis 1 bis 15 von 15

Thema: Script Bearbeitungs Hilfe

  1. #1

    Script Bearbeitungs Hilfe

    hi ich brauche hilfe bei einer bearbeitung eines skripts für rmxp.
    hier gibt es das script und eine demo.
    http://forum.chaos-project.com/index...ic,1688.0.html

    da mir niemand in dem forum antwortet probier ichs mal hier ^^

    1.) Ich brauche einen Scriptcall für einen Conditional Branch um abzufragen ob ein bestimmtes job lv erreicht ist...
    beispiel: wenn character 1 job lv 3 erreicht dann ist der branch ok (if characterID1 is warrior lv 3 then ...)

    2.) Ich brauche ein Scriptcall um das Job lv von einem bestimmten character zu erhöhen oder zu senken.
    beispiel: ich will das job lv von characterID1 warrior um 1 erhöhen.
    oder ich will das job lv von character ID7 lancer um 2 verringern usw...


    So das waren die einfachen dinge ^^
    nun zum eingemachten...
    hier gibt es das large party script:
    http://www.rpgrevolution.com/forums/...howtopic=12397
    nunja im standart menü kann man alle partymember sehen auch wenn man zb 8 hat.
    in dem legacy class change menü allerdings nicht, es geht zwar auch weiter runter wie bei dem standart menü
    allerdings sieht man nicht die charactere fonts und co, nur ein leeren balken...
    wäre echt super wenn jemand das so modifizieren könnte das man alle chars sieht.
    falss das irgendwie komisch klingt, einfach mal testen !
    erst das large party script alleine, fügt euerer gruppe 4 eitere oder mehr chars zur party hinzu.
    geht nun ins menü und geht auf equp oder status und geht beim lezten char noch ein weiter runter und man sieht den 5ten char usw.

    nun testet das ganze mal mit legacy class change...
    wie gesagt man kann den 5ten bis xten char zwar einen neuen job gegen allerdings werden sie nicht angezeigt...

    hoffe ich habe nicht verwirrendes zeug gschrieben, aber das passiert mir öfters hahaha
    vielen dank im vorraus für jegliche hilfe
    buddy

  2. #2
    Zu deinem ersten Problem:
    Die Game_Actor class besitzt in dem Script ein array namens @class_levels[], um die Stufe einer bestimmten Klasse für einen bestimmten Charakter zu erhalten musst du also folgenden Code ausführen:
    Code:
    clvl = $game_actors[char_id].class_levels[class_id]
    die lokale Variable "clvl" würde also auf die Stufe der Klasse mit der ID "class_id" für den Charakter mit der ID "char_id" gesetzt werden.
    Bedenke dabei, dass Arrays mit dem ersten Element an der Position 0 beginnen, das heist für die dritte Klasse des ersten Charakters müssten char_id == 0 & class_id = 2 sein.

    Zu deinem zweiten Problem:
    Um die Stufe einer Klasse manuell zu erhöhen ist hier etwas mehr Arbeit gefragt da der Author dafür keine direkte Methode implementiert hat.
    Es scheint jedoch so, dass die Stufe einer Klasse immer dann erhöht wird sobald die Stufe des Charakters steigt.
    Wird die Stufe eines Charakters jedoch verringert so wird die Klassenstufe nicht mit verringert.
    Außerdem werden Fähigkeiten nicht verlernt falls die Stufe verringert wird.
    Behalte diese Informationen im Hinterkopf.
    Wenn du das "Legacy Class Change" Script öffnest findest du an der Zeile 485 bis ca. zur Zeile 600 die Modifikationen welche an der Game_Actor Klasse vorgenommen wurden. Unter anderem das Verhalten bei einem Stufenaufstieg.
    Tauscht du diese Game_Actor Klasse mit dieser Variation hier aus solltest du in der Lage sein die Klassenstufe eines Charakters individuell zu erhöhen.
    Code:
    class Game_Actor < Game_Battler
      attr_accessor :class_levels
      attr_accessor :unlocked_class
      attr_accessor :unlocked_specials
      #attr_accessor :locked_class
      attr_accessor :learned_class_skills
      attr_accessor :character_name
      attr_accessor :default_charset_name
      attr_accessor :battler_name
      attr_accessor :default_battler_name
      
    # modify the actor setup for Legacy Class Change
      alias class_rank_level_LB setup  
      def setup(actor_id)
        class_rank_level_LB(actor_id)
    
    # set up the initial default graphics (used by the graphic change system)
        @default_charset_name = @character_name
        @default_battler_name = @battler_name
    
    # set up the class arrays used by the class changing system.
        @unlocked_class = []
        @unlocked_specials = []
        
    # initialize the array that holds the class specific skills an actor has learned
        @learned_class_skills = []
        
    # set up the class_levels
        @class_levels = Array.new($data_classes.size)    
        
        @class_levels.each_index {|i|
        if i == $data_actors[actor_id].class_id
          @class_levels[i] = 1
        else
          @class_levels[i] = 0
        end}
    
    # initialize unlocked classes.
        (1...$data_classes.size).each{|class_id|
        unlock_class(class_id)}
    
      end
      
    # method used to check if an actor meets the requirements for a class, and if he
    # does, it will unlock the class for that actor
      def unlock_class(class_id)
        if !@unlocked_class.include?(class_id)
          if !LBConf::SPECIAL_CLASS.include?(class_id)
            requirement = LBConf.class_requirements(class_id) 
            result = true
            requirement.each_index {|i|
            if @class_levels[i] < requirement[i] 
              result = false
              break
            end}
          else
            result = false
            if unlocked_specials.include?(class_id)
              result = true
            end
          end
          if result 
            @unlocked_class.push(class_id)
            @unlocked_class.sort!
          end
        end
      end
    
      
    # method used to unlock a special class for an actor.
      def learn_special_class(class_id)
        if !@unlocked_specials.include?(class_id)
          @unlocked_specials.push(class_id)
          @unlocked_specials.sort!
         end
       end
       
    # method used to lock a special class for an actor.   
       def forget_special_class(class_id)
         @unlocked_specials.delete(class_id)
         @unlocked_class.delete(class_id)
         @unlocked_specials.sort!
         @unlocked_class.sort!
      end
    
    # modifies how levelups are assigned, so as to add to a class' level upon level
    # up.
      def exp=(exp)
        @exp = [[exp, 9999999].min, 0].max
        # Level up
        while @exp >= @exp_list[@level+1] && @exp_list[@level+1] > 0
          @level += 1
          self.class_level_up(@class_id)
        end
        # Level down
        while @exp < @exp_list[@level]
          @level -= 1
        end
        # Correction if exceeding current max HP and max SP
        @hp = [@hp, self.maxhp].min
        @sp = [@sp, self.maxsp].min
      end
      
      def class_level_up(new_class_id = @class_id)
        @class_levels[new_class_id] += 1 
            
        # modifies how skills are assigned, so that it's based on class level, rather
        # than overall level.
          $data_classes[new_class_id].learnings.each {|j|
            if j.level == @class_levels[new_class_id]
              learn_skill(j.skill_id)
              if LBConf.class_spells(new_class_id).include?(j.skill_id)
                @learned_class_skills.push(j.skill_id)
                @learned_class_skills.sort!
              end
                
            end
          }
      end
    end
    Über diese von mir (via copy&paste eines anderen Parts des Scripts) erstellte Methode namens "class_level_up([class_id])" kannst du die Stufe für jede beliebige Klasse des Charakters erhöhen.
    Allerdings kann ich nicht mit 100% Genauigkeit sagen ob es Fehlerfrei sein wird da ich nicht das gesamte Script gelesen habe. Es sollte jedoch ausreichen.
    Als Parameter nimmt diese Funktion eine ganze Zahl welche die ID der Klasse darstellt dessen Stufe erhöht werden soll, wird kein Parameter übergeben wird die Klassenstufe der derzeitigen Klasse erhöht.
    Um die Stufe zu verringern sollte es ausreichen einfach das jeweilige Klassenlevel manuell zu verringern, um das Verlernen von Fähigkeiten müsstest du dich jedoch nach wie vor selbst kümmern da diese Funktion bereits im normalen RPG-Maker XP System nicht automatisch erledigt wurde.
    Also im Klartext als call Script:
    Code:
    $game_actors[char_id].class_level_up(class_id)
    um die Stufe der Klasse mit der ID "class_id" für den Charakter mit der ID "char_id" um 1 zu erhöhen.
    Oder:
    Code:
    $game_actors[char_id].class_level_up
    um die Stufe der derzeitigen Klasse des Charakters mit der ID "char_id" um 1 zu erhöhen.

    Um eine Stufe zu verringern müsstest du folgendes tun:
    Code:
    $game_actors[char_id].class_levels[class_id] -= 1
    um die Stufe der Klasse mit der ID "class_id" für den Charakter mit der ID "char_id" um 1 zu verringern.
    Du kannst übrigens die ID der derzeitigen Klasse eines Charakters jederzeit über den Befehl:
    Code:
    actor_current_class_id = $game_actors[char_id].class_id
    erhalten.

    Um dein letztes Problem kann ich mich leider derzeit nicht kümmern, darauf wirst du wahrscheinlich noch etwas warten müssen.

  3. #3
    also ersteinmal danke das ist echt grossartig ^^
    ich teste es morgen und berichte dann ob es funzt !
    nun nocheinmal dazu, das level verringern will ich ja eig garnicht, war nur son gedanke das es ja auch umgekehrt gehen sollte...
    und wenn man das player lv reduziert sinkt das job lv nicht mit !

    nun ich habe da aber noch ein problem undzwar brauche ich eine abfrage im script die je nachdem welcher job gewählt wird ein bestimmten call ausführt.
    zum beispiel wenn ich ninja sein will muss ich ja den scriptcall für ninja mode (777's multi-equip) aufrufen lassen,
    und wenn ich wieder zum warrior wechsel dann sollte der ninja mode wieder deaktiviert werden.
    der call in diesem beispiel wäre $game_actors[x].ignore_offhand = true/nil
    nur muss hierbei auch der actor selber abgefragt werden und es sollte ebenfalls mit larger party funzen !
    also es wäre klasse wenn du oder jemand anderes mir eine abfrage einabuen könnte^^

    so in etwa

    if actorid1
    if 0 then $game_actors[x].ignore_offhand = nil
    if 1 then $game_actors[x].ignore_offhand = nil
    if 2 then $game_actors[x].ignore_offhand = nil
    ...
    if 14 then $game_actors[x].ignore_offhand = true (14 ist in diesem beispiel ninja)

    if actorid2
    if 0 then $game_actors[x].ignore_offhand = nil
    if 1 then $game_actors[x].ignore_offhand = nil
    if 2 then $game_actors[x].ignore_offhand = nil
    ...
    if 14 then $game_actors[x].ignore_offhand = true (14 ist in diesem beispiel ninja)

    usw nur das der actor irgendwie anders abgefragt wird weil ich ja mehr als 4 member im team habe ^^
    nochmals danke im vorraus

  4. #4
    egal habs eben noch getestet ^^
    also "$game_actors[char_id].class_level_up(class_id)" funz net habs mit $game_actors[0].class_level_up(0) probiert und "undefined method `class_level_up' for nil:NilClass" fehler bekommen.
    bei $game_actors[char_id].class_level_up ebenfalls...
    die zu verringern hab ich noch nicht getestet aber die brauch ich ja eig auch net ^^

    nunja und ich weiss net recht was ich mit "clvl = $game_actors[char_id].class_levels[class_id]" machen soll ?!
    ich habs in nen branch in den script part getan und auch nen error bekommen.
    dann hab ics mit clvl = $game_actors[char_id].class_levels[class_id ==1 versucht und auch fehler...
    sry irgendwie klappt das net ganz so wies soll hmmmmmm

  5. #5
    Ich habe es gerade einmal ausprobiert, es scheint so, als ob der RMXP für einfachere Bedienung (oder aus anderen Gründen) die Arrays für $game_actor und $data_classes mit 1 beginnen lässt.
    Das heist, für den Charakter mit der ID 1 musst du tatsächlich die 1 verwenden.

    Falls du also in deinem "Conditional_Branch" beispielsweise die Bedingung "Stufe von Klasse[1] für Charakter[1] größer/gleich 3" einbauen willst musst du folgenden custom script in das Textfeld eingeben:
    Code:
    $game_actors[1].class_levels[1] >= 3
    Falls du die Klassenstufe des ersten Charakters um 1 erhöhen willst musst du im Call-Script folgende Zeile eingeben:
    Code:
    $game_actors[1].class_level_up
    Ich habe beides gerade ausprobiert und es hat funktioniert.

  6. #6
    sry für den doppelpost aber hab gemerkt warum das net ging hab nämlich nicht den code im script ausgetauscht nun hab ich das aber und bekommbeim start ne meldung das auf line 602 n fehler ist...

  7. #7
    Du musst in dem Fall wahrscheinlich etwas falsch kopiert haben, ein Fehler taucht für mich nicht auf.
    Die Wahrscheinlichkeit ist groß, dass entweder ein "end" zu viel oder zu wenig vorhanden ist, aber das lässt sich nicht ohne weitere Informationen sagen. Falls du die Fehlermeldung zitieren könntest wäre es bereits ein guter Anhaltspunkt.

  8. #8
    danke erstmal werds nachär mal testen muss grad ne neue graka kaufen gehen ^^
    also ich schreib dann später mal obs funzt, und ja stimmt das ich wahrscheinlich ein end zuviel oder so hatte...
    war schon müde wollts aber unbedingt noch testen gestern abend xD
    nun zu dem mit dem callscript bei klassenwechsel, das ist wichtiger als die charanzeige im large party script,
    und ich glaube auch das ich das selber lösen kann, hab da sonne idee ^^
    wäre wie gesagt klasse wenn du mir dabei helfen könntest das halt die scriptcalls bei klassenwechsel aufgerufen werden >.<
    thx

  9. #9
    Verstehe ich das richtig, dass du willst, dass bei einem Klassenwechsel der Zustand "ignore_offhand" auf true gesetzt wird falls die neue Klasse die ID 14 hat und in allen anderen Fällen soll der Zustand auf false gesetzt werden?

    In diesem Fall müsstest du einfach die alte Methode:
    (Zeile: 777 - 804)
    Code:
    def actor_class_change(actor_id, class_id)
        
        #setup which actors' class needs to be changed.
        changed_actors = LBConf.linked_actors(actor_id)
        changed_actors.push actor_id
        
        #memorize which class specific skills the actor has learned for the current
        #class, then make the actor forget them
        LBConf.class_spells($game_actors[actor_id].class_id).each{|skill_id|
        $game_actors[actor_id].forget_skill(skill_id)}
        
        #change the actor(s) class.
        changed_actors.each{|actorz|
        $game_actors[actorz].class_id = class_id
        
        #remember any class specific spells the actor has forgotten forthe class
        #they're changing to.
        $game_actors[actorz].learned_class_skills.each{|skill_id|
        if LBConf.class_spells($game_actors[actorz].class_id).include?(skill_id)
          $game_actors[actorz].learn_skill(skill_id)
        end}
        
        #if graphic changing is enabled, change the actor's graphic.
        if LBConf::CLASS_GRAPHIC_CHANGE == true
          actor_graphics_change(actorz)
        end}
        
      end
    In diese Version abändern:
    Code:
    def actor_class_change(actor_id, class_id)
        
        #setup which actors' class needs to be changed.
        changed_actors = LBConf.linked_actors(actor_id)
        changed_actors.push actor_id
        
        #memorize which class specific skills the actor has learned for the current
        #class, then make the actor forget them
        LBConf.class_spells($game_actors[actor_id].class_id).each{|skill_id|
        $game_actors[actor_id].forget_skill(skill_id)}
        
        #change the actor(s) class.
        changed_actors.each{|actorz|
        $game_actors[actorz].class_id = class_id
        
        #remember any class specific spells the actor has forgotten forthe class
        #they're changing to.
        $game_actors[actorz].learned_class_skills.each{|skill_id|
        if LBConf.class_spells($game_actors[actorz].class_id).include?(skill_id)
          $game_actors[actorz].learn_skill(skill_id)
        end}
        
        #if graphic changing is enabled, change the actor's graphic.
        if LBConf::CLASS_GRAPHIC_CHANGE == true
          actor_graphics_change(actorz)
        end
        
        if class_id == 14
          $game_actors[actorz].ignore_offhand = true
        else
          $game_actors[actorz].ignore_offhand = false
        end}
        
      end
    Wie man erkennt liegt der einzige Unterschied in folgenden Zeilen:
    Code:
    if class_id == 14
          $game_actors[actorz].ignore_offhand = true
        else
          $game_actors[actorz].ignore_offhand = false
        end
    Ich hoffe das sollte dein Problem beheben falls ich es denn richtig verstanden habe.

    Geändert von Cornix (31.05.2011 um 15:42 Uhr)

  10. #10
    ja das ist es ^^ ich teste es gleich ^^

    edit: big thx das wars ^^
    funzt !!!

    teste nun den rest von gestern !

    Geändert von buddysievers (31.05.2011 um 17:44 Uhr)

  11. #11
    alles funzt ^^ du bist der beste und so schnelle antworten echt respekt !

    so nun das lezte problem und ein neues xD (lezteres ist easy denk ich mal ^^)

    nr 1 wie schon gesagt, hier mal beispielbilder die alles erklären denk ich mal...
    http://imageshack.us/photo/my-images/191/bild1mzr.png/
    http://imageshack.us/photo/my-images/11/bild2bi.png/
    wie man sieht keine actor grafiken oder schrift und co aber der class change funzt ^^
    ist halt ne optische angelegenheit...
    dachte ich bekomms selbst hin aber hab mich da pbernommen xD

    nr 2 das neue problem...
    ich würde gerne im main menü das level des jobs sehen also neben dem job name noch das lv...
    http://imageshack.us/photo/my-images/832/bild3oo.png/

    wie geil das am ende sein muss >.<

  12. #12
    Problem Nr. 1:
    Im Legacy Script, um die Zeile 822 herum, solltest du eine Zeile finden welche so aussieht:
    Code:
    self.contents = Bitmap.new(width - 32, height - 32)
    Tausche diese Zeile mit folgender aus:
    Code:
    self.contents = Bitmap.new(width - 32, 32 + $game_party.actors.size * 80)
    Problem Nr. 2
    Öffne das Script "Window Base", es gehört zu den Standard Klassen des RPG-Makers XP und suche in der Zeile 131 eine Methode names "draw_actor_class(actor,x,y).
    Ersetze diese Methode mit folgender Methode:
    Code:
    def draw_actor_class(actor, x, y)
        self.contents.font.color = normal_color
        text = actor.class_name + " Lvl: " + actor.class_levels[actor.class_id].to_s
        self.contents.draw_text(x, y, 236, 32, text)
      end
    der Text sollte nun in folgender Form erscheinen:
    "KLASSE Lvl: KLASSENLEVEL"

  13. #13
    nice thx

    ich teste es gleich und sag ob es funzt

    also beides funzt wunderbar du bist der abslout größte !!!
    aber ein bug hat sich dadurch merkwürdiger weise eingeschlichen und das ist wirklich ein ganz praller ^^
    die enter taste geht nicht mehr aber c und space sowie die maus wunderbar wie vorher !
    keine ahnung warum das passiert sein könnte aber ich habe ja nur window_base und das legacy script bearbeitet bzw du ^^
    nunja deshalb ist es für mich absolut unerklärbar...

    nun eine allerlezte bitte hätte ich noch wenn das nicht zuviel ist >.>
    kannst du das job lv system ändern das jobs durch jp aufsteigen statt durch eigene levels.
    man erhält automatisch 50% der exp als jp sprich 100exp/50jp.
    hierzu muss man aber beachten das ich nicht das standart ks benutze (naja wer das macht kann kein gutes spiel erwarten, da das xp ks echt scheisse ist...)
    ich benutze GubiD's Tactical Battle System, hier der link:
    http://www.creationasylum.net/forum/...howtopic=20353
    hoffe das es nicht zu schwer ist das zu machen weil dann hätte ich ein perfektes jobsystem ^^
    aber wie schon gesagt alles in allem super hilfe !

    edit: ah hatte vergessen zu erwähnen das die job lv genausoviel jp brauch zum lv up beispiel: 100exp für lv 2 100jp für job lv 2 aber man bekommt ja halt nur 50% der exp die man erhällt somit kann man sagen das man ca jedes zweite job lv aufsteigt.

    Geändert von buddysievers (31.05.2011 um 20:16 Uhr)

  14. #14
    ok habs auf meinem pc ohne probleme getestet auf xp x86, dann heute nochmal von meinem bruder mit win7 x64 und aufeinmal gehts...
    war nurn windows bug mit der enter taste....
    deshalb mag ich xp auch am liebsten selber benutz ich win 7 nur zum zocken ^^

  15. #15
    ähm ich hab ein script gefunden was sowas enthällt und auch ein stat modiefier hat nur kann ich das selber nicht ausbauen und ins legacy script einbauen...
    habe mal blizzard ne pm geschickt was ich beachten muss für den stat modiefier weil den bekomm ich evtl selber hin.
    naja hoffe du oder irgendjemand anders kann mir eventuell helfen thx.
    http://forum.chaos-project.com/index.php?topic=115.0

Berechtigungen

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