Posso te oferecer uma outra solução? Será que resolveria apenas bloqueando o @mobsearch no mapa do seu evento?
Se sim, acesse src/map/atcommand.cpp, procure @mobsearch e mude isso:
ACMD_FUNC(mobsearch)
{
char mob_name[100];
int mob_id;
int number = 0;
struct s_mapiterator* it;
nullpo_retr(-1, sd);
if (!message || !*message || sscanf(message, "%99[^\n]", mob_name) < 1) {
clif_displaymessage(fd, msg_txt(sd,1218)); // Please enter a monster name (usage: @mobsearch <monster name>).
return -1;
}
if ((mob_id = atoi(mob_name)) == 0)
mob_id = mobdb_searchname(mob_name);
if( mobdb_checkid(mob_id) == 0){
snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1219),mob_name); // Invalid mob ID %s!
clif_displaymessage(fd, atcmd_output);
return -1;
}
strcpy(mob_name,mob_db(mob_id)->jname); // --ja--
// strcpy(mob_name,mob_db(mob_id)->name); // --en--
snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1220), mob_name, mapindex_id2name(sd->mapindex)); // Mob Search... %s %s
clif_displaymessage(fd, atcmd_output);
it = mapit_geteachmob();
for(;;)
{
TBL_MOB* md = (TBL_MOB*)mapit_next(it);
if( md == NULL )
break;// no more mobs
if( md->bl.m != sd->bl.m )
continue;
if( md->mob_id != mob_id )
continue;
++number;
if( md->spawn_timer == INVALID_TIMER )
snprintf(atcmd_output, sizeof(atcmd_output), "%2d[%3d:%3d] %s", number, md->bl.x, md->bl.y, md->name);
else
snprintf(atcmd_output, sizeof(atcmd_output), "%2d[%s] %s", number, "dead", md->name);
clif_displaymessage(fd, atcmd_output);
}
mapit_free(it);
return 0;
}
Para isso:
ACMD_FUNC(mobsearch)
{
char mob_name[100];
int mob_id;
int number = 0;
struct s_mapiterator* it;
nullpo_retr(-1, sd);
if(sd->bl.m == map_mapname2mapid("mapadoseuevento")) {
clif_displaymessage(fd, "Você não pode usar Mobsearch nesse mapa.");
return -1;
}
if (!message || !*message || sscanf(message, "%99[^\n]", mob_name) < 1) {
clif_displaymessage(fd, msg_txt(sd,1218)); // Please enter a monster name (usage: @mobsearch <monster name>).
return -1;
}
if ((mob_id = atoi(mob_name)) == 0)
mob_id = mobdb_searchname(mob_name);
if( mobdb_checkid(mob_id) == 0){
snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1219),mob_name); // Invalid mob ID %s!
clif_displaymessage(fd, atcmd_output);
return -1;
}
strcpy(mob_name,mob_db(mob_id)->jname); // --ja--
// strcpy(mob_name,mob_db(mob_id)->name); // --en--
snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1220), mob_name, mapindex_id2name(sd->mapindex)); // Mob Search... %s %s
clif_displaymessage(fd, atcmd_output);
it = mapit_geteachmob();
for(;;)
{
TBL_MOB* md = (TBL_MOB*)mapit_next(it);
if( md == NULL )
break;// no more mobs
if( md->bl.m != sd->bl.m )
continue;
if( md->mob_id != mob_id )
continue;
++number;
if( md->spawn_timer == INVALID_TIMER )
snprintf(atcmd_output, sizeof(atcmd_output), "%2d[%3d:%3d] %s", number, md->bl.x, md->bl.y, md->name);
else
snprintf(atcmd_output, sizeof(atcmd_output), "%2d[%s] %s", number, "dead", md->name);
clif_displaymessage(fd, atcmd_output);
}
mapit_free(it);
return 0;
}
Alterando apenas o nome "mapadoseuevento" para o nome do mapa do seu evento. Lembrando que toda alteração na pasta src só é aplicada quando você recompila o seu emulador.
Bônus
Caso você precise bloquear em mais de um mapa, você pode copiar apenas essa parte:
if(sd->bl.m == map_mapname2mapid("mapadoseuevento")) {
clif_displaymessage(fd, "Você não pode usar Mobsearch nesse mapa.");
return -1;
}
E colar abaixo da outra (existe uma forma mais organizada, mas eu recomendo que faça assim por enquanto.
Esse código serve pra bloquear outros comandos também, por exemplo, no nosso servidor o uso do @duel é bloqueado em Prontera. Você só tem que ficar atento ao return que encerra o Script, em alguns comandos é -1, outros 0 ou 1.
Espero ter ajudado!