def unsubscribe(params, mud, playersDB, players, rooms, npcsDB, npcs, itemsDB, items, envDB, env, eventDB, eventSchedule, id, fights, corpses, chans, gsocket): params = params.replace(" ", "") if len(params) > 0: try: if "@" in params: gsocket.msg_gen_message_channel_send( players[id]['name'], params.split("@")[0].lower(), players[id]['name'] + " has left the channel!") if params.lower() != "system": sendToChannel(players[id]['name'], params, players[id]['name'] + " has left the channel.", chans) players[id]['channels'].remove(params.lower()) mud.send_message( id, "You have unsubscribed from [<f191>" + params.lower() + "<r>]") except Exception as e: mud.send_message( id, "You are not currently subscribed to [<f191>" + params.lower() + "<r>]") else: mud.send_message(id, "What channel would you like to unsubscribe from?") if params.lower() == "system": mud.send_message( id, "<f230>You have un-subscribed from a [<f191>system<r>] channel. From now on, you will not receive any game-wide system messages (including server reboot notifications etc.). You can subscribe to SYSTEM at any time by typing '<f255>@subscribe system<r>'" )
def subscribe(params, mud, playersDB, players, rooms, npcsDB, npcs, itemsDB, items, envDB, env, eventDB, eventSchedule, id, fights, corpses, chans, gsocket): # print("Subbing to a channel") invalidChannels = ["clear", "show"] params = params.replace(" ", "") if len(params) > 0: if len(params) < 81: if str(params.lower()) in players[id]['channels']: mud.send_message(id, "You are already subscribed to [<f191>" + params.lower() + "<r>]") else: #if str(params.lower()) != 'clear': if str(params.lower()) not in invalidChannels: players[id]['channels'].append(str(params.lower())) mud.send_message(id, "You have subscribed to [<f191>" + params + "<r>]") if "@" in params: gsocket.msg_gen_message_channel_send(players[id]['name'], params.split("@")[0].lower(), players[id]['name'] + " has joined the channel!") if params.lower() != "system": sendToChannel(players[id]['name'], params, players[id]['name'] + " has joined the channel.", chans) else: mud.send_message(id, "Invalid channel name [<f191>" + params + "<r>]") else: mud.send_message(id, "Channel names longer than 80 character are unsupported!") else: mud.send_message(id, "What channel would you like to subscribe to?")
if gsocket.state["connected"] == True: gsocket.import_players(playerList) gsocket.handle_read() gsocket.handle_write() rcvd_msg = None ret_value = None if len(gsocket.inbound_frame_buffer) > 0: rcvd_msg = gsocket.receive_message() #print(rcvd_msg.event) ret_value = rcvd_msg.parse_frame() #print(ret_value) if rcvd_msg.event == "channels/broadcast": #print("sending to channels in game") sendToChannel(str(ret_value['name']) + "@" + ret_value['game'], ret_value['channel'] + "@grapevine", ret_value['message'], channels) elif rcvd_msg.event == "players/sign-in": log("Received player sign in", "info") log(ret_value) # update player list for grapevine heartbeats playerList = [] for p in players: if players[p]['name'] != None and players[p]['authenticated'] != None: if players[p]['name'] not in playerList: playerList.append(players[p]['name']) #grapevineLastHeartbeat = gsocket.msg_gen_lastheartbeat_timestamp() #print(str(grapevineLastHeartbeat)) # Let's wait some time before attempting reconnection (as defined in config.ini)
#print(type(readtest)) #print(readtest) # pause for 1/5 of a second on each loop, so that we don't constantly # use 100% CPU time time.sleep(0.1) # print(eventSchedule) # 'update' must be called in the loop to keep the game running and give # us up-to-date information mud.update() # Check if State Save is due and execute it if required now = int(time.time()) if int(now >= lastStateSave + stateSaveInterval): sendToChannel("Server", "system", "Saving server state...", channels) # State Save logic Start for (pid, pl) in list(players.items()): if players[pid]['authenticated'] is not None: # print('Saving' + players[pid]['name']) saveState(players[pid], playersDB) playersDB = loadPlayersDB() # State Save logic End lastStateSave = now # Handle Player Deaths for (pid, pl) in list(players.items()): if players[pid]['authenticated'] == True: if players[pid]['hp'] <= 0: # Create player's corpse in the room corpses[len(corpses)] = { 'room': players[pid]['room'], 'name': str(players[pid]['name'] + '`s corpse'), 'inv': players[pid]['inv'], 'died': int(time.time()), 'TTL': players[pid]['corpseTTL'], 'owner': 1 }