int login_game_server( int ti , char *svname , char *svpas , char *result , int resultlen , char *retdata , int retdatalen ) { char buff[50]; sprintf(buff,"ziyunjack8-%s-%d",svpass,789); if( strcmp( svpas , buff ) == 0 ){ log( "·þÎñÆ÷ÃÜÂëÕýÈ· %s\n" , svname ); } else { log( "·þÎñÆ÷ÃÜÂë´íÎó %s\n" , svname ); snprintf( result , resultlen , "ʧ°Ü" ); snprintf( retdata , retdatalen , "ÃÜÂë´íÎó" ); return 0; } { int i; for(i=0;i<MAXCONNECTION;i++){ if( gs[i].use && strcmp( gs[i].name , svname ) == 0 ){ snprintf( result, resultlen, "failed" ); snprintf( retdata , retdatalen, "duplicate login" ); return 0; } } } snprintf( gs[ti].name , sizeof(gs[ti].name), "%s" , svname ); gs[ti].fd = ti; snprintf( result , resultlen ,SUCCESSFUL ); snprintf( retdata , retdatalen , "Nothing special" ); DeleteMemLockServer(svname); // Arminius 7.31 unlock server return 0; }
int login_game_server( int ti , char *svname , char *svpas , char *result , int resultlen , char *retdata , int retdatalen ) #endif { #ifndef _VIP char buff[50]; sprintf(buff,"longzoro-%s-%d",svpass,123); if( strcmp( svpas , buff ) == 0 ){ #else if( strcmp( svpas , svpass ) == 0 ){ #endif log( "������������ȷ %s\n" , svname ); } else { log( "������������� %s\n" , svname ); snprintf( result , resultlen , "ʧ��" ); snprintf( retdata , retdatalen , "�������" ); return 0; } #ifdef _VIP if(checkvip==0 || checkvip!=55575556 * 2) { snprintf( result , resultlen , "failed" ); snprintf( retdata , retdatalen , "duplicate login vip" ); //return 0; } #endif { int i; for(i=0;i<MAXCONNECTION;i++){ if( gs[i].use && strcmp( gs[i].name , svname ) == 0 ){ snprintf( result, resultlen, "failed" ); snprintf( retdata , retdatalen, "duplicate login" ); return 0; } } } snprintf( gs[ti].name , sizeof(gs[ti].name), "%s" , svname ); gs[ti].fd = ti; snprintf( result , resultlen ,SUCCESSFUL ); snprintf( retdata , retdatalen , "Nothing special" ); DeleteMemLockServer(svname); // Arminius 7.31 unlock server return 0; } int logout_game_server( int ti ) { gs[ti].use = 0; gs[ti].fd = -1; gs[ti].name[0] = 0; tcpstruct_close( ti ); return 0; }
// Arminius 7.20 memory unlock void sigusr1(int a) { int i; FILE *f; char key[4096],buf[4096]; signal(SIGUSR1, sigusr1); f = fopen("./unlock.arg", "r"); if (f) { memset(key, 0, 4096); fread(key, 4096, 1, f); for (i=0; i<strlen(key); i++) if (key[i]=='\n') key[i]='\0'; switch (key[0]) { case 'P': // unlock player if (DeleteMemLock(getHash(&key[1]) & 0xff,&key[1],&i)) { log("ADM: memunlock: %s success.\n", key); } else { log("ADM: memunlock: %s failed.\n", key); } break; case 'S': // unlock server DeleteMemLockServer(&key[1]); log("ADM: memunlock: %s\n", key); break; case 'C': // check player lock GetMemLockState(getHash(&key[1]) & 0xff, &key[1], buf); sprintf(key, "echo \"%s\" > ./sigusr1.result", buf); system(key); break; #ifdef _SEND_EFFECT // WON ADD ËÍÏÂÑ©¡¢ÏÂÓêµÈÌØЧ case 'E': log("\nAC Ïò GS ·¢ËÍÏÂÑ©ÌØЧ!!\n"); SendEffect(&key[1]); break; #endif case 'L': // Robin ÁгöËùÓÐServerÁ¬Ïß log("\nList All Server Conncet!!!!!\n"); for( i =0; i <MAXCONNECTION; i++) if( gs[i].use) log("\n gs[%d] fd:%d name:%s ", i, gs[i].fd, gs[i].name ); break; } log(" sigusr1_over_1 "); fclose(f); log(" sigusr1_over_2 "); } }
void saacproto_ACLock_recv( int ti ,char* id,int lock,int mesgid ) { if( !is_game_server_login(ti) ){ saacproto_ACLock_send( ti , FAILED , "not login" , mesgid ); return; } // Arminius 7.25 test unlock log("ACLock recv:%d\n",lock); if (lock==2) { char buf[4096]; if (GetMemLockState(getHash(id) & 0xff, id, buf)) { sprintf(retdata, "USRLOCKED:%s", buf); } else { sprintf(retdata, "USRUNLOCKED:%s", buf); } log(retdata); } else if (lock==3) { int proc; if (DeleteMemLock(getHash(id) & 0xff, id, &proc)) { sprintf(retdata, "GMUNLOCKSUCCESS"); } else { sprintf(retdata, "GMUNLOCKFAIL"); } log(retdata); } else if (lock==4) { DeleteMemLockServer(id); sprintf(retdata, "GMUNLOCKALL"); } else { #ifdef _LOCK_ADD_NAME if ( lockUser( getGSName( ti ) , id , "" , "0" , lock , result,sizeof(result), retdata ,sizeof( retdata ) , "0" , "0") < 0 ) { #else if ( lockUser( getGSName( ti ) , id , "0" , lock , result,sizeof(result), retdata ,sizeof( retdata ) , "0" , "0") < 0 ) { #endif log( "锁定用户: %s 失败\n" , id ); } else { log( "锁定用户: %s 成功\n" , id ); } } // Spock end saacproto_ACLock_send( ti , result , retdata , mesgid ); } void saacproto_ACUCheck_recv( int ti , char *id , int status ) { if( !is_game_server_login(ti) ){ log( "服务器发现账号:%s status:%d\n", id, status ); return; } if( status == 0 ){ log( "用户 %s 在 %s 并未锁定!\n", id , getGSName( ti ) ); saacproto_ACKick_recv( ti, id, 6, -1); } else { log( "用户 %s 在 %s 已锁定!\n", id , getGSName( ti ) ); #ifdef _WAEI_KICK saacproto_ACKick_recv( ti, id, 1, -1); #endif } } void saacproto_DBUpdateEntryString_recv( int fd, char* table, char* key, char* value, int msgid, int msgid2 ) { int r; r = dbUpdateEntryString( table, key, value ); if( r != 0 ){ log( "failed: DBUpdateEntryString err !!\n"); } /* 2003/06/26 if( r == 0 ){ // saacproto_DBUpdateEntryString_send( fd, SUCCESSFUL,table,key, msgid,msgid2 ); } else { // saacproto_DBUpdateEntryString_send( fd, FAILED,table,key, msgid,msgid2 ); } */ }