Project1

标题: 两个放置物提取脚本冲突了,怎么办? [打印本页]

作者: 小夏坑面包    时间: 2012-9-30 20:22
标题: 两个放置物提取脚本冲突了,怎么办?
本帖最后由 hys111111 于 2012-9-30 20:51 编辑
  1. # ☆★☆ 提取放置物脚本(强化) ☆★☆  
  2. #------------------------------------------------------------------------------
  3. # - 美兽
  4. # - 2007.4.12
  5. #------------------------------------------------------------------------------
  6. #  爱护环境,人人有责,现实中切勿乱丢垃圾。
  7. #------------------------------------------------------------------------------
  8. #------------------------------------------------------------------------------
  9. #  脚本原理:
  10. #  是从仓库地图中提取事件,将其拷贝放入指定的位置,
  11. #  依此达成随时随地生成新事件的功能,如此可节省大量用RGSS编写事件所消耗的体力,很多地方写的
  12. #  很保守,尽量减少冲突几率。。
  13. #  此为强化版,可实现新事件的保存,但代价是冲突的随之增大,若只想单纯实现ARPG
  14. #  一类的物品掉落,场所移动后便清除,请使用简洁版。
  15. #------------------------------------------------------------------------------
  16. =begin
  17.                                 Note:
  18.   
  19. 一:生成物品主方法:
  20.     Drop_Item.make_events(map_id,event_id,item_x,item_y,save=false)
  21.     map_id : 仓库地图的ID。
  22.     event_id : 仓库中对应事件的ID。
  23.     item_x、item_y :新事件的X与Y坐标
  24.     save : 是否存储标志;
  25.            默认为false,即不存储,场所移动等转换场景后事件会消失;
  26.            true 为存储,取档、关机、登火星,返回后事件仍存在。
  27.            
  28. 二:删除事件方法:
  29.     事件名若包含"delete"字段,则执行完毕会立即自我清除;
  30.     注:任何事件皆如此。

  31. 三:必掌握语句:
  32.     $game_map.events[@event_id]
  33.     $game_player
  34.     事件的脚本使用,表示“本事件”和“角色”,主要为取得事件的坐标,
  35.     取得“本事件”X与Y坐标:$game_map.events[@event_id].event.x
  36.                             $game_map.events[@event_id].event.y
  37.     取得“角色”X与Y坐标:$game_player.x
  38.                           $game_player.y                           
  39.     例如,在某事件左侧生成2号地图的2号事件并永久存储,写法如下。
  40.     x = $game_map.events[@event_id].event.x
  41.     y = $game_map.events[@event_id].event.y
  42.     Drop_Item.make_events(2,2,x-1,y,true)

  43. 四:备注:
  44.     此脚本用法十分灵活,种植、建设、舍弃、掉宝等功能都可用以达成。   

  45. =end
  46. #==============================================================================
  47. #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  48. #                     Spriteset_Map ###!!!!!!!!!
  49. module Drop_Item
  50.   def self.make_events(map_id,event_id,item_x,item_y,save=false)
  51.       return unless self.is_map?        
  52.       map = self.map_data_load(map_id)      
  53.       temp = Marshal.load(Marshal.dump(map))      
  54.       if !$game_system.map_events_number
  55.          $game_system.map_events_number = {}
  56.       end  
  57.       sum = $game_system.map_events_number      
  58.       m_id = $game_map.map_id      
  59.       sum[m_id] == nil ? sum[m_id] = 2000 : sum[m_id] += 1
  60.       new_event_id = sum[m_id]      
  61.       temp.events[event_id].id = new_event_id      
  62.       temp.events[event_id].x,temp.events[event_id].y = item_x,item_y      
  63.       $game_map.events[new_event_id] = Game_Event.new(m_id,temp.events[event_id])
  64.       if save
  65.          now_map = self.map_data_load(m_id)
  66.          now_map.events[new_event_id] = temp.events[event_id]
  67.          self.map_data_save(m_id,now_map)
  68.        end  
  69.        $scene.spriteset.push_actor(new_event_id)
  70.       #refresh_map   
  71.   end
  72.   def self.map_data_init   
  73.       for i in 1..999
  74.          begin
  75.            map = load_data(sprintf("Data/Map%03d.rxdata", i))
  76.          rescue Errno::ENOENT
  77.            next
  78.          end
  79.          $game_system.map_data[i] = Marshal.load(Marshal.dump(map))         
  80.       end
  81.   end  
  82.   def self.map_data_save(map_id,event)
  83.       $game_system.map_data[$game_map.map_id] = event           
  84.   end   
  85.   def self.map_data_load(map_id)
  86.       if !$game_system.map_data
  87.          $game_system.map_data = {}
  88.          self.map_data_init
  89.       end
  90.       return $game_system.map_data[map_id]      
  91.   end  
  92.   def self.delete_events(event_id)
  93.       return unless self.is_map?     
  94.       $game_map.events.delete(event_id)
  95.       #self.refresh_map
  96.       $scene.spriteset.delete_actor(event_id)
  97.   end
  98.   def self.refresh_map
  99.       return unless self.is_map?
  100.      $scene.refresh = true
  101.   end
  102.   def self.is_map?
  103.       (return true) if $scene.is_a?(Scene_Map)
  104.       return false
  105.   end
  106. end  
  107. class Game_Map
  108.   def setup(map_id)
  109.       @map_id = map_id  
  110.       @map = Drop_Item.map_data_load(@map_id)
  111.       tileset = $data_tilesets[@map.tileset_id]
  112.       @tileset_name = tileset.tileset_name
  113.       @autotile_names = tileset.autotile_names
  114.       @panorama_name = tileset.panorama_name
  115.       @panorama_hue = tileset.panorama_hue
  116.       @fog_name = tileset.fog_name
  117.       @fog_hue = tileset.fog_hue
  118.       @fog_opacity = tileset.fog_opacity
  119.       @fog_blend_type = tileset.fog_blend_type
  120.       @fog_zoom = tileset.fog_zoom
  121.       @fog_sx = tileset.fog_sx
  122.       @fog_sy = tileset.fog_sy
  123.       @battleback_name = tileset.battleback_name
  124.       @passages = tileset.passages
  125.       @priorities = tileset.priorities
  126.       @terrain_tags = tileset.terrain_tags
  127.       @display_x = 0
  128.       @display_y = 0
  129.       @need_refresh = false
  130.       @events = {}
  131.       for i in @map.events.keys
  132.         @events[i] = Game_Event.new(@map_id, @map.events[i])
  133.       end
  134.       @common_events = {}
  135.       for i in 1...$data_common_events.size
  136.         @common_events[i] = Game_CommonEvent.new(i)
  137.       end
  138.       @fog_ox = 0
  139.       @fog_oy = 0
  140.       @fog_tone = Tone.new(0, 0, 0, 0)
  141.       @fog_tone_target = Tone.new(0, 0, 0, 0)
  142.       @fog_tone_duration = 0
  143.       @fog_opacity_duration = 0
  144.       @fog_opacity_target = 0
  145.       @scroll_direction = 2
  146.       @scroll_rest = 0
  147.       @scroll_speed = 4
  148.   end
  149. end
  150. begin
  151. class Interpreter
  152.   def command_end
  153.       @list = nil
  154.       if @main and @event_id > 0
  155.          if $game_map.events[@event_id].event.name["delete"].nil?
  156.             $game_map.events[@event_id].unlock
  157.          else
  158.             if $scene.is_a?(Scene_Map)
  159.                Drop_Item.delete_events(@event_id)
  160.                now_map = Drop_Item.map_data_load($game_map.map_id)
  161.                now_map.events.delete(@event_id)
  162.                Drop_Item.map_data_save($game_map.map_id,now_map)              
  163.             end         
  164.           end   
  165.         end
  166.         end
  167.       end
  168. class Game_System
  169.   attr_accessor :map_events_number            
  170.   attr_accessor :map_data            
  171. end  
  172. class Scene_Map
  173.   attr_accessor :refresh         
  174. end
