You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.5 KiB
97 lines
2.5 KiB
8 years ago
|
#ifndef __ASHITA_SERVO_H_INCLUDED__
|
||
|
#define __ASHITA_SERVO_H_INCLUDED__
|
||
|
|
||
|
#if defined (_MSC_VER) && (_MSC_VER >= 1020)
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include <deque>
|
||
|
#include <atomic>
|
||
|
#include <thread>
|
||
|
#include <mutex>
|
||
|
#include "zmq.hpp"
|
||
|
#include "G:/Code/git.ashita.atom0s.com/Ashita v3/Ashita-src/build/plugins/ADK/Ashita.h"
|
||
|
#include "CommandParser.h"
|
||
|
#include "Chat.hpp"
|
||
|
|
||
|
plugininfo_t* g_PluginInfo = NULL;
|
||
|
|
||
|
#pragma comment(lib,"libzmq.lib")
|
||
|
|
||
|
struct auto_follow
|
||
|
{
|
||
|
unsigned int unknown_ptr;
|
||
|
unsigned int TargetIndex;
|
||
|
unsigned int TargetID;
|
||
|
float DirectionX;
|
||
|
float DirectionY;
|
||
|
float DirectionZ;
|
||
|
float unknown_float; // 1 -- Deals with collision (CXiCollisionActor)
|
||
|
unsigned int unknown_ptr2;
|
||
|
unsigned int FollowIndex;
|
||
|
unsigned int FollowID;
|
||
|
unsigned char CameraMode; // 0 = third-person - 1 = first-person
|
||
|
unsigned char AutoRun;
|
||
|
|
||
|
};
|
||
|
|
||
|
namespace ServoMode {
|
||
|
enum Mode { Standby, Server, Client };
|
||
|
};
|
||
|
|
||
|
class Servo : IPlugin
|
||
|
{
|
||
|
private:
|
||
|
IAshitaCore* m_AshitaCore;
|
||
|
Chat::Log log;
|
||
|
std::string me;
|
||
|
|
||
|
auto_follow* StructPointer;
|
||
|
|
||
|
zmq::context_t zContext;
|
||
|
|
||
|
std::mutex lock;
|
||
|
std::atomic_bool connected;
|
||
|
std::atomic_bool follow;
|
||
|
std::atomic_bool zoning;
|
||
|
std::vector<std::string> groups;
|
||
|
std::thread conn;
|
||
|
std::thread pos;
|
||
|
std::deque<std::string> buffer;
|
||
|
|
||
|
std::atomic<ServoMode::Mode> state;
|
||
|
std::string servAddr;
|
||
|
|
||
|
std::mutex lservAddr;
|
||
|
|
||
|
std::string StringSub(std::string, std::string, std::string);
|
||
|
|
||
|
CommandParser* cmdParse;
|
||
|
void formatCommand(std::string* command);
|
||
|
void SendCommand(std::string command);
|
||
|
void RecvCommand(std::string* command);
|
||
|
void SetState(ServoMode::Mode mode);
|
||
|
void Sync(std::string host);
|
||
|
|
||
|
void WalkTo(float x, float y);
|
||
|
|
||
|
//Threads
|
||
|
void Serv();
|
||
|
void ServPos();
|
||
|
void Client();
|
||
|
void Follow();
|
||
|
public:
|
||
|
Servo() {}
|
||
|
~Servo() {}
|
||
|
plugininfo_t GetPluginInfo(void) override;
|
||
|
|
||
|
bool Initialize(IAshitaCore* ashitaCore, ILogManager* log, uint32_t dwPluginId) override;
|
||
|
void Release(void) override;
|
||
|
bool HandleCommand(const char* pszCommand, int nCommandType) override;
|
||
|
bool Direct3DInitialize(IDirect3DDevice8* lpDevice) override;
|
||
|
void Direct3DRender(void) override;
|
||
|
bool HandleIncomingPacket(uint16_t id, uint32_t size, void* data, void* modified, bool blocked) override;
|
||
|
bool HandleOutgoingPacket(uint16_t id, uint32_t size, void* data, void* modified, bool blocked) override;
|
||
|
};
|
||
|
|
||
|
#endif //__ASHITA_SERVO_H_INCLUDED__
|