?? npc_transmigration.c
字號:
}
break;
case CHAR_WINDOWTYPE_PETTRANS_MAIN1: //確定寵物 確定/取消
if(select==WINDOW_BUTTONTYPE_YES){
NPC_PetTransMan_selectWindow( meindex, talkerindex, 4, Pet_Select);
}else {
NPC_PetTransMan_selectWindow( meindex, talkerindex, 5, -1);
}
break;
case CHAR_WINDOWTYPE_PETTRANS_END: //寵物轉生結束結束
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
break;
#endif
}
}
//************************************************************
// 反元戶及贏 鎘卞伐□皿今六月
//************************************************************
BOOL NPC_TransmigratiomWarp(int meindex, int toindex, char *buf)
{
char buf2[512];
char buf3[128];
char buf4[64];
int floor=0 , x = 0, y = 0;
int i = 1;
int ret;
//請褥翹仍午及橢瘀毛 仁
while(getStringFromIndexWithDelim( buf,",",i,buf2,sizeof( buf2))
!= FALSE)
{
i++;
if(strstr(buf2,"Warp") != NULL)
{
getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3));
//白夫失
ret = getStringFromIndexWithDelim( buf3,".",1 ,buf4 ,sizeof( buf4));
if(ret ==FALSE) return FALSE;
floor = atoi(buf4);
// 甄
ret = getStringFromIndexWithDelim( buf3,".",2 ,buf4 ,sizeof( buf4));
if(ret ==FALSE) return FALSE;
x = atoi(buf4);
// 甄
ret = getStringFromIndexWithDelim( buf3,".",3 ,buf4 ,sizeof( buf4));
if(ret ==FALSE) return FALSE;
y = atoi(buf4);
}
}
//伐□皿燮及民尼永弁
if( MAP_IsValidCoordinate( floor, x, y )== FALSE ){
return FALSE;
}
//ttom
/*
{
int tenseiNo;
tenseiNo=CHAR_getInt( toindex, CHAR_TRANSMIGRATION);
CHAR_setInt( toindex,CHAR_SKILLUPPOINT,tenseiNo*10);
print("\n the set the skillpoint %d",tenseiNo*10);
CHAR_sendStatusString( toindex , "P");
}
*/
//ttom
//伐□皿今六月
CHAR_warpToSpecificPoint(toindex, floor, x, y);
return TRUE;
}
//************************************************************
//*請 鰾及民尼永弁
//
// 曰襖“
// ㄟ“扔丞幼伙
// ㄠ“穴伉瓜旦
// ㄡ“斥乓斥乓
// ㄢ“市伙正□瓜
// ≡ㄠ“巨仿□
//************************************************************
int NPC_StartpointCheck(int meindex,int talker)
{
int point;
int shift = 0;
point = CHAR_getInt( talker, CHAR_SAVEPOINT);
for(shift = 0; shift < 4 ;shift++){
if( (point & ( 1<< shift)) == ( 1<< shift)) {
return shift;
}
}
return -1;
}
//********************************************************
//
// 鱉戲橢瘀毛 兇仄化中月井升丹井及民尼永弁
//
// 曰襖
// 岳 “鱉戲莢醒
// 撩 “-1
//
//********************************************************
static int NPC_TransmigrationCheck(int meindex, int talker)
{
// 鱉戲橢瘀
//伊矛伙互ㄧㄟ動曉
//ㄣ勾及簞嶺奶矛件玄互蔽歹勻化中月仇午
// 蔽奶矛件玄毛仇卅允[(仇木反中日氏井卅
int i,j,k=0;
int ch_no[4] = {39,40,42,46};
int petindex;
int num;
// int petid[4] = {1, 2, 3, 4}; //矢永玄及 毛隙爛
int petid[4] = {693, 694, 695, 696}; //矢永玄及 毛隙爛
// int petidfinal[4] = {11, 12, 13, 14}; //矢永玄及 毛隙爛
int petidfinal[4] = {693, 694, 695, 696}; //矢永玄及 毛隙爛
// Robin 2001/03/05
//CHAR_setWorkInt(talker,CHAR_TENSEICHECKED,FALSE);
//手仄ㄤ莢動曉卅日鱉戲匹五卅中[
#ifdef _TRANS_6
if(CHAR_getInt( talker, CHAR_TRANSMIGRATION) >= 6){
return 6;
}
#else
if(CHAR_getInt( talker, CHAR_TRANSMIGRATION) >= 5){
return 5;
}
#endif
//伊矛伙互ㄧㄟ動曉
if(CHAR_getInt( talker, CHAR_LV) < 80) return -1;
//奶矛件玄及白仿弘民尼永弁
#ifdef _TRANS_6
if(CHAR_getInt( talker, CHAR_TRANSMIGRATION) < 6){
#else
if(CHAR_getInt( talker, CHAR_TRANSMIGRATION) < 5){
#endif
for(i = 0; i < 4 ;i++)
if(NPC_EventCheckFlg( talker, ch_no[i] ) == FALSE) return -1;
}
num = CHAR_getInt(talker, CHAR_TRANSMIGRATION);
if(num < 4 ){
//隙爛矢永玄毛手勻化中月井矢永玄民尼永弁
for(i=0 ; i < CHAR_MAXPETHAVE ; i++){
petindex = CHAR_getCharPet( talker, i);
if( petindex == -1 ) continue;
//ttom
//print("petid=%d ",CHAR_getInt( petindex, CHAR_PETID));
//矢永玄及 反域踝井"
if(CHAR_getInt( petindex, CHAR_PETID) != petid[num]) continue;
//矢永玄及伊矛伙反橢瘀毛 兇仄化中月井
// if(CHAR_getInt( petindex, CHAR_LV) < PETLEVEL) continue;
//仇仇引匹五兇日公及矢永玄反 午 蠅
break;
}
if(i == CHAR_MAXPETHAVE) return -1;
}else
#ifdef _TRANS_6
if( num == 4 )
#endif
{
for(j = 0; j < 4 ;j++){
//詭莢 及樺寧反ㄣ 毛民尼永弁
for(i=0 ; i < CHAR_MAXPETHAVE ; i++){
petindex = CHAR_getCharPet( talker, i);
if( petindex == -1 ) continue;
// print("petid=%d ",CHAR_getInt( petindex, CHAR_PETID));
//矢永玄及 反域踝井"
if(CHAR_getInt( petindex, CHAR_PETID) != petidfinal[j]) continue;
k++;
break;
}
}
if(k < 4) return -1;
}
#ifdef _TRANS_6
else{
/*int lasttalkelder = 2;//烏力
if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 1 )//瑪麗娜絲
lasttalkelder = 112;//凱比
else if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 2 )//加加
lasttalkelder = 102;//克克爾
else if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 3 )//卡魯它那
lasttalkelder = 34;//威伯
print("\npetid:%d",lasttalkelder);*/
//找看看有沒有帶2轉出生寵物
for(i=0 ; i < CHAR_MAXPETHAVE ; i++){
petindex = CHAR_getCharPet( talker, i);
if( petindex == -1 ) continue;
if( CHAR_getInt( petindex, CHAR_TRANSMIGRATION) == 2
&& ( CHAR_getInt( petindex, CHAR_PETID) == 2
|| CHAR_getInt( petindex, CHAR_PETID) == 112
|| CHAR_getInt( petindex, CHAR_PETID) == 102
|| CHAR_getInt( petindex, CHAR_PETID) == 34 ) ) break;
//if(CHAR_getInt( petindex, CHAR_TRANSMIGRATION) != 2 || CHAR_getInt( petindex, CHAR_PETID) != lasttalkelder ) continue;
}
if(i == CHAR_MAXPETHAVE){
CHAR_talkToCli( talker,-1,"你沒有帶2轉的出生寵哦!",CHAR_COLORWHITE);
return -1;
}
if(NPC_EventCheckFlg( talker, 63) == FALSE){ print("\nerr63");return -1;}
if(NPC_EventCheckFlg( talker, 136) == FALSE){ print("\nerr136");return -1;}
if(NPC_EventCheckFlg( talker, 175) == FALSE){ print("\nerr175");return -1;}
if(NPC_EventCheckFlg( talker, 176) == FALSE){ print("\nerr176");return -1;}
//檢查有無15個魔界之門碎片
j=0;
for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){
int itemindex;
itemindex = CHAR_getItemIndex(talker,i);
if( ITEM_CHECKINDEX(itemindex) == FALSE )continue;
if( ITEM_getInt( itemindex, ITEM_ID ) == 20613 ) {
++j;
}
}
if( j < 15 ){
CHAR_talkToCli( talker,-1,"你沒有帶15個魔界之門的碎片哦!",CHAR_COLORWHITE);
print("\nitem:%d",j);
return -1;
}
if( CHAR_getInt(talker, CHAR_HEROCNT) <= 0 ){
CHAR_talkToCli( talker,-1,"你沒有執行過精靈召喚的任務!",CHAR_COLORWHITE);
return -1;
}
}
#endif
// Robin 2001/03/05
//CHAR_setWorkInt(talker,CHAR_TENSEICHECKED,TRUE);
// 蔽奶矛件玄民尼永弁
return CHAR_getInt(talker, CHAR_TRANSMIGRATION);
}
BOOL NPC_TransmigrationMain(int meindex, int toindex, char *buf)
{
int i = 1;
char buf2[128];
char buf3[64];
char buf4[32];
int item = 10;
int pet = 5;
int present = 0;
int ten_no;
int work[10];
int fd = getfdFromCharaIndex( toindex );
#ifdef _ADD_POOL_ITEM // WON ADD 增加可寄放的道具
int tran_pool_item[5] = { 4, 4, 4, 4, 4 }; // 增加的道具寄放數
int tran_pool_pet[5] = { 2, 2, 2, 2, 2}; // 增加的寵物寄放數
int j,item_sum=0, pet_sum=0;
for(j=0; j<5 ;j++){
item_sum += tran_pool_item[j] ;
pet_sum += tran_pool_pet[j];
}
item_sum += 10; // 限制最大的寄道具數
pet_sum += 5; // 限制最大的寄寵數
#endif
while(getStringFromIndexWithDelim( buf,",",i,buf2,sizeof( buf2))!= FALSE){
i++;
if(strstr(buf2,"Item") != NULL){
getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3));
item = atoi(buf3);
}else if(strstr(buf2,"Pet") != NULL){
getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3));
pet = atoi(buf3);
}else if(strstr(buf2,"Present") != NULL){
ten_no = CHAR_getInt(toindex,CHAR_TRANSMIGRATION);
ten_no++;
getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3));
getStringFromIndexWithDelim( buf3,".",ten_no ,buf4 ,sizeof( buf4));
present = atoi(buf4);
}
}
CHAR_setInt(toindex ,CHAR_TRANSMIGRATION,
CHAR_getInt(toindex,CHAR_TRANSMIGRATION) + 1);
#ifdef _TRANS_6
if(CHAR_getInt( toindex, CHAR_TRANSMIGRATION) > 6)
CHAR_setInt(toindex ,CHAR_TRANSMIGRATION,6);
if( CHAR_getInt(toindex,CHAR_TRANSMIGRATION) == 6 )//6轉後所送的寵
present = 2546;
#else
if(CHAR_getInt( toindex, CHAR_TRANSMIGRATION) > 5)
CHAR_setInt(toindex ,CHAR_TRANSMIGRATION,5);
#endif
NPC_TransmigrationStatus(meindex, toindex, work);
NPC_TransmigrationFlg_CLS(meindex, toindex);
CHAR_setInt(toindex, CHAR_LV ,1);
CHAR_setMaxExp( toindex, 0);
#ifdef _TRANS_6
//刪除魔界之門碎片
for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){
int itemindex;
itemindex = CHAR_getItemIndex(toindex,i);
if( ITEM_CHECKINDEX(itemindex) == FALSE )continue;
if( ITEM_getInt( itemindex, ITEM_ID ) == 20613 ) {
CHAR_DelItem( toindex, i);
}
}
#endif
if(NPC_TransmigrationDelPet(meindex, toindex) == FALSE) return FALSE;
if( NPC_TransmigrationAddPet( meindex, toindex, present)== FALSE) return FALSE;
// Robin 0718
{
int tenseiNo;
tenseiNo=CHAR_getInt( toindex, CHAR_TRANSMIGRATION);
CHAR_setInt( toindex,CHAR_SKILLUPPOINT,tenseiNo*10);
CHAR_Skillupsend( toindex );
//CHAR_setInt( toindex,CHAR_LEARNRIDE, 0);
CHAR_setInt( toindex,CHAR_RIDEPET, -1 );
CHAR_setInt( toindex , CHAR_BASEIMAGENUMBER , CHAR_getInt( toindex , CHAR_BASEBASEIMAGENUMBER) );
//CHAR_sendStatusString( toindex , "P");
}
lssproto_WO_send(fd ,0 );
// 鱉戲夫弘毛潸月
LogTensei(
CHAR_getChar( toindex, CHAR_NAME ), /* 平乓仿 */
CHAR_getChar( toindex, CHAR_CDKEY),
"Tensei",
work[0],
CHAR_getInt(toindex,CHAR_TRANSMIGRATION),
work[1],
NPC_StartpointCheck( meindex, toindex),
item, pet,
work[2],work[3],work[4],work[5],
work[6],work[7],work[8],work[9]
);
//凳蕙
CHAR_complianceParameter( toindex );
//HP毛莢汊今六化丐仆月
CHAR_setInt(toindex, CHAR_HP, CHAR_getWorkInt(toindex, CHAR_WORKMAXHP) );
// 燮毛請褥嘩及翹贏鎘卞 允[
CHAR_setInt(toindex,CHAR_LASTTALKELDER, NPC_StartpointCheck(meindex,toindex));
/* 皿伊奶乩□樹 毛霜月 */
CHAR_sendStatusString( toindex, "P" );
/*
CHAR_send_P_StatusString( toindex,
CHAR_P_STRING_LV|CHAR_P_STRING_EXP|
CHAR_P_STRING_NEXTEXP|
CHAR_P_STRING_HP|CHAR_P_STRING_MAXHP|
CHAR_P_STRING_MP|CHAR_P_STRING_MAXMP|
CHAR_P_STRING_ATK|CHAR_P_STRING_DEF|
CHAR_P_STRING_QUICK|CHAR_P_STRING_CHARM|
CHAR_P_STRING_LUCK|CHAR_P_STRING_EARTH|
CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE|
CHAR_P_STRING_WIND|CHAR_P_STRING_VITAL|
CHAR_P_STRING_STR|CHAR_P_STRING_DEX|
CHAR_P_STRING_TOUGH|
CHAR_P_STRING_DUELPOINT //ttom
);
*/
return TRUE;
}
static int questTbl[20] = {
1,2,4,5,8,12,14,15,16,17,19,22,27,30,31,34,35,38,45,47
};
//*******************************************************
//弁巨旦玄及醒毛醒尹月
//*******************************************************
int NPC_TransmigrationQuestCheck(int toindex)
{
int i;
int num = 0;
for(i = 0 ; i < 20; i++){
if(NPC_EventCheckFlg(toindex ,questTbl[i]) == TRUE){
num++;
}
}
return num;
}
//*******************************************************
// 旦 □正旦毛煌遙允月
//*******************************************************
int NPC_TransCalculation(int toindex, int para)
{
float quest, level, num, tmp;
float ans;
int equ;
equ = CHAR_getInt(toindex, CHAR_TRANSEQUATION);
//16bit 匹銀迕
quest = (float)(( equ >> 16 ) & 0xFFFF);
level = (float)(( equ >> 0 ) & 0xFFFF);
//tttom
//print("\n this test equ=%d,quest=%f,level=%f",equ,quest,level);
//鱉戲莢醒
num = CHAR_getInt(toindex, CHAR_TRANSMIGRATION); // 前面已加1,故0轉1時為1
tmp = (float)para / 100;
#ifdef _TRANS_6
if (num == 6) tmp = 620; // 六轉生時舊點數不計
#endif
ans =(float)tmp/12 + (float)(quest / 4) +( (float)(level- num * 85) /4);
return (int)ans;
}
//*******************************************************
// 銓樁詭
//*******************************************************
float Rounding(float work,int num)
{
float p;
if(num <0 ) return work;
num--;
p = (float)pow(10,num);
return ( (work * p + 0.5) /p);
}
//*******************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -