summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcelest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec>2004-11-23 09:33:44 +0000
committercelest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec>2004-11-23 09:33:44 +0000
commitfb8340df44d09c75593c2b97dc4fdba18d081899 (patch)
tree83ecf999d18684b157257dfc0e13ffd1c6f50203
parent9660252ee3356d165ce5467c06ec2172d925b4fa (diff)
downloadhercules-fb8340df44d09c75593c2b97dc4fdba18d081899.tar.gz
hercules-fb8340df44d09c75593c2b97dc4fdba18d081899.tar.bz2
hercules-fb8340df44d09c75593c2b97dc4fdba18d081899.tar.xz
hercules-fb8340df44d09c75593c2b97dc4fdba18d081899.zip
- Added some code for the new guild skills (10%) and Moonlit
- Corrected Hilt Binding and Assassin Cross' dual wield git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/athena@333 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog.txt8
-rw-r--r--db/Changelog.txt2
-rw-r--r--db/skill_cast_db.txt5
-rw-r--r--db/skill_db.txt31
-rw-r--r--db/skill_require_db.txt5
-rw-r--r--src/map/map.h2
-rw-r--r--src/map/pc.c55
-rw-r--r--src/map/skill.c234
-rw-r--r--src/map/skill.h34
9 files changed, 279 insertions, 97 deletions
diff --git a/Changelog.txt b/Changelog.txt
index d85c7ca4a..fa833028f 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,4 +1,12 @@
Date Added
+11/23
+ * Skill Updates: [celest]
+ - Added some code for the new guild skills (10%) and Moonlit Petals (5%)
+ - Notes to other devs: Guild skills with id's 10000-10014 will be stored in
+ skill_db[500-514]
+ - Corrected Hilt Binding
+ - Corrected Assassin Cross' dual wield
+
11/22
* (TXT)Stripped some code off read_gm_accounts() and made with it addGM() [MC Cameri]
-Usage: addGM(account_id,level);
diff --git a/db/Changelog.txt b/db/Changelog.txt
index cbf534667..e2127d564 100644
--- a/db/Changelog.txt
+++ b/db/Changelog.txt
@@ -5,6 +5,8 @@
Ayathoya items == Added but no effect ( all are "ect" itens)
Skill databases == celest working on them i believe.
+11/23 * Added temporary requirements for the new guild skills [celest]
+
11/22
* Changed weapon requirements for Sharp Shooting [celest]
* fixed job_db2.txt (,, -> ,) [Lupus]
diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt
index 4e4c7bdda..b16117ab4 100644
--- a/db/skill_cast_db.txt
+++ b/db/skill_cast_db.txt
@@ -267,3 +267,8 @@
405,0,0,30000,8000 //PF_SPIDERWEB#ƒXƒpƒCƒ_[ƒEƒFƒbƒu#
406,0,0,0,3000 //ASC_METEORASSAULT#ƒƒeƒIƒAƒTƒ‹ƒg#
407,0,5000,0,0 //ASC_CDP
+
+10010,100,60000,0 //GD_BATTLEORDER##
+10011,100,60000,0 //GD_REGENERATION##
+10012,100,0,0 //GD_RESTORE##
+10013,100,0,0 //GD_EMERGENCYCALL##
diff --git a/db/skill_db.txt b/db/skill_db.txt
index 4c4832153..6e93217f0 100644
--- a/db/skill_db.txt
+++ b/db/skill_db.txt
@@ -508,21 +508,22 @@
471,0,0,0,0,0,0,0,no,0,0,0,none,0 //SL_SKE##
472,0,0,0,0,0,0,0,no,0,0,0,none,0 //SL_SKA##
-10000,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_APPROVAL#³‹KƒMƒ‹ƒh³”F#
-10001,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_KAFRACONTRACT#ƒJƒvƒ‰ŒÙ—p#
-10002,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_GUARDRESEARCH#ƒK?ƒfƒBƒAƒ“Œ¤‹†#
-10003,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_CHARISMA#ƒJƒŠƒX?#Later changed to GD_GUARDUP#
-10004,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_EXTENSION#ƒMƒ‹ƒhŠg’£#
-10005,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_GLORYGUILD##
-10006,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_LEADERSHIP##
-10007,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_GLORYWOUNDS##
-10008,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_SOULCOLD##
-10009,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_HAWKEYES##
-10010,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_BATTLEORDER##
-10011,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_REGENERATION##
-10012,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_RESTORE##
-10013,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_EMERGENCYCALL##
-10014,0,0,0,0,0,0,0,no,0,0,0,none,0 //GD_DEVELOPMENT##
+//id,range,hit,inf,pl,nk,max,list_num,castcancel,cast_defence_rate,inf2,maxcount,skill_type,blow_count
+10000,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_APPROVAL#³‹KƒMƒ‹ƒh³”F#
+10001,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_KAFRACONTRACT#ƒJƒvƒ‰ŒÙ—p#
+10002,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_GUARDRESEARCH#ƒK?ƒfƒBƒAƒ“Œ¤‹†#
+10003,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_CHARISMA#ƒJƒŠƒX?#Later changed to GD_GUARDUP#
+10004,0,0,0,0,0,10,0,no,0,0,0,none,0 //GD_EXTENSION#ƒMƒ‹ƒhŠg’£#
+10005,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_GLORYGUILD##
+10006,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_LEADERSHIP##
+10007,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_GLORYWOUNDS##
+10008,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_SOULCOLD##
+10009,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_HAWKEYES##
+10010,0,0,4,0,1,1,0,no,0,0,0,none,0 //GD_BATTLEORDER##
+10011,0,0,4,0,1,3,0,no,0,0,0,none,0 //GD_REGENERATION##
+10012,0,0,4,0,1,1,0,no,0,0,0,none,0 //GD_RESTORE##
+10013,0,0,4,0,1,1,0,no,0,0,0,none,0 //GD_EMERGENCYCALL##
+10014,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_DEVELOPMENT##
// ST_PRESERVE#ÇÁ¸®Àúºê#
// ST_FULLSTRIP#Ç®_½ºÆ®¸³#
diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt
index 2caeb9e70..4b2c7ca88 100644
--- a/db/skill_require_db.txt
+++ b/db/skill_require_db.txt
@@ -291,4 +291,7 @@
//407,0,0,50,0,0,0,99,none,0,937,1,952,1,939,1,7033,1,972,1,657,1,713,1,0,0,0,0,0,0 //ASC_CDP
407,0,0,50,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ASC_CDP#ƒfƒbƒhƒŠ?ƒ|ƒCƒYƒ“ì¬#
-
+10010,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_BATTLEORDER##
+10011,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_REGENERATION##
+10012,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_RESTORE##
+10013,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_EMERGENCYCALL##
diff --git a/src/map/map.h b/src/map/map.h
index f54579ea2..48f1eb750 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -17,7 +17,7 @@
#define DAMAGELOG_SIZE 30
#define LOOTITEM_SIZE 10
#define MAX_SKILL_LEVEL 100
-#define MAX_STATUSCHANGE 200
+#define MAX_STATUSCHANGE 210
#define MAX_SKILLUNITGROUP 32
#define MAX_MOBSKILLUNITGROUP 8
#define MAX_SKILLUNITGROUPTICKSET 128
diff --git a/src/map/pc.c b/src/map/pc.c
index b2fb1e120..b755d1790 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -1,4 +1,4 @@
-// $Id: pc.c 101 2004-09-25 17:57:22Z Valaris $
+// $Id: pc.c 101 2004-11-23 14:33:00Z Celestia $
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -1434,10 +1434,40 @@ int pc_calcstatus(struct map_session_data* sd,int first)
sd->paramb[4] += skill;
if((skill=pc_checkskill(sd,BS_HILTBINDING))>0) { // Hilt binding gives +1 str +4 atk
- sd->paramb[4] ++;
+ sd->paramb[0] ++;
sd->base_atk += 4;
}
+ // Celest
+ if (sd->status.guild_id > 0) {
+ struct guild *g;
+ if ((g = guild_search(sd->status.guild_id)) && strcmp(sd->status.name,g->master)==0) {
+ if (guild_checkskill(g, GD_LEADERSHIP)>0)
+ ; //skillunitsetting
+ if (guild_checkskill(g, GD_GLORYWOUNDS)>0)
+ ; //skillunitsetting
+ if (guild_checkskill(g, GD_SOULCOLD)>0)
+ ; //skillunitsetting
+ if (guild_checkskill(g, GD_HAWKEYES)>0)
+ ; //skillunitsetting
+ }
+ if (sd->sc_count) {
+ if (sd->sc_data[SC_LEADERSHIP].timer != -1)
+ sd->paramb[0] += 2;
+ if (sd->sc_data[SC_GLORYWOUNDS].timer != -1)
+ sd->paramb[2] += 2;
+ if (sd->sc_data[SC_SOULCOLD].timer != -1)
+ sd->paramb[1] += 2;
+ if (sd->sc_data[SC_HAWKEYES].timer != -1)
+ sd->paramb[4] += 2;
+ if (sd->sc_data[SC_BATTLEORDERS].timer != -1) {
+ sd->paramb[0]+= 5;
+ sd->paramb[3]+= 5;
+ sd->paramb[4]+= 5;
+ }
+ }
+ }
+
// ƒXƒe?ƒ^ƒX?‰»‚É‚æ‚éŠî–{ƒpƒ‰ƒ?ƒ^•â³
if(sd->sc_count){
if(sd->sc_data[SC_CONCENTRATE].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1){ // W’†—ÍŒüã
@@ -6301,7 +6331,7 @@ int pc_equipitem(struct map_session_data *sd,int n,int pos)
// “ñ“—¬?—
if ((pos==0x22) // ˆê?A?”õ—v‹‰ÓŠ‚ª“ñ“—¬•Ší‚©ƒ`ƒFƒbƒN‚·‚é
&& (id->equip==2) // ? Žè•Ší
- && (pc_checkskill(sd, AS_LEFT) > 0 || sd->status.class == 12) ) // ¶ŽèC?—L
+ && (pc_checkskill(sd, AS_LEFT) > 0 || pc_calc_base_job2(sd->status.class) == 12) ) // ¶ŽèC?—L
{
int tpos=0;
if(sd->equip_index[8] >= 0)
@@ -6745,9 +6775,13 @@ static int pc_spheal(struct map_session_data *sd)
a = natural_heal_diff_tick;
if(pc_issit(sd)) a += a;
- if (sd->sc_data[SC_MAGNIFICAT].timer!=-1) // ƒ}ƒOƒjƒtƒBƒJ?ƒg
- a += a;
- if((skill = pc_checkskill(sd,HP_MEDITATIO)) > 0) //Increase natural SP regen with Meditatio [DracoRPG]
+ if (sd->sc_count) {
+ if (sd->sc_data[SC_MAGNIFICAT].timer!=-1) // ƒ}ƒOƒjƒtƒBƒJ?ƒg
+ a += a;
+ if (sd->sc_data[SC_REGENERATION].timer != -1)
+ a *= sd->sc_data[SC_REGENERATION].val1;
+ }
+ if((skill = pc_checkskill(sd,HP_MEDITATIO)) > 0) //Increase natural SP regen with Meditatio [DracoRPG]
a += a*skill*3/100;
gc=guild_mapname2gc(sd->mapname); // Increased guild castle regen [Valaris]
@@ -6774,9 +6808,12 @@ static int pc_hpheal(struct map_session_data *sd)
a = natural_heal_diff_tick;
if(pc_issit(sd)) a += a;
- if( sd->sc_data[SC_MAGNIFICAT].timer!=-1 ) // Modified by RoVeRT
- a += a;
-
+ if (sd->sc_count) {
+ if( sd->sc_data[SC_MAGNIFICAT].timer!=-1 ) // Modified by RoVeRT
+ a += a;
+ if (sd->sc_data[SC_REGENERATION].timer != -1)
+ a *= sd->sc_data[SC_REGENERATION].val1;
+ }
gc=guild_mapname2gc(sd->mapname); // Increased guild castle regen [Valaris]
if(gc) {
struct guild *g;
diff --git a/src/map/skill.c b/src/map/skill.c
index b77706b00..7dea5f682 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -740,29 +740,94 @@ struct skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
/* ƒAƒuƒ‰ƒJƒ_ƒuƒ‰?“®ƒXƒLƒ‹ƒf?ƒ^ƒx?ƒX */
struct skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];
-int skill_get_hit( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].hit : 0; }
-int skill_get_inf( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].inf : guild_skill_get_inf(id); }
-int skill_get_pl( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].pl : 0; }
-int skill_get_nk( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].nk : 2; }
-int skill_get_max( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].max : guild_skill_get_max(id); }
-int skill_get_range( int id , int lv ){ return (lv <= 0) ? 0: ((id < MAX_SKILL_DB) ? skill_db[id].range[lv-1] : guild_skill_get_max(id)); }
-int skill_get_hp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].hp[lv-1]; }
-int skill_get_sp( int id ,int lv ){ return (lv <= 0) ? 0: ((id < MAX_SKILL_DB) ? skill_db[id].sp[lv-1] : guild_skill_get_sp(id, lv)); }
-int skill_get_zeny( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].zeny[lv-1]; }
-int skill_get_num( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].num[lv-1]; }
-int skill_get_cast( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].cast[lv-1]; }
-int skill_get_delay( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].delay[lv-1]; }
-int skill_get_time( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].upkeep_time[lv-1]; }
-int skill_get_time2( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].upkeep_time2[lv-1]; }
-int skill_get_castdef( int id ){ return skill_db[id].cast_def_rate; }
-int skill_get_weapontype( int id ){ return skill_db[id].weapon; }
-int skill_get_inf2( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].inf2 : 0; }
-int skill_get_castcancel( int id ){ return (id < MAX_SKILL_DB) ? skill_db[id].maxcount : 0; }
-int skill_get_maxcount( int id ){ return skill_db[id].maxcount; }
-int skill_get_blewcount( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].blewcount[lv-1]; }
-int skill_get_mhp( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].mhp[lv-1]; }
-int skill_get_castnodex( int id ,int lv ){ return (lv <= 0) ? 0:skill_db[id].castnodex[lv-1]; }
-
+int skill_get_hit( int id ){
+ if (id >= 10000 && id < 10015) id -= 9500;
+ return skill_db[id].hit;
+}
+int skill_get_inf( int id ){
+ return (id < 500) ? skill_db[id].inf : guild_skill_get_inf(id);
+}
+int skill_get_pl( int id ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return skill_db[id].pl;
+}
+int skill_get_nk( int id ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return skill_db[id].nk;
+}
+int skill_get_max( int id ){
+ return (id < 500) ? skill_db[id].max : guild_skill_get_max(id);
+}
+int skill_get_range( int id , int lv ){
+ if (lv <= 0) return 0;
+ return (id < 500) ? skill_db[id].range[lv-1] : guild_skill_get_range(id);
+}
+int skill_get_hp( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0: skill_db[id].hp[lv-1];
+}
+int skill_get_sp( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ //if (lv <= 0) return 0;
+ //return (id < 500) ? skill_db[id].sp[lv-1] : guild_skill_get_sp(id, lv);
+ return (lv <= 0) ? 0: skill_db[id].sp[lv-1];
+}
+int skill_get_zeny( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].zeny[lv-1];
+}
+int skill_get_num( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].num[lv-1];
+}
+int skill_get_cast( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].cast[lv-1];
+}
+int skill_get_delay( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].delay[lv-1];
+}
+int skill_get_time( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].upkeep_time[lv-1];
+}
+int skill_get_time2( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].upkeep_time2[lv-1];
+}
+int skill_get_castdef( int id ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return skill_db[id].cast_def_rate;
+}
+int skill_get_weapontype( int id ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return skill_db[id].weapon;
+}
+int skill_get_inf2( int id ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return skill_db[id].inf2;
+}
+int skill_get_castcancel( int id ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return skill_db[id].maxcount;
+}
+int skill_get_maxcount( int id ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return skill_db[id].maxcount;
+}
+int skill_get_blewcount( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].blewcount[lv-1];
+}
+int skill_get_mhp( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].mhp[lv-1];
+}
+int skill_get_castnodex( int id ,int lv ){
+ if (id >= 10000 && id < 10015) id-= 9500;
+ return (lv <= 0) ? 0:skill_db[id].castnodex[lv-1];
+}
int skill_tree_get_max(int id, int b_class){
struct pc_base_job s_class = pc_calc_base_job(b_class);
int i, skillid;
@@ -872,8 +937,14 @@ int skill_get_unit_id(int id,int flag)
case WE_CALLPARTNER: return 0xb2; /* ‚ ‚È‚½‚Ɉ§‚¢‚½‚¢ */
case PA_GOSPEL: return 0xb3; /* ƒSƒXƒyƒ‹ */
case HP_BASILICA: return 0xb4; /* ƒoƒWƒŠƒJ */
+ case CG_MOONLIT: return 0xb5;
case PF_FOGWALL: return 0xb6; /* ƒtƒHƒOƒEƒH?ƒ‹ */
case PF_SPIDERWEB: return 0xb7; /* ƒXƒpƒCƒ_?ƒEƒFƒbƒu */
+ // temporary unit ID's [Celest]
+ case GD_LEADERSHIP: return 0xc1;
+ case GD_GLORYWOUNDS: return 0xc2;
+ case GD_SOULCOLD: return 0xc3;
+ case GD_HAWKEYES: return 0xc4;
}
return 0;
/*
@@ -2169,6 +2240,7 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
if(bl->type == BL_PC && pc_isdead((struct map_session_data *)bl))
return 1;
map_freeblock_lock();
+
switch(skillid)
{
/* •ŠíU?ŒnƒXƒLƒ‹ */
@@ -2750,9 +2822,9 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
return 1;
if(battle_get_class(bl) == 1288)
return 1;
- if (skillnotok(skillid, (struct map_session_data *)bl)) // [MouseJstr]
- return 0;
-
+ if (skillnotok(skillid, (struct map_session_data *)bl)) // [MouseJstr]
+ return 0;
+
map_freeblock_lock();
switch(skillid)
{
@@ -4320,9 +4392,23 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
}
break;
case GD_BATTLEORDER:
+ {
+ struct guild *g = NULL;
+ if (sd && sd->status.guild_id > 0 && (g = guild_search(sd->status.guild_id))) {
+ for(i = 0; i < g->max_member; i++) {
+ if ((dstsd = g->member[i].sd) != NULL) {
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ skill_status_change_start(&dstsd->bl,SC_BATTLEORDERS,skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
+ }
+ }
+ }
+ }
+ printf("Guild skill castend:%d\n",skillid);
+ break;
case GD_REGENERATION:
case GD_RESTORE:
case GD_EMERGENCYCALL:
+ printf("Guild skill castend:%d\n",skillid);
break;
default:
printf("Unknown skill used:%d\n",skillid);
@@ -5085,12 +5171,17 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
target=BCT_PARTY;
limit=skill_get_time(skillid,skilllv);
break;
+ case CG_MOONLIT:
+ range=1;
+ target=BCT_ALL;
+ limit=skill_get_time(skillid,skilllv);
+ break;
case PF_FOGWALL: /* ƒtƒHƒOƒEƒH?ƒ‹ */
count=15;
limit=skill_get_time(skillid,skilllv);
if(sc_data) {
if (sc_data[SC_DELUGE].timer!=-1) limit *= 2;
- }
+ }
break;
case RG_GRAFFITI: /* Graffiti */
count=1; // Leave this at 1 [Valaris]
@@ -5292,6 +5383,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
case DC_DONTFORGETME: /* Ž„‚ð–Y‚ê‚È‚¢‚Åc */
case DC_FORTUNEKISS: /* K‰^‚̃LƒX */
case DC_SERVICEFORYOU: /* ƒT?ƒrƒXƒtƒH?ƒ†? */
+ case CG_MOONLIT:
ux+=(i%7-3);
uy+=(i/7-3);
if(i==40)
@@ -6870,6 +6962,12 @@ int skill_use_id( struct map_session_data *sd, int target_id,
sd->skillid_old = skill_num;
}
break;
+ case GD_BATTLEORDER:
+ case GD_REGENERATION:
+ case GD_RESTORE:
+ case GD_EMERGENCYCALL:
+ if (skill_lv <= 0) skill_lv = 1;
+ break;
}
sd->skillid = skill_num;
@@ -7005,7 +7103,7 @@ int skill_use_id( struct map_session_data *sd, int target_id,
case GD_REGENERATION:
case GD_RESTORE:
case GD_EMERGENCYCALL:
- printf ("guild skill used : id = %d\n", skill_num);
+ casttime = 1000; // temporary [Celest]
break;
}
@@ -7024,8 +7122,7 @@ int skill_use_id( struct map_session_data *sd, int target_id,
if( casttime>0 || forcecast ){ /* ‰r¥‚ª•K—v */
struct mob_data *md;
- clif_skillcasting( &sd->bl,
- sd->bl.id, target_id, 0,0, skill_num,casttime);
+ clif_skillcasting( &sd->bl, sd->bl.id, target_id, 0,0, skill_num,casttime);
/* ‰r¥”½?ƒ‚ƒ“ƒXƒ^? */
if( bl->type==BL_MOB && (md=(struct mob_data *)bl) && mob_db[md->class].mode&0x10 &&
@@ -7961,9 +8058,17 @@ int skill_status_change_end(struct block_list* bl, int type, int tid)
case SC_MATKPOT: /* magic attack potion [Valaris] */
case SC_WEDDING: //Œ‹¥—p(Œ‹¥ˆßÖ‚É‚È‚Á‚Ä?‚­‚Ì‚ª?‚¢‚Æ‚©)
case SC_MELTDOWN: /* ƒƒ‹ƒgƒ_ƒEƒ“ */
- case SC_EDP: // Celest
+ // Celest
+ case SC_EDP:
case SC_MARIONETTE:
case SC_MARIONETTE2:
+ case SC_SLOWDOWN:
+ case SC_LEADERSHIP:
+ case SC_GLORYWOUNDS:
+ case SC_SOULCOLD:
+ case SC_HAWKEYES:
+ case SC_BATTLEORDERS:
+ case SC_REGENERATION:
calc_flag = 1;
break;
case SC_BERSERK: /* ƒo?ƒT?ƒN */
@@ -9282,6 +9387,13 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
if (!val3) val3 = -1;
break;
case SC_SLOWDOWN:
+ case SC_LEADERSHIP:
+ case SC_GLORYWOUNDS:
+ case SC_SOULCOLD:
+ case SC_HAWKEYES:
+ case SC_BATTLEORDERS:
+ case SC_REGENERATION:
+ calc_flag = 1;
break;
default:
if(battle_config.error_log)
@@ -10193,26 +10305,26 @@ int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int
if(group->unit!=NULL){
if(!battle_config.unit_movement_type){
- int i;
- for(i=0;i<group->unit_count;i++){
- struct skill_unit *unit=&group->unit[i];
- if(unit->alive && !(m==unit->bl.m && dx==0 && dy==0)){
- int range=unit->range;
- map_delblock(&unit->bl);
- unit->bl.m = m;
- unit->bl.x += dx;
- unit->bl.y += dy;
- map_addblock(&unit->bl);
- clif_skill_setunit(unit);
- if(range>0){
- if(range<7)
- range=7;
- map_foreachinarea( skill_unit_move_unit_group_sub, unit->bl.m,
- unit->bl.x-range,unit->bl.y-range,unit->bl.x+range,unit->bl.y+range,0,
- &unit->bl,gettick() );
+ int i;
+ for(i=0;i<group->unit_count;i++){
+ struct skill_unit *unit=&group->unit[i];
+ if(unit->alive && !(m==unit->bl.m && dx==0 && dy==0)){
+ int range=unit->range;
+ map_delblock(&unit->bl);
+ unit->bl.m = m;
+ unit->bl.x += dx;
+ unit->bl.y += dy;
+ map_addblock(&unit->bl);
+ clif_skill_setunit(unit);
+ if(range>0){
+ if(range<7)
+ range=7;
+ map_foreachinarea( skill_unit_move_unit_group_sub, unit->bl.m,
+ unit->bl.x-range,unit->bl.y-range,unit->bl.x+range,unit->bl.y+range,0,
+ &unit->bl,gettick() );
+ }
}
}
- }
}else{
int i,j, *r_flag, *s_flag, *m_flag;
struct skill_unit *unit1;
@@ -10250,9 +10362,9 @@ int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int
//?ƒˆÚ“®(range‚à?³‚Ì•K—v–³‚µ)
int range=unit1->range;
map_delblock(&unit1->bl);
- unit1->bl.m = m;
- unit1->bl.x += dx;
- unit1->bl.y += dy;
+ unit1->bl.m = m;
+ unit1->bl.x += dx;
+ unit1->bl.y += dy;
map_addblock(&unit1->bl);
clif_skill_setunit(unit1);
if(range > 0){
@@ -10290,9 +10402,9 @@ int skill_unit_move_unit_group( struct skill_unit_group *group, int m,int dx,int
}
}
}
- free(r_flag);
- free(s_flag);
- free(m_flag);
+ free(r_flag);
+ free(s_flag);
+ free(m_flag);
}
}
return 0;
@@ -10631,7 +10743,9 @@ int skill_readdb(void)
continue;
i=atoi(split[0]);
- if(i<0 || i>MAX_SKILL_DB)
+ if (i>=10000 && i<10015) // for guild skills [Celest]
+ i -= 9500;
+ else if(i<0 || i>MAX_SKILL_DB)
continue;
/* printf("skill id=%d\n",i); */
@@ -10703,7 +10817,9 @@ int skill_readdb(void)
continue;
i=atoi(split[0]);
- if(i<0 || i>MAX_SKILL_DB)
+ if (i>=10000 && i<10015) // for guild skills [Celest]
+ i -= 9500;
+ else if(i<0 || i>MAX_SKILL_DB)
continue;
memset(split2,0,sizeof(split2));
@@ -10842,7 +10958,9 @@ int skill_readdb(void)
continue;
i=atoi(split[0]);
- if(i<0 || i>MAX_SKILL_DB)
+ if (i>=10000 && i<10015) // for guild skills [Celest]
+ i -= 9500;
+ else if(i<0 || i>MAX_SKILL_DB)
continue;
memset(split2,0,sizeof(split2));
diff --git a/src/map/skill.h b/src/map/skill.h
index 8d756ebaf..774076649 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -4,11 +4,11 @@
#include "map.h"
-#define MAX_SKILL_DB 472
-#define MAX_SKILL_PRODUCE_DB 150
+#define MAX_SKILL_DB 515
+#define MAX_SKILL_PRODUCE_DB 150
#define MAX_PRODUCE_RESOURCE 7
-#define MAX_SKILL_ARROW_DB 150
-#define MAX_SKILL_ABRA_DB 350
+#define MAX_SKILL_ARROW_DB 150
+#define MAX_SKILL_ABRA_DB 350
// ƒXƒLƒ‹ƒf?ƒ^ƒx?ƒX
struct skill_db {
@@ -320,27 +320,35 @@ enum { // struct map_session_data ‚Ì status_change‚Ì”Ô?ƒe?ƒuƒ‹
// Used by English Team
SC_BROKNARMOR =32,
SC_BROKNWEAPON =33,
+ SC_SLOWDOWN =45, // for skill slowdown
SC_SIGHTTRASHER =73,
// SC_BASILICA =125, // 125 is the same id as joint break
SC_BASILICA =102, // temporarily use this before an actual id is found [celest]
- SC_EDP = 114, //
- SC_MARIONETTE2 = 122, // Marionette target
+ SC_EDP =114, //
+ SC_MARIONETTE2 =122, // Marionette target
SC_ENSEMBLE =159,
SC_FOGWALL =178,
SC_GOSPEL =179,
- SC_LANDPROTECTOR =182,
- SC_ADAPTATION =183,
- SC_CHASEWALK =184,
+ SC_LANDPROTECTOR =182,
+ SC_ADAPTATION =183,
+ SC_CHASEWALK =184,
SC_ATKPOT =185, // [Valaris]
SC_MATKPOT =186, // [Valaris]
SC_MINDBREAKER =191,
SC_SPELLBREAKER =192,
+ SC_DPOISON =193, /* –Ò“Å */
+ SC_BLOCKSKILL =194, // for disallowing the use of a skill for a time period
// [Celest]
- SC_SLOWDOWN = 45, // for skill slowdown
- SC_BLEEDING = 124, // Temporarily same id as headcrush
- SC_DPOISON = 193, /* –Ò“Å */
- SC_BLOCKSKILL = 194, // for disallowing the use of a skill for a time period
+ SC_BLEEDING = 124, // Temporarily same id as headcrush
+ SC_MOONLIT = 195,
+ SC_LEADERSHIP = 196,
+ SC_GLORYWOUNDS = 197,
+ SC_SOULCOLD = 198,
+ SC_HAWKEYES = 199,
+ SC_BATTLEORDERS = 200,
+ SC_REGENERATION = 201,
+
// -- testing various SC effects
// SC_AURABLADE =81,