summaryrefslogtreecommitdiff
path: root/src/map/status.c
diff options
context:
space:
mode:
authorglighta <glighta@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-11-12 01:54:56 +0000
committerglighta <glighta@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-11-12 01:54:56 +0000
commit94898ebfcf8ccdae5b064fa27f843136c19e2a65 (patch)
tree144b6104b30e2df0bcaa77b3ef096af206d569f7 /src/map/status.c
parent0f715fc0dbaa5c2327a951d107e971f3d7ebd216 (diff)
downloadhercules-94898ebfcf8ccdae5b064fa27f843136c19e2a65.tar.gz
hercules-94898ebfcf8ccdae5b064fa27f843136c19e2a65.tar.bz2
hercules-94898ebfcf8ccdae5b064fa27f843136c19e2a65.tar.xz
hercules-94898ebfcf8ccdae5b064fa27f843136c19e2a65.zip
-Upd mob_count to read a 10 modib list to chk if present or not
-Add UNLIMITED_HUMMING implementation, now increase sp requirement and make cast unbreakable -Upd Group dance overlaping A and B, previous chk wasn't ending other properly (if fail was skipping other) -Upd OdinPower effect -Fix Cursed-Circle, shoudn't be able to cast near Emp,Stones bugreport:6457 -Fix Cursed-Circle wasn't remove when caster was being warped -Small docs upd git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16918 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/status.c')
-rw-r--r--src/map/status.c74
1 files changed, 40 insertions, 34 deletions
diff --git a/src/map/status.c b/src/map/status.c
index a7c14dcaf..f3625b1e7 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -4561,7 +4561,7 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan
if(sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3)
matk += 50;
if(sc->data[SC_ODINS_POWER])
- matk += 70;
+ matk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1; //70 lvl1, 100lvl2
if(sc->data[SC_IZAYOI])
matk += 50 * sc->data[SC_IZAYOI]->val1;
if( sc->data[SC_ZANGETSU] )
@@ -4923,10 +4923,10 @@ static defType status_calc_mdef(struct block_list *bl, struct status_change *sc,
mdef -= mdef * sc->data[SC_GT_CHANGE]->val4 / 100;
if(sc->data[SC_WATER_BARRIER])
mdef += sc->data[SC_WATER_BARRIER]->val2;
+ if (sc->data[SC_ODINS_POWER])
+ mdef -= 20 * sc->data[SC_ODINS_POWER]->val1;
if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3)
mdef += 50;
- if(sc->data[SC_ODINS_POWER])
- mdef -= 20;
return (defType)cap_value(mdef,DEFTYPE_MIN,DEFTYPE_MAX);
}
@@ -6868,37 +6868,43 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_MOONLITSERENADE:
case SC_RUSHWINDMILL:
case SC_ECHOSONG:
- case SC_HARMONIZE:
- case SC_VOICEOFSIREN:
- case SC_DEEPSLEEP:
- case SC_SIRCLEOFNATURE:
- if( sc->data[type] ) // Don't remove same sc.
- break;
- status_change_end(bl, SC_SWINGDANCE, INVALID_TIMER);
- status_change_end(bl, SC_SYMPHONYOFLOVER, INVALID_TIMER);
- status_change_end(bl, SC_MOONLITSERENADE, INVALID_TIMER);
- status_change_end(bl, SC_RUSHWINDMILL, INVALID_TIMER);
- status_change_end(bl, SC_ECHOSONG, INVALID_TIMER);
- status_change_end(bl, SC_HARMONIZE, INVALID_TIMER);
- status_change_end(bl, SC_VOICEOFSIREN, INVALID_TIMER);
- status_change_end(bl, SC_DEEPSLEEP, INVALID_TIMER);
- status_change_end(bl, SC_SIRCLEOFNATURE, INVALID_TIMER);
- break;
- case SC_SONGOFMANA:
- case SC_DANCEWITHWUG:
- case SC_LERADSDEW:
- case SC_MELODYOFSINK:
- case SC_BEYONDOFWARCRY:
- case SC_UNLIMITEDHUMMINGVOICE:
- if( sc->data[type] ) // Don't remove same sc.
- break; //FIXME this is wrong as it'll prevent other being remove as well
- status_change_end(bl, SC_SONGOFMANA, INVALID_TIMER);
- status_change_end(bl, SC_DANCEWITHWUG, INVALID_TIMER);
- status_change_end(bl, SC_LERADSDEW, INVALID_TIMER);
- status_change_end(bl, SC_MELODYOFSINK, INVALID_TIMER);
- status_change_end(bl, SC_BEYONDOFWARCRY, INVALID_TIMER);
- status_change_end(bl, SC_UNLIMITEDHUMMINGVOICE, INVALID_TIMER);
- break;
+ case SC_HARMONIZE: //group A doesn't overlap
+ if (type != SC_SWINGDANCE) status_change_end(bl, SC_SWINGDANCE, INVALID_TIMER);
+ if (type != SC_SYMPHONYOFLOVER) status_change_end(bl, SC_SYMPHONYOFLOVER, INVALID_TIMER);
+ if (type != SC_MOONLITSERENADE) status_change_end(bl, SC_MOONLITSERENADE, INVALID_TIMER);
+ if (type != SC_RUSHWINDMILL) status_change_end(bl, SC_RUSHWINDMILL, INVALID_TIMER);
+ if (type != SC_ECHOSONG) status_change_end(bl, SC_ECHOSONG, INVALID_TIMER);
+ if (type != SC_HARMONIZE) status_change_end(bl, SC_HARMONIZE, INVALID_TIMER);
+ break;
+ case SC_VOICEOFSIREN:
+ case SC_DEEPSLEEP:
+ case SC_GLOOMYDAY:
+ case SC_SONGOFMANA:
+ case SC_DANCEWITHWUG:
+ case SC_SATURDAYNIGHTFEVER:
+ case SC_LERADSDEW:
+ case SC_MELODYOFSINK:
+ case SC_BEYONDOFWARCRY:
+ case SC_UNLIMITEDHUMMINGVOICE: //group B
+ if (type != SC_VOICEOFSIREN) status_change_end(bl, SC_VOICEOFSIREN, INVALID_TIMER);
+ if (type != SC_DEEPSLEEP) status_change_end(bl, SC_DEEPSLEEP, INVALID_TIMER);
+ if (type != SC_LERADSDEW) status_change_end(bl, SC_LERADSDEW, INVALID_TIMER);
+ if (type != SC_MELODYOFSINK) status_change_end(bl, SC_MELODYOFSINK, INVALID_TIMER);
+ if (type != SC_BEYONDOFWARCRY) status_change_end(bl, SC_BEYONDOFWARCRY, INVALID_TIMER);
+ if (type != SC_UNLIMITEDHUMMINGVOICE) status_change_end(bl, SC_UNLIMITEDHUMMINGVOICE, INVALID_TIMER);
+ if (type != SC_GLOOMYDAY) {
+ status_change_end(bl, SC_GLOOMYDAY, INVALID_TIMER);
+ status_change_end(bl, SC_GLOOMYDAY_SK, INVALID_TIMER);
+ }
+ if (type != SC_SONGOFMANA) status_change_end(bl, SC_SONGOFMANA, INVALID_TIMER);
+ if (type != SC_DANCEWITHWUG) status_change_end(bl, SC_DANCEWITHWUG, INVALID_TIMER);
+ if (type != SC_SATURDAYNIGHTFEVER) {
+ if (sc->data[SC_SATURDAYNIGHTFEVER]) {
+ sc->data[SC_SATURDAYNIGHTFEVER]->val2 = 0; //mark to not lose hp
+ status_change_end(bl, SC_SATURDAYNIGHTFEVER, INVALID_TIMER);
+ }
+ }
+ break;
case SC_REFLECTSHIELD:
status_change_end(bl, SC_REFLECTDAMAGE, INVALID_TIMER);
break;