设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2153|回复: 6
打印 上一主题 下一主题

[已经过期] 游戏错误

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2009-8-28
帖子
6
跳转到指定楼层
1
发表于 2010-9-2 15:07:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

2
发表于 2010-9-2 15:11:30 | 只看该作者
LZ 这样谁都帮不了你。

给出脚本,或者上传工程可能还有人帮你解决~~~

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2009-8-28
帖子
6
3
 楼主| 发表于 2010-9-2 15:29:26 | 只看该作者
本帖最后由 八云紫 于 2010-9-3 16:11 编辑

范例太大!



  1. #==============================================================================
  2. # ■ Game_Event
  3. #==============================================================================
  4. class Game_Event < Game_Character
  5.   #--------------------------------------------------------------------------
  6.   # ● 公開インスタンス変数
  7.   #--------------------------------------------------------------------------
  8.   attr_reader   :enemy_flag               # エネミーフラグ
  9.   attr_reader   :boss_flag                # ボスフラグ
  10.   attr_reader   :guard_flag               # ガードフラグ
  11.   attr_reader   :enemy_id                 # エネミー(アクター)のID
  12.   attr_reader   :face_name                # 顔グラフィックファイル名
  13.   attr_reader   :face_index               # 顔グラフィックインデックス
  14.   attr_reader   :move_power               # 移動力の値
  15.   attr_reader   :counter_power            # 反撃確率の値
  16.   attr_reader   :away_hp                  # 逃亡開始HP割合
  17.   attr_reader   :attack_type              # 通常攻撃範囲の形状
  18.   attr_reader   :attack_range             # 通常攻撃可能距離
  19.   attr_reader   :attack_hole              # 通常攻撃不可能距離
  20.   attr_reader   :attack_effect_type       # 通常攻撃効果範囲の形状
  21.   attr_reader   :attack_effect_range      # 通常攻撃効果範囲
  22.   attr_reader   :unit                     # ユニットデータ
  23.   attr_accessor :scope_dist               # 索敵範囲
  24.   attr_accessor :move_target              # 移動目標
  25.   attr_accessor :move_end                 # 移動済みフラグ
  26.   attr_accessor :action_end               # 行動済みフラグ
  27.   attr_accessor :npc                      # NPCフラグ
  28.   attr_accessor :pnpc                     # PNPCフラグ
  29.   #--------------------------------------------------------------------------
  30.   # ● オブジェクト初期化
  31.   #     map_id : マップ ID
  32.   #     event  : イベント (RPG::Event)
  33.   #--------------------------------------------------------------------------
  34.   def initialize(map_id, event)
  35.     super()
  36.     @map_id = map_id
  37.     @event = event
  38.     @id = @event.id
  39.     @erased = false
  40.     @starting = false
  41.     @through = true
  42.     moveto(@event.x, @event.y)            # 初期位置に移動
  43.     refresh
  44.     @enemy_id = -1
  45.     @boss_flag = false
  46.     @guard_flag = false
  47.     if @event.name =~ TSRPG::Pattern::ENEMY       # エネミー
  48.       set_enemy($1.to_i)
  49.     elsif @event.name =~ TSRPG::Pattern::PLAYER   # アクター
  50.       set_actor($1.to_i)
  51.     end
  52.     if @unit != nil
  53.       @move_end = @unit.donmove?
  54.       @action_end = @unit.donact?
  55.     end
  56.     @last_x = x                       # 移動前のx座標
  57.     @last_y = y                       # 移動前のy座標
  58.     @last_dir = @direction            # 移動前の向き
  59.     @move_speed_last = @move_speed    # 移動速度保存用
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 味方ユニットとしてセット
  63.   #--------------------------------------------------------------------------
  64.   def set_actor(id)
  65.     if $game_temp.srpg_member.size <= id   # パーティ人数が足りなければ終了
  66.       erase
  67.       return
  68.     end
  69.     @enemy_id = id
  70.     @unit = $game_party.members[$game_temp.srpg_member[id]]
  71.     @enemy_flag = false
  72.     @face_name = @unit.face_name
  73.     @face_index = @unit.face_index
  74.     @move_power = $data_classes[@unit.class_id].name =~ TSRPG::Pattern::MOVE ? $1.to_i : 4
  75.     @counter_power = $data_classes[@unit.class_id].name =~ TSRPG::Pattern::COUNTER ? $1.to_i : 0
  76.     @coop_power = TSRPG::Options::COOP_RATE[@unit.class_id] != nil ?
  77.       TSRPG::Options::COOP_RATE[@unit.class_id] : 0
  78.     @float = TSRPG::Options::FLOAT_STATE[@unit.class_id] != nil ?
  79.       TSRPG::Options::FLOAT_STATE[@unit.class_id] == 1 : false
  80.     for equip in @unit.equips
  81.       next if equip == nil
  82.       @move_power += equip.move_power
  83.       @counter_power += equip.counter_power
  84.     end
  85.     set_graphic(@unit.character_name, @unit.character_index)
  86.     @boss_flag = true if @event.name =~ TSRPG::Pattern::BOSS
  87.     @guard_flag = true if @event.name =~ TSRPG::Pattern::GUARD
  88.     @through = true       # すり抜けをオンにする
  89.     @step_anime = true    # 足踏みをオンにする
  90.     @priority_type = 2 if float?    # 飛行属性なら通常キャラの上に表示
  91.     if @unit.weapon_id > 0
  92.       @attack_type = @unit.weapons[0].attack_type
  93.       @attack_range = @unit.weapons[0].attack_dist
  94.       @attack_effect_type = @unit.weapons[0].effect_type
  95.       @attack_effect_range = @unit.weapons[0].effect_dist
  96.       @attack_hole = @unit.weapons[0].hole_dist
  97.     else    # 武器を装備していない場合
  98.       @attack_type = 0
  99.       @attack_range = 1
  100.       @attack_effect_type = 0
  101.       @attack_effect_range = 0
  102.       @attack_hole = 0
  103.     end
  104.     @npc = false
  105.     @pnpc = false
  106.     $scene.get_unit_alive_num         # 味方ユニット数の再カウント
  107.     if @unit.dead?        # セット前から戦闘不能の場合
  108.       $game_self_switches[[@map_id, @id, "D"]] = true
  109.       refresh
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 敵ユニットとしてセット
  114.   #--------------------------------------------------------------------------
  115.   def set_enemy(id)
  116.     @enemy_id = id
  117.     @unit = Game_Enemy.new(@id, @enemy_id)
  118.     @enemy_flag = true
  119.     @face_name = "Monster"
  120.     @face_index = 0
  121.     note = $data_enemies[@enemy_id].note
  122.     if note =~ TSRPG::Pattern::FACE
  123.       @face_name = $1
  124.       @face_index = $2.to_i
  125.     end
  126.     @scope_dist = note =~ TSRPG::Pattern::SCOPE ? $1.to_i : 1024
  127.     @away_hp = note =~ TSRPG::Pattern::AWAY ? $1.to_i : 0
  128.     @move_power = note =~ TSRPG::Pattern::MOVE ? $1.to_i : 4
  129.     @counter_power = note =~ TSRPG::Pattern::COUNTER ? $1.to_i : 0
  130.     @coop_power = note =~ TSRPG::Pattern::COOP ? $1.to_i : 0
  131.     @float = $data_enemies[@enemy_id].levitate
  132.     @boss_flag = true if @event.name =~ TSRPG::Pattern::BOSS
  133.     @guard_flag = true if @event.name =~ TSRPG::Pattern::GUARD
  134.     @through = true        # すり抜けをオンにする
  135.     @step_anime = true     # 足踏みをンにする
  136.     @priority_type = 2 if float?    # 飛行属性なら通常キャラの上に表示
  137.     @attack_type = note =~ TSRPG::Pattern::AT_TYPE ? $1.to_i : 0
  138.     @attack_range = note =~ TSRPG::Pattern::AT_DIST ? $1.to_i : 1
  139.     @attack_effect_type = note =~ TSRPG::Pattern::EF_TYPE ? $1.to_i : 0
  140.     @attack_effect_range = note =~ TSRPG::Pattern::EF_DIST ? $1.to_i : 0
  141.     @attack_hole = note =~ TSRPG::Pattern::HL_DIST ? $1.to_i : 0
  142.     @npc = @event.name =~ TSRPG::Pattern::NPC ? true : false
  143.     @pnpc = @event.name =~ TSRPG::Pattern::PNPC ? true : false
  144.     $scene.get_unit_alive_num(true)   # 敵ユニット数の再カウント
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ○ キャラクターの表示状態を更新する
  148.   #--------------------------------------------------------------------------
  149.   def refresh_state
  150.     @step_anime = (@unit.restriction <= 1)  # 足踏み状態の更新
  151.     @priority_type = float? ? 2 : 1   # プライオリティの更新
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 協力攻撃発動確率を返す
  155.   #--------------------------------------------------------------------------
  156.   def get_coop_rate
  157.     return 0 if @unit.donact?         # ドンアク状態なら0%
  158.     return @coop_power
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 指定したユニットが敵対関係にあるかどうかを返す
  162.   #--------------------------------------------------------------------------
  163.   def opponent?(event)
  164.     return false if @id == event.id   # 自分自身は味方
  165.     if @npc                           # 自分がNPCの場合
  166.       return TSRPG::Options::NPC_BATTLE if event.npc  # 相手もNPCなら設定に従う
  167.       return true     # 相手がNPC以外ならすべて敵
  168.     end
  169.     return true if event.npc          # 相手がNPCなら敵
  170.     if @pnpc
  171.       return false if event.pnpc      # PNPC同士は味方
  172.       return event.enemy_flag         # PNPCはアクター側の味方
  173.     end
  174.     return @enemy_flag if event.pnpc
  175.     return true if @enemy_flag != event.enemy_flag  # アクターとエネミーなら
  176.     return false
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● イベントとの距離を返す
  180.   #--------------------------------------------------------------------------
  181.   def get_distance(event)
  182.     return (@x - event.x).abs + (@y - event.y).abs
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 指定したセルまでの距離を返す
  186.   #--------------------------------------------------------------------------
  187.   def get_distance_cell(x, y)
  188.     return (@x - x).abs + (@y - y).abs
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 一番近い敵を返す
  192.   #   friend : 仲間フラグ
  193.   #--------------------------------------------------------------------------
  194.   def get_near_enemy(friend = false)
  195.     # 索敵範囲内のユニットをリストアップ
  196.     list = []
  197.     for event in $scene.unit_list
  198.       next if opponent?(event) == friend
  199.       next if event.unit.dead?
  200.       next if get_distance(event) > @scope_dist   # 索敵範囲外
  201.       list.push(event)
  202.     end
  203.     # リストをHPの低い順に並び替える
  204.     unless list.empty?
  205.       list.sort! do |a, b|
  206.         a.unit.hp <=> b.unit.hp
  207.       end
  208.     end
  209.     return list
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 指定したセルの方を向く
  213.   #--------------------------------------------------------------------------
  214.   def turn_cell(x, y)
  215.     sx = @x - x
  216.     sy = @y - y
  217.     if sx.abs > sy.abs                    # 横の距離のほうが長い
  218.       sx > 0 ? turn_left : turn_right
  219.     elsif sx.abs < sy.abs                 # 縦の距離のほうが長い
  220.       sy > 0 ? turn_up : turn_down
  221.     end
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ○ 指定したイベントに対して背後を取っているかをチェックする
  225.   #    結果は$game_temp.unit_back_attackに格納する
  226.   #--------------------------------------------------------------------------
  227.   def back_attack?(event)
  228.     d = @direction                # 現在の自分の向きを保存
  229.     turn_cell(event.x, event.y)   # 対象の方を向く
  230.     $game_temp.unit_back_attack = @direction == event.direction
  231.     @direction = d                # 元の向きに戻す
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ● 移動前の座標と向きをセット
  235.   #--------------------------------------------------------------------------
  236.   def set_last_pos
  237.     @last_x = @x
  238.     @last_y = @y
  239.     @last_dir = @direction
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 移動のキャンセルが可能かどうかを返す
  243.   #--------------------------------------------------------------------------
  244.   def can_move_cancel?
  245.     return false if @enemy_flag
  246.     return false if @action_end
  247.     return false if $scene.unit_xy(@last_x, @last_y) != nil
  248.     return true
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 移動前の位置に戻す
  252.   #--------------------------------------------------------------------------
  253.   def undo_move
  254.     @x = @last_x
  255.     @y = @last_y
  256.     @direction = @last_dir
  257.     @real_x = @x << 8
  258.     @real_y = @y << 8
  259.     @move_end = false
  260.     $scene.focus_event(self)    # カーソルも一緒に移動する
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ● 蘇生処理
  264.   #--------------------------------------------------------------------------
  265.   def reset
  266.     $game_self_switches[[@map_id, @id, "D"]] = false
  267.     refresh
  268.     set_graphic(@unit.character_name, @unit.character_index) unless @enemy_flag
  269.     @through = true       # すり抜けをオンにする
  270.     @step_anime = true    # 足踏みをオンにする
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● ダメージを受けたときの処理
  274.   #--------------------------------------------------------------------------
  275.   def damage(attacker = nil)
  276.     exp = 0
  277.     if @unit.dead?
  278.       $game_self_switches[[@map_id, @id, "D"]] = true
  279.       $scene.check_rule   # 勝敗判定
  280.       refresh
  281.       # エネミーがアクターに攻撃されたときのみ経験値とドロップを
  282.       if attacker != nil
  283.         if @enemy_flag and not attacker.enemy_flag
  284.           exp = $data_enemies[@enemy_id].exp
  285.           for di in [@unit.drop_item1, @unit.drop_item2]
  286.             next if di.kind == 0
  287.             next if rand(di.denominator) != 0
  288.             if di.kind == 1
  289.               $scene.add_drop_item($data_items[di.item_id])
  290.             elsif di.kind == 2
  291.               $scene.add_drop_item($data_weapons[di.weapon_id])
  292.             elsif di.kind == 3
  293.               $scene.add_drop_item($data_armors[di.armor_id])
  294.             end
  295.           end
  296.           $scene.add_drop_gold(@unit.gold)
  297.         end
  298.       end
  299.       $scene.get_unit_alive_num         # 味方ユニット数の再カウント
  300.       $scene.get_unit_alive_num(true)   # 敵ユニット数の再カウント
  301.     else
  302.       if TSRPG::Options::ACTION_EXP_TYPE == 1
  303.         if @enemy_flag
  304.           exp += $data_enemies[@enemy_id].exp / TSRPG::Options::ACTION_EXP_RATE
  305.         end
  306.       end
  307.     end
  308.     return exp
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● ユニットが行動内容のスコープに入っているかを返す
  312.   #--------------------------------------------------------------------------
  313.   def in_scope?
  314.     obj = $scene.event.unit.action.obj
  315.     # 蘇生スキルなのに生きているあるいは通常スキルなのに死んでいれば除外
  316.     if obj != nil and obj.for_dead_friend?
  317.       return false unless @unit.dead?
  318.     else
  319.       return false if @unit.dead?
  320.     end
  321.     # 通常攻撃で相手が生きていれば有効
  322.     return true if obj == nil and not @unit.dead?
  323.     if obj.noself?    # 自分自身を除外
  324.       return false if @x == $scene.event.x and @y == $scene.event.y
  325.     end
  326.     return true if obj.noscope?   # 無差別スキルなら終了
  327.     return (obj.for_friend? ? !opponent?($scene.event) : opponent?($scene.event))
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ● ユニットの移動力を返す
  331.   #--------------------------------------------------------------------------
  332.   def get_move_power
  333.     n = @move_power
  334.     tile_effect = $game_map.get_tile_effect(@x, @y) # 地形効果補正
  335.     if TSRPG::Options::TILE_EFFECT[tile_effect][0] == 5
  336.       n += TSRPG::Options::TILE_EFFECT[tile_effect][1]
  337.     end
  338.     for state in @unit.states                       # 移動力補正ステートを計算
  339.       if state.note =~ /<移動([\+\-])(\d+)>/i
  340.         n += $1 == '+' ? $2.to_i : -$2.to_i
  341.       end
  342.     end
  343.     return [n, 0].max
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ○ ユニットが飛行属性かどうかを返す
  347.   #--------------------------------------------------------------------------
  348.   def float?
  349.     for state in @unit.states
  350.       return true if state.note =~ /<飛行>/i
  351.     end
  352.     return @float
  353.   end
  354. end

  355. #==============================================================================
  356. # ■ Game_Player
  357. #==============================================================================
  358. class Game_Player < Game_Character
  359.   #--------------------------------------------------------------------------
  360.   # ● 公開インスタンス変数
  361.   #--------------------------------------------------------------------------
  362.   attr_reader   :vx                       # カーソル移動速度x
  363.   attr_reader   :vy                       # カーソル移動速度y
  364.   #--------------------------------------------------------------------------
  365.   # ● オブジェクト初期化
  366.   #--------------------------------------------------------------------------
  367.   alias tsrpg_game_player_initialize initialize
  368.   def initialize
  369.     tsrpg_game_player_initialize
  370.     @vx = 0
  371.     @vy = 0
  372.     @auto_move_count = 0
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● SRPG用カーソル化
  376.   #--------------------------------------------------------------------------
  377.   def setup_srpg(flag)
  378.     if flag
  379.       set_graphic("!$cursor", 0)
  380.     else
  381.       set_graphic($game_party.members[0].character_name, $game_party.members[0].character_index)
  382.     end
  383.     @step_anime = flag
  384.   end
  385.   #--------------------------------------------------------------------------
  386.   # ● 移動中判定
  387.   #--------------------------------------------------------------------------
  388.   def moving?
  389.     return false if $game_temp.in_srpg
  390.     return (@real_x != @x * 256 or @real_y != @y * 256)   # 論理座標と比較
  391.   end
  392.   #--------------------------------------------------------------------------
  393.   # ● カーソル自動移動のセット
  394.   #--------------------------------------------------------------------------
  395.   def set_auto_move(x, y)
  396.     @x = x
  397.     @y = y
  398.     @auto_move_count = 8
  399.     @vx = ((@x << 8) + (16 << 3) - @real_x) / 8
  400.     @vy = ((@y << 8) + (16 << 3) - @real_y) / 8
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 画面 Z 座標の取得
  404.   #--------------------------------------------------------------------------
  405.   alias tsrpg_game_player_screen_z screen_z unless $@
  406.   def screen_z
  407.     if $game_temp.in_srpg
  408.       return 200
  409.     else
  410.       return tsrpg_game_player_screen_z
  411.     end
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● フレーム更新
  415.   #--------------------------------------------------------------------------
  416.   alias tsrpg_game_player_update update
  417.   def update
  418.     if $game_temp.in_srpg
  419.       if @auto_move_count > 0   # カーソル自動移動中
  420.         last_real_x = @real_x
  421.         last_real_y = @real_y
  422.         @real_x += @vx
  423.         @real_y += @vy
  424.         @auto_move_count -= 1
  425.         if @auto_move_count == 0
  426.           @real_x = (@x << 8) + (16 << 3)
  427.           @real_y = (@y << 8) + (16 << 3)
  428.         end
  429.         update_scroll(last_real_x, last_real_y)
  430.       elsif $scene.scene_state < 50 and not $game_message.visible
  431.         return if $game_map.interpreter.running? # イベント起動中のカーソル固定
  432.         last_real_x = @real_x
  433.         last_real_y = @real_y
  434.         speed = dash? ? 96 : 32
  435.         @real_y -= speed if Input.press?(Input::UP)
  436.         @real_y += speed if Input.press?(Input::DOWN)
  437.         @real_x -= speed if Input.press?(Input::LEFT)
  438.         @real_x += speed if Input.press?(Input::RIGHT)
  439.         unless $game_map.valid?(@real_x >> 8, @real_y >> 8) # 画面外なら戻す
  440.           @real_x = last_real_x
  441.           @real_y = last_real_y
  442.         end
  443.         @x = @real_x >> 8
  444.         @y = @real_y >> 8
  445.         @anime_count += 1
  446.         update_animation
  447.         update_scroll(last_real_x, last_real_y)
  448.       end
  449.     else
  450.       tsrpg_game_player_update
  451.     end
  452.   end
  453. end

复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

水土火风重逢处

梦石
0
星屑
239
在线时间
691 小时
注册时间
2010-7-17
帖子
3042
4
发表于 2010-9-2 17:50:44 | 只看该作者
LZ请不要这样发脚本,有些变成表情了
独坐望城,望断天涯
回复 支持 反对

使用道具 举报

Lv1.梦旅人

天空之神

梦石
0
星屑
161
在线时间
173 小时
注册时间
2009-5-3
帖子
612
5
发表于 2010-9-3 16:07:12 | 只看该作者
有些变成表情了,请代码功能发……
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

6
发表于 2010-9-3 16:12:10 | 只看该作者
已修改, LZ 记得下次发脚本用代码标签

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv1.梦旅人

天空之神

梦石
0
星屑
161
在线时间
173 小时
注册时间
2009-5-3
帖子
612
7
发表于 2010-9-3 16:17:20 | 只看该作者
lz,你这是呢个版本的VX?
下论坛上的吧……
这脚本好诡异……

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-13 11:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表