mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
244 lines
8 KiB
C++
244 lines
8 KiB
C++
|
|
/*
|
||
|
|
|
||
|
|
- Made by mthsena -
|
||
|
|
- Edited by Jameyboor -
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*
|
||
|
|
SQL =
|
||
|
|
|
||
|
|
CREATE TABLE `anti-farm log` (
|
||
|
|
`ID` MEDIUMINT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
`Character` TEXT NOT NULL,
|
||
|
|
`Account` TEXT NOT NULL,
|
||
|
|
`Warning` MEDIUMINT(1) UNSIGNED NULL DEFAULT '0',
|
||
|
|
PRIMARY KEY (`ID`)
|
||
|
|
)
|
||
|
|
COMMENT='used by the Anti-Farm System'
|
||
|
|
COLLATE='utf8_general_ci'
|
||
|
|
ENGINE=InnoDB
|
||
|
|
ROW_FORMAT=DEFAULT
|
||
|
|
AUTO_INCREMENT=1
|
||
|
|
*/
|
||
|
|
#include "ScriptPCH.h"
|
||
|
|
|
||
|
|
class NoFarming : public PlayerScript
|
||
|
|
{
|
||
|
|
public: NoFarming() : PlayerScript("NoFarming") {}
|
||
|
|
|
||
|
|
void OnPVPKill(Player * killer, Player * killed)
|
||
|
|
{
|
||
|
|
if (killer->GetGUID() == killed->GetGUID())
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (killer->GetSession()->GetRemoteAddress() == killed->GetSession()->GetRemoteAddress() || killed->GetMaxHealth() < 10000) // about 1/4 of the maximum hp a character can have on your server to make this fully functional.
|
||
|
|
{
|
||
|
|
uint32 Warning = 1;
|
||
|
|
std::string Acc;
|
||
|
|
std::string Char = killer->GetName();
|
||
|
|
std::string str = "";
|
||
|
|
str = "|cFFFFFC00[Anti-Farm System]|cFF00FFFF[|cFF60FF00" + std::string(killer->GetName()) + "|cFF00FFFF] Possible Farmer!";
|
||
|
|
WorldPacket data(SMSG_NOTIFICATION, (str.size()+1));
|
||
|
|
data << str;
|
||
|
|
sWorld->SendGlobalGMMessage(&data);
|
||
|
|
QueryResult result = WorldDatabase.PQuery("SELECT `Warning` FROM `anti-farm log` WHERE `Character` = %s", Char);
|
||
|
|
if(result)
|
||
|
|
{
|
||
|
|
Field* fields = result->Fetch();
|
||
|
|
Warning = fields[0].GetUInt32();
|
||
|
|
}
|
||
|
|
result = LoginDatabase.PQuery("SELECT `username` FROM `account` WHERE `id` = %u", killer->GetSession()->GetAccountId());
|
||
|
|
if(result)
|
||
|
|
{
|
||
|
|
Field* fields = result->Fetch();
|
||
|
|
Acc = fields[0].GetString();
|
||
|
|
}
|
||
|
|
result = WorldDatabase.PQuery("SELECT `ID` FROM `anti-farm log` WHERE Character = %s", Char);
|
||
|
|
if(result)
|
||
|
|
WorldDatabase.PExecute("UPDATE `anti-farm log` SET `Warning` = Warning + 1 WHERE `Character` = %s", Char);
|
||
|
|
else
|
||
|
|
WorldDatabase.PExecute("INSERT INTO `anti-farm log` (`Character`, `Account`, `Warning`) VALUES (%s, %s, %u)", Char, Acc, Warning);
|
||
|
|
|
||
|
|
result = WorldDatabase.PQuery("SELECT `Warning` FROM `anti-farm log` WHERE `Character` = %s AND `Warning` >= 5 ", Char);
|
||
|
|
if(result)
|
||
|
|
sWorld->BanCharacter(Char, "1d", "Ignored warnings of the Anti-Farm System", "Anti-Farm System");
|
||
|
|
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
class NoFarm_Commands : public CommandScript
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
NoFarm_Commands() : CommandScript ("NF_Commands") {}
|
||
|
|
|
||
|
|
ChatCommand* GetCommands() const
|
||
|
|
{
|
||
|
|
|
||
|
|
static ChatCommand HelpDeleteSubCommandTable[] =
|
||
|
|
{
|
||
|
|
{ "all", SEC_GAMEMASTER, false, &HandleHelpDeleteAllCommand, "", NULL },
|
||
|
|
{ "ID", SEC_GAMEMASTER, false, &HandleHelpDeleteIDCommand, "", NULL },
|
||
|
|
};
|
||
|
|
|
||
|
|
static ChatCommand HelpCommandSubTable[] =
|
||
|
|
{
|
||
|
|
{ "log", SEC_GAMEMASTER, false, &HandleHelpLogCommand, "", NULL },
|
||
|
|
{ "delete", SEC_GAMEMASTER, false, NULL, "", HelpDeleteSubCommandTable },
|
||
|
|
{ "clear", SEC_GAMEMASTER, false, &HandleHelpClearCommand, "", NULL },
|
||
|
|
{ NULL, 0, false, NULL, "", NULL }
|
||
|
|
};
|
||
|
|
|
||
|
|
static ChatCommand DeleteCommandSubTable[] =
|
||
|
|
{
|
||
|
|
{ "all", SEC_GAMEMASTER, true, &HandleDeleteAllCommand, "", NULL },
|
||
|
|
{ "ID", SEC_GAMEMASTER, true, &HandleDeleteIDCommand, "", NULL },
|
||
|
|
{ NULL, 0, false, NULL, "", NULL }
|
||
|
|
};
|
||
|
|
static ChatCommand AFSSubCommandTable[] =
|
||
|
|
{
|
||
|
|
{ "log", SEC_GAMEMASTER, true, &HandleLogCommand, "", NULL },
|
||
|
|
{ "delete", SEC_ADMINISTRATOR, true, NULL, "", DeleteCommandSubTable },
|
||
|
|
{ "help", SEC_GAMEMASTER, false, NULL, "", HelpCommandSubTable },
|
||
|
|
{ "editai", SEC_ADMINISTRATOR, true, &HandleEditAICommand, "", NULL },
|
||
|
|
{ NULL, 0, false, NULL, "", NULL }
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
static ChatCommand CommandTable[] =
|
||
|
|
{
|
||
|
|
{ "afs", SEC_GAMEMASTER, true, NULL, "", AFSSubCommandTable },
|
||
|
|
{ NULL, 0, false, NULL, "", NULL }
|
||
|
|
};
|
||
|
|
return CommandTable;
|
||
|
|
}
|
||
|
|
|
||
|
|
static bool HandleLogCommand(ChatHandler* handler, const char* args)
|
||
|
|
{
|
||
|
|
WorldSession * Session = handler->GetSession();
|
||
|
|
Player* player = Session->GetPlayer();
|
||
|
|
uint32 RLimit = 10;
|
||
|
|
if((char*)args)
|
||
|
|
RLimit = atoi((char*)args);
|
||
|
|
|
||
|
|
if(RLimit == 0 || RLimit > 100)
|
||
|
|
RLimit = 10;
|
||
|
|
|
||
|
|
QueryResult result = WorldDatabase.PQuery("SELECT * FROM `anti-farm log` LIMIT %u", RLimit);
|
||
|
|
if(!result)
|
||
|
|
{
|
||
|
|
Session->SendNotification("There are no records");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
Field * fields = NULL;
|
||
|
|
do{
|
||
|
|
fields = result->Fetch();
|
||
|
|
uint32 ID = fields[0].GetUInt32();
|
||
|
|
std::string Character = fields[1].GetString();
|
||
|
|
std::string Account = fields[2].GetString();
|
||
|
|
uint32 Warning = fields[3].GetUInt32();
|
||
|
|
char msg[250];
|
||
|
|
snprintf(msg, 250, "ID : %u Character : %s Account : %s Warning Level : %u \n" , ID, Character.c_str(), Account.c_str(), Warning);
|
||
|
|
handler->PSendSysMessage (msg);
|
||
|
|
handler->SetSentErrorMessage (true);
|
||
|
|
}
|
||
|
|
while(result->NextRow());
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static bool HandleDeleteAllCommand(ChatHandler* handler, const char* args)
|
||
|
|
{
|
||
|
|
WorldSession * Session = handler->GetSession();
|
||
|
|
Player* player = Session->GetPlayer();
|
||
|
|
WorldDatabase.Execute("DELETE FROM `anti-farm log`");
|
||
|
|
QueryResult result = WorldDatabase.Query("SELECT `ID` FROM `anti-farm log`");
|
||
|
|
if(result)
|
||
|
|
{
|
||
|
|
Session->SendNotification("Deletion failed");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
Session->SendAreaTriggerMessage("Deletion successful!");
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static bool HandleDeleteIDCommand(ChatHandler* handler, const char* args)
|
||
|
|
{
|
||
|
|
if(!*args)
|
||
|
|
return false;
|
||
|
|
WorldSession * Session = handler->GetSession();
|
||
|
|
Player* player = Session->GetPlayer();
|
||
|
|
uint32 ID = atoi((char*)args);
|
||
|
|
QueryResult result = WorldDatabase.PQuery("SELECT * FROM `anti-farm log` WHERE `ID` = %u", ID);
|
||
|
|
if(!result)
|
||
|
|
{
|
||
|
|
char msg [250];
|
||
|
|
snprintf(msg, 250, "Log with Log ID : %u doesn't exist", ID);
|
||
|
|
Session->SendNotification(msg);
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
WorldDatabase.PExecute("DELETE FROM `anti-farm log` WHERE `ID` = %u", ID);
|
||
|
|
Session->SendAreaTriggerMessage("Deletion of Log ID : %u Successful!", ID);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static bool HandleHelpLogCommand(ChatHandler* handler, const char* args)
|
||
|
|
{
|
||
|
|
handler->PSendSysMessage("This command allows you to check the Database Log for abusers of the Anti-Farm System \n");
|
||
|
|
handler->PSendSysMessage("Entering a number after this command will be used to check the maximum lines shown \n");
|
||
|
|
handler->PSendSysMessage("Example : \".afs log 15\" will show the first 15 records, even if there are more.");
|
||
|
|
handler->SetSentErrorMessage(true);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static bool HandleHelpDeleteAllCommand(ChatHandler* handler, const char* args)
|
||
|
|
{
|
||
|
|
handler->PSendSysMessage("This command will delete all existing records of abusers \n");
|
||
|
|
handler->PSendSysMessage("This command does not have any arguments.");
|
||
|
|
handler->SetSentErrorMessage(true);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static bool HandleHelpDeleteIDCommand(ChatHandler* handler, const char* args)
|
||
|
|
{
|
||
|
|
handler->PSendSysMessage("This command will let you delete a specific record from the Database \n");
|
||
|
|
handler->PSendSysMessage("Entering a number after this command will act like the ID of the record \n");
|
||
|
|
handler->PSendSysMessage("Example : \".afs delete ID 50 \" will delete the record with ID 50.");
|
||
|
|
handler->SetSentErrorMessage(true);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
static bool HandleHelpClearCommand(ChatHandler* handler, const char* args)
|
||
|
|
{
|
||
|
|
handler->SendSysMessage("This command edits the starting point of the Auto Incrementation for the ID column according to your argument");
|
||
|
|
handler->SendSysMessage("this is usually used when the number of ID gets too high after \n the records lower than the Auto Increment are deleted");
|
||
|
|
handler->SendSysMessage("Example : \".afs editAI 50\" will edit the starting point of the Auto Incrementation to 50.");
|
||
|
|
handler->SetSentErrorMessage(true);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static bool HandleEditAICommand(ChatHandler* handler, const char* args)
|
||
|
|
{
|
||
|
|
uint32 AIedit = atoi((char*)args);
|
||
|
|
WorldSession * Session = handler->GetSession();
|
||
|
|
Player* player = Session->GetPlayer();
|
||
|
|
WorldDatabase.PExecute("ALTER TABLE `anti-farm log` AUTO_INCREMENT = %u", AIedit);
|
||
|
|
Session->SendAreaTriggerMessage("Auto Increment starting point successfully set to %u", AIedit);
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
void AddSC_NoFarming()
|
||
|
|
{
|
||
|
|
new NoFarming();
|
||
|
|
new NoFarm_Commands();
|
||
|
|
}
|