?? char.c
字號:
}
for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ){ //檢查攜帶道具
itemindex = CHAR_getItemIndex( charaindex , i );
if( !ITEM_CHECKINDEX( itemindex)) continue;
ITEM_reChangeItemName( itemindex);
#ifdef _ITEM_PILENUMS
ITEM_reChangeItemToPile( itemindex);
#endif
#ifdef _ANGEL_SUMMON
if( ITEM_getInt( itemindex, ITEM_ID) == ANGELITEM
|| ITEM_getInt( itemindex, ITEM_ID) == HEROITEM ) {
int mindex, mission;
// 檢查信物所有人是否任務中
mindex = checkIfAngelByName( ITEM_getChar( itemindex, ITEM_ANGELINFO));
mission = atoi( ITEM_getChar( itemindex, ITEM_ANGELMISSION));
if( mindex < 0 || mission != missiontable[mindex].mission ) {
CHAR_setItemIndex( charaindex, i, -1 );
ITEM_endExistItemsOne( itemindex);
CHAR_sendItemDataOne( charaindex, i);
continue;
}
}
#endif
ITEM_setItemUniCode( itemindex);
#ifdef _DEATH_FAMILY_LOGIN_CHECK // WON ADD 家族戰登入檢查
if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_WARES ||
ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_DISH ||
ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_OTHER ){
CHAR_setItemIndex( charaindex, i, -1 );
ITEM_endExistItemsOne( itemindex);
CHAR_sendItemDataOne( charaindex, i);
}
#endif
#ifdef _DEATH_CONTEND
if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_WARES ||
ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_DISH ||
ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_OTHER ){
CHAR_setItemIndex( charaindex, i, -1 );
ITEM_endExistItemsOne( itemindex);
CHAR_sendItemDataOne( charaindex, i);
}
#endif
}
//檢查寄放店道具
for( i = 0 ; i < CHAR_MAXPOOLITEMHAVE ; i++ ){
itemindex = CHAR_getPoolItemIndex( charaindex , i );
if( !ITEM_CHECKINDEX( itemindex) ) continue;
ITEM_reChangeItemName( itemindex);
#ifdef _ITEM_PILENUMS
ITEM_reChangeItemToPile( itemindex);
#endif
#ifdef _ANGEL_SUMMON
if( ITEM_getInt( itemindex, ITEM_ID) == ANGELITEM
|| ITEM_getInt( itemindex, ITEM_ID) == HEROITEM ) {
int mindex, mission;
// 檢查信物所有人是否任務中
mindex = checkIfAngelByName( ITEM_getChar( itemindex, ITEM_ANGELINFO));
mission = atoi( ITEM_getChar( itemindex, ITEM_ANGELMISSION));
if( mindex < 0 || mission != missiontable[mindex].mission ) {
CHAR_setPoolItemIndex( charaindex, i, -1 );
ITEM_endExistItemsOne( itemindex);
continue;
}
}
#endif
ITEM_setItemUniCode( itemindex);
#ifdef _DEATH_FAMILY_LOGIN_CHECK // WON ADD 家族戰登入檢查
if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_WARES ||
ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_DISH ||
ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_OTHER ){
CHAR_setPoolItemIndex( charaindex, i, -1 );
ITEM_endExistItemsOne( itemindex);
}
#endif
#ifdef _DEATH_CONTEND
if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_WARES ||
ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_DISH ||
ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_OTHER ){
CHAR_setPoolItemIndex( charaindex, i, -1 );
ITEM_endExistItemsOne( itemindex);
}
#endif
}
// WON ADD 修正道具的設定問題
if(!NPC_EventCheckFlg( charaindex,134)){
for (i = 0; i < CHAR_MAXITEMHAVE; i ++) {
itemindex = CHAR_getItemIndex(charaindex, i);
fix_item_bug(charaindex, itemindex);
}
for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++) {
itemindex = CHAR_getPoolItemIndex(charaindex, i);
fix_item_bug(charaindex, itemindex);
}
NPC_EventSetFlg(charaindex, 134);
}
Check_P_I_UniCode( charaindex);
}
void CHAR_LoginBesideSetWorkInt( int charaindex, int clifd)
{
CHAR_setWorkInt( charaindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE);
CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX1, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX2, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX3, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX4, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX5, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKTRADEMODE, CHAR_TRADE_FREE);
CHAR_setWorkInt( charaindex, CHAR_WORKFMINDEXI, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKFMCHANNEL, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKFMCHANNELQUICK, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKFMFLOOR, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKFMDP, 0);
CHAR_setWorkInt( charaindex, CHAR_WORKFMPKFLAG, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKFMSETUPFLAG, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKFMMANINDEX, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKFMCHARINDEX, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEFLAG, -1);
CHAR_setWorkInt( charaindex, CHAR_WORK_PET0_STAT, 0);
CHAR_setWorkInt( charaindex, CHAR_WORK_PET1_STAT, 0);
CHAR_setWorkInt( charaindex, CHAR_WORK_PET2_STAT, 0);
CHAR_setWorkInt( charaindex, CHAR_WORK_PET3_STAT, 0);
CHAR_setWorkInt( charaindex, CHAR_WORK_PET4_STAT, 0);
CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKEFFECT, -1);
CHAR_setWorkInt( charaindex, CHAR_WORKFD, clifd);
if( CHAR_getInt( charaindex, CHAR_SILENT) > 100000000 )
CHAR_setInt( charaindex, CHAR_SILENT, 0);
CHAR_setWorkInt( charaindex, CHAR_WORKLOGINTIME, (int)NowTime.tv_sec);
CHAR_setWorkInt( charaindex, CHAR_WORKTALKCOUNT, 0 );
CHAR_setWorkInt( charaindex, CHAR_WORKTALKTIME, (int)NowTime.tv_sec);
CHAR_setWorkInt( charaindex, CHAR_WORKPETFOLLOW, -1);
#ifdef _ITEM_ADDEXP //vincent 經驗提升
CHAR_setWorkInt(charaindex,CHAR_WORKITEM_ADDEXP, 0);
CHAR_setWorkInt(charaindex,CHAR_WORKITEM_ADDEXPTIME, 0);
#endif
#ifdef _BULL_FIXPLAYER
if( NPC_EventCheckFlg( charaindex, 131 ) != TRUE ) {
if( CHAR_getInt( charaindex, CHAR_ABULLSCORE) > 100 )
CHAR_setInt( charaindex, CHAR_ABULLSCORE, 100);
CHAR_setInt( charaindex, CHAR_ABULLTIME, 0);
NPC_EventSetFlg( charaindex, 131);
NPC_NowEndEventSetFlgCls( charaindex, 130);
}
#endif
#ifdef _STATUS_WATERWORD //水世界狀態
if( MAP_getMapFloorType( CHAR_getInt( charaindex, CHAR_FLOOR)) == 1 ){
CHAR_setWorkInt( charaindex, CHAR_WORKMAPFLOORTYPE, 1);
}else{
CHAR_setWorkInt( charaindex, CHAR_WORKMAPFLOORTYPE, 0);
}
#endif
#ifdef _NEWOPEN_MAXEXP
if( CHAR_getInt( charaindex, CHAR_OLDEXP) > 0 || CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){
CHAR_ChangeExp( charaindex);
}
#endif
#ifdef _PETSKILL_BECOMEFOX
CHAR_setWorkInt( charaindex, CHAR_WORKFOXROUND, -1 );
#endif
#ifdef _MAP_TIME
CHAR_setWorkInt(charaindex,CHAR_WORK_MAP_TIME,0);
#endif
#ifdef _PETSKILL_LER
CHAR_setWorkInt(charaindex,CHAR_WORK_RELIFE,0);
#endif
#ifdef _ITEM_ADDEXP2
CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXP,
CHAR_getInt( charaindex, CHAR_ADDEXPPOWER) );
CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME ,
CHAR_getInt( charaindex, CHAR_ADDEXPTIME) );
#endif
}
void CHAR_CheckProfessionSkill( int charaindex)
{
int i, Pclass, skpoint=0, mynum=0;
CHAR_HaveSkill *pSkil;
if( NPC_EventCheckFlg( charaindex, 155) ) return;
Pclass = CHAR_getInt( charaindex, PROFESSION_CLASS );
skpoint = CHAR_getInt( charaindex, PROFESSION_SKILL_POINT);
if( Pclass == PROFESSION_CLASS_NONE )return;
for( i=0; i<CHAR_SKILLMAXHAVE; i++ ){
// 技能ID
int skillID = CHAR_getCharSkill( charaindex, i);
if( skillID < 0 ) continue;
switch( skillID ){
case 63:
mynum = CHAR_getInt( charaindex, CHAR_TOUGH);
if( Pclass == PROFESSION_CLASS_FIGHTER ) mynum = mynum-25;
if( Pclass == PROFESSION_CLASS_WIZARD ) mynum = mynum-10;
if( Pclass == PROFESSION_CLASS_HUNTER ) mynum = mynum-15;
if( mynum < 0 ) mynum = 0;
CHAR_setInt( charaindex, CHAR_TOUGH, mynum);
CHAR_setInt( charaindex, PROFESSION_SKILL_POINT, skpoint+1 );
pSkil = CHAR_getCharHaveSkill( charaindex, i );
SKILL_makeSkillData( &pSkil->skill, 0, 0 );
pSkil->use = 0;
break;
case 64:
CHAR_setInt( charaindex, CHAR_MAXMP, 100);
CHAR_setInt( charaindex, PROFESSION_SKILL_POINT, skpoint+1 );
pSkil = CHAR_getCharHaveSkill( charaindex, i );
SKILL_makeSkillData( &pSkil->skill, 0, 0 );
pSkil->use = 0;
break;
case 65:
CHAR_setInt( charaindex, ATTACHPILE, 0);
CHAR_setInt( charaindex, PROFESSION_SKILL_POINT, skpoint+1 );
pSkil = CHAR_getCharHaveSkill( charaindex, i );
SKILL_makeSkillData( &pSkil->skill, 0, 0 );
pSkil->use = 0;
break;
}
}
{
int myskillpoint, myskillnum=0, myskilllevel;
int mysknum=0;
myskillpoint= CHAR_getInt( charaindex, PROFESSION_SKILL_POINT );
myskilllevel= CHAR_getInt( charaindex, PROFESSION_LEVEL );
for( i=0; i<PROFESSION_MAX_LEVEL; i++ ){
if( CHAR_getCharSkill( charaindex, i) <= 0 ) continue;
myskillnum++;
}
mysknum = myskilllevel - (myskillpoint + myskillnum);
if( mysknum > 0 ){
CHAR_setInt( charaindex, PROFESSION_SKILL_POINT, myskillpoint + mysknum );
}else if( mysknum < 0 ){
int defsknum = (myskillpoint + myskillnum)-myskilllevel;
while( 1){
if( defsknum<= 0 ||
(myskillpoint= CHAR_getInt( charaindex, PROFESSION_SKILL_POINT )) <= 0 ) break;
CHAR_setInt( charaindex, PROFESSION_SKILL_POINT, myskillpoint-1);
defsknum--;
}
}
}
NPC_EventSetFlg( charaindex, 155);
}
void CHAR_ResetPoolPetEgg( int charaindex)
{
int levelup, vital, str, tgh, dex;
int raise, petindex, i;
if( NPC_EventCheckFlg( charaindex, 157) ) return;
for( i = 0; i < CHAR_MAXPOOLPETHAVE; i ++ ) {
petindex = CHAR_getCharPoolPet( charaindex, i);
if( !CHAR_CHECKINDEX( petindex) ) continue;
if( CHAR_getInt( petindex, CHAR_FUSIONBEIT) != 1 ||
CHAR_getInt( petindex, CHAR_FUSIONRAISE) <= 0 ) continue;
raise = CHAR_getInt( petindex, CHAR_FUSIONRAISE);
raise--;
CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, (int)time(NULL)+PETFEEDTIME);
if( raise < 1 ) raise = 1;
if( raise >= 40 ) raise = 30;
CHAR_setInt( petindex, CHAR_FUSIONRAISE, raise);
levelup = CHAR_getInt( petindex, CHAR_ALLOCPOINT);
vital = ((levelup>>24) & 0xFF) + 4;
str = ((levelup>>16) & 0xFF) + 4;
tgh = ((levelup>> 8) & 0xFF) + 4;
dex = ((levelup>> 0) & 0xFF) + 4;
if( vital < 0 ) vital = 0;
if( str < 0 ) str = 0;
if( tgh < 0 ) tgh = 0;
if( dex < 0 ) dex = 0;
//扣屬性
levelup = (vital<<24) + (str<<16) + (tgh<<8) + (dex<<0);
CHAR_setInt( petindex, CHAR_ALLOCPOINT, levelup);
}
NPC_EventSetFlg( charaindex, 157);
}
// Robin add 重設寵蛋 養時間
void CHAR_ResetPetEggFusionTime(int charaindex)
{
int i, petindex;
int nowTime =0;
//int leaveTime =0;
//int lastFeedTime =0;
//int anhour = PETFEEDTIME;
//if( NPC_EventCheckFlg( charaindex, 157) ) return;
nowTime = (int)time(NULL);
//leaveTime = CHAR_getInt( charaindex, CHAR_LASTLEAVETIME);
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {
petindex = CHAR_getCharPet( charaindex, i);
if( !CHAR_CHECKINDEX( petindex) ) continue;
if( CHAR_getInt( petindex, CHAR_FUSIONBEIT) != 1 ||
CHAR_getInt( petindex, CHAR_FUSIONRAISE) <= 0 ) continue;
//lastFeedTime = CHAR_getInt( petindex, CHAR_FUSIONTIMELIMIT);
//if( leaveTime > 0) {
// CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, nowTime- (leaveTime-lastFeedTime));
//}
//else
// CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, nowTime);
CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, nowTime);
}
//NPC_EventSetFlg( charaindex, 157);
}
BOOL CHAR_CheckProfessionEquit( int toindex)
{
int i, j, itemindex, newindex;
int FixItem[16]={
2028,2029,2030,2031,2032,2033,2034,2035,
2036,2037,2038,2039,2040,2041,2042,2043
};
CHAR_HaveSkill *pSkil;
if(!NPC_EventCheckFlg( toindex, 149)){
for (i = 0; i < CHAR_MAXITEMHAVE; i ++) {
itemindex = CHAR_getItemIndex( toindex, i);
if( !ITEM_CHECKINDEX( itemindex)) continue;
for( j=0; j<16; j++){
if( ITEM_getInt( itemindex, ITEM_ID) == FixItem[j] ){
CHAR_setItemIndex( toindex, i, -1 );
ITEM_endExistItemsOne( itemindex);
newindex = ITEM_makeItemAndRegist( FixItem[j]);
if( !ITEM_CHECKINDEX( newindex) ) break;
CHAR_setItemIndex( toindex , i, newindex);
ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, toindex);
ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1);
CHAR_sendItemDataOne( toindex, i);
}
}
}
for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++){
int itemindex = CHAR_getPoolItemIndex(toindex, i);
if( !ITEM_CHECKINDEX( itemindex)) continue;
for( j=0; j<16; j++){
if( ITEM_getInt( itemindex, ITEM_ID) == FixItem[j] ){
CHAR_setPoolItemIndex( toindex, i, -1);
ITEM_endExistItemsOne( itemindex);
newindex = ITEM_makeItemAndRegist( FixItem[j]);
if( !ITEM_CHECKINDEX( newindex) ) break;
CHAR_setPoolItemIndex( toindex , i, newindex);
ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, toindex);
ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1);
}
}
}
NPC_EventSetFlg( toindex, 149);
}
if( NPC_EventCheckFlg( toindex, 156) ) return TRUE;
// WON ADD
for( i=0; i<PROFESSION_MAX_LEVEL; i++ ){
if( CHAR_getIntPSkill( toindex, i, SKILL_IDENTITY) > 0 ) continue;
pSkil = CHAR_getCharHaveSkill( toindex, i );
SKILL_makeSkillData( &pSkil->skill, 0, 0 );
pSkil->use = 0;
}
{
int myskillpoint= CHAR_getInt( toindex, PROFESSION_SKILL_POINT );
int myskilllevel= CHAR_getInt( toindex, PROFESSION_LEVEL );
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -