mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-15 01:49:09 +00:00
Big update.
This commit is contained in:
141
src/strategy/actions/CustomStrategyEditAction.cpp
Normal file
141
src/strategy/actions/CustomStrategyEditAction.cpp
Normal file
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "CustomStrategyEditAction.h"
|
||||
#include "CustomStrategy.h"
|
||||
#include "Event.h"
|
||||
#include "Playerbots.h"
|
||||
|
||||
bool CustomStrategyEditAction::Execute(Event event)
|
||||
{
|
||||
std::string text = event.getParam();
|
||||
uint32 pos = text.find(" ");
|
||||
if (pos == std::string::npos)
|
||||
return PrintHelp();
|
||||
|
||||
std::string const name = text.substr(0, pos);
|
||||
text = text.substr(pos + 1);
|
||||
|
||||
pos = text.find(" ");
|
||||
if (pos == std::string::npos)
|
||||
pos = text.size();
|
||||
|
||||
std::string const idx = text.substr(0, pos);
|
||||
text = pos >= text.size() ? "" : text.substr(pos + 1);
|
||||
|
||||
return idx == "?" ? Print(name) : Edit(name, atoi(idx.c_str()), text);
|
||||
}
|
||||
|
||||
bool CustomStrategyEditAction::PrintHelp()
|
||||
{
|
||||
botAI->TellMaster("=== Custom strategies ===");
|
||||
|
||||
uint32 owner = botAI->GetBot()->GetGUID().GetCounter();
|
||||
|
||||
PlayerbotsDatabasePreparedStatement* stmt = PlayerbotsDatabase.GetPreparedStatement(PLAYERBOTS_SEL_CUSTOM_STRATEGY_BY_OWNER);
|
||||
stmt->SetData(0, owner);
|
||||
if (PreparedQueryResult result = PlayerbotsDatabase.Query(stmt))
|
||||
{
|
||||
do
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
std::string const name = fields[0].Get<std::string>();
|
||||
botAI->TellMaster(name);
|
||||
}
|
||||
while (result->NextRow());
|
||||
}
|
||||
|
||||
botAI->TellMaster("Usage: cs <name> <idx> <command>");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CustomStrategyEditAction::Print(std::string const name)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << "=== " << name << " ===";
|
||||
botAI->TellMaster(out.str());
|
||||
|
||||
uint32 owner = botAI->GetBot()->GetGUID().GetCounter();
|
||||
|
||||
PlayerbotsDatabasePreparedStatement* stmt = PlayerbotsDatabase.GetPreparedStatement(PLAYERBOTS_SEL_CUSTOM_STRATEGY_BY_OWNER_AND_NAME);
|
||||
stmt->SetData(0, owner);
|
||||
stmt->SetData(1, name);
|
||||
if (PreparedQueryResult result = PlayerbotsDatabase.Query(stmt))
|
||||
{
|
||||
do
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
uint32 idx = fields[0].Get<uint32>();
|
||||
std::string const action = fields[1].Get<std::string>();
|
||||
|
||||
PrintActionLine(idx, action);
|
||||
}
|
||||
while (result->NextRow());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CustomStrategyEditAction::Edit(std::string const name, uint32 idx, std::string const command)
|
||||
{
|
||||
uint32 owner = botAI->GetBot()->GetGUID().GetCounter();
|
||||
|
||||
PlayerbotsDatabasePreparedStatement* stmt = PlayerbotsDatabase.GetPreparedStatement(PLAYERBOTS_SEL_CUSTOM_STRATEGY_BY_OWNER_AND_NAME_AND_IDX);
|
||||
stmt->SetData(0, owner);
|
||||
stmt->SetData(1, name);
|
||||
stmt->SetData(2, idx);
|
||||
if (PreparedQueryResult result = PlayerbotsDatabase.Query(stmt))
|
||||
{
|
||||
if (command.empty())
|
||||
{
|
||||
stmt = PlayerbotsDatabase.GetPreparedStatement(PLAYERBOTS_DEL_CUSTOM_STRATEGY);
|
||||
stmt->SetData(0, name);
|
||||
stmt->SetData(1, owner);
|
||||
stmt->SetData(2, idx);
|
||||
PlayerbotsDatabase.Execute(stmt);
|
||||
}
|
||||
else
|
||||
{
|
||||
stmt = PlayerbotsDatabase.GetPreparedStatement(PLAYERBOTS_UPD_CUSTOM_STRATEGY);
|
||||
stmt->SetData(0, command);
|
||||
stmt->SetData(1, name);
|
||||
stmt->SetData(2, owner);
|
||||
stmt->SetData(3, idx);
|
||||
PlayerbotsDatabase.Execute(stmt);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stmt = PlayerbotsDatabase.GetPreparedStatement(PLAYERBOTS_INS_CUSTOM_STRATEGY);
|
||||
stmt->SetData(0, name);
|
||||
stmt->SetData(1, owner);
|
||||
stmt->SetData(2, idx);
|
||||
stmt->SetData(3, command);
|
||||
PlayerbotsDatabase.Execute(stmt);
|
||||
}
|
||||
|
||||
PrintActionLine(idx, command);
|
||||
|
||||
std::ostringstream ss;
|
||||
ss << "custom::" << name;
|
||||
|
||||
if (Strategy* strategy = botAI->GetAiObjectContext()->GetStrategy(ss.str()))
|
||||
{
|
||||
if (CustomStrategy* cs = dynamic_cast<CustomStrategy*>(strategy))
|
||||
{
|
||||
cs->Reset();
|
||||
botAI->ReInitCurrentEngine();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CustomStrategyEditAction::PrintActionLine(uint32 idx, std::string const command)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << "#" << idx << " " << command;
|
||||
botAI->TellMaster(out.str());
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user