forked from diasurgical/devilution
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmsgcmd.cpp
More file actions
80 lines (69 loc) · 1.7 KB
/
msgcmd.cpp
File metadata and controls
80 lines (69 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#ifndef HELLFIRE
#include <new> // for placement new
#include <stddef.h> // for offsetof
#include <typeinfo> // for typeid
#include "diablo.h"
#include "list.h"
#define COMMAND_LEN 128
// static float msgcmd_init_cpp_value = 0x7F800000;
struct EXTERNMESSAGE {
LIST_LINK(EXTERNMESSAGE)
m_Link;
char command[COMMAND_LEN];
void *operator new(size_t n, DWORD extralen, int flags)
{
return SMemAlloc(n + extralen, (char *)OBJECT_NAME(EXTERNMESSAGE), SLOG_OBJECT, flags | (1 << 3));
}
void operator delete(void *address, DWORD extralen, int flags)
{
}
void operator delete(void *address)
{
}
void *Delete(DWORD flags);
};
void *EXTERNMESSAGE::Delete(DWORD flags)
{
// BUGFIX: this is already called by m_Link's destructor
m_Link.Unlink();
this->~EXTERNMESSAGE();
if ((flags & 0x1) && this) {
SMemFree(this, "delete", SLOG_FUNCTION, 0);
}
return this;
}
static TList<EXTERNMESSAGE> sgChat_Cmd;
void msgcmd_cmd_cleanup()
{
sgChat_Cmd.DeleteAll();
}
void msgcmd_send_chat()
{
DWORD tick;
struct EXTERNMESSAGE *msg = sgChat_Cmd.Head();
if (msg) {
static DWORD sgdwMsgCmdTimer;
tick = GetTickCount();
if (tick - sgdwMsgCmdTimer >= 2000) {
sgdwMsgCmdTimer = tick;
SNetSendServerChatCommand(msg->command);
sgChat_Cmd.Remove(msg);
}
}
}
BOOL msgcmd_add_server_cmd_W(const char *chat_message)
{
if (chat_message[0] != '/')
return FALSE;
msgcmd_add_server_cmd(chat_message);
return TRUE;
}
void msgcmd_add_server_cmd(const char *command)
{
size_t len = strlen(command);
if (len && ++len <= COMMAND_LEN) {
struct EXTERNMESSAGE *msg = sgChat_Cmd.Create();
memcpy(msg->command, command, len);
}
}
#endif