StoneAge/saac/deathcontend.c
2018-08-07 00:51:35 -07:00

1128 lines
31 KiB
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_CONTEND
PkTeamLists *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);
return -1;
}
while( fgets( line, sizeof( line), fp) ) {
if( strlen( line) <= 0 || line[0] == '#' ) continue;
if( count >= maxteam )break;
del_rn( line);
log( "#");
easyGetTokenFromBuf( line, '|', 1, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ){
fprintf( efp,"TEAMNUM err:%s", line);
continue;
}
PkTeamList[count].teamnum = atoi(buf1);
if( PkTeamList[count].teamnum < 0 ) continue;
easyGetTokenFromBuf( line, '|', 2, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
sprintf( PkTeamList[count].pathdir, "%s", buf1);
easyGetTokenFromBuf( line, '|', 3, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ){
if( strlen( buf1) <= 0 ){
fprintf( efp,"TEAMNAME err:%s", line);
continue;
}
continue;
}
sprintf( PkTeamList[count].teamname, "%s", buf1);
easyGetTokenFromBuf( line, '|', 4, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ){
if( strlen( buf1) <= 0 ){
fprintf( efp,"MASTER err:%s", line);
continue;
}
continue;
}
sprintf( PkTeamList[count].leadercdkey, "%s", buf1);
easyGetTokenFromBuf( line, '|', 5, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
PkTeamList[count].win = atoi(buf1);
easyGetTokenFromBuf( line, '|', 6, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
PkTeamList[count].lost = atoi(buf1);
easyGetTokenFromBuf( line, '|', 7, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
PkTeamList[count].battleplay = atoi(buf1);
easyGetTokenFromBuf( line, '|', 8, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
PkTeamList[count].score = atoi(buf1);
easyGetTokenFromBuf( line, '|', 9, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
PkTeamList[count].inside = atoi(buf1);
easyGetTokenFromBuf( line, '|', 10, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
PkTeamList[count].updata = atoi(buf1);
{
FILE *ffp=NULL;
char teamfilename[256], bufarg[256], buf2[256];
int readfirst = 1, k, bnum=0;
sprintf( teamfilename, "%s/%s/team_%d.txt", "pklist",
PkTeamList[count].pathdir, PkTeamList[count].teamnum );
if( (ffp=fopen( teamfilename, "r") ) == NULL ) continue;
while( fgets( bufarg, sizeof( bufarg), ffp) ) {
if( strlen( bufarg) <= 0 || bufarg[0] == '#' ) continue;
del_rn( bufarg);
if( readfirst == 1 ){
for( k=0; k<MAXTEAMMANNUM; k++){
easyGetTokenFromBuf( bufarg, '|', k+1, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
easyGetTokenFromBuf( buf1, ',', 1, buf2, sizeof( buf2 ));
if( strlen( buf2) <= 0 ){
if( strlen( buf1) <= 0 ){
fprintf( efp,"TEAMMAN err:%s", line);
continue;
}
continue;
}
sprintf( PkTeamList[count].MyTeamMans[k].cdkey, "%s", buf2);
easyGetTokenFromBuf( buf1, ',', 2, buf2, sizeof( buf2 ));
if( strlen( buf2) <= 0 ){
if( strlen( buf1) <= 0 ){
fprintf( efp,"TEAMMAN err:%s", line);
continue;
}
continue;
}
sprintf( PkTeamList[count].MyTeamMans[k].name, "%s", buf2);
PkTeamList[count].MyTeamMans[k].use = 1;
}
readfirst = 0;
continue;
}
if( bnum >= MAXBATTLENUM )break;//³¬¹ýÕ½¶·³¡´Î
for( k=0; k<10; k++){
easyGetTokenFromBuf( bufarg, '|', k+1, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
easyGetTokenFromBuf( buf1, ',', 1, buf2, sizeof( buf2 ));
if( strlen( buf2) <= 0 ) continue;
PkTeamList[count].BHistory[bnum].teamnum = atoi( buf2);
easyGetTokenFromBuf( buf1, ',', 2, buf2, sizeof( buf2 ));
if( strlen( buf2) <= 0 ) continue;
PkTeamList[count].BHistory[bnum].flg = atoi( buf2);
PkTeamList[count].BHistory[bnum].use = 1;
bnum++;
}
}
fclose( ffp);
}
PkTeamList[count].use = 1;
count++;
}
fclose( efp);
fclose( fp);
{
int k;
log( "\n");
for( i=0; i<maxteam; i++ ){
if( PkTeamList[i].use != 1 ) continue;
log("PkTeamList[%d] [%d|%d|%s|%s|%s|%d|%d|%d|%d|%d] \n", i,
PkTeamList[i].use,
PkTeamList[i].teamnum,
PkTeamList[i].teamname,
PkTeamList[i].pathdir,
PkTeamList[i].leadercdkey,
PkTeamList[i].win,
PkTeamList[i].lost,
PkTeamList[i].battleplay,
PkTeamList[i].score,
PkTeamList[i].inside
);
log( "\n");
for( k=0; k<MAXTEAMMANNUM; k++){
if( PkTeamList[i].MyTeamMans[k].use == 0 ) continue;
log( "[%s,%s]," , PkTeamList[i].MyTeamMans[k].cdkey,
PkTeamList[i].MyTeamMans[k].name );
}
log( "\n");
for( k=0; k<MAXBATTLENUM; k++){
if( PkTeamList[i].BHistory[k].use == 0 ) continue;
if( k!=0 && k%10 == 0 ) log( "\n");
log( "%d,%d|" , PkTeamList[i].BHistory[k].teamnum,
PkTeamList[i].BHistory[k].flg );
}
log( "\n");
}
log( "\n");
}
return 1;
}
//Backupµµ
int PKLIST_BackupPkTeamListfromFile( char *dirpath, char *listfilename )
{
char filename[256];
FILE *fp = NULL;
int i;
if( PkTeamList == NULL ) return -1;
sprintf( filename, "%s/%s", dirpath, listfilename);
log( "BackupPkTeamListfromFile( file:%s) \n", filename);
remove( filename);
if( (fp = fopen( filename, "w+" )) == NULL ){
log( "can't Backup file:%s !\n", filename);
return -1;
}
for( i=0; i<maxteam; i++ ){
if( PkTeamList[i].use != 1 ) continue;
fprintf( fp, "%d|%s|%s|%s|%d|%d|%d|%d|%d|%d\n",
PkTeamList[i].teamnum, PkTeamList[i].pathdir,
PkTeamList[i].teamname, PkTeamList[i].leadercdkey,
PkTeamList[i].win, PkTeamList[i].lost,
PkTeamList[i].battleplay, PkTeamList[i].score,
PkTeamList[i].inside, PkTeamList[i].updata );
{
FILE *ffp=NULL;
char teamfilename[256], bufarg[512], buf2[256];
int k;
sprintf( teamfilename, "%s/%s/team_%d.txt", "pklist",
PkTeamList[i].pathdir, PkTeamList[i].teamnum );
remove( teamfilename);
if( (ffp=fopen( teamfilename, "w+") ) == NULL ){
log( "can't Backup file:%s !\n", filename);
continue;
}
memset( bufarg, 0, sizeof( bufarg));
for( k=0; k<MAXTEAMMANNUM; k++){
if( PkTeamList[i].MyTeamMans[k].use == 0 ) continue;
// fprintf( ffp, "%s,%s\n",
// PkTeamList[i].MyTeamMans[k].cdkey, PkTeamList[i].MyTeamMans[k].name);
if( k!=0 ) strcat( bufarg, "|");
sprintf( buf2, "%s,%s",
PkTeamList[i].MyTeamMans[k].cdkey, PkTeamList[i].MyTeamMans[k].name);
strcat( bufarg, buf2);
}
fprintf( ffp, "%s\n", bufarg);
memset( bufarg, 0, sizeof( bufarg));
for( k=0; k<MAXBATTLENUM; k++){
if( PkTeamList[i].BHistory[k].use == 0 ) continue;
if( k!=0 ){
if( k%10 == 0 ){
fprintf( ffp, "%s\n", bufarg);
memset( bufarg, 0, sizeof( bufarg));
}else{
strcat( bufarg, "|");
}
}
sprintf( buf2, "%d,%d" , PkTeamList[i].BHistory[k].teamnum,
PkTeamList[i].BHistory[k].flg );
strcat( bufarg, buf2); // <-- check overflow!!!
}
if( strlen(bufarg) > 0 )
fprintf( ffp, "%s\n", bufarg);
fclose( ffp);
}
}
fclose( fp);
return 1;
}
//PKListSort[1000]
void PKLIST_SortTheCharts( int ti) //ÅÅÐаñ´¦Àí
{
extern gmsv gs[MAXCONNECTION];
int i, k, last=-1;
if( PkTeamList[ti].use != 1 ) return;
if( PkTeamList[ti].battleplay < 3 ) return;
for( k=0; k<550; k++){
if( PKListSort[k] == -1 )continue;
if( PKListSort[k] == ti ){
PKListSort[k] = -1;
}
}
for( k=549; k>=0; k-- ){
if( PKListSort[k] == -1 ){
last = k;
continue;
}
if( PkTeamList[ti].score > PkTeamList[PKListSort[k]].score ){
last = k;
continue;
}
break;
}
if( last == -1 ) return;
for( i=548; i>=last; i-- ){
PKListSort[i+1] = PKListSort[i];
}
log( "\nPKListSort[%d]=%d \n", PKListSort[last], ti);
PKListSort[last]=ti;
//¸üÐÂËùÓÐËÅ·þÆ÷
for (i=0; i<MAXCONNECTION; i++) {
if (gs[i].use && gs[i].name[0]) {
PKLIST_TheCharts( i, 2, 1);
}
}
{
char filename[256];
FILE *fp=NULL;
sprintf( filename, "%s/%s", "pklist", "Charts.txt" );
remove( filename);
if( (fp=fopen( filename, "w+")) == NULL ) return;
for( i=0; i<550; i++ ){
if( PKListSort[i] == -1 ) continue;
fprintf( fp, "%d|%s|%s|%s|%d|%d|%d|%d|%d|%d\n",
PkTeamList[PKListSort[i]].teamnum, PkTeamList[PKListSort[i]].pathdir,
PkTeamList[PKListSort[i]].teamname, PkTeamList[PKListSort[i]].leadercdkey,
PkTeamList[PKListSort[i]].win, PkTeamList[PKListSort[i]].lost,
PkTeamList[PKListSort[i]].battleplay, PkTeamList[PKListSort[i]].score,
PkTeamList[PKListSort[i]].inside, PkTeamList[PKListSort[i]].updata );
/*
fprintf( fp, "%dth ¶ÓÎé:%-32s ʤ:%-4d ¸º:%-4d ³¡Êý:%-4d »ý·Ö:%-4d\n",
i, PkTeamList[PKListSort[i]].teamname,
PkTeamList[PKListSort[i]].win, PkTeamList[PKListSort[i]].lost,
PkTeamList[PKListSort[i]].battleplay, PkTeamList[PKListSort[i]].score );
*/
}
fclose( fp);
}
}
void PKLIST_TheCharts( int fd, int type, int flg)
{
int i, first=1;
char data[65535*3], buf[512];
extern gmsv gs[MAXCONNECTION];
//andy_log
log("PKLIST_TheCharts( %d, %d) \n", type, flg);
switch( type){
case 1:
for( i=0 ; i < MAXCONNECTION ; i ++ ) { //ËÍdelµ½game server
if ( gs[i].use && gs[i].name[0] ) {
PKLIST_GetPkTeamListDataOne( i, flg);
}
}
break;
case 2: //ÅÅÐаñ
memset( data, 0, sizeof(data));
for( i=0; i<550; i++){
if( PKListSort[i] == -1 ) continue;
sprintf( buf, "%s|%d|%d|%d|%d",
PkTeamList[PKListSort[i]].teamname,
PkTeamList[PKListSort[i]].win, PkTeamList[PKListSort[i]].lost,
PkTeamList[PKListSort[i]].battleplay, PkTeamList[PKListSort[i]].score );
if( first == 0 ) strcat( data, " ");
first = 0;
strcat( data, buf);
}
if( strlen(data) > 0 )
saacproto_PKLISTCHARTS_send( fd, data, type, flg );
break;
case 3:
{
char filename[256];
FILE *fp=NULL;
PKLIST_Sort_PKListSort();
sprintf( filename, "%s/%s", "pklist", "hero.txt" );
remove( filename);
if( (fp=fopen( filename, "w+")) == NULL ) return;
for( i=0; i<550; i++ ){
if( PKListSort[i] == -1 ) continue;
fprintf( fp, "%d|%s|%s|%s|%d|%d|%d|%d|%d|%d\n",
PkTeamList[PKListSort[i]].teamnum, PkTeamList[PKListSort[i]].pathdir,
PkTeamList[PKListSort[i]].teamname, PkTeamList[PKListSort[i]].leadercdkey,
PkTeamList[PKListSort[i]].win, PkTeamList[PKListSort[i]].lost,
PkTeamList[PKListSort[i]].battleplay, PkTeamList[PKListSort[i]].score,
PkTeamList[PKListSort[i]].inside, PkTeamList[PKListSort[i]].updata );
}
fclose( fp);
}
break;
}
}
//±¸·Ý´æµµ
//loadµµ
int PKLIST_LoadUserfromFile( char *dirpath, char *listfilename )
{
char line[512], filename[256], buf1[64];
FILE *fp = NULL, *tfp=NULL, *bfp=NULL;
int i, count=0, teamn = 1;
if( PkTeamList == NULL ) return -1;
sprintf( filename, "%s/%s", dirpath, listfilename);
log( "PKLIST_LoadUserfromFile( 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, "d.txt");
if( (tfp = fopen( filename, "a+" )) == NULL ){
log( "can't load file:%s !\n", filename);
return -1;
}
sprintf( filename, "%s/%s", dirpath, "badteam.txt");
if( (bfp = fopen( filename, "a+" )) == NULL ){
log( "can't load file:%s !\n", filename);
return -1;
}
while( fgets( line, sizeof( line), fp) ) {
int spoint=2;
int ManNum=0, leve=1;
char StartS[256], dData[1024];
memset( dData, 0, sizeof(dData));
memset( StartS, 0, sizeof(StartS));
if( strlen( line) <= 0 || line[0] == '#' ) continue;
if( count >= maxteam )break;
del_rn( line);
//¶ÓÎéÃû³Æ ¶ÓÎéÐòºÅ
easyGetTokenFromBuf( line, ',', 1, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
sprintf( PkTeamList[count].teamname, "%s", buf1);
PkTeamList[count].teamnum = teamn++;
while( 1){
easyGetTokenFromBuf( line, ',', spoint++, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) break;
sprintf( StartS, "%s", buf1); //ÐÇϵ
easyGetTokenFromBuf( line, ',', spoint++, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) break;
sprintf( PkTeamList[count].MyTeamMans[ManNum].cdkey, "%s", buf1); //ÕʺÅ
easyGetTokenFromBuf( line, ',', spoint++, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) break;
sprintf( PkTeamList[count].MyTeamMans[ManNum].name, "%s", buf1); //ÈËÎïÃû
easyGetTokenFromBuf( line, ',', spoint++, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) break;
leve = atoi( buf1); //ÈËÎïµÈ¼¶
sprintf( dData, "%s,%s,%s,%d\n",
StartS, PkTeamList[count].MyTeamMans[ManNum].cdkey,
PkTeamList[count].MyTeamMans[ManNum].name, leve );
// strcat( dData, buf2);
fprintf( tfp, "%s", dData);
PkTeamList[count].MyTeamMans[ManNum].use = 1;
ManNum++;
if( ManNum>=MAXTEAMMANNUM )break;
}
if( ManNum == 0 ){
fprintf( bfp, "%s\n", line);
continue;
}
sprintf( PkTeamList[count].pathdir, "0x%x", getHash( PkTeamList[count].MyTeamMans[0].cdkey )&0xff);
sprintf( PkTeamList[count].leadercdkey, "%s", PkTeamList[count].MyTeamMans[0].cdkey );
PkTeamList[count].win = 0;
PkTeamList[count].lost = 0;
PkTeamList[count].battleplay = 0;
PkTeamList[count].score = 0;
PkTeamList[count].inside = 1;
PkTeamList[count].updata = 0;
PkTeamList[count].use = 1;
count++;
}
fclose( bfp);
fclose( tfp);
fclose( fp);
//Çå³ý
sprintf( filename, "%s/%s", dirpath, listfilename);
remove( filename);
{
int k;
log( "\n");
for( i=0; i<maxteam; i++ ){
if( PkTeamList[i].use != 1 ) continue;
log("PkTeamList[%d] [%d|%d|%s|%s|%s|%d|%d|%d|%d|%d] \n", i,
PkTeamList[i].use,
PkTeamList[i].teamnum,
PkTeamList[i].teamname,
PkTeamList[i].pathdir,
PkTeamList[i].leadercdkey,
PkTeamList[i].win,
PkTeamList[i].lost,
PkTeamList[i].battleplay,
PkTeamList[i].score,
PkTeamList[i].inside
);
for( k=0; k<MAXTEAMMANNUM; k++){
if( PkTeamList[i].MyTeamMans[k].use == 0 ) continue;
log( "[%s,%s]," , PkTeamList[i].MyTeamMans[k].cdkey,
PkTeamList[i].MyTeamMans[k].name );
}
log( "\n");
for( k=0; k<MAXBATTLENUM; k++){
if( PkTeamList[i].BHistory[k].use == 0 ) continue;
if( k!=0 && k%10 == 0 ) log( "\n");
log( "%d,%d|" , PkTeamList[i].BHistory[k].teamnum,
PkTeamList[i].BHistory[k].flg );
}
log( "\n");
}
log( "\n");
}
return 1;
}
//loadµµ
int PKLIST_CutStartUserfromFile( char *dirpath, char *listfilename )
{
char line[512], filename[256], buf1[64];
FILE *fp = NULL, *bfp=NULL;
if( PkTeamList == NULL ) return -1;
sprintf( filename, "%s/%s", dirpath, listfilename);
log( "CutStartUserfromFile( 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, "baduser.txt");
if( (bfp = fopen( filename, "a+" )) == NULL ){
log( "can't load file:%s !\n", filename);
return -1;
}
while( fgets( line, sizeof( line), fp) ) {
int leve=1;
char StartS[256], cdkey[256], name[256], dData[1024];
memset( dData, 0, sizeof(dData));
memset( StartS, 0, sizeof(StartS));
if( strlen( line) <= 0 || line[0] == '#' ) continue;
del_rn( line);
easyGetTokenFromBuf( line, ',', 1, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ){
fprintf( bfp, "%s\n", line);
continue;
}
sprintf( StartS, "%s", buf1); //ÐÇϵ
easyGetTokenFromBuf( line, ',', 2, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ){
fprintf( bfp, "%s\n", line);
continue;
}
sprintf( cdkey, "%s", buf1); //ÕʺÅ
easyGetTokenFromBuf( line, ',', 3, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ){
fprintf( bfp, "%s\n", line);
continue;
}
sprintf( name, "%s", buf1); //ÈËÎïÃû
easyGetTokenFromBuf( line, ',', 4, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ){
fprintf( bfp, "%s\n", line);
continue;
}
leve = atoi( buf1); //ÈËÎïµÈ¼¶
{
FILE *tfp=NULL;
sprintf( filename, "%s/a_%s.txt", dirpath, StartS);
if( (tfp = fopen( filename, "a+" )) == NULL ){
log( "can't load file:%s !\n", filename);
return -1;
}
fprintf( tfp, "%s\n", line);
fclose( tfp);
}
}
fclose( bfp);
fclose( fp);
return 1;
}
//loadµµ
int PKLIST_alteUserfromFile( char *dirpath, char *listfilename )
{
char line[512], filename[256], buf1[64];
FILE *fp = NULL, *bfp=NULL;
int i, j, k;
extern gmsv gs[MAXCONNECTION];
if( PkTeamList == NULL ) return -1;
sprintf( filename, "%s/%s", dirpath, listfilename);
log( "alteUserfromFile( 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, "err.txt");
if( (bfp = fopen( filename, "a+" )) == NULL ){
log( "can't load file:%s !\n", filename);
return -1;
}
fprintf( bfp, "====================\n");
while( fgets( line, sizeof( line), fp) ) {
char TeamName[256],Star[256],Cdkey[256],UserName[256];
if( strlen( line) <= 0 || line[0] == '#' ) continue;
del_rn( line);
//¶ÓÎé
easyGetTokenFromBuf( line, ',', 1, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
sprintf( TeamName, "%s", buf1);
//ÐÇϵ
easyGetTokenFromBuf( line, ',', 2, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
sprintf( Star, "%s", buf1);
//ÕʺÅ
easyGetTokenFromBuf( line, ',', 3, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
sprintf( Cdkey, "%s", buf1);
//ÈËÎïÃû
easyGetTokenFromBuf( line, ',', 4, buf1, sizeof( buf1 ));
if( strlen( buf1) <= 0 ) continue;
sprintf( UserName, "%s", buf1);
for( i=0; i<maxteam; i++ ){
if( PkTeamList[i].use != 1 ) continue;
if( strcmp( PkTeamList[i].teamname, TeamName ) )continue;
log( "reChange fine TeamName:%s\n", PkTeamList[i].teamname );
for( k=0; k<MAXTEAMMANNUM; k++){
if( PkTeamList[i].MyTeamMans[k].use == 0 ) continue;
if( strcmp( PkTeamList[i].MyTeamMans[k].cdkey, Cdkey ) ) continue;
if( !strcmp( PkTeamList[i].MyTeamMans[k].name, UserName ) ){
log( "already have user:[%s,%s]\n" , PkTeamList[i].MyTeamMans[k].cdkey,
PkTeamList[i].MyTeamMans[k].name );
fprintf( bfp, "already have user:[%s,%s]\n" , PkTeamList[i].MyTeamMans[k].cdkey,
PkTeamList[i].MyTeamMans[k].name );
continue;
}else{
snprintf( PkTeamList[i].MyTeamMans[k].name,
sizeof(PkTeamList[i].MyTeamMans[k].name),"%s", UserName );
log( "re [%d,%s] %d.[%s,%s]\n" ,
PkTeamList[i].teamnum, PkTeamList[i].teamname,
k, PkTeamList[i].MyTeamMans[k].cdkey,
PkTeamList[i].MyTeamMans[k].name );
fprintf( bfp, "re [%d,%s] %d.[%s,%s]\n" ,
PkTeamList[i].teamnum, PkTeamList[i].teamname,
k, PkTeamList[i].MyTeamMans[k].cdkey, PkTeamList[i].MyTeamMans[k].name );
}
break;
}
for( j=0 ; j < MAXCONNECTION ; j ++ ) { //ËÍdelµ½game server
if ( gs[j].use && gs[j].name[0] ) {
PKLIST_GetPkTeamListDataOne( j, i);
}
}
break;
}
}
fclose( bfp);
fclose( fp);
//Çå³ý
sprintf( filename, "%s/%s", dirpath, listfilename);
remove( filename);
PKLIST_CheckAllUser();
return 1;
}
void PKLIST_Sort_PKListSort( void)
{
int i, j, k, last=-1;
for( i=0; i<maxteam; i++){
last = -1;
for( k=549; k>=0; k-- ){
if( PkTeamList[i].score <= 0 ) continue;
if( PKListSort[k] == -1 ){
last = k;
continue;
}
if( PkTeamList[i].score > PkTeamList[PKListSort[k]].score ){
last = k;
continue;
}else if( PkTeamList[i].score == PkTeamList[PKListSort[k]].score ){
if( PkTeamList[i].updata < PkTeamList[PKListSort[k]].updata ){
last = k;
continue;
}else{
continue;
}
}
break;
}
if( last == -1 ) continue;
for( j=548; j>=last; j-- ){
PKListSort[j+1] = PKListSort[j];
}
PKListSort[last]=i;
}
}
void PKLIST_CheckAllUser( void)
{
int i, k;
FILE *fp=NULL, *ffp=NULL;
char output[CHARDATASIZE], buf1[256];
if( (fp=fopen( "checkuser.txt", "w+")) == NULL ) return;
if( (ffp=fopen( "checkteam.txt", "w+")) == NULL ) return;
log( "PKLIST_CheckAllUser()\n");
for( i=0; i<maxteam; i++ ){
if( PkTeamList[i].use != 1 ) continue;
for( k=0; k<MAXTEAMMANNUM; k++){
if( PkTeamList[i].MyTeamMans[k].use == 0 ) continue;
memset( output, 0, sizeof(output));
if( loadCharNameAndOption( PkTeamList[i].MyTeamMans[k].cdkey, output, sizeof(output)) == 0){
/* fprintf( fp,"%d,[%s,%d,%s,%s] err Can't Get CharData!!\n",
i,
PkTeamList[i].teamname, PkTeamList[i].teamnum,
PkTeamList[i].MyTeamMans[k].cdkey, PkTeamList[i].MyTeamMans[k].name );
*/
fprintf( fp,"%s,%s\n",
PkTeamList[i].MyTeamMans[k].cdkey, PkTeamList[i].MyTeamMans[k].name );
}else{
easyGetTokenFromBuf(output, '|', 1, buf1, sizeof(buf1));
if( strlen(buf1) <= 0 ) continue;
if( strcmp( PkTeamList[i].MyTeamMans[k].name, buf1) ){
fprintf( ffp,"re %d,[%s,%d,%s] name:%s->%s\n",
i, PkTeamList[i].teamname, PkTeamList[i].teamnum,
PkTeamList[i].MyTeamMans[k].cdkey, PkTeamList[i].MyTeamMans[k].name,
buf1 );
snprintf( PkTeamList[i].MyTeamMans[k].name, sizeof(PkTeamList[i].MyTeamMans[k].name),
"%s", buf1);
}
}
}
}
fclose( fp);
fclose( ffp);
}
/*
ÐòºÅ|¶ÓÃû|ÕʺÅ_ÈËÎïÃû|ÕʺÅ_ÈËÎïÃû|ÕʺÅ_ÈËÎïÃû|ÕʺÅ_ÈËÎïÃû|ÕʺÅ_ÈËÎïÃû|ʤ|°Ü|0
#ÐòºÅ|Ŀ¼|¶ÓÃû|ÕʺÅ_ÈËÎïÃû|ʤ|°Ü|³¡|»ý·Ö|0
1|0x10|µÚ1¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
2|0x10|µÚ2¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
3|0x10|µÚ3¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
4|0x10|µÚ4¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
5|0x10|µÚ5¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
6|0x10|µÚ6¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
7|0x10|µÚ7¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
8|0x10|µÚ8¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
9|0x10|µÚ9¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
10|0x10|µÚ10¶Ó|cdkey|ʤ|°Ü|³¡|»ý·Ö|0
*/
#endif