Project1

标题: 问一句脚本写法 [打印本页]

作者: 幻耶    时间: 2009-7-4 11:24
标题: 问一句脚本写法
如果当前1号公共事件正在运行,用脚本怎么写?
作者: IamI    时间: 2009-7-4 11:29
很好奇的问一下,是不是并行事件……不然的话脚本里要做手脚
作者: 幻耶    时间: 2009-7-4 11:41
本帖最后由 幻耶 于 2009-7-4 11:43 编辑

是ARPG。。我把攻击敌人的处理放在公共事件里了,比如主角如果打中1号敌人事件就调用1号公共事件,不是并行的,我想在脚本里添加:如果当前命中了几号敌人(也就是正在调用几号公共事件),就进行一些别的判断处理,比如敌人的属性对主角武器的抗性什么的。。。
作者: 后知后觉    时间: 2009-7-4 11:49
在这类公共事件的开头打开一个对应的开关
然后在这个公共事件的最后关闭这个对应的开关

判断这个开关的状态即可
作者: 幻耶    时间: 2009-7-4 12:38
本帖最后由 幻耶 于 2009-7-4 12:48 编辑

我是在公共事件里加一个变量赋值:打中1号敌人事件5号变量=1,打中2号敌人事件5号变量=2。。。。。。这样指定在脚本里直接一个一个指定编号没问题,如下。但是来个FOR循环怎么就没效果了?不用循环要写很长了。。

     if $game_variables[5] == 2 and $game_map.events[2].name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
     elsif $game_variables[5] == 2 and $game_map.events[2].name.include?("h")
       $game_variables[36] = 0
     elsif $game_variables[5] == 2 and $game_map.events[2].name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
     else
       $game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i
     end




   for i in 1..20
     if $game_variables[5] == i and $game_map.events.name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
     elsif $game_variables[5] == i and $game_map.events.name.include?("h")
       $game_variables[36] = 0
     elsif $game_variables[5] == i and $game_map.events.name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
     else
       $game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i
     end
   end
作者: IamI    时间: 2009-7-4 13:07
本帖最后由 IamI 于 2009-7-4 13:09 编辑
本帖最后由 幻耶 于 2009-7-4 12:48 编辑
     if $game_variables[5] == 2 and $game_map.events[2].name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
     elsif $game_variables[5] == 2 and $game_map.events[2].name.include?("h")
       $game_variables[36] = 0
     elsif $game_variables[5] == 2 and $game_map.events[2].name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
     else
       $game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i
     end




   for i in 1..20
     if $game_variables[5] == i and $game_map.events【i】.name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
     elsif $game_variables[5] == i and $game_map.events.name.include?("h")
       $game_variables[36] = 0
     elsif $game_variables[5] == i and $game_map.events.name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
     else
       $game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i
     end
   end

下面给我【i】(请将中括号改成英文输入法的)统统套上去
作者: 幻耶    时间: 2009-7-4 14:12
本帖最后由 幻耶 于 2009-7-4 14:14 编辑

写成下面这样??也没用,不管敌人事件的名字里有什么字母"f"、"h"、"t",变量36得出的结果总是条件分歧的最后一个:$game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i
但是把事件编号直接套进去就会有不同的效果,奇怪



   for i in 1..20
     if $game_variables[5] == i and $game_map.events.name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
     elsif $game_variables[5] == i and $game_map.events.name.include?("h")
       $game_variables[36] = 0
     elsif $game_variables[5] == i and $game_map.events.name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
     else
       $game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i
     end
   end
作者: 后知后觉    时间: 2009-7-4 14:54
本帖最后由 后知后觉 于 2009-7-4 14:56 编辑

检查你的脚本里是否有地方对 事件的名字进行过 split

又或者是对事件名字进行过特殊的处理
作者: 幻耶    时间: 2009-7-4 14:57
事件的名字是这么起的:   敌人2,4800,4800,150,60,120,80,50,f      
分别对应HP,MAXHP,攻击,魔力。。。等等,这个有关系么?

公共事件里伤害的计算:
name = $game_map.events[2].name
data = name.split(/,/)
data[1]=data[1].to_i-[$game_party.actors[
0].atk-data[5].to_i/2, 1].max * (
50+$game_party.actors[0].str)/50-[
$game_variables[39]*10-data[6].to_i/2, 0].
max*(50+$game_party.actors[0].int)/50
作者: 后知后觉    时间: 2009-7-4 15:43
本帖最后由 后知后觉 于 2009-7-4 15:45 编辑

for i in 1..20
     if $game_variables[5] == i and $game_map.events【i】.name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
      break
     elsif $game_variables[5] == i and $game_map.events.name.include?("h")
       $game_variables[36] = 0
      break
     elsif $game_variables[5] == i and $game_map.events.name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
      break
     else
       $game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i
     end
   end

当条件满足后就要用 break来跳出循环
比如当前执行到2 条件满足 操作以后就要跳出for循环
不然就要进行3的判断 这个时候 条件不满足但是又有个else所有就执行了else里的东西
作者: 幻耶    时间: 2009-7-4 16:18
本帖最后由 幻耶 于 2009-7-4 16:22 编辑

好象是这么回事!加了break变量36确实会按照名字的变化而变了。

$game_variables[36]是对敌人的属性伤害,但是为什么有时侯第一次击中敌人是else里的数值,而第二次击中敌人才是我所要的数值呢?比如打中名字中有"f"的敌人,属性伤害应该是(wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2  的,但是第一次击中依然是$game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i,而从第二次击中开始,才是$game_variables[36] = wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i  的  ?
作者: 后知后觉    时间: 2009-7-4 16:26
就目前知道的东西

我也不知道。。。
作者: ONEWateR    时间: 2009-7-4 21:47
应该是顺序上的问题
“打中2号敌人事件5号变量=2”  然后再判断属性伤害~

根据顺序对调这种情况来推测,出现楼主上述的情况不是不可能~
作者: 幻耶    时间: 2009-7-4 22:32
本帖最后由 幻耶 于 2009-7-4 22:47 编辑

顺序对调??我在地图中有一个并行事件是记录打中敌人就调用公共事件的,如下。21号事件是主角的挥剑位置,与敌人坐标重合就给5号变量赋值敌人编号,然后调用i号公共事件处理伤害。。就是有时侯第一次击中数值就正确,但有时侯第二次击中敌人开始数值才正确了。奇怪
for i in 1..20
x  = $game_map.events[21].x
y  = $game_map.events[21].y
x1 = $game_map.events[ i ].x
y1 = $game_map.events[ i ].y
if x == x1 and y == y1
   $game_variables[5] = i
   $game_temp.common_event_id = i
   break
end
end
作者: ycscycsc    时间: 2009-7-5 16:32
一般来说用不着这样的脚本吧
楼主在搞什么鬼啊?
作者: ONEWateR    时间: 2009-7-5 18:42
很抽象,真的很抽象,以下乃小弟估计

应该是 for i in 1..20 这个范围所导致,由于不知道你整个的流程是怎样。
所以这个答案会令楼主发笑~
还是将“病人”传上来这样比较容易解决 嗯嗯~




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