eluna-scripts-ornfelt/lua/WowEmulationScriptPack/C++/Logic/CustomGMLogic.cpp
2024-09-23 07:59:23 +02:00

198 lines
7.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <Custom/Logic/CustomGMLogic.h>
#include <Custom/Logic/CustomCharacterSystem.h>
#include "WorldSession.h"
#include "Config.h"
#include "Language.h"
//Insert a GM Log action, to control your GM´s. No Return Value. Log is found in Character DB , Tablename: "gm_action"
void CustomGMLogic::addGMLog(std::string charactername, int characterid, std::string accountname, int accountid, std::string action) {
SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement * stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_ACTION);
stmt->setString(0, charactername);
stmt->setInt32(1, characterid);
stmt->setString(2, accountname);
stmt->setInt32(3, accountid);
stmt->setString(4, action);
trans->Append(stmt);
CharacterDatabase.CommitTransaction(trans);
}
void CustomGMLogic::addGMPlayerCount(int accountid)
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement * stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_ACTION_PLAYER_COUNT);
stmt->setInt32(0, accountid);
stmt->setInt32(1, 1);
trans->Append(stmt);
CharacterDatabase.CommitTransaction(trans);
}
void CustomGMLogic::updateGMPlayerCount(int counter, int accountid)
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement * stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GM_ACTION_PLAYER_COUNT);
stmt->setInt32(0, counter);
stmt->setInt32(1, accountid);
trans->Append(stmt);
CharacterDatabase.CommitTransaction(trans);
}
PreparedQueryResult CustomGMLogic::selectGMPlayerCount(int accountid)
{
PreparedStatement * stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GM_ACTION_PLAYER_COUNT);
stmt->setInt32(0, accountid);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result) {
return NULL;
}
return result;
}
void CustomGMLogic::insertNewAutobroadCast(Player* player,const char* args)
{
CustomCharacterSystem * CharacterSystem = 0;
char* weightchar = strtok((char*)args, " ");
if (!weightchar) {
player->GetSession()->SendNotification("Without weight the command will not work!");
return;
}
char* message = strtok(NULL, ",");
if (!message) {
player->GetSession()->SendNotification("Without message the command will not work!");
return;
}
uint32 weight = atoi((char*)weightchar);
std::string accountname = CharacterSystem->getAccountName(player->GetSession()->GetAccountId());
addGMLog(player->GetSession()->GetPlayerName(), player->GetGUID(), accountname, player->GetSession()->GetAccountId(), "Insert new Autobroadcast");
int realmid = sConfigMgr->GetIntDefault("RealmID", 1);
int idmaxcount = selectMaxCountAutobroadcastID(realmid);
SQLTransaction trans = LoginDatabase.BeginTransaction();
PreparedStatement * stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_AUTOBROADCAST_NEW);
stmt->setInt32(0, realmid);
stmt->setInt32(1, idmaxcount);
stmt->setInt32(2, weight);
stmt->setString(3, message);
trans->Append(stmt);
LoginDatabase.CommitTransaction(trans);
}
int CustomGMLogic::selectMaxCountAutobroadcastID(int realmid)
{
PreparedStatement * stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_AUTOBROADCAST_MAX_COUNT_ID);
stmt->setInt32(0, realmid);
PreparedQueryResult result = LoginDatabase.Query(stmt);
if (!result) {
return 0;
}
Field* ergebnis = result->Fetch();
int32 idmaxcount = ergebnis[0].GetInt32();
return idmaxcount;
}
void CustomGMLogic::insertNewCouponGMLog(std::string charactername, int guid,int itemid, std::string couponcode, int quantity)
{
SQLTransaction trans = CharacterDatabase.BeginTransaction();
PreparedStatement * stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_ACTIONS_COUPON_DETAILS);
stmt->setString(0, charactername);
stmt->setInt32(1, guid);
stmt->setInt32(2, itemid);
stmt->setString(3, couponcode);
stmt->setInt32(4, quantity);
trans->Append(stmt);
CharacterDatabase.CommitTransaction(trans);
}
int CustomGMLogic::getGMPlayerCount(int accountid)
{
PreparedStatement * stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GM_ACTION_PLAYER_COUNT);
stmt->setInt32(0, accountid);
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result) {
return -1;
}
Field* ergebnis = result->Fetch();
int counter = ergebnis[2].GetInt32();
return counter;
}
void CustomGMLogic::addCompleteGMCountLogic(Player* player, std::string logmessage)
{
CustomCharacterSystem * CharacterSystem = 0;
PreparedStatement * stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GM_ACTION_PLAYER_COUNT);
stmt->setInt32(0, player->GetSession()->GetAccountId());
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result) {
addGMPlayerCount(player->GetSession()->GetAccountId());
std::string accountname = CharacterSystem->getAccountName(player->GetSession()->GetAccountId());
addGMLog(player->GetSession()->GetPlayerName(), player->GetGUID(), accountname, player->GetSession()->GetAccountId(), logmessage);
return;
}
/*PrepareStatement(CHAR_INS_GM_ACTION, "INSERT INTO gm_actions (charactername,characterID, accountname, accountID, action_done) VALUES (?,?,?,?,?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_GM_ACTION_PLAYER_COUNT, "INSERT into gm_actions_player_count (accountid, counter) VALUES (?,?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_GM_ACTION_PLAYER_COUNT, "Select id,accountid, counter from gm_actions_player_count where accountid = ?", CONNECTION_SYNCH);
PrepareStatement(CHAR_UPD_GM_ACTION_PLAYER_COUNT, "Update gm_actions_player_count set counter = ? where id = ?", CONNECTION_ASYNC);*/
Field* fields = result->Fetch();
int32 id = fields[0].GetInt32();
int32 counter = fields[2].GetInt32();
int newcounter = 0;
newcounter = counter + 1;
ChatHandler(player->GetSession()).PSendSysMessage("##########################################################");
ChatHandler(player->GetSession()).PSendSysMessage("GM Warning!");
ChatHandler(player->GetSession()).PSendSysMessage("This is your %u Incident. Beware %s!", newcounter,player->GetSession()->GetPlayerName());
ChatHandler(player->GetSession()).PSendSysMessage("##########################################################");
updateGMPlayerCount(newcounter, id);
std::string accountname = CharacterSystem->getAccountName(player->GetSession()->GetAccountId());
addGMLog(player->GetSession()->GetPlayerName(), player->GetGUID(), accountname, player->GetSession()->GetAccountId(), logmessage);
if (sConfigMgr->GetBoolDefault("GM.Security", 1)) {
int maxcount = 0;
maxcount = sConfigMgr->GetIntDefault("GM.Security.Number", 3);
PreparedQueryResult queryresult = selectGMPlayerCount(player->GetSession()->GetAccountId());
if (!queryresult) {
return;
}
Field * array = queryresult->Fetch();
int strikes = array[2].GetInt32();
if (strikes >= maxcount-1) {
std::string accountname = CharacterSystem->getAccountName(player->GetSession()->GetAccountId());
sWorld->BanAccount(BAN_ACCOUNT, accountname, 0, "To many bad Decisions", "AvariusCore");
std::ostringstream ss;
std::ostringstream tt;
std::ostringstream uu;
ss << "Gamemaster " << player->GetSession()->GetPlayerName() << " has been banned by Core.";
tt << "Reason: To many Failures with Cheating Commands. This is a friedly Reminder for the whole Team.";
uu << "Read and unterstand the Rules of your Server!";
sWorld->SendGMText(LANG_GM_BROADCAST, ss.str().c_str());
sWorld->SendGMText(LANG_GM_BROADCAST, tt.str().c_str());
sWorld->SendGMText(LANG_GM_BROADCAST, uu.str().c_str());
return;
}
}
return;
}