Files
SLikeNet/Samples/RoomsBrowserGFx3/Resources/Lobby.as
2025-11-24 14:19:51 +05:30

347 lines
12 KiB
ActionScript

import flash.external.*;
updateButton.addEventListener("click", this, "UpdateRoomsList");
function UpdateRoomsList()
{
var isNetUpdate:Boolean = netRadioButton.selected;
lobbyRoomsScrollingList.dataProvider=[];
ExternalInterface.call("f2c_UpdateRoomsList", isNetUpdate);
// If the platform requires friends in the scaleform UI, this will update it.
ExternalInterface.call("f2c_QueryPlatform","c2f_QueryPlatform_Lobby_Callback");
}
netRadioButton.addEventListener("click", this, "UpdateRoomsList");
lanRadioButton.addEventListener("click", this, "UpdateRoomsList");
joinRoomButton.addEventListener("click", this, "JoinRoom");
function JoinRoom()
{
// 0th element is the unique room id, used as a search flag for when joining a room
// How do I tell if lobbyRoomsScrollingList has a selection active?
ExternalInterface.call("f2c_JoinByFilter",
Boolean(lobbyRoomsScrollingList.dataProvider[lobbyRoomsScrollingList.selectedIndex][0]), // isFromNetwork
Number(lobbyRoomsScrollingList.dataProvider[lobbyRoomsScrollingList.selectedIndex][1]), // guid
String(lobbyRoomsScrollingList.dataProvider[lobbyRoomsScrollingList.selectedIndex][2]) // IP address
);
}
ExternalInterface.addCallback("c2f_JoinByFilter", this, c2f_JoinByFilter);
function c2f_JoinByFilter( resultCode:String ):Void
{
if (resultCode=="REC_SUCCESS")
gotoAndStop("inRoom");
else
{
trace("c2f_JoinByFilter failure. Result= " + resultCode);
/*
REC_JOIN_BY_FILTER_UNKNOWN_TITLE,
REC_JOIN_BY_FILTER_NO_ROOMS,
REC_JOIN_BY_FILTER_CURRENTLY_IN_A_ROOM,
REC_JOIN_BY_FILTER_CURRENTLY_IN_QUICK_JOIN,
REC_JOIN_BY_FILTER_CANNOT_JOIN_AS_MODERATOR,
REC_JOIN_BY_FILTER_ROOM_LOCKED,
REC_JOIN_BY_FILTER_BANNED,
REC_JOIN_BY_FILTER_NO_SLOTS,
*/
}
}
createRoomButton.addEventListener("click", this, "CreateRoom");
function CreateRoom()
{
gotoAndStop("CreateRoom");
}
manageFriendsButton.addEventListener("click", this, "ManageFriends");
function ManageFriends()
{
gotoAndStop("ManageFriends_PC");
}
logoffButton.addEventListener("click", this, "Logoff");
function Logoff()
{
ExternalInterface.call("f2c_Logoff");
}
chatTextInput.addEventListener("textChange", this, "UpdateSendButton");
chatRecipient.addEventListener("textChange", this, "UpdateSendButton");
function UpdateSendButton()
{
if (chatTextInput.text.length>0 && chatRecipient.text.length>0)
sendChatButton.enabled=true;
else
sendChatButton.enabled=false;
}
sendChatButton.addEventListener("click", this, "Chat_Func");
function Chat_Func()
{
if (chatTextInput.text.length>0 && chatRecipient.text.length>0)
{
ExternalInterface.call("f2c_Directed_Chat_Func", chatRecipient.text, chatTextInput.text);
}
}
ExternalInterface.addCallback("c2f_Chat_Callback", this, c2f_Chat_Callback);
function c2f_Chat_Callback(resultCode:String, chatRecipient:String, chatTextInput:String):Void
{
if (resultCode=="REC_SUCCESS")
{
chatTextArea.text+=chatRecipient + " >> " + chatTextInput + "\n";
}
else
{
trace("c2f_Chat_Callback failure. Result= " + resultCode + " when sent to " + chatRecipient);
/*
REC_CHAT_USER_NOT_IN_ROOM,
REC_CHAT_RECIPIENT_NOT_ONLINE,
REC_CHAT_RECIPIENT_NOT_IN_ANY_ROOM,
REC_CHAT_RECIPIENT_NOT_IN_YOUR_ROOM,
*/
}
}
ExternalInterface.addCallback("c2f_Chat_Notification", this, c2f_Chat_Notification);
function c2f_Chat_Notification(sender:String, chatRecipient:String, chatTextInput:String, profanityFilteredTextInput:String ):Void
{
chatTextArea.text+=sender + " << " + chatTextInput + "\n";
}
ExternalInterface.addCallback("c2f_Client_Logoff", this, c2f_Client_Logoff);
function c2f_Client_Logoff(resultCode:String):Void
{
gotoAndStop("Main");
}
function UpdateFriendsList()
{
lobbyFriendsScrollingList.dataProvider=[];
ExternalInterface.call("f2c_UpdateFriendsList");
}
function c2f_QueryPlatform_Lobby_Callback(platform:String):Void
{
if (platform=="RakNet")
{
UpdateFriendsList();
}
else
{
// This stuff is handled thought internal menus on the XBOX 360 and PS3
friendsStatusLabel.visible=false;
lobbyFriendsScrollingList.visible=false;
lobbyFriendsScrollBar.visible=false;
manageFriendsButton.visible=false;
chatTextArea.visible=false;
sendChatButton.visible=false;
chatLabel1.visible=false;
chatLabel2.visible=false;
chatRecipient.visible=false;
chatTextInput.visible=false;
chatScrollBar.visible=false;
// Only NET on the XBOX 360 and PS3
netRadioButton.visible=false;
lanRadioButton.visible=false;
}
}
ExternalInterface.addCallback("c2f_AddSingleRoom", this, c2f_AddSingleRoom);
function c2f_AddSingleRoom():Void
{
var roomIsFromServer = arguments[0];
var roomId:Number = arguments[1];
var ipAddrAndPort:String = arguments[2];
var roomName:String = arguments[3];
var numRoomMembers:Number = arguments[4];
var maxRoomMembers:Number = arguments[5];
var mapName:String = arguments[6];
lobbyRoomsScrollingList.dataProvider.push([roomIsFromServer,roomId,ipAddrAndPort,roomName,numRoomMembers,maxRoomMembers,mapName]);
lobbyRoomsScrollingList.dataProvider.invalidate();
}
ExternalInterface.addCallback("c2f_SearchByFilter_Callback", this, c2f_SearchByFilter_Callback);
function c2f_SearchByFilter_Callback():Void
{
// push statements below do not work unless I clear the list first. I don't know why though.
lobbyRoomsScrollingList.dataProvider=[];
var resultCode:String = arguments[0];
if (resultCode=="REC_SUCCESS")
{
var num:Number = arguments[1];
var startingIdx:Number=2;
for (var i:Number = 0; i < num; i++)
{
var roomIsFromServer = arguments[startingIdx+i*7+0];
var roomId:Number = arguments[startingIdx+i*7+1];
var ipAddrAndPort:String = arguments[startingIdx+i*7+2];
var roomName:String = arguments[startingIdx+i*7+3];
var numRoomMembers:Number = arguments[startingIdx+i*7+4];
var maxRoomMembers:Number = arguments[startingIdx+i*7+5];
var mapName:String = arguments[startingIdx+i*7+6];
lobbyRoomsScrollingList.dataProvider.push([roomIsFromServer,roomId,ipAddrAndPort,roomName,numRoomMembers,maxRoomMembers,mapName]);
lobbyRoomsScrollingList.dataProvider.invalidate();
}
}
else
{
// Unknown title (Programmer error).
trace(resultCode);
// REC_SEARCH_BY_FILTER_UNKNOWN_TITLE,
}
}
ExternalInterface.addCallback("c2f_Friends_GetInvites", this, c2f_Friends_GetInvites);
function c2f_Friends_GetInvites():Void
{
var resultCode:String = arguments[0];
if (resultCode=="L2RC_SUCCESS")
{
var num:Number = arguments[1];
var startingIdx:Number=2;
// Invites received
for (var i:Number = 0; i < num; i++)
{
// params are same as c2f_Friends_GetFriends
var handle:String = arguments[startingIdx+i*5+0];
var isOnline:Boolean = arguments[startingIdx+i*5+1];
var isVisible:Boolean = arguments[startingIdx+i*5+2];
var loggedInTitle:String = arguments[startingIdx+i*5+3];
var status:String = arguments[startingIdx+i*5+4];
lobbyFriendsScrollingList.dataProvider.push(["Got invitation", handle,isOnline,isVisible,loggedInTitle,status]);
}
// Invites sent
startingIdx+=num*5;
num=arguments[startingIdx++];
for (var i:Number = 0; i < num; i++)
{
// params are same as c2f_Friends_GetFriends
var handle:String = arguments[startingIdx+i*5+0];
var isOnline:Boolean = arguments[startingIdx+i*5+1];
var isVisible:Boolean = arguments[startingIdx+i*5+2];
var loggedInTitle:String = arguments[startingIdx+i*5+3];
var status:String = arguments[startingIdx+i*5+4];
lobbyFriendsScrollingList.dataProvider.push(["Sent invitation", handle,isOnline,isVisible,loggedInTitle,status]);
}
lobbyFriendsScrollingList.dataProvider.invalidate();
}
else
{
// For RakNet, cannot fail
trace(resultCode);
}
}
ExternalInterface.addCallback("c2f_Friends_GetFriends", this, c2f_Friends_GetFriends);
function c2f_Friends_GetFriends():Void
{
var resultCode:String = arguments[0];
if (resultCode=="L2RC_SUCCESS")
{
var num:Number = arguments[1];
var startingIdx:Number=2;
for (var i:Number = 0; i < num; i++)
{
// params are same as c2f_Friends_GetInvites
var handle:String = arguments[startingIdx+i*5+0];
var isOnline:Boolean = arguments[startingIdx+i*5+1];
var isVisible:Boolean = arguments[startingIdx+i*5+2];
var loggedInTitle:String = arguments[startingIdx+i*5+3];
var status:String = arguments[startingIdx+i*5+4];
lobbyFriendsScrollingList.dataProvider.push(["Is a friend", handle,isOnline,isVisible,loggedInTitle,status]);
lobbyFriendsScrollingList.dataProvider.invalidate();
}
}
else
{
// For RakNet, cannot fail
trace(resultCode);
}
}
ExternalInterface.addCallback("c2f_Notification_Friends_PresenceUpdate", this, c2f_Notification_Friends_PresenceUpdate);
function c2f_Notification_Friends_PresenceUpdate(otherHandle:String, onlineStatusSetToVisible:Boolean, loggedInTitle:String, status:String):Void
{
trace("c2f_Notification_Friends_PresenceUpdate, " + otherHandle + ", " + onlineStatusSetToVisible + ", " + loggedInTitle + ", " + status);
// Update the friends list if the platform requires it
ExternalInterface.call("f2c_QueryPlatform","c2f_QueryPlatform_Lobby_Callback");
}
// LAN connection attempt failed
ExternalInterface.addCallback("c2f_NotifyFailedConnectionAttempt", this, c2f_NotifyFailedConnectionAttempt);
function c2f_NotifyFailedConnectionAttempt(resultCode:String, systemAddress:String):Void
{
// Result codes are:
// CONNECTION_ATTEMPT_FAILED
// ALREADY_CONNECTED
// NO_FREE_INCOMING_CONNECTIONS
// RSA_PUBLIC_KEY_MISMATCH
// CONNECTION_BANNED
// INVALID_PASSWORD
trace(resultCode);
gotoAndStop("Main");
}
ExternalInterface.addCallback("c2f_NotifyNewConnection", this, c2f_NotifyNewConnection);
function c2f_NotifyNewConnection(systemAddress:String, rakNetGuid:String, isIncoming:Boolean):Void
{
trace("c2f_NotifyNewConnection, " + systemAddress + ", " + rakNetGuid + ", " + isIncoming);
// Connecting at this stage must be through the LAN
gotoAndStop("InGame");
}
ExternalInterface.addCallback("c2f_Notification_Friends_StatusChange", this, c2f_Notification_Friends_StatusChange);
function c2f_Notification_Friends_StatusChange(operation:String, otherHandle:String, onlineStatusSetToVisible:Boolean, loggedInTitle:String, status:String):Void
{
// operation can be:
// FRIEND_LOGGED_IN,
// FRIEND_LOGGED_OFF,
// FRIEND_ACCOUNT_WAS_DELETED,
// YOU_WERE_REMOVED_AS_A_FRIEND,
// GOT_INVITATION_TO_BE_FRIENDS,
// THEY_ACCEPTED_OUR_INVITATION_TO_BE_FRIENDS,
// THEY_REJECTED_OUR_INVITATION_TO_BE_FRIENDS,
trace("c2f_Notification_Friends_StatusChange, " + operation + ", " + otherHandle + ", " + onlineStatusSetToVisible + ", " + loggedInTitle + ", " + status);
// If the platform requires friends in the scaleform UI, this will update it.
ExternalInterface.call("f2c_QueryPlatform","c2f_QueryPlatform_Lobby_Callback");
}
ExternalInterface.addCallback("c2f_RoomInvitationSent_Callback", this, c2f_RoomInvitationSent_Callback)
function c2f_RoomInvitationSent_Callback( invitorName:String, inviteToSpectatorSlot:Boolean ):Void
{
trace("You got a room invitation from " + invitorName);
}
ExternalInterface.addCallback("c2f_RoomInvitationWithdrawn_Callback", this, c2f_RoomInvitationWithdrawn_Callback)
function c2f_RoomInvitationWithdrawn_Callback( invitorName:String, invitorAddress:String ):Void
{
trace("Your room invitation was withdrawn from " + invitorName);
}
sendChatButton.enabled=false;
netRadioButton.selected=true;
UpdateRoomsList();
stop();