Mogara / QSanguosha-v2

Main Repository of QSanguosha V2
Other
357 stars 190 forks source link

sgs.ai_skill_discard这个函数是在哪定义的? #138

Closed bioxun closed 6 years ago

bioxun commented 6 years ago

我在smart-ai.lua中只找到了sgs.ai_skill_discard.gamerule的定义,而sgs.ai_skill_discard.dummy是怎么定义的就没看到。

Fsu0413 commented 6 years ago

askForDiscard调用这个

bioxun commented 6 years ago

@Fsu0413 我问的是这个怎么定义的,想看看怎么筛选和排序的。

Fsu0413 commented 6 years ago

sgs.ai_skill_discard.xxxxx 后面的xxxxx是你自己定义的,也即是askForDiscard的第二个参数,他只会调用这一个函数,返回的内容就是他需要弃置的牌,和别的函数没有关系

bioxun commented 6 years ago

@Fsu0413 我想问的是sgs.ai_skill_discard怎么定义,不是askForDiscard怎么定义。 我就是发现askForDiscard里面有个sgs.ai_skill_discard[reason]函数,不知道sgs.ai_skill_discard在哪定义的。 sgs.ai_skill_discard["dummy"]显然不是我定义的,我应该在哪找这个定义呢?

DGAH commented 5 years ago

@bioxun 在 smart-ai.lua 最开始的部分,大概47行左右的位置,有一句 sgs.ai_skill_discard = {} ,这就是定义了。 具体的用法或者说工作过程,正如 @Fsu0413 所说的那样,是写在 SmartAI:askForDiscard 函数里的。 以下是其中的三行比较关键的代码: local callback = sgs.ai_skill_discard[reason] if type(callback) == "function" then local cb = callback(self, discard_num, min_num, optional, include_equip) 至于说 sgs.ai_skill_discard["dummy"],找不到定义那应该就是没有定义, 此时 type(callback) == "function" 的判断不成立,不会进入其调用过程, 而是转入后续的 SmartAI:askForDiscard 自身提供的默认处理的部分。 建议楼主仔细研读一下 SmartAI:askForDiscard 这个函数的具体内容,应该就可以明白了。