Project1

标题: 2刀,搞了半天都不行 [打印本页]

作者: ←妖狐の丰→    时间: 2008-9-7 02:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: drgdrg    时间: 2008-9-7 02:44
我记得好像即使是二刀流,第二个位置的装备也是 armor1 ,不知有没记错

  武器攻击力 = weapon.atk + armor1.atk  看看可不可以


PS: += 符号的意思是:  等于自己再加上后面的数
比如 a += b + c 就是 a = a + ( b + c )

作者: 真の邵东    时间: 2008-9-7 02:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: ←妖狐の丰→    时间: 2008-9-7 03:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 真の邵东    时间: 2008-9-7 03:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: drgdrg    时间: 2008-9-7 03:19

那用for weapon in weapons.compact 这个看看

我在GAME_ACTOR里面这么改可以通过:

  #--------------------------------------------------------------------------
  # ● 获取基本攻击力
  #--------------------------------------------------------------------------
  def base_atk
    n = actor.parameters[2, @level]

    for weapon in weapons.compact do n += weapon.atk end   #只算两把武器的攻击力

    return n
  end
作者: ←妖狐の丰→    时间: 2008-9-7 03:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: drgdrg    时间: 2008-9-7 03:52
下面这样改也能通过啊,进游戏一看加成情况也对

  1.   #--------------------------------------------------------------------------
  2.   # ● 获取基本攻击力
  3.   #--------------------------------------------------------------------------
  4.   def base_atk
  5.     n = actor.parameters[2, @level]
  6.     for weapon in weapons.compact
  7.       n += weapon.atk if actor.two_swords_style  #二刀流正常计算
  8.       n += weapon.atk * 10 if !actor.two_swords_style  #非二刀流的话,武器攻击力10倍,为了测试明显一点= =
  9.     end
  10.     return n
  11.   end
复制代码



作者: ←妖狐の丰→    时间: 2008-9-7 04:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: 龙轩    时间: 2008-9-7 04:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: ←妖狐の丰→    时间: 2008-9-7 05:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: drgdrg    时间: 2008-9-7 06:27
刚改了半天,终于发现问题所在。。。。。

这样可以了吧
  1.   #--------------------------------------------------------------------------
  2.   # ● 获取基本攻击力
  3.   #--------------------------------------------------------------------------
  4.   def base_atk
  5.     n = actor.parameters[2, @level]

  6.     n += weapons[0].atk if weapons[0]!=nil
  7.     n += weapons[1].atk if weapons[1]!=nil

  8.     return n
  9.   end
复制代码


是否二刀流都可以不写,因为非二刀流没有weapons[1]
如果没有if weapons[0]!=nil、if weapons[1]!=nil ,一拆下装备就报错给你看


作者: ←妖狐の丰→    时间: 2008-9-7 06:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: drgdrg    时间: 2008-9-7 07:40
以下引用←妖狐の丰→于2008-9-6 22:49:54的发言:

是否二刀流都可以不写,因为非二刀流没有weapons[1]
这句话我不太理解啊........个人理解能力,没办法.................

那个...我该如何把两个武器攻击力先加起来,而不通过base_atk?

是   if weapons[0]!=nil  and if  weapons[1]!=nil
   n ***= (weapons[1].atk + weapons[0].atk)

那非2刀的就是weapons[0].atk了吗?
这样吗?(感觉怪怪的).......弱弱的问下...nil 理解为什么?


nil就是空,就是没有这东西。。。。
比如你把第一个位置的武器卸下来,weapons[0]就变成了nil,
nil是没有atk的,所以报错

非二刀也要判断
if  weapons[0]!=nil
   n ***= weapons[0].atk
end

作者: ←妖狐の丰→    时间: 2008-9-7 08:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: drgdrg    时间: 2008-9-7 09:20
以下引用←妖狐の丰→于2008-9-7 0:37:03的发言:

发现一个很XXX的问题:(2刀里)
以下格式为:
装备(A为一号武器,B为2号)(装备本身攻击力)----人物最后伤害值(正确与否)
装备A(5)-----3(正确)
   装备B(5)-----11(...)
   装备B(9)-----11(...)
   装备B(15)-----11(...)

