[XP]'훔치기' 스크립트 질문!! 입니다!;

by 나르카이제 posted Jun 16, 2005
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
스크립트는 다음과 같고. 설명도 밑과 같습니다.

저거 에러는 없는 거 같은데

'어떻게' 적용시킵니까?;

어디에 몬스터 이름 넣고 어디에 아이템 써야 하는지 모르겠다는..

참 난 감하네요; 대답 부탁드립니다!


도입 후, 속성[ 훔친다 ](을)를 작성해, 스킬에 세트 해 주세요.
이것이 「훔친다」효과를 가지는 스킬이 됩니다.

(스킬 자체의) 명중율:[명중율]% 「훔친다」의 기본 성공율:[위력]%
(기본 성공율은, 아군의 손재주가 있음과 적의 민첩함에 의해 변동)

훔칠 수 있는 요소는
 고블린 /I1 /W2
(와)과 같이, [적명] /{종류}{ID} 그렇다고 하는 서식에서 설정합니다.
(↑의 예에서는, 고블린으로부터 ID1의 아이템과 ID2의 무기를 훔칠 수 있다)
종류 에는, 이하의 5종류를 지정할 수 있습니다.(대문자·소문자는 묻지 않는다)
B :공난    I :아이템
W :무기    A :방어구
G :골드

입수 판정은 좌측에서 순서에 행해져 우측만큼 성공율이 낮아집니다.
( 「공난(B)」 「입수가 끝난 상태」 「실패」의 어느 쪽인가에 해당하면 우측으로 이행)
성공율은 1개 오른쪽으로 갈 때 마다 반이 됩니다.(1%미만은 되지 않는다)
즉, 기본 성공율이 80%라면 「2개목:40%」 「3개목:20%」…라고 하는 상태입니다.
이것은 /B 그리고 공난을 지정했을 경우도 동일한의로,
 가고일 /B /B /I8
(와)과 같이 지정하면, 레어 아이템을 만드는 것이 가능합니다.


#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆훔치는 - KGC_Steal◆
#_/----------------------------------------------------------------------------
#_/ 「훔친다」효과를 가지는 스킬을 작성합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ 커스터마이즈 항목 ★
#==============================================================================

module KGC
# ◆성공시의 데미지 문자열
STE AL_SUCCESS_DMG = "Stole"

# ◆아무것도 가지고 있지 않을 때의 메세지
STEAL_EMPTY_MSG = "아무것도 가지고 있지 않다"
# ◆훔칠 수 없었을 때의 메세지
STEAL_FAIL_MSG = "훔칠 수 없었다"
# ◆돈을 훔쳤을 때의 메세지
# 【{gold}…금액 {unit}…금의 단위】
STEAL_GOLD_MSG = "「{gold}{unit}」훔쳤다!"
# ◆아이템을 훔쳤을 때의 메세지
# 【{item}…아이템명】
STEAL_ITEM_MSG = "「{item}」를 훔쳤다!"
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported["Steal"] = true

# 「훔친다」용속성
$game_special_elements["steal"] = $data_system.elements.index("훔친다")

#==============================================================================
# ■ RPG::Enemy
#================================ ==============================================

class RPG::Enemy
#--------------------------------------------------------------------------
# ● 이름의 취득
#--------------------------------------------------------------------------
alias name_KGC_Steal name
def name
return name_KGC_ Steal.split(/ /)[0]
end
#--------------------------------------------------------------------------
# ● 훔칠 수 있는 요소의 일람을 취득
#--------------------------------------------------------------------------
def steal_items
data = @name.split(/ /)
data.delete_at(0)
items = []
for i in 0...data.size
items[i] = data[i].split(/[/]([ABGIW])([0-9]+)?/i)
items[i].delete_at(0)
items[i][1] = items[i][1].to_i
end
return items
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==================================================================== ==========
# ■ Game_Battler (분할 정의 3)
#==============================================================================

class Game_Battler
#--------------------------------------------------------------------------
# ● 스킬의 효과 적용
# user : 스킬의 사용자 (버틀러)
# skill : 스킬
#------- -------------------------------------------------------------------
alias skill_effect_KGC_Steal skill_effect
def skill_effect(user, skill)
# 「훔친다」속성을 가지고 있는 경우는 돌아온다
return if skill.element_set.include?($game_special_elements["steal"])

# 원래의 처리를 실행
return skill_effect_KGC_Steal(us er, skill)
end
#--------------------------------------------------------------------------
# ● 「훔친다」의 효과 적용
# user : 스킬의 사용자 (버틀러)
# skill : 스킬
#--------------------------------------------------------------------------
def steal_effect(user, skill)
# 위기 플래그를 클리어
self.critical = false
# 스킬의 효과 범위가 HP 1 이상의 아군으로, 자신의 HP 가 0,
# 또는 스킬의 효과 범위가 HP 0 의 아군으로, 자신의 HP 가 1 이상의 경우
if ((skill.scope == 3 || skill.scope == 4) && self.hp == 0) ||
((skill.scope == 5 || skill.scope == 6) && self.hp >= 1)
# 메소드 종료
return false
end
# 훔친 요소를 클리어
steal_item = nil

