?? skill.cpp
字號:
//PutCompressImageApart( sx, sy+gy, g, 0,0, 640,480, n->delay );
if( n->delay > 31 ) PutCompressedImage( x, y, sp );
else PutCompressedImageFX( x, y, sp, n->delay, 1 );
PutCompressImageApart( sx, sy+gy, g, 0, 0, ex, SCREEN_HEIGHT, n->delay );
}
void DeleteSkillGauge( LPSKILLGAUGE tt )
{
LPSKILLGAUGE t = g_SkillGauge;
while( t != NULL )
{
if( t == tt )
{
if( t == g_SkillGauge )
{
t = g_SkillGauge->next;
MemFree( g_SkillGauge );
g_SkillGauge = t;
if( t != NULL ) g_SkillGauge->prev = NULL;
return;
}
else
{
if ( t->prev != NULL )
t->prev->next = t->next;
if( t->next != NULL )
t->next->prev = t->prev;
MemFree( t );
return;
}
}
t = t->next;
}
}
LPSKILLGAUGE FindSkillGauge( int type )
{
LPSKILLGAUGE t;
t = g_SkillGauge;
while( t != NULL )
{
if( t->type == type) return t;
t = t->next;
}
return t;
}
// 絹蠢 type俊 措竅咯 貿瀾 齲免登擱 Gage甫 弊府霸等促.
// 弊府絆 促矯 弊 type撈 齲免登擱
LPSKILLGAUGE AddSkillGauge( int skillno, int x, int y, int min )
{
LPSKILLGAUGE temp = NULL, t;
int type;
switch( skillno )
{
case 26 ://Mining
case 32 ://Cutting
case 36 ://Digging
type = SKILLGAUGE_RESTTIME;
break;
case 24 ://Havest
type = SKILLGAUGE_HAVEST;
break;
case 75 : // 煉訪檔
type = SKILLGAUGE_TAME;
break;
case 21 ://Reclaim
type = SKILLGAUGE_RECLAIM;
break;
case 22 ://Sow
type = SKILLGAUGE_SOWING;
break;
//1018 zhh
case 28:
case 30:
type = SKILLGAUGE_RESTTIME;
// type = SKILLGAUGE_FISHING;
break;
default : return NULL;
}
t = FindSkillGauge( type );
if( t )
{ if( min == 999 ) // 弊成 絕局林技夸...
{
t->min = min;
return NULL;
}
else // 搬苞藹撈 唱吭欄聰 焊咯林技夸..
{
t->delay = 75;
t->min = min;
// t->max = min;
t->toggle = true;
//1018 zhh
t->x = x;
t->y = y;
return NULL;
}
}
MemAlloc( temp, sizeof( SKILLGAUGE ));
temp->skillno = skillno;
temp->type = type;
temp->delay = 0;
temp->x = x;
temp->y = y;
temp->off = 0;
temp->min = min;
temp->max = 100;
temp->toggle = false;//true;
temp->prev = NULL;
temp->next = NULL;
if( g_SkillGauge == NULL )
{
g_SkillGauge = temp;
}
else
{
t = g_SkillGauge;
g_SkillGauge = temp;
g_SkillGauge->next = t;
t->prev = g_SkillGauge;
}
return g_SkillGauge;
}
void OutputSkillGauge( void )
{
LPSKILLGAUGE t, temp;
LPORDERTABLE o;
t = g_SkillGauge;
while( t != NULL )
{
//t->off ++;
if( t->toggle == false ) // 劉啊....
{
t->delay +=3;
if( t->delay > 400 ) t->delay = 400;
}
else t->delay --;
// if( t->max > t->min ) t->min ++;
// 皚家竅芭唱 .. 呈公腹撈 矯埃撈 儒弗巴撈擱..( 措面 400 frame )
if( t->delay <= 0 || t->min == 999 ) { temp = t->next; DeleteSkillGauge( t ); t = temp; continue; }
if( BoxAndDotCrash( Mapx, Mapy, GAME_SCREEN_XSIZE, GAME_SCREEN_YSIZE, t->x, t->y ) )
{
o = &g_OrderInfo.order[ g_OrderInfo.count ];
o->wType = SPRITETYPE_SKILLGAUGE;
o->x = t->x;
o->y = t->y;
o->height = t->off;
o->offset = t->y;
o->lpvData = (LPVOID)t;
o->show = 1;
o->sort = 1;
g_OrderInfo.count++;
}
t = t->next;
}
}
// 疇啊促 扁賤 備泅吝 付快膠諒釬啊 裹困甫 哈絹唱擱 撈甫 煉瀝秦霖促.
void AdjustSkillMouseCursor( int *x, int *y )
{
int sx, sy, ex, ey;
return;
// if( SkillMouseDontMoveFlag == true )
{
// sx = SkillDontMoveSx - Mapx;
// sy = SkillDontMoveSy - Mapy;
// ex = sx + SkillDontMoveXl - 2;
// ey = sy + SkillDontMoveYl - 2;
// A tale that wasn't right -- Hallowin
if( BoxAndDotCrash( sx, sy, ex-sx, ey-sy, *x, *y ))
{
}
else
{
if( *x < sx+3 ) *x = sx;
if( *y < sy+3 ) *y = sy;
if( *x > ex ) *x = ex;
if( *y > ey ) *y = ey;
}
}
}
void SendSkillGauge( int x, int y, int skillno )
{
t_packet p;
p.h.header.type = CMD_SKILL_GAUGE;
{
p.u.client_skill_gauge.skillno = skillno;
p.u.client_skill_gauge.x = x;
p.u.client_skill_gauge.y = y;
}
p.h.header.size = sizeof( t_client_skill_gauge );
QueuePacket( &p, 1 );
}
void RecvSkillGauge( t_server_skill_gauge *p )
{
AddSkillGauge( p->skillno, p->x, p->y, p->min);
}
//1024 zhh
//1004 zhh //絹恫 酒撈袍闌 厘饅竅瘤 臼疽綽瘤 釬矯茄促
int IDontEquitSkillTool(int Skillno) //void RecvSkillResultFail( t_server_skill_result_fail *p )俊輯 角菩茄 撈蠟甫 弊貳檔 汗葷
{
//1024 zhh
if(SkillTable[ Skillno].Tool!=0)
AddCurrentStatusMessage( 255,255 ,0, lan->OutputMessage(2,SkillTable[Skillno].Tool) );
return(0);
}
//1004 zhh
int AmIEquitSkillTool(int Skillno) //selectskill俊輯 瘤陛 扁賤闌 靜扁困茄 酒撈袍闌 厘饅竅絆 樂綽瘤 眉農竅綽 風憑.
{
switch(SkillTable[ Skillno].Tool)
{
case -1: break;
case 0: break;
default:
{//咯扁俊綽 SkillTable[ Skillno].Tool撈 厘饅茄 公扁狼 輛幅客 嘎欄擱
int tool;
tool=EquipItemAttr[WT_WEAPON].item_no;
CItem_Tool *weapon = (CItem_Tool *)ItemUnit( tool/1000 , tool%1000 );
int type=0;
if(weapon!=NULL)
type=weapon->GetItemKind();
if(weapon!=NULL && type == SkillTable[ Skillno].Tool )//檔備啊 鞘夸竅絆 瘤陛 厘饅竅絆 樂欄擱
{
return(2);
}
else
{
IDontEquitSkillTool(Skillno); //絹恫 酒撈袍闌 厘饅竅瘤 臼疽綽瘤 釬矯茄促
return(0);//酒撈袍闌 力措肺 厘饅竅瘤 臼疽促.
}
}
break;
}
return(1);
}
//1013 zhh
#define HP_GAUGE_DOT_MAX 40
extern int PutGrowingGauge( int x, int y);
//1013 zhh
int PutGrowingGauge( int x, int y)
{
int gauge;
switch(CursorCheckedItem->Anitype)
{
case ITEMANIMATION_FARM0: gauge = 4; break;
case ITEMANIMATION_FARM1: gauge = 8; break;
case ITEMANIMATION_FARM2: gauge = 12; break;
case ITEMANIMATION_FARM3: gauge = 16; break;
case ITEMANIMATION_FARM4: gauge = 20; break;
case ITEMANIMATION_FARM5: gauge = 24; break;
case ITEMANIMATION_FARM6: gauge = 28; break;
case ITEMANIMATION_FARM7: gauge = 32; break;
default: gauge = 0; break;
}
WORD rgb;
// rgb = RGB16( 0, 0, 255 ); // 俊呈瘤啊 菜瞞 樂闌錠,
rgb = RGB16( 267 - (gauge *233) / 30 , 0 , (gauge *233) / 30 );
if(CursorCheckedItem->Anitype==ITEMANIMATION_FARM7)
rgb = RGB16( 0 , 255 , 0 ); // 俊呈瘤啊 菜瞞 樂闌錠,
for( int count=0; count<gauge; count+=2 )
for( int a=0; a<2; a++ )
for( int b=0; b<2; b++ )
{
//1013 zhh
PutDot( x+a+count-gauge/2-4, y+b, rgb );
}
return 1;
}
/* itemjoin 俊輯
Item闌 付甸扁 困秦
版氰摹 拌魂..
扁賤狼 版氰摹 盎腳 規過........
skill_exp[ 31] <- skillmain Table/ 曼煉..
ch->skill_exp[ MotherSkillType ];
MotherSkillExp;
弊 扁賤俊 措茄
版氰摹狼 輛幅 31登絹 樂絆 撈綽 ( MotherSkillType ) 曼煉茄促.
if( SkillTbl[ ].
(唱狼 skill Lv - 彌家 鞘夸 Lv)
己傍啦 = ------------------------------
(彌措 鞘夸 Lv - 彌家 鞘夸 Lv)
(唱狼 skill Lv
ch->skill_exp[ MotherSkillType ];
base = skillTbl[skillno].Ability_max - skillTbl[skillno].Ability_min;
ch->skill_exp[ skillTMotherSkillType ];
if( base )
{
hitrate = skillTbl[skillTbl[skillno].Ability_min
}
if( 己傍啦 <= 0 ) 角菩.
版氰摹 劉啊啦 ( 扁霖 )
ch->skillexp[ SkillTbl[skillno].MotherSkillType ] += ( 100 - 己傍伏 ) * SkillTbl[].Ability_Fix;
ch->skill[
1. 竄鑒 己傍 角菩 備盒.....
-> Table俊 狼茄 瀝秦柳 版氰摹甫 掘綽促.
-> 己傍啦籃 0 - 100 葷撈狼 Lev闌 曼煉等促.
2. Item包訪 等 扁賤俊 措茄 版氰摹 魂瀝扁霖...
己傍啦
鞘夸扁賤 skill1, skill2, skill3 阿阿撈 0撈 酒囪 薦摹甫 啊瘤絆 樂欄擱 鞘夸扁賤撈促.
skill2, skill3籃 竄鑒 鞘夸煉扒撈 等促. skill2_min, skill3_min父撈 曼煉等促.
( item_join[].skill1_max - item_join[].skill1_min )
if( item_join[].skill2 && item_join[].skill2_min >= ch->skill[ skillno] )
if( item_join[].skill3 && item_join[].skill2_min >= ch->skill[ skillno] )
*/
//010205 lsw
int skill_fail(int skill)
{
if(skill <= 341 && skill >=321)//1瞞 流訣老 版快
{
switch( rand()%2)
{
case 0 : AddCurrentStatusMessage( 255,255 ,0, lan->OutputMessage(2,406)); break;
default: AddCurrentStatusMessage( 255,255 ,0, lan->OutputMessage(2,407)); break;
}
}
else if(skill <= 353 && skill >=343)//2瞞 流訣老 版快
{
switch( rand()%2)
{
case 0 : AddCurrentStatusMessage( 255,255 ,0, lan->OutputMessage(2,408)); break;
default: AddCurrentStatusMessage( 255,255 ,0, lan->OutputMessage(2,409)); break;
}
}
else
{
AddCurrentStatusMessage( 255,255 ,0, lan->OutputMessage(2,410));//叼棄飄
}
return 0;
}
void CheckDeleteSkill()
{
if( SCharacterData.SkillId[46] ) // 堪禍 膠懦闌 硅奎促擱...
{
CallServer( CMD_CHECK_SKILL );
SCharacterData.SkillId[46] = 0;
}
}
void CMagic::Explain(const int iX, const int iY, const BOOL bSpell )
{
SetHangulAlign(TA_LEFT);
const int iWidth = TXT_BG_SHORT_WIDTH;
int iCount = 0;
int iReultLineCount = 0;
int iBlankGab = 0;
int iReultBlankSize = 0;
const int iLineGab = TxtOut.GetLineGab();
const int iBlankGabSize = TxtOut.GetBlankGabSize();
if( GetSysInfo( SI_GAME_MAKE_MODE ) ) Hprint2( iX, iY-15, g_DestBackBuf, "%d", GetMagicNum() );
switch(bSpell)
{
case WIZARD_SPELL:
{ //慶歹弊覆
TxtOut.Init(COLOR_BLUE,TXT_BG_SHORT_WIDTH);
TxtOut.PutTextHeaderBGImg(iX,iY+iBlankGab+iLineGab*iCount,iWidth);
Hcolor( FONT_COLOR_BLIGHT_BLUE );
iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"<%s>", GetName() );
iCount += iReultLineCount;
Hcolor( FONT_COLOR_NUMBER );
iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"Mana : %3d", g_lpMT[GetMagicNum()].exhaust_MP);
Hcolor( FONT_COLOR_SPECIAL );
Hprint( iX+1,iY+iBlankGab+iLineGab*iCount, g_DestBackBuf, "Mana :");
iCount += iReultLineCount;
Hcolor( FONT_COLOR_NUMBER );
iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"Mp : %3d", g_lpMT[GetMagicNum()].exhaust_WS);
Hcolor( FONT_COLOR_SPECIAL );
Hprint( iX+1,iY+iBlankGab+iLineGab*iCount, g_DestBackBuf, "Mp :");
iCount += iReultLineCount;
}break;
case PRIEST_SPELL:
{ //慶歹弊覆
TxtOut.Init(COLOR_GREEN,TXT_BG_SHORT_WIDTH);
TxtOut.PutTextHeaderBGImg(iX,iY+iBlankGab+iLineGab*iCount,iWidth);
Hcolor( FONT_COLOR_BLIGHT_GREEN );
iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"<%s>", GetName() );
iCount += iReultLineCount;
Hcolor( FONT_COLOR_NUMBER );
iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"Divine : %3d", g_lpMT[GetMagicNum()+150].exhaust_MP);
Hcolor( FONT_COLOR_SPECIAL );
Hprint( iX+1,iY+iBlankGab+iLineGab*iCount, g_DestBackBuf, "Divine :");
iCount += iReultLineCount;
}break;
}
Hcolor( FONT_COLOR_WHITE );
iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,GetExplain());//汲疙鞏
iCount += iReultLineCount;
//部府弊覆
TxtOut.PutTextTailBGImg(iX,iY+iBlankGab+iLineGab*iCount,iWidth);
}
void CSkill::Explain(const int iX, const int iY)//020815 lsw
{
SetHangulAlign(TA_LEFT);
const int iWidth = TXT_BG_SHORT_WIDTH;
int iCount = 0;
int iReultLineCount = 0;
int iBlankGab = 0;
int iReultBlankSize = 0;
const int iLineGab = TxtOut.GetLineGab();
const int iBlankGabSize = TxtOut.GetBlankGabSize();
if( GetSysInfo( SI_GAME_MAKE_MODE ) ) Hprint2( iX, iY-20, g_DestBackBuf, "%d, %d, %d", num, inclusive, series );
//慶歹弊覆
TxtOut.Init(COLOR_BLACK,TXT_BG_SHORT_WIDTH);
TxtOut.PutTextHeaderBGImg(iX,iY+iBlankGab+iLineGab*iCount,iWidth);
Hcolor( FONT_COLOR_SKILL );
iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,0,"<%s>",han_name);
iCount += iReultLineCount;
if( targettype !=SKILLTARGETTYPE_2ND_GM
&& targettype !=SKILLTARGETTYPE_SKILL_MASTER)//021122 lsw
{
Hcolor( FONT_COLOR_NUMBER );
iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,0,"Ability : %3d %4d",SCharacterData.nJobSkill[inclusive].skillexp/10000, SCharacterData.nJobSkill[inclusive].skillexp%10000 );//020815 lsw
iCount+=iReultLineCount;//020815 lsw
Hcolor( FONT_COLOR_SPECIAL );
Hprint2( iX, iY+iBlankGab+iLineGab*iCount, g_DestBackBuf, "Ability :
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -