?? char.c.bak
字號:
print("PET:%s fix BBI\n", CHAR_getUseName(petindex));
}
#endif
// WON ADD 修正白虎七技
if( ID1 == 777 )CHAR_setInt( petindex, CHAR_SLOT, 7);
CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex);
// 修正寵技最大值變-1 Robin 20040803
if( CHAR_getInt( petindex, CHAR_SLOT) < 0 ) {
int j;
for( j=0; j<CHAR_MAXPETSKILLHAVE; j++) {
if( CHAR_getPetSkill( petindex, j) >= 0)
CHAR_setInt( petindex, CHAR_SLOT, j+1);
}
//print(" 寵技MAX變-1改6 ");
}
CHAR_complianceParameter( petindex );
#ifdef _FIX_GP_PET_SKILL // WON ADD 修正gp寵會落馬術
if( ID1 == 1133){
int j;
for( j=0; j<CHAR_MAXPETSKILLHAVE; j++){
if( CHAR_getPetSkill( petindex, j) == 210 ){ // 落馬術
CHAR_setPetSkill( petindex, j, -1);
}
}
}
#endif
}
}
}
{
int i;
// char *petstring;//ttom
// char *c_ptr_index;
// char c_temp[4096];
// char c_temp1[4096];
int ID1;
// int tran_no;
BOOL b_find=FALSE;
//ttom
for( i = 0; i < CHAR_MAXPOOLPETHAVE; i ++ ) {
int petindex = CHAR_getCharPoolPet(charaindex,i);
if( CHAR_CHECKINDEX( petindex) ) {
#ifdef _CHECK_ENEMY_PET
{
int j;
for( j=0;j<ENEMYTEMP_getEnemyNum();j++ ) {//ENEMY_getEnemyNum()
if( CHAR_getInt( petindex, CHAR_PETID) == ENEMYTEMP_getInt( j, E_T_TEMPNO ) ) {//ENEMY_getInt( j, ENEMY_TEMPNO)
if( ENEMYTEMP_getInt( j, E_T_PETFLG ) == 0 ){//ENEMY_getInt( j, ENEMY_PETFLG)
CHAR_setCharPoolPet( charaindex, i, -1);//清除不能當寵物的角色
LogPet( CHAR_getChar( charaindex, CHAR_NAME ),
CHAR_getChar( charaindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"login(清除不能當寵物的角色)",
CHAR_getInt( charaindex,CHAR_FLOOR),
CHAR_getInt( charaindex,CHAR_X ),
CHAR_getInt( charaindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
CHAR_talkToCli(charaindex,-1,"系統清除你身上的非法寵物",CHAR_COLORWHITE);
}
}
}
}
#endif
#ifdef _UNIQUE_P_I
// CoolFish: 2001/10/11 Set Pet Unicode
CHAR_setPetUniCode(petindex);
#endif
#ifdef _NEWOPEN_MAXEXP
if( CHAR_getInt( petindex, CHAR_OLDEXP) > 0 ||
CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){
CHAR_ChangeExp( petindex);
}
#endif
b_find=FALSE;
ID1=CHAR_getInt( petindex, CHAR_PETID);
#ifdef _REEDIT_PETBBIS
if( ID1 == 1133 ){
CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, 101578);
CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, 101578);
}
#endif
/*
tran_no=CHAR_getInt( charaindex, CHAR_TRANSMIGRATION);
petstring = CHAR_makePetStringFromPetIndex( petindex);
c_ptr_index=strstr(petstring,"name:");
getStringFromIndexWithDelim(c_ptr_index,":",2,c_temp,sizeof(c_temp));
c_ptr_index=c_temp;
getStringFromIndexWithDelim(c_ptr_index,"|",1,c_temp1,sizeof(c_temp1));
if(b_find){//ttom
CHAR_setCharPoolPet( charaindex, i, -1);
print("\nKill pool pet ID=%d name=%s",ID1,c_temp1);
sprintf(c_temp2,"Kill pool pet ID=%d name=%s",ID1,c_temp1);
LogKill(CHAR_getChar( charaindex, CHAR_NAME ),
CHAR_getChar( charaindex, CHAR_CDKEY ),
c_temp2);
}else{//ttom
*/
CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex);
CHAR_complianceParameter( petindex );
// }//ttom
}
}
}
// CHAR_ResetPoolPetEgg( charaindex);
// CHAR_CheckProfessionEquit( charaindex);
CHAR_CheckProfessionSkill( charaindex);
{
int i=0;
int skidx[]={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3};
//20040702 Change fix
//檢查是否有職業不該有的技能并刪除
for( i = CHAR_SKILLMAXHAVE-1; i >= 0; i -- ){
CHAR_HaveSkill *pSkil;
Skill* skill;
pSkil = CHAR_getCharHaveSkill( charaindex, i );
skill = &pSkil->skill;
if( pSkil == NULL )continue;
if( pSkil->use == 0 )continue;
if( skidx[skill->data[SKILL_IDENTITY]] != CHAR_getInt( charaindex, PROFESSION_CLASS )
&& skidx[skill->data[SKILL_IDENTITY]] != 4 ){//共通技不刪
SKILL_makeSkillData( &pSkil->skill, 0, 0 );
pSkil->use = 0;
}
}
}
#ifdef _LOGIN_ADDITEM
CHAR_loginAddItem( charaindex);
#endif
CHAR_loginCheckUserItem( charaindex);
#ifdef _FIX_TSKILLCAN
CHAR_PETSKILLCAN( charaindex);
#endif
CHAR_complianceParameter( charaindex );
// Robin add 重設寵蛋 養時間
CHAR_ResetPetEggFusionTime( charaindex);
#ifdef _PROFESSION_FIX_LEVEL // WON ADD 修正職業經驗值
{
int i=0;
for( i = 0 ; i < CHAR_SKILLMAXHAVE ; i ++ ){
CHAR_HaveSkill* hskill;
hskill = CHAR_getCharHaveSkill( charaindex, i );
if( hskill != NULL && hskill->use == TRUE ){
int skill_level = SKILL_getInt( &hskill->skill, SKILL_LEVEL);
if( skill_level < 10 ){
SKILL_setInt( &hskill->skill, SKILL_LEVEL, 10* 100 );
}
}
}
}
#endif
#ifdef _CHANNEL_MODIFY
if(CHAR_getInt(charaindex,PROFESSION_CLASS) > 0){
int i,pclass = CHAR_getInt(charaindex,PROFESSION_CLASS) - 1,Empty = -1;
// 若舊的職業頻道記錄有記錄在就留著,若沒有加入頻道
for(i=0;i<getFdnum();i++){
if(*(piOccChannelMember + (pclass * getFdnum()) + i) == charaindex) break;
else if(*(piOccChannelMember + (pclass * getFdnum()) + i) == -1 && Empty == -1) Empty = i;
}
// 找不到舊記錄
if(i == getFdnum()){
if(Empty != -1) *(piOccChannelMember + (pclass * getFdnum()) + Empty) = charaindex;
}
}
#endif
#ifdef _STREET_VENDOR
CHAR_setWorkInt(charaindex,CHAR_WORKSTREETVENDOR,-1);
CHAR_setWorkInt(charaindex,CHAR_WORKSTREETVENDOR_WHO,-1);
{
int i;
for(i=0;i<MAX_SELL_ITEM;i++) CHAR_clearStreetVendor(charaindex,i);
}
#endif
#ifdef _NEW_MANOR_LAW
if(CHAR_getInt(charaindex,CHAR_MOMENTUM) < 0) CHAR_setInt(charaindex,CHAR_MOMENTUM,0);
if(CHAR_getInt(charaindex,CHAR_MOMENTUM) > MAX_PERSONAL_MOMENTUM) CHAR_setInt(charaindex,CHAR_MOMENTUM,MAX_PERSONAL_MOMENTUM);
#endif
#ifdef _PETSKILL_BECOMEPIG
if( CHAR_getInt( charaindex, CHAR_BECOMEPIG) > -1 ){
CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( charaindex, CHAR_BECOMEPIG_BBI ) );
}
//change fix 處理負很大的烏力時間
else{
CHAR_setInt( charaindex, CHAR_BECOMEPIG, -1 );
}
#endif
lssproto_CharLogin_send( clifd, SUCCESSFUL,"" );
per = ENCOUNT_getEncountPercentMin( charaindex,
CHAR_getInt( charaindex, CHAR_FLOOR),
CHAR_getInt( charaindex, CHAR_X),
CHAR_getInt( charaindex, CHAR_Y));
if( per != -1) {
CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, per);
}
per = ENCOUNT_getEncountPercentMax( charaindex,
CHAR_getInt( charaindex, CHAR_FLOOR),
CHAR_getInt( charaindex, CHAR_X),
CHAR_getInt( charaindex, CHAR_Y));
if( per != -1) {
CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX, per);
}
CHAR_setLuck( charaindex);
{
int i;
char* statuscat[]={"C","P","I","S","D","E","F"};
for( i=0 ; i<arraysizeof(statuscat) ; i++ )
CHAR_sendStatusString( charaindex, statuscat[i] );
}
{
int i;
char category[3];
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {
snprintf( category, sizeof( category), "K%d",i);
CHAR_sendStatusString( charaindex, category );
snprintf( category, sizeof( category), "W%d",i);
CHAR_sendStatusString( charaindex, category );
}
}
{
int petarray = CHAR_getInt( charaindex, CHAR_DEFAULTPET);
if( CHAR_CHECKPETINDEX( petarray)) {
if( !CHAR_CHECKINDEX( CHAR_getCharPet( charaindex, petarray))) {
petarray = -1;
}
}else {
petarray = -1;
}
lssproto_KS_send( clifd, petarray, TRUE);
}
{
int flg = 0;
CHAR_setFlg( charaindex, CHAR_ISSHOWBATTLEMSG, 0);
CHAR_setFlg( charaindex, CHAR_ISDUEL, 0);
CHAR_setFlg( charaindex, CHAR_ISTRADECARD, 0);
if( CHAR_getFlg( charaindex, CHAR_ISPARTY)) flg |= CHAR_FS_PARTY;
if( CHAR_getFlg( charaindex, CHAR_ISDUEL)) flg |= CHAR_FS_DUEL;
if( CHAR_getFlg( charaindex, CHAR_ISPARTYCHAT)) flg |= CHAR_FS_PARTYCHAT;
if( CHAR_getFlg( charaindex, CHAR_ISTRADECARD)) flg |= CHAR_FS_TRADECARD;
#ifdef _CHANNEL_MODIFY
CHAR_setFlg(charaindex,CHAR_ISTELL,0);
CHAR_setFlg(charaindex,CHAR_ISFM,0);
CHAR_setFlg(charaindex,CHAR_ISOCC,0);
CHAR_setFlg(charaindex,CHAR_ISCHAT,0);
CHAR_setFlg(charaindex,CHAR_ISSAVE,0);
#endif
// CoolFish: 2001/4/18
CHAR_setFlg( charaindex, CHAR_ISTRADE, 0);
#ifdef _AUCPROTOCOL // (不可開) Syu ADD 拍賣頻道開關Protocol
CHAR_setFlg( charaindex , CHAR_ISAUC , 0 ) ;
#endif
lssproto_FS_send( clifd, flg);
}
MAP_sendArroundCharNeedFD( clifd, charaindex );
CHAR_setInt( charaindex, CHAR_LOGINCOUNT, CHAR_getInt( charaindex, CHAR_LOGINCOUNT) + 1 );
CHAR_sendCToArroundCharacter( objindex );
CHAR_sendArroundCharaData( charaindex );
CHAR_sendWatchEvent(objindex,CHAR_ACTSTAND,NULL,0,TRUE);
#ifndef _DEATH_CONTEND
ADDRESSBOOK_notifyLoginLogout(charaindex,1);
#endif
CHAR_setWorkInt(charaindex,CHAR_WORKLASTATTACKCHARAINDEX,-1);
if(CHAR_getInt(charaindex,CHAR_HP) <= 0 ){
typedef int (*DYINGFUNC)(int);
DYINGFUNC dyingfunc=NULL;
dyingfunc = (DYINGFUNC)CHAR_getFunctionPointer(charaindex, CHAR_DYINGFUNC );
CHAR_setInt(charaindex,CHAR_HP,1); // HP 設為 1
logHack( CHAR_getWorkInt(charaindex,CHAR_WORKFD), HACK_HP);
}
if( CHAR_getInt( charaindex,CHAR_SKILLUPPOINT ) >=1 )
CHAR_Skillupsend(charaindex);
CHAR_checkEffect( charaindex);
#ifdef _DEATH_FAMILY_LOGIN_CHECK // WON ADD 家族戰登入檢查
// if( NPC_EventCheckFlg( charaindex, 150 ) != TRUE ) {
{
char *char_id, *char_name;
// 清除家族旗標
SetFMVarInit(charaindex);
char_id = CHAR_getChar( charaindex, CHAR_CDKEY );
char_name = CHAR_getChar( charaindex, CHAR_NAME );
saacproto_new_ACFM_Login_send(acfd, charaindex, char_id, char_name );
}
// NPC_EventSetFlg( charaindex, 150);
// }
#else
// CoolFish: Family 2001/5/30
if ((CHAR_getChar(charaindex, CHAR_FMNAME)!=NULL) &&
(CHAR_getInt(charaindex, CHAR_FMINDEX) >= 0) &&
(strcmp(CHAR_getChar(charaindex, CHAR_FMNAME), "") != 0))
{
#ifdef _FMVER21
int eventflag = 0;
// 是否符合族長得資格
if (CheckLeaderQ(charaindex) >= 0)
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
);
#endif
}
#ifdef _FMVER21
else
SetFMVarInit(charaindex);
#endif
#endif
AnnounceToPlayerWN( clifd );
#ifdef _ANGEL_SUMMON
{
int mindex;
mindex = checkIfOnlyAngel( charaindex);
if( mindex != -1 ) {
if( missiontable[mindex].flag == MISSION_WAIT_ANSWER ) {
lssproto_WN_send( clifd, WINDOW_MESSAGETYPE_ANGELMESSAGE,
WINDOW_BUTTONTYPE_YESNO,
CHAR_WINDOWTYPE_ANGEL_ASK,
-1,
"目前魔族肆虐,精靈們需要你的幫忙,前往尋找勇者來消滅這些魔族,你是否愿意幫忙?" );
}
}
}
#endif
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
);
}
#ifdef _TEACHER_SYSTEM
// 學生上線通知導師
if(strlen(CHAR_getChar(charaindex,CHAR_TEACHER_ID)) > 0 && strlen(CHAR_getChar(charaindex,CHAR_TEACHER_NAME)) > 0){
int iPlayernum = CHAR_getPlayerMaxNum(),i;
char szMsg[128];
for(i=0;i<iPlayernum;i++){
if(CHAR_getCharUse(i) == FALSE) continue;
if(strcmp(CHAR_getChar(charaindex,CHAR_TEACHER_ID),CHAR_getChar(i,CHAR_CDKEY)) == 0 &&
strcmp(CHAR_getChar(charaindex,CHAR_TEACHER_NAME),CHAR_getChar(i,CHAR_NAME)) == 0){
sprintf(szMsg,"學生 %s 已上線",CHAR_getChar(charaindex,CHAR_NAME));
CHAR_talkToCli(i,-1,szMsg,CHAR_COLORYELLOW);
break;
}
}
}
#endif
#ifdef _ITEM_SETLOVER
// 夫妻上線通知對方
if(strlen( CHAR_getChar( charaindex, CHAR_LOVE)) > 0 &&
strlen(CHAR_getChar(charaindex,CHAR_LOVERID))>0 &&
strlen(CHAR_getChar(charaindex,CHAR_LOVERNAME))>0){
int iPlayernum = CHAR_getPlayerMaxNum(),i;
char szMsg[128];
for(i=0;i<iPlayernum;i++){
if(CHAR_getCharUse(i) == FALSE) continue;
if(!strcmp( CHAR_getChar( i, CHAR_LOVE), "YES") &&
!strcmp(CHAR_getChar(charaindex,CHAR_LOVERID),CHAR_getChar(i,CHAR_CDKEY)) &&
!strcmp(CHAR_getChar(charaindex,CHAR_LOVERNAME),CHAR_getChar(i,CHAR_NAME))){
sprintf(szMsg,"你的愛人
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -