summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-01-31 15:51:23 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-01-31 15:51:23 +0000
commit3a105344576ad49f85b90d0024e3283fb4207549 (patch)
tree4da4e5d0c61dc0d8f6a0e253ef7377b6e36347aa
parent78dc57282718e52985aac7b569e705200b64bd80 (diff)
downloadhercules-3a105344576ad49f85b90d0024e3283fb4207549.tar.gz
hercules-3a105344576ad49f85b90d0024e3283fb4207549.tar.bz2
hercules-3a105344576ad49f85b90d0024e3283fb4207549.tar.xz
hercules-3a105344576ad49f85b90d0024e3283fb4207549.zip
- Cleaned up Summon Slave mob skill to only summon number of missing mobs to complete the skill level (that is, SS level 5 will always bring the total count of slaves to 5, never above)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5138 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--src/map/mob.c23
-rw-r--r--src/map/skill.c2
3 files changed, 15 insertions, 13 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 4ffe06b1a..a38ae4d4c 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -5,6 +5,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EV
GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
2006/01/31
+ * Cleaned up Summon Slave mob skill to only summon number of missing mobs
+ to complete the skill level (that is, SS level 5 will always bring the
+ total count of slaves to 5, never above). [Skotlex]
* Fixed being able to Encore skills you no longer have in your tree.
[Skotlex]
* Added no HP regen while Bleeding, -25% ATK and ASPD penalties as well.
diff --git a/src/map/mob.c b/src/map/mob.c
index 17292fc85..fb7b30bef 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -3067,17 +3067,13 @@ int mob_warp(struct mob_data *md,int m,int x,int y,int type)
*/
int mob_countslave_sub(struct block_list *bl,va_list ap)
{
- int id,*c;
+ int id;
struct mob_data *md;
id=va_arg(ap,int);
-
- c=va_arg(ap,int *);
+
md = (struct mob_data *)bl;
-
- if( md->master_id==id ) {
- (*c)++;
+ if( md->master_id==id )
return 1;
- }
return 0;
}
@@ -3087,9 +3083,7 @@ int mob_countslave_sub(struct block_list *bl,va_list ap)
*/
int mob_countslave(struct block_list *bl)
{
- int c=0;
- map_foreachinmap(mob_countslave_sub, bl->m, BL_MOB,bl->id,&c);
- return c;
+ return map_foreachinmap(mob_countslave_sub, bl->m, BL_MOB,bl->id);
}
/*==========================================
* Summons amount slaves contained in the value[5] array using round-robin. [adapted by Skotlex]
@@ -3098,7 +3092,7 @@ int mob_countslave(struct block_list *bl)
int mob_summonslave(struct mob_data *md2,int *value,int amount,int skill_id)
{
struct mob_data *md;
- int bx,by,m,count = 0,class_,k;
+ int bx,by,m,count = 0,class_,k=0;
nullpo_retr(0, md2);
nullpo_retr(0, value);
@@ -3112,8 +3106,11 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,int skill_id)
while(count < 5 && mobdb_checkid(value[count])) count++;
if(count < 1) return 0;
-
- for(k=0;k<amount;k++) {
+ if (amount > 0 && amount < count) { //Do not start on 0, pick some random sub subset [Skotlex]
+ k = rand()%count;
+ amount+=k; //Increase final value by same amount to preserve total number to summon.
+ }
+ for(;k<amount;k++) {
int x=0,y=0,i=0;
class_ = value[k%count]; //Summon slaves in round-robin fashion. [Skotlex]
diff --git a/src/map/skill.c b/src/map/skill.c
index 2fdc406b0..965c75fd6 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -5128,6 +5128,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case NPC_SUMMONSLAVE: /* Žè‰º?¢Š« */
+ if (md) //Only summon remaining slaves
+ skilllv = skilllv - mob_countslave(&md->bl);
case NPC_SUMMONMONSTER: /* MOB?¢Š« */
if(md)
mob_summonslave(md,md->db->skill[md->skillidx].val,skilllv,skillid);