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

Project1

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

[已经解决] 两个关于战斗的问题

[复制链接]

Lv4.逐梦者

梦石
10
星屑
4436
在线时间
422 小时
注册时间
2017-12-2
帖子
227
跳转到指定楼层
1
发表于 2018-5-13 16:19:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
首先环境是VA(废话)
1.关于状态 1号状态是在HP等于0的时候自动附加上去的,那有没有什么办法在HP=1的时候使自己的HP始终保持在1呢?(当然,是可以往上加的)
然后我就想到另一个问题,有没有办法实现在受到高于当前HP的伤害时,通过损失自己的某件物品来使这此伤害无效?
2.关于技能 如果我想实现使用一个技能需要消耗一定的东西要怎么实现?比如发动一个技能要消耗一定量的HP,减少某能力的上限,消耗背包中的某种道具这样的
之前找到过一个相关的脚本,但是是XP的啊啊啊啊orz

Lv1.梦旅人

梦石
0
星屑
230
在线时间
22 小时
注册时间
2018-4-30
帖子
47
2
发表于 2018-5-13 18:02:29 | 只看该作者
可以用公共事件吧
在技能效果中添加公共事件
公共事件使角色能力下降
吾潜水数十载,一直在潜水,从未被超越。
(其实有9年是自己意淫的)

以红莲贯穿落日
《王者之证》巨坑在填中................
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
10
星屑
4436
在线时间
422 小时
注册时间
2017-12-2
帖子
227
3
 楼主| 发表于 2018-5-13 18:27:36 | 只看该作者
寂夜幻想 发表于 2018-5-13 18:02
可以用公共事件吧
在技能效果中添加公共事件
公共事件使角色能力下降

嗯…………不过这样有一个问题,公共事件是技能发动以后再执行的?
那这么一来就会出现问题了,比如角色的HP只有10点,发动技能需要20点HP,这个时候技能应该可以放出来?但实际上应该是不满足支付条件所以技能无法使用才对吧……

评分

参与人数 1+1 收起 理由
寂夜幻想 + 1 嗯。。。。所以还是要脚本

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3646
在线时间
899 小时
注册时间
2017-10-30
帖子
347
4
发表于 2018-5-13 19:26:32 | 只看该作者
本帖最后由 MireniamuYuki 于 2018-5-15 20:09 编辑

第一个问题,状态法附上一个隐藏状态(实质为HP=1时免疫伤害的状态ID)
Game_ActionResult 生成伤害最后那里(73行)加上
  1. if @battler.state?(X) #  X换成HP=1时附加上的状态
  2. @battler.hp = 1 ? @hp_damage = 0 : @hp_damage
  3. end
复制代码

(未测试)

至于第二个,F1脚本部分自带“制作消耗物品的技能”的教程,自己去看看学学就知道了

点评

恩……没有报错,但还是倒下了……  发表于 2018-5-16 13:41
已经修改  发表于 2018-5-15 20:43
可能是我眼疾,,但是我又翻了一遍还是没找到关于“制作消耗物品的技能”的教程orz  发表于 2018-5-14 13:13
呀!我之前都没翻到来着,再去看看。。  发表于 2018-5-14 12:12
啥都会,啥都不擅长
一个VA群:679174724 欢迎来玩
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1487
在线时间
196 小时
注册时间
2016-8-9
帖子
57
5
发表于 2018-5-14 18:57:07 | 只看该作者
FI里的相关教程



点评

原来在脚本里……  发表于 2018-5-15 18:18
正在做的游戏,缓慢填坑中……
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
10
星屑
4436
在线时间
422 小时
注册时间
2017-12-2
帖子
227
6
 楼主| 发表于 2018-5-15 18:53:20 | 只看该作者
MireniamuYuki 发表于 2018-5-13 19:26
第一个问题,状态法附上一个隐藏状态(实质为HP=1时免疫伤害的状态ID)
Game_ActionResult 生成伤害最后那 ...

我试了一下,它会在你写的代码的最后一行报错
“发生NoMethodError。
undefined method damage='for nil:NilClass”
这样

点评

