diff options
-rw-r--r-- | doc/atcommands.txt | 3 | ||||
-rw-r--r-- | src/map/atcommand.c | 170 |
2 files changed, 165 insertions, 8 deletions
diff --git a/doc/atcommands.txt b/doc/atcommands.txt index abd19f889..a38a3498a 100644 --- a/doc/atcommands.txt +++ b/doc/atcommands.txt @@ -210,3 +210,6 @@ mutearea: Mutes every player on screen (admin command) battleignore: Makes you immune to attacks (monsters/players/skills cannot target/hit you, admin command) snow, clouds, clouds2, fog, fireworks, sakura, leaves: Weather effects clearweather: Stop all weather effects +disguiseguild, undisguiseguild: (Un)disguises all online characters of a guild. (At least one member of that guild must be on.) +sizeall: Changes the size of all players +sizeguild: Changes the size of all online characters of a guild. (At least one member of that guild must be on.) diff --git a/src/map/atcommand.c b/src/map/atcommand.c index cfa87c79a..1577dfc99 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -5039,6 +5039,54 @@ ACMD_FUNC(disguiseall) } /*========================================== + * DisguiseGuild + *------------------------------------------*/ +ACMD_FUNC(disguiseguild) +{ + int id = 0, i; + char monster[NAME_LENGTH], guild[NAME_LENGTH]; + struct map_session_data *pl_sd; + struct guild *g; + + memset(monster, '\0', sizeof(monster)); + memset(guild, '\0', sizeof(guild)); + + if( !message || !*message || sscanf(message, "%23[^,], %23[^\r\n]", monster, guild) < 2 ) { + clif_displaymessage(fd, "Please enter a mob name/id and guild name/id (usage: @disguiseguild <mob name/id>, <guild name/id>)."); + return -1; + } + + if( (id = atoi(monster)) > 0 ) { + if( !mobdb_checkid(id) && !npcdb_checkid(id) ) + id = 0; + } else { + if( (id = mobdb_searchname(monster)) == 0 ) { + struct npc_data* nd = npc_name2id(monster); + if( nd != NULL ) + id = nd->class_; + } + } + + if( id == 0 ) { + clif_displaymessage(fd, msg_txt(123)); // Monster/NPC name/id hasn't been found. + return -1; + } + + if( (g = guild_searchname(guild)) == NULL && (g = guild_search(atoi(guild))) == NULL ) { + clif_displaymessage(fd, msg_txt(94)); // Incorrect name/ID, or no one from the guild is online. + return -1; + } + + for( i = 0; i < g->max_member; i++ ) + if( (pl_sd = g->member[i].sd) && !pc_isriding(pl_sd) ) + pc_disguise(pl_sd, id); + + clif_displaymessage(fd, msg_txt(122)); // Disguise applied. + return 0; +} + + +/*========================================== * @undisguise by [Yor] *------------------------------------------*/ ACMD_FUNC(undisguise) @@ -5076,6 +5124,38 @@ ACMD_FUNC(undisguiseall) } /*========================================== + * UndisguiseGuild + *------------------------------------------*/ +ACMD_FUNC(undisguiseguild) +{ + char guild_name[NAME_LENGTH]; + struct map_session_data *pl_sd; + struct guild *g; + int i; + nullpo_retr(-1, sd); + + memset(guild_name, '\0', sizeof(guild_name)); + + if(!message || !*message || sscanf(message, "%23[^\n]", guild_name) < 1) { + clif_displaymessage(fd, "Please enter guild name/id (usage: @undisguiseguild <guild name/id>)."); + return -1; + } + + if( (g = guild_searchname(guild_name)) == NULL && (g = guild_search(atoi(message))) == NULL ) { + clif_displaymessage(fd, msg_txt(94)); // Incorrect name/ID, or no one from the guild is online. + return -1; + } + + for(i = 0; i < g->max_member; i++) + if( (pl_sd = g->member[i].sd) && pl_sd->disguise ) + pc_disguise(pl_sd, 0); + + clif_displaymessage(fd, msg_txt(124)); // Undisguise applied. + + return 0; +} + +/*========================================== * @exp by [Skotlex] *------------------------------------------*/ ACMD_FUNC(exp) @@ -7459,24 +7539,94 @@ ACMD_FUNC(me) *------------------------------------------*/ ACMD_FUNC(size) { - int size=0; - + int size = 0; nullpo_retr(-1, sd); - size = atoi(message); + size = cap_value(atoi(message),0,2); + if(sd->state.size) { - sd->state.size=0; + sd->state.size = 0; pc_setpos(sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_TELEPORT); } - if(size==1) { - sd->state.size=1; + sd->state.size = size; + if( size == 1 ) clif_specialeffect(&sd->bl,420,AREA); - } else if(size==2) { - sd->state.size=2; + else if( size == 2 ) clif_specialeffect(&sd->bl,422,AREA); + + clif_displaymessage(fd, "Size change applied."); + return 0; +} + +ACMD_FUNC(sizeall) +{ + int size; + struct map_session_data *pl_sd; + struct s_mapiterator* iter; + + size = atoi(message); + size = cap_value(size,0,2); + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) { + if( pl_sd->state.size != size ) { + if( pl_sd->state.size ) { + pl_sd->state.size = 0; + pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, CLR_TELEPORT); + } + + pl_sd->state.size = size; + if( size == 1 ) + clif_specialeffect(&pl_sd->bl,420,AREA); + else if( size == 2 ) + clif_specialeffect(&pl_sd->bl,422,AREA); + } + } + mapit_free(iter); + + clif_displaymessage(fd, "Size change applied."); + return 0; +} + +ACMD_FUNC(sizeguild) +{ + int size = 0, i; + char guild[NAME_LENGTH]; + struct map_session_data *pl_sd; + struct guild *g; + nullpo_retr(-1, sd); + + memset(guild, '\0', sizeof(guild)); + + if( !message || !*message || sscanf(message, "%d %23[^\n]", &size, guild) < 2 ) { + clif_displaymessage(fd, "Please enter guild name/id (usage: @sizeguild <size> <guild name/id>)."); + return -1; + } + + if( (g = guild_searchname(guild)) == NULL && (g = guild_search(atoi(guild))) == NULL ) { + clif_displaymessage(fd, msg_txt(94)); // Incorrect name/ID, or no one from the guild is online. + return -1; + } + + size = cap_value(size,0,2); + + for( i = 0; i < g->max_member; i++ ) { + if( (pl_sd = g->member[i].sd) && pl_sd->state.size != size ) { + if( pl_sd->state.size ) { + pl_sd->state.size = 0; + pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, CLR_TELEPORT); + } + + pl_sd->state.size = size; + if( size == 1 ) + clif_specialeffect(&pl_sd->bl,420,AREA); + else if( size == 2 ) + clif_specialeffect(&pl_sd->bl,422,AREA); + } } + clif_displaymessage(fd, "Size change applied."); return 0; } @@ -8872,6 +9022,10 @@ void atcommand_basecommands(void) { ACMD_DEF(font), ACMD_DEF(accinfo), ACMD_DEF(set), + ACMD_DEF(undisguiseguild), + ACMD_DEF(disguiseguild), + ACMD_DEF(sizeall), + ACMD_DEF(sizeguild), /** * For Testing Purposes, not going to be here after we're done. **/ |