Add random attacks and quest feature. - annna - Annna the nice friendly bot.
(HTM) 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
(HTM) 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.