# 대상이 적, 한편 무적 상태의 경우
if self.states.include?($game_state_invincible) &&
(skill.scope == 1 || skill.scope == 2)
# 절대로 명중하지 않는다
hit_result = false
else
# 第一命中判定
      hit_result = (rand(100) < skill.hit)
    end
    # 命中の場合
    if hit_result
      # 基本成功率を計算
      steal_prob = skill.power * user.dex / self.agi / 100.0
      # 属性修正
      steal_prob *= elements_correct(skill.element_set)
      steal_prob /= 100
      items = $data_enemies[self.id].steal_items
      # 盗める要素があるか判定
      count = 0
      for i in 0...items.size
        if (items[i][0] == "B" || items[i][0] == "b") ||
            self.stolen_items_flag[i]
          next
        end
        count += 1
      end
      # 盗める要素がある場合
      if count > 0
        # 成功率設定(最初は基本値の2倍)
        hit = steal_prob * 200
        # 成功判定
        for i in 0...items.size
          # 成功率半減
          hit = [hit / 2, 1].max
          # 既に盗んでいる場合は次へ
          next if self.stolen_items_flag[i]
          item = items[i]
          hit_result = (rand(100) < hit)
          # 成功した場合
          if hit_result
            case item[0].upcase
            when "B"  # ブランク
              self.stolen_items_flag[i] = true
              next
            when "I"  # アイテム
              steal_item = $data_items[item[1]].name
              $game_party.gain_item(item[1], 1)
            when "W"  # 武器
              steal_item = $data_weapons[item[1]].name
              $game_party.gain_weapon(item[1], 1)
            when "A"  # 防具
              steal_item = $data_armors[item[1]].name
              $game_party.gain_armor(item[1], 1)
            when "G"  # ゴールド
              steal_item = item[1]
              $game_party.gain_gold(item[1])
            end
            # 成功フラグをオン
            self.stolen_items_flag[i] = true
            break
          end
        end
      # 盗める要素が無い場合はそのまま
      else
        hit_result = true
      end
    end
    # 成功の場合
    if hit_result
      # 何も持っていない場合
      if steal_item == nil
        self.damage = "Miss"
        steal_item = "No Item"
      # 成功した場合
      else
        self.damage = KGC::STEAL_SUCCESS_DMG
      end
    # ミスの場合
    else
      self.damage = "Miss"
      steal_item = "Miss"
    end
    # メソッド終了(盗んだ要素を返す)
    return steal_item
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Enemy
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :stolen_items_flag        # 盗んだ要素フラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     troop_id     : トループ ID
  #     member_index : トループメンバーのインデックス
  #--------------------------------------------------------------------------
  alias initialize_KGC_Steal initialize
  def initialize(troop_id, member_index)
    # 元の処理を実行
    initialize_KGC_Steal(troop_id, member_index)

    @stolen_items_flag = []
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 4)
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成
  #--------------------------------------------------------------------------
  alias make_skill_action_result_KGC_Steal make_skill_action_result
  def make_skill_action_result
    # 元の処理を実行
    make_skill_action_result_KGC_Steal

    # 「盗む」属性を持っている場合
    if @skill.element_set.include?($game_special_elements["steal"])
      target = @target_battlers[0]
      @steal_item = target.steal_effect(@active_battler, @skill)
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  alias update_phase4_step5_KGC_Steal update_phase4_step5
  def update_phase4_step5
    # 元の処理を実行
    update_phase4_step5_KGC_Steal

    if @steal_item != nil
      case @steal_item
      when "No Item"
        @help_window.set_text(KGC::STEAL_EMPTY_MSG, 1)
      when "Miss"
        @help_window.set_text(KGC::STEAL_FAIL_MSG, 1)
      when Integer
        text = KGC::STEAL_GOLD_MSG.dup
        text.gsub!(/{gold}/i) {"#{@steal_item}"}
        text.gsub!(/{unit}/i) {"#{$data_system.words.gold}"}
        @help_window.set_text(text, 1)
      else
        text = KGC::STEAL_ITEM_MSG.dup
        text.gsub!(/{item}/i) {"#{@steal_item}"}
        @help_window.set_text(text, 1)
      end
      @steal_item = nil
      @wait_count = 30
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  #--------------------------------------------------------------------------
  alias update_phase4_step6_KGC_Steal update_phase4_step6
  def update_phase4_step6
    # ヘルプウィンドウを隠す
    @help_window.visible = false
    @help_window2.visible = false if $imported["HelpExtension"]

    # 元の処理を実行
    update_phase4_step6_KGC_Steal
  end
end

Articles

1 2 3 4 5 6 7 8 9 10