亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? char_angel.c

?? 石器時代8.0服務端完整源代碼。可以直接編譯
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "version.h"
#ifdef _ANGEL_SUMMON
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>   // shan
#include <ctype.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h>
#include "common.h"
#include "char_base.h"
#include "char_data.h"
#include "char.h"
#include "lssproto_serv.h"
#include "item.h"
#include "item_event.h"
#include "buf.h"
#include "object.h"
#include "map_deal.h"
#include "saacproto_cli.h"
#include "readmap.h"
#include "handletime.h"
#include "char_event.h"
#include "npccreate.h"
#include "addressbook.h"
#include "item_event.h"
#include "magic_base.h"
#include "magic.h"
#include "chatmagic.h"
#include "configfile.h"
#include "log.h"
#include "anim_tbl.h"
#include "encount.h"
#include "battle.h"
#include "pet_skill.h"
#include "util.h"
#include "enemy.h"
#include "npcutil.h"
#include "pet.h"
#include "family.h"
#include "defend.h"
#include "npcserver.h"


struct MissionInfo missionlist[MAXMISSION];
int mission_num =0;
struct MissionTable missiontable[MAXMISSIONTABLE];

//#define ANGELITEM 2884 //20701	//使者的信物 道具編號
//#define HEROITEM 2885 //20702	//勇者的信物 道具編號

extern int AngelReady;

char* getMissionNameInfo( int charaindex, char* nameinfo)
{
	sprintf( nameinfo, "%s:%s", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME) );
	return nameinfo;
}

int checkIfAngel( int charaindex)
{
	int i;
	char nameinfo[512];

	//sprintf( nameinfo, "%s:%s", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME) );
	getMissionNameInfo( charaindex, nameinfo);
	for( i =0; i <MAXMISSIONTABLE; i++) {
		if( missiontable[i].angelinfo[0] == NULL)
			continue;
		if( !strcmp( nameinfo, missiontable[i].angelinfo) ) {
			return i;
		}
		else if( !strcmp( nameinfo, missiontable[i].heroinfo) ) {
			return i;
		}
	}
	return -1;
}

int checkIfOnlyAngel( int charaindex)
{
	int i;
	char nameinfo[512];

	//sprintf( nameinfo, "%s:%s", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME) );
	getMissionNameInfo( charaindex, nameinfo);
	for( i =0; i <MAXMISSIONTABLE; i++) {
		if( missiontable[i].angelinfo[0] == NULL)
			continue;
		if( !strcmp( nameinfo, missiontable[i].angelinfo) ) {
			return i;
		}
	}
	return -1;
}

int checkIfOnlyHero( int charaindex)
{
	int i;
	char nameinfo[512];

	//sprintf( nameinfo, "%s:%s", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME) );
	getMissionNameInfo( charaindex, nameinfo);
	for( i =0; i <MAXMISSIONTABLE; i++) {
		if( missiontable[i].angelinfo[0] == NULL)
			continue;
		if( !strcmp( nameinfo, missiontable[i].heroinfo) ) {
			return i;
		}
	}
	return -1;
}

int checkIfAngelByName( char* nameinfo)
{
	int i;

	for( i =0; i <MAXMISSIONTABLE; i++) {
		if( missiontable[i].angelinfo[0] == NULL)
			continue;
		if( !strcmp( nameinfo, missiontable[i].angelinfo) ) {
			return i;
		}
		else if( !strcmp( nameinfo, missiontable[i].heroinfo) ) {
			return i;
		}
	}
	return -1;
}


void addAngelData( int angelindex, int heroindex, int mission, int flag)
{
	int i;
	char buf[1024];
	char angelinfo[512];
	char heroinfo[512];

	//if( checkIfAngel( angelindex) != -1 || checkIfAngel( heroindex) != -1 )
	//	return;
	//sprintf( angelinfo, "%s:%s", CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME) );
	getMissionNameInfo( angelindex, angelinfo);
	//sprintf( heroinfo, "%s:%s", CHAR_getChar( heroindex, CHAR_CDKEY), CHAR_getChar( heroindex, CHAR_NAME) );
	getMissionNameInfo( heroindex, heroinfo);
	
	sprintf( buf, "%s|%s|%d|%d", angelinfo, heroinfo, mission, flag );
	//saacproto_ACMissionTable_send( acfd, -1, 2, buf, angelindex);
	saacproto_ACMissionTable_send( acfd, -1, 2, buf, angelinfo);

	return;
}

