📄 deathcontend.c
字号:
sprintf(szMsg,"你的队里 %s 转生数 %d 转,未达比赛标准喔!",CHAR_getChar(pindex,CHAR_NAME),CHAR_getInt(pindex,CHAR_TRANSMIGRATION));
CHAR_talkToCli(charaindex,-1,szMsg,CHAR_COLORYELLOW);
return FALSE;
}
}
return TRUE;
}
BOOL PKLIST_CheckPKReapetTeam( int menum, int tonum)
{
int meti, k, toti;
if( (meti=PKLIST_GetPkTeamListArrayFromNum( menum )) == -1 ){
return FALSE;
}
for( k=0; k<MAXBATTLENUM; k++){
if( PkTeamList[meti].BHistory[k].use == 0 ) continue;
if( PkTeamList[meti].BHistory[k].teamnum == tonum ){
return FALSE;
}
}
if( (toti=PKLIST_GetPkTeamListArrayFromNum( tonum )) == -1 ){
return FALSE;
}
for( k=0; k<MAXBATTLENUM; k++){
if( PkTeamList[toti].BHistory[k].use == 0 ) continue;
if( PkTeamList[toti].BHistory[k].teamnum == menum ){
return FALSE;
}
}
return TRUE;
}
BOOL PKLIST_JoinPKProcedures( int charaindex )
{
int i, j, teamnum, side=-1;
BOOL Finds = FALSE;
//andy_log
print("JoinPKProcedures( %d) \n", charaindex);
if( PKLIST_CheckPKSameTeam( charaindex) == FALSE ){
print("CheckPKSameTeam() err !!!\n");
return FALSE;
}
if( (teamnum = CHAR_getInt( charaindex, CHAR_PKLISTTEAMNUM)) < 0 ) return FALSE;
if( PKLIST_CheckLOCKTeam( teamnum) == FALSE ){
CHAR_talkToCli( charaindex, -1, "系统忙碌中,请稍後!", CHAR_COLORYELLOW);
return FALSE;
}
for( i=0; i<MAXJOINTEAM; i++ ){
if( PKProcedure[i].type == PKTYPE_STANDBY ){
if( PKProcedure[i].time + (5*60) < (int)time(NULL) ){
print( "太久未战斗\n");
if( PKProcedure[i].Team[0].use != 0 &&
PKLIST_CheckPklistInServerMap( i, 0) == TRUE &&
PKProcedure[i].Team[1].use != 0 &&
PKLIST_CheckPklistInServerMap( i, 0) == TRUE ){
if( CHAR_getWorkInt( PKProcedure[i].Team[0].toindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){
//andy_log
print("强制战斗!!\n");
BATTLE_CreateVsPlayer( PKProcedure[i].Team[0].toindex,
PKProcedure[i].Team[1].toindex );
}
}else{
PKLIST_warp( i, 0, 8250, 20, 20);
PKLIST_warp( i, 1, 8250, 22, 20);
PKLIST_DelPKProcedures( i, side, PKTYPE_WAIT);
PKLIST_DelPKProcedures( i, side, PKTYPE_WAIT);
PKProcedure[i].type = PKTYPE_WAIT;
}
}
continue;
}
for( j=0; j<2; j++ ){
if( PKProcedure[i].Team[j].use != 0 ){
if( PKLIST_CheckPklistInServerMap( i, j) == FALSE){
PKLIST_DelPKProcedures( i, j, PKTYPE_WAIT);
}
if( PKLIST_CheckPKReapetTeam( PKProcedure[i].Team[j].teamnum, teamnum ) == FALSE )
break;
continue;
}
side=(j+1)%2;
if( PKProcedure[i].Team[side].use != 0 ){
if( PKLIST_CheckPklistInServerMap( i, side) == FALSE){
PKLIST_DelPKProcedures( i, side, PKTYPE_WAIT);
continue;
}
if( PKLIST_CheckPKReapetTeam( PKProcedure[i].Team[side].teamnum,
teamnum ) == FALSE )
continue;
PKProcedure[i].type = PKTYPE_STANDBY;
PKProcedure[i].time = (int)time( NULL);
}else{
PKProcedure[i].type = PKTYPE_WAIT;
}
//-----------------------------------------------------------------------------
//载入队伍资料
PKProcedure[i].Team[j].teamnum = teamnum;
snprintf( PKProcedure[i].Team[j].cdkey, sizeof(PKProcedure[i].Team[j].cdkey),"%s",
CHAR_getChar( charaindex, CHAR_CDKEY) );
snprintf( PKProcedure[i].Team[j].name, sizeof(PKProcedure[i].Team[j].name),"%s",
CHAR_getChar( charaindex, CHAR_NAME) );
PKProcedure[i].Team[j].toindex = charaindex;
PKProcedure[i].Team[j].fd = getfdFromCharaIndex( charaindex);
PKProcedure[i].Team[j].use = 1;
//------------------------------------------------------------------------------
PKLIST_warp( i, j, PK_BATTLEMAP[i].floor, PK_BATTLEMAP[i].x-j, PK_BATTLEMAP[i].y );
Finds = TRUE;
break;
}
if( Finds == TRUE ) break;
}
if( Finds == FALSE ){
CHAR_talkToCli( charaindex, -1, "目前赛程中之队伍已满请稍後再试!", CHAR_COLORYELLOW);
return FALSE;
}
return TRUE;
}
void PKLIST_CheckTeamBeEnable( void)
{
int i, j;
for( i=0; i<MAXJOINTEAM; i++ ){
for( j=0; j<2; j++ ){
if( PKProcedure[i].Team[j].use == 0 ) continue;
PKLIST_CheckPklistInServerMap( i, j);//确认队伍是否成立
}
}
}
void PKLIST_warpOne( int charaindex, int fl, int x, int y )
{
int k;
if( !CHAR_CHECKINDEX( charaindex) ) return;
CHAR_warpToSpecificPoint( charaindex, fl, x, y);
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ){
for( k = 1; k < CHAR_PARTYMAX; k ++ ){
int subindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1+k );
if( !CHAR_CHECKINDEX( subindex ) )continue;
CHAR_warpToSpecificPoint( subindex, fl, x, y);
}
}
}
void PKLIST_warp( int ti, int side, int fl, int x, int y )
{
int k;
if( !CHAR_CHECKINDEX(PKProcedure[ti].Team[side].toindex) );
if( CHAR_getWorkInt( PKProcedure[ti].Team[side].toindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_LEADER ){
CHAR_warpToSpecificPoint( PKProcedure[ti].Team[side].toindex, fl, x, y);
CHAR_talkToCli( PKProcedure[ti].Team[side].toindex, -1, "请在此等待对战队伍!", CHAR_COLORYELLOW);
}else{
for( k = 0; k < CHAR_PARTYMAX; k ++ ){
int subindex = CHAR_getWorkInt( PKProcedure[ti].Team[side].toindex,
CHAR_WORKPARTYINDEX1+k );
if( !CHAR_CHECKINDEX( subindex ) )continue;
CHAR_talkToCli( subindex, -1, "请在此等待对战队伍!如时间超过10分後未有对战队伍,建议玩家可重原登後重新加入赛程。", CHAR_COLORYELLOW);
CHAR_warpToSpecificPoint( subindex, fl, x, y);
}
}
}
int PKLIST_GetPKProcedureArray( int menum )
{
int i, j;
for( i=0; i<MAXJOINTEAM; i++ ){
for( j=0; j<2; j++ ){
if( PKProcedure[i].Team[j].use == 0 ) continue;
if( PKProcedure[i].Team[j].teamnum == menum ) return i;
}
}
return -1;
}
BOOL PKLIST_CheckLOCKTeam( int menum)
{
int meti=-1;
if( (meti=PKLIST_GetPkTeamListArrayFromNum( menum )) == -1 ){
return FALSE;
}
if( PkTeamList[meti].read > (int)time(NULL) ){
return FALSE;
}
return TRUE;
}
void PKLIST_LOCKTeam( int menum)
{
int meti=-1;
if( (meti=PKLIST_GetPkTeamListArrayFromNum( menum )) == -1 ){
return;
}
PkTeamList[meti].read = (int)time(NULL)+60;
}
void PKLIST_UNLOCKTeam( int menum)
{
int meti=-1;
if( (meti=PKLIST_GetPkTeamListArrayFromNum( menum )) == -1 ){
return;
}
PkTeamList[meti].read = 0;
}
void PKLIST_Sort_PKListSort( void)
{
int i, j, k, last=-1;
char data[65535*3], buf[512];
for( i=0; i<MAXTEAMNUM; 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;
}
break;
}
if( last == -1 ) continue;
for( j=548; j>=last; j-- ){
PKListSort[j+1] = PKListSort[j];
}
PKListSort[last]=i;
}
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 );
strcat(data,buf);
}
PKLIST_HandleChartsMess(0,data,2,0);
}
//正式赛
void ABATTLE_InitABattle( int maxnums )
{
int i,j,k;
if( maxnums<1 || maxnums >= MAXBAFLOOR) return;
memset( ABLevelup, 0, sizeof(ABLevelup));
for( k=0; k<MAXBAHEAD; k++ ){
ABFloor[k]=(maxnums);
for( i=0; i<MAXBAFLOOR; i++){
for( j=0; j<MAXNOWBATTLE; j++)
NowABattle[k][i][j]=NULL;
}
}
for( i=0; i<MAXBATTLEPAGE; i++){
InBattle[i]=NULL;
}
for( i=0; i<MAXBAHEAD; i++){
if( (headABattle[i] = ArrangeBattleC_getNew()) == NULL ){
print("err can't get headABattle NULL \n");
return;
}
headABattle[i]->top = NULL;
for( j=0; j<MAXNOWBATTLE; j++){
if( NowABattle[i][0][j] != NULL )continue;
NowABattle[i][0][j] = headABattle[i];
headABattle[i]->fl = 0;
headABattle[i]->code = j;
break;
}
if( j >= MAXNOWBATTLE ) return;
ABATTLE_CreateNet( headABattle[i], i, 0, maxnums);
}
{
FILE *fp=NULL;
int count=0;
char buf[256], buf1[256], buf2[256], filename[256];
for( i=0; i<MAXBAHEAD; i++ ){
sprintf( filename, "abattle_%d.txt", i);
if( (fp=fopen( filename, "r")) == NULL ) continue;
count=0;
while( fgets( buf, sizeof(buf)-1, fp) ){
if( getStringFromIndexWithDelim( buf , "|", 1, buf1, sizeof( buf1)) == FALSE ) continue;
if( getStringFromIndexWithDelim( buf , "|", 2, buf2, sizeof( buf2)) == FALSE ) continue;
//andy_log
print("ti:%d", i);
NowABattle[i][maxnums][count]->teamnum = atoi( buf1);
snprintf( NowABattle[i][maxnums][count]->teamname,
sizeof( NowABattle[i][maxnums][count]->teamname),"%s", buf2);
if( NowABattle[i][maxnums][count]->teamnum >= 0 )
NowABattle[i][maxnums][count]->use = 1;
//andy_log
print("NowABattle[%d][%d][%d]. %x[%d,%d,%s]\n",
i, maxnums, count,
NowABattle[i][maxnums][count],
NowABattle[i][maxnums][count]->use,
NowABattle[i][maxnums][count]->teamnum,
NowABattle[i][maxnums][count]->teamname );
count++;
}
fclose( fp);
//remove( filename);
}
}
maxbati = MAXBAHEAD;
maxfloor = maxnums;
}
int ABATTLE_CreateNet( ArrangeBattleC *now, int ti, int fl, int maxfl)
{
int i,j;
ArrangeBattleC *news=NULL;
//andy_log
print( "CreateNet( %d,%d)\n", ti, fl);
if( fl != 0 ){
for( j=0; j<MAXNOWBATTLE; j++){
if( NowABattle[ti][fl][j] != NULL )continue;
//andy_log
print(" create -> NowABattle[%d][%d][%d]\n", ti, fl, j);
NowABattle[ti][fl][j] = now;
now->fl = fl;
now->code = j;
break;
}
if( j >= MAXNOWBATTLE ) return 0;
}
if( fl < maxfl ){
for( i=0; i<2; i++){
news=NULL;
if( (news = ArrangeBattleC_getNew()) == NULL ){
//andy_log
print("err can't get news NULL\n");
return 0;
}
now->next[i] = news;
news->top = now;
if( ABATTLE_CreateNet( news, ti, fl+1, maxfl) == 0 ){
//andy_log
print("err net free %x \n", news);
free( news );
now->next[i] = NULL;
return 0;
}
}
}
return 1;
}
void ABATTLE_ShowNet( ArrangeBattleC *now, int fl)
{
int i;
if( now == NULL ) return;
if( now->fl == fl ){
print(" [%d,%d,%s] %x,top:%x\n", now->use, now->teamnum, now->teamname, now,
now->top );
}
for( i=0; i<2; i++){
if( now->next[i] == NULL )continue;
ABATTLE_ShowNet( now->next[i], fl);
}
}
void ABATTLE_ShowBattlefromFl( int ti, int fl)
{
int j, total=0;
if( fl<0 ) return;
if( ti<0 || ti >= MAXBAHEAD ) return;
print("headABattle:%x\n", headABattle);
ABATTLE_ShowNet( headABattle[ti], fl);
print("\nNOWBATTLE:\n");
if( fl<0 || fl >= MAXBAFLOOR) return;
for( j=0; j<MAXNOWBATTLE; j++){
if( NowABattle[ti][fl][j] == NULL )continue;
if( j!=0 && j%8==0) print("\n");
print(" [%d,%d,%s] %x, top:%x",
NowABattle[ti][fl][j]->use, NowABattle[ti][fl][j]->teamnum,
NowABattle[ti][fl][j]->teamname, NowABattle[ti][fl][j],
NowABattle[ti][fl][j]->top );
total++;
}
print("\ntotal:%d\n", total);
}
BOOL ABATTLE_InsertBattle( ArrangeBattleC *aB)
{
ArrangeBattleC *aBo=NULL;
int i;
if( aB == NULL ) return FALSE;
for( i=0; i<MAXBATTLEPAGE; i++){
if( InBattle[i] != NULL ) continue;
if( (aBo=aB->next[0])==NULL || aBo->use == 0 || aBo->type > 0 ) return FALSE;
if( (aBo=aB->next[1])==NULL || aBo->use == 0 || aBo->type > 0 ) return FALSE;
InBattle[i] = aB;
InBattle[i]->next[0]->type =1;
InBattle[i]->next[1]->type =1;
print("InsertBattle[%d,%s vs %d,%s]\n",
InBattle[i]->next[0]->teamnum, InBattle[i]->next[0]->teamname,
InBattle[i]->next[1]->teamnum, InBattle[i]->next[1]->teamname );
#ifdef _DEATH_CONTENDTEST
aB->time = (int)time(NULL)+30; //战斗时间
#else
aB->time = (int)time(NULL)+(5*60); //战斗时间
#endif
aB->type = 1; // 战斗旗标
return TRUE;
}
return FALSE;
}
void ABATTLE_EnterBattle( ArrangeBattleC *aB)
{
ArrangeBattleC *aBtop=NULL;
ArrangeBattleC *aBo=NULL;
if( (aBtop=aB->top) == NULL ){
//andy_log
print("del (aBtop=aB->top) NULL !\n");
return;
}
aBtop->teamnum = aB->teamnum;
snprintf( aBtop->teamname, sizeof(aBtop->teamname),"%s", aB->teamname);
aBtop->type = 0;
aBtop->use = 1;
if( (aBo=aBtop->next[0]) != NULL ){
aBo->use=0;
aBo->teamnum=-1;
}
if( (aBo=aBtop->next[1]) != NULL ){
aBo->use=0;
aBo->teamnum=-1;
}
}
void ABATTLE_EliminateBattlefromFl( ArrangeBattleC *aB)
{
ArrangeBattleC *aBtop=NULL;
if( aB == NULL ) return;
aB->use=0;
aB->type = 0;
aB->teamnum = -1;
free( aB);
}
int ABATTLE_FindBattlefromFl( int ti, int fl)
{
int i, j, side=0, count=0;
ArrangeBattleC *aBo=NULL;
ArrangeBattleC *aB1=NULL;
ArrangeBattleC *aB2=NULL;
//andy_log
print( "FindBattlefromFl(%d,%d)\n", ti, fl);
for( i=0; i<MAXNOWBATTLE; i++){
if( NowABattle[ti][fl][i] == NULL )continue;
aBo = NowABattle[ti][fl][i];
for( j=0; j<2; j++){
if( (aB1=aBo->next[j]) == NULL || aB1->use == 0 || aB1->type > 0 )continue;
side = (j+1)%2;
aB2=aBo->next[side];
if( aB2 == NULL || aB2->use == 0 || aB2->teamnum == -1 ){ //没有对手
}else{
if( ABATTLE_InsertBattle( aBo) == FALSE ){
return -1;
}else{
char token[256];
int playernum = CHAR_getPlayerMaxNum();
sprintf( token, "%s队 VS %s队 5分钟後决斗。", aB1->teamname, aB2->teamname );
PKLIST_shoutToAll( token, -1, -1);
count++;
// 把排入赛程的人员传入地图 8250
for(i=0;i<playernum;i++){
if(CHAR_getCharUse(i) == FALSE) continue;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -