Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
cs_instance.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
/* ScriptData
7
Name: instance_commandscript
8
%Complete: 100
9
Comment: All instance related commands
10
Category: commandscripts
11
EndScriptData */
12
13
#include "
Chat.h
"
14
#include "
Group.h
"
15
#include "
InstanceSaveMgr.h
"
16
#include "
InstanceScript.h
"
17
#include "
MapManager.h
"
18
#include "
Player.h
"
19
#include "
ScriptMgr.h
"
20
21
class
instance_commandscript
:
public
CommandScript
22
{
23
public
:
24
instance_commandscript
() :
CommandScript
(
"instance_commandscript"
) { }
25
26
std::vector<ChatCommand>
GetCommands
() const
OVERRIDE
27
{
28
static
std::vector<ChatCommand> instanceCommandTable =
29
{
30
{
"listbinds"
,
rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS
,
false
, &
HandleInstanceListBindsCommand
,
""
, },
31
{
"unbind"
,
rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND
,
false
, &
HandleInstanceUnbindCommand
,
""
, },
32
{
"stats"
,
rbac::RBAC_PERM_COMMAND_INSTANCE_STATS
,
true
, &
HandleInstanceStatsCommand
,
""
, },
33
{
"savedata"
,
rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA
,
false
, &
HandleInstanceSaveDataCommand
,
""
, },
34
};
35
36
static
std::vector<ChatCommand> commandTable =
37
{
38
{
"instance"
,
rbac::RBAC_PERM_COMMAND_INSTANCE
,
true
, NULL,
""
, instanceCommandTable },
39
};
40
41
return
commandTable;
42
}
43
44
static
std::string
GetTimeString
(
uint64
time)
45
{
46
uint64
days = time /
DAY
, hours = (time %
DAY
) /
HOUR
, minute = (time %
HOUR
) /
MINUTE
;
47
std::ostringstream ss;
48
if
(days)
49
ss << days <<
"d "
;
50
if
(hours)
51
ss << hours <<
"h "
;
52
ss << minute <<
'm'
;
53
return
ss.str();
54
}
55
56
static
bool
HandleInstanceListBindsCommand
(
ChatHandler
* handler,
char
const
*
/*args*/
)
57
{
58
Player
* player = handler->
getSelectedPlayer
();
59
if
(!player)
60
player = handler->
GetSession
()->
GetPlayer
();
61
62
uint32
counter = 0;
63
for
(
uint8
i = 0; i < 15; ++i)
64
{
65
Player::BoundInstancesMap
& binds = player->
GetBoundInstances
(
DifficultyID
(i));
66
for
(Player::BoundInstancesMap::const_iterator itr = binds.begin(); itr != binds.end(); ++itr)
67
{
68
InstanceSave
* save = itr->second.save;
69
std::string timeleft =
GetTimeString
(save->
GetResetTime
() - time(NULL));
70
handler->
PSendSysMessage
(
"map: %d inst: %d perm: %s diff: %d canReset: %s TTR: %s"
, itr->first, save->
GetInstanceId
(), itr->second.perm ?
"yes"
:
"no"
, save->
GetDifficulty
(), save->
CanReset
() ?
"yes"
:
"no"
, timeleft.c_str());
71
counter++;
72
}
73
}
74
handler->
PSendSysMessage
(
"player binds: %d"
, counter);
75
76
counter = 0;
77
if
(
Group
* group = player->
GetGroup
())
78
{
79
for
(
uint8
i = 0; i < 15; ++i)
80
{
81
Group::BoundInstancesMap
& binds = group->GetBoundInstances(
DifficultyID
(i));
82
for
(Group::BoundInstancesMap::const_iterator itr = binds.begin(); itr != binds.end(); ++itr)
83
{
84
InstanceSave
* save = itr->second.save;
85
std::string timeleft =
GetTimeString
(save->
GetResetTime
() - time(NULL));
86
handler->
PSendSysMessage
(
"map: %d inst: %d perm: %s diff: %d canReset: %s TTR: %s"
, itr->first, save->
GetInstanceId
(), itr->second.perm ?
"yes"
:
"no"
, save->
GetDifficulty
(), save->
CanReset
() ?
"yes"
:
"no"
, timeleft.c_str());
87
counter++;
88
}
89
}
90
}
91
handler->
PSendSysMessage
(
"group binds: %d"
, counter);
92
93
return
true
;
94
}
95
96
static
bool
HandleInstanceUnbindCommand
(
ChatHandler
* handler,
char
const
* args)
97
{
98
if
(!*args)
99
return
false
;
100
101
Player
* player = handler->
getSelectedPlayer
();
102
if
(!player)
103
player = handler->
GetSession
()->
GetPlayer
();
104
105
char
* map = strtok((
char
*)args,
" "
);
106
char
* pDiff = strtok(NULL,
" "
);
107
int8
diff = -1;
108
if
(pDiff)
109
diff = atoi(pDiff);
110
uint16
counter = 0;
111
uint16
MapId = 0;
112
113
if
(strcmp(map,
"all"
))
114
{
115
MapId =
uint16
(atoi(map));
116
if
(!MapId)
117
return
false
;
118
}
119
120
for
(
uint8
i = 0; i < 15; ++i)
121
{
122
Player::BoundInstancesMap
& binds = player->
GetBoundInstances
(
DifficultyID
(i));
123
for
(Player::BoundInstancesMap::iterator itr = binds.begin(); itr != binds.end();)
124
{
125
InstanceSave
* save = itr->second.save;
126
if
(itr->first != player->
GetMapId
() && (!MapId || MapId == itr->first) && (diff == -1 || diff == save->
GetDifficulty
()))
127
{
128
std::string timeleft =
GetTimeString
(save->
GetResetTime
() - time(NULL));
129
handler->
PSendSysMessage
(
"unbinding map: %d inst: %d perm: %s diff: %d canReset: %s TTR: %s"
, itr->first, save->
GetInstanceId
(), itr->second.perm ?
"yes"
:
"no"
, save->
GetDifficulty
(), save->
CanReset
() ?
"yes"
:
"no"
, timeleft.c_str());
130
player->
UnbindInstance
(itr,
DifficultyID
(i));
131
counter++;
132
}
133
else
134
++itr;
135
}
136
}
137
handler->
PSendSysMessage
(
"instances unbound: %d"
, counter);
138
139
return
true
;
140
}
141
142
static
bool
HandleInstanceStatsCommand
(
ChatHandler
* handler,
char
const
*
/*args*/
)
143
{
144
handler->
PSendSysMessage
(
"instances loaded: %d"
,
sMapMgr
->GetNumInstances());
145
handler->
PSendSysMessage
(
"players in instances: %d"
,
sMapMgr
->GetNumPlayersInInstances());
146
handler->
PSendSysMessage
(
"instance saves: %d"
,
sInstanceSaveMgr
->GetNumInstanceSaves());
147
handler->
PSendSysMessage
(
"players bound: %d"
,
sInstanceSaveMgr
->GetNumBoundPlayersTotal());
148
handler->
PSendSysMessage
(
"groups bound: %d"
,
sInstanceSaveMgr
->GetNumBoundGroupsTotal());
149
150
return
true
;
151
}
152
153
static
bool
HandleInstanceSaveDataCommand
(
ChatHandler
* handler,
char
const
*
/*args*/
)
154
{
155
Player
* player = handler->
GetSession
()->
GetPlayer
();
156
Map
* map = player->
GetMap
();
157
if
(!map->
IsInstance
())
158
{
159
handler->
PSendSysMessage
(
"Map is not an instance."
);
160
handler->
SetSentErrorMessage
(
true
);
161
return
false
;
162
}
163
164
if
(!((
InstanceMap
*)map)->GetInstanceScript())
165
{
166
handler->
PSendSysMessage
(
"Map has no instance data."
);
167
handler->
SetSentErrorMessage
(
true
);
168
return
false
;
169
}
170
171
((
InstanceMap
*)map)->GetInstanceScript()->SaveToDB();
172
173
return
true
;
174
}
175
};
176
177
void
AddSC_instance_commandscript
()
178
{
179
new
instance_commandscript
();
180
}
Chat.h
MINUTE
@ MINUTE
Definition
Common.h:119
HOUR
@ HOUR
Definition
Common.h:120
DAY
@ DAY
Definition
Common.h:121
DifficultyID
DifficultyID
Definition
DBCEnums.h:330
uint8
std::uint8_t uint8
Definition
Define.h:79
uint32
std::uint32_t uint32
Definition
Define.h:77
int8
std::int8_t int8
Definition
Define.h:75
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
uint64
std::uint64_t uint64
Definition
Define.h:76
uint16
std::uint16_t uint16
Definition
Define.h:78
Group.h
InstanceSaveMgr.h
sInstanceSaveMgr
#define sInstanceSaveMgr
Definition
InstanceSaveMgr.h:210
InstanceScript.h
MapManager.h
sMapMgr
#define sMapMgr
Definition
MapManager.h:145
Player.h
ScriptMgr.h
ChatHandler
Definition
Chat.h:41
ChatHandler::getSelectedPlayer
Player * getSelectedPlayer()
Definition
Chat.cpp:829
ChatHandler::GetSession
WorldSession * GetSession()
Definition
Chat.h:43
ChatHandler::PSendSysMessage
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
Definition
Chat.cpp:221
ChatHandler::SetSentErrorMessage
void SetSentErrorMessage(bool val)
Definition
Chat.h:114
CommandScript::CommandScript
CommandScript(const char *name)
Definition
ScriptMgr.cpp:1466
Group
Definition
Group.h:147
Group::BoundInstancesMap
UNORDERED_MAP< uint32, InstanceGroupBind > BoundInstancesMap
Definition
Group.h:162
InstanceMap
Definition
Map.h:637
InstanceSave
Definition
InstanceSaveMgr.h:32
InstanceSave::GetDifficulty
DifficultyID GetDifficulty() const
Definition
InstanceSaveMgr.h:103
InstanceSave::GetInstanceId
uint32 GetInstanceId() const
Definition
InstanceSaveMgr.h:51
InstanceSave::CanReset
bool CanReset() const
Definition
InstanceSaveMgr.h:98
InstanceSave::GetResetTime
time_t GetResetTime() const
Definition
InstanceSaveMgr.h:61
Map
Definition
Map.h:238
Map::IsInstance
bool IsInstance() const
Definition
Map.h:368
Player
Definition
Player.h:1289
Player::UnbindInstance
void UnbindInstance(uint32 mapid, DifficultyID difficulty, bool unload=false)
Definition
Player.cpp:13904
Player::GetGroup
Group * GetGroup()
Definition
Player.h:2972
Player::BoundInstancesMap
UNORDERED_MAP< uint32, InstancePlayerBind > BoundInstancesMap
Definition
Player.h:2917
Player::GetBoundInstances
BoundInstancesMap & GetBoundInstances(DifficultyID difficulty)
Definition
Player.h:2928
WorldLocation::GetMapId
uint32 GetMapId() const
Definition
Object.h:546
WorldObject::GetMap
Map * GetMap() const
Definition
Object.h:740
WorldSession::GetPlayer
Player * GetPlayer() const
Definition
WorldSession.h:295
instance_commandscript
Definition
cs_instance.cpp:22
instance_commandscript::HandleInstanceListBindsCommand
static bool HandleInstanceListBindsCommand(ChatHandler *handler, char const *)
Definition
cs_instance.cpp:56
instance_commandscript::HandleInstanceStatsCommand
static bool HandleInstanceStatsCommand(ChatHandler *handler, char const *)
Definition
cs_instance.cpp:142
instance_commandscript::HandleInstanceUnbindCommand
static bool HandleInstanceUnbindCommand(ChatHandler *handler, char const *args)
Definition
cs_instance.cpp:96
instance_commandscript::instance_commandscript
instance_commandscript()
Definition
cs_instance.cpp:24
instance_commandscript::GetTimeString
static std::string GetTimeString(uint64 time)
Definition
cs_instance.cpp:44
instance_commandscript::GetCommands
std::vector< ChatCommand > GetCommands() const OVERRIDE
Definition
cs_instance.cpp:26
instance_commandscript::HandleInstanceSaveDataCommand
static bool HandleInstanceSaveDataCommand(ChatHandler *handler, char const *)
Definition
cs_instance.cpp:153
AddSC_instance_commandscript
void AddSC_instance_commandscript()
Definition
cs_instance.cpp:177
rbac::RBAC_PERM_COMMAND_INSTANCE
@ RBAC_PERM_COMMAND_INSTANCE
Definition
RBAC.h:300
rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS
@ RBAC_PERM_COMMAND_INSTANCE_LISTBINDS
Definition
RBAC.h:301
rbac::RBAC_PERM_COMMAND_INSTANCE_STATS
@ RBAC_PERM_COMMAND_INSTANCE_STATS
Definition
RBAC.h:303
rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND
@ RBAC_PERM_COMMAND_INSTANCE_UNBIND
Definition
RBAC.h:302
rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA
@ RBAC_PERM_COMMAND_INSTANCE_SAVEDATA
Definition
RBAC.h:304
src
server
scripts
Commands
cs_instance.cpp
Generated on
for Project SkyFire Core by
1.17.0