Add random attacks and quest feature. - annna - Annna the nice friendly bot. HTML git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/ DIR Log DIR Files DIR Refs DIR Tags DIR README --- DIR commit 85900f48857793f3c924c587812e7e79971b3a03 DIR parent e79d692b645c0a7f09625e1a33d2ce1c7cc13a28 HTML Author: Annna Robert-Houdin <annna@bitreich.org> Date: Tue, 29 Aug 2023 20:39:18 +0200 Add random attacks and quest feature. Diffstat: M modules/idlerpg/idlerpg-channel-se… | 124 ++++++++++++++++++++----------- A modules/idlerpg/quests.txt | 7 +++++++ 2 files changed, 87 insertions(+), 44 deletions(-) --- DIR diff --git a/modules/idlerpg/idlerpg-channel-service.py b/modules/idlerpg/idlerpg-channel-service.py @@ -106,16 +106,13 @@ def main(args): return 1 penalties = readin_dictfile("%s/penalties.txt" % (basepath)) - print(penalties) classes = readin_dictfile("%s/classes.txt" % (basepath)) - print(classes) hardware = readin_dictfile("%s/hardware.txt" % (basepath)) - print(hardware) shields = readin_dictfile("%s/shields.txt" % (basepath)) - print(shields) weapons = readin_dictfile("%s/weapons.txt" % (basepath)) - print(weapons) + quests = readin_dictfile("%s/quests.txt" % (basepath)) + print(quests) hackers = readin_dictfile("%s/hackers.txt" % (basepath)) for hacker in hackers.keys(): @@ -123,7 +120,6 @@ def main(args): hackers[hacker][5] = int(hackers[hacker][5]) print(hackers) admins = readin_dictfile("%s/admins.txt" % (basepath)) - print(admins) def random_hacker(): hacker = [] @@ -141,6 +137,55 @@ def main(args): hacker.append(0) return hacker + def go_on_quest(hackers, questhackers): + quest = random.choice(list(quests.keys())) + success = random.randint(1, 16) + damage = (success - 5) * 100 + if damage >= 0: + say(chaninpath, quest \ + % (", ".join(questhackers), "succeeded", damage)) + else: + say(chaninpath, quest \ + % (", ".join(questhackers), "failed", damage)) + for hacker in questhackers: + hackers[hacker][0] += damage + + def attack(hackers, attacker, defender): + attackweapon = hackers[attacker][4] + defendweapon = hackers[defender][4] + attackshield = hackers[attacker][3] + defendshield = hackers[defender][3] + + attackweapon_roll = random.randint(1,12) + defendshield_roll = random.randint(1,12) + damage = (attackweapon_roll - defendshield_roll) * 100 + + attackinfo = "The hacker " + if damage > 0: + # Attack success + attackinfo = "%s attacked %s with a %s" \ + ", causing %s seconds of activity. %s, your " \ + "idle time has been reduced to %s." \ + % (attacker, defender, attackweapon, damage, defender, \ + hackers[defender][0]) + hackers[defender][0] -= damage + elif damage < 0: + # Defence success + damage = abs(damage) + attackinfo = "%s defended an attack from %s " \ + "with their %s, causing %s seconds of activity. %s, " \ + "your idle time has been reduced to %s." \ + % (defender, attacker, defendshield, damage, attacker, \ + hackers[attacker][0]) + hackers[attacker][0] -= damage + else: + attackinfo = "%s attacked %s with a %s" \ + ", but %s defended so well with %s, " \ + " that no damaged occured." \ + % (attacker, defender, attackweapon, defender, \ + defendshield) + say(chaninpath, attackinfo) + def hacker_info(hackers, hacker): hackerinfo = "The hacker %s of the class %s " % (hacker, hackers[hacker][1]) hackerinfo += "is using his %s hardware " % (hackers[hacker][2]) @@ -184,6 +229,14 @@ def main(args): elif newlevel < hackers[hacker][5]: say(chaninpath, "%s levelled down to level %s." % (hacker, newlevel)) hackers[hacker][5] = newlevel + + if random.randint(1, 65535) > 63000 and len(hackers) > 1: + (attacker, defender) = random.choices(list(hackers.keys()), k=2) + attack(hackers, attacker, defender) + elif random.randint(1, 65535) < 2000 and len(hackers) > 1: + questhackers = random.choices(list(hackers.keys()), k=random.int(1, len(hackers))) + go_on_quest(hackers, questhackers) + writeout_dictfile("%s/hackers.txt" % (basepath), hackers) continue @@ -195,7 +248,6 @@ def main(args): for line in lines: if line == None or line == "": continue - print("line = '%s'" % (line)) penalty = None try: @@ -207,48 +259,32 @@ def main(args): hacker = user.split("<", 1)[1].split(">", 1)[0] is_admin = False if hacker in admins.keys(): - print("is admin") is_admin = True else: penalty = "text" if remain.startswith("!"): (cmd, *cmdargs) = remain.split(" ") - print("cmd = %s; cmdargs = %s" % (cmd, cmdargs)) - if cmd == "!info" and is_admin: - if len(cmdargs) > 0: - if cmdargs[0] in hackers: - hacker_info(hackers, cmdargs[0]) - else: - hacker_info(hackers, hacker) - elif cmd == "!attack": - if len(cmdargs) > 0: - if cmdargs[0] in hackers: - weapon = hackers[hacker][3] - weapon_roll = random.randint(1,12) - shield = hackers[cmdargs[0]][4] - shield_roll = random.randint(1,12) - damage = (weapon_roll - shield_roll) * 100 - attackinfo = "The hacker " - if damage > 0: - # Attack success - attackinfo = "%s attacked %s with a %s" \ - ", causing %s seconds of activity. %s, your " \ - "idle time has been reduced to %s." \ - % (hacker, cmdargs[0], weapon, damage, cmdargs[0], \ - hackers[cmdargs[0]][0]) - hackers[cmdargs[0]][0] -= damage - elif damage < 0: - # Defence success - damage = abs(damage) - attackinfo = "%s defended an attack from %s " \ - "with their %s, causing %s seconds of activity. %s, " \ - "your idle time has been reduced to %s." \ - % (cmdargs[0], hacker, weapon, damage, hacker, \ - hackers[hacker][0]) - hackers[hacker][0] -= damage - else: - continue - say(chaninpath, attackinfo) + if cmd == "!info" and is_admin and len(cmdargs) > 0: + if cmdargs[0] in hackers: + hacker_info(hackers, cmdargs[0]) + else: + hacker_info(hackers, hacker) + elif cmd == "!attack" and len(cmdargs) > 0: + if cmdargs[0] in hackers: + attack(hackers, hacker, cmdargs[0]) + else: + (attacker, defender) = random.choices(list(hackers.keys()), k=2) + attack(hackers, attacker, defender) + elif cmd == "!quest" and len(cmdargs) > 0: + if cmdargs[0] in hackers: + argsinhackers = [hacker] + for cmdarg in cmdargs: + if cmdarg in hackers: + argsinhackers.append(cmdarg) + go_on_quest(hackers, argsinhackers) + else: + questhackers = random.choices(list(hackers.keys()), k=random.int(1, len(hackers))) + go_on_quest(hackers, questhackers) elif user == "-!-": (hacker, text) = remain.split(" ", 1) DIR diff --git a/modules/idlerpg/quests.txt b/modules/idlerpg/quests.txt @@ -0,0 +1,7 @@ +%s went on a kroketen eating contest. They %s. Their idle time changed by %d. +The hacker group %s hacked the Gibson. They %s. Their idle time changed by %d. +The hacker group %s hacked the Pentagon. They %s. Their idle time changed by %d. +%s tried to install systemd. They %s. Their idle time changed by %d. +Today the hacker group %s went on a journey to learn ed(1), they %s. Their idle time changed by %d. +A huge entry of patches was received by the %s hacker group. They %s. Their idle time changed by %d. +%s did an emerge -uDN @world on gentoo. They %s. Their idle time changed by %d.