Posted at 04-10-24, 10:20 am Link | #
epsx

Posts: 2
Joined: 01-22-24
Last post: 260 days
Last view: 120 days
sorry,my english is very poor
默认主线任务中有一些进入地下城的任务,在任务失败或意外退出后,需要使用专门的关键字和某个NPC对话来重新获取进入地下城的道具
以G1主线任务三英雄RP地下城举例,与stewart对话后获得item:73002进入alby dungeon,如果失败后需要再与stewart对话并选择keyword:g1_tarlach2来再次获取item:73002,这个操作是在G1.mint中定义的。
后续版本更新后,这种重新获取任务道具的操作有一部分被直接写在了npc脚本之中,以stewart.mint举例,在代码中直接定义
if (player.HaveQuestTemplate(213004) &&
player.GetCompletedQuestObjectiveCount(213004) == 1)
{
OnKeywordSelected_G1(me, player, `g1_tarlach2`) extern (`data/script/korea/npc/g1.mint`);
}
这种其实还是指向了g1.mint,再后来有一些直接在npc脚本中给任务道具
比如在kristell.mint中的server void OnTalk定义
if (player.HaveKeyword(`g1_15`))
{
if (player.GetItemNoWithClassId(73022) == 0)
{
player.EndTalk(
me,
["npc.g1.342"]);

player.DoStript(`additemex(id:73022 count:1 rewardview:true)`);
return;
}
else
{
player.EndTalk(
me,
["npc.g1.339"]);
return;
}
}
但是这样会导致npc脚本过于臃肿,并影响执行效率
有没有一种更方便的方法呢?我在想是不是可以修改地下城的脚本文件,在退出地下城时检测隐藏关键字,如果没有达成条件在退出地下城时直接给用户任务道具
这个方法,在G3的脚本文件中其实已经应用了,在g3_11_tirnanog_baol_dungeon.mint潜入地下城的脚本中有下面一段代码
server void OnDieInDungeon(
dungeon _dungeon,
character player)
{
if(!player.IsPet())
{
player.DoStript(`additemex(id:75006 count:1 rewardview:true)`);
player.PlayCutScene(`g3_11_a_fail`,0);
}
}
这里定义了,如果在地下城中死亡后,会重新给玩家一个75006,并执行过场动画,在过场动画脚本中也定义了,播放完毕后会将玩家移出地下城
其实我们可以参考以上的处理方法,在g1rp_05_tircho_alby_dungeon.mint代码中修改
server void OnCharacterLeaved(
dungeon _dungeon,
character player)
{
if (player.HaveKeyword(`g1_03`))
{
player.DoStript(`additemex(id:73002 count:1 rewardview:true)`);
}
}

以上是我自己的处理方法,我觉得这样可以抛弃传统的关键字,在不影响npc脚本执行效率的前提下,让玩家更加方便,欢迎大家对我的处理方法进行讨论,谢谢。
Posted at 04-10-24, 10:25 am Link | #
epsx

Posts: 2
Joined: 01-22-24
Last post: 260 days
Last view: 120 days
sorry,my english is very poor
默认主线任务中有一些进入地下城的任务,在任务失败或意外退出后,需要使用专门的关键字和某个NPC对话来重新获取进入地下城的道具
以G1主线任务三英雄RP地下城举例,与stewart对话后获得item:73002进入alby dungeon,如果失败后需要再与stewart对话并选择keyword:g1_tarlach2来再次获取item:73002,这个操作是在G1.mint中定义的。
后续版本更新后,这种重新获取任务道具的操作有一部分被直接写在了npc脚本之中,以stewart.mint举例,在代码中直接定义
if (player.HaveQuestTemplate(213004) &&
player.GetCompletedQuestObjectiveCount(213004) == 1)
{
OnKeywordSelected_G1(me, player, `g1_tarlach2`) extern (`data/script/korea/npc/g1.mint`);
}
这种其实还是指向了g1.mint,再后来有一些直接在npc脚本中给任务道具
比如在kristell.mint中的server void OnTalk定义
if (player.HaveKeyword(`g1_15`))
{
if (player.GetItemNoWithClassId(73022) == 0)
{
player.EndTalk(
me,
["npc.g1.342"]);

player.DoStript(`additemex(id:73022 count:1 rewardview:true)`);
return;
}
else
{
player.EndTalk(
me,
["npc.g1.339"]);
return;
}
}
但是这样会导致npc脚本过于臃肿,并影响执行效率
有没有一种更方便的方法呢?我在想是不是可以修改地下城的脚本文件,在退出地下城时检测隐藏关键字,如果没有达成条件在退出地下城时直接给用户任务道具
这个方法,在G3的脚本文件中其实已经应用了,在g3_11_tirnanog_baol_dungeon.mint潜入地下城的脚本中有下面一段代码
server void OnDieInDungeon(
dungeon _dungeon,
character player)
{
if(!player.IsPet())
{
player.DoStript(`additemex(id:75006 count:1 rewardview:true)`);
player.PlayCutScene(`g3_11_a_fail`,0);
}
}
这里定义了,如果在地下城中死亡后,会重新给玩家一个75006,并执行过场动画,在过场动画脚本中也定义了,播放完毕后会将玩家移出地下城
其实我们可以参考以上的处理方法,在g1rp_05_tircho_alby_dungeon.mint代码中修改
server void OnCharacterLeaved(
dungeon _dungeon,
character player)
{
if (player.HaveKeyword(`g1_03`))
{
player.DoStript(`additemex(id:73002 count:1 rewardview:true)`);
}
}

以上是我自己的处理方法,我觉得这样可以抛弃传统的关键字,在不影响npc脚本执行效率的前提下,让玩家更加方便,欢迎大家对我的处理方法进行讨论,谢谢。
Terms

Powered by mabi.pro v1.0034-arisa (View credits)
MabiPro is not associated with Nexon Co., Ltd. in any way shape or form.