diff options
-rw-r--r-- | conf/messages.conf | 14 | ||||
-rw-r--r-- | src/map/atcommand.c | 78 | ||||
-rw-r--r-- | src/map/clif.c | 20 |
3 files changed, 89 insertions, 23 deletions
diff --git a/conf/messages.conf b/conf/messages.conf index 2f6a98882..bbbd04c2e 100644 --- a/conf/messages.conf +++ b/conf/messages.conf @@ -247,7 +247,7 @@ 250: You have already opened your storage. Close it first. 251: You have already opened your guild storage. Close it first. 252: You are not in a guild. -//253 FREE +253: You already are at your destination! 254: GM command configuration has been reloaded. 255: Battle configuration has been reloaded. 256: Status database has been reloaded. @@ -470,7 +470,12 @@ //541: %.0s%.0sSomeone got %s 542: '%s' stole %s's %s (chance: %0.02f%%) //542: %.0s%.0sSomeone stole %s -//543-548 FREE +//543-546 FREE +// @showmobs +546: Please enter a mob name/id (usage: @showmobs <mob name/id>) +547: Invalid mob name %s! +// @clearcart +548: You can't clean a cart while vending! // @Autotrade 549: You should have a shop open in order to use @autotrade. @@ -1065,7 +1070,10 @@ 1199: Items on your autolootitem list: 1200: Your autolootitem list has been reset. -//1201-1202 FREE +// @guildstorage +1201: Your guild's storage has already been opened by another member, try again later. + +//1202 FREE // @snow 1203: Snow has stopped falling. diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 6668214fa..e9b00cce6 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -404,6 +404,11 @@ ACMD(mapmove) { clif->message(fd, msg_txt(1)); // Map not found. return false; } + + if( sd->bl.m == m && sd->bl.x == x && sd->bl.y == y ) { + clif->message(fd, msg_txt(253)); // You already are at your destination! + return false; + } if ((x || y) && map->getcell(m, x, y, CELL_CHKNOPASS) && pc_get_group_level(sd) < battle_config.gm_ignore_warpable_area) { //This is to prevent the pc->setpos call from printing an error. @@ -466,27 +471,37 @@ ACMD(jumpto) { clif->message(fd, msg_txt(911)); // Please enter a player name (usage: @jumpto/@warpto/@goto <char name/ID>). return false; } - - if((pl_sd=map->nick2sd((char *)message)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) { - clif->message(fd, msg_txt(3)); // Character not found. - return false; - } - - if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarpto && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) { - clif->message(fd, msg_txt(247)); // You are not authorized to warp to this map. + + if( message == sd->status.name || (atoi(message)) == sd->status.char_id ) { + clif->message(fd, msg_txt(253)); // You already are at your destination! return false; } - + if (sd->bl.m >= 0 && map->list[sd->bl.m].flag.nowarp && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) { clif->message(fd, msg_txt(248)); // You are not authorized to warp from your current map. return false; } - + if( pc_isdead(sd) ) { clif->message(fd, msg_txt(864)); // "You cannot use this command when dead." return false; } + if((pl_sd=map->nick2sd((char *)message)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) { + clif->message(fd, msg_txt(3)); // Character not found. + return false; + } + + if (pl_sd->bl.m >= 0 && map->list[pl_sd->bl.m].flag.nowarpto && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) { + clif->message(fd, msg_txt(247)); // You are not authorized to warp to this map. + return false; + } + + if( pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y ) { + clif->message(fd, msg_txt(253)); // You already are at your destination! + return false; + } + pc->setpos(sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, CLR_TELEPORT); sprintf(atcmd_output, msg_txt(4), pl_sd->status.name); // Jumped to %s clif->message(fd, atcmd_output); @@ -521,6 +536,11 @@ ACMD(jump) if (!map->search_freecell(NULL, sd->bl.m, &x, &y, 10, 10, 1)) x = y = 0; //Invalid cell, use random spot. } + + if( x && y && sd->bl.x == x && sd->bl.y == y ) { + clif->message(fd, msg_txt(253)); // You already are at your destination! + return false; + } pc->setpos(sd, sd->mapindex, x, y, CLR_TELEPORT); sprintf(atcmd_output, msg_txt(5), sd->bl.x, sd->bl.y); // Jumped to %d %d @@ -825,7 +845,11 @@ ACMD(guildstorage) return false; } - gstorage->open(sd); + if( gstorage->open(sd) ) { + clif->message(fd, msg_txt(1201)); // Your guild's storage has already been opened by another member, try again later. + return false; + } + clif->message(fd, msg_txt(920)); // Guild storage opened. return true; } @@ -2354,7 +2378,11 @@ ACMD(zeny) if((ret=pc->payzeny(sd,-zeny,LOG_TYPE_COMMAND,NULL)) == 1) clif->message(fd, msg_txt(41)); // Unable to decrease the number/value. } - if(!ret) clif->message(fd, msg_txt(176)); //ret=0 mean cmd success + + if( ret ) //ret != 0 means cmd failure + return false; + + clif->message(fd, msg_txt(176)); return true; } @@ -5184,9 +5212,10 @@ ACMD(clearcart) return false; } - if (sd->state.vending == 1) { //Somehow... - return false; - } + if( sd->state.vending == 1 ) { + clif->message(fd, msg_txt(548)); // You can't clean a cart while vending! + return false; + } for( i = 0; i < MAX_CART; i++ ) if(sd->status.cart[i].nameid > 0) @@ -6674,20 +6703,29 @@ ACMD(showmobs) int number = 0; struct s_mapiterator* it; - if(sscanf(message, "%99[^\n]", mob_name) < 0) + if( sscanf(message, "%99[^\n]", mob_name) < 0 ) { + clif->message(fd, msg_txt(546)); // Please enter a mob name/id (usage: @showmobs <mob name/id>) return false; - - if((mob_id = atoi(mob_name)) == 0) + } + + if( (mob_id = atoi(mob_name)) == 0 ) mob_id = mob->db_searchname(mob_name); + + if( mob_id == 0 ) { + snprintf(atcmd_output, sizeof atcmd_output, msg_txt(547), mob_name); // Invalid mob name %s! + clif->message(fd, atcmd_output); + return false; + } + if(mob_id > 0 && mob->db_checkid(mob_id) == 0){ snprintf(atcmd_output, sizeof atcmd_output, msg_txt(1250),mob_name); // Invalid mob id %s! clif->message(fd, atcmd_output); - return true; + return false; } if(mob->db(mob_id)->status.mode&MD_BOSS && !pc_has_permission(sd, PC_PERM_SHOW_BOSS)){ // If player group does not have access to boss mobs. clif->message(fd, msg_txt(1251)); // Can't show boss mobs! - return true; + return false; } if(mob_id == atoi(mob_name) && mob->db(mob_id)->jname) diff --git a/src/map/clif.c b/src/map/clif.c index 7715e6c6a..d0fb08486 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8480,6 +8480,26 @@ void clif_refresh(struct map_session_data *sd) pc->disguise(sd, disguise); } + // Notify the client that the storage is open + if( sd->state.storage_flag == 1 ) { + storage->sortitem(sd->status.storage.items, ARRAYLENGTH(sd->status.storage.items)); + clif->storagelist(sd, sd->status.storage.items, ARRAYLENGTH(sd->status.storage.items)); + clif->updatestorageamount(sd, sd->status.storage.storage_amount, MAX_STORAGE); + } + // Notify the client that the gstorage is open otherwise it will + // remain locked forever and nobody will be able to access it + if( sd->state.storage_flag == 2 ) { + struct guild_storage *gstor; + if( (gstor = gstorage->id2storage2(sd->status.guild_id)) == NULL) { + // Shouldn't happen... The information should already be at the map-server + intif->request_guild_storage(sd->status.account_id,sd->status.guild_id); + } else { + storage->sortitem(gstor->items, ARRAYLENGTH(gstor->items)); + clif->storagelist(sd, gstor->items, ARRAYLENGTH(gstor->items)); + clif->updatestorageamount(sd, gstor->storage_amount, MAX_GUILD_STORAGE); + } + } + } |