flang3r - Nie 27 Lis, 2011 18:53 Temat postu: Problem ze skryptemWitam 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 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...