gpt4 book ai didi

php - 有先决条件的任务系统

转载 作者:行者123 更新时间:2023-11-30 23:36:11 25 4
gpt4 key购买 nike

我正在为我的网站编写一个任务系统,它的工作原理与您在 MMORPG 中找到的任何系统非常相似。我已经完成了整个工作,但我真的需要加快速度,因为我的编码效率很低。不是因为我不会编码,而是因为我不确定如何去做。

基本上我想显示用户可用的所有任务。有些任务没有要求,有些有要求。要查看任务是否已经完成,以及任务是否可用,您可以检查 questuser 表中的 questuserCompleted 值。如果它是 1,那么它就完成了。

这是我的表格。我遗漏了不相关的东西。

任务表 - 保存所有任务数据

questID
questNPC
Where they get the Quest from
questPreReq
refers to a quest they would have needed to comple to get this one

questuser 表 - 保存用户已接受的所有任务,无论是否完成

questuserID
questuserUser
User's ID
questuserQuest
refers to the ID of the quest from the quest table
questuserCompleted
0 is in progress, 1 is complete

绝对有比我现在更好的方法。我通常在这样的事情上效率更高,但由于我以前从未编写过这样的代码,所以我不太确定如何去做。

基本上它只是循环遍历每个任务,并使用 if 语句检查 questuserCompleted。一旦开始有很多任务,每次加载页面都会变得非常慢。

    function displayAvailable($npc  = 0){

$completed[] = 0;
$notCompleted = array();
$query=mysql_query("
SELECT a.questID, a.questPreReq, a.questTitle, b.questuserCompleted, a.questText , a.questNPC
FROM quest a
LEFT JOIN questuser b ON a.questID = b.questuserQuest AND b.questuserUser = '".$this->userID."'
ORDER BY a.questID");

$comments = $this->ProcessRowSet($query);
$num = mysql_num_rows($query);
if($num){
foreach ($comments as $c){
if($c['questuserCompleted']){
$completed[] = $c['questID'];
}else{
$notCompleted[] = $c['questID'];
}

if(in_array($c['questPreReq'], $completed) && !in_array($c['questID'], $completed) && $c['questuserCompleted'] != '0'){
if($npc == 0 || $c['questNPC'] == $npc){
$count++;
$return .= "<p><a href=\"?action=new&id=".$c['questID']."\">".$c['questTitle']."</a></p>";
}
}
}
}
if(!$count){
$return = "You have no available quests";
}
return $return;
}

感谢您的帮助。

最佳答案

救援的子查询

SELECT a.questID, a.questPreReq, a.questTitle, a.questText , a.questNPC
FROM quest a
WHERE a.questPreReq IS NULL
OR a.questPreReq IN (SELECT questuserQuest FROM questuser WHERE questuserUser = 'UserID' AND questuseCompleted = 1)
ORDER BY a.questID

所以你让数据库为你整理,这应该是超快的。

查询没有排除用户已经完成的任务,我把它留作练习,因为我正在我的智能手机上写; )

关于php - 有先决条件的任务系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7182635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com