UltimaForum

Wsparcie [VX] - Problem ze skryptem

flang3r - Nie 27 Lis, 2011 18:53
Temat postu: Problem ze skryptem
Witam po raz kolejny.
Ostatnio natknąłem się na bardzo fajny skrypt w którym można ustawić wymagania wobec skilli. Jest w nim jednak mały szkopuł...
Pozwala ustawiać wymagania w skillach ale nie ma w nim pojęcia "LUB"
Już tłumaczę - przypuśćmy że mamy pewną klasę broni (np miecze) i chcemy ustawić umiejętność dostępną dla tej klasy broni.
Niestety skrypt pozwala na ustawienie wymagań na zasadzie:
- jeśli masz miecz x
- jeśli masz miecz x i y
- jeśli masz miecz x i y i z itd. itd

Znalazłem odpowiedzialną za to linijkę, ale nie za bardzo wiem jak to pozmieniać bo jestem zielony ze skryptów :/
Zmienne raczej nie wchodzą w grę bo musiałbym ustawić bodajże ich kilkaset.
Oto fragment:

if has_tag?(@conditions,'WEAPON')
@tags = get_tag(@conditions,'WEAPON')
for i in 0...@tags.size
return false unless @weapons.include? ($data_weapons[@tags[0].to_i])
end


wiem że będzie to związane z data weapons i ustalaniem tego zbioru. Nieco niżej w tym samym skrypcie znalazłem przy ustalaniu Klasy wyrażenie "or" , które pozwalało ustawić to moje potrzebne "lub" :

if has_tag?(@conditions,'CLASS')
@tags = get_tag(@conditions,'CLASS')
return false unless @class_id == @tags[0].to_i or @tags[1].to_i
end

Moje pytanie do skrypterów, jak to poprzerabiać??

Ayene - Nie 27 Lis, 2011 20:07

Nie ma reguły. W tym przypadku należałoby zmienić całą definicję 'skill_condition_can_use?(skill)'. Spróbuj zamienić w niej wszystkie 'false unless' na 'true if' i jedno ostatnie 'true' na 'false'. Całość powinna wyglądać tak:
Spoiler:

Kod:
  def skill_condition_can_use?(skill)
   if has_tag?(skill.note, '<skill>')
     @conditions = get_tag_area(skill.note, '<skill>')
     if has_tag?(@conditions,'STATE')
      @tags = get_tag(@conditions,'STATE')
      for i in 0...@tags.size
        return true if state?(@tags[i].to_i)
      end
     end
     if has_tag?(@conditions,'WEAPON')
      @tags = get_tag(@conditions,'WEAPON')
      for i in 0...@tags.size
        return true if weapons.include?($data_weapons[@tags[i].to_i])
      end
     end
     if has_tag?(@conditions,'ARMOUR')
      @tags = get_tag(@conditions,'ARMOUR')
      for i in 0...@tags.size
        return true if armors.include?($data_armors[@tags[i].to_i])
      end
     end
     if has_tag?(@conditions,'ITEM')
      @tags = get_multiple_tag(@conditions,'ITEM','USE')
      for i in 0...@tags.size
        if @tags[i].is_a?(Array)
         return true if $game_party.item_number($data_items[@tags[i][0].to_i]) >= @tags[i][1].to_i
        else
         return true if $game_party.item_number($data_items[@tags[i].to_i]) >= 1
        end
      end
     end
     if has_tag?(@conditions,'ITEM','USE')
      @tags = get_multiple_tag(@conditions,'ITEM','USE')
      for i in 0...@tags.size
        if @tags[i].is_a?(Array)
         return true if $game_party.item_number($data_items[@tags[i][0].to_i]) >= @tags[i][1].to_i
        else
         return true if $game_party.item_number($data_items[@tags[i].to_i]) >= 1
        end
      end
     end
     if has_tag?(@conditions,'HP','LESS')
      @tags = get_tag(@conditions,'HP','LESS')
      return true if hp <= maxhp / (100 / @tags[0].to_i)
     end
     if has_tag?(@conditions,'HP','MORE')
      @tags = get_tag(@conditions,'HP','MORE')
      return true if hp >= maxhp / (100 / @tags[0].to_i)
     end
     if has_tag?(@conditions,'LEVEL','LESS')
      @tags = get_tag(@conditions,'LEVEL','LESS')
      return true if @level < @tags[0].to_i
     end
     if has_tag?(@conditions,'LEVEL','MORE')
      @tags = get_tag(@conditions,'LEVEL','MORE')
      return true if @level > @tags[0].to_i
     end
     if has_tag?(@conditions,'CLASS')
      @tags = get_tag(@conditions,'CLASS')
      return true if @class_id == @tags[0].to_i or @tags[1].to_i
     end
     if has_tag?(@conditions,'GOLD')
      @tags = get_multiple_tag(@conditions,'GOLD','USE')
      return true if $game_party.gold >= @tags[0].to_i
     end
     if has_tag?(@conditions,'GOLD','USE')
      @tags = get_multiple_tag(@conditions,'GOLD','USE')
      return true if $game_party.gold >= @tags[0].to_i
     end
     if has_tag?(@conditions,'PARTY','NUMBER')
      @tags = get_multiple_tag(@conditions,'PARTY','NUMBER')
      return true if $game_party.existing_members.size >= @tags[0].to_i
     end
     if has_tag?(@conditions,'PARTY','MEMBER')
      @tags = get_multiple_tag(@conditions,'PARTY','MEMBER')
      return true if $game_party.existing_members.include?($game_actors[@tags[0].to_i])
     end
     if has_tag?(@conditions,'FREEHAND')
      @tags = get_tag(@conditions,'FREEHAND')
      return true if free_hands >= @tags[0].to_i
     end
   end
   return false
  end


Zalecane dokładne testy ;-) Nie sprawdzałam wszystkich możliwości, bazowałam jedynie na pancerzach :aww:

flang3r - Pon 28 Lis, 2011 20:17

Nie działa dalej. Hmmm nie mam cierpliwości, żeby nad nim siedzieć.
Swoją drogą zauważyłem że ten skrypt w ogóle przestał mi dzisiaj działać :O
Skille miałem w zasadzie tylko i wyłącznie dlatego odblokowane, bo w notatkach użyłem oznaczeń innego skryptu;)
Dodam, że wcześniej nie kolidowały ze sobą ( i teraz też raczej nie kolidują bo nie wywala żaden błąd), ale jakby skrypt przestał widzieć oznaczenia (??).
Kiedy testowałem go na komendzie HPLESS to działał a teraz nagle takie przygody na WEAPON i ARMOUR...

W każdym razie dzięki Ayenne za dobrą wolę:)
Ja jednak poszukam czegoś prostszego...


Powered by phpBB modified by Przemo © 2003 phpBB Group