复制代码
下一个
  1. #==============================================================================
  2. # ■ ARPG_BATTLE
  3. #------------------------------------------------------------------------------
  4. #  处理ARPG 战斗的类。
  5. #  如果事件的第一个内容是注释的话就会被认为是敌人....所以如果只是NPC的话~
  6. #  事件的内容的第一行一定不能是注释``不然会有一大堆问题-________-~||||
  7. #==============================================================================
  8. class ARPG_BATTLE
  9.   HP_BAR_DISP_TIME = 500000 # 敌人血条消失时间
  10.   ENEMY_HP = 1 # 敌人回血的技能ID #-___-无视这个`要敌人会加血的话直接在敌人的技能数组里加上恢复HP的技能就好了``
  11.   YC = false # 敌人被攻击是否增加延迟
  12.   KEYS = {
  13.   "A"=>$R_Key_A,
  14.   "S"=>$R_Key_S,
  15.   "D"=>$R_Key_D,
  16.   "F"=>$R_Key_F,
  17.   "G"=>$R_Key_G}#Kboard.trigger?
  18.   LVUP_ME = "Audio/SE/h寒气.wav" # 升级音效
  19.   $refresh = {} # 全局化一个刷新列表
  20.   #--------------------------------------------------------------------------
  21.   # ● 初始化对象
  22.   #--------------------------------------------------------------------------
  23.   def initialize
  24.     @actor = $game_party.actors[0]
  25.     @x = $game_player.x
  26.     @y = $game_player.y
  27.     @d = $game_player.direction
  28.     # 血条消失的时间
  29.     @hp_disp_time = 0
  30.     # 攻击延迟
  31.     @actor_atktime = 0
  32.     #
  33.     @bullets = []
  34.     # 敌人攻击延迟
  35.     # 事件ID->延迟时间
  36.     @event_atk = {}
  37.     for event in $game_map.events.values
  38.       next if !event.is_enemy?
  39.       @event_atk[event.id] = 0
  40.     end
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ● 释放
  44.   #--------------------------------------------------------------------------
  45.   def dispose
  46.     @sprite.dispose if [email protected]?
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 刷新
  50.   #--------------------------------------------------------------------------
  51.   def update
  52.     if @hp_disp_time >= 0
  53.       @hp_disp_time -= 1
  54.       if @hp_disp_time <= 0
  55.         @attev = nil
  56.       end
  57.     end
  58.     if @actor_atktime > 0
  59.       @actor_atktime -= 1
  60.     end
  61.     update_actor
  62.     update_event
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 刷新事件
  66.   #--------------------------------------------------------------------------
  67.   def update_event
  68.     for event in $game_map.events.values
  69.       next if !event.is_enemy?
  70.       if @event_atk[event.id] > 0
  71.        @event_atk[event.id] -= 1
  72.       end
  73.       new_x = event.x + (event.direction == 6 ? 1 : event.direction == 4 ? -1 : 0)
  74.       new_y = event.y + (event.direction == 2 ? 1 : event.direction == 8 ? -1 : 0)
  75.       if event.hp <= event.maxhp*0.4 and rand(101)>100-event.escape_rand and event.escape? and event.sp >= $game_skills[ENEMY_HP].sp_cost
  76.         if (event.x - $game_player.x).abs < 64 and
  77.           (event.y - $game_player.y).abs < 64
  78.           for i in 0..randg(2,3)
  79.             break if rand(100) < 10
  80.             event.move_away_from_player
  81.           end
  82.         end
  83.         damage_skill_enemy(event, $game_skills[ENEMY_HP])
  84.         break
  85.       end
  86.       if new_x == @x and new_y == @y and @event_atk[event.id] <= 0
  87.         if event.skill.size > 0 and rand(101)>100-event.skill_rand
  88.           skill = event.skill[rand(event.skill.size)]
  89.           damage_skill_enemy(event, $game_skills[skill])
  90.           break
  91.         end
  92.         dagame_acon_actor(@actor,event_damage(event,@actor),event.animation2_id,event)
  93.         break
  94.       end
  95.     end
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 判断可否移动
  99.   #--------------------------------------------------------------------------
  100.   def move?
  101.     if @actor.states.size == 0
  102.       return true
  103.     end
  104.     for i in @actor.states
  105.       if $data_states[i].restriction == 4
  106.         return false
  107.       end
  108.     end
  109.     return true
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 是否可以用技能
  113.   #--------------------------------------------------------------------------
  114.   def skill?
  115.     if @actor.states.size == 0
  116.       return true
  117.     end
  118.     for i in @actor.states
  119.       if $data_states[i].restriction == 1
  120.         return false
  121.       end
  122.     end
  123.     return true
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 刷新角色
  127.   #--------------------------------------------------------------------------
  128.   def update_actor
  129.     refresh(0) if @x != $game_player.x
  130.     refresh(1) if @y != $game_player.y
  131.     refresh(2) if @d != $game_player.direction
  132.     update_actor_attk if move?
  133.     update_actor_skill if move? and skill?
  134.     update_actor_item
  135.     update_bullet if @bullets.size > 0
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● 刷按下物品键时
  139.   #--------------------------------------------------------------------------
  140.   def update_actor_item
  141.     if Kboard.trigger?($R_Key_Z)
  142.       item = $data_items[@actor.item_key["Z"]]
  143.       return if item.nil?
  144.       item_effect(item)
  145.       if item.common_event_id > 0
  146.         $game_temp.common_event_id = item.common_event_id
  147.       end
  148.     end
  149.     if Kboard.trigger?($R_Key_X)
  150.       item = $data_items[@actor.item_key["X"]]
  151.       return if item.nil?
  152.       item_effect(item)
  153.       if item.common_event_id > 0
  154.         $game_temp.common_event_id = item.common_event_id
  155.       end
  156.     end
  157.     if Kboard.trigger?($R_Key_C)
  158.       item = $data_items[@actor.item_key["C"]]
  159.       return if item.nil?
  160.       item_effect(item)
  161.       if item.common_event_id > 0
  162.         $game_temp.common_event_id = item.common_event_id
  163.       end
  164.     end
  165.     def item_effect(item)
  166.       damage = @actor.item_effect(item)
  167.       $game_player.animation_id = item.animation2_id
  168.       $game_system.se_play(item.menu_se)
  169.       if item.consumable
  170.         $game_party.lose_item(item.id,1)
  171.       end      
  172.       $refresh["item"] = true
  173.     end
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● 刷新按下技能键时
  177.   #--------------------------------------------------------------------------
  178.   def update_actor_skill
  179.       if @actor_atktime <= 0
  180.        if Kboard.trigger?(KEYS["A"])
  181.         skill = $game_skills[@actor.key["A"]]
  182.         return if skill.nil?
  183.         if skill.scope == 2
  184.           rangs = ARPG_Rangs.new($game_player, skill.rang).rangs
  185.           damage_skill(@actor, skill, rangs, skill.dop?)
  186.         elsif skill.scope == 1 or skill.scope == 3
  187.           damage_skill(@actor, skill)
  188.            $game_temp.common_event_id = skill.common_event_id
  189.         end
  190.       end
  191.       if Kboard.trigger?(KEYS["S"])
  192.         skill = $game_skills[@actor.key["S"]]
  193.         return if skill.nil?
  194.         if skill.scope == 2
  195.           rangs = ARPG_Rangs.new($game_player, skill.rang).rangs
  196.           damage_skill(@actor, skill, rangs,skill.dop?)
  197.         elsif skill.scope == 1 or skill.scope == 3
  198.           damage_skill(@actor, skill)
  199.            $game_temp.common_event_id = skill.common_event_id
  200.         end
  201.       end
  202.       if Kboard.trigger?(KEYS["D"])
  203.         skill = $game_skills[@actor.key["D"]]
  204.         return if skill.nil?
  205.         if skill.scope == 2
  206.           rangs = ARPG_Rangs.new($game_player, skill.rang).rangs
  207.           damage_skill(@actor, skill, rangs,skill.dop?)
  208.         elsif skill.scope == 1 or skill.scope == 3
  209.           damage_skill(@actor, skill)
  210.            $game_temp.common_event_id = skill.common_event_id
  211.         end
  212.       end
  213.       if Kboard.trigger?(KEYS["F"])
  214.         skill = $game_skills[@actor.key["F"]]
  215.         return if skill.nil?
  216.         if skill.scope == 2
  217.           rangs = ARPG_Rangs.new($game_player, skill.rang).rangs
  218.           damage_skill(@actor, skill, rangs,skill.dop?)
  219.         elsif skill.scope == 1 or skill.scope == 3
  220.           damage_skill(@actor, skill)
  221.            $game_temp.common_event_id = skill.common_event_id
  222.         end
  223.       end
  224.       if Kboard.trigger?(KEYS["G"])
  225.         skill = $game_skills[@actor.key["G"]]
  226.         return if skill.nil?
  227.         if skill.scope == 2
  228.           rangs = ARPG_Rangs.new($game_player, skill.rang).rangs
  229.           damage_skill(@actor, skill, rangs,skill.dop?)
  230.         elsif skill.scope == 1 or skill.scope == 3
  231.           damage_skill(@actor, skill)
  232.            $game_temp.common_event_id = skill.common_event_id
  233.         end
  234.       end
  235.   end
  236. end
  237.   #--------------------------------------------------------------------------
  238.   # ● 刷新角色普通攻击行为
  239.   #--------------------------------------------------------------------------
  240.   def update_actor_attk
  241.     # C按下时
  242.     if ((Kboard.trigger?($R_Key_SPACE) or Kboard.trigger?($R_Key_RETURN)) or S[1])and @actor_atktime <= 0
  243.       if @actor.weapon_id.between?(50,35) # and $data_weapons[@actor.weapon_id].rang >= 1
  244.         new_x = @x + (@d == 6 ? 5 : @d == 4 ? -5 : 0)
  245.         new_y = @y + (@d == 2 ? 5 : @d == 8 ? -5 : 0)
  246.         event = $game_map.events[$game_map.check_event(new_x,new_y)]
  247.         return if !event.nil? and !event.is_enemy?
  248.         rang_atk#(@actor.animation1_id)
  249.         return
  250.       end
  251.       new_x = @x + (@d == 6 ? 1 : @d == 4 ? -1 : 0)
  252.       new_y = @y + (@d == 2 ? 1 : @d == 8 ? -1 : 0)
  253.       event = $game_map.events[$game_map.check_event(new_x,new_y)]
  254.       show_ain(@actor.animation1_id,true)
  255.       if $data_weapons[@actor.weapon_id].element_set.include?(17)
  256.         tag = []
  257.         rang = ARPG_Rangs.new($game_player, 2).rangs
  258.         for xy in rang
  259.           event = $game_map.events[$game_map.check_event(xy[0],xy[1])]
  260.           if !event.nil? and event.maxhp > 0
  261.             tag.push(event)
  262.           end
  263.         end
  264.         tag.each{|t|dagame_acon(t,event_damage(@actor, t),@actor.animation2_id)}
  265.       end
  266.       if $data_weapons[@actor.weapon_id].element_set.include?(18)
  267.         tag = []
  268.         rang = ARPG_Rangs.new($game_player, 4).rangs
  269.         for xy in rang
  270.           event = $game_map.events[$game_map.check_event(xy[0],xy[1])]
  271.           if !event.nil? and event.maxhp > 0
  272.             tag.push(event)
  273.           end
  274.         end
  275.         tag.each{|t|dagame_acon(t,event_damage(@actor, t),@actor.animation2_id)}
  276.       end
  277.       if !event.nil? and event.maxhp > 0 and @actor_atktime <= 0
  278.         @attev = event
  279.         dagame_acon(event,event_damage(@actor, event),@actor.animation2_id)
  280.       end
  281.     end
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 刷新精灵的移动以及接触判断
  285.   #--------------------------------------------------------------------------
  286.   def update_bullet
  287.     for bullet in @bullets
  288.       bullet.update
  289.       case bullet.hit_event
  290.       when String
  291.         if bullet.opacity <= 10
  292.           $scene.spriteset.delete_bullet(bullet)
  293.           @bullets.delete(bullet)
  294.         end
  295.       when Game_Event
  296.         event = bullet.hit_event
  297.         next if !event.is_enemy?
  298.         @attev = event
  299.         dagame_acon(event,event_damage(@actor, event),@actor.animation2_id)
  300.         $scene.spriteset.delete_bullet(bullet)
  301.         @bullets.delete(bullet)
  302.       end
  303.     end
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 生成远程攻击的精灵
  307.   #--------------------------------------------------------------------------
  308.   def rang_atk
  309.     bullet = ARPG_Bullet.new("Arrow", @x, @y, @d)
  310.     $scene.spriteset.add_bullet(bullet)
  311.     @bullets.push(bullet)
  312.     @actor_atktime = $data_weapons[@actor.weapon_id].time
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 获取被攻击中的事件
  316.   #--------------------------------------------------------------------------
  317.   def target
  318.     return @attev
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● 敌人死亡处理
  322.   #--------------------------------------------------------------------------
  323.   def chae_deal(event)
  324.     if event.hp <= 0
  325.       $game_system.enemy_cun += 1
  326.       list_level = @actor.level
  327.       list_maxhp = @actor.maxhp
  328.       list_maxsp = @actor.maxsp
  329.       list_skill = @actor.skills.dup
  330.       list_hp = @actor.hp
  331.       list_sp = @actor.sp
  332.       list_str = @actor.str
  333.       list_dex = @actor.dex
  334.       list_agi = @actor.agi
  335.       list_int = @actor.int
  336.       @actor.exp += event.exp
  337.       Mess_Text.write("#{@actor.name}击败了#{event.name}")
  338.       Mess_Text.write("#{@actor.name}获得#{event.exp}经验值")
  339.       if event.item.size > 0
  340.         for item in event.item
  341.           if rand(101) > 100-item[1]
  342.             Mess_Text.write("#{event.name}掉落了#{$data_items[item[0]].name}")
  343.             $game_party.gain_item(item[0], 1)
  344.           end
  345.         end
  346.       end
  347.       if event.weapon.size > 0
  348.         for weapon in event.weapon
  349.           if rand(101) > 100-weapon[1]
  350.             Mess_Text.write("#{event.name}掉落了#{$data_weapons[weapon[0]].name}")
  351.             $game_party.gain_weapon(weapon[0], 1)
  352.           end
  353.         end
  354.       end
  355.       if event.armor.size > 0
  356.         for armor in event.armor
  357.           if rand(101) > 100-armor[1]
  358.             Mess_Text.write("#{event.name}掉落了#{$data_armors[armor[0]].name}")
  359.             $game_party.gain_armor(armor[0], 1)
  360.           end
  361.         end
  362.       end
  363.       if @actor.level > list_level
  364.         @actor.hp = list_hp
  365.         @actor.sp = list_sp
  366.         Audio.me_play(LVUP_ME)
  367.         Mess_Text.write("#{@actor.name}等级提升:")
  368.         Mess_Text.write("#{@actor.name}HP最大值 上升 #{@actor.maxhp - list_maxhp}")
  369.         Mess_Text.write("#{@actor.name}SP最大值 上升 #{@actor.maxsp - list_maxsp}")
  370.       end
  371.       ls = []
  372.       if list_skill != @actor.skills
  373.         for s in @actor.skills
  374.           if !list_skill.include?(s)
  375.             ls.push s
  376.           end
  377.         end
  378.       end
  379.       ls.each{|skill|
  380.       Mess_Text.write("#{@actor.name}领悟:#{$game_skills[skill].name}")
  381.       }
  382.       $refresh["item"] = true
  383.       delete_event(event)
  384.       @attev = nil
  385.     end
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ●  删除事件
  389.   #--------------------------------------------------------------------------
  390.   def delete_event(event)
  391.     # 生成独立开关键
  392.     key = [$game_map.map_id, event.id, 'A']
  393.     # 更改独立开关
  394.     $game_self_switches[key] = true
  395.     $game_map.need_refresh = true
  396.     #$game_map.events.delete(event.id)
  397.     #$scene.spriteset.dispose
  398.     #$scene.spriteset = Spriteset_Map.new
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ● 敌人被攻击伤害处理(也就是角色的攻击)
  402.   #--------------------------------------------------------------------------
  403.   def dagame_acon(event,damage,ani_id)
  404.     event.hp -= damage.to_i
  405.     event.animation_id = ani_id
  406.     @hp_disp_time = HP_BAR_DISP_TIME
  407.     @actor_atktime = $data_weapons[@actor.weapon_id].time
  408.     if YC
  409.       @event_atk[event.id] = [[@event_atk[event.id]+randg(5,8), event.atk_time*3].min, 0].max
  410.     end
  411.     event.damage = damage
  412.     event.damage_pop = true
  413.     if rand(2)==1
  414.       #event.turn_toward_player
  415.       if randg(1,4) == 2
  416.         @event_atk[event.id] += randg(5,8)
  417.       end
  418.     end
  419.     if event.move_type == 1
  420.       event.move_type = 2
  421.       event.move_speed = 3
  422.       event.move_frequency = 6
  423.     end
  424.    
  425.     if event.damage == "Miss"
  426.       Mess_Text.write("#{event.name}没有受到伤害")
  427.     else
  428.       Mess_Text.write("#{event.name}受到了#{event.damage}点伤害")
  429.     end
  430.    

  431.     chae_deal(event)
  432.     if $game_party.all_dead?
  433.       $scene = Scene_Gameover.new
  434.     end
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # ● 角色被攻击伤害处理(也就是敌人的攻击)
  438.   #--------------------------------------------------------------------------
  439.   def dagame_acon_actor(actor,damage,ani_id,event)
  440.     event.white_flash = true
  441.     actor.hp -= damage.to_i
  442.     if YC
  443.       @actor_atktime = [[@actor_atktime+randg(5,8), $data_weapons[@actor.weapon_id].time*3].min, 0].max
  444.     end
  445.    
  446.     if event.attk_states[0] > 0 and rand(100) > 100-event.attk_states[1]
  447.       unless @actor.state_guard?(event.attk_states[0])
  448.         @actor.add_state(event.attk_states[0])
  449.       end
  450.     end
  451.    
  452.     $game_player.animation_id = ani_id
  453.     @event_atk[event.id] = event.atk_time
  454.     $game_player.damage = damage
  455.     $game_player.damage_pop = true
  456.    
  457.     if damage != "Miss"
  458.       Mess_Text.write("#{@actor.name}受到了#{$game_player.damage}点伤害")
  459.     else
  460.       Mess_Text.write("#{actor.name}没有受到伤害")
  461.     end
  462.    
  463.     if $game_party.all_dead?
  464.       $scene = Scene_Gameover.new
  465.     end
  466.   end
  467.   #--------------------------------------------------------------------------
  468.   # ● 敌人使用技能处理
  469.   #--------------------------------------------------------------------------
  470.   def damage_skill_enemy(user, skill, skill_rang=[])
  471.     return if user.sp < skill.sp_cost
  472.     if skill.scope == 1 or skill.scope == 2
  473.       user.animation_id = skill.animation1_id
  474.       Mess_Text.write("#{user.name}使用了#{skill.name}")
  475.       damage = event_damage_skill(user,@actor,skill)
  476.       dagame_acon_actor(@actor,damage,skill.animation2_id,user)
  477.       user.sp -= skill.sp_cost
  478.     elsif skill.scope == 3
  479.       user.animation_id = skill.animation1_id
  480.       user.animation_id = skill.animation2_id
  481.       #damage = event_damage(user,user)
  482.       damage = event_damage_skill(user,user,skill)
  483.       user.hp -= damage.to_i
  484.       user.sp -= skill.sp_cost
  485.       @event_atk[user.id] = user.atk_time
  486.       Mess_Text.write("#{user.name}使用了#{skill.name}恢复了#{damage.abs}HP")
  487.      end
  488.    end
  489.   #--------------------------------------------------------------------------
  490.   # ● 角色使用技能处理
  491.   #--------------------------------------------------------------------------
  492.   def damage_skill(user, skill, skill_rang=[],d = false)
  493.     if user.sp < skill.sp_cost
  494.       Mess_Text.write("SP不足")
  495.       return
  496.     end
  497.     if skill.scope == 1     
  498.       new_x = @x + (@d == 6 ? 1 : @d == 4 ? -1 : 0)
  499.       new_y = @y + (@d == 2 ? 1 : @d == 8 ? -1 : 0)
  500.       event = $game_map.events[$game_map.check_event(new_x,new_y)]
  501.       if !event.nil? and event.maxhp > 0 and @actor_atktime <= 0
  502.         Mess_Text.write("#{user.name}使用了#{skill.name}")
  503.         @attev = event
  504.         $game_player.animation_id = skill.animation1_id
  505.         damage = event_damage_skill(user, event, skill)
  506.         dagame_acon(event,damage,skill.animation2_id)
  507.         user.sp -= skill.sp_cost
  508.         @actor_atktime = skill.time
  509.         $game_skills[skill.id].exp += (damage/5).abs+(randg(damage*0.8,damage*1.2)/10)
  510.       end   
  511.     elsif skill.scope == 2
  512.       tag = []
  513.       for xy in skill_rang
  514.         event = $game_map.events[$game_map.check_event(xy[0],xy[1])]
  515.         if !event.nil? and event.maxhp > 0
  516.           tag.push(event)
  517.         end
  518.       end
  519.       if tag.size == 0
  520.         show_ain(skill.animation1_id ,d)
  521.         user.sp -= skill.sp_cost
  522.         @actor_atktime = skill.time#$data_weapons[@actor.weapon_id].time
  523.         return
  524.       end
  525.       Mess_Text.write("#{user.name}使用了#{skill.name}")
  526.       for e in tag
  527.         @attev = e
  528.         damage = event_damage_skill(user, e, skill)
  529.         dagame_acon(e,damage,skill.animation2_id)
  530.         @hp_disp_time = 0 if tag.size > 1
  531.       end
  532.       show_ain(skill.animation1_id,d)
  533.       @actor_atktime = skill.time
  534.       if tag != []
  535.         user.sp -= skill.sp_cost
  536.         $game_skills[skill.id].exp += (damage/5).abs+(randg(damage*0.8,damage*1.2)/10)
  537.       end
  538.     elsif skill.scope == 3
  539.       $game_player.animation_id = skill.animation1_id
  540.       $game_player.animation_id = skill.animation2_id
  541.       damage = @actor.skill_effect(@actor,skill)#event_damage_skill(user, @actor, skill)
  542.       #user.hp -= damage
  543.       #user.sp -= skill.sp_cost
  544.       $game_player.damage = damage.to_i
  545.       $game_player.damage_pop = true
  546.       #Mess_Text.write("#{user.name}使用了#{skill.name}恢复了#{damage.abs}HP")
  547.       @actor_atktime = skill.time#$data_weapons[@actor.weapon_id].time
  548.     end
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ● 获取普通攻击伤害
  552.   #--------------------------------------------------------------------------
  553.   def event_damage(attk,event)
  554.     hit_result = (rand(100) < attk.hit)
  555.     if hit_result
  556.       atk = [attk.atk - event.pdef / 2, 0].max
  557.       damage = atk * (20 + attk.str) / 20
  558.       amp = [damage.abs * 15 / 100, 1].max
  559.       damage += rand(amp+1) + rand(amp+1) - amp
  560.       damage = damage.abs
  561.       
  562.       if attk.plus_state_set.size > 0
  563.         if rand(100) > randg(85,100)
  564.           event.add_state(attk.plus_state_set[0])
  565.         end
  566.       end
  567.    
  568.     else
  569.       damage = "Miss"
  570.     end
  571.     return damage
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ● 获取技能攻击伤害
  575.   #--------------------------------------------------------------------------
  576.   def event_damage_skill(user,event,skill)
  577.     # 计算威力
  578.     power = skill.power + user.atk * skill.atk_f / 100
  579.     if power > 0
  580.       power -= event.pdef * skill.pdef_f / 200
  581.       power -= event.mdef * skill.mdef_f / 200
  582.       power = [power, 0].max
  583.     end
  584.     # 计算倍率
  585.     rate = 20
  586.     rate += (user.str * skill.str_f / 100)
  587.     rate += (user.dex * skill.dex_f / 100)
  588.     rate += (user.agi * skill.agi_f / 100)
  589.     rate += (user.int * skill.int_f / 100)
  590.     # 计算基本伤害
  591.     damage = power * rate / 20
  592.     # 分散
  593.       if skill.variance > 0 and damage.abs > 0
  594.         amp = [damage.abs * skill.variance / 100, 1].max
  595.         damage += rand(amp+1) + rand(amp+1) - amp
  596.       end
  597.       if skill.plus_state_set.size > 0
  598.         if rand(100) > 100-rand(skill.hit)
  599.           event.add_state(skill.plus_state_set[0])
  600.         end
  601.       end
  602.     return damage
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # ● 更新一下坐标
  606.   #--------------------------------------------------------------------------
  607.   def refresh(type)
  608.     case type
  609.     when 0 then @x = $game_player.x
  610.     when 1 then @y = $game_player.y
  611.     when 2 then @d = $game_player.direction
  612.     end
  613.   end
  614.   #--------------------------------------------------------------------------
  615.   # ● 角色显示动画#skill.animation1_id
  616.   #--------------------------------------------------------------------------
  617.   def show_ain(ain_id,d)
  618.     if d
  619.     case @d
  620.     when 2 then $game_player.animation_id = ain_id
  621.     when 4 then $game_player.animation_id = ain_id + 1
  622.     when 6 then $game_player.animation_id = ain_id + 2
  623.     when 8 then $game_player.animation_id = ain_id + 3
  624.     end
  625.     else
  626.       $game_player.animation_id = ain_id
  627.     end
  628.   end
  629. end
