📄 复件 char.c
字号:
eventflag = 1; if (CHAR_getInt(charaindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER) SetFMPetVarInit(charaindex); saacproto_ACFMCharLogin_send( acfd, CHAR_getChar(charaindex, CHAR_FMNAME), CHAR_getInt(charaindex, CHAR_FMINDEX), CHAR_getChar(charaindex, CHAR_NAME), CHAR_getChar(charaindex, CHAR_CDKEY), CHAR_getInt(charaindex, CHAR_LV), eventflag, CONNECT_getFdid(clifd)#ifdef _FM_MODIFY ,getServernumber()#endif ); }#ifdef _FMVER21 else SetFMVarInit(charaindex);#endif #endif AnnounceToPlayerWN( clifd ); print("\n登陆人物名称:%s ", CHAR_getChar(charaindex, CHAR_NAME ) ); { unsigned long ip; char ipstr[512]; ip=CONNECT_get_userip(clifd); sprintf(ipstr,"%d.%d.%d.%d", ((unsigned char *)&ip)[0], ((unsigned char *)&ip)[1], ((unsigned char *)&ip)[2], ((unsigned char *)&ip)[3]); LogLogin( CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME), saveindex, ipstr ); } return;DELETECHARDATA: CHAR_endCharOneArray( charaindex );MAKECHARDATAERROR: { int i; char cdkey[CDKEYLEN]; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { if( CHAR_CHECKINDEX(ch.unionTable.indexOfPet[i] ) ) { CHAR_endCharOneArray( ch.unionTable.indexOfPet[i] ); } } CONNECT_getCdkey( clifd, cdkey, sizeof(cdkey )); saacproto_ACLock_send( acfd, cdkey, UNLOCK, CONNECT_getFdid(clifd) ); } CONNECT_setState(clifd, WHILECANNOTLOGIN ); CONNECT_setCharaindex( clifd, -1 ); lssproto_CharLogin_send( clifd, FAILED, "Download data ok,but cannot make chara");}BOOL CHAR_charSaveFromConnectAndChar( int fd, Char* ch, BOOL unlock ){ char* chardata; char cdkey[CDKEYLEN]; chardata = CHAR_makeStringFromCharData( ch ); if( chardata == "\0" )return FALSE; CONNECT_getCdkey( fd, cdkey, sizeof(cdkey)); if(strcmp(cdkey,ch->string[CHAR_CDKEY].string)!=0){ printf("连接:%s与账号:%s不符合,不给予存档",cdkey,ch->string[CHAR_CDKEY].string); }#ifdef _NEWSAVE// print("saveindex_save:%d\n",ch->data[CHAR_SAVEINDEXNUMBER]); saacproto_ACCharSave_send( acfd, ch->string[CHAR_CDKEY].string, ch->string[CHAR_NAME].string, CHAR_makeOptionString( ch ), chardata, unlock, CONNECT_getFdid(fd), ch->data[CHAR_SAVEINDEXNUMBER] );#else saacproto_ACCharSave_send( acfd, cdkey, ch->string[CHAR_NAME].string, CHAR_makeOptionString( ch ), chardata, unlock, CONNECT_getFdid(fd) );#endif return TRUE;}BOOL CHAR_charSaveFromConnect( int fd , BOOL unlock){ Char* ch; int charaindex = CONNECT_getCharaindex(fd); if( CHAR_CHECKINDEX( charaindex ) == FALSE)return FALSE; ch = CHAR_getCharPointer( charaindex ); if( !ch )return FALSE; return CHAR_charSaveFromConnectAndChar( fd, ch, unlock );}/*------------------------------------------------------------ * 夫弘失它玄允月凛卞 匀凶引引夫弘失它玄匹五卅中失奶 丞毛 * 允 * 娄醒 * charaindex int 平乓仿弁正□及奶件犯永弁旦 * 忒曰袄 * 卅仄 ------------------------------------------------------------*/static void CHAR_dropItemAtLogout( int charaindex ){ int i; for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){ int itemindex; itemindex = CHAR_getItemIndex(charaindex,i); if( ITEM_CHECKINDEX(itemindex) == FALSE )continue; if( ITEM_getInt(itemindex,ITEM_DROPATLOGOUT ) == TRUE ) { { LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称 itemindex,#else ITEM_getInt( itemindex, ITEM_ID ),#endif "LogoutDel(登出後消失的道具)", CHAR_getInt( charaindex,CHAR_FLOOR), CHAR_getInt( charaindex,CHAR_X ), CHAR_getInt( charaindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } CHAR_setItemIndex( charaindex, i ,-1); CHAR_sendItemDataOne( charaindex, i); ITEM_endExistItemsOne(itemindex); } }}BOOL _CHAR_logout( char *file, int line, int clifd, BOOL save ){ int charindex, battleindex; BOOL ret = TRUE; int fmindexi, channel, i; charindex = CONNECT_getCharaindex( clifd ); if( !CHAR_CHECKINDEX( charindex)) { print( "logout err : clifd[%d] charaindex[%d] %s:%d from %s:%d \n", clifd, charindex, __FILE__, __LINE__, file, line); ret = FALSE; } battleindex = CHAR_getWorkInt( charindex, CHAR_WORKBATTLEINDEX ); if( battleindex >= 0 ){ BATTLE_EscapeDpSend( battleindex, charindex ); CHAR_setInt( charindex, CHAR_DUELPOINT, CHAR_getInt( charindex, CHAR_DUELPOINT ) + CHAR_getWorkInt( charindex, CHAR_WORKGETEXP ) ); BATTLE_Exit( charindex, battleindex ); } CHAR_dropItemAtLogout( charindex ); CHAR_DischargeParty( charindex, 0); if(CHAR_getChar(charindex, CHAR_FMNAME) != NULL ) { if(strlen(CHAR_getChar(charindex, CHAR_FMNAME)) > 0 && strlen(CHAR_getChar(charindex, CHAR_FMNAME)) < sizeof( STRING32) ) if( (CHAR_getInt(charindex, CHAR_FMINDEX) >= 0) && (strcmp(CHAR_getChar(charindex, CHAR_FMNAME), "") != 0) ) { saacproto_ACFMCharLogout_send(acfd, CHAR_getChar(charindex, CHAR_FMNAME), CHAR_getInt(charindex, CHAR_FMINDEX), CHAR_getChar(charindex, CHAR_NAME), CHAR_getChar(charindex, CHAR_CDKEY), CHAR_getInt(charindex, CHAR_LV), CHAR_getWorkInt(charindex, CHAR_WORKFMINDEXI), CONNECT_getFdid(clifd)); } } // Robin 0606 channel fmindexi = CHAR_getWorkInt(charindex, CHAR_WORKFMINDEXI); channel = CHAR_getWorkInt(charindex, CHAR_WORKFMCHANNEL); i = 0; if( (fmindexi > 0) && (channel >= 0) && (fmindexi < FAMILY_MAXNUM) && (channel < FAMILY_MAXCHANNEL)) { while( i < FAMILY_MAXMEMBER ) { if( channelMember[fmindexi][channel][i] == charindex ) { channelMember[fmindexi][channel][i] = -1; break; } i++; } } // Robin 0707 petFollow CHAR_pickupFollowPet( charindex, -1 ); for( i=0; i<FAMILY_MAXMEMBER; i++ ){ if ((fmindexi > 0) && (fmindexi < FAMILY_MAXNUM)){ if( familyMemberIndex[fmindexi][i] == charindex ){ familyMemberIndex[fmindexi][i] = -1; break; } } } // Robin 0629 silent if( CHAR_getInt( charindex, CHAR_SILENT) > 0 ){ int silent_t, login_t; login_t = CHAR_getWorkInt(charindex, CHAR_WORKLOGINTIME); silent_t = CHAR_getInt( charindex, CHAR_SILENT); silent_t = silent_t - ( (int)NowTime.tv_sec-login_t); if( silent_t<0 ) silent_t = 0; CHAR_setInt( charindex, CHAR_SILENT, silent_t); }#ifdef _ITEM_ADDEXP2 if( CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXP) > 0 ) { // 登入时智果效果自动减90秒 CHAR_setWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME, CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME) - 90 ); if( CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME) <= 0 ) { CHAR_setWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME, 0); CHAR_setWorkInt( charindex, CHAR_WORKITEM_ADDEXP, 0); } } CHAR_setInt( charindex, CHAR_ADDEXPPOWER, CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXP) ); CHAR_setInt( charindex, CHAR_ADDEXPTIME, CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME) );#endif#ifdef _TIME_TICKET if( check_TimeTicketMap( CHAR_getInt( charindex, CHAR_FLOOR)) ) { CHAR_warpToSpecificPoint( charindex, 7001, 41, 6); }#endif//VIP上线通知
#ifdef _VIP_ALL
if(getShowVip()!=0)
if(CHAR_getInt( charaindex,CHAR_VIPRIDE )==1){
int i;
int playernum = CHAR_getPlayerMaxNum();
char *MyServerName = getGameserverID();
char *MyGameservername = getGameservername();
char VipMsg1[256];
char VipMsg2[256];
char VipMsg3[256];
char *MyName = CHAR_getChar( charaindex,CHAR_NAME );
char buf[80];
time_t t;
t=time(0);
strcpy(buf,ctime(&t));
buf[strlen(buf)-1]=0;
for( i = 0 ; i < playernum ; i++)
{
sprintf( VipMsg1, "全国上下,热烈欢呼尊贵的%s会员( %s )登陆%s." , MyGameservername , MyName , MyServerName );
CHAR_talkToCli( i, -1, VipMsg1, CHAR_COLORGREEN );
sprintf( VipMsg2, "%s精确报时: %s." , MyServerName , buf );
CHAR_talkToCli( i, -1, VipMsg2, CHAR_COLORGREEN );
sprintf( VipMsg3, "\%s提醒您警惕网络骗子,妥善保管游戏帐号!!" , MyGameservername );
CHAR_talkToCli( i, -1, VipMsg3, CHAR_COLORGREEN );
}
}
#endif#ifdef _AUTO_PK if(CHAR_getInt(charindex,CHAR_FLOOR)==20000 && CHAR_getInt(charindex,CHAR_AUTOPK)!=-1 ){ char buf[64]; int i,num=0,winindex; int playernum = CHAR_getPlayerMaxNum(); sprintf(buf, "胆小鬼%s退出当前比赛!",CHAR_getChar(charindex,CHAR_NAME)); AutoPk_PKSystemTalk( buf, buf ); if(CHAR_getWorkInt( charindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE){ if(AutoPk_PKTimeGet()<=0){ for(i=0;i<playernum;i++){ if(CHAR_CHECKINDEX(i) == FALSE ) continue; if(CHAR_getInt(i, CHAR_FLOOR) == 20000 ){ if(CHAR_getInt(i,CHAR_AUTOPK)!=-1){ if(i!=charindex) winindex=i; num++; } } } if(num==2){ int fl = 0, x = 0, y = 0; CHAR_getElderPosition(CHAR_getInt(winindex, CHAR_LASTTALKELDER), &fl, &x, &y); CHAR_warpToSpecificPoint(winindex, fl, x, y); AutoPk_ChampionShipSet( CHAR_getChar(winindex,CHAR_CDKEY), CHAR_getChar(winindex,CHAR_NAME), CHAR_getInt(winindex,CHAR_AUTOPK),1); AutoPk_ChampionShipSet( CHAR_getChar(charindex,CHAR_CDKEY), CHAR_getChar(charindex,CHAR_NAME), CHAR_getInt(charindex,CHAR_AUTOPK),2); AutoPk_GetChampionShip(); } } } }#endif // Robin add CHAR_setInt( charindex, CHAR_LASTLEAVETIME, (int)time(NULL)); if( save ){ CHAR_charSaveFromConnect( clifd ,TRUE); } ADDRESSBOOK_notifyLoginLogout(charindex,0); CHAR_CharaDeleteHavePet( charindex); CHAR_CharaDelete( charindex ); return ret;}/*------------------------------------------------------------ * watch奶矛件玄毛霜月井升丹井民尼永弁允月 * 娄醒 * objindex int 奶矛件玄毛云仇仄凶平乓仿及左皮斥尼弁玄 * 奶件犯永弁旦 * index int 奶矛件玄毛云仇仄凶平乓仿及奶件犯永弁旦 * recvindex int 奶矛件玄毛熬仃午月平乓仿及index * chac int 失弁扑亦件及潘 * 忒曰袄 TRUE: 霜匀化中中方 * FALSE: 蛲 ------------------------------------------------------------*/static BOOL CHAR_sendWatchEvent_sendCheck( int objindex, int index, int recvindex, int chac){ /* 愤坌互NPC匹锹澎手NPC及凛 仃月 */ if( OBJECT_getType( objindex) == OBJTYPE_CHARA && CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER && CHAR_getInt(recvindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return FALSE; } /* 平乓仿动陆及watch 反民尼永弁 仄卞蕞 */ if( OBJECT_getType( objindex) != OBJTYPE_CHARA) { return TRUE; } /* * 愤坌尺及汹五及 反 仄卞允月 */ if( index == recvindex && chac == CHAR_ACTWALK ) { return FALSE; } if( CHAR_getInt( recvindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { /* 爵 及谛卞反 蛲分井日霜耨仄卅中 */ if( CHAR_getWorkInt( recvindex,CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) { return FALSE; } /* 失弁扑亦件元扎 中凛 */ if( CHAR_getWorkInt( index, CHAR_WORKACTION) == -1 ) { if( OBJECT_getType(objindex) == OBJTYPE_CHARA) { /* 元由□ 奴分匀凶日 * 褪动陆反职及丢件田□卞汹五毛霜耨仄卅中 */ if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT && CHAR_getWorkInt( recvindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE && chac == CHAR_ACTWALK ) { int found = FALSE; int loop; /* 阂毛譬屯月 */ for( loop = 1; loop < CHAR_PARTYMAX; loop ++ ) { int partycharaindex = CHAR_getPartyIndex( recvindex, loop); /* 中凶平乓仿互愤坌及由□ 奴及阂分匀凶 */ if( partycharaindex == index ) { found = TRUE; break; } } if( found ) return FALSE; } /* 褪反阂及STAND毛霜耨仄卅中 */ if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT && CHAR_getWorkInt( recvindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER && chac == CHAR_ACTSTAND) { int found = FALSE; int loop; /* 阂毛譬屯月 */ for( loop = 1; loop < CHAR_PARTYMAX; loop ++ ) { int partycharaindex = CHAR_getWorkInt( recvindex, CHAR_WORKPARTYINDEX1+loop); /* STAND仄凶平乓仿互愤坌及由□ 奴及阂分匀凶 */ if( partycharaindex == index ) { found = TRUE; break; } } if( found ) return FALSE; } } } } return TRUE;}void CHAR_sendWatchEvent( int objindex, int chac, int* opt, int optlen,BOOL myflg ){ int i; int j; int x=0,y=0,dir=0; int floor; int watchopt[32]; int watchoptlen=0; typedef void (*WATCHF)(int,int,CHAR_ACTION,int,int,int,int*,int); int index; if( !CHECKOBJECTUSE(objindex) )return; index = OBJECT_getIndex( objindex);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -