summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt7
-rw-r--r--db/Changelog.txt4
-rw-r--r--db/skill_db.txt30
-rw-r--r--src/map/battle.c2
-rw-r--r--src/map/mob.c3
-rw-r--r--src/map/pc.c28
-rw-r--r--src/map/skill.c7
7 files changed, 49 insertions, 32 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index e2d98da83..4c80e2c4a 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,13 @@ 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/10/30
+ * Updated the code so mobs can use ChainAction as a targetted skill.
+ [Skotlex]
+ * Added GroundDrift effects for Wind (Stun) and Fire (knockback). The
+ knockback value is unknown, so 3 is used for now. [Skotlex]
+ * Cleaned up some more the steal code, now you can't steal the last slot
+ regardless of skill level used. [Skotlex]
+ * Added consideration of Chain Action when cloning GunSlingers. [Skotlex]
* Modified battle_calc_return_damage to take the skill id as well, now
magic damage return will not work on skills tagged as ground or self
targetted. [Skotlex]
diff --git a/db/Changelog.txt b/db/Changelog.txt
index c91bd6dee..5290f3351 100644
--- a/db/Changelog.txt
+++ b/db/Changelog.txt
@@ -20,6 +20,10 @@
========================
10/30
+ * Corrected GS skill ranges using Aegis data. All their targetted skills
+ have a base range of 9, and Dust (Choke) has a range of 2. [Skotlex]
+ * Gave Grounddrift a knockback of 3 for the fire-elemental effect (value
+ totally custom)
* Set the inf2 to encore skills of Wand of Hermode [Skotlex]
10/29
* Official NJ/GS exp chart for level 1-48 [Playtester]
diff --git a/db/skill_db.txt b/db/skill_db.txt
index 751d9c5a4..e57e41903 100644
--- a/db/skill_db.txt
+++ b/db/skill_db.txt
@@ -525,27 +525,27 @@
499,-9,8,4,-1,0,0,1,2,no,0,520,0,weapon,0 //HT_POWER#Beast Strafing#
//Temp Plugs(using bash as base)
500,0,6,4,0,0,0,5,1,no,0,0,0,misc,0 //GS_GLITTERING#Flip the Coin#
-501,-3,6,1,-1,0,0,1,1,no,0,0,0,misc,0 //GS_FLING#Fling#
-502,-3,8,1,-1,0,0,1,3,no,0,0,0,weapon,0 //GS_TRIPLEACTION#Triple Action#
-503,-3,6,1,-1,0,0,1,1,no,0,0,0,weapon,0 //GS_BULLSEYE#Bulls Eye#
+501,9,6,1,-1,0,0,1,1,no,0,0,0,misc,0 //GS_FLING#Fling#
+502,-9,8,1,-1,0,0,1,3,no,0,0,0,weapon,0 //GS_TRIPLEACTION#Triple Action#
+503,-9,6,1,-1,0,0,1,1,no,0,0,0,weapon,0 //GS_BULLSEYE#Bulls Eye#
504,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0 //GS_MADNESSCANCEL#Madness Canceler#
505,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0 //GS_ADJUSTMENT#AdJustment#
506,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0 //GS_INCREASING#Increasing Accuracy#
-507,-3,6,1,8,0,0,1,1,no,0,0,0,weapon,0 //GS_MAGICALBULLET#Magical Bullet#
-508,-3,6,1,-1,1,0,1,1,no,0,0,0,weapon,0 //GS_CRACKER#Cracker#
-509,-3,0,0,0,0,0,10,0,no,0,0,0,none,0 //GS_SINGLEACTION#Single Action#
+507,-9,6,1,8,0,0,1,1,no,0,0,0,weapon,0 //GS_MAGICALBULLET#Magical Bullet#
+508,-9,6,1,-1,1,0,1,1,no,0,0,0,weapon,0 //GS_CRACKER#Cracker#
+509,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //GS_SINGLEACTION#Single Action#
510,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //GS_SNAKEEYE#Snake Eye#
-511,-3,8,0,-1,0,0,10,2,no,0,0,0,weapon,0 //GS_CHAINACTION#Chain Action#
-512,3,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //GS_TRACKING#Tracking#
-513,7,6,1,-1,1,0,5,1,no,0,0,0,weapon,0 //GS_DISARM#Disarm#
-514,3,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //GS_PIERCINGSHOT#Piercing Shot#
-515,3,8,1,-1,0,0,10,5,no,0,0,0,weapon,0 //GS_RAPIDSHOWER#Rapid Shower#
+511,-9,8,0,-1,0,0,10,2,no,0,0,0,weapon,0 //GS_CHAINACTION#Chain Action#
+512,-9,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //GS_TRACKING#Tracking#
+513,-9,6,1,-1,1,0,5,1,no,0,0,0,weapon,0 //GS_DISARM#Disarm#
+514,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //GS_PIERCINGSHOT#Piercing Shot#
+515,-9,8,1,-1,0,0,10,5,no,0,0,0,weapon,0 //GS_RAPIDSHOWER#Rapid Shower#
516,0,8,4,-1,2,3,10,1,no,0,0,0,weapon,0 //GS_DESPERADO#Desperado#
517,0,6,4,-1,1,0,10,1,no,0,0,0,weapon,0 //GS_GATLINGFEVER#Gatling Fever#
-518,3,6,1,-1,0,0,10,1,no,0,0,0,weapon,5 //GS_DUST#Dust#
-519,3,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0 //GS_FULLBUSTER#Full Buster#
-520,3,6,1,-1,2,1:1:1:2:2:2:3:3:3:4,10,1,no,0,0,0,weapon,0 //GS_SPREADATTACK#Spread Attack#
-521,3,6,2,-1,0,0,10,1,no,0,0,0,weapon,0 //GS_GROUNDDRIFT#Ground Drift#
+518,2,6,1,-1,0,0,10,1,no,0,0,0,weapon,5 //GS_DUST#Dust#
+519,-9,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0 //GS_FULLBUSTER#Full Buster#
+520,-9,6,1,-1,2,1:1:1:2:2:2:3:3:3:4,10,1,no,0,0,0,weapon,0 //GS_SPREADATTACK#Spread Attack#
+521,-9,6,2,-1,0,0,10,1,no,0,0,0,weapon,3 //GS_GROUNDDRIFT#Ground Drift#
522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0 //NJ_TOBIDOUGU#NJ_TOBIDOUGU#
523,9,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //NJ_SYURIKEN#NJ_SYURIKEN#
524,9,8,1,-1,0,0,5,3,no,0,0,0,weapon,0 //NJ_KUNAI#NJ_KUNAI#
diff --git a/src/map/battle.c b/src/map/battle.c
index 6d6c928d7..4e1f2692c 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -911,6 +911,7 @@ static struct Damage battle_calc_weapon_attack(
break;
case TF_DOUBLE: //For NPC used skill.
+ case GS_CHAINACTION:
wd.type = 0x08;
break;
@@ -918,6 +919,7 @@ static struct Damage battle_calc_weapon_attack(
case KN_BOWLINGBASH:
case MO_BALKYOUNG:
case TK_TURNKICK:
+ case GS_GROUNDDRIFT:
wd.blewcount=0;
break;
diff --git a/src/map/mob.c b/src/map/mob.c
index 61789b7fc..fe0b323ee 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -3006,10 +3006,11 @@ int mob_clone_spawn(struct map_session_data *sd, int m, int x, int y, const char
switch (skill_id) { //Certain Special skills that are passive, and thus, never triggered.
case MO_TRIPLEATTACK:
case TF_DOUBLE:
+ case GS_CHAINACTION:
ms[i].state = MSS_BERSERK;
ms[i].target = MST_TARGET;
ms[i].cond1 = MSC_ALWAYS;
- ms[i].permillage = skill_id==TF_DOUBLE?(ms[i].skill_lv*500):(3000-ms[i].skill_lv*100);
+ ms[i].permillage = skill_id==MO_TRIPLEATTACK?(3000-ms[i].skill_lv*100):(ms[i].skill_lv*500);
ms[i].delay -= 5000; //Remove the added delay as these could trigger on "all hits".
break;
default: //Untreated Skill
diff --git a/src/map/pc.c b/src/map/pc.c
index 210181527..5ad01d285 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -3173,25 +3173,24 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
if(!sd || !bl || bl->type!=BL_MOB)
return 0;
+ md = (TBL_MOB *)bl;
+
+ if(md->state.steal_flag == UCHAR_MAX || md->sc.opt1) //already stolen from / status change check
+ return 0;
+
sd_status= status_get_status_data(&sd->bl);
md_status= status_get_status_data(bl);
- md = (TBL_MOB *)bl;
- if(md->state.steal_flag == UCHAR_MAX || //already stolen from
- md_status->mode&MD_BOSS || md->master_id ||
+ if(md->master_id || md_status->mode&MD_BOSS ||
(md->class_>=1324 && md->class_<1364) || // prevent stealing from treasure boxes [Valaris]
- map[md->bl.m].flag.nomobloot || // check noloot map flag [Lorky]
- md->sc.opt1 //status change check
- )
- return 0;
-
- if(battle_config.skill_steal_max_tries &&
- md->state.steal_flag++ >= battle_config.skill_steal_max_tries)
- { //Reached limit of steal attempts.
+ map[bl->m].flag.nomobloot || // check noloot map flag [Lorky]
+ (battle_config.skill_steal_max_tries && //Reached limit of steal attempts. [Lupus]
+ md->state.steal_flag++ >= battle_config.skill_steal_max_tries)
+ ) { //Can't steal from
md->state.steal_flag = UCHAR_MAX;
return 0;
}
-
+
rate = battle_config.skill_steal_type
? (sd_status->dex - md_status->dex)/2 + lv*6 + 10
: (sd_status->dex - md_status->dex) + lv*3 + 10;
@@ -3203,10 +3202,7 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
//preliminar statistical data hints at this behaviour:
//each steal attempt: try to steal against ONE mob drop, and no more.
- if (lv > 5) //Include last slot (card slot)
- i = rand()%MAX_MOB_DROP;
- else //Do not include card slot
- i = rand()%(MAX_MOB_DROP-1);
+ i = rand()%(MAX_MOB_DROP-1); //You can't steal from the last slot.
if(rand() % 10000 >= md->db->dropitem[i].p*rate/100)
return 0;
diff --git a/src/map/skill.c b/src/map/skill.c
index 3c8a956e8..724c915ba 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -2714,6 +2714,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case HT_POWER:
case TK_DOWNKICK:
case TK_COUNTER:
+ case GS_CHAINACTION:
case GS_TRIPLEACTION:
case GS_MAGICALBULLET:
case GS_TRACKING:
@@ -7317,6 +7318,9 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
switch (sg->val1)
{
+ case ELE_WIND:
+ sc_start(bl,SC_STUN,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
+ break;
case ELE_WATER:
sc_start(bl,SC_FREEZE,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
break;
@@ -7326,6 +7330,9 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
case ELE_DARK:
sc_start(bl,SC_BLIND,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
break;
+ case ELE_FIRE:
+ skill_blown(&src->bl,bl,skill_get_blewcount(sg->skill_id,sg->skill_lv));
+ break;
}
sg->unit_id = UNT_USED_TRAPS;