游乐论坛-网游单机论坛,一键端游,网络游戏单机版

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1428|回复: 0

[游戏修改教程] 三国天堂2传送AI详解

[复制链接]

12

主题

13

帖子

33

积分

偶尔光临

Rank: 1

积分
33

最佳新人

发表于 2022-6-7 22:15:34 | 显示全部楼层 |阅读模式
三国天堂2传送AI详解
传送AI详解
游乐论坛www.zhl5.com

npcdate部分 teleporter 7059 [trishya] ...... npc_ai={[trishya];{[fnHi] = [trishya001.htm]};{[fnYouAreChaotic] = [trishya003.htm]}}

HTML部分

trishya001.htm:

<html><head><body>守门人特黎西亚:<br>为了要到别的村庄,偶尔休息,慢慢地走过去,也有好处的。但是如果没有那么多的时间,我们守门人也可

以打开时空之门来帮你。好,你想到哪里去?<br><a action="bypass -h teleport_request">前往别的村庄。 </a><br><a action="bypass -h talk_select">任务</a></body></html>


trishya003.htm

<html><head><body>守门人特黎西亚:<br>你这种人没有资格利用守门人管理的时空之门。用你自己的双脚走到其他村庄吧。</body></html>

从上面的HTM我们可以看出来fnhi定义的HTM完成初始传送页面.里面bypass -h teleport_request调用了传送菜单. m~<<ok_
fnYouAreChaotic应该是条件判断不成功时候调用的页面

AI部分

下面我们来看看它的AI部分

首先我们找到trishya部分AI很简单.

class trishya : teleporter G{!adBna
property_define_begin telposlist_begin Position

{"城镇「说话之岛」"; -84141; 244623; -3729; 20000; 0 }

{"城镇「精灵村庄」"; 46890; 51531; -2976; 11000; 0 }

{"城镇「暗精灵村」"; 9716; 5502; -4500; 9000; 0 }

{"城镇「矮人村庄」"; 115120; -178112; -916; 11000; 0 } copyright dedecms

{"城镇「半兽人村」"; -45186; -112459; -236; 10000; 0 }

{"城镇「古鲁丁村庄」"; -80749; 149834; -3043; 10000; 0 }

{"城镇「古鲁丁城镇」"; -12787; 122779; -3114; 6000; 1 }

{"城镇「狄恩城镇」"; 5744; 142928; -2704; 10000; 2 } copyright dedecms

{"城镇「奇岩城镇」"; 82700; 148000; -3464; 1000; 3 }

{"城镇「猎人村庄」"; 117088; 76931; -2670; 13000; 0 } dedecms.com

{"城镇「欧瑞城镇」"; 83011; 53207; -1470; 18000; 4 }

{"城镇「亚丁城镇」"; 146783; 25808; -2000; 18000; 5 }

{"练级区域55-60「龙谷中部」"; 112263; 122920; -3671; 35000; 2 } dedecms.com

{"练级区域65-70「龙穴入口」"; 131144; 114488; -3724; 45000; 0 }

{"练级区域65-70「遗望神殿」"; -52931; 191053; -3546; 5000; 0 }
telposlist_end
property_define_end
class_end

上面AI部分只定义了telposlist的坐标,它的具体ai调用了父类teleporter F
按照上面的npcai我们很方便的定义自己的传送人 比如 class XXXX : teleporter ( XXXX就是自己定义传送AI名称)
然后花点时间到SE里面采点,作个自己的个性telposlist就可以.
相应的HTM里面用bypass -h teleport_request完成页面调用显示.

AI部分进阶

