UltimaForum

Wsparcie [VX] - [skrypt] Użycie itemu tylko na konkretnej postaci

plasebo - Czw 12 Lip, 2012 00:32
Temat postu: [skrypt] Użycie itemu tylko na konkretnej postaci
Cześć!
Chciałbym wiedzieć, jak sprawić (np. przez skrypt i adnotacje w polu Note) by konkretne itemy mogły być użyte tylko na określonych postaciach (opcja Data Base/Items/Scope/One Ally). Przykłady:
- fiolka krwi [Item 099] może być użyta tylko na drużynowym wampirze [Actor 006];
- kawałek mięsa i alkohol może użyć każdy bohater z wyjątkiem wegelfki-purytanki :)
Dziękuję za pomoc!

Ayene - Sob 14 Lip, 2012 10:47

Dobrze przetestuj
Spoiler:

Kod:
module AYENE
  ITEM_TARGET = /<(?:ITEM_TARGETS|item_targets)[ ]*(\d+(?:[ ]*,[ ]*\d+)*)>/i
end

#===================================================================
# RPG::UsableItem
#===================================================================
class RPG::UsableItem < RPG::BaseItem
  attr_accessor :item_targets   
  #--------------------------------------------------------------------------
  # * Item targets Initialization
  #--------------------------------------------------------------------------
  def item_targets_ini
    @item_targets = []
    self.note.split(/[\r\n]+/).each { |line|
      case line
      when AYENE::ITEM_TARGET
        $1.scan(/\d+/).each { |num|
          item_id = num.to_i
          @item_targets.push(item_id) if $data_items[item_id] != nil
        }
      end
    }
  end
end

#===================================================================
# Scene_Title
#===================================================================
class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # * Load Database
  #--------------------------------------------------------------------------
  alias aye_item_tar_sctit_loaddata load_database
  def load_database
    aye_item_tar_sctit_loaddata
    for item in $data_items
      next if item.nil?
      item.item_targets_ini
    end
  end
  #--------------------------------------------------------------------------
  # * Load Battle Test Database
  #--------------------------------------------------------------------------
  alias aye_item_tar_sctit_bt_loaddata load_bt_database
  def load_bt_database
    aye_item_tar_sctit_bt_loaddata
    for item in $data_items
      next if item.nil?
      item.item_targets_ini
    end
  end   
end

#===================================================================
# Scene_Item
#===================================================================
class Scene_Item < Scene_Base
  #--------------------------------------------------------------------------
  # * Confirm Target
  #--------------------------------------------------------------------------
  def determine_target
    used = false
    if @item.for_all?
      for target in $game_party.members
        if @item.item_targets.include?(target.id) or @item.item_targets.empty?
          target.item_effect(target, @item)
          used = true unless target.skipped
        end
      end
    else
      $game_party.last_target_index = @target_window.index
      target = $game_party.members[@target_window.index]     
      if @item.item_targets.include?(target.id) or @item.item_targets.empty?
        target.item_effect(target, @item)
        used = true unless target.skipped
      end     
    end
    if used
      use_item_nontarget
    else
      Sound.play_buzzer
    end
  end
end

#===================================================================
# Scene_Battle
#===================================================================
class Scene_Battle < Scene_Base 
  #--------------------------------------------------------------------------
  # * Update Target Actor Selection
  #--------------------------------------------------------------------------
  def update_target_actor_selection
    @target_actor_window.update
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_target_actor_selection
    elsif Input.trigger?(Input::C)
      target = $game_party.members[@target_actor_window.index]
      if @item.item_targets.include?(target.id) or @item.item_targets.empty?
        Sound.play_decision
        @active_battler.action.target_index = @target_actor_window.index
        end_target_actor_selection
        end_skill_selection
        end_item_selection
        next_actor
      else
        Sound.play_cancel
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Execute Battle Action: Item
  #--------------------------------------------------------------------------
  def execute_action_item
    item = @active_battler.action.item
    targets = @active_battler.action.make_targets
    display_animation(targets, item.animation_id)
    $game_party.consume_item(item)
    $game_temp.common_event_id = item.common_event_id
    for target in targets
      if @item.item_targets.include?(target.id) or @item.item_targets.empty?
        target.item_effect(@active_battler, item)
        display_action_effects(target, item)
      end
    end
  end
end


Żeby wprowadzić cel przedmiotu wystarczy w oknie notatek w przedmiotach w bazie danych wpisać:
Kod:
<item_target ID, ID...>

gdzie ID to id bohatera, czyli jeśli chcesz, aby fiolka krwi mogła być użyta tylko na wampirze, to w tym przedmiocie wpisz:
Kod:
<item_target 6>

Z kolei, gdy nie chcesz, żeby weganka używała mięsa, wpisz wszystkich po przecinku, oprócz niej.


Powered by phpBB modified by Przemo © 2003 phpBB Group