* Fixed more typos in /cities/payon.txt
* Added 2 char-server packets to support Freya's login server * Rewrite on Full Strip git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1243 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
4337a29ac4
commit
f4b515d055
@ -1,6 +1,8 @@
|
|||||||
Date Added
|
Date Added
|
||||||
|
|
||||||
03/17
|
03/17
|
||||||
|
* Added 2 char-server packets to support Freya's login server [celest]
|
||||||
|
* Rewrite on Full Strip [celest]
|
||||||
* Fixed heap corrupion in map.c caused while loading maps
|
* Fixed heap corrupion in map.c caused while loading maps
|
||||||
[SVN 1241: MouseJstr]
|
[SVN 1241: MouseJstr]
|
||||||
* Re-fixed compile error in map.c -- sorry ^^; [celest]
|
* Re-fixed compile error in map.c -- sorry ^^; [celest]
|
||||||
|
@ -35,6 +35,9 @@ Other Ppl
|
|||||||
Date Added
|
Date Added
|
||||||
======
|
======
|
||||||
|
|
||||||
|
03/17
|
||||||
|
* Fixed more typos in /cities/payon.txt, thanks to TheUltimateEnd [celest]
|
||||||
|
|
||||||
03/16
|
03/16
|
||||||
* Fixed some typos in /cites/payon.txt, thanks to Hibiki [celest]
|
* Fixed some typos in /cites/payon.txt, thanks to Hibiki [celest]
|
||||||
|
|
||||||
|
@ -6,13 +6,14 @@
|
|||||||
//= Muad Dib (1.2)
|
//= Muad Dib (1.2)
|
||||||
//= Darkchild (1.3)
|
//= Darkchild (1.3)
|
||||||
//===== Current Version: =====================================
|
//===== Current Version: =====================================
|
||||||
//= 1.3
|
//= 1.4
|
||||||
//===== Compatible With: =====================================
|
//===== Compatible With: =====================================
|
||||||
//= Any eAthena Mod
|
//= Any eAthena Mod
|
||||||
//===== Description: =========================================
|
//===== Description: =========================================
|
||||||
//= (New) Payon City Npcs
|
//= (New) Payon City Npcs
|
||||||
//===== Additional Comments: =================================
|
//===== Additional Comments: =================================
|
||||||
//= Most Credits To Muad Dib, Some Stuff By Me
|
//= Most Credits To Muad Dib, Some Stuff By Me
|
||||||
|
//= 1.4 - Corrected a few typos
|
||||||
//============================================================
|
//============================================================
|
||||||
|
|
||||||
payon.gat,190,115,0 script Lady 90,{
|
payon.gat,190,115,0 script Lady 90,{
|
||||||
@ -82,12 +83,14 @@ payon_in01.gat,180,7,0 script Waitress 90,{
|
|||||||
next;
|
next;
|
||||||
mes "[Waitress]";
|
mes "[Waitress]";
|
||||||
mes "Where can I find the right person who is a really hot, sexy hunk, and who can take me out of this small place?";
|
mes "Where can I find the right person who is a really hot, sexy hunk, and who can take me out of this small place?";
|
||||||
check Gender = 1,-,LStartF;
|
if(Sex == 0) goto LStartF;
|
||||||
mes "[Waitress]";
|
mes "[Waitress]";
|
||||||
mes "Hello, mister?";
|
mes "Hello, mister?";
|
||||||
|
goto L_Start;
|
||||||
LStartF:
|
LStartF:
|
||||||
mes "[Waitress]";
|
mes "[Waitress]";
|
||||||
mes "Hello, lady?";
|
mes "Hello, lady?";
|
||||||
|
L_Start:
|
||||||
next;
|
next;
|
||||||
mes "[Waitress]";
|
mes "[Waitress]";
|
||||||
mes "Grandma the fortuneteller told me that I would meet great luck in the near future!";
|
mes "Grandma the fortuneteller told me that I would meet great luck in the near future!";
|
||||||
@ -124,7 +127,7 @@ L_Menu2:
|
|||||||
emotion 5;
|
emotion 5;
|
||||||
next;
|
next;
|
||||||
mes "[Waitress]";
|
mes "[Waitress]";
|
||||||
mes "On the first place, she stayed here to mind her business, but ever since the chief recognized her talent, she's stayed in the central palace."
|
mes "On the first place, she stayed here to mind her business, but ever since the chief recognized her talent, she's stayed in the central palace.";
|
||||||
mes "You'd better go to there if you want to see her.";
|
mes "You'd better go to there if you want to see her.";
|
||||||
close;
|
close;
|
||||||
L_Menu3:
|
L_Menu3:
|
||||||
@ -165,16 +168,18 @@ payon.gat,193,116,1 script Woman 66,{
|
|||||||
mes "Hmm... you look as strong as a Rocker! How many monsters have you killed?";
|
mes "Hmm... you look as strong as a Rocker! How many monsters have you killed?";
|
||||||
mes "Let me tell you about a place where you can go train and become even stronger.";
|
mes "Let me tell you about a place where you can go train and become even stronger.";
|
||||||
emotion 20;
|
emotion 20;
|
||||||
|
goto L_Start;
|
||||||
LStartF:
|
LStartF:
|
||||||
mes "Miss, how many monsters have you killed?";
|
mes "Miss, how many monsters have you killed?";
|
||||||
mes "I know a very good place for you to go train and get good monster drops.";
|
mes "I know a very good place for you to go train and get good monster drops.";
|
||||||
emotion 20;
|
emotion 20;
|
||||||
|
L_Start:
|
||||||
next;
|
next;
|
||||||
mes "[Woman]";
|
mes "[Woman]";
|
||||||
mes "I know of a cave near Archer Village. Just take the exit north of town and follow the path to your left.";
|
mes "I know of a cave near Archer Village. Just take the exit north of town and follow the path to your left.";
|
||||||
mes "The cave is full of monsters and their spawn rate is very high. Does it sound interesting to you?";
|
mes "The cave is full of monsters and their spawn rate is very high. Does it sound interesting to you?";
|
||||||
next;
|
next;
|
||||||
menu "It sounds dangerous."L_Menu1,"I think I need to fully prepare for that place.",L_Menu2,"Lady, you wear nice clothing~",L_Menu3;
|
menu "It sounds dangerous.",L_Menu1,"I think I need to fully prepare for that place.",L_Menu2,"Lady, you wear nice clothing~",L_Menu3;
|
||||||
L_Menu1:
|
L_Menu1:
|
||||||
mes "[Woman]";
|
mes "[Woman]";
|
||||||
mes "Oh don't be such a coward! It's just a simple cave filled with normal monsters. Archer Village is near by so you shouldn't be worried~ hohoho~";
|
mes "Oh don't be such a coward! It's just a simple cave filled with normal monsters. Archer Village is near by so you shouldn't be worried~ hohoho~";
|
||||||
@ -217,9 +222,11 @@ payon.gat,190,119,5 script Woman 66,{
|
|||||||
if(Sex == 0) goto LStartF;
|
if(Sex == 0) goto LStartF;
|
||||||
mes "... Oh, you have broad shoulders ... tehehe! Will you go out with me? I'd like to make you a nice dinner...(bats eyelashes)";
|
mes "... Oh, you have broad shoulders ... tehehe! Will you go out with me? I'd like to make you a nice dinner...(bats eyelashes)";
|
||||||
emotion 30;
|
emotion 30;
|
||||||
|
goto L_Menu;
|
||||||
LStartF:
|
LStartF:
|
||||||
mes "Don't you think your dress is too lousy?";
|
mes "Don't you think your dress is too lousy?";
|
||||||
mes "I don't like young ladies pounce up.";
|
mes "I don't like young ladies pounce up.";
|
||||||
|
L_Menu:
|
||||||
next;
|
next;
|
||||||
menu "Fortune Telling?",L_Menu1,"...Good Bye.",L_Menu2;
|
menu "Fortune Telling?",L_Menu1,"...Good Bye.",L_Menu2;
|
||||||
L_Menu1:
|
L_Menu1:
|
||||||
@ -401,7 +408,7 @@ L_case:
|
|||||||
menu "Cave?!",L_para1,"Chief?",L_para2,"Oh man I hate this stupid town~",L_para3;
|
menu "Cave?!",L_para1,"Chief?",L_para2,"Oh man I hate this stupid town~",L_para3;
|
||||||
L_para1:
|
L_para1:
|
||||||
mes "[Archer Wolt]";
|
mes "[Archer Wolt]";
|
||||||
mes "Head north of town, you can see the cave I told you about."
|
mes "Head north of town, you can see the cave I told you about.";
|
||||||
mes "Inside there, you will encounter lots of ugly monsters such as bastard looking like a bat or the walking dead.";
|
mes "Inside there, you will encounter lots of ugly monsters such as bastard looking like a bat or the walking dead.";
|
||||||
mes "If we let them out of the place, they would invade our town. We frequently clean up the cave.";
|
mes "If we let them out of the place, they would invade our town. We frequently clean up the cave.";
|
||||||
next;
|
next;
|
||||||
|
@ -1703,6 +1703,35 @@ int parse_tologin(int fd) {
|
|||||||
RFIFOSKIP(fd,2);
|
RFIFOSKIP(fd,2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Receiving authentification from Freya-type login server (to avoid char->login->char)
|
||||||
|
case 0x2719:
|
||||||
|
if (RFIFOREST(fd) < 18)
|
||||||
|
return 0;
|
||||||
|
// to conserv a maximum of authentification, search if account is already authentified and replace it
|
||||||
|
// that will reduce multiple connection too
|
||||||
|
for(i = 0; i < AUTH_FIFO_SIZE; i++)
|
||||||
|
if (auth_fifo[i].account_id == RFIFOL(fd,2))
|
||||||
|
break;
|
||||||
|
// if not found, use next value
|
||||||
|
if (i == AUTH_FIFO_SIZE) {
|
||||||
|
if (auth_fifo_pos >= AUTH_FIFO_SIZE)
|
||||||
|
auth_fifo_pos = 0;
|
||||||
|
i = auth_fifo_pos;
|
||||||
|
auth_fifo_pos++;
|
||||||
|
}
|
||||||
|
//printf("auth_fifo set (auth #%d) - account: %d, secure: %08x-%08x\n", i, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10));
|
||||||
|
auth_fifo[i].account_id = RFIFOL(fd,2);
|
||||||
|
auth_fifo[i].char_id = 0;
|
||||||
|
auth_fifo[i].login_id1 = RFIFOL(fd,6);
|
||||||
|
auth_fifo[i].login_id2 = RFIFOL(fd,10);
|
||||||
|
auth_fifo[i].delflag = 2; // 0: auth_fifo canceled/void, 2: auth_fifo received from login/map server in memory, 1: connection authentified
|
||||||
|
auth_fifo[i].char_pos = 0;
|
||||||
|
auth_fifo[i].connect_until_time = 0; // unlimited/unknown time by default (not display in map-server)
|
||||||
|
auth_fifo[i].ip = RFIFOL(fd,14);
|
||||||
|
//auth_fifo[i].map_auth = 0;
|
||||||
|
RFIFOSKIP(fd,18);
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x2721: // gm reply
|
case 0x2721: // gm reply
|
||||||
if (RFIFOREST(fd) < 10)
|
if (RFIFOREST(fd) < 10)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1965,6 +1994,64 @@ int parse_tologin(int fd) {
|
|||||||
RFIFOSKIP(fd,RFIFOW(fd,2));
|
RFIFOSKIP(fd,RFIFOW(fd,2));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Receive GM accounts [Freya login server packet by Yor]
|
||||||
|
case 0x2733:
|
||||||
|
// add test here to remember that the login-server is Freya-type
|
||||||
|
// sprintf (login_server_type, "Freya");
|
||||||
|
if (RFIFOREST(fd) < 7)
|
||||||
|
return 0;
|
||||||
|
{
|
||||||
|
unsigned char buf[32000];
|
||||||
|
int new_level = 0;
|
||||||
|
for(i = 0; i < GM_num; i++)
|
||||||
|
if (gm_account[i].account_id == RFIFOL(fd,2)) {
|
||||||
|
if (gm_account[i].level != (int)RFIFOB(fd,6)) {
|
||||||
|
gm_account[i].level = (int)RFIFOB(fd,6);
|
||||||
|
new_level = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// if not found, add it
|
||||||
|
if (i == GM_num) {
|
||||||
|
// limited to 4000, because we send information to char-servers (more than 4000 GM accounts???)
|
||||||
|
// int (id) + int (level) = 8 bytes * 4000 = 32k (limit of packets in windows)
|
||||||
|
if (((int)RFIFOB(fd,6)) > 0 && GM_num < 4000) {
|
||||||
|
if (GM_num == 0) {
|
||||||
|
gm_account = (struct gm_account*)aMalloc(sizeof(struct gm_account));
|
||||||
|
} else {
|
||||||
|
gm_account = (struct gm_account*)aRealloc(gm_account, sizeof(struct gm_account) * (GM_num + 1));
|
||||||
|
}
|
||||||
|
gm_account[GM_num].account_id = RFIFOL(fd,2);
|
||||||
|
gm_account[GM_num].level = (int)RFIFOB(fd,6);
|
||||||
|
new_level = 1;
|
||||||
|
GM_num++;
|
||||||
|
if (GM_num >= 4000) {
|
||||||
|
printf("***WARNING: 4000 GM accounts found. Next GM accounts are not readed.\n");
|
||||||
|
char_log("***WARNING: 4000 GM accounts found. Next GM accounts are not readed." RETCODE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (new_level == 1) {
|
||||||
|
int len;
|
||||||
|
printf("From login-server: receiving a GM account information (%d: level %d).\n", RFIFOL(fd,2), (int)RFIFOB(fd,6));
|
||||||
|
char_log("From login-server: receiving a GM account information (%d: level %d)." RETCODE, RFIFOL(fd,2), (int)RFIFOB(fd,6));
|
||||||
|
//create_online_files(); // not change online file for only 1 player (in next timer, that will be done
|
||||||
|
// send gm acccounts level to map-servers
|
||||||
|
len = 4;
|
||||||
|
WBUFW(buf,0) = 0x2b15;
|
||||||
|
|
||||||
|
for(i = 0; i < GM_num; i++) {
|
||||||
|
WBUFL(buf, len) = gm_account[i].account_id;
|
||||||
|
WBUFB(buf, len+4) = (unsigned char)gm_account[i].level;
|
||||||
|
len += 5;
|
||||||
|
}
|
||||||
|
WBUFW(buf, 2) = len;
|
||||||
|
mapif_sendall(buf, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RFIFOSKIP(fd,7);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("parse_tologin: unknown packet %x! \n", RFIFOW(fd,0));
|
printf("parse_tologin: unknown packet %x! \n", RFIFOW(fd,0));
|
||||||
session[fd]->eof = 1;
|
session[fd]->eof = 1;
|
||||||
|
@ -1555,6 +1555,35 @@ int parse_tologin(int fd) {
|
|||||||
RFIFOSKIP(fd,2);
|
RFIFOSKIP(fd,2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Receiving authentification from Freya-type login server (to avoid char->login->char)
|
||||||
|
case 0x2719:
|
||||||
|
if (RFIFOREST(fd) < 18)
|
||||||
|
return 0;
|
||||||
|
// to conserv a maximum of authentification, search if account is already authentified and replace it
|
||||||
|
// that will reduce multiple connection too
|
||||||
|
for(i = 0; i < AUTH_FIFO_SIZE; i++)
|
||||||
|
if (auth_fifo[i].account_id == RFIFOL(fd,2))
|
||||||
|
break;
|
||||||
|
// if not found, use next value
|
||||||
|
if (i == AUTH_FIFO_SIZE) {
|
||||||
|
if (auth_fifo_pos >= AUTH_FIFO_SIZE)
|
||||||
|
auth_fifo_pos = 0;
|
||||||
|
i = auth_fifo_pos;
|
||||||
|
auth_fifo_pos++;
|
||||||
|
}
|
||||||
|
//printf("auth_fifo set (auth #%d) - account: %d, secure: %08x-%08x\n", i, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10));
|
||||||
|
auth_fifo[i].account_id = RFIFOL(fd,2);
|
||||||
|
auth_fifo[i].char_id = 0;
|
||||||
|
auth_fifo[i].login_id1 = RFIFOL(fd,6);
|
||||||
|
auth_fifo[i].login_id2 = RFIFOL(fd,10);
|
||||||
|
auth_fifo[i].delflag = 2; // 0: auth_fifo canceled/void, 2: auth_fifo received from login/map server in memory, 1: connection authentified
|
||||||
|
auth_fifo[i].char_pos = 0;
|
||||||
|
auth_fifo[i].connect_until_time = 0; // unlimited/unknown time by default (not display in map-server)
|
||||||
|
auth_fifo[i].ip = RFIFOL(fd,14);
|
||||||
|
//auth_fifo[i].map_auth = 0;
|
||||||
|
RFIFOSKIP(fd,18);
|
||||||
|
break;
|
||||||
|
|
||||||
/* case 0x2721: // gm reply. I don't want to support this function.
|
/* case 0x2721: // gm reply. I don't want to support this function.
|
||||||
printf("0x2721:GM reply\n");
|
printf("0x2721:GM reply\n");
|
||||||
{
|
{
|
||||||
@ -1707,6 +1736,64 @@ int parse_tologin(int fd) {
|
|||||||
RFIFOSKIP(fd,11);
|
RFIFOSKIP(fd,11);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Receive GM accounts [Freya login server packet by Yor]
|
||||||
|
case 0x2733:
|
||||||
|
// add test here to remember that the login-server is Freya-type
|
||||||
|
// sprintf (login_server_type, "Freya");
|
||||||
|
if (RFIFOREST(fd) < 7)
|
||||||
|
return 0;
|
||||||
|
{
|
||||||
|
unsigned char buf[32000];
|
||||||
|
int new_level = 0;
|
||||||
|
for(i = 0; i < GM_num; i++)
|
||||||
|
if (gm_account[i].account_id == RFIFOL(fd,2)) {
|
||||||
|
if (gm_account[i].level != (int)RFIFOB(fd,6)) {
|
||||||
|
gm_account[i].level = (int)RFIFOB(fd,6);
|
||||||
|
new_level = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// if not found, add it
|
||||||
|
if (i == GM_num) {
|
||||||
|
// limited to 4000, because we send information to char-servers (more than 4000 GM accounts???)
|
||||||
|
// int (id) + int (level) = 8 bytes * 4000 = 32k (limit of packets in windows)
|
||||||
|
if (((int)RFIFOB(fd,6)) > 0 && GM_num < 4000) {
|
||||||
|
if (GM_num == 0) {
|
||||||
|
gm_account = (struct gm_account*)aMalloc(sizeof(struct gm_account));
|
||||||
|
} else {
|
||||||
|
gm_account = (struct gm_account*)aRealloc(gm_account, sizeof(struct gm_account) * (GM_num + 1));
|
||||||
|
}
|
||||||
|
gm_account[GM_num].account_id = RFIFOL(fd,2);
|
||||||
|
gm_account[GM_num].level = (int)RFIFOB(fd,6);
|
||||||
|
new_level = 1;
|
||||||
|
GM_num++;
|
||||||
|
if (GM_num >= 4000) {
|
||||||
|
printf("***WARNING: 4000 GM accounts found. Next GM accounts are not readed.\n");
|
||||||
|
char_log("***WARNING: 4000 GM accounts found. Next GM accounts are not readed." RETCODE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (new_level == 1) {
|
||||||
|
int len;
|
||||||
|
printf("From login-server: receiving a GM account information (%d: level %d).\n", RFIFOL(fd,2), (int)RFIFOB(fd,6));
|
||||||
|
char_log("From login-server: receiving a GM account information (%d: level %d)." RETCODE, RFIFOL(fd,2), (int)RFIFOB(fd,6));
|
||||||
|
//create_online_files(); // not change online file for only 1 player (in next timer, that will be done
|
||||||
|
// send gm acccounts level to map-servers
|
||||||
|
len = 4;
|
||||||
|
WBUFW(buf,0) = 0x2b15;
|
||||||
|
|
||||||
|
for(i = 0; i < GM_num; i++) {
|
||||||
|
WBUFL(buf, len) = gm_account[i].account_id;
|
||||||
|
WBUFB(buf, len+4) = (unsigned char)gm_account[i].level;
|
||||||
|
len += 5;
|
||||||
|
}
|
||||||
|
WBUFW(buf, 2) = len;
|
||||||
|
mapif_sendall(buf, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RFIFOSKIP(fd,7);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("set eof.\n");
|
printf("set eof.\n");
|
||||||
session[fd]->eof = 1;
|
session[fd]->eof = 1;
|
||||||
|
@ -1247,7 +1247,7 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
|
|||||||
return 0;
|
return 0;
|
||||||
if(src->type == BL_PC && pc_isdead((struct map_session_data *)src)) //術者?がPCですでに死んでいたら何もしない
|
if(src->type == BL_PC && pc_isdead((struct map_session_data *)src)) //術者?がPCですでに死んでいたら何もしない
|
||||||
return 0;
|
return 0;
|
||||||
if(dsrc->type == BL_PC && pc_isdead((struct map_session_data *)dsrc)) //術者?がPCですでに死んでいたら何もしない
|
if(src != dsrc && dsrc->type == BL_PC && pc_isdead((struct map_session_data *)dsrc)) //術者?がPCですでに死んでいたら何もしない
|
||||||
return 0;
|
return 0;
|
||||||
if(bl->type == BL_PC && pc_isdead((struct map_session_data *)bl)) //?象がPCですでに死んでいたら何もしない
|
if(bl->type == BL_PC && pc_isdead((struct map_session_data *)bl)) //?象がPCですでに死んでいたら何もしない
|
||||||
return 0;
|
return 0;
|
||||||
@ -2751,7 +2751,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
|
|||||||
struct mob_data *md=NULL;
|
struct mob_data *md=NULL;
|
||||||
struct mob_data *dstmd=NULL;
|
struct mob_data *dstmd=NULL;
|
||||||
int i,abra_skillid=0,abra_skilllv;
|
int i,abra_skillid=0,abra_skilllv;
|
||||||
int sc_def_vit,sc_def_mdef,strip_time,strip_per;
|
int sc_def_vit,sc_def_mdef;
|
||||||
int sc_dex,sc_luk;
|
int sc_dex,sc_luk;
|
||||||
//クラスチェンジ用ボスモンスタ?ID
|
//クラスチェンジ用ボスモンスタ?ID
|
||||||
int changeclass[]={1038,1039,1046,1059,1086,1087,1112,1115
|
int changeclass[]={1038,1039,1046,1059,1086,1087,1112,1115
|
||||||
@ -3777,10 +3777,12 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
|
|||||||
case RG_STRIPSHIELD: /* ストリップシールド */
|
case RG_STRIPSHIELD: /* ストリップシールド */
|
||||||
case RG_STRIPARMOR: /* ストリップアーマー */
|
case RG_STRIPARMOR: /* ストリップアーマー */
|
||||||
case RG_STRIPHELM: /* ストリップヘルム */
|
case RG_STRIPHELM: /* ストリップヘルム */
|
||||||
case ST_FULLSTRIP: // Celest
|
|
||||||
{
|
{
|
||||||
struct status_change *tsc_data = status_get_sc_data(bl);
|
struct status_change *tsc_data;
|
||||||
int scid, cp_scid = 0, equip, strip_fix, strip_num = 0;
|
int strip_time, strip_per, strip_fix;
|
||||||
|
int scid, cp_scid = 0, equip;
|
||||||
|
|
||||||
|
tsc_data = status_get_sc_data(bl);
|
||||||
scid = SkillStatusChangeTable[skillid];
|
scid = SkillStatusChangeTable[skillid];
|
||||||
switch (skillid) {
|
switch (skillid) {
|
||||||
case RG_STRIPWEAPON:
|
case RG_STRIPWEAPON:
|
||||||
@ -3799,10 +3801,6 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
|
|||||||
equip = EQP_HELM;
|
equip = EQP_HELM;
|
||||||
cp_scid = SC_CP_HELM;
|
cp_scid = SC_CP_HELM;
|
||||||
break;
|
break;
|
||||||
case ST_FULLSTRIP:
|
|
||||||
equip = EQP_WEAPON | EQP_SHIELD | EQP_ARMOR | EQP_HELM;
|
|
||||||
strip_num = 3;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
map_freeblock_unlock();
|
map_freeblock_unlock();
|
||||||
return 1;
|
return 1;
|
||||||
@ -3824,7 +3822,6 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
|
|||||||
for (i=0;i<MAX_INVENTORY;i++) {
|
for (i=0;i<MAX_INVENTORY;i++) {
|
||||||
if (dstsd->status.inventory[i].equip && (dstsd->status.inventory[i].equip & equip)){
|
if (dstsd->status.inventory[i].equip && (dstsd->status.inventory[i].equip & equip)){
|
||||||
pc_unequipitem(dstsd,i,3);
|
pc_unequipitem(dstsd,i,3);
|
||||||
if ((--strip_num) <= 0)
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3836,6 +3833,43 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
|
|||||||
status_change_start(bl,scid,skilllv,0,0,0,strip_time,0 );
|
status_change_start(bl,scid,skilllv,0,0,0,strip_time,0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ST_FULLSTRIP: // Celest
|
||||||
|
{
|
||||||
|
struct status_change *tsc_data;
|
||||||
|
int i, j, strip_time, strip_per, strip_fix;
|
||||||
|
int equip[4] = { EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HELM };
|
||||||
|
int scid[4] = { SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, SC_STRIPHELM };
|
||||||
|
int cp_scid[4] = { SC_CP_WEAPON, SC_CP_SHIELD, SC_CP_ARMOR, SC_CP_HELM };
|
||||||
|
|
||||||
|
tsc_data = status_get_sc_data(bl);
|
||||||
|
strip_fix = status_get_dex(src) - status_get_dex(bl);
|
||||||
|
if(strip_fix < 0)
|
||||||
|
strip_fix = 0;
|
||||||
|
strip_per = 5+2*skilllv+strip_fix/5;
|
||||||
|
if (rand()%100 >= strip_per)
|
||||||
|
break;
|
||||||
|
strip_time = skill_get_time(skillid,skilllv)+strip_fix/2;
|
||||||
|
|
||||||
|
for (i=0; i<4; i++) {
|
||||||
|
if (dstsd) {
|
||||||
|
if (tsc_data && (tsc_data[scid[i]].timer != -1 || tsc_data[cp_scid[i]].timer != -1))
|
||||||
|
continue;
|
||||||
|
if (dstsd->unstripable_equip & equip[i])
|
||||||
|
continue;
|
||||||
|
for (j=0; j<MAX_INVENTORY; j++) {
|
||||||
|
if (dstsd->status.inventory[j].equip && (dstsd->status.inventory[j].equip & equip[i])){
|
||||||
|
pc_unequipitem(dstsd,j,3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (j == MAX_INVENTORY)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
status_change_start(bl,scid[i],skilllv,0,0,0,strip_time,0 );
|
||||||
|
}
|
||||||
|
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* PotionPitcher */
|
/* PotionPitcher */
|
||||||
case AM_POTIONPITCHER: /* ポ?ションピッチャ? */
|
case AM_POTIONPITCHER: /* ポ?ションピッチャ? */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user