 现在我们来看看它的父类,看看是如何完成具体的AI功能的调用的

class teleporter : default_npc //所有NPC的父类我们不做讨论

parameter_define_begin M8,W|eTM
string ShopName ""
string fnHi "thi.htm"
string fnYouAreChaotic "tcm.htm"
parameter_define_end //这部分定义了几个全局变量teleporter级别,影响所有它的子类 //telposlist对应ShopName //thi.htm 通配名 对应不同的NPC的HTM 其中定义字段可以在相关npcdat里面查找 内容来自dedecms
//tcm.htm 通配名 对应不同的NPC的HTM
//其中定义字段可以在相关npcdat里面查找,比如 fnHi ; fnYouAreChaotic DAG2p
property_define_begin
telposlist_begin Position
{"说话之岛村庄"; -84169; 244693; -3729; 100000; 0 }
telposlist_end
property_define_end
//默认值定义为说话之岛村庄



//NPC的行为动作都是靠调用各种handle来实现的,下面我我们来分析下具体handler定义
handler 1 // 攻击句柄开始
variable_begin
"attacker"

"damage"

"myself"  

"_choiceN"

"_code"

"_from_choice"

variable_end

//定义攻击事件 (handler 1) 6个变量和SE对应不能更改.
shift_sp 1 //攻击事件开始
push_event
push_const 36 //玩家选择行为

add

fetch_i //压栈取值
push_const 0

push_const 2000 //设置时间范围0~2000
func_call 2 // func[AddAttackDesire] //一段时间增加攻击欲望状态
shift_sp -3 //出栈,对应前面的3个push_const语句 shift_sp -1 //攻击句柄结束
handler_end
//这里定义的状态就是NPC被攻击之后,会摆出姿势的AI ~F)


----------------------------------分割线--------------------------------------------


handler 3 //谈话句柄开始


variable_begin
"talker"
"myself"

"_choiceN"
"_code"

"_from_choice"
variable_end gZ 6Hj62D
//定义谈话事件 (handler 3) 5个变量和SE对应不能更改.
push_event

push_const 32           //玩家选择行为
add
fetch_i           // 压入堆栈
push_const 412 //判断否为红名
add ?6>rQ6tBv
fetch_i //压栈取值
push_const 0           //取常量0 

greater //大于
branch_false L768 //大于就继续执行,否则就执行L767
L767 _0
shift_sp 1 //判断为红名谈话事件开始
push_event
push_const 32 //玩家选择行为
add D8I)3cXa'
fetch_i //压栈取值
push_parameter fnYouAreChaotic //取tcm.htm定义的特定NPC的HTM func_call 43 // 显示页面
shift_sp -2 //出栈,对应前面的2个push_const语句
shift_sp -1 //红名谈话时间结束

jump L769 //转 L769

shift_sp 1            //判断白名谈话事件开始
push_event
push_const 32
add //同上
push_parameter fnHi //取thi.htm定义的特定NPC的HTM
func_call 43 //显示页面
shift_sp -2 //出栈

shift_sp -1 //谈话时间结束

handler_end //谈话句柄结束


//这里很清楚可以看出NPC是如何根据玩家状态来选择不同的对话事件的.以此扩展应该可以做出自己更多的判断行为及功能

----------------------------------分割线--------------------------------------------

handler 28 //传送句柄开始
variable_begin
"talker"
"myself"
"_choiceN"
"_code"
"_from_choice"
variable_end
//定义传送件 (handler28) 5个变量和SE对应不能更改.
shift_sp 1 //事件开始
push_event
push_const 32
add
fetch_i //玩家选择行为

push_property Position //坐标
push_parameter ShopName //子类telposlist表
S73. ""
push_string S73 //X
S74. ""
push_string S74 //Y
S75. ""
push_string S75 //Z
func_call 45 //传送 copyright dedecms
shift_sp -6            //出栈 
shift_sp -1 //事件结束

handler_end               //传送句柄结束


// 通用的调用telposlist表传送AI部分
class_end //teleporter ai定义结束


//好了到此结束,希望大家可以做出自己有特色的传送师


游乐论坛-免责声明

1、游乐论坛-游乐网单-游乐单机游戏所有网单资源来源于网络,仅供学习交流之用,切勿用于商业用途.

2、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意.

3、游乐论坛游戏提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!

4、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担.

5、游乐论坛游戏所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站.

6、游乐论坛游戏使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,游乐论坛游戏不承担任何责任,本站已经进行告知义务.

7、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束.

8、游乐论坛游戏以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!

9、游乐论坛游戏如无意中侵犯了某个企业或个人的知识产权,请联系站长邮箱:zhl5@zhl5.com告之,本站将立即删除并致以最深的歉意.

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|游乐论坛 ( 黑ICP备689009号-1 )|网站地图

GMT+8, 2025-3-23 12:16 , Processed in 0.173183 second(s), 11 queries , Gzip On, File On.

Powered by bisoZ!

Copyright © 2001-2021, Tencent Cloud.

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