Added skill_nocast_db
git-svn-id: https://svn.code.sf.net/p/rathena/svn/athena@370 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
af56e64377
commit
f022037a1a
@ -1,6 +1,8 @@
|
|||||||
Date Added
|
Date Added
|
||||||
11/26
|
11/26
|
||||||
* Finished Full Strip, Weapon Refine, Slim Pitcher and Full Protection. [celest]
|
* Finished Full Strip, Weapon Refine, Slim Pitcher and Full Protection. [celest]
|
||||||
|
* Added skill_nocast_db.txt. Use it to set which skills cannot be used in
|
||||||
|
which conditions [celest]
|
||||||
|
|
||||||
11/25
|
11/25
|
||||||
* Added @skilltree to help GM's answer skill tree questions [MouseJstr]
|
* Added @skilltree to help GM's answer skill tree questions [MouseJstr]
|
||||||
|
17
db/skill_nocast_db.txt
Normal file
17
db/skill_nocast_db.txt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
//<Skill ID> <Mode>
|
||||||
|
//
|
||||||
|
// Mode:
|
||||||
|
// 1 - Cannot be used in normal maps
|
||||||
|
// 2 - Cannot be used in PvP maps
|
||||||
|
// 4 - Cannot be used in GvG maps
|
||||||
|
// 8 - Cannot be used when WoE is on
|
||||||
|
// 16 - Cannot be used in PK Mode maps
|
||||||
|
// Example: 8,6 = Endure cannot be used in PvP and GvG maps (2+4)
|
||||||
|
8,12
|
||||||
|
26,12
|
||||||
|
27,12
|
||||||
|
87,12
|
||||||
|
150,12
|
||||||
|
361,12
|
||||||
|
362,12
|
||||||
|
389,12
|
@ -1,4 +1,4 @@
|
|||||||
// $Id: skill.c,v 1.8 2004/11/26 5:46:59 PM Celestia Exp $
|
// $Id: skill.c,v 1.8 2004/11/26 7:12:23 PM Celestia Exp $
|
||||||
/* ƒXƒLƒ‹?ŒW */
|
/* ƒXƒLƒ‹?ŒW */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -859,6 +859,19 @@ int skillnotok(int skillid, struct map_session_data *sd) {
|
|||||||
return 0;
|
return 0;
|
||||||
if (pc_isGM(sd) >= 20)
|
if (pc_isGM(sd) >= 20)
|
||||||
return 0; // gm's can do anything damn thing they want
|
return 0; // gm's can do anything damn thing they want
|
||||||
|
|
||||||
|
// Check skill restrictions [Celest]
|
||||||
|
if(!map[sd->bl.m].flag.pvp && !map[sd->bl.m].flag.gvg && skill_db[skillid].nocast & 1)
|
||||||
|
return 1;
|
||||||
|
if(map[sd->bl.m].flag.pvp && skill_db[skillid].nocast & 2)
|
||||||
|
return 1;
|
||||||
|
if(map[sd->bl.m].flag.gvg && skill_db[skillid].nocast & 4)
|
||||||
|
return 1;
|
||||||
|
if (agit_flag && skill_db[skillid].nocast & 8)
|
||||||
|
return 1;
|
||||||
|
if (battle_config.pk_mode && !map[sd->bl.m].flag.nopvp && skill_db[skillid].nocast & 16)
|
||||||
|
return 1;
|
||||||
|
|
||||||
switch (skillid) {
|
switch (skillid) {
|
||||||
case AL_WARP:
|
case AL_WARP:
|
||||||
case AL_TELEPORT:
|
case AL_TELEPORT:
|
||||||
@ -7262,7 +7275,7 @@ int skill_use_id( struct map_session_data *sd, int target_id,
|
|||||||
if(sd->status.option&2 && skill_num!=TF_HIDING && skill_num!=AS_GRIMTOOTH && skill_num!=RG_BACKSTAP && skill_num!=RG_RAID )
|
if(sd->status.option&2 && skill_num!=TF_HIDING && skill_num!=AS_GRIMTOOTH && skill_num!=RG_BACKSTAP && skill_num!=RG_RAID )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if(map[sd->bl.m].flag.gvg){ //GvGで使用できないスキル
|
/*if(map[sd->bl.m].flag.gvg){ //GvG‚ÅŽg—p‚Å‚«‚È‚¢ƒXƒLƒ‹
|
||||||
switch(skill_num){
|
switch(skill_num){
|
||||||
case SM_ENDURE:
|
case SM_ENDURE:
|
||||||
case AL_TELEPORT:
|
case AL_TELEPORT:
|
||||||
@ -7275,7 +7288,7 @@ int skill_use_id( struct map_session_data *sd, int target_id,
|
|||||||
case ST_CHASEWALK:
|
case ST_CHASEWALK:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/* ‰‰‘t/ƒ_ƒ“ƒX’† */
|
/* ‰‰‘t/ƒ_ƒ“ƒX’† */
|
||||||
if( sc_data && sc_data[SC_DANCING].timer!=-1 ){
|
if( sc_data && sc_data[SC_DANCING].timer!=-1 ){
|
||||||
@ -7538,12 +7551,12 @@ int skill_use_pos( struct map_session_data *sd,
|
|||||||
if(pc_isdead(sd))
|
if(pc_isdead(sd))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (skillnotok(skill_num, sd)) // [MoueJstr]
|
if (skillnotok(skill_num, sd)) // [MoueJstr]
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if(skill_num==WZ_ICEWALL && map[sd->bl.m].flag.noicewall && !map[sd->bl.m].flag.pvp) { // noicewall flag [Valaris]
|
if(skill_num==WZ_ICEWALL && map[sd->bl.m].flag.noicewall && !map[sd->bl.m].flag.pvp) { // noicewall flag [Valaris]
|
||||||
clif_skill_fail(sd,sd->skillid,0,0);
|
clif_skill_fail(sd,sd->skillid,0,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sc_data=sd->sc_data;
|
sc_data=sd->sc_data;
|
||||||
@ -7583,11 +7596,11 @@ int skill_use_pos( struct map_session_data *sd,
|
|||||||
if(sd->status.option&2)
|
if(sd->status.option&2)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if(map[sd->bl.m].flag.gvg &&
|
/* if(map[sd->bl.m].flag.gvg &&
|
||||||
(skill_num == SM_ENDURE || skill_num == AL_TELEPORT ||
|
(skill_num == SM_ENDURE || skill_num == AL_TELEPORT ||
|
||||||
skill_num == AL_WARP || skill_num == WZ_ICEWALL ||
|
skill_num == AL_WARP || skill_num == WZ_ICEWALL ||
|
||||||
skill_num == TF_BACKSLIDING))
|
skill_num == TF_BACKSLIDING))
|
||||||
return 0;
|
return 0;*/
|
||||||
|
|
||||||
sd->skillid = skill_num;
|
sd->skillid = skill_num;
|
||||||
sd->skilllv = skill_lv;
|
sd->skilllv = skill_lv;
|
||||||
@ -11516,7 +11529,9 @@ int skill_readdb(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
i=atoi(split[0]);
|
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;
|
continue;
|
||||||
|
|
||||||
memset(split2,0,sizeof(split2));
|
memset(split2,0,sizeof(split2));
|
||||||
@ -11531,6 +11546,33 @@ int skill_readdb(void)
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
printf("read db/skill_castnodex_db.txt done\n");
|
printf("read db/skill_castnodex_db.txt done\n");
|
||||||
|
|
||||||
|
fp=fopen("db/skill_nocast_db.txt","r");
|
||||||
|
if(fp==NULL){
|
||||||
|
printf("can't read db/skill_nocast_db.txt\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
k=0;
|
||||||
|
while(fgets(line,1020,fp)){
|
||||||
|
char *split[16];
|
||||||
|
if(line[0]=='/' && line[1]=='/')
|
||||||
|
continue;
|
||||||
|
memset(split,0,sizeof(split));
|
||||||
|
for(j=0,p=line;j<2 && p;j++){
|
||||||
|
split[j]=p;
|
||||||
|
p=strchr(p,',');
|
||||||
|
if(p) *p++=0;
|
||||||
|
}
|
||||||
|
if(split[0]==NULL)
|
||||||
|
continue;
|
||||||
|
i=atoi(split[0]);
|
||||||
|
if(i < 0 || i > MAX_SKILL_DB)
|
||||||
|
continue;
|
||||||
|
skill_db[i].nocast=atoi(split[1]);
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
printf("read db/skill_nocast_db done\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ struct skill_db {
|
|||||||
int weapon,state,spiritball[MAX_SKILL_LEVEL];
|
int weapon,state,spiritball[MAX_SKILL_LEVEL];
|
||||||
int itemid[10],amount[10];
|
int itemid[10],amount[10];
|
||||||
int castnodex[MAX_SKILL_LEVEL];
|
int castnodex[MAX_SKILL_LEVEL];
|
||||||
|
int nocast;
|
||||||
};
|
};
|
||||||
extern struct skill_db skill_db[MAX_SKILL_DB];
|
extern struct skill_db skill_db[MAX_SKILL_DB];
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user