骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 4473|回复: 7

[求助] 如何使指定场景的npc移动到指定的位置

[复制链接]

8

主题

37

回帖

34

积分

扈从

Rank: 2Rank: 2

UID
2790595
第纳尔
226
精华
0
互助
4
荣誉
0
贡献
0
魅力
0
注册时间
2016-12-31

霸主正版勋章

QQ
鲜花(0) 鸡蛋(0)
发表于 2020-2-26 23:03:53 | 显示全部楼层 |阅读模式
本帖最后由 白日依山尽L 于 2020-2-26 23:06 编辑

我做了一个任务,但是不知道怎么实现玩家在进入指定的村子时玩家队伍里指定npc也会一起进入这个村子。然后我需要让这个npc走到指定坐标位置
我不知道从何入手希望哪位大佬指点一下

5

主题

25

回帖

14

积分

随仆

Rank: 1

UID
3131813
第纳尔
98
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2020-1-29
鲜花(1) 鸡蛋(0)
发表于 2020-2-27 15:24:03 | 显示全部楼层
方法有很多,在你访问的村子的mission_template中可以增加触发器。我一般是在ti_after_mission_start中加入执行代码。
可以有两个函数参考,第一个比较简单,agent_spawn函数。指定一个pos,然后指定一个npc就可以了。但是这个函数有bug,会一定概率出现随机脸。我的亚米拉就这样变成光头了。
还有个稍微麻烦的办法,需要mt的entry_point属性为mtf_visitor_source(大概叫这个吧),然后指定entry_point调用set_visitor函数。推荐使用这种方法,刷出来的人不会变成光头。
这样变实现了刷npc的操作,然后就是指定npc去某个地点了。
利用agent_set_scripted_position(也好像叫这个吧,搜一下名字应该差不多)这个函数,指定你刚刚刷出来的npc,再指定目的地pos,然后你会发现,你要的效果达到了。

评分

参与人数 1第纳尔 +10 互助 +1 收起 理由
幼稚园殺手 + 10 + 1 乐于助人!

查看全部评分

鲜花鸡蛋

白日依山尽L  在2020-2-27 21:36  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

8

主题

37

回帖

34

积分

扈从

Rank: 2Rank: 2

UID
2790595
第纳尔
226
精华
0
互助
4
荣誉
0
贡献
0
魅力
0
注册时间
2016-12-31

霸主正版勋章

QQ
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2020-2-27 21:37:19 | 显示全部楼层
stevenxxy008 发表于 2020-2-27 15:24
方法有很多,在你访问的村子的mission_template中可以增加触发器。我一般是在ti_after_mission_start中加入 ...

非常感谢

5

主题

25

回帖

14

积分

随仆

Rank: 1

UID
3131813
第纳尔
98
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2020-1-29
鲜花(1) 鸡蛋(0)
发表于 2020-2-28 15:29:13 | 显示全部楼层

不客气,有困难一起探讨。我这边也在做mod,碰到一堆问题,马上mb2就要出了,所以都没啥人关注mb1了

8

主题

37

回帖

34

积分

扈从

Rank: 2Rank: 2

UID
2790595
第纳尔
226
精华
0
互助
4
荣誉
0
贡献
0
魅力
0
注册时间
2016-12-31

霸主正版勋章

QQ
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2020-2-29 00:37:46 | 显示全部楼层
stevenxxy008 发表于 2020-2-28 15:29
不客气,有困难一起探讨。我这边也在做mod,碰到一堆问题,马上mb2就要出了,所以都没啥人关注mb1了

代码是写好了也没编译错误,但是有点小问题我的代码是添加在mt里边的village_center最后面:红色部分是我添加的代码,紫色的部分是我写的关于设置NPC17刷入到当前场景的测试可以刷出npc但是不能走。我尝试修改触发器检查时间的那部分发现也不行,后来我又尝试把紫色的那段代码放到game_menus.py里的“village_center”执行体部分编译后发现npc17可以走了。但是这会导致每个村子都会刷出这个npc,请问为什么会出现这种情况。另外我把紫色的那段代码改成“set_visitor”也不能解决这个问题。

(
    "village_center",0,-1,
    "village center",
    [(0,mtef_scene_source|mtef_team_0,0,0,1,[]),
     (1,mtef_scene_source|mtef_team_0,0,0,1,[]),
     (2,mtef_scene_source|mtef_team_0,af_override_horse,0,1,[]),
     (3,mtef_scene_source|mtef_team_0,af_override_horse,0,1,[]),
     (4,mtef_scene_source|mtef_team_0,af_override_horse,0,1,[]),
     (5,mtef_scene_source|mtef_team_0,af_override_horse,0,1,[]),
     (6,mtef_visitor_source,af_override_horse,0,1,[]),
     (7,mtef_scene_source|mtef_team_0,af_override_horse,0,1,[]),

     (8,mtef_visitor_source,af_override_horse,0,1,[]),
     (9,mtef_visitor_source,af_override_horse,0,1,[]),(10,mtef_visitor_source,af_override_horse,0,1,[]),(11,mtef_visitor_source,af_override_horse,0,1,[]),(12,mtef_visitor_source,af_override_horse,0,1,[]),(13,mtef_visitor_source,0,0,1,[]),(14,mtef_visitor_source,0,0,1,[]),(15,mtef_visitor_source,0,0,1,[]),
     (16,mtef_visitor_source,af_override_horse,0,1,[]),(17,mtef_visitor_source,af_override_horse,0,1,[]),(18,mtef_visitor_source,af_override_horse,0,1,[]),(19,mtef_visitor_source,af_override_horse,0,1,[]),(20,mtef_visitor_source,af_override_horse,0,1,[]),(21,mtef_visitor_source,af_override_horse,0,1,[]),(22,mtef_visitor_source,af_override_horse,0,1,[]),(23,mtef_visitor_source,af_override_horse,0,1,[]),
     (24,mtef_visitor_source,af_override_horse,0,1,[]),(25,mtef_visitor_source,af_override_horse,0,1,[]),(26,mtef_visitor_source,af_override_horse,0,1,[]),(27,mtef_visitor_source,af_override_horse,0,1,[]),(28,mtef_visitor_source,af_override_horse,0,1,[]),(29,mtef_visitor_source,af_override_horse,0,1,[]),(30,mtef_visitor_source,af_override_horse,0,1,[]),(31,mtef_visitor_source,af_override_horse,0,1,[]),
     (32,mtef_visitor_source,af_override_horse,0,1,[]),(33,mtef_visitor_source,af_override_horse,0,1,[]),(34,mtef_visitor_source,af_override_horse,0,1,[]),(35,mtef_visitor_source,af_override_horse,0,1,[]),(36,mtef_visitor_source,af_override_horse,0,1,[]),(37,mtef_visitor_source,af_override_horse,0,1,[]),(38,mtef_visitor_source,af_override_horse,0,1,[]),(39,mtef_visitor_source,af_override_horse,0,1,[]),
     (40,mtef_visitor_source,af_override_horse,0,1,[]),(41,mtef_visitor_source,af_override_horse,0,1,[]),(42,mtef_visitor_source,af_override_horse,0,1,[]),(43,mtef_visitor_source,af_override_horse,0,1,[]),(44,mtef_visitor_source,af_override_horse,0,1,[]),(45,mtef_visitor_source,af_override_horse,0,1,[]),(46,mtef_visitor_source,af_override_horse,0,1,[]),(47,mtef_visitor_source,af_override_horse,0,1,[]),
     #(99,mtef_visitor_source,af_override_horse,0,1,[]),
         ],
    [
      (1, 0, ti_once, [], [
          (store_current_scene, ":cur_scene"),#存储当前场景
          (scene_set_slot, ":cur_scene", slot_scene_visited, 1),
          (call_script, "script_init_town_walker_agents"),
          (call_script, "script_music_set_situation_with_culture", mtf_sit_travel),
        ]),
      (ti_before_mission_start, 0, 0, [], [(call_script, "script_change_banners_and_chest")]),
      (ti_inventory_key_pressed, 0, 0, [(set_trigger_result,1)], []),
      (ti_tab_pressed, 0, 0, [(try_begin),
                                (check_quest_active, "qst_hunt_down_fugitive"),
                                (neg|check_quest_succeeded, "qst_hunt_down_fugitive"),
                                (neg|check_quest_failed, "qst_hunt_down_fugitive"),
                                (quest_slot_eq, "qst_hunt_down_fugitive", slot_quest_current_state, 1),
                                (try_begin),
                                  (call_script, "script_cf_troop_agent_is_alive", "trp_fugitive"),
                                  (call_script, "script_fail_quest", "qst_hunt_down_fugitive"),
                                (else_try),
                                  (call_script, "script_succeed_quest", "qst_hunt_down_fugitive"),
                                (try_end),
                              (try_end),
                              (set_trigger_result,1)], []),
      (ti_on_leave_area, 0, 0, [
          (try_begin),
            (assign,"$g_leave_town",1),
          (try_end),
          ], []),
      (3, 0, 0, [(call_script, "script_tick_town_walkers")], []),
      (2, 0, 0, [(call_script, "script_center_ambiance_sounds")], []),

      (1, 0, ti_once, [(check_quest_active, "qst_hunt_down_fugitive"),
                       (neg|check_quest_succeeded, "qst_hunt_down_fugitive"),
                       (neg|check_quest_failed, "qst_hunt_down_fugitive"),
                       (quest_slot_eq, "qst_hunt_down_fugitive", slot_quest_current_state, 1),
                       (assign, ":not_alive", 0),
                       (try_begin),
                         (call_script, "script_cf_troop_agent_is_alive", "trp_fugitive"),
                       (else_try),
                         (assign, ":not_alive", 1),
                       (try_end),
                       (this_or_next|main_hero_fallen),
                       (eq, ":not_alive", 1),
                       ],
       [(try_begin),
          (main_hero_fallen),
          (jump_to_menu, "mnu_village_hunt_down_fugitive_defeated"),
          (call_script, "script_fail_quest", "qst_hunt_down_fugitive"),
          (finish_mission, 4),
        (else_try),
          (call_script, "script_change_player_relation_with_center", "$current_town", -2),
          (call_script, "script_succeed_quest", "qst_hunt_down_fugitive"),
        (try_end),
        ]),
               
        (ti_after_mission_start,0,0,[
        (store_current_scene,":get_scene"),
        (check_quest_active,"qst_jibai_quest"),
        (eq,":get_scene","scn_village_49"),
        ],[
        (add_visitors_to_current_scene,6,"trp_npc17",1),
        (try_begin),
            (try_for_agents,":get_npc17"),
                    (agent_get_troop_id,":cur_agent_npc17",":get_npc17"),
                    (eq,":cur_agent_npc17","trp_npc17"),
                        (assign,reg33,":get_npc17"),
                    (init_position,pos52),
                        (entry_point_get_position, pos52, 99),
                        (agent_set_scripted_destination, reg33, pos52,0),
                        (agent_set_speed_limit, reg33, 5),
                (try_end),
        (try_end),
        ]),

    ],
),



