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
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()
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()
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)