//void selectAngel( int charaindex)
void selectAngel( int charaindex, int heroindex, int mission, int gm_cmd)
{
	// gm_cmd 表示是否由GM指令產生, 

	//int heroindex =-1;
	int findindex, startindex;
	char msg[1024];
	int max_char;
	//int mission;
	
	if( AngelReady <= 0 && gm_cmd == FALSE)
		return;

	sprintf( msg, " 使者資格檢查: %s %s ", CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME));
	print( msg);
	LogAngel( msg);

	// 天使條件檢查
	if( gm_cmd == FALSE )
	{
		if( checkIfAngel( charaindex) != -1) // 是否天使或勇者
		{
			print(" ANGEL已經是天使或勇者了 ");
			return;
		}
		
		if( CHAR_getInt( charaindex, CHAR_LV) < 30 || !NPC_EventCheckFlg( charaindex, 4 ) )
		{
			print(" ANGEL資格不符 ");
			return;
		}
		
		srand( time(NULL));
		if( rand()%3 == 0 )	// 天使的機率 2/3
		{
			print(" ANGEL機率檢查不通過 ");
			return;
		}
	}
	print(" ANGEL決定 ");

	
	// 挑選勇者
	if( heroindex == -1 )
	{
		//heroindex = -1;
		max_char = CHAR_getPlayerMaxNum();
		startindex = RAND( 0, max_char-1);
		findindex = startindex;
		while(1) {
			if( findindex == startindex-1)	break;
			findindex = (findindex+1) % max_char;
			if( !CHAR_CHECKINDEX( findindex) ) continue;
			if( CHAR_getInt( findindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) continue;
			if( findindex == charaindex ) continue;
			if( checkIfAngel( findindex) != -1)	continue; // 是否天使或勇者
			if( CHAR_getInt( findindex, CHAR_LV) < 80 || !NPC_EventCheckFlg( findindex, 4 ) ) continue; // 勇者的條件
			if( rand()%3 == 0 )	continue; // 勇者的機率 2/3
			
			heroindex = findindex;
			
			print(" ANGEL勇者決定 ");
			
			break;
		}
		if( heroindex < 0) {
			sprintf( msg, " 沒有找到勇者人選!! ");
			print( msg);
			//LogAngel( msg);
			return;
		}
	}

	// 決定任務
	if( mission == -1 )
	{
		int mlist[MAXMISSION]; // 符合條件的任務列表
		char eventlist[1024];
		char buf[64];
		int i, j, mindex =0;
		
		memset( mlist, 0, sizeof(mlist));
		for( i =0; i <MAXMISSION; i++) {
			int checked =TRUE;
			if( missionlist[i].id <= 0) continue;
			if( CHAR_getInt( heroindex, CHAR_LV) < missionlist[i].level )
				continue;
			strcpy( eventlist, missionlist[i].eventflag); // 檢查必要旗標
			j =0;
			while(1) {
				j++;
				if( getStringFromIndexWithDelim( eventlist, ";", j, buf, sizeof(buf)) == FALSE )
					break;
				if( buf[0] != '!') { // 必要旗標或禁止旗標
					if( !NPC_EventCheckFlg( heroindex, atoi(buf) )) {
						checked = FALSE;
						break;
					}
				}
				else {
					if( NPC_EventCheckFlg( heroindex, atoi(buf+1) )) {
						checked = FALSE;
						break;
					}
				}
			}
			if( checked ) {
				mlist[mindex] = missionlist[i].id;
				print(" mlist[%d]=%d ", mindex, mlist[mindex]);
				mindex++;
			}
		}
		if( mindex <= 0 ) {
			sprintf( msg, " 找不到合適的任務 ");
			print( msg);
			//LogAngel( msg);
			return;
		}
		
		mission = mlist[rand()%mindex];
	}


	addAngelData( charaindex, heroindex, mission, MISSION_WAIT_ANSWER); // 傳到AC

	// 清除旗標 event8 224~255 為精靈召喚專用
	CHAR_setInt( charaindex, CHAR_NOWEVENT8, 0);
	CHAR_setInt( charaindex, CHAR_ENDEVENT8, 0);
	CHAR_setInt( heroindex, CHAR_NOWEVENT8, 0);
	CHAR_setInt( heroindex, CHAR_ENDEVENT8, 0);

	if( gm_cmd == FALSE )
		AngelReady = 0; // 清除缺額
	
	{
		sprintf( msg, " 產生 %s 天使候補: %s %s Lv:%d 勇者候補: %s %s Lv:%d 任務:%d ci=%d hi=%d ",
				gm_cmd ? ("(GM指令)") : (" "),
				CHAR_getChar( charaindex, CHAR_CDKEY), CHAR_getChar( charaindex, CHAR_NAME), CHAR_getInt( charaindex, CHAR_LV),
				CHAR_getChar( heroindex, CHAR_CDKEY), CHAR_getChar( heroindex, CHAR_NAME), CHAR_getInt( heroindex, CHAR_LV),
				mission, charaindex, heroindex);
		print( msg);
		LogAngel( msg);
	}
}

