Allows you to send commands to multiple other characters on the local computer from a single character.
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.
 
 

438 lines
13 KiB

#include <stdint.h>
#include <sstream>
#include <string>
#include "G:/Code/git.ashita.atom0s.com/Ashita v3/Ashita-src/build/plugins/ADK/Ashita.h"
#include <iostream>
namespace Chat
{
//typedef const char* IAutoTrans;
struct IAutoTrans{
const char* x;
};
enum Mode : short
{
// Info mostly taken from http://www.ffevo.net/wiki/index.php/ChatIDs
//----------------------
// Common "Chat" Modes
//----------------------
Unknown = 0, // Catch all. Do not use...it sometimes breaks the chat log.
SentSay = 0x1, // Outgoing Say
SentSay2 = 0x2, // Outgoing Say
SentTell = 0x4, // Outgoing Tell
SentParty = 0x5, // Outgoing Party
SentLinkShell = 0x6, // Outgoing Linkshell
SentEmote = 0x7, // Outgoing Emote, untargetted
RecvdSay = 0x9, // Incoming Say
RecvdSay2 = 0xA, // Incoming Say
RcvdTell = 0xC, // Incoming Tell
RcvdParty = 0xD, // Incoming Party (thanks Vanion for the correction!)
RcvdLinkShell = 0xE, // Incoming Linkshell
SentEmoteTo = 0xF, // Outgoing Emote, targeted
Echo = 0xCE, // Echo
//----------------------
// Action Modes
//----------------------
ActCallHelp = 0x10, // Call for Help!
ActFriendReq = 0x12, // Sent Friend Request
ActCastMagic = 0x13, //
ActHitDamage = 0x14, //
ActMiss = 0x15, //
ActDrained = 0x16, //
ActPTHitAbsorbed = 0x17, //
ActPTRecoverHP = 0x18, //
ActPTHitDamage = 0x19, //
ActPTMiss = 0x1A, //
ActPTDrained = 0x1B, //
ActDamaged = 0x1C, //
ActAvoidDamage = 0x1D, //
ActRecoverHealth = 0x1E, //
ActRecoverHP = 0x1F, //
ActPTDamaged = 0x20, //
ActPTAvoidDamage = 0x21, //
ActPCGainHealth = 0x22, //
ActPTHealedOther = 0x23, //
ActDefeats = 0x24, //
ActPCDeath = 0x25, //
ActDeath = 0x26, //
ActPTDeath = 0x27, //
ActPCDamage = 0x28, //
ActPCMiss = 0x29, //
ActPCRecoverHealth = 0x2A, //
ActPCHealsPC = 0x2B, //
ActPCDefeated = 0x2C, //
//----------------------
// Special Action Modes
//----------------------
SAct = 0x32, //
SActPT = 0x33, //
SActPC = 0x34, //
SActRecvdBenefit = 0x38, //
SActRecvdDetriment = 0x39, //
SActNoEffect = 0x3B, //
SActPTRecvdBenefit = 0x3C, //
SActPTRecvdDetriment = 0x3D,//
SActPTNoEffect = 0x3F, // Needs confirmation
SActPCRecvdBenefit = 0x40, //
SActPCRecvdDetriment = 0x41,//
SActPCNoEffect = 0x43, //
SActPTResisted = 0x44, //
SActOtherResisted = 0x45, //
SActSAttUse = 0x65, //
SActOtherBenefit = 0x6F, //
SActOtherDetriment = 0x70, //
SActOtherMissed = 0x72, //
SActSpellEffect = 0xBB, //
//----------------------
// Item Modes
//----------------------
ItemRecvdEffect = 0x51, //
ItemPCUsed = 0x55, //
ItemPCUsed2 = 0x5A, //
ItemLearnedSpell = 0x5B, //
//----------------------
// Mob Special Action Modes
//----------------------
MobActSAttUse = 0x64, //
MobActDetriment = 0x66, //
MobActSAttEvaded = 0x68, //
MobActSAttAoE = 0x69, //
MobActSupport = 0x6A, //
MobActDrain = 0x6B, //
MobActRAttMissed = 0x6D, //
MobActSAttInit = 0x6E, //
//----------------------
// System Message Modes
//----------------------
Sys1 = 0x79, // Target out of range, AH & synth feedback, Item feedback, trade feedback
Sys2 = 0x7A, // Entity chasing out of range, entity intimidated, raise, paralyzed, cannot see entity,
// casting interrupted, cannot attack, target already claimed, no exp gained
Sys3 = 0x7B, // Sneak/invis wearing, wait longer to perform action, chat not sent/recvd
SysObtainedItem = 0x7F, //
SysSkillGained = 0x81, //
SysExpLvlMerit = 0x83, //
SysInvitedToParty = 0x87, //
SysLogoutCountdown = 0x88, //
SysBazaar = 0x8A, //
SysTimePlayed = 0x8B, //
SysClock = 0x8C, //
SysDynamisWarning = 0x8D, //
SysTaunts = 0x8E, //
SysTutorialMoogle = 0x90, //
SysCaughtFish = 0x92, //
Sys4 = 0x94, // Digging/Fishing/Door/Ballista Feedback, Mission Gil Reward, Accepted Mission, Receive
// Mission Key Item, Gained Conquest Points
SysTimeRestriction = 0x95, //
SysTutorialNPC = 0x98, //
SysCommandError = 0x9D, // Also /help output
SysConquestUpdate = 0xA1, //
SysNeedKey = 0xBE, //
Sys5 = 0xBF, // Effect wears off, Detriment wears off, no longer stunned, fall to level
SysMOTD = 0xC8, // Also recast times (but not /recast feedback)
SysSearchComment = 0xCC, //
SysLinkshellMOTD = 0xCD, //
SysExamined = 0xD0, //
//----------------------
// Alliance Action Modes
//----------------------
AllyHealAlly = 0xA2, //
AllyDamage = 0xA3, //
AllyMiss = 0xA4, //
AllyDefeats = 0xA6, //
AllyDefeated = 0xA7, //
AllySAct = 0xA8, //
AllyNoEffect = 0xAA, //
AllyItemUse = 0xAB, //
AllyRecvdDetriment = 0xAE, //
AllyRecvdBenefit = 0xAF, //
AllyRecvdDetrimentAoE = 0xB6,//
AllyDamaged = 0xB9, //
AllyEvades = 0xBA, //
//----------------------
// NPC Action Modes
//----------------------
NPCSAct = 0xB1, //
NPCActDetriment = 0xB5, //
//----------------------
// Unknown or Unused Modes
//----------------------
SentYell = 0x03,
RecvdYell = 0x11,
//0x3
//0x8
//0xB
//0x11
//0x2D-0x31
//0x35-0x37
//0x3A
//0x3E
//0x42
//0x46-0x50
//0x52-0x54
//0x56-0x59
//0x5C-0x63
//0x67
//0x6C
//0x71
//0x73-0x78
//0x7C-0x7E
//0x80
//0x82
//0x84-0x86
//0x89
//0x8F
//0x91
//0x93
//0x96
//0x97
//0x99-0x9C
//0x9E-0xA0
//0xA5
//0xA9
//0xAC
//0xAD
//0xB0
//0xB2-0xB4
//0xB7
//0xB8
//0xBC
//0xBD
//0xC0-0xC7
//0xC9-0xCB
//0xCF
//0xD1-0xFF
};
enum Format {
LineBreak,// = 0x07, // Inserts an inline line break (does not flush)
Reset,// = 0x1E01,
Green,// = 0x1E02,
Blue,// = 0x1E03,
Purple,// = 0x1E05,
Aqua,// = 0x1E06,
Peach,// = 0x1E07,
White,// = 0x1E1A,
Gray,// = 0x1E1B,
Lilac,// = 0x1E3A,
BlueWhite,// = 0x1E3C,
InvisibleBlue,// = 0x1E62, // Ridiculously hard to read
Red,// = 0x1E69,
Yellow,// = 0x1E6E,
RoyalBlue,// = 0x1E71,
Invisible,// = 0x1E86, // This one really is invisible as far as I can tell
GreenWhite,// = 0x1E96,
SageGreen,// = 0x1EA0,
AutoTransOpen,// = 0xFFEF27,
AutoTransClose,// = 0xFFEF28,
EnterToContinue,// = 0x7F3101 // Waits one second before making prompt available. Can alter the last byte to change the timing.
};
enum Control
{
flush, //Flush the output to chat log and clears the buffer
clear, //Clears the buffer without writing it out
};
class Log{
private:
Mode mode;
std::ostringstream s;
IAshitaCore* m_Ashita;
void putAutoTransOpen();
void putAutoTransClose();
public:
Log &operator<<(Chat::Mode x)
{
mode = x;
return *this;
}
Log &operator<<(Chat::Format x)
{
switch (x)
{
case LineBreak:
s.put('\x07');
break;
case Reset:
s.put('\x1E');
s.put('\x01');
break;
case Green:
s.put('\x1E');
s.put('\x02');
break;
case Blue:
s.put('\x1E');
s.put('\x03');
break;
case Purple:
s.put('\x1E');
s.put('\x05');
break;
case Aqua:
s.put('\x1E');
s.put('\x06');
break;
case Peach:
s.put('\x1E');
s.put('\x07');
break;
case White:
s.put('\x1E');
s.put('\x1A');
break;
case Gray:
s.put('\x1E');
s.put('\x1B');
break;
case Lilac:
s.put('\x1E');
s.put('\x3A');
break;
case BlueWhite:
s.put('\x1E');
s.put('\x3C');
break;
case InvisibleBlue:
s.put('\x1E');
s.put('\x62');
break;
case Red:
s.put('\x1E');
s.put('\x69');
break;
case Yellow:
s.put('\x1E');
s.put('\x6E');
break;
case RoyalBlue:
s.put('\x1E');
s.put('\x71');
break;
case Invisible:
s.put('\x1E');
s.put('\x86');
break;
case GreenWhite:
s.put('\x1E');
s.put('\x96');
break;
case SageGreen:
s.put('\x1E');
s.put('\xA0');
break;
case AutoTransOpen:
putAutoTransOpen();
break;
case AutoTransClose:
putAutoTransClose();
break;
case EnterToContinue:
s.put('\x7F');
s.put('\x31');
s.put('\x01');
break;
}
return *this;
}
Log &operator<<(ISpell* x)
{
putAutoTransOpen();
s << x->Name;
putAutoTransClose();
return *this;
}
Log &operator<<(IAbility* x)
{
putAutoTransOpen();
s << x->Name;
putAutoTransClose();
return *this;
}
Log &operator<<(IItem* x)
{
putAutoTransOpen();
s << x->Name;
putAutoTransClose();
return *this;
}
Log &operator<<(Chat::IAutoTrans x)
{
putAutoTransOpen();
s << x.x;
putAutoTransClose();
return *this;
}
Log &operator<<(Chat::Control x)
{
switch(x)
{
case Control::flush:
m_Ashita->GetChatManager()->AddChatMessage(mode,s.str().c_str());
case Control::clear:
s = std::ostringstream();
break;
}
return *this;
}
Log &operator<<(const char* &x)
{
s << x;
return *this;
}
Log &operator<<(std::string &x)
{
s << x;
return *this;
}
Log &operator<<(const char x[])
{
s << x;
return *this;
}
Log();
~Log();
IAutoTrans Region(unsigned char RegionID);
IAutoTrans Zone(unsigned int ZoneID);
IAutoTrans Keyitem(unsigned int ID);
void SetCore(IAshitaCore* mAshitaCore);
};
};