Esempio n. 1
0
    def handle_fishing_attempt_chance(self):
        skill = self.skills.get(SkillTypes.FISHING, None)
        if not skill:
            return False

        # Search the skill zone by parent zone id.
        zone_skill = WorldDatabaseManager.fishing_skill_get_by_entry(
            MapManager.get_parent_zone_id(self.player_mgr.zone, self.player_mgr.map_))
        if not zone_skill:
            return False

        # Get zone skill value.
        zone_skill_value = zone_skill.skill

        # Consider bonus for roll.
        skill_total = self.get_total_skill_value(SkillTypes.FISHING)
        chance = skill_total - zone_skill_value + 5
        roll = random.randint(1, 100)

        # Hook chance.
        success = skill_total >= zone_skill_value and chance >= roll
        if not success:
            return False

        # Skill gain chance.
        gain_chance = 100 if skill.value < 75 else 2500 / (skill.value - 50)
        if gain_chance <= 0:
            return False

        self.set_skill(SkillTypes.FISHING, skill.value + 1)
        self.build_update()
        return True
Esempio n. 2
0
 def send_online_notification(self):
     have_me_as_friend = RealmDatabaseManager.character_get_friends_of(self.owner.guid)
     for friend in have_me_as_friend:
         player_mgr = WorldSessionStateHandler.find_player_by_guid(friend.guid)
         if player_mgr and not player_mgr.friends_manager.has_ignore(self.owner.guid):
             data = pack(
                 '<BQB3I',
                 FriendResults.FRIEND_ONLINE,
                 self.owner.guid,
                 1,  # Online
                 MapManager.get_parent_zone_id(self.owner.zone, self.owner.map_),
                 self.owner.level,
                 self.owner.player.class_
             )
             packet = PacketWriter.get_packet(OpCode.SMSG_FRIEND_STATUS, data)
             player_mgr.session.enqueue_packet(packet)
             player_mgr.friends_manager.send_friends()
Esempio n. 3
0
    def add_friend(self, player_guid):
        if player_guid not in self.friends:
            self.friends[player_guid] = self._create_friend(player_guid)
            player_mgr = WorldSessionStateHandler.find_player_by_guid(player_guid)
            RealmDatabaseManager.character_add_friend(self.friends[player_guid])
            status = FriendResults.FRIEND_ADDED_ONLINE if player_mgr else FriendResults.FRIEND_ADDED_OFFLINE
            data = pack('<BQ', status, player_guid)

            if player_mgr and player_mgr.online:  # Player is online.
                data += pack(
                    '<B3I',
                    1,  # Online
                    MapManager.get_parent_zone_id(player_mgr.zone, player_mgr.map_),
                    player_mgr.level,
                    player_mgr.player.class_
                )
            self.owner.session.enqueue_packet(PacketWriter.get_packet(OpCode.SMSG_FRIEND_STATUS, data))
            self.send_friends()
Esempio n. 4
0
    def send_friends(self):
        friends_list = [f for f in self.friends.values() if not f.ignore]
        data = pack('<B', len(friends_list))

        for entry in friends_list:
            player_mgr = WorldSessionStateHandler.find_player_by_guid(entry.friend)
            if player_mgr and player_mgr.online:
                self.owner.session.enqueue_packet(NameQueryHandler.get_query_details(player_mgr.player))
                data += pack(
                    '<QB3I',
                    player_mgr.guid,
                    1,  # Online
                    MapManager.get_parent_zone_id(player_mgr.zone, player_mgr.map_),
                    player_mgr.level,
                    player_mgr.player.class_
                )
            else:
                data += pack('QB', entry.friend, 0)  # Offline

        packet = PacketWriter.get_packet(OpCode.SMSG_FRIEND_LIST, data)
        self.owner.session.enqueue_packet(packet)