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>'"
        )
Exemple #2
0
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)
Exemple #4
0
	#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 }