Convert guild_db to unordered_map (#7612)

* Refactor guild db to STL container

* Split up struct guild and MapGuild/CharGuild
This commit is contained in:
Vincent Stumpf
2023-06-16 19:42:55 -07:00
committed by GitHub
parent 39cdaa6b84
commit 833966f47b
21 changed files with 962 additions and 1016 deletions

View File

@@ -5916,7 +5916,6 @@ BUILDIN_FUNC(warpguild)
{
TBL_PC *sd = NULL;
TBL_PC *pl_sd;
struct guild* g;
struct s_mapiterator* iter;
int type, mapindex = 0, m = -1;
@@ -5925,7 +5924,7 @@ BUILDIN_FUNC(warpguild)
int y = script_getnum(st,4);
int gid = script_getnum(st,5);
g = guild_search(gid);
auto g = guild_search(gid);
if( g == NULL )
return SCRIPT_CMD_SUCCESS;
@@ -9005,11 +9004,11 @@ BUILDIN_FUNC(getpartyleader)
BUILDIN_FUNC(getguildname)
{
int guild_id;
struct guild* g;
guild_id = script_getnum(st,2);
if( ( g = guild_search(guild_id) ) != NULL )
script_pushstrcopy(st,g->name);
auto g = guild_search(guild_id);
if (g)
script_pushstrcopy(st,g->guild.name);
else
script_pushconststr(st,"null");
return SCRIPT_CMD_SUCCESS;
@@ -9022,11 +9021,11 @@ BUILDIN_FUNC(getguildname)
BUILDIN_FUNC(getguildmaster)
{
int guild_id;
struct guild* g;
guild_id = script_getnum(st,2);
if( ( g = guild_search(guild_id) ) != NULL )
script_pushstrcopy(st,g->member[0].name);
auto g = guild_search(guild_id);
if (g)
script_pushstrcopy(st,g->guild.member[0].name);
else
script_pushconststr(st,"null");
return SCRIPT_CMD_SUCCESS;
@@ -9035,11 +9034,11 @@ BUILDIN_FUNC(getguildmaster)
BUILDIN_FUNC(getguildmasterid)
{
int guild_id;
struct guild* g;
guild_id = script_getnum(st,2);
if( ( g = guild_search(guild_id) ) != NULL )
script_pushint(st,g->member[0].char_id);
auto g = guild_search(guild_id);
if (g)
script_pushint(st,g->guild.member[0].char_id);
else
script_pushint(st,0);
return SCRIPT_CMD_SUCCESS;
@@ -9059,7 +9058,6 @@ BUILDIN_FUNC(strcharinfo)
{
TBL_PC *sd;
int num;
struct guild* g;
struct party_data* p;
if (!script_charid2sd(3,sd)) {
@@ -9080,8 +9078,8 @@ BUILDIN_FUNC(strcharinfo)
}
break;
case 2:
if( ( g = sd->guild ) != NULL ) {
script_pushstrcopy(st,g->name);
if (sd->guild) {
script_pushstrcopy(st,sd->guild->guild.name);
} else {
script_pushconststr(st,"");
}
@@ -10296,15 +10294,14 @@ BUILDIN_FUNC(getgdskilllv)
{
int guild_id;
uint16 skill_id;
struct guild* g;
guild_id = script_getnum(st,2);
skill_id = ( script_isstring(st, 3) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) );
g = guild_search(guild_id);
if( g == NULL )
auto g = guild_search(guild_id);
if (!g)
script_pushint(st, -1);
else
script_pushint(st, guild_checkskill(g,skill_id));
script_pushint(st, guild_checkskill(g->guild,skill_id));
return SCRIPT_CMD_SUCCESS;
}
@@ -10878,9 +10875,9 @@ BUILDIN_FUNC(guild_has_permission){
return SCRIPT_CMD_SUCCESS;
}
int position = guild_getposition(sd);
int position = guild_getposition(*sd);
if( position < 0 || ( sd->guild->position[position].mode&permission ) != permission ){
if( position < 0 || ( sd->guild->guild.position[position].mode&permission ) != permission ){
script_pushint( st, false );
return SCRIPT_CMD_SUCCESS;
@@ -11981,20 +11978,19 @@ BUILDIN_FUNC(getmapguildusers)
int16 m;
int gid;
int c=0;
struct guild *g = NULL;
str=script_getstr(st,2);
gid=script_getnum(st,3);
if ((m = map_mapname2mapid(str)) < 0) { // map id on this server (m == -1 if not in actual map-server)
script_pushint(st,-1);
return SCRIPT_CMD_SUCCESS;
}
g = guild_search(gid);
auto g = guild_search(gid);
if (g){
unsigned short i;
for(i = 0; i < g->max_member; i++)
for(i = 0; i < g->guild.max_member; i++)
{
if (g->member[i].sd && g->member[i].sd->bl.m == m)
if (g->guild.member[i].sd && g->guild.member[i].sd->bl.m == m)
c++;
}
}
@@ -14099,7 +14095,7 @@ BUILDIN_FUNC(failedremovecards) {
BUILDIN_FUNC(mapwarp) // Added by RoVeRT
{
int x,y,m,check_val=0,check_ID=0,i=0;
struct guild *g = NULL;
std::shared_ptr<MapGuild> g;
struct party_data *p = NULL;
const char *str;
const char *mapname;
@@ -14123,10 +14119,10 @@ BUILDIN_FUNC(mapwarp) // Added by RoVeRT
case 1:
g = guild_search(check_ID);
if (g){
for( i=0; i < g->max_member; i++)
for( i=0; i < g->guild.max_member; i++)
{
if(g->member[i].sd && g->member[i].sd->bl.m==m){
pc_setpos(g->member[i].sd,index,x,y,CLR_TELEPORT);
if(g->guild.member[i].sd && g->guild.member[i].sd->bl.m==m){
pc_setpos(g->guild.member[i].sd,index,x,y,CLR_TELEPORT);
}
}
}
@@ -15654,7 +15650,6 @@ BUILDIN_FUNC(recovery)
}
case 2:
{
struct guild* g;
//When no guild given, we use invoker guild
int g_id = 0, i;
if(script_hasdata(st,5)) {//Bad maps shouldn't cause issues
@@ -15668,12 +15663,12 @@ BUILDIN_FUNC(recovery)
g_id = script_getnum(st,3);
else if(script_rid2sd(sd))
g_id = sd->status.guild_id;
g = guild_search(g_id);
auto g = guild_search(g_id);
if(g == NULL)
return SCRIPT_CMD_SUCCESS;
for (i = 0; i < MAX_GUILD; i++) {
map_session_data* pl_sd;
if((!(pl_sd = g->member[i].sd) || pl_sd->status.guild_id != g_id)
if((!(pl_sd = g->guild.member[i].sd) || pl_sd->status.guild_id != g_id)
|| (map_idx && pl_sd->bl.m != map_idx))
continue;
recovery_sub(pl_sd, revive);
@@ -21331,7 +21326,7 @@ int script_instancegetid(struct script_state* st, e_instance_mode mode)
}
break;
case IM_GUILD: {
struct guild *gd = guild_search(sd->status.guild_id);
auto gd = guild_search(sd->status.guild_id);
if (gd && gd->instance_id > 0)
instance_id = gd->instance_id;
@@ -21735,7 +21730,6 @@ BUILDIN_FUNC(instance_check_party)
BUILDIN_FUNC(instance_check_guild)
{
int amount, min, max, i, guild_id = 0, c = 0;
struct guild *g = NULL;
amount = script_hasdata(st,3) ? script_getnum(st,3) : 1; // Amount of needed Guild members for the Instance.
min = script_hasdata(st,4) ? script_getnum(st,4) : 1; // Minimum Level needed to join the Instance.
@@ -21754,7 +21748,8 @@ BUILDIN_FUNC(instance_check_guild)
else
return SCRIPT_CMD_FAILURE;
if (!(g = guild_search(guild_id))) {
auto g = guild_search(guild_id);
if (!g) {
script_pushint(st, 0); // Returns false if guild does not exist.
return SCRIPT_CMD_FAILURE;
}
@@ -21762,7 +21757,7 @@ BUILDIN_FUNC(instance_check_guild)
for(i = 0; i < MAX_GUILD; i++) {
map_session_data *pl_sd;
if ((pl_sd = g->member[i].sd)) {
if ((pl_sd = g->guild.member[i].sd)) {
if (map_id2bl(pl_sd->bl.id) && !pl_sd->state.autotrade) {
if (pl_sd->status.base_level < min) {
script_pushint(st, 0);
@@ -23493,10 +23488,9 @@ BUILDIN_FUNC(disable_command) {
*/
BUILDIN_FUNC(getguildmember)
{
struct guild *g = NULL;
uint8 j = 0;
g = guild_search(script_getnum(st,2));
auto g = guild_search(script_getnum(st,2));
if (g) {
uint8 i, type = 0;
@@ -23528,25 +23522,25 @@ BUILDIN_FUNC(getguildmember)
}
for (i = 0; i < MAX_GUILD; i++) {
if (g->member[i].account_id) {
if (g->guild.member[i].account_id) {
switch (type) {
case 2:
if (data)
setd_sub_num( st, NULL, varname, j, g->member[i].account_id, data->ref );
setd_sub_num( st, NULL, varname, j, g->guild.member[i].account_id, data->ref );
else
mapreg_setreg(reference_uid(add_str("$@guildmemberaid"), j),g->member[i].account_id);
mapreg_setreg(reference_uid(add_str("$@guildmemberaid"), j),g->guild.member[i].account_id);
break;
case 1:
if (data)
setd_sub_num( st, NULL, varname, j, g->member[i].char_id, data->ref );
setd_sub_num( st, NULL, varname, j, g->guild.member[i].char_id, data->ref );
else
mapreg_setreg(reference_uid(add_str("$@guildmembercid"), j), g->member[i].char_id);
mapreg_setreg(reference_uid(add_str("$@guildmembercid"), j), g->guild.member[i].char_id);
break;
default:
if (data)
setd_sub_str( st, NULL, varname, j, g->member[i].name, data->ref );
setd_sub_str( st, NULL, varname, j, g->guild.member[i].name, data->ref );
else
mapreg_setregstr(reference_uid(add_str("$@guildmembername$"), j), g->member[i].name);
mapreg_setregstr(reference_uid(add_str("$@guildmembername$"), j), g->guild.member[i].name);
break;
}
j++;
@@ -24533,7 +24527,6 @@ BUILDIN_FUNC(jobcanentermap) {
*/
BUILDIN_FUNC(getguildalliance)
{
struct guild *guild_data1, *guild_data2;
int guild_id1, guild_id2, i = 0;
guild_id1 = script_getnum(st,2);
@@ -24549,8 +24542,8 @@ BUILDIN_FUNC(getguildalliance)
return SCRIPT_CMD_SUCCESS;
}
guild_data1 = guild_search(guild_id1);
guild_data2 = guild_search(guild_id2);
auto guild_data1 = guild_search(guild_id1);
auto guild_data2 = guild_search(guild_id2);
if (guild_data1 == NULL) {
ShowWarning("buildin_getguildalliance: Requesting non-existent GuildID1 '%d'.\n", guild_id1);
@@ -24563,13 +24556,13 @@ BUILDIN_FUNC(getguildalliance)
return SCRIPT_CMD_FAILURE;
}
ARR_FIND(0, MAX_GUILDALLIANCE, i, guild_data1->alliance[i].guild_id == guild_id2);
ARR_FIND(0, MAX_GUILDALLIANCE, i, guild_data1->guild.alliance[i].guild_id == guild_id2);
if (i == MAX_GUILDALLIANCE) {
script_pushint(st, 0);
return SCRIPT_CMD_SUCCESS;
}
if (guild_data1->alliance[i].opposition)
if (guild_data1->guild.alliance[i].opposition)
script_pushint(st, 2);
else
script_pushint(st, 1);
@@ -25929,7 +25922,6 @@ BUILDIN_FUNC(identifyall) {
BUILDIN_FUNC(is_guild_leader)
{
map_session_data* sd;
struct guild* guild_data;
int guild_id;
if (!script_rid2sd(sd)) {
@@ -25942,9 +25934,9 @@ BUILDIN_FUNC(is_guild_leader)
else
guild_id = sd->status.guild_id;
guild_data = guild_search(guild_id);
auto guild_data = guild_search(guild_id);
if (guild_data)
script_pushint(st, (guild_data->member[0].char_id == sd->status.char_id));
script_pushint(st, (guild_data->guild.member[0].char_id == sd->status.char_id));
else
script_pushint(st, false);
return SCRIPT_CMD_SUCCESS;