void InitUserData(void) { char Idx; for (Idx = 0; Idx < PLAYER_COUNT; Idx++) { ALLBITS |= (1<<Idx); } if (READINTVALUE(UD_FIRSTRUN_FLAG) == FIRSTRUN_FLAG) { ReadUserData(); if (GetCharValue(UD_START_SAVE)) { RecoverPlayerData(); } if (GetCharValue(UD_UNSAVE_SCORE)) { SaveBetWinScore(); } } else { ClearUserData(); SetIntValue(UD_FIRSTRUN_FLAG, FIRSTRUN_FLAG); } #ifdef _NO_PRINT SetCharValue(UD_IF_PRINT, 0); #endif #ifdef _TEST_ #define Debug lite_printf //ClearUserData(); //SetIntValue(UD_FIRSTRUN_FLAG, FIRSTRUN_FLAG);- SetCharValue(UD_IF_PRINT, 0); //SetCharValue(UD_BETTIME, 5); //SetCharValue(UD_EXTRA_CODE_DIFFICULT, 1); // 外5门设定难度 //SetIntValue(UD_ROUNDLOSS_BOOM, 1000000); // 当轮输爆机 //SetIntValue(UD_STAGEWIN_BOOM, 20000000); // 当期max loss //SetIntValue(UD_STAGELOSS_BOOM, 300000000); // 当期max win // for (Idx = 0; Idx < UD_MAXCHAR_STATE; Idx++) { // Debug("%p = %d/%d\n", UserDataCharArray + Idx, READCHARVALUE(Idx), UserDataCharArray[Idx]); // } // for (Idx = 0; Idx < UD_MAXSHORT_STATE; Idx++) { // Debug("%p = %d/%d\n", UserDataShortArray + Idx, READSHORTVALUE(Idx), UserDataShortArray[Idx]); // } for (Idx = 0; Idx < UD_MAXINT_STATE; Idx++) { Debug("%p = %d/%d\n", UserDataIntArray + Idx, READINTVALUE(Idx), UserDataIntArray[Idx]); } // for (Idx = 0; Idx < UD_MAXLONGLONG_STATE; Idx++) { // Debug("%p = %d/", UserDataLongLongArray + Idx, READLONGLONGVALUE(Idx)); // Debug("%d\n", UserDataLongLongArray[Idx]); // } Debug("UUID:\n"); for (Idx = 0; Idx < USB_PLAYER_COUNT; Idx++) { Debug("%p:%d/%d\n", UserDataIntArray+UD_INVALID_INT+Idx, GetIntValue(UD_USB_UUID+Idx), READINTVALUE(UD_USB_UUID+Idx)); } SetIntValue(UD_USB_UUID + 5, 123456); SetIntValue(UD_USB_UUID + 6, 876543210); #endif }
// 切换 void OnSwitch(char Id) { char CurrentSwitch = GetCharValue(UD_BETSCORE_SWITCH + Id); if (++CurrentSwitch >= 3) { CurrentSwitch = 0; } SetCharValue(UD_BETSCORE_SWITCH + Id, CurrentSwitch); // 发灯 Set_LED(Id); Set_Sound(Id); }
void OnBet(char Id, unsigned char BetIdx) { char Idx; static short NewBetscores[EXTRA_COUNT]; char BetSwitch = GetCharValue(UD_BETSCORE_SWITCH + Id); short BetScore = SwitchScore[BetSwitch]; struct stUserInfo *pUser = GetUserInfo(Id); int Left,Right; int LeftTotalScore,CanBetScore; if (BetIdx == 4) { LeftTotalScore = GetIntValue(UD_TOTALSCORE + Id) - pUser->TotalBetScore; // 剩余总分 CanBetScore = MIN(LeftTotalScore, GetShortValue(UD_EXTRABET_MAX) - pUser->BetScore[BetIdx]); } else { Left = GetExtraSumBetScore(Id) + pUser->BetScore[EXTRA_COUNT-1] - pUser->TotalBetScore; // 总押分限制(不包含第4门) Right = GetShortValue(UD_EXTRABET_MAX) - pUser->BetScore[BetIdx]; // 单门押分限制 LeftTotalScore = GetIntValue(UD_TOTALSCORE + Id) - pUser->TotalBetScore; // 还剩余总分 CanBetScore = MIN(MIN(Left, Right), LeftTotalScore); } // 分数不够 if (CanBetScore <= 0) { return; } // 第一次押分要取最小押注和押分板押注间的最大者 if (!pUser->BetScore[BetIdx]) { if (GetShortValue(UD_EXTRABET_MIN) > SwitchScore[BetSwitch]) { BetScore = GetShortValue(UD_EXTRABET_MIN); } } // 可押分 if (BetScore > CanBetScore) { BetScore = CanBetScore; } // 押分限制 for (Idx = 0; Idx < EXTRA_COUNT; Idx++) { NewBetscores[Idx] = pUser->BetScore[Idx]; } NewBetscores[BetIdx] += BetScore; CalculateLimit(Id+1, NewBetscores); // 重新计算押分和 pUser->TotalBetScore = 0; for (Idx = 0; Idx < EXTRA_COUNT; Idx++) { pUser->TotalBetScore += pUser->BetScore[Idx]; } }
NS_IMETHODIMP nsPop3IncomingServer::GetDeferredToAccount(nsACString& aRetVal) { nsresult rv = GetCharValue("deferred_to_account", aRetVal); if (aRetVal.IsEmpty()) return rv; // We need to repair broken profiles that defer to hidden or invalid servers, // so find out if the deferred to account has a valid non-hidden server, and // if not, defer to the local folders inbox. nsCOMPtr<nsIMsgAccountManager> acctMgr = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID); bool invalidAccount = true; if (acctMgr) { nsCOMPtr<nsIMsgAccount> account; nsCOMPtr<nsIMsgIncomingServer> server; rv = acctMgr->GetAccount(aRetVal, getter_AddRefs(account)); if (account) { account->GetIncomingServer(getter_AddRefs(server)); if (server) server->GetHidden(&invalidAccount); } if (invalidAccount) { nsCOMPtr<nsIMsgIncomingServer> localServer; nsCOMPtr<nsIMsgAccount> localAccount; rv = acctMgr->GetLocalFoldersServer(getter_AddRefs(localServer)); NS_ENSURE_SUCCESS(rv, rv); // Try to copy any folders that have been stranded in the hidden account // into the local folders account. if (server) { nsCOMPtr<nsIMsgFolder> hiddenRootFolder; nsCOMPtr<nsIMsgFolder> localFoldersRoot; server->GetRootFolder(getter_AddRefs(hiddenRootFolder)); localServer->GetRootFolder(getter_AddRefs(localFoldersRoot)); if (hiddenRootFolder && localFoldersRoot) { // We're going to iterate over the folders in Local Folders-1, // though I suspect only the Inbox will have messages. I don't // think Sent Mail could end up here, but if any folders have // messages, might as well copy them to the real Local Folders // account. nsCOMPtr<nsISimpleEnumerator> enumerator; rv = hiddenRootFolder->GetSubFolders(getter_AddRefs(enumerator)); if (NS_SUCCEEDED(rv)) { bool hasMore; while (NS_SUCCEEDED(enumerator->HasMoreElements(&hasMore)) && hasMore) { nsCOMPtr<nsISupports> item; enumerator->GetNext(getter_AddRefs(item)); nsCOMPtr<nsIMsgFolder> subFolder(do_QueryInterface(item)); if (subFolder) { nsCOMPtr<nsIMsgDatabase> subFolderDB; subFolder->GetMsgDatabase(getter_AddRefs(subFolderDB)); if (subFolderDB) { // Copy any messages in this sub-folder of the hidden // account to the corresponding folder in Local Folders. RefPtr<nsMsgKeyArray> keys = new nsMsgKeyArray; rv = subFolderDB->ListAllKeys(keys); nsCOMPtr<nsIMutableArray> hdrsToCopy(do_CreateInstance(NS_ARRAY_CONTRACTID)); MsgGetHeadersFromKeys(subFolderDB, keys->m_keys, hdrsToCopy); uint32_t numHdrs = 0; if (hdrsToCopy) hdrsToCopy->GetLength(&numHdrs); if (numHdrs) { // Look for a folder with the same name in Local Folders. nsCOMPtr<nsIMsgFolder> dest; nsString folderName; subFolder->GetName(folderName); localFoldersRoot->GetChildNamed(folderName, getter_AddRefs(dest)); if (dest) dest->CopyMessages(subFolder, hdrsToCopy, false, nullptr, nullptr, false,false); // Should we copy the folder if the dest doesn't exist? } } } } } } } rv = acctMgr->FindAccountForServer(localServer, getter_AddRefs(localAccount)); NS_ENSURE_SUCCESS(rv, rv); if (!localAccount) return NS_ERROR_NOT_AVAILABLE; localAccount->GetKey(aRetVal); // Can't call SetDeferredToAccount because it calls GetDeferredToAccount. return SetCharValue("deferred_to_account", aRetVal); } } return rv; }
void OnBetAll(char Id, unsigned long Key) { char BetIdx; char BetSwitch = GetCharValue(UD_BETSCORE_SWITCH + Id) + GetShortValue(UD_SWITCH_MIN); int BetScore = SwitchScore[BetSwitch]; static short NewBetscores[EXTRA_COUNT]; struct stUserInfo *pUser = GetUserInfo(Id); int Left,Right; int LeftTotalScore,CanBetScore; // 押分限制 for (BetIdx = 0; BetIdx < EXTRA_COUNT; BetIdx++) { NewBetscores[BetIdx] = pUser->BetScore[BetIdx]; } Key &= GetCanBetFlag(); while (Key) { BetIdx = bsr32(Key); Key &= ~(1<<BetIdx); if (BetIdx == 4) { LeftTotalScore = GetIntValue(UD_TOTALSCORE + Id) - pUser->TotalBetScore; // 剩余总分 CanBetScore = MIN(LeftTotalScore, GetShortValue(UD_EXTRABET_MAX) - NewBetscores[BetIdx]); } else { Left = GetExtraSumBetScore(Id) + NewBetscores[4] - pUser->TotalBetScore; // 总押分限制(不包含第4门) Right = GetShortValue(UD_EXTRABET_MAX) - NewBetscores[BetIdx]; // 单门押分限制 LeftTotalScore = GetIntValue(UD_TOTALSCORE + Id) - pUser->TotalBetScore; // 还剩余总分 CanBetScore = MIN(MIN(Left, Right), LeftTotalScore); } // 分数不够 if (CanBetScore <= 0) { continue; } // 第一次押分要取最小押注和押分板押注间的最大者 if (!NewBetscores[BetIdx]) { if (GetShortValue(UD_EXTRABET_MIN) > BetScore) { BetScore = GetShortValue(UD_EXTRABET_MIN); } } // 可押分 if (BetScore > CanBetScore) { BetScore = CanBetScore; } pUser->TotalBetScore -= pUser->BetScore[BetIdx]; NewBetscores[BetIdx] += BetScore; // 是否可押成功 for (char k = 0; k < BetIdx; k++) { pUser->BetScore[k] = NewBetscores[k]; } CalculateLimit(Id+1, NewBetscores); NewBetscores[BetIdx] = pUser->BetScore[BetIdx]; // 如果为负,则为0 if (pUser->BetScore[BetIdx] < 0) { // SendUSB_Debug("ID(%d)->%d:%d", Id, BetIdx, pUser->BetScore[BetIdx]); pUser->BetScore[BetIdx] = 0; } pUser->TotalBetScore += pUser->BetScore[BetIdx]; } // 重新计算押分和 pUser->TotalBetScore = 0; for (BetIdx = 0; BetIdx < EXTRA_COUNT; BetIdx++) { pUser->TotalBetScore += pUser->BetScore[BetIdx]; } // 总押分不能超过总分 if (pUser->TotalBetScore > GetIntValue(UD_TOTALSCORE+Id)) { // SendUSB_Debug("ID(%d) bet>total %d:%d", Id, pUser->TotalBetScore, GetIntValue(UD_TOTALSCORE+Id)); for (BetIdx = 0; BetIdx < EXTRA_COUNT; BetIdx++) { pUser->BetScore[BetIdx] = 0; } pUser->TotalBetScore = 0; } }