我想为高级帐户添加另一个选项。目前你可以每2天更改一次你的角色,但是我想添加另一张支票,让高级用户每12小时一次。它们是根据PREMIUM
中的另一个表格确定的strAccountID
如果它们不是高级版,则该表中的帐户中不会有任何行。
这是我目前的PHP功能,适用于所有用户,允许他们每2天进行一次。
private function doProcessClassChangeFormD()
{
$db = $this->database[GDB];
$character = $this->site->SanitizeName($_POST['character']);
$num_rows = $db->doQuery('SELECT bNation FROM ACCOUNT_CHAR WHERE strAccountID = ? AND ? IN(strCharID1, strCharID2, strCharID3)', $_SESSION['strAccountID'], $character);
if ($num_rows == -1)
{
$db->GetError(__file__, __line__);
$this->m_ccError = Template::GetLangVar('DB_ERROR');
return false;
}
else if ($num_rows == 0)
{
$this->m_ccError = Template::GetLangVar('CC_INVALID_ACCOUNT');
return false;
}
$row = $db->doRead();
$nation = $row['bNation'];
$num_rows = $db->doQuery('SELECT Class, Race, Strong, Sta, Dex, Intel, Cha, Points, TransferTime FROM USERDATA WHERE strUserId = ? AND (TransferTime < DATEADD(DAY,-2,GETDATE()) OR TransferTime IS NULL) and zone<>199 and authority<>255', $character);
if ($num_rows == -1)
{
$db->GetError(__file__, __line__);
$this->m_ccError = Template::GetLangVar('DB_ERROR');
return false;
}
else if ($num_rows == 0)
{
$this->m_ccError = Template::GetLangVar('CC_RECENT_TRANSFER');
return false;
}
$row = $db->doRead();
$oldRace = $row['Race'];
$oldClass = $row['Class'];
$newRace = intval($_POST['race']);
$newClass = intval($_POST['class']);
$pCT = new ClassTransfer($nation, $oldClass, $oldRace, $newClass, $newRace);
if (!($res = $pCT->canChangeClass()))
{
$this->m_ccError = $pCT->GetError(__file__, __line__);
return false;
}
$newClass = $res[0];
$newRace = $res[1];
$free = $row['Points'] + $row['Strong'] + $row['Sta'] + $row['Dex'] + $row['Intel'] + $row['Cha'];
$newStats = $pCT->getStarterStats($newClass, $newRace);
for ($i = 0; $i < 5; $i++)
$free -= $newStats[$i];
if ($free > 255)
{
$_SESSION['bClassTransfer'] = true;
$_SESSION['strUserId'] = $character;
$_SESSION['bNewRace'] = $newRace;
$_SESSION['bNewClass'] = $newClass;
$_SESSION['bStrong'] = $newStats[KO_STR];
$_SESSION['bStamina'] = $newStats[KO_STA];
$_SESSION['bDexterity'] = $newStats[KO_DEX];
$_SESSION['bIntelligence'] = $newStats[KO_INT];
$_SESSION['bCharisma'] = $newStats[KO_CHA];
$_SESSION['bAvailable'] = $free;
$this->m_bSelectPoints = true;
return false;
}
$newStats[5] = $free;
return $this->doExecuteClassChangeD($character, $newClass, $newRace, $newStats);
}
我尝试了几种方法但没有成功。我怎么能做到这一点?
答案 0 :(得分:1)
在查询中使用LEFT JOIN
PREMIUM
表来检查传输时间。然后使用该表中的匹配条件化您与之比较的时间。
$num_rows = $db->doQuery('
SELECT Class, Race, Strong, Sta, Dex, Intel, Cha, Points, TransferTime
FROM USERDATA u
LEFT JOIN PREMIUM p ON p.strAccountID = u.strUserId
WHERE strUserId = ?
AND (TransferTime < IF(p.strAccountId IS NULL,
DATEADD(DAY,-2,GETDATE()),
DATE_SUB(NOW(), INTERVAL 12 HOUR)))
OR TransferTime IS NULL)
AND zone<>199 and authority<>255', $character);
答案 1 :(得分:0)
最简单的方法是查询高级表:
从PREMIUM中选择strAccountID,其中strAccountID等于当前登录用户(存储在某个会话/ cookie中?)
从那里做一个简单的if语句。如果上面的select语句返回一行并且时间大于12小时,则允许他们更改字符。
在此处执行以上操作:
$num_rows = $db->doQuery('SELECT Class, Race, Strong, Sta, Dex, Intel, Cha, Points, TransferTime FROM USERDATA WHERE strUserId = ? AND (TransferTime < DATEADD(DAY,-2,GETDATE()) OR TransferTime IS NULL) and zone<>199 and authority<>255', $character);
然后,您需要做的就是,如果此人是保费,则将上述声明更改为仅12小时而不是2天。如果它们不是溢价,那么请在2天后离开。