?? deathcontend.c
字號:
#include "version.h"#include <time.h>#include "main.h"#include "saacproto_util.h"#include "saacproto_serv.h"#include "recv.h"#include "char.h"#include "util.h"#include "deathcontend.h"#ifdef _DEATH_CONTENDPkTeamLists *PkTeamList=NULL;static int PKListSort[550];enum{ CODE_OK=0, CODE_ERR=-1, CODE_OUTSTRIP=-2, CODE_REPEAT=-3, CODE_LEADERERR=-10, CODE_ERRBATTLEFULL=-11,};static int maxteam = 0;void del_rn( char *s ){ int i; for(i=0;;i++){ if( s[i] == '\r' || s[i] == '\n' ) s[i] = 0; if( s[i] == 0 )break; }}int PKLIST_SetOneBHistory( int ti, int hi, int use, int teamnum, int flg ){ if( ti < 0 || ti >= maxteam ) return CODE_OUTSTRIP; if( hi < 0 || hi >= MAXBATTLENUM ) return CODE_OUTSTRIP; if( PkTeamList[ti].BHistory[hi].use == use ) return CODE_REPEAT; PkTeamList[ti].BHistory[hi].teamnum = teamnum; PkTeamList[ti].BHistory[hi].flg = flg; PkTeamList[ti].BHistory[hi].use = use; return CODE_OK;}int PKLIST_GetOneBHistory( int ti ){ int i; if( ti < 0 || ti >= maxteam ){ log( "GetOneBHistory(ti:%d) err return -1 !!\n", ti) return -1; } for( i=0; i<MAXBATTLENUM; i++){ if( i>=DEFMAXBATTLENUM ) break; if( PkTeamList[ti].BHistory[i].use == 0 ){ log("return BHistory[%d] \n", i) ; return i; } } log("return CODE_ERRBATTLEFULL err !! \n") ; return CODE_ERRBATTLEFULL;}//勿動-------------------------------------------------------void PKLIST_ResetOneTeamMan( int ti ){ int k; if( ti < 0 || ti >= maxteam ) return; for( k=0;k<MAXTEAMMANNUM;k++){ PkTeamList[ti].MyTeamMans[k].use = 0; memset( PkTeamList[ti].MyTeamMans[k].cdkey, 0, sizeof( PkTeamList[ti].MyTeamMans[k].cdkey) ); memset( PkTeamList[ti].MyTeamMans[k].name, 0, sizeof( PkTeamList[ti].MyTeamMans[k].name) ); }}void PKLIST_ResetOneBHistory( int ti ){ int k; for( k=0;k<MAXBATTLENUM;k++){ PKLIST_SetOneBHistory( ti, k, 0, 0, 0); }}void PKLIST_ResetOnePkTeamList( int ti ){ if( ti < 0 || ti >= maxteam ) return; PkTeamList[ti].use = 0; PkTeamList[ti].teamnum = -1; memset( PkTeamList[ti].teamname, 0, sizeof( PkTeamList[ti].teamname ) ); memset( PkTeamList[ti].pathdir, 0, sizeof( PkTeamList[ti].pathdir) ); memset( PkTeamList[ti].leadercdkey, 0, sizeof( PkTeamList[ti].leadercdkey ) );}//-----------------------------------------------------------int PKLIST_InitPkTeamList( int teamnum ){ int i; if( PkTeamList != NULL || teamnum <= 0 ) return -1; log( "PKLIST_InitPkTeamList( maxteam:%d) \n", teamnum); maxteam = teamnum; PkTeamList = (PkTeamLists *)calloc( 1, sizeof( struct _tagPkTeamLists) * maxteam ); if( PkTeamList == NULL ){ log( "ANDY err Can't calloc PkTeamList :%d !!\n", sizeof( struct _tagPkTeamLists) * maxteam ); return -1; } for( i=0; i<maxteam; i++ ){ PkTeamList[i].use = 0; PkTeamList[i].teamnum = -1; memset( PkTeamList[i].teamname, 0, sizeof( PkTeamList[i].teamname) ); memset( PkTeamList[i].pathdir, 0, sizeof( PkTeamList[i].pathdir) ); memset( PkTeamList[i].leadercdkey, 0, sizeof( PkTeamList[i].leadercdkey) ); PkTeamList[i].win = 0; PkTeamList[i].lost = 0; PkTeamList[i].battleplay = 0; PkTeamList[i].score = 0; PkTeamList[i].inside = 1; PKLIST_ResetOneTeamMan( i); PKLIST_ResetOneBHistory( i); } memset( PKListSort, -1, sizeof(PKListSort)); log( "ANDY calloc PkTeamList(%d):%d ..!!\n", maxteam, sizeof( struct _tagPkTeamLists) * maxteam ); return 1;}int PKLIST_UpdateOnePkTeamData( int ti, int forti, int winerflg){ int ret=0; int battleTi = PKLIST_GetOneBHistory( ti ); if( battleTi == CODE_ERRBATTLEFULL || battleTi == -1 ){ log( "ti:%d battleTi:%d err !!\n", ti, battleTi); return -2; } if( winerflg == 1 ){ PkTeamList[ti].win++; }else{ PkTeamList[ti].lost++; } PkTeamList[ti].battleplay++; //場次 PkTeamList[ti].score = (PkTeamList[ti].win*3) - (PkTeamList[ti].lost*1);//積分 PkTeamList[ti].updata = (int)time(NULL); if( PkTeamList[ti].score >= DEFWINSCORE ){ PkTeamList[ti].inside = 2; //錄取 }else if( PkTeamList[ti].lost > DEFMAXBATTLENUM*DEFLOSERATE){// 0.7 = (1-勝率3成)*最高場次 PkTeamList[ti].inside = 0; }else { PkTeamList[ti].inside = 1; } if( PkTeamList[ti].score < 0 ) PkTeamList[ti].score = 0; ret = PKLIST_SetOneBHistory( ti, battleTi, 1, forti, winerflg); PKLIST_SortTheCharts( ti); return ret;}int PKLIST_getStringPkTeamData( int ti, char *data, int sizes){ int k; char buf[512]; if( PkTeamList[ti].use != 1 ) return 0; sprintf( data, "%d_%d|%s|%s|%s|%d|%d|%d|%d|%d_", ti, PkTeamList[ti].teamnum, PkTeamList[ti].pathdir, PkTeamList[ti].teamname, PkTeamList[ti].leadercdkey, PkTeamList[ti].win, PkTeamList[ti].lost, PkTeamList[ti].battleplay, PkTeamList[ti].score, PkTeamList[ti].inside ); for( k=0; k<MAXTEAMMANNUM; k++){ if( PkTeamList[ti].MyTeamMans[k].use == 0 ) continue; if( k!=0 ) strcat( data, "|"); sprintf( buf, "%s,%s", PkTeamList[ti].MyTeamMans[k].cdkey, PkTeamList[ti].MyTeamMans[k].name); strcat( data, buf); } strcat( data, "_"); for( k=0; k<MAXBATTLENUM; k++){ if( PkTeamList[ti].BHistory[k].use == 0 ) continue; if( k!=0 ) strcat( data, "|"); sprintf( buf, "%d,%d" , PkTeamList[ti].BHistory[k].teamnum, PkTeamList[ti].BHistory[k].flg ); strcat( data, buf); } return strlen( data);}void PKLIST_GetPkTeamListData( int fd, int startTi, int count){ int i, first = 1; char data[65535], bufarg[10240]; log( "GetPkTeamListData( %d,%d)!!\n", startTi, count); PKLIST_alteUserfromFile( "pklist", "alteuser.txt"); if( startTi < 0 || startTi >= maxteam || count < 1) return; memset( data, 0, sizeof( data)); for( i=startTi; i<maxteam; i++ ){ memset( bufarg, 0, sizeof(bufarg)); if( PKLIST_getStringPkTeamData( i, bufarg, sizeof(bufarg)) <= 0 ) continue; if( strlen( data) + strlen( bufarg) >= sizeof( data)) { saacproto_PKLISTGETDATA_send( fd, "success", i, data ); return; } if( first != 1 ) strcat( data, " "); first = 0; strcat( data, bufarg); } if( strlen( data) > 0 ){ saacproto_PKLISTGETDATA_send( fd, "success", -1, data ); } return;}int PKLIST_GetPkTeamListArray( int teamnum, char *cdkey){ int i; for( i=0; i<maxteam; i++ ){ if( PkTeamList[i].use != 1 ) continue; if( PkTeamList[i].teamnum != teamnum ) continue; if( !strcmp( PkTeamList[i].leadercdkey, cdkey) ) return i; } return -1;}void PKLIST_GetPkTeamListDataOne( int fd, int ti){ char data[65535]; memset( data, 0, sizeof(data)); if( PKLIST_getStringPkTeamData( ti, data, sizeof(data)) <= 0 ){ log("* getStringPkTeamData( %d, %d):err\n", fd, ti); return; } saacproto_PKLISTGETDATA_send( fd, "success", -1, data );}int PKLIST_UpdateCheckRepeatBHistory( int meti, int menum, int toti, int tonum ){ int k; if( PkTeamList[meti].use != 1 ) return 0; for( k=0; k<MAXBATTLENUM; k++ ){ if( PkTeamList[meti].BHistory[k].use != 1 ) continue; if( PkTeamList[meti].BHistory[k].teamnum == tonum ){ return -1; } } if( PkTeamList[toti].use != 1 ) return 0; for( k=0; k<MAXBATTLENUM; k++ ){ if( PkTeamList[toti].BHistory[k].use != 1 ) continue; if( PkTeamList[toti].BHistory[k].teamnum == menum ){ return -1; } } return 1;}void PKLIST_UpdatePkTeamList( int fd, int menum, char *mecdkey, int tonum, char *tocdkey, int winer, int flg){extern gmsv gs[MAXCONNECTION]; int ret=0, i, meti, toti; if( (meti = PKLIST_GetPkTeamListArray( menum, mecdkey)) == -1 ) return; if( (toti = PKLIST_GetPkTeamListArray( tonum, tocdkey)) == -1 ) return; //andy_log log( "Update() [%d,%d] %s [%d,%d] ", meti, menum, (winer==0)?"勝":"負", toti, tonum); if( PKLIST_UpdateCheckRepeatBHistory( meti, menum, toti, tonum ) == -1 ){ log( " err Repeat !!\n"); }else{ log( "\n"); if( (ret = PKLIST_UpdateOnePkTeamData( meti, tonum, (winer==0)?1:0 ) ) != CODE_OK ){ log( "UpdateOnePkTeamData( %d,%d,%d) err %d !!\n", meti, toti, (winer==0)?1:0, ret); return; } if( (ret = PKLIST_UpdateOnePkTeamData( toti, menum, (winer==1)?1:0 ) ) != CODE_OK ){ log( "*UpdateOnePkTeamData( %d,%d,%d) err %d !!\n", toti, meti, (winer==1)?0:1, ret); return; } for (i = 0 ; i < MAXCONNECTION ; i ++ ) { //送del到game server if ( gs[i].use && gs[i].name[0] ) { PKLIST_GetPkTeamListDataOne( i, meti); PKLIST_GetPkTeamListDataOne( i, toti); } } //備份 PKLIST_BackupPkTeamListfromFile( "pklist", "pk_list_team.txt" ); }}void PKLIST_CheckRepeatBattleHistory( void){ int i, j, k, find=0; log( "\n_CheckRepeatBattleHistory()\n"); for( i=0; i<maxteam; i++ ){ if( PkTeamList[i].use != 1 )continue; find =0; for( j=0; j<MAXBATTLENUM; j++){ if( PkTeamList[i].BHistory[j].use != 1 ) continue; for( k=j+1; k<MAXBATTLENUM; k++ ){ if( PkTeamList[i].BHistory[k].use != 1 ) continue; if( PkTeamList[i].BHistory[j].teamnum == PkTeamList[i].BHistory[k].teamnum ){ PkTeamList[i].BHistory[k].use = 0; PkTeamList[i].BHistory[k].teamnum = -1; //andy_log log( "ANDY err Repeat Battle array:%d [%d]team:%d\n", i, j, PkTeamList[i].BHistory[j].teamnum ); find = 1; } } }// if( find == 0 )continue; PkTeamList[i].battleplay = 0; PkTeamList[i].win = 0; PkTeamList[i].lost = 0; for( j=0; j<MAXBATTLENUM; j++){ if( PkTeamList[i].BHistory[j].use != 1 ) continue; if( PkTeamList[i].BHistory[j].flg == 1 ) PkTeamList[i].win++; if( PkTeamList[i].BHistory[j].flg == 0 ) PkTeamList[i].lost++; PkTeamList[i].battleplay++; } PkTeamList[i].score = (PkTeamList[i].win*3) - (PkTeamList[i].lost*1);//積分 if( PkTeamList[i].score >= DEFWINSCORE ){ PkTeamList[i].inside = 2; //錄取 }else if( PkTeamList[i].lost > DEFMAXBATTLENUM*DEFLOSERATE){// 0.7 = (1-勝率3成)*最高場次 PkTeamList[i].inside = 0; }else { PkTeamList[i].inside = 1; } }}//load檔int PKLIST_LoadPkTeamListfromFile( char *dirpath, char *listfilename ){ char line[512], filename[256], buf1[64]; FILE *fp = NULL, *efp=NULL; int i, count=0; if( PkTeamList == NULL ) return -1; sprintf( filename, "%s/%s", dirpath, listfilename); log( "LoadPkTeamListfromFile( file:%s) \n", filename); if( (fp = fopen( filename, "r" )) == NULL ){ log( "can't load file:%s !\n", filename); return -1; } sprintf( filename, "%s/%s", dirpath, "err1.txt"); if( (efp = fopen( filename, "w+" )) == NULL ){ log( "can't load file:%s !\n", filename);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -