mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-17 22:51:30 +00:00
Merge pull request #262 from addtheice/RunQueryToDatabaseQuery_zone_client
Run query to database query zone client
This commit is contained in:
commit
d86912a7bb
311
zone/client.cpp
311
zone/client.cpp
@ -4031,40 +4031,27 @@ void Client::KeyRingList()
|
|||||||
|
|
||||||
bool Client::IsDiscovered(uint32 itemid) {
|
bool Client::IsDiscovered(uint32 itemid) {
|
||||||
|
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
std::string query = StringFormat("SELECT count(*) FROM discovered_items WHERE item_id = '%lu'", itemid);
|
||||||
char *query = 0;
|
auto results = database.QueryDatabase(query);
|
||||||
MYSQL_RES *result;
|
if (!results.Success()) {
|
||||||
MYSQL_ROW row;
|
std::cerr << "Error in IsDiscovered query '" << query << "' " << results.ErrorMessage() << std::endl;
|
||||||
|
|
||||||
if (database.RunQuery(query, MakeAnyLenString(&query, "SELECT count(*) FROM discovered_items WHERE item_id = '%lu'", itemid), errbuf, &result))
|
|
||||||
{
|
|
||||||
row = mysql_fetch_row(result);
|
|
||||||
if (atoi(row[0]))
|
|
||||||
{
|
|
||||||
mysql_free_result(result);
|
|
||||||
safe_delete_array(query);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cerr << "Error in IsDiscovered query '" << query << "' " << errbuf << std::endl;
|
|
||||||
}
|
|
||||||
mysql_free_result(result);
|
|
||||||
safe_delete_array(query);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto row = results.begin();
|
||||||
|
if (!atoi(row[0]))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void Client::DiscoverItem(uint32 itemid) {
|
void Client::DiscoverItem(uint32 itemid) {
|
||||||
|
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
std::string query = StringFormat("INSERT INTO discovered_items "
|
||||||
char* query = 0;
|
"SET item_id = %lu, char_name = '%s', "
|
||||||
MYSQL_RES *result;
|
"discovered_date = UNIX_TIMESTAMP(), account_status = %i",
|
||||||
if (database.RunQuery(query,MakeAnyLenString(&query, "INSERT INTO discovered_items SET item_id=%lu, char_name='%s', discovered_date=UNIX_TIMESTAMP(), account_status=%i", itemid, GetName(), Admin()), errbuf, &result))
|
itemid, GetName(), Admin());
|
||||||
{
|
auto results = database.QueryDatabase(query);
|
||||||
mysql_free_result(result);
|
|
||||||
}
|
|
||||||
safe_delete_array(query);
|
|
||||||
|
|
||||||
parse->EventPlayer(EVENT_DISCOVER_ITEM, this, "", itemid);
|
parse->EventPlayer(EVENT_DISCOVER_ITEM, this, "", itemid);
|
||||||
}
|
}
|
||||||
@ -5236,57 +5223,41 @@ const bool Client::IsMQExemptedArea(uint32 zoneID, float x, float y, float z) co
|
|||||||
void Client::SendRewards()
|
void Client::SendRewards()
|
||||||
{
|
{
|
||||||
std::vector<ClientReward> rewards;
|
std::vector<ClientReward> rewards;
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
std::string query = StringFormat("SELECT reward_id, amount "
|
||||||
char* query = 0;
|
"FROM account_rewards "
|
||||||
MYSQL_RES *result;
|
"WHERE account_id = %i "
|
||||||
MYSQL_ROW row;
|
"ORDER BY reward_id", AccountID());
|
||||||
|
auto results = database.QueryDatabase(query);
|
||||||
|
if (!results.Success()) {
|
||||||
|
LogFile->write(EQEMuLog::Error, "Error in Client::SendRewards(): %s (%s)", query.c_str(), results.ErrorMessage().c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(database.RunQuery(query,MakeAnyLenString(&query,"SELECT reward_id, amount FROM"
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
" account_rewards WHERE account_id=%i ORDER by reward_id", AccountID()),
|
|
||||||
errbuf,&result))
|
|
||||||
{
|
|
||||||
while((row = mysql_fetch_row(result)))
|
|
||||||
{
|
|
||||||
ClientReward cr;
|
ClientReward cr;
|
||||||
cr.id = atoi(row[0]);
|
cr.id = atoi(row[0]);
|
||||||
cr.amount = atoi(row[1]);
|
cr.amount = atoi(row[1]);
|
||||||
rewards.push_back(cr);
|
rewards.push_back(cr);
|
||||||
}
|
}
|
||||||
mysql_free_result(result);
|
|
||||||
safe_delete_array(query);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LogFile->write(EQEMuLog::Error, "Error in Client::SendRewards(): %s (%s)", query, errbuf);
|
|
||||||
safe_delete_array(query);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(rewards.size() > 0)
|
if(rewards.size() == 0)
|
||||||
{
|
return;
|
||||||
|
|
||||||
EQApplicationPacket *vetapp = new EQApplicationPacket(OP_VetRewardsAvaliable, (sizeof(InternalVeteranReward) * rewards.size()));
|
EQApplicationPacket *vetapp = new EQApplicationPacket(OP_VetRewardsAvaliable, (sizeof(InternalVeteranReward) * rewards.size()));
|
||||||
uchar *data = vetapp->pBuffer;
|
uchar *data = vetapp->pBuffer;
|
||||||
for(int i = 0; i < rewards.size(); ++i)
|
for(int i = 0; i < rewards.size(); ++i) {
|
||||||
{
|
|
||||||
InternalVeteranReward *ivr = (InternalVeteranReward*)data;
|
InternalVeteranReward *ivr = (InternalVeteranReward*)data;
|
||||||
ivr->claim_id = rewards[i].id;
|
ivr->claim_id = rewards[i].id;
|
||||||
ivr->number_available = rewards[i].amount;
|
ivr->number_available = rewards[i].amount;
|
||||||
std::list<InternalVeteranReward>::iterator iter = zone->VeteranRewards.begin();
|
auto iter = zone->VeteranRewards.begin();
|
||||||
while(iter != zone->VeteranRewards.end())
|
for (;iter != zone->VeteranRewards.end(); ++iter)
|
||||||
{
|
|
||||||
if((*iter).claim_id == rewards[i].id)
|
if((*iter).claim_id == rewards[i].id)
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
++iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(iter != zone->VeteranRewards.end())
|
if(iter != zone->VeteranRewards.end()) {
|
||||||
{
|
|
||||||
InternalVeteranReward ivro = (*iter);
|
InternalVeteranReward ivro = (*iter);
|
||||||
ivr->claim_count = ivro.claim_count;
|
ivr->claim_count = ivro.claim_count;
|
||||||
for(int x = 0; x < ivro.claim_count; ++x)
|
for(int x = 0; x < ivro.claim_count; ++x) {
|
||||||
{
|
|
||||||
ivr->items[x].item_id = ivro.items[x].item_id;
|
ivr->items[x].item_id = ivro.items[x].item_id;
|
||||||
ivr->items[x].charges = ivro.items[x].charges;
|
ivr->items[x].charges = ivro.items[x].charges;
|
||||||
strcpy(ivr->items[x].item_name, ivro.items[x].item_name);
|
strcpy(ivr->items[x].item_name, ivro.items[x].item_name);
|
||||||
@ -5295,12 +5266,11 @@ void Client::SendRewards()
|
|||||||
|
|
||||||
data += sizeof(InternalVeteranReward);
|
data += sizeof(InternalVeteranReward);
|
||||||
}
|
}
|
||||||
|
|
||||||
FastQueuePacket(&vetapp);
|
FastQueuePacket(&vetapp);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool Client::TryReward(uint32 claim_id)
|
bool Client::TryReward(uint32 claim_id) {
|
||||||
{
|
|
||||||
//Make sure we have an open spot
|
//Make sure we have an open spot
|
||||||
//Make sure we have it in our acct and count > 0
|
//Make sure we have it in our acct and count > 0
|
||||||
//Make sure the entry was found
|
//Make sure the entry was found
|
||||||
@ -5310,142 +5280,89 @@ bool Client::TryReward(uint32 claim_id)
|
|||||||
//save
|
//save
|
||||||
uint32 free_slot = 0xFFFFFFFF;
|
uint32 free_slot = 0xFFFFFFFF;
|
||||||
|
|
||||||
for(int i = EmuConstants::GENERAL_BEGIN; i <= EmuConstants::GENERAL_END; ++i)
|
for(int i = EmuConstants::GENERAL_BEGIN; i <= EmuConstants::GENERAL_END; ++i) {
|
||||||
{
|
|
||||||
ItemInst *item = GetInv().GetItem(i);
|
ItemInst *item = GetInv().GetItem(i);
|
||||||
if(!item)
|
if(!item) {
|
||||||
{
|
|
||||||
free_slot = i;
|
free_slot = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(free_slot == 0xFFFFFFFF)
|
if(free_slot == 0xFFFFFFFF)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
char errbuf[MYSQL_ERRMSG_SIZE];
|
||||||
char* query = 0;
|
std::string query = StringFormat("SELECT amount FROM account_rewards "
|
||||||
MYSQL_RES *result;
|
"WHERE account_id = %i AND reward_id = %i",
|
||||||
MYSQL_ROW row;
|
AccountID(), claim_id);
|
||||||
uint32 amt = 0;
|
auto results = database.QueryDatabase(query);
|
||||||
|
if (!results.Success()) {
|
||||||
if(database.RunQuery(query,MakeAnyLenString(&query,"SELECT amount FROM"
|
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str());
|
||||||
" account_rewards WHERE account_id=%i AND reward_id=%i", AccountID(), claim_id),
|
|
||||||
errbuf,&result))
|
|
||||||
{
|
|
||||||
row = mysql_fetch_row(result);
|
|
||||||
if(row)
|
|
||||||
{
|
|
||||||
amt = atoi(row[0]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mysql_free_result(result);
|
|
||||||
safe_delete_array(query);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
mysql_free_result(result);
|
|
||||||
safe_delete_array(query);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query, errbuf);
|
|
||||||
safe_delete_array(query);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (results.RowCount() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto row = results.begin();
|
||||||
|
|
||||||
|
uint32 amt = atoi(row[0]);
|
||||||
if(amt == 0)
|
if(amt == 0)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
std::list<InternalVeteranReward>::iterator iter = zone->VeteranRewards.begin();
|
std::list<InternalVeteranReward>::iterator iter = zone->VeteranRewards.begin();
|
||||||
while(iter != zone->VeteranRewards.end())
|
for (; iter != zone->VeteranRewards.end(); ++row)
|
||||||
{
|
|
||||||
if((*iter).claim_id == claim_id)
|
if((*iter).claim_id == claim_id)
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
++iter;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(iter == zone->VeteranRewards.end())
|
if(iter == zone->VeteranRewards.end())
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
if(amt == 1)
|
if(amt == 1) {
|
||||||
{
|
query = StringFormat("DELETE FROM account_rewards "
|
||||||
if(!database.RunQuery(query,MakeAnyLenString(&query,"DELETE FROM"
|
"WHERE account_id = %i AND reward_id = %i",
|
||||||
" account_rewards WHERE account_id=%i AND reward_id=%i", AccountID(), claim_id),
|
AccountID(), claim_id);
|
||||||
errbuf))
|
auto results = database.QueryDatabase(query);
|
||||||
{
|
if(!results.Success())
|
||||||
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query, errbuf);
|
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str());
|
||||||
safe_delete_array(query);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
safe_delete_array(query);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(!database.RunQuery(query,MakeAnyLenString(&query,"UPDATE account_rewards SET amount=(amount-1)"
|
|
||||||
" WHERE account_id=%i AND reward_id=%i", AccountID(), claim_id),
|
|
||||||
errbuf))
|
|
||||||
{
|
|
||||||
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query, errbuf);
|
|
||||||
safe_delete_array(query);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
safe_delete_array(query);
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
query = StringFormat("UPDATE account_rewards SET amount = (amount-1) "
|
||||||
|
"WHERE account_id = %i AND reward_id = %i",
|
||||||
|
AccountID(), claim_id);
|
||||||
|
auto results = database.QueryDatabase(query);
|
||||||
|
if(!results.Success())
|
||||||
|
LogFile->write(EQEMuLog::Error, "Error in Client::TryReward(): %s (%s)", query.c_str(), results.ErrorMessage().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
InternalVeteranReward ivr = (*iter);
|
InternalVeteranReward ivr = (*iter);
|
||||||
ItemInst *claim = database.CreateItem(ivr.items[0].item_id, ivr.items[0].charges);
|
ItemInst *claim = database.CreateItem(ivr.items[0].item_id, ivr.items[0].charges);
|
||||||
if(claim)
|
if(!claim) {
|
||||||
{
|
Save();
|
||||||
bool lore_conflict = false;
|
return true;
|
||||||
if(CheckLoreConflict(claim->GetItem()))
|
|
||||||
{
|
|
||||||
lore_conflict = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool lore_conflict = CheckLoreConflict(claim->GetItem());
|
||||||
|
|
||||||
for(int y = 1; y < 8; y++)
|
for(int y = 1; y < 8; y++)
|
||||||
{
|
if(ivr.items[y].item_id && claim->GetItem()->ItemClass == 1) {
|
||||||
if(ivr.items[y].item_id)
|
|
||||||
{
|
|
||||||
if(claim->GetItem()->ItemClass == 1)
|
|
||||||
{
|
|
||||||
ItemInst *item_temp = database.CreateItem(ivr.items[y].item_id, ivr.items[y].charges);
|
ItemInst *item_temp = database.CreateItem(ivr.items[y].item_id, ivr.items[y].charges);
|
||||||
if(item_temp)
|
if(item_temp) {
|
||||||
{
|
if(CheckLoreConflict(item_temp->GetItem())) {
|
||||||
if(CheckLoreConflict(item_temp->GetItem()))
|
|
||||||
{
|
|
||||||
lore_conflict = true;
|
lore_conflict = true;
|
||||||
DuplicateLoreMessage(ivr.items[y].item_id);
|
DuplicateLoreMessage(ivr.items[y].item_id);
|
||||||
}
|
}
|
||||||
claim->PutItem(y-1, *item_temp);
|
claim->PutItem(y-1, *item_temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(lore_conflict)
|
if(lore_conflict) {
|
||||||
{
|
|
||||||
safe_delete(claim);
|
safe_delete(claim);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
PutItemInInventory(free_slot, *claim);
|
PutItemInInventory(free_slot, *claim);
|
||||||
SendItemPacket(free_slot, claim, ItemPacketTrade);
|
SendItemPacket(free_slot, claim, ItemPacketTrade);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Save();
|
Save();
|
||||||
return true;
|
return true;
|
||||||
@ -7805,41 +7722,31 @@ void Client::SendFactionMessage(int32 tmpvalue, int32 faction_id, int32 totalval
|
|||||||
|
|
||||||
void Client::LoadAccountFlags()
|
void Client::LoadAccountFlags()
|
||||||
{
|
{
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
|
||||||
char *query = 0;
|
|
||||||
MYSQL_RES *result;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
|
|
||||||
accountflags.clear();
|
accountflags.clear();
|
||||||
MakeAnyLenString(&query, "SELECT p_flag, p_value FROM account_flags WHERE p_accid = '%d'", account_id);
|
std::string query = StringFormat("SELECT p_flag, p_value "
|
||||||
if(database.RunQuery(query, strlen(query), errbuf, &result))
|
"FROM account_flags WHERE p_accid = '%d'",
|
||||||
{
|
account_id);
|
||||||
while(row = mysql_fetch_row(result))
|
auto results = database.QueryDatabase(query);
|
||||||
{
|
if (!results.Success()) {
|
||||||
std::string fname(row[0]);
|
std::cerr << "Error in LoadAccountFlags query '" << query << "' " << results.ErrorMessage() << std::endl;
|
||||||
std::string fval(row[1]);
|
return;
|
||||||
accountflags[fname] = fval;
|
|
||||||
}
|
|
||||||
mysql_free_result(result);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cerr << "Error in LoadAccountFlags query '" << query << "' " << errbuf << std::endl;
|
|
||||||
}
|
|
||||||
safe_delete_array(query);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::SetAccountFlag(std::string flag, std::string val)
|
for (auto row = results.begin(); row != results.end(); ++row)
|
||||||
{
|
accountflags[row[0]] = row[1];
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
}
|
||||||
char *query = 0;
|
|
||||||
|
void Client::SetAccountFlag(std::string flag, std::string val) {
|
||||||
MakeAnyLenString(&query, "REPLACE INTO account_flags (p_accid, p_flag, p_value) VALUES( '%d', '%s', '%s')", account_id, flag.c_str(), val.c_str());
|
|
||||||
if(!database.RunQuery(query, strlen(query), errbuf))
|
std::string query = StringFormat("REPLACE INTO account_flags (p_accid, p_flag, p_value) "
|
||||||
{
|
"VALUES( '%d', '%s', '%s')",
|
||||||
std::cerr << "Error in SetAccountFlags query '" << query << "' " << errbuf << std::endl;
|
account_id, flag.c_str(), val.c_str());
|
||||||
|
auto results = database.QueryDatabase(query);
|
||||||
|
if(!results.Success()) {
|
||||||
|
std::cerr << "Error in SetAccountFlags query '" << query << "' " << results.ErrorMessage() << std::endl;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
safe_delete_array(query);
|
|
||||||
|
|
||||||
accountflags[flag] = val;
|
accountflags[flag] = val;
|
||||||
}
|
}
|
||||||
@ -8250,29 +8157,25 @@ void Client::PlayMP3(const char* fname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::ExpeditionSay(const char *str, int ExpID) {
|
void Client::ExpeditionSay(const char *str, int ExpID) {
|
||||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
|
||||||
char* query = 0;
|
|
||||||
MYSQL_RES *result;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
|
|
||||||
if (!database.RunQuery(query,MakeAnyLenString(&query, "SELECT `player_name` FROM `cust_inst_players` WHERE `inst_id` = %i", ExpID),errbuf,&result)){
|
std::string query = StringFormat("SELECT `player_name` FROM `cust_inst_players` "
|
||||||
safe_delete_array(query);
|
"WHERE `inst_id` = %i", ExpID);
|
||||||
|
auto results = database.QueryDatabase(query);
|
||||||
|
if (!results.Success())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(results.RowCount() == 0) {
|
||||||
|
this->Message(14, "You say to the expedition, '%s'", str);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
safe_delete_array(query);
|
for(auto row = results.begin(); row != results.end(); ++row) {
|
||||||
|
const char* charName = row[0];
|
||||||
if(result)
|
if(strcmp(charName, this->GetCleanName()) != 0)
|
||||||
this->Message(14, "You say to the expedition, '%s'", str);
|
worldserver.SendEmoteMessage(charName, 0, 0, 14, "%s says to the expedition, '%s'", this->GetCleanName(), str);
|
||||||
|
|
||||||
while((row = mysql_fetch_row(result))) {
|
|
||||||
const char* CharName = row[0];
|
|
||||||
if(strcmp(CharName, this->GetCleanName()) != 0)
|
|
||||||
worldserver.SendEmoteMessage(CharName, 0, 0, 14, "%s says to the expedition, '%s'", this->GetCleanName(), str);
|
|
||||||
// ChannelList->CreateChannel(ChannelName, ChannelOwner, ChannelPassword, true, atoi(row[3]));
|
// ChannelList->CreateChannel(ChannelName, ChannelOwner, ChannelPassword, true, atoi(row[3]));
|
||||||
}
|
}
|
||||||
|
|
||||||
mysql_free_result(result);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user