烂module system!

Users who are viewing this thread

WilliamBerne

Master Knight
我日了,这个破ms!
大地图上想针对单个troop(非npc,同stack里有多个troop)进行操作,简直没找到办法!
troop_set_health原版中也只是用来减少npc生命的,我想用来给单个troop或者整个stack增加生命,简直没办法!
就连判断某个troop是否受伤都不行,只能troop_is_wounded只能判断npc,因为根本找不到单个troop
真tmd垃圾

今天搞了好久,最后发现很简单的想法居然因为找不到合适的operation命令而死活不能被实现,但是同样的功能却能在战场上实现,非常生气

armagan这伙人大概早拿着我们的钱跑到哪里去爽去了吧,过了这么久1.011也不再更新,mod工具也没人再制作了!
在此我很怀疑官方是否暗地里和那几个mod工具作者达成协议,不让他们再发布工具以限制modder。虽然表面上,如果没人做出好mod并不符合双方的利益,但是鬼知道他们还有什么小算盘!
 
module_troops里的troop都是兵种这个类的对象。agent才是troop对象的实例。
troop对象都是抽象的,通过agent把troop对象实例化。 troop里的hero(英雄)对象(玩家及npc)只允许有一个实例,而非hero对象允许有多个实例。我们看到的都是对应troop对象的实例(agent类型),而不是troop本身。 对于troop对象进行的操作会影响该troop对象的所有实例,因为一个troop对象的所有实例都是由同一个troop对象产生的。 而一个对象的所有实例之间是相互独立的,对单个实例的操作不会影响到该对象的其他实例。

这是对象和对象的实例的关系,这并不是module system有什么问题。 而且这种关系广泛存在任何领域。
 
正因为“troop对象都是抽象的”,大地图上没有agent ,所以我明明能在战场上实现的功能,在大地图上才无法实现,明白了?
而这种针对单个troop的操作功能内核本身是支持的,否则医疗技能如何出效果?
 
WilliamBerne said:
正因为“troop对象都是抽象的”,大地图上没有agent ,所以我明明能在战场上实现的功能,在大地图上才无法实现,明白了?
而这种针对单个troop的操作功能内核本身是支持的,否则医疗技能如何出效果?

你说的是疗伤技能吧。 那个可以说主要只对NPC有效。 非NPC的士兵在大地图上或者说在队伍列表里面是没有HP这个概念的,而是只有2种状态,未受伤和受伤。在战场里实例化之后才有各自的HP,而且实例化的时候,未受伤的必定是100%的HP,受伤的则不上场。 就战斗的结果看,没有倒下的士兵无论剩多少HP,都算做未受伤的,下一场还可以继续入场,并且是100%的HP进场。而倒下的士兵,也就是HP为0的士兵,要么死了,要么晕,晕了也就是所谓的受伤,算是0HP状态。

可能疗伤在大地图上对非NPC的士兵也有效,但是是根据时间及技能等级来恢复士兵“状态”,从受伤到未受伤,减少受伤的士兵的数目,而不是恢复各个士兵的具体HP。

而且很明显的,在大地图上,非NPC的士兵是没有个体性的,只有集体性,比如教练技能。教练技能传授的经验,对于某一个stack,传授的时候是按人头算的,但是汇总经验的时候是给整个stack的,然后逐个升级, 而不是该stack所有人平均持有经验。
 
但是你怎能通过operation里的命令来调整单个troop的状态呢?就一个简简单单的从受伤变为未受伤,ms里根本就没这种操作。因为你连这个troop stack里有几个伤兵都没法检测,更别提进行操作了

所以喽,我1楼说的话一点都没错,明摆着内核支持针对单个troop的操作,但是ms就是不开放,本来可以很简单的事让它弄很复杂
你为了计算累赘度专门给每个物品设了新slot,难道不同样是因为ms垃圾么:明摆着内核可以调用的各项item属性,除了名称和价格ms里全不能用

现在放出这个什么扩展版的新消息,无非就是提前吹吹风告诉大家,你看看我们做这个东西又是好几个月的功夫啊,这个费精力啊,你们到时候怎么也得再掏点钱吧?
 
party_stack_get_num_wounded    (party_stack_get_num_wounded,  <destination>,<party_id>,<stack_no>),
这个就是获得某一个stack里有多少人受伤的。

party_wound_members  (party_wound_members,<party_id>,<troop_id>,<number>),
这个是把未受伤的弄成受伤的。 这个在转移人员的时候很重要,转移的时候只能简单的remove和add。
转移伤员就是先获得该stack有多少人受伤,然后转移stack再把相应数量的人弄成受伤的。

比如说下面这一段:
  ("party_add_party_companions",
    [
      (store_script_param_1,
":target_party"), #Target Party_id
     
(store_script_param_2, ":source_party"), #Source Party_id
     
(party_get_num_companion_stacks, ":num_stacks",":source_party"),
      (try_for_range,
":stack_no", 0, ":num_stacks"),
        (party_stack_get_troop_id,   
":stack_troop",":source_party",":stack_no"),
        (this_or_next|neg|troop_is_hero,
":stack_troop"),
        (eq,
"$g_move_heroes", 1),
        (party_stack_get_size,       
":stack_size",":source_party",":stack_no"),
        (party_add_members,
":target_party", ":stack_troop", ":stack_size"),
        (party_stack_get_num_wounded,
":num_wounded", ":source_party", ":stack_no"),
        (party_wound_members,
":target_party", ":stack_troop", ":num_wounded"),
      (try_end),
  ]),

下面这个很直白了,就不解释了。
party_remove_members_wounded_first    = 1619
# stores number removed to reg0  # (party_remove_members_wounded_first,<party_id>,<troop_id>,<number>),
 
好吧,你现在只是把没受伤的弄成受伤,可是我并不需要这个,我需要让他们按一定数目复原。
总不能把伤兵去掉,然后再添进来新的士兵吧,那样会把伤兵经验抹掉,玩家往往得不偿失
 
module system 说到底还只是一个调整参数的接口,很多地方都没有开放出来。比如骨骼/动作编辑,比如文件操作,比如视频播放。
 
Back
Top Bottom