Create new top-level chat folder.

This commit is contained in:
Major-
2014-08-08 03:53:15 +01:00
parent 32aadfeaa4
commit 9469ebe297
6 changed files with 0 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0"?>
<plugin>
<id>chat-privacy</id>
<version>1</version>
<name>Chat privacy</name>
<description>Adds chat privacy support.</description>
<authors>
<author>Major</author>
</authors>
<scripts>
<script>privacy.rb</script>
</scripts>
<dependencies>
<dependency>private-messaging</dependency>
</dependencies>
</plugin>
+12
View File
@@ -0,0 +1,12 @@
require 'java'
java_import 'org.apollo.game.model.setting.PrivacyState'
java_import 'org.apollo.game.event.impl.SendFriendEvent'
on :event, :privacy_option do |ctx, player, event|
player.chat_privacy = event.chat_privacy
player.friend_privacy = event.friend_privacy
player.trade_privacy = event.trade_privacy
update_friends(player, event.friend_privacy == PrivacyState::OFF ? 0 : player.world_id)
end
@@ -0,0 +1,89 @@
require 'java'
java_import 'org.apollo.game.event.impl.FriendServerStatusEvent'
java_import 'org.apollo.game.event.impl.SendFriendEvent'
java_import 'org.apollo.game.model.World'
java_import 'org.apollo.game.model.setting.ServerStatus'
java_import 'org.apollo.game.model.setting.PrivacyState'
java_import 'org.apollo.game.model.entity.Player'
# 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
friend.send(SendFriendEvent.new(player_username, player.world_id)) unless player.friend_privacy == PrivacyState::OFF # player's private chat state is not off, so notify the friend
player.send(SendFriendEvent.new(friend_username, friend.world_id)) unless friend.friend_privacy == PrivacyState::OFF # new friend's private chat state is not off, so notify the player
elsif friend.friend_privacy == PrivacyState::ON # new friend doesn't have the player added but their private chat state is on
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)
if (World.world.is_player_online(friend_username))
friend = World.world.get_player(friend_username)
friend.send(SendFriendEvent.new(player_username, 0)) if (friend.friends_with(player_username) && player.friend_privacy != PrivacyState::ON)
end
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
username = player.username
world = World.world
iterator = player.friend_usernames.iterator # Iterate the player's friend list and notify the player that they are online if they are
while iterator.has_next
friend_username = iterator.next
friend = world.get_player(friend_username)
friend_world_id = (friend == nil || !viewable?(friend, username)) ? 0 : friend.world_id
player.send(SendFriendEvent.new(friend_username, friend_world_id))
end
player.send(FriendServerStatusEvent.new(ServerStatus::ONLINE))
update_friends(player, player.world_id)
end
# Notifies the player's friends that the player has logged out.
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.friends_with(username) || other == player)
world = viewable?(player, other.username) ? world : 0
other.send(SendFriendEvent.new(username, world))
end
end
# Checks if the specified player can be viewed by the player with the specified other username
def viewable?(player, other_username)
privacy = player.friend_privacy
return privacy != PrivacyState::OFF && player.friends_with(other_username) || privacy == PrivacyState::ON
end
@@ -0,0 +1,9 @@
on :event, :add_ignore do |ctx, player, event|
username = event.username
player.add_ignore(username)
end
on :event, :remove_ignore do |ctx, player, event|
username = event.username
player.remove_ignore(username)
end
@@ -0,0 +1,19 @@
require 'java'
java_import 'org.apollo.game.event.impl.ForwardPrivateMessageEvent'
java_import 'org.apollo.game.model.World'
java_import 'org.apollo.game.model.setting.PrivacyState'
on :event, :private_message do |ctx, player, event|
friend = World.world.get_player(event.username)
friend.send(ForwardPrivateMessageEvent.new(player.username, player.privilege_level, event.compressed_message)) if interaction_permitted(player, friend)
end
# Checks if the sender is permitted to interact with the friend they have added:
def interaction_permitted(sender, friend)
if friend == nil || friend.has_ignored(sender.username)
return false
end
return friend.friends_with(sender.username) ? friend.friend_privacy != PrivacyState::OFF : friend.friend_privacy == PrivacyState::ON
end
@@ -0,0 +1,16 @@
<?xml version="1.0"?>
<plugin>
<id>private-messaging</id>
<version>1</version>
<name>Private Messaging</name>
<description>Adds friend and ignore list support, and private messaging.</description>
<authors>
<author>Major</author>
</authors>
<scripts>
<script>friend.rb</script>
<script>ignore.rb</script>
<script>messaging.rb</script>
</scripts>
<dependencies />
</plugin>