天堂2单机论坛

 找回密码
 立即注册
查看: 11836|回复: 38

简单怪物的AI编写

[复制链接]
  • TA的每日心情
    郁闷
    2022-5-30 11:17
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    279

    主题

    389

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    75074
    发表于 2020-10-6 17:26:30 | 显示全部楼层 |阅读模式
    其實l2j 已經一早把 怪物的AI 這部分開放給大家去自由 編寫.
    不過奇怪的是, 好像沒有什麼人在這方面研究, 其實自己編寫滿有趣的,
    以下是本人測試用的AI,
    目的是要控制 "巴列斯" 的技能
    當巴列斯的 hp 降到一定情度, 會發動不同技能的 ai .
    ----------------------------------------------------------------------------------------------
    import sys
    import time
    from net.sf.l2j.gameserver.ai import CtrlIntention
    from net.sf.l2j.gameserver.model import L2Character
    from net.sf.l2j.gameserver.model.quest import State
    from net.sf.l2j.gameserver.datatables import SkillTable
    from net.sf.l2j.gameserver.model.quest import QuestState
    from net.sf.l2j.gameserver.model.actor.instance import L2NpcInstance
    from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
    from net.sf.l2j.util import Rnd
    class beres(JQuest) :
    # init function. Add in here variables that you'd like to be inherited by subclasses (if any)
    def __init__(self,id,name,descr):
    # finally, don't forget to call the parent constructor to prepare the event triggering
    # mechanisms etc.
    JQuest.__init__(self,id,name,descr)
    beres = 29118
    def onAttack(self,npc,player,damage,isPet) :
    npcId = npc.getNpcId()
    objId = npc.getObjectId()
    if npcId == 29118 :
    if npc.getCurrentHp() <= npc.getMaxHp() * 0.2 :
    npc.doCast(SkillTable.getInstance().getInfo(5531,1))
    if npc.getCurrentHp() <= npc.getMaxHp() * 0.4:
    npc.doCast(SkillTable.getInstance().getInfo(5532,1))
    npc.doCast(SkillTable.getInstance().getInfo(5533,1))
    if npc.getCurrentHp() <= npc.getMaxHp() * 0.6 :
    npc.doCast(SkillTable.getInstance().getInfo(5495,1))
    if npc.getCurrentHp() <= npc.getMaxHp() * 0.8 :
    npc.doCast(SkillTable.getInstance().getInfo(5497,1))
    npc.doCast(SkillTable.getInstance().getInfo(5498,1))
    if npc.getCurrentHp() <= npc.getMaxHp() :
    npc.doCast(SkillTable.getInstance().getInfo(5496,1))
    npc.doCast(SkillTable.getInstance().getInfo(5499,1))
    return
    # now call the constructor (starts up the ai)
    QUEST = beres(-1,"beres","ai")
    QUEST.addKillId(29118)
    QUEST.addAttackId(29118)
    ----------------------------------------------------------------------------------------
    當然你可能會說 在 npcskill 加不就簡單得多, 不過 npcskill 沒有發動條件控制.
    用 script 寫好玩多了, 大家一起來研究吧
    主要只是動用 onAttack 這個條件
    def onAttack(self,npc,player,damage,isPet) :
    npcId = npc.getNpcId()
    objId = npc.getObjectId()
    if npcId == 29118 : ( 如果被攻擊的怪物 id = 29118 (巴列斯))
    if npc.getCurrentHp() <= npc.getMaxHp() * 0.2 : (如果巴列斯現時的hp少過最大hp的20%)
    npc.doCast(SkillTable.getInstance().getInfo(5531,1)) (發動 5531 lv 1 這個技能)
    if npc.getCurrentHp() <= npc.getMaxHp() * 0.4:
    npc.doCast(SkillTable.getInstance().getInfo(5532,1))
    npc.doCast(SkillTable.getInstance().getInfo(5533,1))
    if npc.getCurrentHp() <= npc.getMaxHp() * 0.6 :
    npc.doCast(SkillTable.getInstance().getInfo(5495,1))
    if npc.getCurrentHp() <= npc.getMaxHp() * 0.8 :
    npc.doCast(SkillTable.getInstance().getInfo(5497,1))
    npc.doCast(SkillTable.getInstance().getInfo(5498,1))
    if npc.getCurrentHp() <= npc.getMaxHp() :
    npc.doCast(SkillTable.getInstance().getInfo(5496,1))
    npc.doCast(SkillTable.getInstance().getInfo(5499,1))
    return
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-22 15:26
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    4

    主题

    143

    帖子

    200

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    200
    发表于 2020-10-8 08:41:17 | 显示全部楼层
    好像现在最新的版本  AI都有变动了
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2022-5-30 11:17
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    279

    主题

    389

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    75074
     楼主| 发表于 2020-10-8 17:13:28 | 显示全部楼层
    benmao175 发表于 2020-10-8 08:41
    好像现在最新的版本  AI都有变动了

    结构变动,原理不变
    回复

    使用道具 举报

    该用户从未签到

    14

    主题

    107

    帖子

    252

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    252
    发表于 2020-10-9 00:05:23 | 显示全部楼层
    小怪也可以改吗
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-12-12 17:58
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    4

    主题

    94

    帖子

    208

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    208
    发表于 2020-11-9 16:36:53 | 显示全部楼层
    写一个血量降低到1%的时候,启动无敌
    回复

    使用道具 举报

  • TA的每日心情

    2024-11-8 14:11
  • 签到天数: 72 天

    [LV.6]常住居民II

    2

    主题

    330

    帖子

    420

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    420
    发表于 2020-11-9 17:04:42 | 显示全部楼层
    很好很强大哈哈!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-3-13 00:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    13

    主题

    46

    帖子

    140

    积分

    正式会员

    Rank: 2

    积分
    140
    发表于 2020-12-6 15:54:11 | 显示全部楼层
    請教一下..能放到MoBIUS端嗎..
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-22 15:26
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    4

    主题

    143

    帖子

    200

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    200
    发表于 2021-3-14 23:37:29 | 显示全部楼层
    怪物AI 我一直都弄不好  我还要在学习一下的啊
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2023-3-11 11:41
  • 签到天数: 62 天

    [LV.6]常住居民II

    0

    主题

    100

    帖子

    204

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    204
    发表于 2022-12-24 17:50:35 | 显示全部楼层
    有空需要学习一下
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2024-10-15 16:42
  • 签到天数: 45 天

    [LV.5]常住居民I

    1

    主题

    178

    帖子

    281

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    281
    发表于 2023-9-2 23:37:16 | 显示全部楼层
    厉害了!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|监狱|天堂2单机论坛 ( 粤ICP备20030366号 )

    GMT+8, 2025-5-20 04:22 , Processed in 0.056399 second(s), 21 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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