铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 1796|回复: 14

請問隊友數目的上限

[复制链接]
发表于 2009-5-6 16:57 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
我想問一下

現在有辨法讓隊友的數目超過六人嗎?

或者有辨法製作「召喚術」嗎?

謝謝大家~

[发帖际遇]: kilktp参与红花会陈家洛的计划:叛变勾结清廷,得到赏赐银两21.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-6 17:02 | 显示全部楼层
当年在 dos 版下确实成功做出了召唤术,而用 dos 版应是不能突破队友上限的。

[发帖际遇]: weyl偷拍五岳并派大会内幕,登上铁血晚报头条,刷新当晚销量,得到银两11。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 12:44 | 显示全部楼层
[size=4]我自己写了一个复刻版的召唤人物的procedure。如下:[/size]

procedure AddBattlePerson(bnum, mnum, level: integer);
var
  i, addperson, addspeed, temp, tempstep: integer;
  temprole: TBattleRole;
begin
  [color=Blue]//自己选择一个召唤人物序号写在下面[/color]
  addperson := 0;
  tempstep := Brole[bnum].step;
  temp := 0;
  [color=Blue]//选择位置(范围是武功相应等级的点攻击范围)[/color]
  Brole[bnum].step := Rmagic[mnum].MoveDistance[level - 1];
  CalCanSelect(bnum, 0);
  if (SelectAim(Brole[bnum].rnum, Rmagic[mnum].MoveDistance[level - 1])) then
  begin
    [color=Blue]//判断所选位置是否是自己[/color]
    if (Ax <> Brole[bnum].x) or (Ay <> Brole[bnum].y) then
    begin
      [color=Blue]//播放人物出招动画[/color]
      PlayActionAmination(bnum, Rmagic[mnum].MagicType);
      [color=Blue]//写新增人物属性[/color]
      Brole[BRoleAmount].rnum := addperson;
      Brole[BRoleAmount].Team := Brole[bnum].Team;
      Brole[BRoleAmount].Y := Ay;
      Brole[BRoleAmount].X := Ax;
      Brole[BRoleAmount].Face := Brole[bnum].Face;
      Brole[BRoleAmount].Dead := 0;
      Brole[BRoleAmount].Acted := 0;
      Brole[BRoleAmount].ExpGot := 0;
      Brole[BRoleAmount].Auto := Brole[bnum].Auto;
      [color=Blue]//计算人物轻功[/color]
      addspeed := 0;
      if Rrole[addperson].Equip[0] >= 0 then addspeed := addspeed + ritem[rrole[addperson].Equip[0]].AddSpeed;
      if Rrole[addperson].Equip[1] >= 0 then addspeed := addspeed + ritem[rrole[addperson].Equip[1]].AddSpeed;
      Brole[BRoleAmount].Step := (Rrole[addperson].Speed + addspeed) div 15;
      [color=Blue]//使用召唤武功人物变成已行动[/color]
      Brole[bnum].Acted := 1;
      [color=Blue]//使用武功人物体力、内力减少[/color]
      Rrole[Brole[bnum].rnum].PhyPower := Rrole[Brole[bnum].rnum].PhyPower - 3;
      RRole[Brole[bnum].rnum].CurrentMP := RRole[Brole[bnum].rnum].CurrentMP - rmagic[mnum].NeedMP * ((level + 1)  div 2);
      temp := 0;
      [color=Blue]//重排人物顺序 [/color]     
      [color=Blue]{for i := 0 to BRoleAmount do
      begin
        if Rrole[Brole[i].rnum].speed < Rrole[BRoleAmount].speed then
        begin
          temprole := Brole[i];
          Brole[i] := Brole[BRoleAmount];
          Brole[BRoleAmount] := temprole;
          temp := temp + 1;
        end;
      end;}[/color]     
     [color=Blue]//重排人物顺序可能导致已行动人物再次行动,故取消。新增人物永远排在最后。
      //总人数加一[/color]
      BRoleAmount := BRoleAmount + 1;
      [color=Blue]//在战场上画新增人物[/color]
      temp := BRoleAmount - 1;
      Bfield[2, Brole[temp].X, Brole[temp].Y] := temp;
      DrawRoleOnBfield(Brole[temp].X, Brole[temp].Y);
    end;
  end;
  Brole[bnum].step := tempstep;