5

主题

25

回帖

14

积分

随仆

Rank: 1

UID
3131813
第纳尔
98
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2020-1-29
鲜花(1) 鸡蛋(0)
发表于 2020-2-29 01:00:23 | 显示全部楼层
add_visitors_to_current_scene和set_visitor都不是瞬间刷出npc的,有一定的延迟。你可以把你走路的逻辑另外写个触发器,比如等待个1秒。
spawn是瞬间刷出来的,你把紫色的代码换成spawn我估计就能走路了,但是不推荐。
最后解释为啥放在game_menu.py能正常走路,因为你的visitor在点击menu的时候就已经在对应场景中刷出来了。之后在已经刷出npc的时候执行了走路的逻辑。我的大号找回来了,之前被封了,以后我大号和你交流。stevenxxy007

58

主题

960

回帖

545

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5223
精华
1
互助
18
荣誉
5
贡献
100
魅力
124
注册时间
2008-6-26
QQ
鲜花(120) 鸡蛋(0)
发表于 2020-2-29 01:04:24 | 显示全部楼层
白日依山尽L 发表于 2020-2-29 00:37
代码是写好了也没编译错误,但是有点小问题我的代码是添加在mt里边的village_center最后面:红色部分是我 ...

这个就是我以前的账号,终于回来了。你的问题我用小号已经回答了,欢迎以后一起探讨~我其实也有不是困难,在开发的时候

鲜花鸡蛋

白日依山尽L  在2020-2-29 02:53  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

8

主题

37

回帖

34

积分

扈从

Rank: 2Rank: 2

UID
2790595
第纳尔
226
精华
0
互助
4
荣誉
0
贡献
0
魅力
0
注册时间
2016-12-31

霸主正版勋章

QQ
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2020-2-29 02:53:30 | 显示全部楼层
stevenxxy007 发表于 2020-2-29 01:04
这个就是我以前的账号,终于回来了。你的问题我用小号已经回答了,欢迎以后一起探讨~我其实也有不是困难 ...

成功了非常感谢这回算是弄明白了
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-11-19 11:19 , Processed in 0.123183 second(s), 28 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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