home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Revista CD Expert 51
/
PCGamer51_17Demos.iso
/
games
/
CM
/
CyclingManagerDemoCangas.exe
/
CyclingManagerDemo
/
scripts
/
common
/
multiplayer
/
page_multi.cnc
< prev
next >
Wrap
Text File
|
2001-07-02
|
20KB
|
533 lines
func void ConfirmOnlineDelete_MessageBoxCallback(i32x _iResult)
{
if(_iResult == g_iTypeOkDialog)
{
var i32x iSlotID;
// Selected team
iSlotID = oPage_MultiPlayer.m_iSelectedSlotId;
DeleteOnlineSlot(iSlotID);
}
}
func void DeleteOnlineSlot(i32x _iSlotID)
{
var i32x iTableSlot;
iTableSlot = Table_GetIndexFromName(DATABASE_LOCAL,"GAM_slot_multi");
// delete row in database
Table_DeleteRowFromKey(DATABASE_LOCAL,iTableSlot,_iSlotID);
Table_Update(DATABASE_LOCAL,iTableSlot);
Table_Sort(DATABASE_LOCAL,"GAM_slot_multi","gene_i_date",-1);
}
func i32x iCreateNewOnlineGame(i32x _iGameMode,szx _szGameName,szx _szGamePassword)
{
var szx szDatabase;
var i32x iTableSlot,iNewRow,iSlotId;
// add row in database
iTableSlot = Table_GetIndexFromName(DATABASE_LOCAL,"GAM_slot_multi");
iNewRow = Table_AddRow(DATABASE_LOCAL,iTableSlot);
iSlotId = Join_GetIntFromIndex( g_oLocalJoins.m_iMSlot_iId, iNewRow);
szDatabase = strcat("Multi_",itoa(iSlotId));
Join_SetIntFromIndex(g_oLocalJoins.m_iMSlot_iGameMode,iNewRow,_iGameMode);
Join_SetIntFromIndex(g_oLocalJoins.m_iMSlot_bFirstLaunch,iNewRow,1);
Join_SetStringFromIndex(g_oLocalJoins.m_iMSlot_szDatabase,iNewRow,szDatabase);
Join_SetStringFromIndex(g_oLocalJoins.m_iMSlot_szName,iNewRow,_szGameName);
Join_SetStringFromIndex(g_oLocalJoins.m_iMSlot_szPass,iNewRow,_szGamePassword);
Join_SetIntFromIndex(g_oLocalJoins.m_iMSlot_iDate,iNewRow,GetLocalTime());
Join_SetIntFromIndex(g_oLocalJoins.m_iMSlot_bGameOver,iNewRow,0);
Table_Update(DATABASE_LOCAL,iTableSlot);
return iSlotId;
}
func void fnCreateMultiplayer(i32x _iSlotId,i32x _iStartingDay)
{
var szx szDatabase,szName,szPassword;
var i32x bFirstLaunch;
// create waiting dialog
CreateDialog(DIALOG_LOADING_DATA);
// Database dest name
szDatabase = Join_GetStringFromKey(g_oLocalJoins.m_iMSlot_szDatabase,_iSlotId);
szDatabase = strcat("Database/",szDatabase);
szDatabase = strcat(szDatabase,".cdb");
// First launch
bFirstLaunch = Join_GetIntFromKey(g_oLocalJoins.m_iMSlot_bFirstLaunch,_iSlotId);
Join_SetIntFromKey(g_oLocalJoins.m_iMSlot_bFirstLaunch,_iSlotId,0);
// Game mode
g_oGameConfig.m_iGameMode = Join_GetIntFromKey(g_oLocalJoins.m_iMSlot_iGameMode,_iSlotId);
// Game Name
szName = Join_GetStringFromKey(g_oLocalJoins.m_iMSlot_szName,_iSlotId);
szPassword = Join_GetStringFromKey(g_oLocalJoins.m_iMSlot_szPass,_iSlotId);
print("create menu server\n");
print("ip:");print(g_oLobby.m_szIP);print(" port:");println(itoa(g_oLobby.m_iGamePort));
print("name:");print(szName);print("password:");println(szPassword);
print("admin:");print(g_oUser.m_szLogin);print(" password:");println(g_oUser.m_szPass);
print("database:");println(szDatabase);
// create menu server
CreateMenuServer(
g_oLobby.m_szIP,g_oLobby.m_iGamePort,
szName, szPassword,
g_oUser.m_szLogin,g_oUser.m_szPass,
bFirstLaunch, "Database/Database.cdb", g_oGameConfig.m_iGameMode, _iStartingDay,
szDatabase
);
if (g_oGameConfig.m_iInternet==0)
{
// ** lan **
fnLanBroadcast_CreateReceiver();
}
// Online mode
g_oGameConfig.m_iSinglePlayer = 0;
// Valid slot
g_oUser.m_iCurrentSlotId = _iSlotId;
}
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
//PageServers Window Create func
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
func void Page_MultiPlayer_Create ()
{
var i32x id;
var i32x iNumServers;
g_oGameConfig.m_iSinglePlayer = 0;
// ** Lan **
// default login = machine name
if (g_oGameConfig.m_iInternet==0)
{
g_oUser.m_szLogin = Join_GetStringFromIndex(g_oLocalJoins.m_iUser_szName,0);
if (strcmp(g_oUser.m_szLogin,"0")==0)
{
g_oUser.m_szLogin = GetHostName();
Join_SetStringFromIndex(g_oLocalJoins.m_iUser_szName,0,g_oUser.m_szLogin);
}
}
// Get current context
oPage_MultiPlayer.pthis = GetParserComponent();
// destroy loading dialog if found (return from bad login)
if (oManager.iDialogID == DIALOG_LOADING_DATA)
{
DestroyDialog();
}
// reset net flags
g_oInRaceServer.m_iCanStartRace = 0;
// destroy menu if found
HideMenuPrincipal();
// *** Update Title Bar ***
Set_Title_Bar_Text(GetLocalizedFromGMKey(361)); // page title
SetComponentNumber(25);
// multi player frame
id = Init_LibObject_FilledCadre(tCadreDialbox,700,550);
// new game
oPage_MultiPlayer.c_new_multi_game = Init_LibObject_MultiRadioButtonWithText(tButton32Multi,10,GetLocalizedFromGMKey(372),tFontArial,1441);
SetTextButtonStateFunc(oPage_MultiPlayer.c_new_multi_game,CheckBoxMultiState,MultiRadioButtonWithText_TextState);
SetComponentPosition(oPage_MultiPlayer.c_new_multi_game, 5, 40);
// load game
oPage_MultiPlayer.c_load_multi_game = Init_LibObject_MultiRadioButtonWithText(tButton32Multi,10,GetLocalizedFromGMKey(446),tFontArial,1445);
SetTextButtonStateFunc(oPage_MultiPlayer.c_load_multi_game,CheckBoxMultiState,MultiRadioButtonWithText_TextState);
SetComponentPosition(oPage_MultiPlayer.c_load_multi_game, 220, 40);
// join game (lan only)
if (g_oGameConfig.m_iInternet==0)
{
oPage_MultiPlayer.c_join_multi_game = Init_LibObject_MultiRadioButtonWithText(tButton32Multi,10,GetLocalizedFromGMKey(373),tFontArial,1457);
SetTextButtonStateFunc(oPage_MultiPlayer.c_join_multi_game,CheckBoxMultiState,MultiRadioButtonWithText_TextState);
SetComponentPosition(oPage_MultiPlayer.c_join_multi_game, 455, 40);
}
// Horizontal line
id = InitContainer(tCommonTableBorder);
SetContainerSize(id,650,1);
SetComponentPosition(id,5,70);
oPage_MultiPlayer.m_iConfirm = false;
Table_Sort(DATABASE_LOCAL,"GAM_slot_multi","gene_i_date",-1);
// Game mode object
oPage_MultiPlayer.m_cGameMode = InitObject(
"GameMode",
GameMode_Dialog_Create,
GameMode_Dialog_Event
);
SetComponentPosition(oPage_MultiPlayer.m_cGameMode,40,80);
// slot object
Slot_InitJoin(g_oLocalJoins.m_iMSlot_iId,g_oLocalJoins.m_iMSlot_iDate,g_oLocalJoins.m_iMSlot_iStageId,g_oLocalJoins.m_iMSlot_iGameMode,g_oLocalJoins.m_iMSlot_bGameOver);
oPage_MultiPlayer.m_cSlotlist = InitObject(
"GameSlot",
Object_GameSlot_Create,
Object_GameSlot_Event
);
SetStackEvents(oPage_MultiPlayer.m_cGameMode,GUI_Destroy);
SetComponentPosition(oPage_MultiPlayer.m_cSlotlist,55,150-15);
// Game server object
oPage_MultiPlayer.m_cGamelist = InitObject(
"GameList",
Object_GameServerListbox_Create,
Object_GameServerListbox_Event
);
SetComponentPosition(oPage_MultiPlayer.m_cGamelist,55,150-15);
// Launch buttons
oPage_MultiPlayer.m_cCreate = InitLibMultiSpriteButtonWithText(tButton32Multi,8,GetLocalizedFromGMKey(367),tFontArial,0);
SetComponentPosition(oPage_MultiPlayer.m_cCreate,325-GetComponentWidth(oPage_MultiPlayer.m_cCreate)/2,480);
oPage_MultiPlayer.m_cLoad = InitLibMultiSpriteButtonWithText(tButton32Multi,8,GetLocalizedFromGMKey(368),tFontArial,0);
SetComponentPosition(oPage_MultiPlayer.m_cLoad,325-GetComponentWidth(oPage_MultiPlayer.m_cLoad)/2,480);
oPage_MultiPlayer.m_cDelete = InitLibMultiSpriteButtonWithText(tButton32Multi,7,GetLocalizedFromGMKey(416),tFontArial,1508);
SetComponentPosition(oPage_MultiPlayer.m_cDelete,650-GetComponentWidth(oPage_MultiPlayer.m_cDelete),480);
oPage_MultiPlayer.m_cJoin = InitLibMultiSpriteButtonWithText(tButton32Multi,8,GetLocalizedFromGMKey(376),tFontArial,0);
SetComponentPosition(oPage_MultiPlayer.m_cJoin,325-GetComponentWidth(oPage_MultiPlayer.m_cJoin)/2,480);
oPage_MultiPlayer.m_cRefresh = InitLibMultiSpriteButtonWithText(tButton32Multi,7,GetLocalizedFromGMKey(436),tFontArial,0);
SetComponentPosition(oPage_MultiPlayer.m_cRefresh,650-GetComponentWidth(oPage_MultiPlayer.m_cRefresh ),480);
/*
oPage_MultiPlayer.m_cGateway = InitLibMultiSpriteButtonWithText(tButton32Multi,6,GetLocalizedFromGMKey(293),tFontArial,0);
SetComponentPosition(oPage_MultiPlayer.m_cGateway,5,480);
*/
// Default game selection : new
oPage_MultiPlayer.m_iSelectedSlotId = -1;
oPage_MultiPlayer.m_iMode = 0;
SetTextRadioButtonCheckBox(oPage_MultiPlayer.c_new_multi_game,true);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cSlotlist,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cLoad,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cDelete,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cGamelist,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cJoin,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cRefresh,false);
DisplayMenuPrincipal();
SetObjectSize(700,525);
}
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
//PageServers Window Event func
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
func i32x Page_MultiPlayer_Event (i32x _iComponentID,i32x _iEvent)
{
if(_iEvent == GUI_RADIOBUTTON_CHANGED)
{
PlaySound(0,sbClickSound[0]);
if (_iComponentID == oPage_MultiPlayer.c_new_multi_game)
{
// Select new game onglet
oPage_MultiPlayer.m_iMode = 0;
SetTextRadioButtonCheckBox(oPage_MultiPlayer.c_load_multi_game,false);
if (g_oGameConfig.m_iInternet==0)
{
SetTextRadioButtonCheckBox(oPage_MultiPlayer.c_join_multi_game,false);
}
// Hide game list
SetComponentVisibleStatus(oPage_MultiPlayer.m_cGamelist,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cJoin,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cRefresh,false);
// Hide slot
SetComponentVisibleStatus(oPage_MultiPlayer.m_cSlotlist,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cLoad,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cDelete,false);
// show game mode
SetComponentVisibleStatus(oPage_MultiPlayer.m_cGameMode,true);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cCreate,true);
}
else if(_iComponentID == oPage_MultiPlayer.c_load_multi_game)
{
// Select load game onglet
oPage_MultiPlayer.m_iMode = 1;
SetTextRadioButtonCheckBox(oPage_MultiPlayer.c_new_multi_game,false);
if (g_oGameConfig.m_iInternet==0)
{
SetTextRadioButtonCheckBox(oPage_MultiPlayer.c_join_multi_game,false);
}
// Hide game list
SetComponentVisibleStatus(oPage_MultiPlayer.m_cGamelist,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cJoin,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cRefresh,false);
// show slot
SetComponentVisibleStatus(oPage_MultiPlayer.m_cSlotlist,true);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cLoad,true);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cDelete,true);
// hide game mode
SetComponentVisibleStatus(oPage_MultiPlayer.m_cGameMode,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cCreate,false);
}
else if ((_iComponentID == oPage_MultiPlayer.c_join_multi_game) && (g_oGameConfig.m_iInternet==0))
{
// Select Join game onglet
oPage_MultiPlayer.m_iMode = 2;
SetTextRadioButtonCheckBox(oPage_MultiPlayer.c_load_multi_game,false);
SetTextRadioButtonCheckBox(oPage_MultiPlayer.c_new_multi_game,false);
// Show game list
SetComponentVisibleStatus(oPage_MultiPlayer.m_cGamelist,true);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cJoin,true);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cRefresh,true);
// hide slot
SetComponentVisibleStatus(oPage_MultiPlayer.m_cSlotlist,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cLoad,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cDelete,false);
// hide game mode
SetComponentVisibleStatus(oPage_MultiPlayer.m_cGameMode,false);
SetComponentVisibleStatus(oPage_MultiPlayer.m_cCreate,false);
}
}
else if(_iEvent == GUI_BUTTON_PRESSED)
{
PlaySound(0,sbClickSound[0]);
if(_iComponentID == oPage_MultiPlayer.m_cGateway)
{
CreateDialog(DIALOG_LOGIN);
}
else if(_iComponentID == oPage_MultiPlayer.m_cCreate)
{
// create game
// Create a new slot
var i32x iSlotId;
iSlotId = iCreateNewOnlineGame(oGameMode_Dialog.m_iSelectedGameMode,g_oUser.m_szLogin,"");
fnCreateMultiplayer(iSlotId,oGameMode_Dialog.m_iSelectedStartingDay);
}
else if(_iComponentID == oPage_MultiPlayer.m_cLoad)
{
// load game
oPage_MultiPlayer.m_iSelectedSlotId = oObject_GameSlot.m_iSelectedSlotId;
if(oPage_MultiPlayer.m_iSelectedSlotId>0)
{
// starting day is no more valid
fnCreateMultiplayer(oPage_MultiPlayer.m_iSelectedSlotId,0);
}
}
else if(_iComponentID == oPage_MultiPlayer.m_cJoin)
{
if(oObject_GameServerListbox.m_iSelectedServer>=0)
{
// No save slot
g_oUser.m_iCurrentSlotId = 0;
// Join server
if (Join_GetIntFromKey(g_oGatewayJoins.bHasPassword, oObject_GameServerListbox.m_iSelectedServer)==0)
{
// no password
if (g_oGameConfig.m_iInternet)
{
// ** internet **
fnInternetLogin(Join_GetStringFromKey(g_oGatewayJoins.m_iGame_szDescJoin,oObject_GameServerListbox.m_iSelectedServer),"");
}
else
{
// ** lan **
g_oLobby.m_szIP = Join_GetStringFromKey( g_oGatewayJoins.szIP, oObject_GameServerListbox.m_iSelectedServer);
g_oLobby.m_iGamePort = Join_GetIntFromKey( g_oGatewayJoins.iPort, oObject_GameServerListbox.m_iSelectedServer);
g_oLobby.m_oServer = NetClient_Create( g_oLobby.m_szIP, g_oLobby.m_iGamePort, GatewayInterface, fnGatewaySimpleConnectCB, fnGatewayDisconnectCB);
}
}
else
{
// password
Dialog_Game_Param_Default(0,oObject_GameServerListbox.m_iSelectedServer,Join_GetStringFromKey(g_oGatewayJoins.m_iGame_szDescJoin,oObject_GameServerListbox.m_iSelectedServer),"");
CreateDialog(DIALOG_GAME_PARAM);
}
}
}
else if(_iComponentID == oPage_MultiPlayer.m_cDelete)
{
oPage_MultiPlayer.m_iSelectedSlotId = oObject_GameSlot.m_iSelectedSlotId;
if(oPage_MultiPlayer.m_iSelectedSlotId>0)
{
oPage_MultiPlayer.m_iConfirm = true;
CreateMessageBox(GetLocalizedFromGMKey(418), 1, ConfirmOnlineDelete_MessageBoxCallback);
}
}
else if(_iComponentID == oPage_MultiPlayer.m_cRefresh)
{
// ** lan **
fnLanBroadcast();
}
}
else if(_iEvent == GUI_DBLCLICK_MULTIEXIST)
{
if(oObject_GameServerListbox.m_iSelectedServer>=0)
{
// No save slot
g_oUser.m_iCurrentSlotId = 0;
// Join server
if (Join_GetIntFromKey(g_oGatewayJoins.bHasPassword, oObject_GameServerListbox.m_iSelectedServer)==0)
{
// no password
if (g_oGameConfig.m_iInternet)
{
// ** internet **
fnInternetLogin(Join_GetStringFromKey(g_oGatewayJoins.m_iGame_szDescJoin,oObject_GameServerListbox.m_iSelectedServer),"");
}
else
{
// ** lan **
g_oLobby.m_szIP = Join_GetStringFromKey( g_oGatewayJoins.szIP, oObject_GameServerListbox.m_iSelectedServer);
g_oLobby.m_iGamePort = Join_GetIntFromKey( g_oGatewayJoins.iPort, oObject_GameServerListbox.m_iSelectedServer);
g_oLobby.m_oServer = NetClient_Create( g_oLobby.m_szIP, g_oLobby.m_iGamePort, GatewayInterface, fnGatewaySimpleConnectCB, fnGatewayDisconnectCB);
}
}
else
{
// password
Dialog_Game_Param_Default(0,oObject_GameServerListbox.m_iSelectedServer,Join_GetStringFromKey(g_oGatewayJoins.m_iGame_szDescJoin,oObject_GameServerListbox.m_iSelectedServer),"");
CreateDialog(DIALOG_GAME_PARAM);
}
}
}
else if((_iEvent == GUI_DBLCLICK_STAGE)||(_iEvent == GUI_DBLCLICK_TOUR))
{
// create game
// Create a new slot
var i32x iSlotId;
iSlotId = iCreateNewOnlineGame(oGameMode_Dialog.m_iSelectedGameMode,g_oUser.m_szLogin,"");
fnCreateMultiplayer(iSlotId,oGameMode_Dialog.m_iSelectedStartingDay);
}
else if(_iEvent == GUI_DBLCLICK_SAVE)
{
// load game
oPage_MultiPlayer.m_iSelectedSlotId = oObject_GameSlot.m_iSelectedSlotId;
if(oPage_MultiPlayer.m_iSelectedSlotId>0)
{
// starting day is no more valid
fnCreateMultiplayer(oPage_MultiPlayer.m_iSelectedSlotId,0);
}
}
else if(_iEvent == GUI_DIALOG_RETURN)
{
if(oPage_MultiPlayer.m_iConfirm == true)
{
// Return from delete dialbox
PushEventOnChild(oPage_MultiPlayer.m_cSlotlist,GUI_COMPONENT_REFRESH);
oPage_MultiPlayer.m_iConfirm = false;
}
}
return 1;
}
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
//Constructor
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
func i32x Page_MultiPlayer_Constructor ()
{
oPage_MultiPlayer.m_iSelectedServerIndex = 0;
// At this point we are not logued on a game
g_oGameConfig.m_iLogued = false;
// create page
oPage_MultiPlayer.iWindowID = InitObject("PageServers",oPage_MultiPlayer.oFunc.pcreate,oPage_MultiPlayer.oFunc.pevent);
SetStackEvents(oPage_MultiPlayer.iWindowID,GUI_Mouse|GUI_Key);
if (g_oGameConfig.m_iInternet==0)
{
// ** lan **
fnLanBroadcast();
}
else
{
/*
// If already connected
if(g_oLobby.m_oServer)
{
// disconnect from gateway to allow new login
NetClient_Disconnect(g_oLobby.m_oServer);
}
// connect to gateway
g_oLobby.m_oServer = NetClient_Create( g_oLobby.m_szIP, g_oLobby.m_iUserPort, GatewayInterface, fnGatewayConnectCB, fnGatewayDisconnectCB);
*/
// connecting to internet game
if (g_oGameConfig.m_iInternetServer==0)
{
// ** internet **
CreateDialog(DIALOG_LOADING_DATA);
// waiting dialog
// MistER-j WARNING LOCALIZED
Dialog_Loading_Data_SetText("Connecting to game");
// connect to game
g_oMenuServer.m_oServer = NetClient_Create(
g_oMenuServer.m_szIP,
g_oMenuServer.m_iPort,
iClientLogin,
MenuServerConnectCB,
MenuServerDisconnectCB);
}
}
return oPage_MultiPlayer.iWindowID;
}
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
//Destructor
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
func void Page_MultiPlayer_Destructor ()
{
// delete page
DeleteComponent(oPage_MultiPlayer.iWindowID);
}
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
//Page Multiplayer Window Init member
//----------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------//
func void Page_MultiPlayer_InitMembers ()
{
oPage_MultiPlayer.oFunc.pcreate = Page_MultiPlayer_Create;
oPage_MultiPlayer.oFunc.pevent = Page_MultiPlayer_Event;
}