USING "arcade_cabinet_minigame_common.sch" USING "arcade_games_sound.sch" USING "arcade_games_help_text.sch" USING "gunslinger_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_TLG 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 "LEADERBOARDS" 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 "MPLastGunslingersHud" 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 46034 //SPL CASE 1 RETURN 53519 //PEN CASE 2 RETURN 53635 //DGN CASE 3 RETURN 70547 //TOR CASE 4 RETURN 57490 //SCO CASE 5 RETURN 17924 //EYE CASE 6 RETURN 49681 //RIM CASE 7 RETURN 5001 //JOB CASE 8 RETURN 73932 //MDS CASE 9 RETURN 13522 //STD 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 1000 CASE 1 RETURN 900 CASE 2 RETURN 800 CASE 3 RETURN 700 CASE 4 RETURN 600 CASE 5 RETURN 500 CASE 6 RETURN 400 CASE 7 RETURN 300 CASE 8 RETURN 200 CASE 9 RETURN 100 ENDSWITCH RETURN 0 ENDFUNC FUNC ARCADE_GAMES_SOUND ARCADE_GAMES_LEADERBAORD_GET_SOUND_LETTER_CHANGE() RETURN ARCADE_GAMES_SOUND_TLG_HIGH_SCORE_LETTER_CHANGE ENDFUNC FUNC ARCADE_GAMES_SOUND ARCADE_GAMES_LEADERBAORD_GET_SOUND_LETTER_SET() RETURN ARCADE_GAMES_SOUND_TLG_HIGH_SCORE_LETTER_SET ENDFUNC FUNC ARCADE_GAMES_SOUND ARCADE_GAMES_LEADERBAORD_GET_SOUND_STORE() RETURN ARCADE_GAMES_SOUND_TLG_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 TLG_SORT_SERVER_LEADERBOARD(TLG_PLAYER_BROADCAST_DATA &lbPlayerBd[ciTLG_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, "[TLG_SORT_SERVER_LEADERBOARD] Exit - not host") EXIT ENDIF ARCADE_GAMES_LEADERBOARD_STRUCT sTempArray[ciCASINO_ARCADE_LEADERBOARD_POSITIONS + ciTLG_MAX_MP_PLAYERS] INT i CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SORT_SERVER_LEADERBOARD]") CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SORT_SERVER_LEADERBOARD] {dsw} TLG_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 ciTLG_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, "[TLG_SORT_SERVER_LEADERBOARD] sTempArray[", i, "].iPlayer = ", sTempArray[i].iPlayer) // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SORT_SERVER_LEADERBOARD] sTempArray[", i, "].iScore = ", sTempArray[i].iScore) // ELSE // CDEBUG1LN(DEBUG_MINIGAME, "[TLG_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, "[TLG_SORT_SERVER_LEADERBOARD] {dsw} TLG_SORT_SERVER_LEADERBOARD - Before sort") FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SORT_SERVER_LEADERBOARD] sTempArray[", i, "].iScore = ", sTempArray[i].iScore) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SORT_SERVER_LEADERBOARD] sTempArray[", i, "].iPlayer = ", sTempArray[i].iPlayer) ENDFOR QUICK_SORT_LEADERBOARD(sTempArray, 0, ciCASINO_ARCADE_LEADERBOARD_POSITIONS + ciTLG_MAX_MP_PLAYERS - 1) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_SORT_SERVER_LEADERBOARD] {dsw} TLG_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, "[TLG_SORT_SERVER_LEADERBOARD] serverLbData[", i, "].iScore = ", serverLbData[i].iScore) CDEBUG1LN(DEBUG_MINIGAME, "[TLG_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_TLG, 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], TLG_PLAYER_BROADCAST_DATA &lbPlayerBd[ciTLG_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(TLG_PLAYER_BD_BIT_EDITING_LEADERBOARD)) SET_BIT(playerBD[PARTICIPANT_ID_TO_INT()].iPlayerBitset, ENUM_TO_INT(TLG_PLAYER_BD_BIT_EDITING_LEADERBOARD)) CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_PROCESS_ENTRY][LEADERBOARD] Set TLG_PLAYER_BD_BIT_EDITING_LEADERBOARD. My Score: ", iScore, " Compare with score: ", lbHost[ciCASINO_ARCADE_LEADERBOARD_POSITIONS-1].iScore) ENDIF // BROADCAST_TLG_REQUEST_LB_SORT() // TLG_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_TLG_INITIALS_ENTERED(iLbInitials) // BROADCAST_TLG_CLEAR_REQUEST_LB_SORT() lbData.bEditing = FALSE IF IS_BIT_SET(playerBD[PARTICIPANT_ID_TO_INT()].iPlayerBitset, ENUM_TO_INT(TLG_PLAYER_BD_BIT_EDITING_LEADERBOARD)) CLEAR_BIT(playerBD[PARTICIPANT_ID_TO_INT()].iPlayerBitset, ENUM_TO_INT(TLG_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()) 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()) ENDIF EXIT ENDIF IF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_InitialBack) IF lbData.iCurrentInitial > 0 ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_LEADERBAORD_GET_SOUND_LETTER_SET()) 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()) iDelta = 1 ELIF IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, CA_InitialDown) ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_LEADERBAORD_GET_SOUND_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 PROC ARCADE_GAMES_DRAW_INTEGER(INT iValue, INT iDigits, VECTOR_2D vCenter,RGBA_COLOUR_STRUCT rgba) VECTOR_2D vCharCenter = vCenter VECTOR_2D vCharSize = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SIZE() VECTOR_2D vCharSeparation = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SEPARATION() BOOL bZero = (iValue = 0) INT iChar IF iDigits = 0 INT currentValue currentValue = iValue WHILE currentValue > 0 OR bZero bZero = FALSE vCharCenter.x = vCenter.x + vCharSeparation.x * (iDigits-1)/2.0 - vCharSeparation.x * iChar TEXT_LABEL_63 tlTextureName tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_NUMBER() tlTextureName += currentValue % 10 currentValue /= 10 ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, rgba) iChar++ ENDWHILE ELSE REPEAT iDigits iChar vCharCenter.x = vCenter.x + vCharSeparation.x * (iDigits-1)/2.0 - vCharSeparation.x * iChar TEXT_LABEL_63 tlTextureName tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_NUMBER() tlTextureName += (iValue / ROUND(POW(10.0,to_float(iChar)))) % 10 ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, rgba) ENDREPEAT ENDIF ENDPROC PROC ARCADE_GAMES_LEADERBOARD_DRAW_UNPACKED_INITIALS(ARCADE_GAMES_LEADERBOARD_DATA &lbData, INT &iUnpackedInitials[ciARCADE_CABINET_LEADERBOARD_INITIALS], VECTOR_2D vCenter,RGBA_COLOUR_STRUCT rgba,RGBA_COLOUR_STRUCT rgbaHighlight, BOOL editing) VECTOR_2D vCharCenter = vCenter VECTOR_2D vCharSize = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SIZE() VECTOR_2D vCharSeparation = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SEPARATION() RGBA_COLOUR_STRUCT color INT iChar REPEAT 3 iChar vCharCenter.x = vCenter.x + vCharSeparation.x * (3-1)/2.0 + vCharSeparation.x * iChar TEXT_LABEL_63 tlTextureName IF iUnpackedInitials[iChar] < 26 tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_LETTER() ELSE tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_NUMBER() ENDIF tlTextureName += ARCADE_GET_CHAR_FROM_INT(iUnpackedInitials[iChar]) IF editing IF lbData.iCurrentInitial = iChar IF lbData.iTickTimer = 0 color = rgba ELSE color = rgbaHighlight ENDIF ELSE color = rgbaHighlight ENDIF ELSE color = rgba ENDIF ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, color) ENDREPEAT ENDPROC PROC ARCADE_GAMES_LEADERBOARD_DRAW_RANK(INT iPosition, VECTOR_2D vCenter,RGBA_COLOUR_STRUCT rgba,RGBA_COLOUR_STRUCT rgbaHighlight, BOOL editing) // CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW_RANK][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_DRAW_RANK ") VECTOR_2D vCharCenter = vCenter VECTOR_2D vCharSize = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SIZE() VECTOR_2D vCharSeparation = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SEPARATION() RGBA_COLOUR_STRUCT color IF editing color = rgbaHighlight ELSE color = rgba ENDIF TEXT_LABEL_63 tlTextureName IF iPosition = 10 tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_NUMBER() tlTextureName += 1 vCharCenter.x = vCharCenter.x - vCharSeparation.x ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, color) vCharCenter = vCenter iPosition = 0 ENDIF tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_NUMBER() tlTextureName += iPosition ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, color) vCharCenter.x = vCenter.x + vCharSeparation.x * 1 tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_LETTER() IF iPosition = 1 tlTextureName += "S" ELIF iPosition = 2 tlTextureName += "N" ELIF iPosition = 3 tlTextureName += "R" ELSE tlTextureName += "T" ENDIF ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, color) vCharCenter.x = vCenter.x + vCharSeparation.x * 2 tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_LETTER() IF iPosition = 1 tlTextureName += "T" ELIF iPosition = 2 tlTextureName += "D" ELIF iPosition = 3 tlTextureName += "D" ELSE tlTextureName += "H" ENDIF ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, color) ENDPROC PROC ARCADE_GAMES_LEADERBOARD_DRAW_SCORE(INT iScore, VECTOR_2D vCenter,RGBA_COLOUR_STRUCT rgba,RGBA_COLOUR_STRUCT rgbaHighlight, BOOL editing) VECTOR_2D vCharCenter = vCenter VECTOR_2D vCharSize = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SIZE() VECTOR_2D vCharSeparation = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SEPARATION() RGBA_COLOUR_STRUCT color IF editing color = rgbaHighlight ELSE color = rgba ENDIF ARCADE_GAMES_DRAW_INTEGER(iScore,ARCADE_GAMES_LEADERBOARD_GET_SCORE_MAX_CHARS(),vCenter,color) //PTS TEXT_LABEL_63 tlTextureName vCharCenter.x = vCenter.x + vCharSeparation.x * (ARCADE_GAMES_LEADERBOARD_GET_SCORE_MAX_CHARS()/2 + 1) tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_LETTER() tlTextureName += "P" ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, color) vCharCenter.x = vCenter.x + vCharSeparation.x * (ARCADE_GAMES_LEADERBOARD_GET_SCORE_MAX_CHARS()/2 + 2) tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_LETTER() tlTextureName += "T" ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, color) vCharCenter.x = vCenter.x + vCharSeparation.x * (ARCADE_GAMES_LEADERBOARD_GET_SCORE_MAX_CHARS()/2 + 3) tlTextureName = ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_LETTER() tlTextureName += "S" ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(), tlTextureName,vCharCenter,vCharSize,0.0, color) ENDPROC /// PURPOSE: /// Draws the leaderboard PROC ARCADE_GAMES_LEADERBOARD_DRAW(ARCADE_GAMES_LEADERBOARD_DATA &lbData, INT iLocalInitials, ARCADE_GAMES_LEADERBOARD_STRUCT &lbHost[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], BOOL bIsPlayerTwo = FALSE) // CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW][LEADERBOARD] - ARCADE_GAMES_LEADERBOARD_DRAW ") IF lbData.bEditing ARCADE_GAMES_HELP_TEXT_PRINT_FOREVER(ARCADE_GAMES_HELP_TEXT_ENUM_LEADERBOARD_ENTRY) ELSE ARCADE_GAMES_HELP_TEXT_PRINT_FOREVER(ARCADE_GAMES_HELP_TEXT_ENUM_LEADERBOARD) ENDIF VECTOR_2D vCharSeparation = ARCADE_GAMES_LEADERBOARD_GET_CHAR_TEXTURE_SEPARATION() lbData.iTickTimer = ((lbData.iTickTimer + ROUND(GET_FRAME_TIME() * 1000))% 1000) / 500 ARCADE_DRAW_PIXELSPACE_SPRITE(ARCADE_GAMES_LEADERBOARD_GET_TEXTURE_DICTIONARY(),ARCADE_GAMES_LEADERBOARD_GET_TITLE_TEXTURE_NAME(),ARCADE_GAMES_LEADERBOARD_GET_TITLE_TEXTURE_POSITION(),ARCADE_GAMES_LEADERBOARD_GET_TITLE_TEXTURE_SIZE(),0.0,ARCADE_GAMES_LEADERBOARD_GET_DEFAULT_COLOR()) // CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW][LEADERBOARD] My Initials: ", iLocalInitials) INT iUnpackedInitials[ciARCADE_CABINET_LEADERBOARD_INITIALS] INT iPositionLoop = 0 BOOL bEditing = FALSE FOR iPositionLoop = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1 bEditing = lbHost[iPositionLoop].iPlayer = PARTICIPANT_ID_TO_INT() AND lbData.bEditing // bEditing = lbData.bEditing CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW][LEADERBOARD]") CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW][LEADERBOARD] iPositionLoop: ",iPositionLoop, " bEditing: ", bEditing, " lbData.bEditing: ", lbData.bEditing, " Local part: ", PARTICIPANT_ID_TO_INT()) CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW][LEADERBOARD] lbHost[",iPositionLoop, "].iPlayer = ", lbHost[iPositionLoop].iPlayer) CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW][LEADERBOARD] lbHost[",iPositionLoop, "].iScore = ", lbHost[iPositionLoop].iScore) CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW][LEADERBOARD] lbHost[",iPositionLoop, "].iInitials = ", lbHost[iPositionLoop].iInitials) IF (lbData.iCurrentInitial < ciARCADE_CABINET_LEADERBOARD_INITIALS - 1 OR SC_PROFANITY_GET_CHECK_IS_VALID(lbData.iLbdInitialProfanityToken)) AND bEditing CDEBUG1LN(DEBUG_MINIGAME, "[ARCADE_GAMES_LEADERBOARD_DRAW][LEADERBOARD] Editing, iInitials: ", iLocalInitials) ARCADE_UNPACK_LEADERBOARD_INITIALS(iLocalInitials, iUnpackedInitials) ELSE ARCADE_UNPACK_LEADERBOARD_INITIALS(lbHost[iPositionLoop].iInitials, iUnpackedInitials) ENDIF // ARCADE_UNPACK_LEADERBOARD_INITIALS(lbHost[iPositionLoop].iInitials, iUnpackedInitials) //Rank ARCADE_GAMES_LEADERBOARD_DRAW_RANK(iPositionLoop+1,ADD_VECTOR_2D(ARCADE_GAMES_LEADERBOARD_GET_RANK_COLUMN_POSITION(),INIT_VECTOR_2D(0.0,vCharSeparation.y*iPositionLoop)),ARCADE_GAMES_LEADERBOARD_GET_DEFAULT_COLOR(),ARCADE_GAMES_LEADERBOARD_GET_ENTRY_COLOR(bIsPlayerTwo),bEditing) //Initials ARCADE_GAMES_LEADERBOARD_DRAW_UNPACKED_INITIALS(lbData, iUnpackedInitials,ADD_VECTOR_2D(ARCADE_GAMES_LEADERBOARD_GET_INITIALS_COLUMN_POSITION(),INIT_VECTOR_2D(0.0,vCharSeparation.y*iPositionLoop)),ARCADE_GAMES_LEADERBOARD_GET_DEFAULT_COLOR(),ARCADE_GAMES_LEADERBOARD_GET_ENTRY_COLOR(bIsPlayerTwo),bEditing) //Score ARCADE_GAMES_LEADERBOARD_DRAW_SCORE(lbHost[iPositionLoop].iScore,ADD_VECTOR_2D(ARCADE_GAMES_LEADERBOARD_GET_SCORE_COLUMN_POSITION(),INIT_VECTOR_2D(0.0,vCharSeparation.y*iPositionLoop)),ARCADE_GAMES_LEADERBOARD_GET_DEFAULT_COLOR(),ARCADE_GAMES_LEADERBOARD_GET_ENTRY_COLOR(bIsPlayerTwo),bEditing) ENDFOR ENDPROC PROC ARCADE_GAMES_LEADERBOARD_LOAD(ARCADE_GAMES_LEADERBOARD_DATA &lbData, CASINO_ARCADE_GAME eGame, BOOL &bReceived) UNUSED_PARAMETER(eGame) IF NOT bReceived AND NETWORK_IS_HOST_OF_THIS_SCRIPT() AND (lbData.iLastLeaderboardRequest = -HIGHEST_INT OR NATIVE_TO_INT(GET_NETWORK_TIME()) - lbData.iLastLeaderboardRequest > ciARCADE_GAMES_RESEND_LEADERBOARD_REQUEST_TIME) BROADCAST_CASINO_ARCADE_REQUEST_LEADERBOARD_EVENT(GET_OWNER_OF_SIMPLE_INTERIOR_PLAYER_IS_IN(PLAYER_ID()), ARCADE_GAMES_LEADERBOARD_GET_CASINO_ARCADE_GAME()) lbData.iLastLeaderboardRequest = NATIVE_TO_INT(GET_NETWORK_TIME()) ENDIF ENDPROC // ------------------------------ EVENT PROCESSING ------------------------------ /// PURPOSE: /// Initialise the leaderboard data in ServerBD PROC TLG_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 = 50 - (i * 2) 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_TLG, 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 TLG_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 TLG_PROCESS_INITIALS_ENTERED_EVENT(PLAYER_INDEX piFromPlayer, ARCADE_GAMES_LEADERBOARD_STRUCT &sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], TLG_PLAYER_BROADCAST_DATA &tlgPlayerBd[2], INT iInitials) IF NOT NETWORK_IS_HOST_OF_THIS_SCRIPT() CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [TLG_PROCESS_INITIALS_ENTERED_EVENT] Exit as not host") EXIT ENDIF INT iParticipant = NATIVE_TO_INT(NETWORK_GET_PARTICIPANT_INDEX(piFromPlayer)) INT iPosition = TLG_GET_PLAYER_LEADERBOARD_POSITION(sLeaderboard, iParticipant) CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [TLG_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 CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [TLG_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_TLG, 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 TLG_PROCESS_REQ_LB_SORT_EVENT(PLAYER_INDEX piFromPlayer, ARCADE_GAMES_LEADERBOARD_STRUCT &sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS], TLG_PLAYER_BROADCAST_DATA &tlgPlayerBd[2],INT &serverBitset) // IF NOT NETWORK_IS_HOST_OF_THIS_SCRIPT() // CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [TLG_PROCESS_REQ_LB_SORT_EVENT] Exit as not host") // EXIT // ENDIF // // //UNUSED_PARAMETER(piFromPlayer) // INT iParticipant = NATIVE_TO_INT(NETWORK_GET_PARTICIPANT_INDEX(piFromPlayer)) // // TLG_SORT_SERVER_LEADERBOARD(tlgPlayerBd, sLeaderboard, iParticipant) // // CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [TLG_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 TLG_PROCESS_CLEAR_REQ_LB_SORT_EVENT(PLAYER_INDEX piFromPlayer, INT &serverBitset) // IF NOT NETWORK_IS_HOST_OF_THIS_SCRIPT() // CDEBUG1LN(DEBUG_MINIGAME, "{dsw} [TLG_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} [TLG_PROCESS_CLEAR_REQ_LB_SORT_EVENT] Clearing bit: ", iParticipant) // CLEAR_BIT(serverBitset, iParticipant) //ENDPROC /// 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], TLG_PLAYER_BROADCAST_DATA &tlgPlayerBd[2], BOOL &bReceived) UNUSED_PARAMETER(lbData) INT iCount SCRIPT_EVENT_DATA_CASINO_ARCADE_SEND_LEADERBOARD_EVENT EventDataLeaderboardSend SCRIPT_EVENT_DATA_TLG_INITIALS_ENTERED EventDataInitialsEntered // SCRIPT_EVENT_DATA_TLG_REQUEST_LB_SORT EventDataReqLbSort // SCRIPT_EVENT_DATA_TLG_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_TLG RELOOP ENDIF TLG_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_TLG_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)) TLG_PROCESS_INITIALS_ENTERED_EVENT(EventDataInitialsEntered.Details.FromPlayerIndex, sLeaderboard, tlgPlayerBd, EventDataInitialsEntered.iInitials) RELOOP ENDIF ENDIF ENDREPEAT 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, TLG_PLAYER_BROADCAST_DATA &lbPlayerBd[ciTLG_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) TLG_INITIALISE_SERVER_LEADERBOARD(lbHostData, iInitials, iScores, bReceived) lbData.bForceDefaultLeaderboard = FALSE ENDIF IF lbData.bDebugTestServerSort TLG_SORT_SERVER_LEADERBOARD(lbPlayerBd, lbHostData, PARTICIPANT_ID_TO_INT()) ENDIF ENDPROC #ENDIF //