memory use improvements.
Showing
19 changed files
with
107 additions
and
98 deletions
... | @@ -41,12 +41,15 @@ class CommandHandler(object): | ... | @@ -41,12 +41,15 @@ class CommandHandler(object): |
41 | command = cmd | 41 | command = cmd |
42 | ldict = locals() | 42 | ldict = locals() |
43 | with open('commands/{}.txt'.format(cmd), 'r', encoding='utf-8') as f: | 43 | with open('commands/{}.txt'.format(cmd), 'r', encoding='utf-8') as f: |
44 | exec(f.read(), globals(), ldict) | 44 | command_text = f.read() |
45 | exec(command_text, globals(), ldict) | ||
46 | del command_text | ||
45 | if ldict['next_command'] != None: | 47 | if ldict['next_command'] != None: |
46 | locals()['tokens'] = [] | 48 | locals()['tokens'] = [] |
47 | tokens = [] | 49 | tokens = [] |
48 | with open('commands/{}.txt'.format(ldict['next_command']), 'r', encoding='utf-8') as f: | 50 | with open('commands/{}.txt'.format(ldict['next_command']), 'r', encoding='utf-8') as f: |
49 | exec(f.read()) | 51 | exec(f.read()) |
52 | del ldict | ||
50 | return True | 53 | return True |
51 | # except Exception as e: | 54 | # except Exception as e: |
52 | # print('Something happened...') | 55 | # print('Something happened...') | ... | ... |
... | @@ -23,4 +23,5 @@ def drop(id, tokens, players, mud): | ... | @@ -23,4 +23,5 @@ def drop(id, tokens, players, mud): |
23 | else: | 23 | else: |
24 | mud.send_message(id, 'You do not have {} in your inventory.'.format(tokens[0])) | 24 | mud.send_message(id, 'You do not have {} in your inventory.'.format(tokens[0])) |
25 | 25 | ||
26 | drop(id, tokens, players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
26 | drop(id, tokens, players, mud) | ||
27 | del drop | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -9,6 +9,9 @@ def get(id, tokens, players, mud): | ... | @@ -9,6 +9,9 @@ def get(id, tokens, players, mud): |
9 | players[id]['inventory'][tokens[0]] += 1 | 9 | players[id]['inventory'][tokens[0]] += 1 |
10 | else: | 10 | else: |
11 | players[id]['inventory'][tokens[0]] = 1 | 11 | players[id]['inventory'][tokens[0]] = 1 |
12 | room_data['inventory'][tokens[0]] -= 1 | ||
13 | if room_data['inventory'][tokens[0]] <= 0: | ||
14 | del room_data['inventory'][tokens[0]] | ||
12 | for pid, pl in players.items(): | 15 | for pid, pl in players.items(): |
13 | # if they're in the same room as the player | 16 | # if they're in the same room as the player |
14 | if players[pid]["room"] == players[id]["room"]: | 17 | if players[pid]["room"] == players[id]["room"]: |
... | @@ -16,6 +19,7 @@ def get(id, tokens, players, mud): | ... | @@ -16,6 +19,7 @@ def get(id, tokens, players, mud): |
16 | mud.send_message(pid, "{} picked up a {}.".format( | 19 | mud.send_message(pid, "{} picked up a {}.".format( |
17 | players[id]["name"], tokens[0])) | 20 | players[id]["name"], tokens[0])) |
18 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) | 21 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) |
22 | utils.save_object_to_file(room_data, 'rooms/' + room_name + '.json') | ||
19 | else: | 23 | else: |
20 | mud.send_message(id, 'There is no {} here to get.'.format(tokens[0])) | 24 | mud.send_message(id, 'There is no {} here to get.'.format(tokens[0])) |
21 | 25 | ... | ... |
... | @@ -56,4 +56,5 @@ def go(id, params, players, mud, tokens, command): | ... | @@ -56,4 +56,5 @@ def go(id, params, players, mud, tokens, command): |
56 | mud.send_message(id, "Unknown exit '{}'".format(params)) | 56 | mud.send_message(id, "Unknown exit '{}'".format(params)) |
57 | if command is None and cmd is not None: | 57 | if command is None and cmd is not None: |
58 | command = cmd | 58 | command = cmd |
59 | next_command = go(id, params, players, mud, tokens, command) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
59 | next_command = go(id, params, players, mud, tokens, command) | ||
60 | del go | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -11,4 +11,5 @@ def help(id, tokens, mud): | ... | @@ -11,4 +11,5 @@ def help(id, tokens, mud): |
11 | except: | 11 | except: |
12 | mud.send_message(id, 'No help topics available for \"{}\". A list\r\n of all commands is available at: help index'.format(tokens[0])) | 12 | mud.send_message(id, 'No help topics available for \"{}\". A list\r\n of all commands is available at: help index'.format(tokens[0])) |
13 | 13 | ||
14 | help(id, tokens, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
14 | help(id, tokens, mud) | ||
15 | del help | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -4,4 +4,5 @@ def inventory(id, players, mud): | ... | @@ -4,4 +4,5 @@ def inventory(id, players, mud): |
4 | mud.send_message(id, '{} {}'.format("%-37s" % item, qty)) | 4 | mud.send_message(id, '{} {}'.format("%-37s" % item, qty)) |
5 | mud.send_message(id, '\r\n-----------------------------------------') | 5 | mud.send_message(id, '\r\n-----------------------------------------') |
6 | 6 | ||
7 | inventory(id, players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
7 | inventory(id, players, mud) | ||
8 | del inventory | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -46,4 +46,5 @@ def look(id, mud, players, tokens): | ... | @@ -46,4 +46,5 @@ def look(id, mud, players, tokens): |
46 | room_monsters = utils.load_object_from_file('rooms/' + room_name + '_monsters.json') | 46 | room_monsters = utils.load_object_from_file('rooms/' + room_name + '_monsters.json') |
47 | mud.send_message(id, "Mobs here: {}".format( ", ".join(room_monsters.keys()))) | 47 | mud.send_message(id, "Mobs here: {}".format( ", ".join(room_monsters.keys()))) |
48 | 48 | ||
49 | look(id, mud, players, tokens) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
49 | look(id, mud, players, tokens) | ||
50 | del look | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -5,4 +5,5 @@ def prompt(id, tokens, params, players, mud): | ... | @@ -5,4 +5,5 @@ def prompt(id, tokens, params, players, mud): |
5 | players[id]['prompt'] = params + ' ' | 5 | players[id]['prompt'] = params + ' ' |
6 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) | 6 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) |
7 | 7 | ||
8 | prompt(id, tokens, params, players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
8 | prompt(id, tokens, params, players, mud) | ||
9 | del prompt | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -4,4 +4,5 @@ def quit(id, players, mud): | ... | @@ -4,4 +4,5 @@ def quit(id, players, mud): |
4 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) | 4 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) |
5 | mud.disconnect_player(id) | 5 | mud.disconnect_player(id) |
6 | 6 | ||
7 | quit(id, players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
7 | quit(id, players, mud) | ||
8 | del quit | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -4,4 +4,5 @@ def save(id, players, mud): | ... | @@ -4,4 +4,5 @@ def save(id, players, mud): |
4 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) | 4 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) |
5 | mud.send_message(id, "Save complete") | 5 | mud.send_message(id, "Save complete") |
6 | 6 | ||
7 | save(id, players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
7 | save(id, players, mud) | ||
8 | del save | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -6,4 +6,5 @@ def say(id, params, players, mud): | ... | @@ -6,4 +6,5 @@ def say(id, params, players, mud): |
6 | # send them a message telling them what the player said | 6 | # send them a message telling them what the player said |
7 | mud.send_message(pid, "{} says: {}".format( | 7 | mud.send_message(pid, "{} says: {}".format( |
8 | players[id]["name"], params)) | 8 | players[id]["name"], params)) |
9 | say(id, params, players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
9 | say(id, params, players, mud) | ||
10 | del say | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -7,4 +7,5 @@ def whisper(id, tokens, players, mud): | ... | @@ -7,4 +7,5 @@ def whisper(id, tokens, players, mud): |
7 | mud.send_message(pid, "{} whispers: {}".format( | 7 | mud.send_message(pid, "{} whispers: {}".format( |
8 | players[id]["name"], ' '.join(tokens[1:]))) | 8 | players[id]["name"], ' '.join(tokens[1:]))) |
9 | 9 | ||
10 | whisper(id, tokens, players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
10 | whisper(id, tokens, players, mud) | ||
11 | del whisper | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -5,4 +5,5 @@ def who(id, players, mud): | ... | @@ -5,4 +5,5 @@ def who(id, players, mud): |
5 | mud.send_message(id, " " + player["name"]) | 5 | mud.send_message(id, " " + player["name"]) |
6 | mud.send_message(id, "---------------------------------------------".format(len(players))) | 6 | mud.send_message(id, "---------------------------------------------".format(len(players))) |
7 | mud.send_message(id, "") | 7 | mud.send_message(id, "") |
8 | who(id, players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
8 | who(id, players, mud) | ||
9 | del who | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | #!/usr/bin/env python | 1 | #!/usr/bin/env python |
2 | 2 | ||
3 | """A simple Multi-User Dungeon (MUD) game. Players can talk to each | ||
4 | other, examine their surroundings and move between rooms. | ||
5 | |||
6 | Some ideas for things to try adding: | ||
7 | * More rooms to explore | ||
8 | * An 'emote' command e.g. 'emote laughs out loud' -> 'Mark laughs | ||
9 | out loud' | ||
10 | * A 'whisper' command for talking to individual players | ||
11 | * A 'shout' command for yelling to players in all rooms | ||
12 | * Items to look at in rooms e.g. 'look fireplace' -> 'You see a | ||
13 | roaring, glowing fire' | ||
14 | * Items to pick up e.g. 'take rock' -> 'You pick up the rock' | ||
15 | * Monsters to fight | ||
16 | * Loot to collect | ||
17 | * Saving players accounts between sessions | ||
18 | * A password login | ||
19 | * A shop from which to buy items | ||
20 | |||
21 | author: Mark Frimston - mfrimston@gmail.com | ||
22 | """ | 3 | """ |
4 | MudServer author: Mark Frimston - mfrimston@gmail.com | ||
23 | 5 | ||
24 | import time | 6 | Micropython port and expansion author: Barry Ruffner - barryruffner@gmail.com |
25 | import sys | 7 | """ |
26 | if 'esp' in sys.platform: | 8 | |
27 | import gc | 9 | from time import sleep |
28 | import machine | 10 | from sys import platform |
11 | if 'esp' in platform: | ||
12 | from gc import collect, mem_free | ||
13 | from machine import Pin | ||
29 | # import the MUD server class | 14 | # import the MUD server class |
30 | from mudserver import MudServer | 15 | from mudserver import MudServer |
31 | 16 | ||
32 | import utils | 17 | from utils import load_object_from_file, save_object_to_file |
33 | 18 | ||
34 | print('STARTING MUD\r\n\r\n\r\n') | 19 | print('STARTING MUD\r\n\r\n\r\n') |
35 | 20 | ||
36 | if 'esp' in sys.platform: | 21 | if 'esp' in platform: |
37 | flash_button = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP) | 22 | flash_button = Pin(0, Pin.IN, Pin.PULL_UP) |
38 | 23 | ||
39 | # stores the players in the game | 24 | # stores the players in the game |
40 | players = {} | 25 | players = {} |
... | @@ -59,14 +44,13 @@ tick = 0.0 | ... | @@ -59,14 +44,13 @@ tick = 0.0 |
59 | spawn = 0.0 | 44 | spawn = 0.0 |
60 | # main game loop. We loop forever (i.e. until the program is terminated) | 45 | # main game loop. We loop forever (i.e. until the program is terminated) |
61 | while True: | 46 | while True: |
62 | if 'esp' in sys.platform: | 47 | if 'esp' in platform: |
63 | gc.collect() | 48 | collect() |
64 | if flash_button.value() == 0: | 49 | if flash_button.value() == 0: |
65 | break | 50 | break |
66 | # pause for 1/5 of a second on each loop, so that we don't constantly | 51 | # pause for 1/5 of a second on each loop, so that we don't constantly |
67 | # use 100% CPU time | 52 | sleep(0.001) |
68 | time.sleep(0.001) | 53 | if 'esp' in platform: |
69 | if 'esp' in sys.platform: | ||
70 | tick += 0.001 | 54 | tick += 0.001 |
71 | else: | 55 | else: |
72 | tick += 0.0005 | 56 | tick += 0.0005 |
... | @@ -80,6 +64,7 @@ while True: | ... | @@ -80,6 +64,7 @@ while True: |
80 | print('spawner error:') | 64 | print('spawner error:') |
81 | print(e) | 65 | print(e) |
82 | if tick >= 1: | 66 | if tick >= 1: |
67 | print(mem_free()) | ||
83 | spawn += tick | 68 | spawn += tick |
84 | tick = 0 | 69 | tick = 0 |
85 | # try: | 70 | # try: |
... | @@ -101,7 +86,7 @@ while True: | ... | @@ -101,7 +86,7 @@ while True: |
101 | # The dictionary key is the player's id number. We set their room to | 86 | # The dictionary key is the player's id number. We set their room to |
102 | # None initially until they have entered a name | 87 | # None initially until they have entered a name |
103 | # Try adding more player stats - level, gold, inventory, etc | 88 | # Try adding more player stats - level, gold, inventory, etc |
104 | players[id] = utils.load_object_from_file("defaultplayer.json") | 89 | players[id] = load_object_from_file("defaultplayer.json") |
105 | with open('welcome.txt', 'r', encoding='utf-8') as f: | 90 | with open('welcome.txt', 'r', encoding='utf-8') as f: |
106 | for line in f: | 91 | for line in f: |
107 | mud.send_message(id, line, "\r") | 92 | mud.send_message(id, line, "\r") |
... | @@ -121,12 +106,11 @@ while True: | ... | @@ -121,12 +106,11 @@ while True: |
121 | # send each player a message to tell them about the diconnected | 106 | # send each player a message to tell them about the diconnected |
122 | # player | 107 | # player |
123 | if players[pid]["name"] != None: | 108 | if players[pid]["name"] != None: |
124 | mud.send_message(pid, "{} quit the game".format( | 109 | mud.send_message(pid, "{} quit the game".format(players[pid]["name"])) |
125 | players[pid]["name"])) | ||
126 | 110 | ||
127 | # remove the player's entry in the player dictionary | 111 | # remove the player's entry in the player dictionary |
128 | if players[id]["name"] != None: | 112 | if players[id]["name"] != None: |
129 | utils.save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) | 113 | save_object_to_file(players[id], "players/{}.json".format(players[id]["name"])) |
130 | del(players[id]) | 114 | del(players[id]) |
131 | 115 | ||
132 | # go through any new commands sent from players | 116 | # go through any new commands sent from players |
... | @@ -151,7 +135,7 @@ while True: | ... | @@ -151,7 +135,7 @@ while True: |
151 | already_logged_in = True | 135 | already_logged_in = True |
152 | if already_logged_in: | 136 | if already_logged_in: |
153 | continue | 137 | continue |
154 | loaded_player = utils.load_object_from_file("players/{}.json".format(command)) | 138 | loaded_player = load_object_from_file("players/{}.json".format(command)) |
155 | if loaded_player is None: | 139 | if loaded_player is None: |
156 | players[id]["name"] = command | 140 | players[id]["name"] = command |
157 | players[id]["room"] = "Tavern" | 141 | players[id]["room"] = "Tavern" |
... | @@ -171,7 +155,7 @@ while True: | ... | @@ -171,7 +155,7 @@ while True: |
171 | 155 | ||
172 | # send the new player the description of their current room | 156 | # send the new player the description of their current room |
173 | 157 | ||
174 | mud.send_message(id, utils.load_object_from_file('rooms/' + players[id]["room"] + '.json')['description']) | 158 | mud.send_message(id, load_object_from_file('rooms/' + players[id]["room"] + '.json')['description']) |
175 | 159 | ||
176 | else: | 160 | else: |
177 | from commandhandler import CommandHandler | 161 | from commandhandler import CommandHandler |
... | @@ -182,7 +166,7 @@ while True: | ... | @@ -182,7 +166,7 @@ while True: |
182 | show_prompt(id) | 166 | show_prompt(id) |
183 | 167 | ||
184 | # Start WIFI Setup | 168 | # Start WIFI Setup |
185 | if 'esp' in sys.platform: | 169 | if 'esp' in platform: |
186 | if flash_button.value() == 0: | 170 | if flash_button.value() == 0: |
187 | print('Starting WIFIWeb') | 171 | print('Starting WIFIWeb') |
188 | import wifiweb | 172 | import wifiweb | ... | ... |
1 | 1 | ||
2 | def run_mobs(players, mud): | 2 | def run_mobs(players, mud): |
3 | def get_att(d): | ||
4 | att = 0 | ||
5 | if 'd' in d: | ||
6 | dice = d.split('d') | ||
7 | for d in range(int(dice[0])): | ||
8 | att += utils.randrange(int(dice[1])) + 1 | ||
9 | else: | ||
10 | att = int(d) | ||
11 | return att | ||
12 | def calc_att(pid, attacks, bank): | ||
13 | v_att = [] | ||
14 | att = 0 | ||
15 | for attack in attacks: | ||
16 | if attack['cost'] < bank: | ||
17 | v_att.append(attack) | ||
18 | # Select a random attack | ||
19 | if len(v_att) > 0: | ||
20 | attack = v_att[utils.randrange(len(v_att))] | ||
21 | att = get_att(attack['dmg']) | ||
22 | mud.send_message(pid, "%s for %d" % (attack['desc'], att,)) | ||
23 | bank -= attack['cost'] | ||
24 | return att, bank | ||
25 | 3 | ||
4 | from utils import load_object_from_file, save_object_to_file, calc_att, get_att | ||
26 | for pid, player in players.items(): | 5 | for pid, player in players.items(): |
27 | if not player['name']: | 6 | if not player['name']: |
28 | continue | 7 | continue |
29 | room_monsters = utils.load_object_from_file('rooms/{}_monsters.json'.format(player['room'])) | 8 | room_monsters = load_object_from_file('rooms/{}_monsters.json'.format(player['room'])) |
30 | if not room_monsters: | 9 | if not room_monsters: |
31 | continue | 10 | continue |
32 | for mon_name, monster in room_monsters.items(): | 11 | for mon_name, monster in room_monsters.items(): |
33 | monster_template = utils.load_object_from_file('mobs/{}.json'.format(mon_name)) | 12 | monster_template = load_object_from_file('mobs/{}.json'.format(mon_name)) |
34 | if not monster_template: | 13 | if not monster_template: |
35 | continue | 14 | continue |
36 | for active_monster_idx, active_monster in enumerate(monster['active']): | 15 | for active_monster_idx, active_monster in enumerate(monster['active']): |
... | @@ -44,40 +23,43 @@ def run_mobs(players, mud): | ... | @@ -44,40 +23,43 @@ def run_mobs(players, mud): |
44 | sta += monster_template['star'] | 23 | sta += monster_template['star'] |
45 | active_monster['sta'] = sta | 24 | active_monster['sta'] = sta |
46 | if active_monster['action'] == "attack" and active_monster['target'] == player['name']: | 25 | if active_monster['action'] == "attack" and active_monster['target'] == player['name']: |
47 | if player["weapon"]: | 26 | if player.get("weapon"): |
48 | weapon = utils.load_object_from_file('inventory/{}.json'.format(player['weapon'])) | 27 | weapon = load_object_from_file('inventory/{}.json'.format(player['weapon'])) |
49 | if weapon: | 28 | att = get_att(weapon['damage']) |
50 | att = get_att(weapon['damage']) | 29 | mud.send_message(pid, "Your %s strikes the %s for %d" % (weapon['title'], mon_name, att,)) |
51 | mud.send_message(pid, "Your %s strikes the %s for %d" % (weapon['title'], mon_name, att,)) | ||
52 | else: | ||
53 | att = get_att(player['aa']) | ||
54 | else: | 30 | else: |
55 | att = get_att(player['aa']) | 31 | att = get_att(player['aa']) |
56 | mud.send_message(pid, "You hit the %s for %d" % (mon_name, att,)) | 32 | mud.send_message(pid, "You hit the %s for %d" % (mon_name, att,)) |
57 | hp -= att | 33 | hp -= att |
58 | if hp == 0: | 34 | if hp == 0: |
59 | DEAD = 1 | 35 | DEAD = 1 |
60 | att = get_att(monster_template['aa']) | 36 | if active_monster.get("weapon"): |
37 | weapon = load_object_from_file('inventory/{}.json'.format(active_monster['weapon'])) | ||
38 | att = get_att(weapon['damage']) | ||
39 | mud.send_message(pid, "The %s strikes you with a %s for %d" % (mon_name, weapon['title'], att,)) | ||
40 | else: | ||
41 | att = get_att(monster_template['aa']) | ||
42 | mud.send_message(pid, "You were hit by a %s for %d" % (mon_name, att,)) | ||
61 | players[pid]['hp'] -= att | 43 | players[pid]['hp'] -= att |
62 | mud.send_message(pid, "You were hit by a %s for %d" % (mon_name, att,)) | ||
63 | # wait until at least 50% of stamina or mp are regenerated or hp is less than 25% | 44 | # wait until at least 50% of stamina or mp are regenerated or hp is less than 25% |
64 | 45 | ||
65 | if (hp/active_monster['maxhp'] < 0.25) or (mp > 0 and mp/active_monster['maxmp'] > 0.5) or (sta > 0 and sta/active_monster['maxsta'] > 0.5): | 46 | if (hp/active_monster['maxhp'] < 0.25) or (mp > 0 and mp/active_monster['maxmp'] > 0.5) or (sta > 0 and sta/active_monster['maxsta'] > 0.5): |
66 | magic_cast = False | 47 | magic_cast = False |
67 | if mp > 0: | 48 | if mp > 0: |
68 | att, mp = calc_att(pid, monster_template['sp'], mp) | 49 | att, mp = calc_att(mud, pid, monster_template['sp'], mp) |
69 | active_monster['mp'] = mp | 50 | active_monster['mp'] = mp |
70 | players[pid]['hp'] -= att | 51 | players[pid]['hp'] -= att |
71 | if att > 0: | 52 | if att > 0: |
72 | magic_cast = True | 53 | magic_cast = True |
73 | if not magic_cast: | 54 | if not magic_cast: |
74 | if sta > 0: | 55 | if sta > 0: |
75 | att, sta = calc_att(pid, monster_template['at'], sta) | 56 | att, sta = calc_att(mud, pid, monster_template['at'], sta) |
76 | active_monster['sta'] = sta | 57 | active_monster['sta'] = sta |
77 | players[pid]['hp'] -= att | 58 | players[pid]['hp'] -= att |
78 | 59 | ||
79 | room_monsters[mon_name]['active'][active_monster_idx] = active_monster | 60 | room_monsters[mon_name]['active'][active_monster_idx] = active_monster |
80 | 61 | ||
81 | utils.save_object_to_file(room_monsters, 'rooms/{}_monsters.json'.format(player['room'])) | 62 | save_object_to_file(room_monsters, 'rooms/{}_monsters.json'.format(player['room'])) |
82 | 63 | ||
83 | run_mobs(players, mud) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
64 | run_mobs(players, mud) | ||
65 | del run_mobs | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | {"name": "test", "room": "Tavern", "inventory": {"candle": 1}, "prompt": "%hp> ", "aliases": {}, "hp": 596, "mp": 100, "sta": 10, "aa": "1d2", "mpr": 0.25, "star": 0.4, "maxhp": 953, "maxmp": 100, "maxsta": 10, "weapon": "sword"} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | {"name": "test", "room": "Outside", "inventory": {"candle": 1}, "prompt": "%hp> ", "aliases": {}, "hp": 593, "mp": 100, "sta": 10, "aa": "1d2", "mpr": 0.25, "star": 0.4, "maxhp": 953, "maxmp": 100, "maxsta": 10, "weapon": "sword"} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -36,6 +36,7 @@ def run_command(sio, command, expected='>>>'): | ... | @@ -36,6 +36,7 @@ def run_command(sio, command, expected='>>>'): |
36 | 36 | ||
37 | with serial.Serial(PORT, BAUDRATE, timeout=1) as ser: | 37 | with serial.Serial(PORT, BAUDRATE, timeout=1) as ser: |
38 | sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser)) | 38 | sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser)) |
39 | run_command(sio, '\x03') | ||
39 | run_command(sio, 'import os') | 40 | run_command(sio, 'import os') |
40 | root = eval(run_command(sio, 'os.listdir()', expected=']')) | 41 | root = eval(run_command(sio, 'os.listdir()', expected=']')) |
41 | 42 | ||
... | @@ -52,13 +53,14 @@ with serial.Serial(PORT, BAUDRATE, timeout=1) as ser: | ... | @@ -52,13 +53,14 @@ with serial.Serial(PORT, BAUDRATE, timeout=1) as ser: |
52 | print('Folders already created.') | 53 | print('Folders already created.') |
53 | 54 | ||
54 | 55 | ||
55 | for folder in folders: | 56 | for folder in folders: |
56 | for f in os.listdir(folder): | 57 | for f in os.listdir(folder): |
57 | files.append('{}/{}'.format(folder, f)) | 58 | files.append('{}/{}'.format(folder, f)) |
58 | 59 | ||
59 | with open('releasepw.conf', 'r', encoding='utf-8') as f: | 60 | with open('releasepw.conf', 'r', encoding='utf-8') as f: |
60 | password = f.read() | 61 | password = f.read() |
61 | 62 | ||
62 | for file in files: | 63 | for file in files: |
63 | os.system("python webrepl\webrepl_cli.py -p {} {} {}:/{}".format(password, file, IPADDRESS, file)) | 64 | os.system("python webrepl\webrepl_cli.py -p {} {} {}:/{}".format(password, file, IPADDRESS, file)) |
64 | 65 | ||
66 | run_command(sio, 'import machine;machine.reset') | ... | ... |
1 | {"cricket": {"max": 1, "active": [{"hp": 100, "mp": 0.25, "sta": 2.7500000000000715, "maxhp": 100, "maxmp": 10, "maxsta": 10, "action": "attack", "target": "test"}]}} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | {"cricket": {"max": 1, "active": [{"hp": 100, "mp": 2.0, "sta": 4.550000000000075, "maxhp": 100, "maxmp": 10, "maxsta": 10, "action": "attack", "target": "test"}]}} | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -37,4 +37,27 @@ def randrange(start, stop=None): | ... | @@ -37,4 +37,27 @@ def randrange(start, stop=None): |
37 | break | 37 | break |
38 | return r + start | 38 | return r + start |
39 | else: | 39 | else: |
40 | return random.randrange(start) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
40 | return random.randrange(start) | ||
41 | |||
42 | def get_att(d): | ||
43 | att = 0 | ||
44 | if 'd' in d: | ||
45 | dice = d.split('d') | ||
46 | for d in range(int(dice[0])): | ||
47 | att += randrange(int(dice[1])) + 1 | ||
48 | else: | ||
49 | att = int(d) | ||
50 | return att | ||
51 | def calc_att(mud, pid, attacks, bank): | ||
52 | v_att = [] | ||
53 | att = 0 | ||
54 | for attack in attacks: | ||
55 | if attack['cost'] < bank: | ||
56 | v_att.append(attack) | ||
57 | # Select a random attack | ||
58 | if len(v_att) > 0: | ||
59 | attack = v_att[randrange(len(v_att))] | ||
60 | att = get_att(attack['dmg']) | ||
61 | mud.send_message(pid, "%s for %d" % (attack['desc'], att,)) | ||
62 | bank -= attack['cost'] | ||
63 | return att, bank | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or sign in to post a comment