?? npc_fmwarpman.c
字號:
CHAR_getInt(meindex, CHAR_Y));
NPC_talkToFloor( floor, fmpks[fmpks_pos].host_index, -1, "因未滿二十人而離場" );
#ifdef _DEATH_FAMILY_STRUCT // WON ADD 家族戰(zhàn)存放勝負資料
{
char out[256];
sprintf( out, "[%s](%d) 因未滿二十人棄權", fmpks[fmpks_pos].host_name/* .host_index*/, num1 );
saacproto_FM_PK_STRUCT_send( acfd, out );
}
#endif
}
}
#endif
}
else if (tm1.tm_min > CHAR_getWorkInt(meindex, NPC_WORK_TIMEFLAG))
{
char buf[256];
int clock = 0;
CHAR_setWorkInt(meindex, NPC_WORK_TIMEFLAG, tm1.tm_min);
clock = ((fmpks[fmpks_pos].dueltime % 100) + fmpks[fmpks_pos].prepare_time) - tm1.tm_min;
if (clock >= 60) clock = clock - 60;
sprintf(buf, "距離對戰(zhàn)時間還剩下:%4d分鐘", clock);
NPC_talkToFloor(floor, fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_index, buf);
}
}
}else if (CHAR_getWorkInt(meindex, NPC_WORK_MODEFLAG) == NPC_STATEBUSY){
// 檢查場內人數(shù)、判斷勝負
int num1 = 0, num2 = 0;
int winflag = 0;
int floor = CHAR_getWorkInt(meindex, NPC_WORK_WARPFLOOR);
int meid = CHAR_getWorkInt(meindex, NPC_WORK_ID);
print("\n won ==> check_winner : npc_meid(%d)", meid );
NPC_GetPKFMNum(floor, fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_index, &num1, &num2);
NPC_FMBATTLESET(floor, fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_index, 1);
CheckLeavePK(meindex, floor, fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_index);
if (meid > MANORNUM){
if (tm1.tm_min == FMWARPMAN_CLEANPLACE){
// 判斷勝負、WARP離場、設定NPC狀態(tài)
NPC_BattleOut(fmpks[fmpks_pos].host_index, fmpks[fmpks_pos].guest_index);
NPC_FMBATTLESET(floor, fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_index, -1);
if (fmpks[fmpks_pos].win == 0){// 生存戰(zhàn)
if (num1 > num2)
winflag = 1;
else if(num1 < num2)
winflag = 2;
else
winflag = 3;
}else if (fmpks[fmpks_pos].win == 1){ // 打飛戰(zhàn)
if ((CHAR_getWorkInt(meindex, NPC_WORK_FMNUMI) - num1) < (CHAR_getWorkInt(meindex, NPC_WORK_FMNUMII) - num2))
winflag = 1;
else if ((CHAR_getWorkInt(meindex, NPC_WORK_FMNUMI) - num1) > (CHAR_getWorkInt(meindex, NPC_WORK_FMNUMII) - num2))
winflag = 2;
else
winflag = 3;
}
}
}
if ((num1 == 0) && (num2 != 0)){
winflag = 2;
}else if ((num2 == 0) && (num1 != 0)){
winflag = 1;
}else if ((num1 == 0) && (num2 == 0)){
winflag = 3;
}
if (winflag > 0 && winflag < 3){
#ifdef _MANOR_PKRULE
if(meid > MANORNUM){
#endif
#ifdef _DEATH_FAMILY_GM_COMMAND // WON ADD 家族戰(zhàn)GM指令
{
int i, win_index = -1, loser_index = -1;
char *win_name, *loser_name, msg[256] = {0}, token[256] = {0};
struct tm tm1;
int n1 = 0, n2 = 0;
// FILE *f;
if(winflag == 1){
win_index = fmpks[fmpks_pos].host_index;
win_name = fmpks[fmpks_pos].host_name;
n1 = num1;
loser_index = fmpks[fmpks_pos].guest_index;
loser_name = fmpks[fmpks_pos].guest_name;
n2 = num2;
}else if(winflag == 2){
win_index = fmpks[fmpks_pos].guest_index;
win_name = fmpks[fmpks_pos].guest_name;
n1 = num2;
loser_index = fmpks[fmpks_pos].host_index;
loser_name = fmpks[fmpks_pos].host_name;
n2 = num1;
}else{
win_index = fmpks[fmpks_pos].host_index;
win_name = fmpks[fmpks_pos].host_name;
loser_index = fmpks[fmpks_pos].guest_index;
loser_name = fmpks[fmpks_pos].guest_name;
}
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
if(winflag == 1 || winflag == 2){
sprintf( msg, "[%s](%d)人 勝 [%s](%d)人", win_name, n1, loser_name, n2 );
sprintf( token, "戰(zhàn)況播報: %s", msg );
}else if( winflag == 3 ){
sprintf( msg, "[%s] 平手 [%s]", win_name, loser_name );
sprintf( token, "戰(zhàn)況播報: %s", msg );
}
#ifdef _DEATH_FAMILY_STRUCT // WON ADD 家族戰(zhàn)存放勝負資料
{
char out[256] = {0};
sprintf( out, "%d/%d/%d:%d %s", tm1.tm_mon+1, tm1.tm_mday, tm1.tm_hour, tm1.tm_min, msg );
saacproto_FM_PK_STRUCT_send( acfd, out );
}
#endif
for( i=0 ; i< playernum ; i++ ){
if( CHAR_CHECKINDEX( i ) == FALSE ) continue;
CHAR_talkToCli( i, -1, token, CHAR_COLORYELLOW);
}
/*
if( (f = fopen( "d_fm_pk_log.txt", "a+" ) ) ){
fprintf( f, "%d/%d/%d:%d %s\n", tm1.tm_mon+1, tm1.tm_mday, tm1.tm_hour, tm1.tm_min, msg );
fclose( f );
}else{
print("\n open file (d_fm_pk_log.txt) Err !!");
}
*/
}
#else
// 流浪家族pk 過聲望
if (winflag == 1){
saacproto_ACFixFMPK_send(acfd,
fmpks[fmpks_pos].host_name,
fmpks[fmpks_pos].host_index + 1,
fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_name,
fmpks[fmpks_pos].guest_index + 1,
fmpks[fmpks_pos].guest_index);
} else {
saacproto_ACFixFMPK_send(acfd,
fmpks[fmpks_pos].guest_name,
fmpks[fmpks_pos].guest_index + 1,
fmpks[fmpks_pos].guest_index,
fmpks[fmpks_pos].host_name,
fmpks[fmpks_pos].host_index + 1,
fmpks[fmpks_pos].host_index);
}
#endif
#ifdef _MANOR_PKRULE
}
#endif
{
if (meid > 0 && meid <= MANORNUM){// CoolFish 2002/2/25 Change MANOR -> MANORNUM
#ifdef _NEW_MANOR_LAW
int i,iFmIndex1,iFmIndex2,iCharindex;
#endif
fmpks[fmpks_pos + 1].flag = FMPKS_FLAG_MANOR_BATTLEEND;
if (winflag == 1){
char token[256];
sprintf( token, " (%d:%d) %d/%d/%d",
tm1.tm_hour, tm1.tm_min,
tm1.tm_year+1900, tm1.tm_mon+1, tm1.tm_mday);
saacproto_ACFixFMPoint_send(acfd,
fmpks[fmpks_pos].host_name,
fmpks[fmpks_pos].host_index + 1,
fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_name,
fmpks[fmpks_pos].guest_index + 1,
fmpks[fmpks_pos].guest_index, meid);
//Syu 增加莊園戰(zhàn)勝負Log
Logfmpk(
fmpks[fmpks_pos].host_name,
fmpks[fmpks_pos].host_index,
num1,
fmpks[fmpks_pos].guest_name,
fmpks[fmpks_pos].guest_index,
num2, token, "", "", 2);
#ifdef _NEW_MANOR_LAW
// 原家族守住了莊園,家族成員可得到石幣
iFmIndex1 = fmpks[fmpks_pos].host_index;
for(i=0;i<FAMILY_MAXMEMBER;i++){
iCharindex = familyMemberIndex[iFmIndex1][i];
// 若在線上才給錢
if(iCharindex >= 0 && CHAR_getCharUse(iCharindex)){
// 獲得金錢 = 個人氣勢 * 5000
int iAddGold = ((float)CHAR_getInt(iCharindex,CHAR_MOMENTUM)/100.0f) * 5000.0f;
int iGold = CHAR_getInt(iCharindex,CHAR_BANKGOLD),iMaxGold;
// 先放入個人銀行
if(iGold + iAddGold > CHAR_MAXBANKGOLDHAVE){
CHAR_setInt(iCharindex,CHAR_BANKGOLD,CHAR_MAXBANKGOLDHAVE);
// 個人銀行放不下了,放到個人身上
iAddGold = iGold + iAddGold - CHAR_MAXBANKGOLDHAVE;
iGold = CHAR_getInt(iCharindex,CHAR_GOLD);
iMaxGold = CHAR_getMaxHaveGold(iCharindex);
if(iGold + iAddGold > iMaxGold) CHAR_setInt(iCharindex,CHAR_GOLD,iMaxGold);
else CHAR_setInt(iCharindex,CHAR_GOLD,iGold + iAddGold);
LogFMPKGetMomey(CHAR_getChar(iCharindex,CHAR_FMNAME),
CHAR_getChar(iCharindex,CHAR_CDKEY),
CHAR_getChar(iCharindex,CHAR_NAME),
CHAR_getInt(iCharindex,CHAR_MOMENTUM),iAddGold,0);
}
else{
CHAR_setInt(iCharindex,CHAR_BANKGOLD,iGold + iAddGold);
LogFMPKGetMomey(CHAR_getChar(iCharindex,CHAR_FMNAME),
CHAR_getChar(iCharindex,CHAR_CDKEY),
CHAR_getChar(iCharindex,CHAR_NAME),
CHAR_getInt(iCharindex,CHAR_MOMENTUM),iAddGold,1);
}
CHAR_talkToCli(iCharindex,-1,"辛苦了!守護住莊園的獎金已匯入你的個人銀行",CHAR_COLORRED);
}
}
#endif
}
else if (winflag == 2){
char token[256];
sprintf( token, " (%d:%d) %d/%d/%d",
tm1.tm_hour, tm1.tm_min,
tm1.tm_year+1900, tm1.tm_mon+1, tm1.tm_mday);
saacproto_ACFixFMPoint_send(acfd,
fmpks[fmpks_pos].guest_name,
fmpks[fmpks_pos].guest_index + 1,
fmpks[fmpks_pos].guest_index,
fmpks[fmpks_pos].host_name,
fmpks[fmpks_pos].host_index + 1,
fmpks[fmpks_pos].host_index, meid);
//Syu 增加莊園戰(zhàn)勝負Log
Logfmpk(
fmpks[fmpks_pos].guest_name,
fmpks[fmpks_pos].guest_index,
num2,
fmpks[fmpks_pos].host_name,
fmpks[fmpks_pos].host_index,
num1, token, "", "", 2);
}
CHAR_setWorkInt(meindex, NPC_WORK_MODEFLAG, NPC_STATEFREE);
CHAR_setInt(meindex, CHAR_LOOPINTERVAL, FMWARPMAN_FREE_LOOPTIME);
print("FMWarpMan State:%d\n", CHAR_getWorkInt(meindex, NPC_WORK_MODEFLAG));
#ifdef _NEW_MANOR_LAW
// 雙方的個人及家族氣勢都要歸零
iFmIndex1 = fmpks[fmpks_pos].host_index;
iFmIndex2 = fmpks[fmpks_pos].guest_index;
for(i=0;i<FAMILY_MAXMEMBER;i++){
iCharindex = familyMemberIndex[iFmIndex1][i];
// 若有在線上則清除,不在線上的在登入游戲時清除
if(iCharindex >= 0 && CHAR_getCharUse(iCharindex)){
CHAR_setInt(iCharindex,CHAR_MOMENTUM,0);
CHAR_talkToCli(iCharindex,-1,"莊園戰(zhàn)後個人及家族氣勢歸零",CHAR_COLORRED);
}
iCharindex = familyMemberIndex[iFmIndex2][i];
if(iCharindex >= 0 && CHAR_getCharUse(iCharindex)){
CHAR_setInt(iCharindex,CHAR_MOMENTUM,0);
CHAR_talkToCli(iCharindex,-1,"莊園戰(zhàn)後個人及家族氣勢歸零",CHAR_COLORRED);
}
}
#endif
}
}
if (winflag == 1)
{
CHAR_setWorkChar(meindex, NPC_WORK_WINFMNAME, fmpks[fmpks_pos].host_name);
}
else if (winflag == 2)
{
CHAR_setWorkChar(meindex, NPC_WORK_WINFMNAME, fmpks[fmpks_pos].guest_name);
}
NPC_WarpFamily(floor, fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_index,
CHAR_getInt(meindex, CHAR_FLOOR),
CHAR_getInt(meindex, CHAR_X),
CHAR_getInt(meindex, CHAR_Y));
if (meid > MANORNUM){// CoolFish 2002/2/25 Change MANOR -> MANORNUM
CHAR_setWorkInt(meindex, NPC_WORK_MODEFLAG, NPC_STATEWAIT);
CHAR_setInt(meindex, CHAR_LOOPINTERVAL, FMWARPMAN_WAIT_LOOPTIME);
}
}else if( winflag == 3 ){
if (meid > 0 && meid <= MANORNUM) // CoolFish 2002/2/25 Change MANOR -> MANORNUM
fmpks[fmpks_pos + 1].flag = FMPKS_FLAG_MANOR_BATTLEEND;
NPC_talkToFloor(floor, fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_index, "雙方平手,不分勝負!!");
NPC_WarpFamily(floor, fmpks[fmpks_pos].host_index,
fmpks[fmpks_pos].guest_index,
CHAR_getInt(meindex, CHAR_FLOOR),
CHAR_getInt(meindex, CHAR_X),
CHAR_getInt(meindex, CHAR_Y));
CHAR_setWorkInt(meindex, NPC_WORK_MODEFLAG, NPC_STATEWAIT);
CHAR_setInt(meindex, CHAR_LOOPINTERVAL, FMWARPMAN_WAIT_LOOPTIME);
}
}else if (CHAR_getWorkInt(meindex, NPC_WORK_MODEFLAG) == NPC_STATEWAIT){
// andy_edit 2002/07/29
if (tm1.tm_min == FMWARPMAN_CLEANPLACE)
CHAR_setInt(meindex, CHAR_LOOPINTERVAL, FMWARPMAN_FREE_LOOPTIME);
NPC_CleanPK(floor, meindex);
if (tm1.tm_min == 0){
CHAR_setWorkInt(meindex, NPC_WORK_MODEFLAG, NPC_STATEFREE);
// shan add
NPC_FMBATTLESET(floor, fmpks[fmpks_pos].host_index, fmpks[fmpks_pos].guest_index, -1);
CHAR_setInt(meindex, CHAR_LOOPINTERVAL, FMWARPMAN_FREE_LOOPTIME);
// 將 fmwarpman 初始化
CHAR_setWorkInt(meindex, NPC_WORK_FMNUMI, 0);
CHAR_setWorkInt(meindex, NPC_WORK_FMNUMII, 0);
CHAR_setWorkInt(meindex, NPC_WORK_TIMEFLAG, 0);
CHAR_setWorkInt(meindex, NPC_WORK_TALKFLAG, -1);
CHAR_setWorkChar(meindex, NPC_WORK_WINFMNAME, "");
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -