lk1986
圣骑士
圣骑士
  • UID64
  • 发帖数86
  • QQ15151515
  • 社区居民
  • 原创写手
阅读:3671回复:5

在NPC上添加一键转职

楼主#
更多 发布于:2019-03-05 09:52
涉及到的文件包括:
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更新到服务端即可。
喜欢0 评分0
游客

返回顶部