USING "arcade_cabinet_minigame_common.sch" USING "arcade_games_sound.sch" USING "arcade_games_help_text.sch" USING "camhedz_arcade_using.sch" // ------------------------------ LEADERBOARD ------------------------------ CONST_INT ciARCADE_GAMES_LBD_DEFAULT_RANK 99 CONST_INT ciARCADE_GAMES_RESEND_LEADERBOARD_REQUEST_TIME 5000 //ARCADE_GAMES_LEADERBOARD_DATA lbData FUNC CASINO_ARCADE_GAME ARCADE_GAMES_LEADERBOARD_GET_CASINO_ARCADE_GAME() RETURN CASINO_ARCADE_GAME_Camhedz ENDFUNC //FUNC STRING ARCADE_GAMES_GAME_NAME_TO_STRING(CASINO_ARCADE_GAME eEnum) // RETURN "Badlands Revenge II" //ENDFUNC FUNC STRING ARCADE_GAMES_LEADERBOARD_GET_TITLE_TEXTURE_NAME() RETURN "CAMHEDZ_TITLE_SCREEN_LEADERBOARDS_BUTTON" ENDFUNC FUNC VECTOR_2D ARCADE_GAMES_LEADERBOARD_GET_TITLE_TEXTURE_POSITION() RETURN INIT_VECTOR_2D(960.0,200.0) ENDFUNC FUNC VECTOR_2D ARCADE_GAMES_LEADERBOARD_GET_TITLE_TEXTURE_SIZE() RETURN INIT_VECTOR_2D(276, 48) ENDFUNC FUNC VECTOR_2D ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SIZE() RETURN INIT_VECTOR_2D(24, 48) ENDFUNC FUNC VECTOR_2D ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SEPARATION() RETURN INIT_VECTOR_2D(24, 48*1.1) ENDFUNC FUNC VECTOR_2D ARCADE_GAMES_LEADERBOARD_GET_RANK_COLUMN_POSITION() RETURN INIT_VECTOR_2D(600.0,350.0) ENDFUNC FUNC VECTOR_2D ARCADE_GAMES_LEADERBOARD_GET_INITIALS_COLUMN_POSITION() RETURN INIT_VECTOR_2D(750.0,350.0) ENDFUNC FUNC VECTOR_2D ARCADE_GAMES_LEADERBOARD_GET_SCORE_COLUMN_POSITION() RETURN INIT_VECTOR_2D(1220.0,350.0) ENDFUNC FUNC RGBA_COLOUR_STRUCT ARCADE_GAMES_LEADERBOARD_GET_DEFAULT_COLOR() RGBA_COLOUR_STRUCT rgba INIT_RGBA_STRUCT(rgba,255,255,255,255) RETURN rgba ENDFUNC FUNC RGBA_COLOUR_STRUCT ARCADE_GAMES_LEADERBOARD_GET_ENTRY_COLOR(BOOL bIsPlayerTwo) RGBA_COLOUR_STRUCT rgba IF bIsPlayerTwo INIT_RGBA_STRUCT(rgba,0,0,255,255) ELSE INIT_RGBA_STRUCT(rgba,255,0,0,255) ENDIF RETURN rgba ENDFUNC FUNC STRING ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY() RETURN "MPCamhedzVHSFont" ENDFUNC FUNC STRING ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_NUMBER() RETURN "FONT_" ENDFUNC FUNC STRING ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_LETTER() RETURN "FONT_" ENDFUNC FUNC INT ARCADE_GAMES_LEADERBOARD_GET_SCORE_MAX_CHARS() RETURN 0 ENDFUNC /// PURPOSE: /// Returns the default initials for a leaderboard position FUNC INT ARCADE_GAMES_GET_DEFAULT_INITIALS_FOR_POSITION(INT iPosition) SWITCH iPosition CASE 0 RETURN 8457 //JEC CASE 1 RETURN 91275 //LSW CASE 2 RETURN 53260 //MAN CASE 3 RETURN 78663 //HNT CASE 4 RETURN 25103 //PIG CASE 5 RETURN 102401 //BAZ CASE 6 RETURN 12672 //AGD CASE 7 RETURN 74380 //MKS CASE 8 RETURN 90438 //GFW CASE 9 RETURN 54337 //BRN ENDSWITCH RETURN 0 ENDFUNC /// PURPOSE: /// Returns the default score for a leaderboard position FUNC INT ARCADE_GAMES_GET_DEFAULT_SCORE_FOR_POSITION(INT iPosition) SWITCH iPosition CASE 0 RETURN 100000 CASE 1 RETURN 90000 CASE 2 RETURN 80000 CASE 3 RETURN 70000 CASE 4 RETURN 60000 CASE 5 RETURN 50000 CASE 6 RETURN 40000 CASE 7 RETURN 30000 CASE 8 RETURN 20000 CASE 9 RETURN 10000 ENDSWITCH RETURN 0 ENDFUNC FUNC ARCADE_GAMES_SOUND ARCADE_GAMES_LEADERBAORD_GET_SOUND_LETTER_CHANGE() RETURN ARCADE_GAMES_SOUND_CMHDZ_HIGH_SCORE_LETTER_CHANGE ENDFUNC FUNC ARCADE_GAMES_SOUND ARCADE_GAMES_LEADERBAORD_GET_SOUND_LETTER_SET() RETURN ARCADE_GAMES_SOUND_CMHDZ_HIGH_SCORE_LETTER_SET ENDFUNC FUNC ARCADE_GAMES_SOUND ARCADE_GAMES_LEADERBAORD_GET_SOUND_STORE() RETURN ARCADE_GAMES_SOUND_CMHDZ_HIGH_SCORE_STORE ENDFUNC //FUNC INT ARCADE_GAMES_GET_PLAYER_LEADERBOARD_POSITION(ARCADE_GAMES_LEADERBOARD_DATA &lbData) // // IF lbData.iLocalLbdPos != -1 // RETURN lbData.iLocalLbdPos // ENDIF // // INT i // FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 // IF lbData.sLeaderboard[i].bPlayer // lbData.iLocalLbdPos = i // RETURN i // ENDIF // ENDFOR // // RETURN ciARCADE_GAMES_LBD_DEFAULT_RANK // //ENDFUNC /// PURPOSE: /// Initialise the leaderboard data PROC ARCADE_GAMES_LEADERBOARD_INITIALISE(ARCADE_GAMES_LEADERBOARD_DATA &lbData, INT &iInitials[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], INT &iScores[ciCASINO_ARCADE_LEADERBOARD_POSITIONS]) //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_INITIALISE][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_INITIALISE ") INT i FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 IF iScores[i] <= 0 #IF IS_DEBUG_BUILD OR lbData.bForceDefaultLeaderboard #ENDIF //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_INITIALISE][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_INITIALISE - iScores[",i,"] <= 0") //First time - Initialise lbData.sLeaderboard[i].iScore = ARCADE_GAMES_GET_DEFAULT_SCORE_FOR_POSITION(i) lbData.sLeaderboard[i].iInitials = ARCADE_GAMES_GET_DEFAULT_INITIALS_FOR_POSITION(i) BROADCAST_CASINO_ARCADE_UPDATE_LEADERBOARD_EVENT(GET_OWNER_OF_SIMPLE_INTERIOR_PLAYER_IS_IN(PLAYER_ID()), ARCADE_GAMES_LEADERBOARD_GET_CASINO_ARCADE_GAME(), i, lbData.sLeaderboard[i].iInitials, lbData.sLeaderboard[i].iScore) ELSE //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_INITIALISE][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_INITIALISE - iScores[",i,"] = ",iScores[i]) lbData.sLeaderboard[i].iScore = iScores[i] lbData.sLeaderboard[i].iInitials = iInitials[i] ENDIF ENDFOR ENDPROC PROC QUICK_SORT_LEADERBOARD(ARCADE_GAMES_LEADERBOARD_STRUCT &sArray[], INT iLeft, INT iRight) INT i, j INT p = sArray[((iLeft + iRight) / 2)].iScore ARCADE_GAMES_LEADERBOARD_STRUCT q i = iLeft j = iRight WHILE (i <= j) WHILE ((sArray[i].iScore > p) AND (i < iRight)) i++ ENDWHILE WHILE ((p > sArray[j].iScore) AND (j > iLeft)) j-- ENDWHILE IF (i <= j) q.iInitials = sArray[i].iInitials q.iPlayer = sArray[i].iPlayer q.iScore = sArray[i].iScore sArray[i].iInitials = sArray[j].iInitials sArray[i].iPlayer = sArray[j].iPlayer sArray[i].iScore = sArray[j].iScore sArray[j].iInitials = q.iInitials sArray[j].iPlayer = q.iPlayer sArray[j].iScore = q.iScore i++ j-- ENDIF ENDWHILE IF (i < iRight) QUICK_SORT_LEADERBOARD(sArray, i, iRight) ENDIF IF (iLeft < j) QUICK_SORT_LEADERBOARD(sArray, iLeft, j) ENDIF ENDPROC /// PURPOSE: /// Sorts the leaderboard once players' final scores are set PROC CMHDZ_SORT_SERVER_LEADERBOARD(CMHDZ_PLAYER_BROADCAST_DATA &lbPlayerBd[ciCMHDZ_MAX_MP_PLAYERS], ARCADE_GAMES_LEADERBOARD_STRUCT &serverLbData[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], INT iSortForPart) IF NOT NETWORK_IS_HOST_OF_THIS_SCRIPT() //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] Exit - not host") EXIT ENDIF ARCADE_GAMES_LEADERBOARD_STRUCT sTempArray[ciCASINO_ARCADE_LEADERBOARD_POSITIONS + ciCMHDZ_MAX_MP_PLAYERS] INT i //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD]") //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] {dsw} CMHDZ_SORT_SERVER_LEADERBOARD - Init. iSortForPart: ", iSortForPart, " Score: ", lbPlayerBd[iSortForPart].iLeaderboardScore, " Min Score Req'd: ", serverLbData[ciCASINO_ARCADE_LEADERBOARD_POSITIONS-1].iScore) // FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 // // IF serverLbData[i].iPlayer != -1 // serverLbData[i].iPlayer = -1 // ENDIF // // ENDFOR // FOR i = 0 TO ciCMHDZ_MAX_MP_PLAYERS - 1 // // IF NOT NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(i)) // RELOOP // ENDIF // // IF lbPlayerBd[i].iLeaderboardScore > serverLbData[ciCASINO_ARCADE_LEADERBOARD_POSITIONS-1].iScore // // sTempArray[i].iInitials = lbPlayerBd[i].iLeaderboardInitials // sTempArray[i].iScore = lbPlayerBd[i].iLeaderboardScore // sTempArray[i].iPlayer = i // iValidPlayerScores++ // //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] sTempArray[", i, "].iPlayer = ", sTempArray[i].iPlayer) // //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] sTempArray[", i, "].iScore = ", sTempArray[i].iScore) // ELSE // //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] Not Adding score for part ",i, ": ", lbPlayerBd[i].iLeaderboardScore, " as not > ", serverLbData[ciCASINO_ARCADE_LEADERBOARD_POSITIONS-1].iScore) // ENDIF // // ENDFOR sTempArray[0].iInitials = lbPlayerBd[iSortForPart].iLeaderboardInitials sTempArray[0].iScore = lbPlayerBd[iSortForPart].iLeaderboardScore sTempArray[0].iPlayer = iSortForPart INT iValidPlayerScores = 1 FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 sTempArray[i + iValidPlayerScores].iInitials = serverLbData[i].iInitials sTempArray[i + iValidPlayerScores].iPlayer = serverLbData[i].iPlayer sTempArray[i + iValidPlayerScores].iScore = serverLbData[i].iScore ENDFOR //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] {dsw} CMHDZ_SORT_SERVER_LEADERBOARD - Before sort") FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] sTempArray[", i, "].iScore = ", sTempArray[i].iScore) //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] sTempArray[", i, "].iPlayer = ", sTempArray[i].iPlayer) ENDFOR QUICK_SORT_LEADERBOARD(sTempArray, 0, ciCASINO_ARCADE_LEADERBOARD_POSITIONS + ciCMHDZ_MAX_MP_PLAYERS - 1) //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] {dsw} CMHDZ_SORT_SERVER_LEADERBOARD - Sorting") FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 serverLbData[i].iInitials = sTempArray[i].iInitials serverLbData[i].iPlayer = sTempArray[i].iPlayer serverLbData[i].iScore = sTempArray[i].iScore //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] serverLbData[", i, "].iScore = ", serverLbData[i].iScore) //CDEBUG1LN(DEBUG_MINIGAME, "[CMHDZ_SORT_SERVER_LEADERBOARD] serverLbData[", i, "].iPlayer = ", serverLbData[i].iPlayer) BROADCAST_CASINO_ARCADE_UPDATE_LEADERBOARD_EVENT(GET_OWNER_OF_SIMPLE_INTERIOR_PLAYER_IS_IN(PLAYER_ID()), CASINO_ARCADE_GAME_Camhedz, i, serverLbData[i].iInitials, serverLbData[i].iScore) ENDFOR ENDPROC //PROC ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY(ARCADE_GAMES_LEADERBOARD_DATA &lbData, ARCADE_GAMES_LEADERBOARD_STRUCT &serverLbData[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], CMHDZ_PLAYER_BROADCAST_DATA &lbPlayerBd[ciCMHDZ_MAX_MP_PLAYERS], INT &iLbInitials, INT &iScore, BOOL bServerReady) PROC ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY(ARCADE_GAMES_LEADERBOARD_DATA &lbData, ARCADE_GAMES_LEADERBOARD_STRUCT &lbHost[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], INT &iLbInitials, INT &iScore, BOOL bServerReady) // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY - iScore:",iScore) // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] Called. Editing: ", lbData.bEditing, " iScore: ", iScore) IF NOT lbData.bEditing IF lbHost[ciCASINO_ARCADE_LEADERBOARD_POSITIONS-1].iScore < iScore IF iScore != lbData.iMylastLbScore lbData.bEditing = TRUE lbData.iMylastLbScore = iScore IF NOT IS_BIT_SET(playerBD[PARTICIPANT_ID_TO_INT()].iPlayerBitset, ENUM_TO_INT(CMHDZ_PLAYER_BD_BIT_EDITING_LEADERBOARD)) SET_BIT(playerBD[PARTICIPANT_ID_TO_INT()].iPlayerBitset, ENUM_TO_INT(CMHDZ_PLAYER_BD_BIT_EDITING_LEADERBOARD)) //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] Set CMHDZ_PLAYER_BD_BIT_EDITING_LEADERBOARD. My Score: ", iScore, " Compare with score: ", lbHost[ciCASINO_ARCADE_LEADERBOARD_POSITIONS-1].iScore) ENDIF // BROADCAST_CMHDZ_REQUEST_LB_SORT() // CMHDZ_SORT_SERVER_LEADERBOARD(lbPlayerBd, serverLbData) ELSE //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] Not editing because my score: ", iScore, " = last score = ", lbData.iMylastLbScore) EXIT ENDIF ELSE //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] Not editing because my score: ", iScore, " < ", lbHost[ciCASINO_ARCADE_LEADERBOARD_POSITIONS-1].iScore) EXIT ENDIF ENDIF // // IF ARCADE_GAMES_GET_PLAYER_LEADERBOARD_POSITION() >= ciCASINO_ARCADE_LEADERBOARD_POSITIONS // EXIT // ENDIF // IF bServerReady INT iUnpackedInitials[ciARCADE_CABINET_LEADERBOARD_INITIALS] IF SC_PROFANITY_GET_CHECK_IS_VALID(lbData.iLbdInitialProfanityToken) // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] 1") IF SC_PROFANITY_GET_CHECK_IS_PENDING(lbData.iLbdInitialProfanityToken) // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] EXIT 2") EXIT ENDIF IF SC_PROFANITY_GET_STRING_PASSED(lbData.iLbdInitialProfanityToken) //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY - Profanity: Initials OK") //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY - iInitials: ",iLbInitials) //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY - iScore: ",iScore) // lbData.sLeaderboard[ARCADE_GAMES_GET_PLAYER_LEADERBOARD_POSITION(lbData)].iInitials = lbData.iInitials // BROADCAST_CASINO_ARCADE_UPDATE_LEADERBOARD_EVENT(GET_OWNER_OF_SIMPLE_INTERIOR_PLAYER_IS_IN(PLAYER_ID()), ARCADE_GAMES_LEADERBOARD_GET_CASINO_ARCADE_GAME(), ARCADE_GAMES_GET_PLAYER_LEADERBOARD_POSITION(lbData), lbData.sLeaderboard[ARCADE_GAMES_GET_PLAYER_LEADERBOARD_POSITION(lbData)].iInitials, lbData.sLeaderboard[ARCADE_GAMES_GET_PLAYER_LEADERBOARD_POSITION(lbData)].iScore,TRUE) BROADCAST_CMHDZ_INITIALS_ENTERED(iLbInitials) // BROADCAST_CMHDZ_CLEAR_REQUEST_LB_SORT() lbData.bEditing = FALSE IF IS_BIT_SET(playerBD[PARTICIPANT_ID_TO_INT()].iPlayerBitset, ENUM_TO_INT(CMHDZ_PLAYER_BD_BIT_EDITING_LEADERBOARD)) CLEAR_BIT(playerBD[PARTICIPANT_ID_TO_INT()].iPlayerBitset, ENUM_TO_INT(CMHDZ_PLAYER_BD_BIT_EDITING_LEADERBOARD)) ENDIF lbData.iCurrentInitial = 0 lbData.iInitials = 0 lbData.iLbdInitialProfanityToken = 0 iLbInitials = 0 iScore = 0 ELSE //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY - Profanity: Initials BAD") // ARCADE_GAMES_PLAY_FIRE_AND_FORGET_FRONTEND_SOUND("Frontend_Change_Letter") lbData.iCurrentInitial = 0 lbData.iInitials = 0 lbData.iLbdInitialProfanityToken = 0 ENDIF // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] EXIT 3") EXIT ELSE // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] SC_PROFANITY_GET_CHECK_IS_VALID not valid. Token: ", lbData.iLbdInitialProfanityToken) ENDIF // // IF sDegenatronGamesData.lbData.iCurrentInitial >= ciARCADE_CABINET_LEADERBOARD_INITIALS - 1 // EXIT // ENDIF // // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] 4") CONTROL_ACTION CA_InitialUp = INPUT_SCRIPT_RB CONTROL_ACTION CA_InitialDown = INPUT_SCRIPT_LB CONTROL_ACTION CA_InitialAccept = INPUT_FRONTEND_ACCEPT CONTROL_ACTION CA_InitialBack = INPUT_FRONTEND_CANCEL IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) CA_InitialAccept = INPUT_CURSOR_ACCEPT CA_InitialBack = INPUT_CURSOR_CANCEL CA_InitialUp = INPUT_FRONTEND_UP CA_InitialDown = INPUT_FRONTEND_DOWN ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_InitialAccept) lbData.iCurrentInitial ++ //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY] lbData.iCurrentInitial: ", lbData.iCurrentInitial) IF lbData.iCurrentInitial >= ciARCADE_CABINET_LEADERBOARD_INITIALS - 1 //ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_LEADERBAORD_GET_SOUND_STORE()) CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_Score_Entered) lbData.iCurrentInitial = ciARCADE_CABINET_LEADERBOARD_INITIALS - 1 ARCADE_UNPACK_LEADERBOARD_INITIALS(iLbInitials, iUnpackedInitials) TEXT_LABEL_3 tl3Initials = ARCADE_GET_CHAR_FROM_INT(iUnpackedInitials[0]) tl3Initials += ARCADE_GET_CHAR_FROM_INT(iUnpackedInitials[1]) tl3Initials += ARCADE_GET_CHAR_FROM_INT(iUnpackedInitials[2]) IF SC_PROFANITY_CHECK_STRING(tl3Initials, lbData.iLbdInitialProfanityToken) //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY - Profanity: Starting check") ENDIF ELSE //ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_LEADERBAORD_GET_SOUND_LETTER_SET()) CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_Score_Letter_Select) ENDIF EXIT ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_InitialBack) IF lbData.iCurrentInitial > 0 CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_Score_Letter_Select) lbData.iCurrentInitial -- ENDIF EXIT ENDIF INT iDelta = 0 IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_InitialUp) // ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_LEADERBAORD_GET_SOUND_LETTER_CHANGE()) // SCRIPT_ASSERT("ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY - CA_InitialUp") CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_Score_Letter_Change) iDelta = 1 ELIF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_InitialDown) // ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_LEADERBAORD_GET_SOUND_LETTER_CHANGE()) // SCRIPT_ASSERT("ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY - CA_InitialDown") CMHDZ_PLAY_SOUND_AND_RELEASE_NO_POSITION(CMHDZ_AUDIO_EFFECT_Score_Letter_Change) iDelta = -1 ENDIF IF iDelta = 0 // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] EXIT 5 Editing: ", lbData.bEditing) EXIT ENDIF // ARCADE_GAMES_PLAY_FIRE_AND_FORGET_FRONTEND_SOUND("Frontend_Change_Letter") ARCADE_UNPACK_LEADERBOARD_INITIALS(iLbInitials, iUnpackedInitials) iUnpackedInitials[lbData.iCurrentInitial] += iDelta IF iUnpackedInitials[lbData.iCurrentInitial] >= ciARCADE_CABINET_LEADERBOARD_INITIALS_MAX iUnpackedInitials[lbData.iCurrentInitial] = 0 ELIF iUnpackedInitials[lbData.iCurrentInitial] < 0 iUnpackedInitials[lbData.iCurrentInitial] = ciARCADE_CABINET_LEADERBOARD_INITIALS_MAX - 1 ENDIF //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] lbData.iCurrentInitial: ", lbData.iCurrentInitial) //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] iUnpackedInitials = ", iUnpackedInitials[lbData.iCurrentInitial]) iLbInitials = ARCADE_PACK_LEADERBOARD_INITIALS(iUnpackedInitials) //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] Packed Initials = ", iLbInitials) // //CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] EXIT 6") ELSE CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] Server not ready") ENDIF ENDPROC // ------------------------------ EVENT PROCESSING ------------------------------ /// PURPOSE: /// Initialise the leaderboard data in ServerBD PROC CMHDZ_INITIALISE_SERVER_LEADERBOARD(ARCADE_GAMES_LEADERBOARD_STRUCT &sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], INT &iInitials[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], INT &iScores[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], BOOL &bReceived) IF !NETWORK_IS_HOST_OF_THIS_SCRIPT() EXIT ENDIF INT i FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 IF iScores[i] <= 0 //First time - Initialise sLeaderboard[i].iScore = ARCADE_GAMES_GET_DEFAULT_SCORE_FOR_POSITION(i) sLeaderboard[i].iInitials = ARCADE_GAMES_GET_DEFAULT_INITIALS_FOR_POSITION(i) BROADCAST_CASINO_ARCADE_UPDATE_LEADERBOARD_EVENT(GET_OWNER_OF_SIMPLE_INTERIOR_PLAYER_IS_IN(PLAYER_ID()), CASINO_ARCADE_GAME_Camhedz, i, sLeaderboard[i].iInitials, sLeaderboard[i].iScore) ELSE sLeaderboard[i].iScore = iScores[i] sLeaderboard[i].iInitials = iInitials[i] ENDIF ENDFOR bReceived = TRUE ENDPROC FUNC INT CMHDZ_GET_PLAYER_LEADERBOARD_POSITION(ARCADE_GAMES_LEADERBOARD_STRUCT &sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], INT iParticipant) INT i FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 IF sLeaderboard[i].iPlayer = iParticipant RETURN i ENDIF ENDFOR RETURN 99 ENDFUNC PROC CMHDZ_PROCESS_INITIALS_ENTERED_EVENT(PLAYER_INDEX piFromPlayer, ARCADE_GAMES_LEADERBOARD_STRUCT &sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], CMHDZ_PLAYER_BROADCAST_DATA &tlgPlayerBd[2], INT iInitials) IF NOT NETWORK_IS_HOST_OF_THIS_SCRIPT() //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_PROCESS_INITIALS_ENTERED_EVENT] Exit as not host") EXIT ENDIF INT iParticipant = NATIVE_TO_INT(NETWORK_GET_PARTICIPANT_INDEX(piFromPlayer)) INT iPosition = CMHDZ_GET_PLAYER_LEADERBOARD_POSITION(sLeaderboard, iParticipant) //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_PROCESS_INITIALS_ENTERED_EVENT] iPosition: ", iPosition, " Initials: ", iInitials) IF iPosition < 0 OR iPosition >= ciCASINO_ARCADE_LEADERBOARD_POSITIONS EXIT ENDIF sLeaderboard[iPosition].iInitials = iInitials //tlgPlayerBd[iParticipant].iLeaderboardInitials UNUSED_PARAMETER(tlgPlayerBd) //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_PROCESS_INITIALS_ENTERED_EVENT] sLeaderboard[ ", iPosition, "].iInitials = ", tlgPlayerBd[iParticipant].iLeaderboardInitials , " Part: ", iParticipant) BROADCAST_CASINO_ARCADE_UPDATE_LEADERBOARD_EVENT(GET_OWNER_OF_SIMPLE_INTERIOR_PLAYER_IS_IN(PLAYER_ID()), CASINO_ARCADE_GAME_Camhedz, iPosition, sLeaderboard[iPosition].iInitials, sLeaderboard[iPosition].iScore) ENDPROC ///// PURPOSE: ///// Priot to editing the leaderboard, it needs to be sorted by the host. Clieients can request the leaderboard be sorted by sending an event ///// PARAMS: ///// piFromPlayer - ///// sLeaderboard - ///// tlgPlayerBd - ///// serverBitset - //PROC CMHDZ_PROCESS_REQ_LB_SORT_EVENT(PLAYER_INDEX piFromPlayer, ARCADE_GAMES_LEADERBOARD_STRUCT &sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], CMHDZ_PLAYER_BROADCAST_DATA &tlgPlayerBd[2],INT &serverBitset) // IF NOT NETWORK_IS_HOST_OF_THIS_SCRIPT() // //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_PROCESS_REQ_LB_SORT_EVENT] Exit as not host") // EXIT // ENDIF // // //UNUSED_PARAMETER(piFromPlayer) // INT iParticipant = NATIVE_TO_INT(NETWORK_GET_PARTICIPANT_INDEX(piFromPlayer)) // // CMHDZ_SORT_SERVER_LEADERBOARD(tlgPlayerBd, sLeaderboard, iParticipant) // // //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_PROCESS_REQ_LB_SORT_EVENT] setting bit: ", iParticipant) // SET_BIT(serverBitset, iParticipant) // // //ENDPROC // ///// PURPOSE: ///// After editing the leaderboard, clients need to clear that they've requested the LB be sorted, so that it will be appropriately ///// sorted the next time the client needs to edit the LB ///// PARAMS: ///// piFromPlayer - ///// sLeaderboard - ///// tlgPlayerBd - ///// serverBitset - //PROC CMHDZ_PROCESS_CLEAR_REQ_LB_SORT_EVENT(PLAYER_INDEX piFromPlayer, INT &serverBitset) // IF NOT NETWORK_IS_HOST_OF_THIS_SCRIPT() // //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_PROCESS_CLEAR_REQ_LB_SORT_EVENT] Exit as not host") // EXIT // ENDIF // // //UNUSED_PARAMETER(piFromPlayer) // INT iParticipant = NATIVE_TO_INT(NETWORK_GET_PARTICIPANT_INDEX(piFromPlayer)) // // //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [CMHDZ_PROCESS_CLEAR_REQ_LB_SORT_EVENT] Clearing bit: ", iParticipant) // CLEAR_BIT(serverBitset, iParticipant) //ENDPROC #IF IS_DEBUG_BUILD PROC ARCADE_GAMES_LEADERBOARD_WIDGET_CREATE(ARCADE_GAMES_LEADERBOARD_DATA &lbData) START_WIDGET_GROUP("Leaderboard") ADD_WIDGET_BOOL("Force Default Leaderboard", lbData.bForceDefaultLeaderboard) ADD_WIDGET_BOOL("Test server sort", lbData.bDebugTestServerSort) STOP_WIDGET_GROUP() ENDPROC PROC ARCADE_GAMES_LEADERBOARD_WIDGET_UPDATE(ARCADE_GAMES_LEADERBOARD_DATA &lbData, CMHDZ_PLAYER_BROADCAST_DATA &lbPlayerBd[ciCMHDZ_MAX_MP_PLAYERS], ARCADE_GAMES_LEADERBOARD_STRUCT &lbHostData[ciCASINO_ARCADE_LEADERBOARD_POSITIONS]) BOOL bReceived IF lbData.bForceDefaultLeaderboard INT iInitials[ciCASINO_ARCADE_LEADERBOARD_POSITIONS] INT iScores[ciCASINO_ARCADE_LEADERBOARD_POSITIONS] //ARCADE_GAMES_LEADERBOARD_INITIALISE(lbData, iInitials,iScores) CMHDZ_INITIALISE_SERVER_LEADERBOARD(lbHostData, iInitials, iScores, bReceived) lbData.bForceDefaultLeaderboard = FALSE ENDIF IF lbData.bDebugTestServerSort CMHDZ_SORT_SERVER_LEADERBOARD(lbPlayerBd, lbHostData, PARTICIPANT_ID_TO_INT()) ENDIF ENDPROC #ENDIF /// PURPOSE: /// Processes all incoming events PROC ARCADE_GAMES_LEADERBOARD_PROCESS_EVENTS(ARCADE_GAMES_LEADERBOARD_DATA &lbData, ARCADE_GAMES_LEADERBOARD_STRUCT &sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], CMHDZ_PLAYER_BROADCAST_DATA &cmhdzPlayerBd[2], BOOL &bReceived) UNUSED_PARAMETER(lbData) INT iCount SCRIPT_EVENT_DATA_CASINO_ARCADE_SEND_LEADERBOARD_EVENT EventDataLeaderboardSend SCRIPT_EVENT_DATA_CMHDZ_INITIALS_ENTERED EventDataInitialsEntered // SCRIPT_EVENT_DATA_CMHDZ_REQUEST_LB_SORT EventDataReqLbSort // SCRIPT_EVENT_DATA_CMHDZ_CLEAR_REQUEST_LB_SORT EventDataClearReqLbSort REPEAT GET_NUMBER_OF_EVENTS(SCRIPT_EVENT_QUEUE_NETWORK) iCount IF GET_EVENT_AT_INDEX(SCRIPT_EVENT_QUEUE_NETWORK, iCount) != EVENT_NETWORK_SCRIPT_EVENT RELOOP ENDIF IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, EventDataLeaderboardSend, SIZE_OF(EventDataLeaderboardSend)) /* Gets sent via BROADCAST_CASINO_ARCADE_SEND_LEADERBOARD_EVENT(), which gets called via PROCESS_SCRIPT_EVENT_CASINO_ARCADE_REQUEST_LEADERBOARD_EVENT, called via BROADCAST_CASINO_ARCADE_REQUEST_LEADERBOARD_EVENT, called via ARCADE_GAMES_LEADERBOARD_LOAD */ IF EventDataLeaderboardSend.Details.Type = SCRIPT_EVENT_CASINO_ARCADE_SEND_LEADERBOARD_EVENT IF bReceived RELOOP ENDIF //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [ARCADE_GAMES_LEADERBOARD_PROCESS_EVENTS] - Found event: LEADERBOARD") //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [ARCADE_GAMES_LEADERBOARD_PROCESS_EVENTS] - Player = ", NATIVE_TO_INT(EventDataLeaderboardSend.Details.FromPlayerIndex)) IF EventDataLeaderboardSend.eGameType != CASINO_ARCADE_GAME_Camhedz RELOOP ENDIF CMHDZ_INITIALISE_SERVER_LEADERBOARD(sLeaderboard, EventDataLeaderboardSend.iInitials, EventDataLeaderboardSend.iScores, bReceived) RELOOP ENDIF ENDIF IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, EventDataInitialsEntered, SIZE_OF(EventDataInitialsEntered)) IF EventDataInitialsEntered.Details.Type = SCRIPT_EVENT_CMHDZ_INITIALS_ENTERED //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [ARCADE_GAMES_LEADERBOARD_PROCESS_EVENTS] - Found event: INITIALS") //CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [ARCADE_GAMES_LEADERBOARD_PROCESS_EVENTS] - Player = ", NATIVE_TO_INT(EventDataInitialsEntered.Details.FromPlayerIndex)) CMHDZ_PROCESS_INITIALS_ENTERED_EVENT(EventDataInitialsEntered.Details.FromPlayerIndex, sLeaderboard, cmhdzPlayerBd, EventDataInitialsEntered.iInitials) RELOOP ENDIF ENDIF ENDREPEAT ENDPROC