返回列表 发帖
好久没看过过程式的代码了...用惯BASIC/PASCAL的人看这个应该会很爽...
留言后再慢慢看...

[ 本帖最后由 natineprince 于 2008-1-18 08:53 编辑 ]
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

原帖由 永生不灭 于 2008-1-18 08:55 发表
顺手搞个完全不攻击的吧,去研究拖个1级佣兵当替死鬼,关键时刻还可以让他破破冰

for i,v in ipairs(actors) do
  if (v ~= owner and v ~= myid) then
   if (1 == IsMonster(v)) then
    enemys[index] = v
    index = index+1
   end
  end
end
...索性整段获取敌人的代码去掉了...
这段去掉应该就不会攻击了吧...在代码的角度...

[ 本帖最后由 natineprince 于 2008-1-18 09:00 编辑 ]
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

dis = GetDistance2 (myid,v)
  if (dis < min_dis) then
   result = v
   min_dis = dis
  end

老狗试下把这段改成min_dis=0
看看会不会原地攻击
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

原帖由 ||| 于 2008-1-18 09:05 发表

会不会不攻击啊...

我指远程系的...

搜索引擎?哦...了解了...那改掉这个就不会搜索...达到不主动打怪的目的了?

[ 本帖最后由 natineprince 于 2008-1-18 09:07 编辑 ]
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

可以把GetActors ()那个函数发上来看看么?

我觉得上面那段不像是寻敌代码...反而GetActors ()这个像获取附近对象的.
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

原帖由 fuland 于 2008-1-18 09:10 发表

乐乐是笨蛋……


怎么会联系到福建……不可能有联系的啊……

你索性整个文件发给我看好了...
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

function        GetActors () end
...
晕...
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

原帖由 ||| 于 2008-1-18 09:16 发表

其实他们在水.....

文件可以在RO文件夹下面找到啊...

公司没RO啊...

老狗那里看到的function GetActors () end,实际应该是重载了的啊?
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

function GetMyEnemyA (myid)
local result = 0//返回值,敌人
local owner  = GetV (V_OWNER,myid)//主人
local actors = GetActors ()//角色
local enemys = {}//敌人集
local index = 1
local target
//获取敌人集
for i,v in ipairs(actors) do
  if (v ~= owner and v ~= myid) then
   target = GetV (V_TARGET,v)
   if (target == myid) then
    enemys[index] = v
    index = index+1
   end
  end
end
local min_dis = 100
local dis
//当敌人集合中存在距离少于 min_dis 的,返回距离最近的敌人
for i,v in ipairs(enemys) do
  dis = GetDistance2 (myid,v)
  if (dis < min_dis) then
   result = v
   min_dis = dis
  end
end
return result
end

这次没理解错了吧...

LS又用2狼上这边啊...
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP


function OnATTACK_ST ()
TraceAI ("OnATTACK_ST")
//敌人不在视线内
if (true == IsOutOfSight(MyID,MyEnemy)) then -- ENEMY_OUTSIGHT_IN
  MyState = IDLE_ST
  TraceAI ("ATTACK_ST -> IDLE_ST")
  return
end
//敌人已死亡
if (MOTION_DEAD == GetV(V_MOTION,MyEnemy)) then   -- ENEMY_DEAD_IN
  MyState = IDLE_ST
  TraceAI ("ATTACK_ST -> IDLE_ST")
  return
end
  //在攻击范围外.状态变为 追
if (false == IsInAttackSight(MyID,MyEnemy)) then  -- ENEMY_OUTATTACKSIGHT_IN
  MyState = CHASE_ST
//移动片段.远程攻击关键?
  MyDestX, MyDestY = GetV (V_POSITION,MyEnemy);
  Move (MyID,MyDestX,MyDestY)
//移动片段END
  TraceAI ("ATTACK_ST -> CHASE_ST  : ENEMY_OUTATTACKSIGHT_IN")
  return
end

//没使用技能,则普攻
if (MySkill == 0) then
  Attack (MyID,MyEnemy)
else
//使用技能,则...SkillObject函数没看...
  if (1 == SkillObject(MyID,MySkillLevel,MySkill,MyEnemy)) then
   MyEnemy = 0
  end
  MySkill = 0
end
TraceAI ("ATTACK_ST -> ATTACK_ST  : ENERGY_RECHARGED_IN")
return

end
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

原帖由 蜡烛鞭二郎 于 2008-1-18 10:14 发表
function        OnATTACK_ST ()下的
IsOutOfSight()函数应该就是锁敌距离判定了。

IsOutOfSight()的function在Util.lua下

IsInAttackSight这个才是锁敌吧?
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

原帖由 蜡烛鞭二郎 于 2008-1-18 10:21 发表
那看来要写弓箭手的ai,第一要增加一个GetMyEnemy来增加锁敌方式
还要增加一个IsInAttackSight来增加一个15格的攻击距离判定
因为默认的IsInAttackSight是怪物进入GetDistance的初始值就攻击的,也就是2格,不 ...

V_ATTACKRANGE  = 4  -- 拱府 傍拜 裹困

关键是这个a     = GetV (V_ATTACKRANGE,id1).
其实.在这里做个判定就行了

也就是
IF(type >= ARCHER01 and type <= ARCHER10)a     = GetV (V_ATTACKRANGE,id1)+13 --不知道是不是13...
ELSE a     = GetV (V_ATTACKRANGE,id1)
END
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

原帖由 蜡烛鞭二郎 于 2008-1-18 10:47 发表
似乎可以,中午午休的时候我验证一下

嗯...小H看到这贴又要喊你了...嘿嘿...2狼啊2狼...
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

老狗加油...有空帮你看看..
爱游戏,爱RO,也爱写写小程序,我不是什么大神,也不是神教众,我是natineprince,我只是一名普通的RO玩家。

TOP

返回列表