end;


[size=4]这个procedure在使用时可以放在原来的attack子程下,并加一个判断:[/size]

procedure Attack(bnum: integer);
var
  rnum, i, mnum, level, step, i1: integer;
begin
  rnum := brole[bnum].rnum;
  i := SelectMagic(rnum);
  mnum := Rrole[rnum].Magic[i];
  level := Rrole[rnum].MagLevel[i] div 100 + 1;
  [color=Blue]//在这里加一个判断。mnum是召唤武功的编号[/color]
[color=Red] if mnum=0 then AddBattlePerson(bnum, mnum, level)
  else
  begin[/color]
  …… [color=Blue]//这里是原来的内容[/color]
  [color=Red]end;[/color]
  //红色字体是自己添加的部分

[table=100%,#cbb48a][tr][td][size=9pt][发帖际遇]: [url=http://www.txdx.net/event.php]真正的强强去客栈吃饭,碰到郭靖,郭靖请你吃饭,并赠送银两16.
[/url][/font][/td][/tr][/table]

[[i] 本帖最后由 weyl 于 2009-5-7 18:57 编辑 [/i]]

评分

参与人数 1声望 +15 收起 理由
黄顺坤 + 15 XXX。。看不懂。。加分。。

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 12:54 | 显示全部楼层
楼上非常不错,可惜我不是版主,不能给你加分,呵呵~

不过你有否考虑过跟除主角自己外跟其他人物重叠的情况?

在判断人物重叠那里应该用for loop,检查全部在场人物的位置啊~

还有的就是,有没有考虑过,如果跟其他武功事件重复要怎么办?

这类事件多了之后,

你红色的部分会变得很~~~~~~~~~~~~~~~~~~~~~~~~~~~~~长很复杂哦~

少少意见罢了~呵呵~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 13:03 | 显示全部楼层
哦,在那个CanCalSelect 的procedure里面,第二个参数是0,也就是说同移动时的选择是一样的,有人或有物体的地方不能选,所以只要判断所选位置不是自己就行了。不过有一个问题就是,同一个人物可以无限召唤,而他们的生命内力什么的是永远相等的,如果需要,可以判断一下此人物是否在战场上。至于红色部分在此类事件多了之后会很长,我想也可以把这个procedure加在50指令里面,那样就用事件来调用这个prodedure了。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 13:21 | 显示全部楼层
对了,不知道winson你的那个飞龙探云手是怎么加进游戏的?

[发帖际遇]: 真正的强强扮成吴天德,骗得银两5。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 13:43 | 显示全部楼层
我自己做了一个武功事件分流~~

对了,你何不建立一个召唤人物,然后召唤时把对应人物复制到召唤人物上?那召唤出来的人物就不会重复了~生命内力等也不会共用

其实召唤术我一直想做,而且也可以做出很多花样来,不单单是多个人物在场上那么简单啦~

嘿嘿~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 14:18 | 显示全部楼层
嗯,也对。反正定义了六百个人物呢,够用了~~

嗯,我想再定义一个全局变量,用来保存总召唤人物个数。

[ 本帖最后由 真正的强强 于 2009-5-7 14:21 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 14:48 | 显示全部楼层
保存总召唤人物个数没必要~不过最好把这些召唤的人物编号记录下来,战斗结束后抹去

不然的话,这些人物计算经验什么的,可能产生不必要的错误或者麻烦

另外,召唤人物时,记得补满生命内力等,你似乎没有做这个~(刚想起,补充)
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 14:56 | 显示全部楼层
我的意思是说,原来的人物就相当于一个模板,当召唤一个人物(比如说编号是10)的时候,使 Rrole[500+新变量] := Rrole[10];  ,然后战场上新增的人物实际是【500+新变量】的这个人物。而且只要召唤的模板人物生命内力是满的,每次召唤出来的新人物生命内力也都是满的。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 15:12 | 显示全部楼层
这贴成了我们的版聊,不会扣分吧?

你这样设定有明显的缺陷

1,这种无限增长的数目会随着游戏中战斗场数的增加而增加,最终会导致数据溢出

2,新增人物编号每次都改变,你如何识别?

如果新增的人物还是跟第一次召唤人物编号相同的话,那问题就回到原地了

还是补满生命内力吧,何必把问题复杂化呢?

另外,记录已召唤人物编号还有另一个好处就是,可以很方便地限制召唤个数,如已有召唤编号,就不能再次召唤,或者召唤为某编号+1等,要不然一开打狂召唤,无敌了~

最后,npc的召唤你想过没?ai如何设定呢?如果召唤术没有攻击力,npc大概不会使用哦

还有很多的问题其他需要考虑,就不说了~~

所以说召唤不止是战场上多个人物这么简单

[发帖际遇]: winson7891去客栈吃饭,碰到郭靖,你请郭靖吃饭,花掉银两6。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 15:52 | 显示全部楼层
可以在每次战斗结束后总召唤人数的变量清零,估计每场战斗不会召唤超过一百人吧……
每次新增人物时都有
Rrole[500+新变量] := Rrole[模板人物编号];
Brole[BroleAmount].rnum := 500 + 新变量;
新变量:= 新变量 + 1;
BroleAmount := BroleAmount + 1;
这样会错么?还是我没明白你的意思?
ai的使用确实有问题。攻击力倒是可以有,关键是要选择空地,有点儿类似ai的移动吧?这里我再改改看。
不过可以肯定,要想设置全面一定很麻烦。也可以不让ai用……哈哈

其实问题总有解决的方法~~~~

[ 本帖最后由 真正的强强 于 2009-5-7 16:31 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 16:42 | 显示全部楼层
Rrole[500+新变量] := Rrole[模板人物编号];
Brole[BroleAmount].rnum := 500 + 新变量;
新变量:= 新变量 + 1;
BroleAmount := BroleAmount + 1;

这的确会造成错误,如果召唤数多于总人数的话~~~当然,你说不可能打那么长的战斗,那要是拖时间呢??

我问你,如果一次战斗中,第一个rrole的位置有生命损失,甚至已经死了,那召唤出来的人物会怎么样?

如果是战斗伊始,我记得敌方人物生命值等是会补满的,例如万鳄岛打鳄鱼,其实打来打去都是那3条,这没问题

但战斗中间插入的人物就不会不满生命值了,所以召唤出来的人物如果没有先恢复生命,会马上挂掉,因为生命值少于等于0,被视为死亡,清理掉了

以上~

[发帖际遇]: winson7891挺身而出,阻止萧峰打“段正淳”,阻止失败,阿朱遇难,花银两18帮助萧峰安葬阿朱.


[ 本帖最后由 winson7891 于 2009-5-7 16:46 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 17:30 | 显示全部楼层
还是不应该让模板人物登场吧,我觉得召唤这个武功也就是召唤动物(比如雪猿)的,可以用一个不使用的雪猿或新增一个做模板。
如果还怕总人不够,可以把Rrole的范围扩大到1000+,Brole的范围扩大到500+,估计就算战场全站满了,也不会溢出吧。或者也可以限制召唤的总人数,可以判断那个储存总人数的新变量是否小于要限制的人数,小于则可以召唤,否则直接返回。
具体怎么设计要看这个武功在游戏里的具体情况了。
[发帖际遇]: 胡斐要去和程灵素约会,出门前真正的强强帮他打整了一下络腮胡,得到打赏银两18.


[ 本帖最后由 真正的强强 于 2009-5-7 17:34 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-5-7 21:09 | 显示全部楼层
那也是~具体情况变动太大了~

其实我真正想做的是把召唤改为作为通用性的武功属性呢~

经过我的思考和观察,是可以改出来的,到时候在fe上改两个数值就能实现了~

不过这工作量……

[发帖际遇]: winson7891带小龙女去蒙地卡罗吃西餐喝红酒,被赵志敬撞见,破财消灾,花费银两25.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-5-25 14:26

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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