打错了。。已经修正  发表于 2018-5-15 20:09
不知道为什么传不上来图片就只能打字了= =应该没有打错  发表于 2018-5-15 18:53
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2333
在线时间
275 小时
注册时间
2017-7-25
帖子
163
7
发表于 2018-5-17 20:46:56 | 只看该作者

  1. module IISNOW_ITEM_CONSUME_SKILL
  2.   
  3.   PATTERN = /.*ITEM:ID(\d+)NUM(\d+)(.*)/m  
  4.   # 非专业人士请勿修改,正则匹配式,修改后注意备注写法的改变,下同
  5.   PATTERN_E = /.*EQU:ID(\d+).*/m
  6.   PATTERN_A = /.*ARM:ID(\d+).*/m
  7.   STR_UN_CONSUM = "UN" # 物品不消耗标识
  8.   
  9.   TP_ICON = 189  # 你说你懂的
  10.   MP_ICON = 188
  11.   
  12.   STYLE = 1 # 界面风格(支持1,2,3,4效果自己体会,不推荐4)
  13.   STYLE_A = 2 # 提示风格(支持1,2,3,同上)
  14.   PLACE = 3 # 消耗物品的图标与数目间的间距
  15.   PLACE_E = 2 # 不同消耗物品间的间距
  16.   ORDER = [0,1,2]     # 从右往左的消耗显示顺序(0,TP;1,MP;2,物品)
  17.   
  18.   COLOR_ITEM = Color.new(255,255,255) # 物品消耗数目的字的颜色
  19.   COLOR_WE_L = Color.new(255,0,0) # 具体限定武器的框的颜色
  20.   COLOR_WE_A = Color.new(255,0,0) # 具体限定防具的框的颜色
  21.   COLOR_UN_I = Color.new(0,255,0) # 物品限定但不消耗的提示框的颜色
  22.   
  23.   TRAN_DE = 100 # 风格_A2下的透明度再次降低(最大为160)
  24. end

  25. class Window_SkillList
  26.   
  27.   include IISNOW_ITEM_CONSUME_SKILL
  28.   
  29.   def col_max
  30.     case STYLE
  31.     when 1,3,4
  32.       return 2
  33.     when 2
  34.       return 1
  35.     end
  36.   end
  37.   
  38.   def item_height
  39.     case STYLE
  40.     when 3
  41.       line_height * 2
  42.     when 1,2,4
  43.       line_height + 1
  44.     end
  45.   end
  46.   
  47.   def draw_item(index)
  48.     skill = @data[index]
  49.     if skill
  50.       rect = item_rect(index)
  51.       rect.width -= 4
  52.       draw_item_name(skill, rect.x, rect.y, enable?(skill))
  53.       draw_skill_cost(rect, skill)
  54.     end
  55.   end
  56.   
  57.   alias :iisnow_draw_item_name :draw_item_name
  58.   def draw_item_name(item, x, y, enabled = true, width = 172)
  59.     iisnow_draw_item_name(item, x, y, enabled,width)
  60.     rect_temp = text_size(item.name)
  61.     if @actor.skill_eq_limt(item)
  62.       draw_kuang(x + 24 + PLACE  + rect_temp.width,y,24,24,COLOR_WE_L,enabled)
  63.       draw_icon(@actor.skill_eq_limt(item).icon_index,x + 24 + PLACE + rect_temp.width,y,enabled)
  64.       rect_temp.width += (24 + PLACE_E)
  65.     end
  66.     if @actor.skill_ar_limt(item)
  67.       draw_kuang(x + 24 + PLACE + rect_temp.width,y,24,24,COLOR_WE_A,enabled)
  68.       draw_icon(@actor.skill_ar_limt(item).icon_index,x + 24 + PLACE + rect_temp.width,y,enabled)
  69.     end
  70.   end
  71.   
  72.   def draw_skill_cost(rect, skill)
  73.     str = create_string(skill)
  74.     color = [tp_cost_color,mp_cost_color,COLOR_ITEM]
  75.     str.each_with_index do |str,i|
  76.       next unless str
  77.       change_color(color[ORDER[i]], enable?(skill))
  78.       kuang = false
  79.       case i
  80.       when ORDER.index(2)
  81.         icon_index = str[0].icon_index
  82.         kuang = true if str[2]
  83.         str = str[1]
  84.       when ORDER.index(1)
  85.         icon_index = MP_ICON
  86.       when ORDER.index(0)
  87.         icon_index = TP_ICON
  88.       end
  89.       contents.font.size = STYLE == 1 ? Font.default_size - 6 : Font.default_size
  90.       draw_style(icon_index,rect,str,skill,kuang)
  91.     end
  92.     contents.font.size = Font.default_size
  93.   end
  94.   
  95.   def draw_style(icon_index,rect,str,skill,kuang)
  96.     case STYLE
  97.     when 1
  98.       draw_kuang(rect.width - 24 + rect.x,rect.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
  99.       draw_icon(icon_index,rect.width - 24 + rect.x,rect.y,enable?(skill))
  100.       draw_text(Rect.new(rect.x + rect.width - 24,rect.y + 8,24,16),str,2) if str.to_i != 1
  101.       rect.width -= (24 + PLACE_E)
  102.     when 2,4
  103.       draw_text(rect,str,2) if str.to_i != 1
  104.       rect.width -= (text_size(str).width + PLACE) if str.to_i != 1
  105.       draw_kuang(rect.width - 24 + rect.x,rect.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
  106.       draw_icon(icon_index,rect.width - 24 + rect.x,rect.y,enable?(skill))
  107.       rect.width -= (24 + PLACE_E)
  108.     when 3
  109.       rect_temp = rect.clone
  110.       rect_temp.y += (rect_temp.height / 2)
  111.       rect_temp.height /= 2
  112.       draw_text(rect_temp,str,2) if str.to_i != 1
  113.       rect.width -= (text_size(str).width + PLACE) if str.to_i != 1
  114.       draw_kuang(rect.width - 24 + rect.x,rect_temp.y,24,24,COLOR_UN_I,enable?(skill)) if kuang
  115.       draw_icon(icon_index,rect.width - 24 + rect.x,rect_temp.y,enable?(skill))
  116.       rect.width -= (24 + PLACE_E)
  117.     end
  118.   end
  119.   
  120.   def draw_kuang(x,y,w,h,c,fl)
  121.     c.alpha = fl ? 255 : translucent_alpha - (STYLE_A == 2 ? TRAN_DE : 0)
  122.     case STYLE_A
  123.     when 1
  124.       contents.fill_rect(x,y,w,1,c)
  125.       contents.fill_rect(x,y + 1,1,h - 1,c)
  126.       contents.fill_rect(x + 1,y + h - 1,w - 1,1,c)
  127.       contents.fill_rect(x + w -1,y + 1,1,h - 2,c)
  128.     when 2
  129.       contents.fill_rect(x,y,w,h,c)
  130.     end
  131.   end
  132.   
  133.   def create_string(skill)
  134.     str1 = @actor.skill_tp_cost(skill)
  135.     str2 = @actor.skill_mp_cost(skill)
  136.     str3 = @actor.skill_it_cost(skill)
  137.     str1 = str1 > 0 ?  str1.to_s : nil
  138.     str2 = str2 > 0 ?  str2.to_s : nil
  139.     str3 = str3[1] > 0 ? [str3[0],str3[1].to_s,str3[2]] : nil
  140.     str = [str1,str2,str3]
  141.     iisnow = [str[ORDER[0]],str[ORDER[1]],str[ORDER[2]]]
  142.     iisnow
  143.   end
  144.   
  145. end

  146. class Game_BattlerBase
  147.   
  148.   include IISNOW_ITEM_CONSUME_SKILL
  149.   
  150.   def skill_it_cost(skill)
  151.     skill.note.match(PATTERN)
  152.     item = $data_items[$1.to_i] if $1 != 0
  153.     num = $2.to_i
  154.     flag = $3.match(/^#{STR_UN_CONSUM}/) if $3
  155.     return [item,num,flag]
  156.   end
  157.   
  158.   def skill_eq_limt(skill)
  159.     skill.note.match(PATTERN_E)
  160.     eq = $data_weapons[$1.to_i] if $1 != 0
  161.     return eq
  162.   end
  163.   
  164.   def skill_ar_limt(skill)
  165.     skill.note.match(PATTERN_A)
  166.     eq = $data_armors[$1.to_i] if $1 != 0
  167.     return eq
  168.   end
  169.   
  170.   alias :iisnow_skill_cost_payable? :skill_cost_payable?
  171.   def skill_cost_payable?(skill)
  172.     result1 = iisnow_skill_cost_payable?(skill)
  173.     if skill_it_cost(skill)[0]
  174.       result2 = $game_party.item_number(skill_it_cost(skill)[0]) >= skill_it_cost(skill)[1]
  175.       return result1 && result2
  176.     end
  177.     return result1
  178.   end
  179.   
  180.   alias :iisnow_pay_skill_cost :pay_skill_cost
  181.   def pay_skill_cost(skill)
  182.     iisnow_pay_skill_cost(skill)
  183.     if skill_it_cost(skill)[0] && !skill_it_cost(skill)[2]
  184.       $game_party.gain_item(skill_it_cost(skill)[0],-skill_it_cost(skill)[1])
  185.     end
  186.   end

  187. end

  188. class Game_Actor
  189.   
  190.   alias :iisnow_skill_wtype_ok? :skill_wtype_ok?
  191.   def skill_wtype_ok?(skill)
  192.     result1 = iisnow_skill_wtype_ok?(skill)
  193.     result2 = skill_eq_limt(skill) ? weapons.include?(skill_eq_limt(skill)) : true
  194.     result3 = skill_ar_limt(skill) ? armors.include?(skill_ar_limt(skill)) : true
  195.     return result1 && result2 && result3
  196.   end
  197.   
  198. end


  199. #ITEM:ID18NUM3 代表每次使用该技能需要消耗第18号物品,
  200. #数量3个,没有该物品或不足消耗量将无法发动技能

  201. #ITEM:ID18NUM1UN 代表使用该技能的前提条件是队伍持有第18号物品1个,但是不会被消耗

  202. #ARM:ID10 代表使用该技能的前提条件是使用者装备着第10号防具。

  203. #ITEM:ID19NUM1
  204. #EQU:ID2 这两行代表,代表使用该技能的前提条件是使用者装备着第2号武器。
  205. #每次使用该技能消耗第19号物品1个

复制代码

点评

大……大佬……  发表于 2018-5-20 17:29
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 07:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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