コード例 #1
0
ファイル: ZoneUpdate.py プロジェクト: sundayz/idewave-core
    async def process(self):
        region_id = unpack('<I', self.packet[-4:])[0]

        if not self.temp_ref.player.region.region_id == region_id:
            region = RegionManager().get_region(region_id=region_id)
            self.temp_ref.player.region = region

            player_mgr = PlayerManager()
            player_mgr.set(self.temp_ref.player).save()
            Logger.notify('[Zone Update]: saving player')

        return None, None
コード例 #2
0
class WorldManager(object):

    __slots__ = ('last_update', 'region_mgr', 'weather_mgr')

    def __init__(self):
        self.last_update = None
        self.region_mgr = RegionManager()
        self.weather_mgr = WeatherManager(
            instant_change=Config.World.Weather.instant_change)

    async def run(self):
        self._register_tasks()

        while True:
            self.last_update = Timer.get_ms_time()
            await sleep(Config.Realm.Settings.min_timeout)

    def _register_tasks(self):
        gather(
            ensure_future(self.process_broadcast()),
            ensure_future(self.change_weather()),
        )

    async def process_broadcast(self):
        while True:
            try:
                # notice: second parameter (packets) should be list, not string
                opcode, packets, callback = QueuesRegistry.broadcast_callback_queue.get_nowait(
                )
            except QueueEmpty:
                pass
            else:
                self.region_mgr.broadcast(opcode, packets, callback)
            finally:
                await sleep(Config.Realm.Settings.min_timeout)

    async def change_weather(self):
        while True:
            self.weather_mgr.set_weather()
            await sleep(Config.World.Weather.change_weather_timeout)
コード例 #3
0
    async def process(self) -> tuple:
        # identifier = unpack('<I', self.data[-4:])[0]
        identifier = unpack('<I', self.data[:4])[0]

        if not self.connection.player.region.identifier == identifier:
            region = RegionManager().get_region(identifier=identifier)
            self.connection.player.region = region

            with PlayerManager() as player_mgr:
                player_mgr.set(self.connection.player).save()
                Logger.notify('[Zone Update]: saving player')

        return None, None
