summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--src/login/login.c4
-rw-r--r--src/map/battle.c21
-rw-r--r--src/map/itemdb.c1
-rw-r--r--src/map/skill.c26
5 files changed, 33 insertions, 22 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 10ef82bc9..ed6332bf4 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/08/09
+ * Moved the class-change code from battle_calc_weapon_attack to
+ skill_additional_effect. Alchemist summons now also have a chance of
+ triggering polymorphing. [Skotlex]
* Removed the code which was auto-setting attacks that do no damage to type
FLEE, since that was disabling status-effects which should incur even when
the damage was blocked. [Skotlex]
diff --git a/src/login/login.c b/src/login/login.c
index 81727b003..8dd82cffb 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -1911,7 +1911,8 @@ int parse_fromchar(int fd) {
}
{
struct online_login_data *p;
- unsigned int aid, users;
+ int aid;
+ unsigned int users;
online_db->foreach(online_db,online_db_setoffline,id); //Set all chars from this char-server offline first
users = RFIFOW(fd,4);
for (i = 0; i < users; i++) {
@@ -1952,6 +1953,7 @@ int parse_fromchar(int fd) {
WFIFOSET(fd,WFIFOW(fd,2));
}
break;
+
case 0x2736: // WAN IP update from char-server
if (RFIFOREST(fd) < 6)
return 0;
diff --git a/src/map/battle.c b/src/map/battle.c
index 32857bcb3..1731e12e7 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -2024,27 +2024,6 @@ static struct Damage battle_calc_weapon_attack(
}
}
- if(sd && sd->classchange && target->type == BL_MOB && !(tstatus->mode&MD_BOSS) && (rand()%10000 < sd->classchange))
- {
- struct mob_data *tmd = (TBL_MOB*)target;
- if (!tmd->guardian_data && (tmd->class_ < 1324 || tmd->class_ > 1363) && !mob_is_clone(tmd->class_))
- { //Classchange:
- struct mob_db *mob;
- int k, class_;
- i = 0;
- do {
- do {
- class_ = rand() % MAX_MOB_DB;
- } while (!mobdb_checkid(class_));
-
- k = rand() % 1000000;
- mob = mob_db(class_);
- } while ((mob->status.mode&(MD_BOSS|MD_PLANT) || mob->summonper[0] <= k) && (i++) < 2000);
- if (i< 2000)
- mob_class_change(tmd,class_);
- }
- }
-
if (wd.damage || wd.damage2) {
if (sd && battle_config.equip_self_break_rate)
{ // Self weapon breaking
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index f3d462002..76ce6f406 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -111,6 +111,7 @@ int itemdb_searchrandomid(int group)
ShowError("itemdb_searchrandomid: No item entries for group id %d\n", group);
return UNKNOWN_ITEM_ID;
}
+
/*==========================================
* Calculates total item-group related bonuses for the given item. [Skotlex]
*------------------------------------------
diff --git a/src/map/skill.c b/src/map/skill.c
index e2239d84f..c541ad4ac 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1454,6 +1454,32 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
break; //Only one auto skill comes off at a time.
}
}
+
+ //Polymorph
+ if(sd && sd->classchange && attack_type&BF_WEAPON &&
+ dstmd && !(tstatus->mode&MD_BOSS) && !dstmd->guardian_data &&
+ (dstmd->class_ < 1324 || dstmd->class_ > 1363) && //Treasure boxes
+ !mob_is_clone(dstmd->class_) &&
+ (rand()%10000 < sd->classchange))
+ {
+ struct mob_db *mob;
+ int class_;
+ skill = 0;
+ do {
+ do {
+ class_ = rand() % MAX_MOB_DB;
+ } while (!mobdb_checkid(class_));
+
+ rate = rand() % 1000000;
+ mob = mob_db(class_);
+ } while (
+ (mob->status.mode&(MD_BOSS|MD_PLANT) || mob->summonper[0] <= rate) &&
+ (skill++) < 2000);
+ if (skill < 2000)
+ mob_class_change(dstmd,class_);
+ }
+
+
return 0;
}