阅读:4083回复:5
在NPC上添加一键转职
涉及到的文件包括:
WorldDialog.txt NpcScript.h NpcScript.cpp NpcScriptHelper.cpp ------------------------------------------------------------------ 下面以在帕里镇长身上添加一键转职为例来说明如何在npc上添加可以点的按钮。 1.在WorldDialog.txt中写下你要加的按键名称和对话,貌似还有按钮。要用能显示行号的文本编辑工具,我用UE做演示,蓝色为UE显示行号。 1359 快捷转职 1360 KEY_OKJOB_1 1361 KEY_OKJOB_2 1362 KEY_OKJOB_3 1363 KEY_OKJOB_4 1364 第一次转职有点繁琐吗?我可以提供快捷转职,不过我要收取#cff0000ff#b10000#nb#nc金币作为转职费用.而且除了只对#cff0000ff#b属性点#nb#nc进行重置外,没有任何其他奖励!#b#cff0000ff一定要认真选择你喜欢的职业!#nc#nbn[战 士][KEY_OKJOB_1] 用剑或斧近身攻击n[圣职者][KEY_OKJOB_2] 用魔棒治愈朋友,用拳套惩罚敌人n[魔导士][KEY_OKJOB_3] 用法杖或魔杖远程攻击n[弓箭手][KEY_OKJOB_4] 用弓箭或飞轮高速打击敌人 1365 初心者15级才可以进行第一次转职 1366 好像你的金币不太够吧? 写好以后可以开始在源码里面添加对话了。 2.打开NpcScript.h在你要加的npc后面继续添加,此处为帕里镇长,后面的数字对应行号,由于源文件定义从0开始,而UE从1开始计算行号,所以1359行要写成1358 void mafl_flamayor_1358(); void mafl_flamayor_1359(); void mafl_flamayor_1360(); void mafl_flamayor_1361(); void mafl_flamayor_1362(); & Z1 ~0 @4 M. z4 [3 ?) M/ P 这些是要显示的按钮,对话部分无需定义,只要引用即可。 3.打开NpcScriptHelper.cpp一样在对应npc后面继续添加 {"mafl_flamayor_1358", &CNpcScript::mafl_flamayor_1358}, {"mafl_flamayor_1359", &CNpcScript::mafl_flamayor_1359}, {"mafl_flamayor_1360", &CNpcScript::mafl_flamayor_1360}, {"mafl_flamayor_1361", &CNpcScript::mafl_flamayor_1361}, {"mafl_flamayor_1362", &CNpcScript::mafl_flamayor_1362}, 这个貌似是一个转意,&CNpcScript::后面的应该可以自己定义,然后在NpcScript.cpp中就可以使用这个别名了。- 4.打开NpcScript.cpp 在int g_nKeys[] = {下面添加用到的行号, 1358, 1359, 1360, 1361, 1362, 然后搜索帕里镇长mafl_flamayor 找到 void CNpcScript::mafl_flamayor_2() { AddKey( 9 );//介绍 AddKey( 10 );//离开 AddKey(1358);//这就是添加了一个以1358行(UE中1359行)为标题的按钮,如同介绍和离开2个按钮一样。 } 找到NPC最后描述那句: void CNpcScript::mafl_flamayor_10() { Speak( NpcId(), 489 ); Exit(); } 在后面继续添加按键功能描述: void CNpcScript::mafl_flamayor_1358() { //快捷转职 if (GetPlayerJob() == 0 && GetPlayerLvl() == 15) { Say(1363); }else{ Say(1364); } } //上面这句实现了点击快速转职按键后出现的信息,15级会显示1363行的信息,不符合会显示1364行信息。 //下面是显示1363行信息里面的按钮功能的定义,按钮对应1359-1362四行,从1363行信息能看出来前面[]中的是对话显示的文字,后面是对应的按钮。 void CNpcScript::mafl_flamayor_1359() { if (GetPlayerGold() < 10000) { Say(1365); return; } if (GetPlayerJob() == 0 && GetPlayerLvl() == 15) { //战士1 RemoveGold(10000); ChangeJob(1); InitStat(); Exit(); }else{ Say(1364); } } void CNpcScript::mafl_flamayor_1360() { if (GetPlayerGold() < 10000) { Say(1365); return; } if (GetPlayerJob() == 0 && GetPlayerLvl() == 15) { //圣职33 RemoveGold(10000); ChangeJob(3); InitStat(); Exit(); }else{ Say(1364); } } void CNpcScript::mafl_flamayor_1361() { if (GetPlayerGold() < 10000) { Say(1365); return; } if (GetPlayerJob() == 0 && GetPlayerLvl() == 15) {1 |/ n6 U) T+ U6 ~ //魔导士4 RemoveGold(10000); ChangeJob(4); InitStat(); Exit(); }else{ Say(1364); } } void CNpcScript::mafl_flamayor_1362() { if (GetPlayerGold() < 10000)) { Say(1365); return; } if (GetPlayerJob() == 0 && GetPlayerLvl() == 15) { //弓箭手25 RemoveGold(10000); ChangeJob(2); InitStat(); Exit(); }else{ Say(1364); } } 好了,编译WorldDialog生成dll文件,并把WorldDialog.txt更新到服务端即可。 |
|
5楼#
发布于:2023-12-16 08:33
为了一个铜币努力177154984
|
|