增加(__sm_公会战奖励表),用着领取公会战每日奖励用途

This commit is contained in:
尚美 2025-09-08 20:50:03 +08:00
parent 1fb4cd7404
commit 591d80a04c
2 changed files with 55 additions and 21 deletions

View File

@ -118,7 +118,7 @@ void GuildWarManager::LoadConfiguration()
);
// 加载当前公会战状态
QueryResult result = CharacterDatabase.Query("SELECT guild1,guild2,data FROM _会战记录表 WHERE guid = 1");
QueryResult result = CharacterDatabase.Query("SELECT guild1,guild2,data FROM __sm_公会战记录表 WHERE guid = 1");
if (result)
{
Field* fields = result->Fetch();
@ -128,7 +128,7 @@ void GuildWarManager::LoadConfiguration()
}
else
{
CharacterDatabase.Execute("INSERT INTO _会战记录表 (guid) VALUES (1)");
CharacterDatabase.Execute("INSERT INTO __sm_公会战记录表 (guid) VALUES (1)");
}
}
@ -413,7 +413,7 @@ void GuildWarManager::StopWarEvent(uint16 eventId)
m_remainingTime = sSwitch->GetValue(GUILD_WAR_OCCUPATION_TIME);
// 更新数据库
CharacterDatabase.Execute("UPDATE _会战记录表 SET guild1 = {}, guild2 = {}, data = {} WHERE guid = 1",
CharacterDatabase.Execute("UPDATE __sm_公会战记录表 SET guild1 = {}, guild2 = {}, data = {} WHERE guid = 1",
m_defenderGuildId, m_attackerGuildId, time(nullptr));
}

View File

@ -140,8 +140,7 @@ void GuildWarNPC::ShowWarApplicationUI(Player* player, Creature* creature)
"|TInterface\\RAIDFRAME\\ReadyCheck-Ready.blp:16|t" :
"|TInterface\\RAIDFRAME\\ReadyCheck-NotReady.blp:16|t";
itemInfo = "|cFF0000CC申请攻城需要物品:|r\n|TInterface\\Icons\\" +
iconName + ".blp:30|t" + requiredItem->Name1 + " x1 " + statusIcon;
itemInfo = "|cFF0000CC申请攻城需要物品:|r\n|TInterface\\Icons\\" + iconName + ".blp:30|t" + requiredItem->Name1 + " x1 " + statusIcon;
}
else
{
@ -223,7 +222,7 @@ void GuildWarNPC::HandleWarApplication(Player* player, Creature* creature)
sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, announcement);
// 更新数据库
CharacterDatabase.Execute("UPDATE _会战记录表 SET guild1 = {}, guild2 = {}, data = {} WHERE guid = 1",
CharacterDatabase.Execute("UPDATE __sm_公会战记录表 SET guild1 = {}, guild2 = {}, data = {} WHERE guid = 1",
sGuildWarManager->GetDefenderGuildId(),
sGuildWarManager->GetAttackerGuildId(),
time(nullptr));
@ -259,7 +258,7 @@ void GuildWarNPC::HandleWarApplication(Player* player, Creature* creature)
}
// 更新数据库
CharacterDatabase.Execute("UPDATE _会战记录表 SET guild1 = {}, guild2 = {} WHERE guid = 1",
CharacterDatabase.Execute("UPDATE __sm_公会战记录表 SET guild1 = {}, guild2 = {} WHERE guid = 1",
sGuildWarManager->GetDefenderGuildId(),
sGuildWarManager->GetAttackerGuildId());
}
@ -300,32 +299,67 @@ void GuildWarNPC::HandleDailyReward(Player* player, Creature* creature)
return;
}
// 使用现有的成员变量inguildtime 和 lqguildtime
if (!playerData->inguildtime || playerData->inguildtime >= sGuildWarManager->GetDefenderGuildId())
// 检查玩家是否在公会战开始前就已经加入公会
QueryResult joinTimeResult = CharacterDatabase.Query(Acore::StringFormat(
"SELECT TimeStamp FROM guild_eventlog WHERE guildid = {} AND PlayerGuid1 = {} AND EventType = 2 ORDER BY TimeStamp ASC LIMIT 1",
player->GetGuildId(),
player->GetGUID().GetCounter()
));
if (!joinTimeResult)
{
ChatHandler(player->GetSession()).PSendSysMessage("无法获取入会时间信息");
ShowDailyRewardUI(player, creature);
return;
}
uint32 joinTime = joinTimeResult->Fetch()[0].Get<uint32>();
uint32 WarStartTime = sGuildWarManager->GetWarStartTime();
if (joinTime >= WarStartTime)
{
ChatHandler(player->GetSession()).PSendSysMessage("公会战之前加入公会的玩家才可以领取");
ShowDailyRewardUI(player, creature);
return;
}
// 检查冷却时间
// 检查冷却时间 - 查询新的公会奖励记录表
time_t now = time(nullptr);
int32 remainingTime = playerData->lqguildtime + sSwitch->GetValue(GUILD_WAR_DAILY_REWARD_COOLDOWN) - now;
QueryResult rewardResult = CharacterDatabase.Query(Acore::StringFormat(
"SELECT 最后领取时间 FROM __sm_公会战奖励表 WHERE 玩家GUID = {} AND 公会ID = {} AND 奖励类型 = 'DAILY_REWARD'",
player->GetGUID().GetCounter(),
player->GetGuildId()
));
if (remainingTime > 0)
if (rewardResult)
{
std::string timeString = secsToTimeString(remainingTime, true);
ChatHandler(player->GetSession()).PSendSysMessage("还需要'{}'才可以领取奖励", timeString.c_str());
ShowDailyRewardUI(player, creature);
return;
uint32 lastRewardTime = rewardResult->Fetch()[0].Get<uint32>();
int32 remainingTime = lastRewardTime + sSwitch->GetValue(GUILD_WAR_DAILY_REWARD_COOLDOWN) - now;
if (remainingTime > 0)
{
std::string timeString = secsToTimeString(remainingTime, true);
ChatHandler(player->GetSession()).PSendSysMessage("还需要'{}'才可以领取奖励", timeString.c_str());
ShowDailyRewardUI(player, creature);
return;
}
}
// 发放奖励
// 发放奖励
const GuildWarZoneConfig* config = sGuildWarManager->FindZoneConfig(1);
if (config && config->rewardItemId)
{
player->AddItem(config->rewardItemId, 1);
playerData->lqguildtime = now; // 使用现有变量
// 更新或插入奖励记录
CharacterDatabase.Execute(Acore::StringFormat(
"INSERT INTO __sm_公会战奖励表 (玩家GUID, 公会ID, 奖励类型, 最后领取时间) VALUES ({}, {}, 'DAILY_REWARD', {}) "
"ON DUPLICATE KEY UPDATE 最后领取时间 = {}",
player->GetGUID().GetCounter(),
player->GetGuildId(),
now,
now
));
ChatHandler(player->GetSession()).PSendSysMessage("成功领取每日奖励!");
}
@ -333,7 +367,7 @@ void GuildWarNPC::HandleDailyReward(Player* player, Creature* creature)
}
// ========================================
// GuildWarPlayerScript 实现
// GuildWarPlayerScript 实现
// ========================================
void GuildWarPlayerScript::OnPlayerUpdateArea(Player* player, uint32 oldArea, uint32 newArea)
@ -518,10 +552,10 @@ void GuildWarEventScript::OnStop(uint16 EventID)
void GuildWarWorldScript::OnUpdate(uint32 diff)
{
updateCounter += diff;
if (updateCounter >= 1000) // 1000毫秒 = 1秒
if (updateCounter >= 1000) // 1000毫秒
{
sGuildWarManager->UpdateWarStatus(); // 调用工会战更新逻辑
updateCounter = 0; // ✅ 在这里重置
updateCounter = 0; // ✅ 重置
}
}