diff -r 550db5cefcc2 -r 8a2d1c2ceb88 src/town_cmd.cpp --- a/src/town_cmd.cpp Wed Jun 27 01:01:16 2007 +0000 +++ b/src/town_cmd.cpp Sat Jul 07 09:20:52 2007 +0000 @@ -1859,6 +1859,20 @@ if (eflags & BUILDING_HAS_4_TILES) DoClearTownHouseHelper(tile + TileDiffXY(1, 1)); } +static bool IsUniqueTownName(const char *name) +{ + const Town *t; + char buf[512]; + + FOR_ALL_TOWNS(t) { + SetDParam(0, t->index); + GetString(buf, STR_TOWN, lastof(buf)); + if (strcmp(buf, name) == 0) return false; + } + + return true; +} + /** Rename a town (server-only). * @param tile unused * @param flags type of operation @@ -1870,16 +1884,19 @@ StringID str; Town *t; - if (!IsValidTownID(p1) || _cmd_text[0] == '\0') return CMD_ERROR; + if (!IsValidTownID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR; t = GetTown(p1); - str = AllocateNameUnique(_cmd_text, 4); + if (!IsUniqueTownName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE); + + str = AllocateName(_cmd_text, 4); if (str == 0) return CMD_ERROR; if (flags & DC_EXEC) { DeleteName(t->townnametype); t->townnametype = str; + t->townnamegrfid = 0; UpdateTownVirtCoord(t); _town_sort_dirty = true;