admin
管理员
管理员
  • UID1
  • 注册日期2011-05-18
  • 最后登录2022-08-22
  • 粉丝94
  • 关注0
  • 发帖数1061
  • QQ
  • 铜币1232枚
  • 威望8点
  • 银元1218个
阅读:1918回复:0

【源码编辑】在NPC上添加一键转职

楼主#
更多 发布于:2012-10-07 12:56

我喜欢共享,我会的东西都将尽我所能写成教程,以作分享并存档。

涉及到的文件包括:

-------------------------------------------------------------------

应该都知道在哪吧- -

WorldDialog.txt

NpcScript.h

NpcScript.cpp

NpcScriptHelper.cpp

------------------------------------------------------------------

下面以在帕里镇长身上添加一键转职为例来说明如何在npc上添加可以点的按钮。

1.在WorldDialog.txt中写下你要加的按键名称和对话,貌似还有按钮。要用能显示行号的文本编辑工具,我用UE做演示,蓝色为UE显示行号。

1359 快捷转职
1360 KEY_OKJOB_1
1361KEY_OKJOB_2
1362 KEY_OKJOB_3
1363KEY_OKJOB_4
1364 第一次转职有点繁琐吗?我可以提供快捷转职,不过我要收取#cff0000ff#b10000#nb#nc金币作为转职费用.而且除了只对#cff0000ff#b属性点#nb#nc进行重置外,没有任何其他奖励!#b#cff0000ff一定要认真选择你喜欢的职业!#nc#nb\n[战  士][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();

这些是要显示的按钮,对话部分无需定义,只要引用即可。

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)
 {
  //圣职3
  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)
 {
  //魔导士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)
 {
  //弓箭手2
  RemoveGold(10000);
  ChangeJob(2);
  InitStat();
  Exit();
 }else{
  Say(1364);
 }
}
好了,编译WorldDialog生成dll文件,并把WorldDialog.txt更新到服务端即可。

如有疑问可以追问。自己可以实验添加一键二转,以及其他功能,就如星辰飞飞那样的兑换NPC也能这样制作。

本资源转自http://hi.baidu.com/aegis2003
哎...今天够累的,签到来了3...
游客

返回顶部