- Cleaned status_get_sc_tick/status_get_sc_def to use the status_data function.
- SC_STOP's chance and duration can't be reduced anymore. - Storm Gust no longer has a 100% chance to freeze by passing mdef, now it has a 300% base chance reduced by mdef and the like as explained out by Tharis. - Frost Diver/Frost Nova's base freezing chance is no longer affected by target's int. - Lots of indentation fixes in login_sql/login.c to make it match with stable's layout. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7025 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
dc71d18c29
commit
11ecdf7283
@ -4,6 +4,14 @@ 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.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2006/06/07
|
2006/06/07
|
||||||
|
* Cleaned status_get_sc_tick/status_get_sc_def to use the status_data
|
||||||
|
function. [Skotlex]
|
||||||
|
* SC_STOP's chance and duration can't be reduced anymore. [Skotlex]
|
||||||
|
* Storm Gust no longer has a 100% chance to freeze by passing mdef, now it
|
||||||
|
has a 300% base chance reduced by mdef and the like as explained out by
|
||||||
|
Tharis. [Skotlex]
|
||||||
|
* Frost Diver/Frost Nova's base freezing chance is no longer affected by
|
||||||
|
target's int. [Skotlex]
|
||||||
* [Improved]:
|
* [Improved]:
|
||||||
- mob_dead not to remove script controlled monsters with player sprites.
|
- mob_dead not to remove script controlled monsters with player sprites.
|
||||||
[Added]:
|
[Added]:
|
||||||
|
@ -286,32 +286,32 @@ void send_GM_accounts(int fd) {
|
|||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
/*
|
/*
|
||||||
int isGM(int account_id) {
|
int isGM(int account_id) {
|
||||||
int level;
|
int level;
|
||||||
|
|
||||||
MYSQL_RES* sql_res;
|
MYSQL_RES* sql_res;
|
||||||
MYSQL_ROW sql_row;
|
MYSQL_ROW sql_row;
|
||||||
level = 0;
|
level = 0;
|
||||||
sprintf(tmpsql,"SELECT `%s` FROM `%s` WHERE `%s`='%d'", login_db_level, login_db, login_db_account_id, account_id);
|
sprintf(tmpsql,"SELECT `%s` FROM `%s` WHERE `%s`='%d'", login_db_level, login_db, login_db_account_id, account_id);
|
||||||
if (mysql_query(&mysql_handle, tmpsql)) {
|
if (mysql_query(&mysql_handle, tmpsql)) {
|
||||||
ShowSQL("DB error - %s\n",mysql_error(&mysql_handle));
|
ShowSQL("DB error - %s\n",mysql_error(&mysql_handle));
|
||||||
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
|
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
|
||||||
}
|
}
|
||||||
sql_res = mysql_store_result(&mysql_handle);
|
sql_res = mysql_store_result(&mysql_handle);
|
||||||
if (sql_res) {
|
if (sql_res) {
|
||||||
sql_row = mysql_fetch_row(sql_res);
|
sql_row = mysql_fetch_row(sql_res);
|
||||||
level = atoi(sql_row[0]);
|
level = atoi(sql_row[0]);
|
||||||
if (level > 99)
|
if (level > 99)
|
||||||
level = 99;
|
level = 99;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level == 0) {
|
if (level == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
//not GM
|
//not GM
|
||||||
}
|
}
|
||||||
|
|
||||||
mysql_free_result(sql_res);
|
mysql_free_result(sql_res);
|
||||||
|
|
||||||
return level;
|
return level;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -355,9 +355,9 @@ int e_mail_check(char *email) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================
|
/*======================================================
|
||||||
* Does a mysql_ping to all connection handles. [Skotlex]
|
* Does a mysql_ping to all connection handles. [Skotlex]
|
||||||
*------------------------------------------------------
|
*------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
int login_sql_ping(int tid, unsigned int tick, int id, int data)
|
int login_sql_ping(int tid, unsigned int tick, int id, int data)
|
||||||
{
|
{
|
||||||
ShowInfo("Pinging SQL server to keep connection alive...\n");
|
ShowInfo("Pinging SQL server to keep connection alive...\n");
|
||||||
@ -439,7 +439,7 @@ void mmo_db_close(void) {
|
|||||||
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
|
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
//delete all server status
|
//delete all server status
|
||||||
sprintf(tmpsql,"DELETE FROM `sstatus`");
|
sprintf(tmpsql,"DELETE FROM `sstatus`");
|
||||||
//query
|
//query
|
||||||
@ -449,7 +449,7 @@ void mmo_db_close(void) {
|
|||||||
}
|
}
|
||||||
mysql_close(&mysql_handle);
|
mysql_close(&mysql_handle);
|
||||||
ShowStatus("close DB connect....\n");
|
ShowStatus("close DB connect....\n");
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (i = 0; i < MAX_SERVERS; i++) {
|
for (i = 0; i < MAX_SERVERS; i++) {
|
||||||
if ((fd = server_fd[i]) >= 0)
|
if ((fd = server_fd[i]) >= 0)
|
||||||
@ -645,7 +645,7 @@ int mmo_auth( struct mmo_account* account , int fd){
|
|||||||
|
|
||||||
if (account->passwdenc==PASSWORDENC) {
|
if (account->passwdenc==PASSWORDENC) {
|
||||||
memcpy(t_pass, account->passwd, NAME_LENGTH);
|
memcpy(t_pass, account->passwd, NAME_LENGTH);
|
||||||
t_pass[24] = '\0';
|
t_pass[NAME_LENGTH] = '\0';
|
||||||
} else
|
} else
|
||||||
jstrescapecpy(t_pass, account->passwd);
|
jstrescapecpy(t_pass, account->passwd);
|
||||||
|
|
||||||
@ -765,9 +765,9 @@ int mmo_auth( struct mmo_account* account , int fd){
|
|||||||
//ShowInfo("auth ok %s %s" RETCODE, tmpstr, account->userid);
|
//ShowInfo("auth ok %s %s" RETCODE, tmpstr, account->userid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// do not remove this section. this is meant for future, and current forums usage
|
// do not remove this section. this is meant for future, and current forums usage
|
||||||
// as a login manager and CP for login server. [CLOWNISIUS]
|
// as a login manager and CP for login server. [CLOWNISIUS]
|
||||||
if (atoi(sql_row[10]) == 1) {
|
if (atoi(sql_row[10]) == 1) {
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
@ -794,7 +794,7 @@ int mmo_auth( struct mmo_account* account , int fd){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
ban_until_time = atol(sql_row[8]);
|
ban_until_time = atol(sql_row[8]);
|
||||||
|
|
||||||
//login {0-account_id/1-userid/2-user_pass/3-lastlogin/4-logincount/5-sex/6-connect_untl/7-last_ip/8-ban_until/9-state}
|
//login {0-account_id/1-userid/2-user_pass/3-lastlogin/4-logincount/5-sex/6-connect_untl/7-last_ip/8-ban_until/9-state}
|
||||||
@ -941,7 +941,7 @@ int parse_fromchar(int fd){
|
|||||||
}
|
}
|
||||||
|
|
||||||
while(RFIFOREST(fd) >= 2) {
|
while(RFIFOREST(fd) >= 2) {
|
||||||
// printf("char_parse: %d %d packet case=%x\n", fd, RFIFOREST(fd), RFIFOW(fd, 0));
|
// printf("char_parse: %d %d packet case=%x\n", fd, RFIFOREST(fd), RFIFOW(fd, 0));
|
||||||
|
|
||||||
switch (RFIFOW(fd,0)) {
|
switch (RFIFOW(fd,0)) {
|
||||||
case 0x2709:
|
case 0x2709:
|
||||||
@ -975,7 +975,8 @@ int parse_fromchar(int fd){
|
|||||||
#if CMP_AUTHFIFO_IP != 0
|
#if CMP_AUTHFIFO_IP != 0
|
||||||
auth_fifo[i].ip == RFIFOL(fd,15) &&
|
auth_fifo[i].ip == RFIFOL(fd,15) &&
|
||||||
#endif
|
#endif
|
||||||
!auth_fifo[i].delflag) {
|
!auth_fifo[i].delflag)
|
||||||
|
{
|
||||||
auth_fifo[i].delflag = 1;
|
auth_fifo[i].delflag = 1;
|
||||||
ShowDebug("auth -> %d\n", i);
|
ShowDebug("auth -> %d\n", i);
|
||||||
break;
|
break;
|
||||||
@ -1010,9 +1011,9 @@ int parse_fromchar(int fd){
|
|||||||
WFIFOB(fd,6) = 1;
|
WFIFOB(fd,6) = 1;
|
||||||
WFIFOSET(fd,51);
|
WFIFOSET(fd,51);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
RFIFOSKIP(fd,19);
|
RFIFOSKIP(fd,19);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 0x2714:
|
case 0x2714:
|
||||||
if (RFIFOREST(fd) < 6)
|
if (RFIFOREST(fd) < 6)
|
||||||
@ -1128,9 +1129,9 @@ int parse_fromchar(int fd){
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
RFIFOSKIP(fd, 86);
|
RFIFOSKIP(fd, 86);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 0x2724: // Receiving of map-server via char-server a status change resquest (by Yor)
|
case 0x2724: // Receiving of map-server via char-server a status change resquest (by Yor)
|
||||||
if (RFIFOREST(fd) < 10)
|
if (RFIFOREST(fd) < 10)
|
||||||
@ -1163,8 +1164,8 @@ int parse_fromchar(int fd){
|
|||||||
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
|
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
|
||||||
}
|
}
|
||||||
RFIFOSKIP(fd,10);
|
RFIFOSKIP(fd,10);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
|
||||||
case 0x2725: // Receiving of map-server via char-server a ban resquest (by Yor)
|
case 0x2725: // Receiving of map-server via char-server a ban resquest (by Yor)
|
||||||
if (RFIFOREST(fd) < 18)
|
if (RFIFOREST(fd) < 18)
|
||||||
@ -1220,7 +1221,6 @@ int parse_fromchar(int fd){
|
|||||||
RFIFOSKIP(fd,18);
|
RFIFOSKIP(fd,18);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
|
||||||
case 0x2727:
|
case 0x2727:
|
||||||
if (RFIFOREST(fd) < 6)
|
if (RFIFOREST(fd) < 6)
|
||||||
@ -1262,8 +1262,8 @@ int parse_fromchar(int fd){
|
|||||||
WBUFB(buf,6) = sex;
|
WBUFB(buf,6) = sex;
|
||||||
charif_sendallwos(-1, buf, 7);
|
charif_sendallwos(-1, buf, 7);
|
||||||
RFIFOSKIP(fd,6);
|
RFIFOSKIP(fd,6);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
|
||||||
case 0x2728: // save account_reg2
|
case 0x2728: // save account_reg2
|
||||||
if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
|
if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
|
||||||
@ -1589,7 +1589,7 @@ int parse_login(int fd) {
|
|||||||
server_num=0;
|
server_num=0;
|
||||||
for(i = 0; i < MAX_SERVERS; i++) {
|
for(i = 0; i < MAX_SERVERS; i++) {
|
||||||
if (server_fd[i] >= 0) {
|
if (server_fd[i] >= 0) {
|
||||||
// Andvanced subnet check [LuzZza]
|
// Advanced subnet check [LuzZza]
|
||||||
if((subnet_char_ip = lan_subnetcheck((long *)p)))
|
if((subnet_char_ip = lan_subnetcheck((long *)p)))
|
||||||
WFIFOL(fd,47+server_num*32) = subnet_char_ip;
|
WFIFOL(fd,47+server_num*32) = subnet_char_ip;
|
||||||
else
|
else
|
||||||
@ -1732,8 +1732,8 @@ int parse_login(int fd) {
|
|||||||
sprintf(error,"Deleting spouse char.");
|
sprintf(error,"Deleting spouse char.");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sprintf(tmpsql,tmp_sql,"Uknown Error.");
|
sprintf(tmpsql,tmp_sql,"Unknown Error.");
|
||||||
sprintf(error,"Uknown Error.");
|
sprintf(error,"Unknown Error.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//query
|
//query
|
||||||
|
@ -1075,21 +1075,15 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
|
|||||||
sc_start(bl,type,100,skilllv,skill_get_time2(skillid, skilllv));
|
sc_start(bl,type,100,skilllv,skill_get_time2(skillid, skilllv));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MG_FROSTDIVER: /* ƒtƒ?ƒXƒgƒ_ƒCƒo? */
|
case MG_FROSTDIVER:
|
||||||
case WZ_FROSTNOVA: /* ƒtƒ?ƒXƒgƒmƒ”ƒ@ */
|
case WZ_FROSTNOVA:
|
||||||
{
|
sc_start(bl,SC_FREEZE,skilllv*3+35,skilllv,skill_get_time2(skillid,skilllv));
|
||||||
rate = (skilllv*3+35)-(tstatus->int_ + tstatus->luk)/15;
|
|
||||||
if (rate <= 5)
|
|
||||||
rate = 5;
|
|
||||||
sc_start(bl,SC_FREEZE,rate,skilllv,skill_get_time2(skillid,skilllv));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WZ_STORMGUST: /* ƒXƒg?ƒ€ƒKƒXƒg */
|
case WZ_STORMGUST:
|
||||||
tsc->data[SC_FREEZE].val3++;
|
tsc->data[SC_FREEZE].val3++;
|
||||||
if(tsc->data[SC_FREEZE].val3 >= 3)
|
if(tsc->data[SC_FREEZE].val3 >= 3) //Tharis pointed out that this is normal freeze chance with a base of 300%
|
||||||
status_change_start(bl,SC_FREEZE,10000,
|
sc_start(bl,SC_FREEZE,300,skilllv,skill_get_time2(skillid,skilllv));
|
||||||
skilllv,0,0,0,skill_get_time2(skillid,skilllv),8);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WZ_METEOR:
|
case WZ_METEOR:
|
||||||
|
@ -3793,6 +3793,7 @@ void status_change_init(struct block_list *bl)
|
|||||||
int status_get_sc_def(struct block_list *bl, int type)
|
int status_get_sc_def(struct block_list *bl, int type)
|
||||||
{
|
{
|
||||||
int sc_def;
|
int sc_def;
|
||||||
|
struct status_data* status;
|
||||||
struct status_change* sc;
|
struct status_change* sc;
|
||||||
nullpo_retr(0, bl);
|
nullpo_retr(0, bl);
|
||||||
|
|
||||||
@ -3824,6 +3825,7 @@ int status_get_sc_def(struct block_list *bl, int type)
|
|||||||
return 10000;
|
return 10000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status = status_get_status_data(bl);
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
//Note that stats that are *100/3 were simplified to *33
|
//Note that stats that are *100/3 were simplified to *33
|
||||||
@ -3831,29 +3833,24 @@ int status_get_sc_def(struct block_list *bl, int type)
|
|||||||
case SC_FREEZE:
|
case SC_FREEZE:
|
||||||
case SC_DECREASEAGI:
|
case SC_DECREASEAGI:
|
||||||
case SC_COMA:
|
case SC_COMA:
|
||||||
sc_def = 300 +100*status_get_mdef(bl) +33*status_get_luk(bl);
|
sc_def = 300 +100*status->mdef +33*status->luk;
|
||||||
break;
|
break;
|
||||||
case SC_SLEEP:
|
case SC_SLEEP:
|
||||||
case SC_CONFUSION:
|
case SC_CONFUSION:
|
||||||
sc_def = 300 +100*status_get_int(bl) +33*status_get_luk(bl);
|
sc_def = 300 +100*status->int_ +33*status->luk;
|
||||||
break;
|
break;
|
||||||
// Removed since it collides with normal sc.
|
|
||||||
// case SP_DEF1: // def
|
|
||||||
// sc_def = 300 +100*status_get_def(bl) +33*status_get_luk(bl);
|
|
||||||
// break;
|
|
||||||
case SC_STUN:
|
case SC_STUN:
|
||||||
case SC_POISON:
|
case SC_POISON:
|
||||||
case SC_DPOISON:
|
case SC_DPOISON:
|
||||||
case SC_SILENCE:
|
case SC_SILENCE:
|
||||||
case SC_BLEEDING:
|
case SC_BLEEDING:
|
||||||
case SC_STOP:
|
sc_def = 300 +100*status->vit +33*status->luk;
|
||||||
sc_def = 300 +100*status_get_vit(bl) +33*status_get_luk(bl);
|
|
||||||
break;
|
break;
|
||||||
case SC_BLIND:
|
case SC_BLIND:
|
||||||
sc_def = 300 +100*status_get_int(bl) +33*status_get_vit(bl);
|
sc_def = 300 +100*status->int_ +33*status->vit;
|
||||||
break;
|
break;
|
||||||
case SC_CURSE:
|
case SC_CURSE:
|
||||||
sc_def = 300 +100*status_get_luk(bl) +33*status_get_vit(bl);
|
sc_def = 300 +100*status->luk +33*status->vit;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0; //Effect that cannot be reduced? Likely a buff.
|
return 0; //Effect that cannot be reduced? Likely a buff.
|
||||||
@ -3888,56 +3885,58 @@ int status_get_sc_def(struct block_list *bl, int type)
|
|||||||
int status_get_sc_tick(struct block_list *bl, int type, int tick)
|
int status_get_sc_tick(struct block_list *bl, int type, int tick)
|
||||||
{
|
{
|
||||||
struct map_session_data *sd;
|
struct map_session_data *sd;
|
||||||
|
struct status_data* status;
|
||||||
int rate=0, min=0;
|
int rate=0, min=0;
|
||||||
//If rate is positive, it is a % reduction (10000 -> 100%)
|
//If rate is positive, it is a % reduction (10000 -> 100%)
|
||||||
//if it is negative, it is an absolute reduction in ms.
|
//if it is negative, it is an absolute reduction in ms.
|
||||||
sd = bl->type == BL_PC?(struct map_session_data *)bl:NULL;
|
BL_CAST(BL_PC,bl,sd);
|
||||||
|
status = status_get_status_data(bl);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SC_DECREASEAGI: /* ‘¬“xŒ¸<C592> */
|
case SC_DECREASEAGI: /* ‘¬“xŒ¸<C592> */
|
||||||
if (sd) // Celest
|
if (sd) // Celest
|
||||||
tick>>=1;
|
tick>>=1;
|
||||||
break;
|
break;
|
||||||
case SC_ADRENALINE: /* アドレナリンラッシュ */
|
case SC_ADRENALINE:
|
||||||
case SC_ADRENALINE2:
|
case SC_ADRENALINE2:
|
||||||
case SC_WEAPONPERFECTION: /* ウェポンパ?フェクション */
|
case SC_WEAPONPERFECTION:
|
||||||
case SC_OVERTHRUST: /* オ?バ?スラスト */
|
case SC_OVERTHRUST:
|
||||||
if(sd && pc_checkskill(sd,BS_HILTBINDING)>0)
|
if(sd && pc_checkskill(sd,BS_HILTBINDING)>0)
|
||||||
tick += tick / 10;
|
tick += tick / 10;
|
||||||
break;
|
break;
|
||||||
case SC_STONE: /* 石化 */
|
case SC_STONE:
|
||||||
rate = -200*status_get_mdef(bl);
|
rate = -200*status->mdef;
|
||||||
break;
|
break;
|
||||||
case SC_FREEZE: /* 凍結 */
|
case SC_FREEZE:
|
||||||
rate = 100*status_get_mdef(bl);
|
rate = 100*status->mdef;
|
||||||
break;
|
break;
|
||||||
case SC_STUN: //Reduction in duration is the same as reduction in rate.
|
case SC_STUN: //Reduction in duration is the same as reduction in rate.
|
||||||
rate = 300 +100*status_get_vit(bl) +33*status_get_luk(bl);
|
rate = 300 +100*status->vit;
|
||||||
break;
|
break;
|
||||||
case SC_DPOISON: /* 猛毒 */
|
case SC_DPOISON:
|
||||||
case SC_POISON: /* 毒 */
|
case SC_POISON:
|
||||||
rate = 100*status_get_vit(bl) + 20*status_get_luk(bl);
|
rate = 100*status->vit + 20*status->luk;
|
||||||
break;
|
break;
|
||||||
case SC_SILENCE: /* 沈?(レックスデビ?ナ) */
|
case SC_SILENCE:
|
||||||
case SC_CONFUSION:
|
case SC_CONFUSION:
|
||||||
case SC_CURSE:
|
case SC_CURSE:
|
||||||
rate = 100*status_get_vit(bl);
|
rate = 100*status->vit;
|
||||||
break;
|
break;
|
||||||
case SC_BLIND: /* 暗? */
|
case SC_BLIND:
|
||||||
rate = 10*status_get_lv(bl) + 7*status_get_int(bl);
|
rate = 10*status_get_lv(bl) + 7*status->int_;
|
||||||
min = 5000; //Minimum 5 secs?
|
min = 5000; //Minimum 5 secs?
|
||||||
break;
|
break;
|
||||||
case SC_BLEEDING:
|
case SC_BLEEDING:
|
||||||
rate = 20*status_get_lv(bl) +100*status_get_vit(bl);
|
rate = 20*status_get_lv(bl) +100*status->vit;
|
||||||
min = 10000; //Need a min of 10 secs for it to hurt at least once.
|
min = 10000; //Need a min of 10 secs for it to hurt at least once.
|
||||||
break;
|
break;
|
||||||
case SC_SWOO:
|
case SC_SWOO:
|
||||||
if (status_get_mode(bl)&MD_BOSS)
|
if (status->mode&MD_BOSS)
|
||||||
tick /= 5; //TODO: Reduce skill's duration. But for how long?
|
tick /= 5; //TODO: Reduce skill's duration. But for how long?
|
||||||
break;
|
break;
|
||||||
case SC_ANKLE:
|
case SC_ANKLE:
|
||||||
if(status_get_mode(bl)&MD_BOSS) // Lasts 5 times less on bosses
|
if(status->mode&MD_BOSS) // Lasts 5 times less on bosses
|
||||||
tick /= 5;
|
tick /= 5;
|
||||||
rate = -100*status_get_agi(bl);
|
rate = -100*status->agi;
|
||||||
// Minimum trap time of 3+0.03*skilllv seconds [celest]
|
// Minimum trap time of 3+0.03*skilllv seconds [celest]
|
||||||
// Changed to 3 secs and moved from skill.c [Skotlex]
|
// Changed to 3 secs and moved from skill.c [Skotlex]
|
||||||
min = 3000;
|
min = 3000;
|
||||||
@ -3946,11 +3945,6 @@ int status_get_sc_tick(struct block_list *bl, int type, int tick)
|
|||||||
if (map[bl->m].flag.pvp)
|
if (map[bl->m].flag.pvp)
|
||||||
tick /=2;
|
tick /=2;
|
||||||
break;
|
break;
|
||||||
case SC_STOP:
|
|
||||||
// Unsure of this... but I get a feeling that agi reduces this
|
|
||||||
// (it was on Tiger Fist Code, but at -1 ms per 10 agi....
|
|
||||||
rate = -100*status_get_agi(bl);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (rate) {
|
if (rate) {
|
||||||
if (bl->type == BL_PC) {
|
if (bl->type == BL_PC) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user