mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 00:38:21 +00:00
82 lines
3.3 KiB
Ruby
82 lines
3.3 KiB
Ruby
require 'java'
|
|
|
|
java_import 'org.apollo.game.event.impl.FriendServerStatusEvent'
|
|
java_import 'org.apollo.game.event.impl.SendFriendEvent'
|
|
java_import 'org.apollo.game.model.Player'
|
|
java_import 'org.apollo.game.model.World'
|
|
java_import 'org.apollo.game.model.settings.ServerStatus'
|
|
java_import 'org.apollo.game.model.settings.PrivacyState'
|
|
|
|
|
|
# Processes an add friend event, updating the logged-in status of the player (and the person they added) if necessary.
|
|
on :event, :add_friend do |ctx, player, event|
|
|
friend_username = event.username
|
|
player_username = player.username
|
|
|
|
player.add_friend(friend_username)
|
|
friend = World.world.get_player(friend_username)
|
|
|
|
if (friend == nil) # the friend the player added is offline
|
|
player.send(SendFriendEvent.new(friend_username, 0))
|
|
elsif (friend.friends_with(player_username)) # new friend already has the player added
|
|
unless (player.friend_privacy == PrivacyState::OFF) # player's private chat state is not off
|
|
friend.send(SendFriendEvent.new(player_username, player.world_id)) # ... so we can tell the friend what world they're on
|
|
end
|
|
|
|
unless (friend.friend_privacy == PrivacyState::OFF) # new friend's private chat state is not off
|
|
player.send(SendFriendEvent.new(friend_username, friend.world_id)) # ... so we can let the player know what world they're on
|
|
end
|
|
elsif (friend.friend_privacy == PrivacyState::ON) # new friend doesn't have the player added but their private chat state is online
|
|
player.send(SendFriendEvent.new(friend_username, friend.world_id)) # ... so we can let the player know what world they're on
|
|
end
|
|
end
|
|
|
|
# Processes a remove friend event, updating the logged-in status of the player if necessary.
|
|
on :event, :remove_friend do |ctx, player, event|
|
|
friend_username = event.username
|
|
player_username = player.username
|
|
|
|
player.remove_friend(friend_username)
|
|
friend = World.world.get_player(friend_username)
|
|
next if friend == nil
|
|
|
|
friend.send(SendFriendEvent.new(player_username, 0)) if (friend.friends_with(player_username) && player.friend_privacy != PrivacyState::ON)
|
|
end
|
|
|
|
# Update the friend server status and send the friend/ignore lists of the player logging in.
|
|
on :login do |player|
|
|
player.send(FriendServerStatusEvent.new(ServerStatus::CONNECTING))
|
|
|
|
player.send(IgnoreListEvent.new(player.ignored_usernames)) if player.ignored_usernames.size > 0
|
|
|
|
world = World.world
|
|
iterator = player.friend_usernames.iterator
|
|
while iterator.has_next
|
|
username = iterator.next
|
|
world_id = world.is_player_online(username) ? world.get_player(username).world_id : 0;
|
|
player.send(SendFriendEvent.new(username, world_id))
|
|
end
|
|
|
|
player.send(FriendServerStatusEvent.new(ServerStatus::ONLINE))
|
|
update_friends(player, player.world_id)
|
|
end
|
|
|
|
on :logout do |player|
|
|
update_friends(player, 0)
|
|
end
|
|
|
|
|
|
# Notifies the currently logged in players that the specified player has logged into the specified world, unless the
|
|
# newly logged-in player has their friend privacy state set to 'off'.
|
|
def update_friends(player, world=0)
|
|
privacy = player.friend_privacy
|
|
|
|
iterator = World.world.player_repository.iterator
|
|
username = player.username
|
|
|
|
while iterator.has_next
|
|
other = iterator.next
|
|
next if other == player
|
|
other.send(SendFriendEvent.new(username, world)) if (player.friends_with(other.username) || player.private_chat_privacy == PrivacyState::ON)
|
|
end
|
|
end |