铁血丹心

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

[疑问求助] npc在什么情况下不攻击?

[复制链接]
发表于 2012-10-4 12:30 | 显示全部楼层 |阅读模式

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

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

x
相信大家都有过类似的经历,就是当主角在npc的攻击范围之类,但是在npc攻击主角时肯定会有误伤自己人的时候,npc就会停止攻击。
那么究竟npc在那种情况下会不攻击呢?
(1)与npc误伤的人数有关
(2)与npc误伤的人的血量有关
有谁知道啊?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-10-4 12:51 | 显示全部楼层
NPC是否会停止攻击我不能确认。但是写AI选择武功攻击位置时的确有考虑到误伤。源码如下:
  1. elseif flag==2 then                                                                                                        --返回攻击数目
  2.                 local diwo=WAR.Person[WAR.CurID]["我方"]
  3.                 local atknum=0
  4.                 for i=1,num do
  5.                         if xy[i][1]>=0 and xy[i][1]<CC.WarWidth and xy[i][2]>=0 and xy[i][2]<CC.WarHeight then
  6.                                 local id=GetWarMap(xy[i][1],xy[i][2],2);
  7.                                 if id~=-1 and id~=WAR.CurID then
  8.                                         --lib.Debug(xy[i][1]..','..xy[i][2]..'|'..id)
  9.                                         local xa,xb,xc
  10.                                         if diwo~=WAR.Person[id]["我方"] then
  11.                                                 xa=2
  12.                                         elseif GetS(0,0,0,0)==1 then
  13.                                                 xa=-0.5
  14.                                         else
  15.                                                 xa=0
  16.                                         end
  17.                                         local hp=JY.Person[WAR.Person[id]["人物编号"]]["生命"]
  18.                                         if hp<atk/6 then
  19.                                                 xb=2
  20.                                         elseif hp<atk/3 then
  21.                                                 xb=1
  22.                                         else
  23.                                                 xb=0
  24.                                         end
  25.                                         local danger=JY.Person[WAR.Person[id]["人物编号"]]["内力最大值"]
  26.                                         xc=danger/500
  27.                                         atknum=atknum+xa*math.modf(xb*xc+5)

  28. --                                        if id<0 then--==WAR.Person[WAR.CurID]["自动选择对手"] then
  29.         --                                        atknum=atknum+60        --这个地方暂时不使用
  30.                 --                        else
  31.                         --                        local hp=JY.Person[WAR.Person[id]["人物编号"]]["生命"]
  32.                                 --                if hp<atk/6 then
  33.                                         --                atknum=atknum+20
  34. --                                                elseif hp<atk/3 then
  35.         --                                                atknum=atknum+15
  36.                 --                                else
  37.                         --                                atknum=atknum+10
  38.                                 --                end
  39. --                                        end
  40.                                 end;
  41.                         end
  42.                 end
  43.                 return atknum;
复制代码
作用是计算某武功的攻击范围内的某位置的权重估值(根据敌人的数量,内力生命和自己的攻击力等等),敌人的系数为2,自己人(误伤)的系数为-0.5。
这只是一部分,看起来已经很蛋疼了,要具体算出怎么会使NPC不攻击就更难了。

点评

非常感谢您的点评。  发表于 2012-10-4 12:58
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-10-4 13:57 | 显示全部楼层
打恒山派尼姑的时候,她们很愿意打自己人,不知道你们有没有发现
万花剑法攻击范围大,AI会攻击最多的目标,包括她们自己的人
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-11-16 21:43

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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