File size: 1,343 Bytes
bcf0302
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import random
class ResourceDepletionPlugin:
    def __init__(self, depletion_threshold, death_rate = 0.3):
        self.depletion_threshold = depletion_threshold
        self.death_rate = death_rate

    def trigger_disaster(self, characters, character_die_callback):
        print("资源耗尽! 发生灾难...")

        # 按照宗族大小排序
        clan_size = {}
        for c in characters:
            clan_size[c.clan] = clan_size.get(c.clan, 0) + 1

        clans = sorted(clan_size.items(), key=lambda x: x[1], reverse=True)

        # 前 50% 大小的宗族,死亡 30%, 后 50% 大小的宗族,死亡 60%
        for i, (clan, size) in enumerate(clans):
            if i < len(clans) // 2:
                num_killed = int(size * self.death_rate)
            else:
                num_killed = int(size * (self.death_rate * 2))

            # 随机选择死亡成员
            clan_members = [c for c in characters if c.clan == clan]
            killed = random.sample(clan_members, num_killed)

            for c in killed:
                character_die_callback(c)

    def execute(self, resources, characters, character_die_callback):
        # 检查资源是否耗尽,如果耗尽则触发灾难
        if resources < self.depletion_threshold:
            self.trigger_disaster(characters, character_die_callback)