Project1

标题: 特种驱魔香(地图中不遇到特定敌人)[修改] [打印本页]

作者: 凌冰    时间: 2008-2-14 18:30
标题: 特种驱魔香(地图中不遇到特定敌人)[修改]
看到纯技术提问区有人要我便做了,原本要求是这样的“比如做一个幽灵驱魔香!在这一张地图中就不会碰到幽灵!而其他的怪物还会碰到!”,我不确定是下面哪种情况,便两个都做了,由于没有分开写,对于新人用起来可能比较纠结,orz。那个……就自己琢磨吧!总做伸手党也不好。这个看明白就行了,我也不知道该上传什么效果图。
根据飞虫的三点要求对脚本进行了修改。另外我连此类物品的效果范围都限定死了,就是“无”,无论你在数据库里设置效果范围是我单、敌单、我全、敌全、我单HP0、我全HP0、使用者还是无,都会被我强制改成“无”,所以干脆那里表设定了。而且貌似你设定的消耗还是不消耗,都会消耗。(这~~~~太霸道了点吧!orz)

  1. #-------------------------------------------------------------------------------
  2. #特种驱魔香(地图中不遇到特定敌人)By 凌冰 and Eclair
  3. #下面设定驱魔时间,在物品的说明里添加EE敌人ID或ETE敌人ID(后面的敌人ID填你要驱魔
  4. #的敌人的ID),可以缺省,缺省则默认为无驱魔功效。
  5. #举例1,某物品名称为幽灵驱魔香,说明中包含EE1,也就是驱逐ID为1的敌人,即幽灵
  6. #则使用幽灵驱魔香后遇到的队伍里不再包含幽灵
  7. #举例2,某物品名称为幽灵驱魔香香香,说明中包含ETE1,也就是驱逐包含幽灵的队伍
  8. #则使用幽灵驱魔香香香后不再遇到包含幽灵的队伍
  9. #-------------------------------------------------------------------------------
  10. $驱魔时间 = 60
  11. #-------------------------------------------------------------------------------
  12. module RPG
  13.   class Item
  14.     def enemy_expel
  15.       return 0 if @description.split(/EE/)[1] == nil
  16.      return @description.split(/EE/)[1].to_i
  17.    end
  18.    def enemy_troop_expel
  19.      return 0 if @description.split(/ETE/)[1] == nil
  20.      return @description.split(/ETE/)[1].to_i
  21.    end
  22.    def description
  23.      des = @description.split(/EE/)[0]  if @description.split(/EE/)[1] != nil
  24.      des = @description.split(/ETE/)[0]  if @description.split(/ETE/)[1] != nil
  25.      des = "" if des == nil
  26.      return des
  27.    end
  28.    def scope
  29.      if @description.split(/ETE/)[1] != nil or @description.split(/EE/)[1] != nil
  30.      return 0
  31.      end
  32.      return @scope                            #Eclair
  33.    end
  34.   end
  35. end
  36. class Scene_Item
  37.   alias eci_update_item update_item
  38.   def update_item
  39.     eci_update_item
  40.     return if @item == nil
  41.     if Input.trigger?(Input::C)
  42.       if @item.enemy_expel > 0
  43.         $enemy_expel_switch = true
  44.       $enemy_expel = @item.enemy_expel
  45.       $game_system.timer = $驱魔时间 * Graphics.frame_rate
  46.       $game_system.timer_working = true
  47.         $game_party.lose_item(@item.id, 1)
  48.       end
  49.       if @item.enemy_troop_expel > 0
  50.         $enemy_troop_expel_switch = true
  51.       $enemy_troop_expel = @item.enemy_troop_expel
  52.       $game_system.timer = $驱魔时间 * Graphics.frame_rate
  53.       $game_system.timer_working = true
  54.         $game_party.lose_item(@item.id, 1)
  55.       end
  56.       @item_window.refresh             #Eclair
  57.     end
  58.   end
  59. end

  60. class Sprite_Timer < Sprite
  61.   def update
  62.     super
  63.     # 设置计时器执行中为可见
  64.     self.visible = $game_system.timer_working
  65.     # 如果有必要再次描绘计时器
  66.     if $game_system.timer / Graphics.frame_rate != @total_sec
  67.       # 清除窗口内容
  68.       self.bitmap.clear
  69.       # 计算总计秒数
  70.       @total_sec = $game_system.timer / Graphics.frame_rate
  71.       # 生成计时器显示用字符串
  72.       if $enemy_expel_switch and @total_sec < 1
  73.         $game_system.timer_working = false
  74.         $enemy_expel_switch = false
  75.       end
  76.       if $enemy_troop_expel_switch and @total_sec < 1
  77.         $enemy_troop_expel_switch = false
  78.         $game_system.timer_working = false
  79.       end
  80.       min = @total_sec / 60
  81.       sec = @total_sec % 60
  82.       text = sprintf("%02d:%02d", min, sec)
  83.       # 描绘计时器
  84.       self.bitmap.font.color.set(255, 255, 255)
  85.       self.bitmap.draw_text(self.bitmap.rect, text, 1)
  86.     end
  87.   end
  88. end
  89. class Game_Troop
  90.   def setup(troop_id)
  91.     # 由敌人序列的设置来确定队伍的设置
  92.     @enemies = []
  93.     troop = $data_troops[troop_id]
  94.     for i in 0...troop.members.size
  95.       enemy = $data_enemies[troop.members[i].enemy_id]
  96.       if enemy != nil
  97.         unless $enemy_expel_switch and enemy.id == $enemy_expel
  98.         @enemies.push(Game_Enemy.new(troop_id, i))
  99.         end
  100.       end
  101.       if @enemies.size == 0
  102.         $zero_troop = troop_id
  103.       end
  104.     end
  105.   end
  106. end
  107. class Game_Map
  108.   def encounter_list
  109.     troop_list = []
  110.       for id in @map.encounter_list
  111.         for i in 0...$data_troops[id].members.size
  112.           unless $enemy_troop_expel_switch and
  113.                  $data_troops[id].members[i].enemy_id == $enemy_troop_expel
  114.                  if id == $zero_troop
  115.                     troop_list.push(id)
  116.                 end
  117.           end
  118.         end
  119.       end
  120.     return troop_list
  121.   end
  122. end
