Пример #1
0
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
}
Пример #2
0
// 切换
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);
}
Пример #3
0
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;
}
Пример #5
0
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;
	}
}