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
|
||||
11/26
|
||||
* 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
|
||||
* 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 */
|
||||
|
||||
#include <stdio.h>
|
||||
@ -859,6 +859,19 @@ int skillnotok(int skillid, struct map_session_data *sd) {
|
||||
return 0;
|
||||
if (pc_isGM(sd) >= 20)
|
||||
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) {
|
||||
case AL_WARP:
|
||||
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 )
|
||||
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){
|
||||
case SM_ENDURE:
|
||||
case AL_TELEPORT:
|
||||
@ -7275,7 +7288,7 @@ int skill_use_id( struct map_session_data *sd, int target_id,
|
||||
case ST_CHASEWALK:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
/* ‰‰‘t/ƒ_ƒ“ƒX’† */
|
||||
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))
|
||||
return 0;
|
||||
|
||||
if (skillnotok(skill_num, sd)) // [MoueJstr]
|
||||
return 0;
|
||||
if (skillnotok(skill_num, sd)) // [MoueJstr]
|
||||
return 0;
|
||||
|
||||
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);
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sc_data=sd->sc_data;
|
||||
@ -7583,11 +7596,11 @@ int skill_use_pos( struct map_session_data *sd,
|
||||
if(sd->status.option&2)
|
||||
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 == AL_WARP || skill_num == WZ_ICEWALL ||
|
||||
skill_num == TF_BACKSLIDING))
|
||||
return 0;
|
||||
return 0;*/
|
||||
|
||||
sd->skillid = skill_num;
|
||||
sd->skilllv = skill_lv;
|
||||
@ -11516,7 +11529,9 @@ int skill_readdb(void)
|
||||
}
|
||||
|
||||
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));
|
||||
@ -11531,6 +11546,33 @@ int skill_readdb(void)
|
||||
fclose(fp);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ struct skill_db {
|
||||
int weapon,state,spiritball[MAX_SKILL_LEVEL];
|
||||
int itemid[10],amount[10];
|
||||
int castnodex[MAX_SKILL_LEVEL];
|
||||
int nocast;
|
||||
};
|
||||
extern struct skill_db skill_db[MAX_SKILL_DB];
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user