UltimaForum

Skrypty [VX] - Zmiana drużyny

Ayene - Czw 22 Paź, 2009 12:50
Temat postu: Zmiana drużyny

Lord Khartos - Nie 25 Paź, 2009 09:57

A czy mógłbym ustawić aby było dostępne
wybranie tylko jednego bohatera :?: :->

Ayene - Nie 25 Paź, 2009 10:57

Musiałbyś wywołać skrypt
Kod:
$data_actors[ID].unavailable = true

i w miejsce ID wpisz numer bohatera, który ma być niedostępny. Komendę powiel tyle razy, ilu ma być niedostępnych postaci. Wtedy jeśli masz 6 bohaterów, a 5 z nich ustawisz jako niedostępnych, wówczas będziesz miał tylko jednego do wyboru.

Lord Khartos - Pon 26 Paź, 2009 17:32

OK Dzięki to się przyda przy stopniowaniu klas. A gdybym na przykład chciał mieć tylko jednego bohatera maksymalnie.

Tzn. czy można jakoś zablokować te dodatkowe sloty albo zmienić ich ilość.

Ayene - Pon 26 Paź, 2009 18:42

By ustawić maksymalną ilość osób w drużynie na 1 musiałbyś zamienić cześć skryptu, a dokładniej całą klasę Window_CurrentParty na poniższy kod:

Spoiler:

Kod:
class Window_CurrentParty < Window_Selectable
  def initialize
    super(48, 80, 256, 64)
    @item_max = 1  # było 4
    @column_max = @item_max
    create_contents
    self.index = 0
    refresh
  end
  def member
    return $game_party.members[self.index]
  end
  def refresh
    for i in 0...@item_max
      rect = item_rect(i)
      self.contents.clear_rect(rect)
    end
    for i in 0...$game_party.members.size
      rect = item_rect(i)
      bitmap = Cache.character($game_party.members[i].character_name)
      sign = $game_party.members[i].character_name[/^[\!\$]./]
      if sign != nil and sign.include?('$')
        cw = bitmap.width / 3
        ch = bitmap.height / 4
      else
        cw = bitmap.width / 12
        ch = bitmap.height / 8
      end
      n = $game_party.members[i].character_index
      src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
      if $game_party.members[i].actor.unavailable
        self.contents.blt(rect.x, rect.y, bitmap, src_rect, 128)
      else
        self.contents.blt(rect.x, rect.y, bitmap, src_rect, 255)
      end
      if $game_party.members[i].actor.required
        lock_bitmap = Cache.system("Locked")
        self.contents.blt(rect.x + rect.width - lock_bitmap.width,
                          rect.y + rect.height - lock_bitmap.height,
                          lock_bitmap, lock_bitmap.rect)
      end
    end
  end
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.width = 32
   # rect.width = (contents.width + @spacing) / @column_max - @spacing
    rect.height = 32
    rect.x = index % @column_max * (rect.width + @spacing)
    rect.y = index / @column_max * 32
    return rect
  end
end


Lecz ten zabieg całkowicie uniemożliwia wybór więcej niż jednej osoby. Jeśli jednak chodzi Tobie o to, by w wybranym momencie gry ograniczyć graczowi wybór, a po jakimś czasie rozszerzyć z 1 postaci do 4, wówczas trzeba by było przerobić nieco skrypt - najłatwiejszym chyba sposobem byłoby użycie przełącznika...

Lord Khartos - Wto 27 Paź, 2009 15:42

Wszystko działa tzn. pewnie działałoby ale niestety mam
tylko 64 mb RAM i wyskakuje komunikat że mam za mało
pamięci wirtualnej ale na pewno by działało.

Ozzma - Wto 27 Paź, 2009 17:36

Czyli rozumiem, że wystarczy zmienić @item_max w Window_CurrentParty, tak? Bo chciałabym zrobić 3 osobową drużynę.
Ayene - Wto 27 Paź, 2009 17:42

Tak, to całkowicie wystarcza :-) Może pojawić się tylko drobny błąd w wyświetlaniu okienka, ale wówczas wystarczy, że w powyższej klasie (Window_CurrentParty) zmienisz część kodu
Kod:
rect.width = (contents.width + @spacing) / @column_max - @spacing

na
Kod:
rect.width = 32

Agumon - Sob 13 Lut, 2010 20:31

A ja mam taki problem...
Bo ustawiłem sobie do wyboru 3 postacie i jak wybrałem jedną to mogłem wybierać następne...
A chciałbym zrobić takie coś że jak wybiorę jedną to tych następnych nie będę mógł brać...