コード例 #4
0
ファイル: console.py プロジェクト: etem/idewave-core
def process():
    parser = argparse.ArgumentParser(prog='cmd')
    commands = parser.add_subparsers(help='Available console commands')

    # database
    db_parser = commands.add_parser('db')

    args = db_parser.parse_known_args()
    parser_name = args[1][0]
    subcommand = args[1].pop()

    if parser_name == 'db':
        if subcommand == 'create':
            create_db()
            Logger.success('All dbs was created')

        elif subcommand == 'create_tables':
            create_tables()
            Logger.success('All required tables was created')

        elif subcommand == 'drop':
            drop_db()
            Logger.warning('All db was dropped')

        elif subcommand == 'recreate':
            drop_db()
            create_db()
            create_tables()
            Logger.notify('DB was successfully re-created')

        elif subcommand == 'load_data':
            load_world_data()

        elif subcommand == 'recreate_with_load':
            drop_db()
            create_db()
            create_tables()
            Logger.notify('DB was successfully re-created')
            load_world_data()

    # accounts
    account_parser = commands.add_parser('account')
    account_parser.add_argument('-n', '--name')
    account_parser.add_argument('-p', '--password')

    args = account_parser.parse_known_args()
    parser_name = args[1][0]
    subcommand = args[1].pop()

    if parser_name == 'account':
        if subcommand == 'create':
            with AccountManager() as account_mgr:
                account_mgr.create(name=args[0].name,
                                   password=args[0].password)
                Logger.success('Account "{}" created successfully!'.format(
                    args[0].name))

    # items
    item_parser = commands.add_parser('item')
    item_parser.add_argument('-d', '--display_id')
    item_parser.add_argument('-i', '--item_type')
    item_parser.add_argument('-e', '--entry')

    args = item_parser.parse_known_args()
    parser_name = args[1][0]
    subcommand = args[1].pop()

    if parser_name == 'item':
        if subcommand == 'create':
            with ItemManager() as item_mgr:
                item_mgr.create(display_id=args[0].display_id,
                                item_type=args[0].item_type,
                                entry=int(args[0].entry)).save()

                Logger.success('Item "{}" created successfully!'.format(
                    args[0].entry))

    # spells
    spell_parser = commands.add_parser('spell')
    spell_parser.add_argument('-e', '--entry')
    spell_parser.add_argument('-n', '--name')
    spell_parser.add_argument('-c', '--cost')
    spell_parser.add_argument('-s', '--school')
    spell_parser.add_argument('-r', '--range')

    args = spell_parser.parse_known_args()
    parser_name = args[1][0]
    subcommand = args[1].pop()

    if parser_name == 'spell':
        if subcommand == 'create':
            SpellManager().create(entry=args[0].entry,
                                  name=args[0].name,
                                  cost=args[0].cost,
                                  school=args[0].school,
                                  range=args[0].range).save()

            Logger.test('Spell "{}" ({}) created successfully!'.format(
                args[0].name, args[0].entry))

    # default spells
    default_spell_parser = commands.add_parser('default_spell')
    default_spell_parser.add_argument('-e', '--entry')
    default_spell_parser.add_argument('-r', '--race')
    default_spell_parser.add_argument('-c', '--char_class')

    args = default_spell_parser.parse_known_args()
    parser_name = args[1][0]
    subcommand = args[1].pop()

    if parser_name == 'default_spell':
        if subcommand == 'create':
            SpellManager().create_default_spell(
                entry=args[0].entry,
                race=args[0].race,
                char_class=args[0].char_class).save()

            Logger.test(
                'Default spell "{}" ({}:{}) created successfully!'.format(
                    args[0].entry, args[0].race, args[0].char_class))

    # skills
    # skill_parser = commands.add_parser('skill')
    # skill_parser.add_argument('-e', '--entry')
    # skill_parser.add_argument('-n', '--name')
    #
    # args = skill_parser.parse_known_args()
    # parser_name = args[1][0]
    # subcommand = args[1].pop()
    #
    # if parser_name == 'skill':
    #     if subcommand == 'create':
    #         SkillManager().create(
    #             entry=args[0].entry,
    #             name=args[0].name
    #         ).save()
    #
    #         Logger.test('Skill "{}" ({}) created successfully!'.format(args[0].name, args[0].entry))

    # skills
    skill_parser = commands.add_parser('skill')
    skill_parser.add_argument('-e', '--entry')
    skill_parser.add_argument('-n', '--name')
    skill_parser.add_argument('--min')
    skill_parser.add_argument('--max')

    args = skill_parser.parse_known_args()
    parser_name = args[1][0]
    subcommand = args[1].pop()

    if parser_name == 'skill':
        if subcommand == 'create':
            SkillManager().create(entry=args[0].entry,
                                  name=args[0].name,
                                  min=args[0].min,
                                  max=args[0].max).save()

            Logger.success('Skill "{}" ({}) created successfully!'.format(
                args[0].name, args[0].entry))

    # default skills
    default_skill_parser = commands.add_parser('default_skill')
    default_skill_parser.add_argument('-e', '--entry')
    default_skill_parser.add_argument('-r', '--race')
    default_skill_parser.add_argument('-c', '--char_class')

    args = default_skill_parser.parse_known_args()
    parser_name = args[1][0]
    subcommand = args[1].pop()

    if parser_name == 'default_skill':
        if subcommand == 'create':
            SkillManager().create_default_skill(
                entry=args[0].entry,
                race=args[0].race,
                char_class=args[0].char_class).save()

            Logger.success(
                'Default skill "{}" ({}:{}) created successfully!'.format(
                    args[0].entry, args[0].race, args[0].char_class))

    # regions
    region_parser = commands.add_parser('region')
    region_parser.add_argument('-i', '--identifier')
    region_parser.add_argument('--y1')
    region_parser.add_argument('--y2')
    region_parser.add_argument('--x1')
    region_parser.add_argument('--x2')
    region_parser.add_argument('-c', '--continent_id')

    # # arguments for default region
    region_parser.add_argument('-r', '--race')
    region_parser.add_argument('-m', '--map_id')

    # # arguments for region unit # #
    region_parser.add_argument('-u', '--unit_entry')

    # # arguments for both default region and region unit
    region_parser.add_argument('-x')
    region_parser.add_argument('-y')
    region_parser.add_argument('-z')

    args = region_parser.parse_known_args()
    parser_name = args[1][0]
    subcommand = args[1].pop()

    if parser_name == 'region':
        if subcommand == 'create':
            with RegionManager() as region_mgr:
                region_mgr.create(
                    identifier=args[0].identifier,
                    y1=args[0].y1,
                    y2=args[0].y2,
                    x1=args[0].x1,
                    x2=args[0].x2,
                    continent_id=args[0].continent_id,
                ).save()

                Logger.notify('Region "{}" created successfully!'.format(
                    args[0].identifier))

        elif subcommand == 'add_default_location':
            with RegionManager() as region_mgr:
                region_mgr.create_default_location(
                    identifier=args[0].identifier,
                    x=args[0].x,
                    y=args[0].y,
                    z=args[0].z,
                    race=args[0].race,
                    map_id=args[0].map_id)

                Logger.success(
                    'Default location ({}) for race "{}" successfully added'.
                    format(args[0].identifier, args[0].race))

        elif subcommand == 'add_unit':
            with UnitManager() as unit_mgr:
                unit_mgr.new(entry=args[0].unit_entry,
                             identifier=args[0].identifier,
                             x=args[0].x,
                             y=args[0].y,
                             z=args[0].z).set_stats().save()

                Logger.notify(
                    'Unit "{}" IN ({} - {} - {}) created successfully!'.format(
                        args[0].unit_entry, args[0].x, args[0].y, args[0].z))