复制代码
就这俩脚本...每次都冲突....   提取放置物178行出错...  ...好吧..我傻了
我试过把 if @event_atk[event.id] > 0
       @event_atk[event.id] -= 1
      end
这段注释掉.. 可惜最后还是错了..谁能帮我解决
代码框有点问题..没用..dsu_plus_rewardpost_czw
作者: fxwd    时间: 2012-9-30 22:02
命令冲突了,最好的办法还是舍弃一个脚本。如果你舍不得弃掉的话,会点脚本你可以试着修改一下,不会的话最好的话还是弃掉。。。
作者: chd114    时间: 2012-9-30 22:03
前面那个去掉看看···
作者: 小夏坑面包    时间: 2012-10-1 08:08
chd114 发表于 2012-9-30 22:03
前面那个去掉看看···

= =俩都是..主要脚本捏...有没有高手来整合一下.....桑心中....{:2_270:}
作者: chd114    时间: 2012-10-1 11:30
小夏坑面包 发表于 2012-10-1 08:08
= =俩都是..主要脚本捏...有没有高手来整合一下.....桑心中....

打怪掉东西那个,是随机掉东西还是固定东西?
作者: 小夏坑面包    时间: 2012-10-2 08:58
chd114 发表于 2012-10-1 11:30
打怪掉东西那个,是随机掉东西还是固定东西?

插入在事件后的...可随机也可固定...
作者: chd114    时间: 2012-10-2 11:04
小夏坑面包 发表于 2012-10-2 08:58
插入在事件后的...可随机也可固定...

你还是发一下工程吧···什么叫可随机也可固定···
作者: 小夏坑面包    时间: 2012-10-2 14:50
chd114 发表于 2012-10-2 11:04
你还是发一下工程吧···什么叫可随机也可固定···

那你随便= =... 只要能用就可以...我不讲究的..




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1