void sendAngelCleanToCli( int fd)
{
	lssproto_WN_send( fd, //getfdFromCharaIndex(charaindex),
			WINDOW_MESSAGETYPE_ANGELMESSAGE, -1,
			CHAR_WINDOWTYPE_ANGEL_CLEAN,
			-1,	"");
}

int AngelCreate( int angelindex)
{
	int emptyitem1, emptyitem2;
	int angeltokenindex, herotokenindex;
	char msgbuf[1024]/*, nameinfo[1024]*/;
	int mindex, mission;
	char heroname[64];

	if( !CHAR_CHECKINDEX( angelindex))	return FALSE;

	print(" 天使答應了!! ");
	
	mindex = checkIfAngel( angelindex);
	if( mindex == -1 || missiontable[mindex].flag == MISSION_TIMEOVER ) {
		//print("\n ANGEL錯誤!!Table逾時或無資料??:%d ", angelindex );
		CHAR_talkToCli( angelindex, -1, "很抱歉,你太晚回答,已經逾時了。", CHAR_COLORYELLOW);
		
		sprintf( msgbuf, " 回答逾時或無資料 i:%d 使者:%s %s ", mindex, CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME));
		print( msgbuf);
		LogAngel( msgbuf);
		
		return FALSE;
	}

	if( missiontable[mindex].flag != MISSION_WAIT_ANSWER ) {
		print(" 旗標不符:%d ", missiontable[mindex].flag);
		return FALSE;
	}

	if( CHAR_findEmptyItemBoxNo( angelindex ) < 2 ){
		CHAR_talkToCli( angelindex, -1, "空間欄位不足。至少要有兩個空道具欄位。", CHAR_COLORYELLOW);
		return TRUE;
	}

	getStringFromIndexWithDelim( missiontable[mindex].heroinfo, ":", 2, heroname, sizeof(heroname));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线视频观看| 蜜臀av一区二区三区| 欧美美女直播网站| 国产精品资源网| 婷婷综合久久一区二区三区| 国产精品久久久久久福利一牛影视| 欧美视频中文一区二区三区在线观看| 国产成人免费视频网站| 日韩中文字幕一区二区三区| 综合久久国产九一剧情麻豆| 精品福利视频一区二区三区| 欧美日韩中文国产| 99久久综合99久久综合网站| 久久国产福利国产秒拍| 亚洲尤物视频在线| 国产精品乱码一区二三区小蝌蚪| 欧美一区午夜精品| 欧美最猛性xxxxx直播| 波多野结衣在线一区| 国产乱子伦视频一区二区三区 | 欧美日韩一区三区四区| 91在线看国产| 成人高清视频免费观看| 国产福利91精品一区二区三区| 蜜桃久久精品一区二区| 石原莉奈在线亚洲二区| 亚洲国产精品一区二区www在线| 亚洲免费在线视频| 最新不卡av在线| 国产精品久久久久久久岛一牛影视| 久久久久久免费网| 久久精品一区蜜桃臀影院| 久久男人中文字幕资源站| 欧美精品一区二区久久久| 欧美成人a在线| 精品日本一线二线三线不卡| 欧美xxxx在线观看| 精品国产青草久久久久福利| 精品国产伦一区二区三区观看体验| 日韩欧美电影一区| 日韩精品在线一区二区| 精品免费一区二区三区| xf在线a精品一区二区视频网站| 精品美女在线观看| 国产欧美日韩视频在线观看| 中日韩av电影| 亚洲欧美日韩国产成人精品影院 | 欧美图区在线视频| 欧美日韩久久不卡| 91麻豆精品国产91久久久使用方法| 欧美高清www午色夜在线视频| 欧美一区二区三区四区高清| 欧美电影免费观看完整版| 久久亚洲精品国产精品紫薇| 国产视频一区二区在线| 国产精品久久久久婷婷| 亚洲男人电影天堂| 午夜婷婷国产麻豆精品| 蜜臀av性久久久久蜜臀aⅴ| 国产一区啦啦啦在线观看| 波多野结衣中文字幕一区二区三区| 99riav久久精品riav| 欧美日韩一级二级| 精品国产乱码久久| 国产精品久久久久影院| 亚洲第一激情av| 激情文学综合丁香| 91丨九色porny丨蝌蚪| 欧美情侣在线播放| 国产日韩综合av| 亚洲综合色噜噜狠狠| 韩国成人精品a∨在线观看| 不卡一区在线观看| 4438x成人网最大色成网站| 久久久国产一区二区三区四区小说 | 欧美裸体bbwbbwbbw| 久久九九影视网| 亚洲国产人成综合网站| 激情五月播播久久久精品| 99国产精品99久久久久久| 欧美一区国产二区| 国产精品久久久久一区二区三区| 午夜精品久久久久久| 国产成人欧美日韩在线电影| 欧美日韩一本到| 中文字幕高清不卡| 美日韩黄色大片| 色综合久久中文综合久久牛| 日韩限制级电影在线观看| 1000部国产精品成人观看| 看国产成人h片视频| 一本到三区不卡视频| 日韩欧美aaaaaa| 夜色激情一区二区| 国产成人精品亚洲777人妖 | 国产精品白丝jk白祙喷水网站| 在线视频综合导航| 久久精品人人做人人综合 | 亚洲男女毛片无遮挡| 韩国v欧美v日本v亚洲v| 欧美日韩国产精品自在自线| 中文字幕亚洲区| 青青草97国产精品免费观看无弹窗版 | 久久精品一区二区三区不卡| 婷婷开心久久网| 一本一道波多野结衣一区二区| 久久蜜桃一区二区| 理论片日本一区| 91精品欧美综合在线观看最新| 亚洲私人影院在线观看| 国产91精品在线观看| 日韩情涩欧美日韩视频| 亚洲一级不卡视频| 一道本成人在线| 亚洲日本一区二区三区| 成人午夜免费电影| 久久久久久一二三区| 久久精品国产亚洲高清剧情介绍 | 一区二区三区四区在线免费观看| 国产一区二区三区四区五区入口| 欧美一区二区三区白人| 污片在线观看一区二区| 欧美性欧美巨大黑白大战| 亚洲精品久久嫩草网站秘色| av一区二区三区黑人| 国产精品美女久久久久久久久久久| 国产精品中文字幕一区二区三区| 精品女同一区二区| 经典三级在线一区| 久久久亚洲国产美女国产盗摄 | 国产精品另类一区| 国产成人精品一区二区三区四区| 久久精品视频一区二区| 国产一区在线看| 久久伊99综合婷婷久久伊| 国产一区二区免费看| 久久久久久久久久久黄色| 在线观看91视频| 国产精品888| 久久嫩草精品久久久精品| 精品午夜一区二区三区在线观看| 欧美mv日韩mv国产网站| 欧美精品久久99久久在免费线| 亚洲欧美日韩国产一区二区三区| 色哟哟国产精品| 亚洲一区二区三区在线| 欧美久久一区二区| 热久久一区二区| 精品三级在线观看| 成人中文字幕合集| 中文字幕亚洲在| 欧美中文字幕一区二区三区亚洲| 五月激情六月综合| 精品国产乱码久久久久久1区2区| 国产精品亚洲综合一区在线观看| 国产精品激情偷乱一区二区∴| 91久久免费观看| 丝袜国产日韩另类美女| 精品国产乱码久久久久久久| 国产91精品免费| 一区二区三区蜜桃| 日韩欧美国产系列| 丁香激情综合五月| 亚洲精品乱码久久久久久久久| 在线观看91精品国产麻豆| 黄色资源网久久资源365| 成人欧美一区二区三区在线播放| 91黄视频在线| 精品一区二区三区蜜桃| 成人免费在线播放视频| 欧美疯狂性受xxxxx喷水图片| 国产一区二区三区久久悠悠色av| 亚洲欧美视频在线观看视频| 欧美一级高清片| 99国内精品久久| 麻豆成人久久精品二区三区红| 国产精品久久三| 91精品午夜视频| va亚洲va日韩不卡在线观看| 秋霞午夜av一区二区三区| 中文字幕不卡在线观看| 制服丝袜亚洲精品中文字幕| 粉嫩蜜臀av国产精品网站| 午夜精品久久久久久久久| 久久久91精品国产一区二区三区| 欧美日韩在线观看一区二区| 国产91精品一区二区麻豆亚洲| 天使萌一区二区三区免费观看| 国产精品视频在线看| 日韩精品专区在线影院观看| 91麻豆国产精品久久| 国产一区二区精品在线观看| 亚洲一区视频在线| 亚洲国产精品精华液ab| 日韩欧美高清dvd碟片| 欧美色综合久久| 99在线视频精品| 国产一区二区三区av电影| 日本aⅴ精品一区二区三区| 日韩毛片一二三区|