diff options
author | shennetsind <ind@henn.et> | 2013-11-27 10:47:02 -0200 |
---|---|---|
committer | shennetsind <ind@henn.et> | 2013-11-27 10:47:02 -0200 |
commit | 8ecffa8892e00fc1116e4e34fa448e46774194e5 (patch) | |
tree | 1d07fc89342b740735ae5bb83fdf6ab0e37fbcd4 | |
parent | 85d99a3207a34eb5abdc3bafd44d9e7d10082bc6 (diff) | |
download | hercules-8ecffa8892e00fc1116e4e34fa448e46774194e5.tar.gz hercules-8ecffa8892e00fc1116e4e34fa448e46774194e5.tar.bz2 hercules-8ecffa8892e00fc1116e4e34fa448e46774194e5.tar.xz hercules-8ecffa8892e00fc1116e4e34fa448e46774194e5.zip |
Dropped emperium spawn restrictions
Thanks to kyeme for bringing it to our attention.
Signed-off-by: shennetsind <ind@henn.et>
-rw-r--r-- | src/map/atcommand.c | 9 | ||||
-rw-r--r-- | src/map/mob.c | 12 | ||||
-rw-r--r-- | src/map/script.c | 5 | ||||
-rw-r--r-- | src/map/skill.c | 2 | ||||
-rw-r--r-- | src/map/status.c | 2 |
5 files changed, 12 insertions, 18 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 5c31155b1..b45807cf8 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -1927,12 +1927,7 @@ ACMD(monster) clif->message(fd, msg_txt(40)); // Invalid monster ID or name. return false; } - - if (mob_id == MOBID_EMPERIUM) { - clif->message(fd, msg_txt(83)); // Monster 'Emperium' cannot be spawned. - return false; - } - + if (number <= 0) number = 1; @@ -1957,7 +1952,7 @@ ACMD(monster) range = (int)sqrt((float)number) +2; // calculation of an odd number (+ 4 area around) for (i = 0; i < number; i++) { map->search_freecell(&sd->bl, 0, &mx, &my, range, range, 0); - k = mob->once_spawn(sd, sd->bl.m, mx, my, name, mob_id, 1, eventname, size, AI_NONE); + k = mob->once_spawn(sd, sd->bl.m, mx, my, name, mob_id, 1, eventname, size, AI_NONE|(mob_id == MOBID_EMPERIUM?0x200:0x0)); count += (k != 0) ? 1 : 0; } diff --git a/src/map/mob.c b/src/map/mob.c index 35c9ed1aa..2cd82e4d1 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -459,6 +459,12 @@ struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const char* mobname, int class_, int amount, const char* event, unsigned int size, unsigned int ai) { struct mob_data* md = NULL; int count, lv; + bool no_guardian_data = false; + + if( ai && ai&0x200 ) { + no_guardian_data = true; + ai &=~ 0x200; + } if (m < 0 || amount <= 0) return 0; // invalid input @@ -472,7 +478,7 @@ int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const if (!md) continue; - if (class_ == MOBID_EMPERIUM) { + if (class_ == MOBID_EMPERIUM && !no_guardian_data) { struct guild_castle* gc = guild->mapindex2gc(map_id2index(m)); struct guild* g = (gc) ? guild->search(gc->guild_id) : NULL; if (gc) { @@ -581,7 +587,7 @@ int mob_spawn_guardian_sub(int tid, int64 tick, int id, intptr_t data) { if (g == NULL) { //Liberate castle, if the guild is not found this is an error! [Skotlex] ShowError("mob_spawn_guardian_sub: Couldn't load guild %d!\n", (int)data); - if (md->class_ == MOBID_EMPERIUM) + if (md->class_ == MOBID_EMPERIUM && md->guardian_data) { //Not sure this is the best way, but otherwise we'd be invoking this for ALL guardians spawned later on. md->guardian_data->guild_id = 0; if (md->guardian_data->castle->guild_id) //Free castle up. @@ -2512,7 +2518,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { logs->mvpdrop(mvp_sd, md->class_, log_mvp); } - if (type&2 && !sd && md->class_ == MOBID_EMPERIUM) + if (type&2 && !sd && md->class_ == MOBID_EMPERIUM && md->guardian_data) //Emperium destroyed by script. Discard mvp character. [Skotlex] mvp_sd = NULL; diff --git a/src/map/script.c b/src/map/script.c index 777179507..39f29ec4f 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -17330,11 +17330,6 @@ BUILDIN(montransform) { return false; } - if(mob_id == MOBID_EMPERIUM) { - ShowWarning("buildin_montransform: Monster 'Emperium' cannot be used.\n"); - return false; - } - if( !(type > SC_NONE && type < SC_MAX) ){ ShowWarning("buildin_montransform: Unsupported status change id %d\n", type); return false; diff --git a/src/map/skill.c b/src/map/skill.c index 698252d18..84c45e8a6 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -12930,7 +12930,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id if (map->foreachinrange(mob->count_sub, &sd->bl, skill->get_splash(skill_id, skill_lv), BL_MOB, MOBID_EMPERIUM, MOBID_GUARIDAN_STONE1, MOBID_GUARIDAN_STONE2)) { char output[128]; - sprintf(output, "You're too close to a stone or emperium to do this skill"); + sprintf(output, "You're too close to a stone or emperium to do this skill"); /* TODO official response? or message.conf it */ clif->colormes(sd->fd, COLOR_RED, output); return 0; } diff --git a/src/map/status.c b/src/map/status.c index d4e1d1b31..132724bef 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2022,8 +2022,6 @@ int status_calc_mob_(struct mob_data* md, enum e_status_calc_opt opt) { if (md->guardian_data && md->guardian_data->guardup_lv) flag|=4; - if (md->class_ == MOBID_EMPERIUM) - flag|=4; if (battle_config.slaves_inherit_speed && md->master_id) flag|=8; |