装备A(9)-----6(正确)
   装备B(5)-----36(...)
   装备B(9)-----36(...)
   装备B(15)-----36(...)

装备A(15)-----10(正确)
   装备B(5)-----100(...)
   装备B(9)-----100(...)
   装备B(15)-----100(...)

我把脚本内容加了几个end , return n
如果不加的时候两把都是个位数的武器装再一起.......上百了,弱些的400,强的999
但是单武器则为正确值

大人看看还有什么能更改的吗?


你的问题总是很难看懂= =

加了几个end什么意思?end不是随便加的,而是有对应语句需要后面加end的时候才加。。。
return n是返回值嘛。。。比如你定义的def str之类的函数内部计算以后得到的值作为返回值,别的地方使用到str时候就用返回值代替str
(...)什么意思……

还有你说值很大是不是用了 n *= XXX 。    *= 的意思知道吗……

话说问题现在到底是解决了没有。。。
作者: ←妖狐の丰→    时间: 2008-9-7 16:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: drgdrg    时间: 2008-9-7 18:08
end 加得应该没想象中那么乱吧?不然的话系统不就出错了?

——但是至少也要知道是什么东西需要加END:

  1. class XXX
  2.   ……
  3. end

  4. def XXX
  5.   ……
  6. end

  7. if XXXXX
  8. ……
  9. end

  10. …… if  XXXXX   不需要加end

  11. for X in XXXX
  12. ……
  13. end

  14. 综合起来比如:
  15. class AAA
  16. def BBB
  17.    for C in DDD
  18.      …… if KKK (无end)
  19.      if EEE
  20.        ……
  21.      end (if的)
  22.    end (for的)
  23. end(BBB的)
  24. end(AAA的)
复制代码


(..)错误啦~~当武器A为定值时,装备武器B的伤害也为定值(只与武器A有关,与武器B无关)
——那肯定是公式的问题了

因为武器攻与base_atk有些差距,所以脚本能不能作成这样呢:
for weapon in weapons.compact
n ***= weapon.atk
如果是2刀时返回失败(并运用以下公式)
——不能返回失败,否则二刀就都是返回0了,一旦前面已经有个返回值成立,后面的代码就全部不执行。应该改成 如果2刀,就n = actor.parameters[2, @level]重来,或者干脆 n ***= weapon.atk就必须非2刀才执行
n ***=(weapon1+weapon2)(当武器AB装备时)(重点啊,我想这也是我和大人分歧的原因)
   n ***=weapon1  当武器A装备时——并且B不装备时!
   n ***=weapon2  当武器B装备时——并且A不装备时!
end(应该先不return n吧?因为下面还有)
for armor in armors.compact do n ***= armor.atk end(这是后面的了,暂且不管)

举个例子,当***为乘除而并非加减的情况下........(比如大人代个乘来写写看)

代乘的话,依大人原来给的公式2刀会变成n*=a*b(而我需要的是n*=(a+b)),现在就需要那a+b

麻烦大人了!~~
——不是很清楚的话不要老用*=、+=之类的符号,用最简单的 n = n *** ( a + b )更直观点 
这样好了……


  1.   def XXX
  2.     n = actor.parameters[2, @level]
  3.     n = n *** weapons[0].atk if ( weapons[0]!=nil and !two_swords_style )
  4.     if two_swords_style
  5.       n = n *** weapons[0].atk if ( weapons[0]!=nil and weapons[1] == nil)
  6.       n = n *** weapons[1].atk if ( weapons[1]!=nil and weapons[0] == nil)
  7.       n = n *** ( weapons[0].atk +  weapons[1].atk ) if  ( weapons[0]!=nil and weapons[1] != nil)
  8.     end
  9.     for item in armors.compact do n += item.atk end
  10.     return n
  11.   end
复制代码


[/quote]
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: ←妖狐の丰→    时间: 2008-9-8 04:47
提示: 作者被禁止或删除 内容自动屏蔽




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