复制代码

范例工程
http://rpg.blue/upload_program/files/特种驱魔香_83419898.rar
作者: 飞虫    时间: 2008-2-14 18:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: 飞虫    时间: 2008-2-14 18:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌冰    时间: 2008-2-14 18:49
以下引用飞虫于2008-2-14 10:43:37的发言:

有三点需要修改的地方

1 设置不遇敌  虽然起到了驱散效果 但仍然会有遇敌事件
2 设置不遇敌  驱魔香会直接产生效果
3 蛇者不遇敌  在物品介绍中 会出现 EE 的字样~

第二点不明白@_@
还有我是凌冰,不是冰凌
作者: 飞虫    时间: 2008-2-14 18:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌冰    时间: 2008-2-14 20:12
以下引用飞虫于2008-2-14 10:43:37的发言:

有三点需要修改的地方

1 设置不遇敌  虽然起到了驱散效果 但仍然会有遇敌事件
2 设置不遇敌  驱魔香会直接产生效果
3 设置不遇敌  在物品介绍中 会出现 EE 的字样~

按你这三点要求修改过了,只是没想到会涉及到这么多类
作者: q2571875    时间: 2008-2-14 22:38
不错啊,驱魔的
作者: Eclair    时间: 2008-2-14 23:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌冰    时间: 2008-2-15 01:23
以下引用Eclair于2008-2-14 15:24:33的发言:

不告诉新手……让他们自己去看好像也不太好。
这部分涉及的知识已经比较向高级靠拢了,新手看起来的确会很困难的。

这也是没办法的事情,就算我写的再详细,他的技术层次没达到,也不容易看懂啊
再说了,我也不是从菜鸟开始做起的吗?(虽然现在也不怎么样)
作者: shanely    时间: 2008-2-15 02:37
过来支持个~
先收藏了~{/cy}

作者: 凌冰    时间: 2008-2-15 13:53
以下引用shanely于2008-2-14 18:37:16的发言:

过来支持个~
先收藏了~

谢了!
-----------为了防止帖子沉底,自己顶一个-------------------------------
作者: 沉影不器    时间: 2008-2-15 16:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌冰    时间: 2008-2-15 17:52
以下引用沉影不器于2008-2-15 8:11:58的发言:

可以改成很棒的脚本

那个......限制troop载入敌人不合理,换我做的话应该会在call_battle时

条条大路通罗马嘛
作者: Eclair    时间: 2008-2-15 21:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌冰    时间: 2008-2-16 02:53
以下引用Eclair于2008-2-15 13:38:49的发言:


以下引用Eclair于2008-2-14 15:24:33的发言:

不告诉新手……让他们自己去看好像也不太好。
这部分涉及的知识已经比较向高级靠拢了,新手看起来的确会很困难的。


可是这样新手们又要怎么去用呢?
脚本可不是只为交流而存在的,哎呀...

用法在脚本里说过了,至于脚本的具体说明,我下次发脚本会注意的
作者: Eclair    时间: 2008-2-16 22:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: 渎唻娴暀    时间: 2008-2-16 22:37
高 技术
作者: 啸心    时间: 2008-2-16 23:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌冰    时间: 2008-2-17 00:34
以下引用Eclair于2008-2-16 14:34:33的发言:

嗯……发现了一些BUG……已经除去了^^
撒……不是拆LZ的台哦~~~
1:物品栏为空时摁下C键出错跳出:
解决:增加@item为nil时返回的判断
2:使用除驱魔香之外所有的可使用物品出错
解决:def scope部分添加返回@scope的判断
3:使用那啥……幽灵驱魔香香香的时候窗口木刷新
解决:保险起见么……摁C就立刻刷新ORZ- -|||

谢谢斑竹
拆台总比让我丢人好
作者: Eclair    时间: 2008-2-19 03:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌冰    时间: 2008-2-19 03:10
orz
终于有东西发布了,斑竹是不是因为脚本作者中谢了斑竹的名字才给我发布啊!
以后脚本作者全部写成“By 凌冰 and Eclair”{/cy}
开开玩笑
作者: Eclair    时间: 2008-2-19 03:17
提示: 作者被禁止或删除 内容自动屏蔽




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