Kopiuj i wklej | Ctrl+C i Ctrl+V xD
Nie zrozumiecie ale Ayene powinna xD

Ayene - Sob 13 Lut, 2010 21:02

W takim razie przejdź do linijki 222 i:
Kod:
@item_max = 4

zmień na:
Kod:
@item_max = $game_variables[1]


Następnie przejdź do linijki 264 i:
Kod:
rect.width = (contents.width + @spacing) / @column_max - @spacing

zmień na:
Kod:
rect.width = 32


Na początku gry ustaw zmienną nr 1 na 2 - 2 to będzie maksymalna ilość bohaterów w drużynie. Później jak będziesz chciał to zmienić to możesz dowolnie zmienić na domyślne, czyli na 4.

Czeliosss - Pon 03 Maj, 2010 16:57

A można usunąć Face'a, bo gorzej wygląda lub skalowało go.
Ogólnie dobry skrypt.
Pzdr.

Sabikku - Pon 03 Maj, 2010 17:19

Fragment
Kod:
    self.draw_actor_face(@member, x, y, 48)
    self.draw_actor_name(@member, x + 52, y)
    self.draw_actor_class(@member, x + 52, y + WLH)

zamień na:
Kod:
    self.draw_actor_name(@member, x, y)
    self.draw_actor_class(@member, x, y + WLH)

cj2 - Pon 03 Maj, 2010 19:25

Jak zrobić by jedna postać nie mogła chodzić sama ? :P
Ayene - Pon 03 Maj, 2010 20:14

Czyli w drużynie mają być minimalnie dwie osoby tak?

Dodaj na początku skryptu:
Kod:
module Ayene
  MINIMALNIE_W_DRUŻYNIE = 2  # minimalna ilość osób w drużynie
end


Następnie dwukrotnie znajdź i zamień:
Kod:
$game_party.members.size == 0

na:
Kod:
$game_party.members.size < Ayene::MINIMALNIE_W_DRUŻYNIE

cj2 - Wto 04 Maj, 2010 05:24

zdaje się że źle wytłumaczyłem. Są 4 postacie. 1 z nich nie może chodzić sama (zwierzątko). Inne mogą chodzić same
Sabikku - Wto 04 Maj, 2010 05:55

Wprawdzie nie mam rmvx i jak przetestować, przyjrzeć się skryptowi, ale spróbuj 387 linijkę podmienić na:
Kod:
if ($game_party.members.size == 0 and @command_window.index < 1) or ($game_party.members.size==1 and $game_party.members[0].actor_id==idkota)

Zamiast idkota daj id bohatera kota. Powtarzam, strzał w ciemno ;).

cj2 - Wto 04 Maj, 2010 06:25

Sabikku napisał/a:
Wprawdzie nie mam rmvx i jak przetestować, przyjrzeć się skryptowi, ale spróbuj 387 linijkę podmienić na:
Kod:
if ($game_party.members.size == 0 and @command_window.index < 1) or ($game_party.members.size==1 and $game_party.members[0].actor_id==idkota)

Zamiast idkota daj id bohatera kota. Powtarzam, strzał w ciemno ;).

Nie działa gdyż to nie kot.

No dobra wiem że to nie wina kota.Ale i tak nie działa.

Czeliosss - Wto 21 Gru, 2010 18:27

A można prosić o to, żeby dana postać była liderem tzn. na 1 miejscu?
Ayene - Sro 22 Gru, 2010 13:05

Wyjaśnij, o co dokładnie Ci chodzi, bo ja nie za bardzo rozumiem.
Czeliosss - Sro 22 Gru, 2010 14:33

Ehh.
Np. Po przemianie postaci np. w szczura postać usuwamy i dodajemy owego szczura.
Ja bym chciał, aby ten szczur był na pierwszym miejscu w drużynie czyli liderem.

Ayene - Sro 22 Gru, 2010 17:28

Czeliosss, a jak to się ma do tego skryptu? Przecież to jest osobne zamówienie?
Po usunięciu szczura i dodaniu na nowo członka drużyny wywołaj skrypt:
Kod:
actors = []
$game_party.members.each {|actor|
actors.push (actor.id)}     
actors.unshift (actors.pop)
actors.each {|id|
$game_party.remove_actor (id)
$game_party.add_actor (id)}


Powered by phpBB modified by Przemo © 2003 phpBB Group