コード例 #5
0
 def __init__(self):
     self.heartbeat = 1
     self.last_update = None
     self.region_mgr = RegionManager()
コード例 #6
0
 def __init__(self):
     self.last_update = None
     self.region_mgr = RegionManager()
     self.weather_mgr = WeatherManager(
         instant_change=Config.World.Weather.instant_change)
コード例 #7
0
class WorldManager(object):
    def __init__(self):
        self.heartbeat = 0.01
        self.last_update = None
        self.region_mgr = RegionManager()

    async def run(self):
        while True:
            self.last_update = Timer.get_ms_time()

            self._register_tasks()

            await asyncio.sleep(self.heartbeat)

    def _register_tasks(self):
        asyncio.gather(
            asyncio.ensure_future(self.process_player_enter_world()),
            asyncio.ensure_future(self.process_player_movement()),
            asyncio.ensure_future(self.process_player_exit_world()),
            asyncio.ensure_future(self.process_chat_message()),
            asyncio.ensure_future(self.process_name_query()),
        )

    async def process_player_enter_world(self):
        try:
            player = QueuesRegistry.players_queue.get_nowait()
        except asyncio.QueueEmpty:
            return
        else:
            self.region_mgr.add_player(player)
        finally:
            await asyncio.sleep(0.01)

    async def process_player_movement(self):
        try:
            player, opcode, packet = QueuesRegistry.movement_queue.get_nowait()
        except asyncio.QueueEmpty:
            return
        else:
            self.region_mgr.update_player_movement(player, opcode, packet)
        finally:
            await asyncio.sleep(0.01)

    async def process_player_exit_world(self):
        try:
            player = QueuesRegistry.remove_player_queue.get_nowait()
        except asyncio.QueueEmpty:
            return
        else:
            self.region_mgr.remove_player(player)
        finally:
            await asyncio.sleep(0.01)

    async def process_chat_message(self):
        try:
            sender, text_message_packet = QueuesRegistry.text_message_queue.get_nowait(
            )
        except asyncio.QueueEmpty:
            return
        else:
            self.region_mgr.send_chat_message(sender, text_message_packet)
        finally:
            await asyncio.sleep(0.01)

    async def process_name_query(self):
        try:
            requester, target_guid = QueuesRegistry.name_query_queue.get_nowait(
            )
        except asyncio.QueueEmpty:
            return
        else:
            self.region_mgr.send_name_query(requester, target_guid)
        finally:
            await asyncio.sleep(0.01)