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

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

?? npc_welfare.c

?? 石器時代8.0服務端完整源代碼。可以直接編譯
?? C
字號:
#include "version.h"

#ifdef _NPC_WELFARE
#ifdef _PROFESSION_SKILL			// WON ADD 人物職業技能

#include <string.h>
#include "char.h"
#include "object.h"
#include "char_base.h"
#include "npcutil.h"
#include "lssproto_serv.h"
#include "pet_skill.h"
#include "readmap.h"
#include "battle.h"
#include "profession_skill.h"
#include "chatmagic.h"
#include "npc_welfare.h"
#include "npc_exchangeman.h"

static void NPC_Welfare_selectWindow(int meindex, int toindex, int num, int select);


//載入好康NPC的初始化
BOOL NPC_WelfareInit( int meindex )
{
    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWELFARE);
    //print("名稱:%s\n",CHAR_getChar( meindex, CHAR_NAME));
    return TRUE;
}

//對話時的處理
void NPC_WelfareTalked( int meindex , int talkerindex , char *szMes ,int color )
{
    if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
    	return;
    }
	if(NPC_Util_isFaceToFace(talkerindex,meindex,2 )==FALSE){
		if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;
	}
	NPC_Welfare_selectWindow( meindex, talkerindex,0,-1);
}

static void NPC_Welfare_selectWindow( int meindex, int toindex, int num,int select)
{
	switch(num){
	  case 0:
		  //free
		NPC_WelfareMakeStr(meindex, toindex, select);
		break;
	  case 1:
		break;
	}
}

void NPC_WelfareWindowTalked( int meindex, int talkerindex, 
		int seqno, int select, char *data)
{
	int skill, i, j;
	int cost;
	int skillID=0;
	char buf[64];
	char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
	char msg[512];
	char message[64];
	int fd = getfdFromCharaIndex( talkerindex );
	double rate= 1.0;
	int skillarray;
	int p_class=0, need_class=0;
	int profession_skill_point;

	memset( message, -1, sizeof(message) );

	if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) {
		return;
	}

	if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
		print("GetArgStrErr");
		return;
	}

	makeStringFromEscaped( data);
	getStringFromIndexWithDelim(data,"|",1,buf,sizeof(buf));
	skill=atoi(buf);
	getStringFromIndexWithDelim(data,"|",2,buf,sizeof(buf));
	cost=atoi(buf);
	
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "profession_skill", msg, sizeof( msg)) != NULL){
		getStringFromIndexWithDelim(msg,",",skill,buf,sizeof(buf));
		skillID=atoi(buf);
	}


	if(skillID < 0) return ;

	if( CHAR_getWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return ;

	if( NPC_Util_GetStrFromStrWithDelim( argstr, "skill_rate", msg, sizeof( msg)) != NULL){
		rate = atof( msg);
	}

	skillarray = PROFESSION_SKILL_getskillArray( skillID );

	if(skillarray == -1){
		CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
		return ;
	}

	// 判斷職業
	{
		if( NPC_Util_GetStrFromStrWithDelim( argstr, "profession_class", msg, sizeof(msg) ) == NULL){
			return ;
		}else{
			p_class = atoi(msg);	
		}
		
		// 技能所需職業
		need_class = PROFESSION_SKILL_getInt( skillarray, PROFESSION_SKILL_PROFESSION_CLASS );

		if( CHAR_getInt( talkerindex, PROFESSION_CLASS ) == 0 ){
			char token[256];
			memset(token, -1, sizeof(token) );
			sprintf( token, "您尚未就職!" );
			CHAR_talkToCli( talkerindex, meindex, token, CHAR_COLORYELLOW);
			CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
			return;

		}

		if( CHAR_getInt( talkerindex, PROFESSION_CLASS ) != need_class && need_class != 4 ){
			char token[256];
			memset(token, -1, sizeof(token) );
			sprintf( token, "此技能你不能學喔!" );
			CHAR_talkToCli( talkerindex, meindex, token, CHAR_COLORYELLOW);
			CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
			return;
		}
		

	}

	// 判斷剩馀點數
	{
		profession_skill_point = CHAR_getInt( talkerindex, PROFESSION_SKILL_POINT );
		if( profession_skill_point <= 0 ){
			char token[256];
			memset(token, -1, sizeof(token) );
			sprintf( token, "你目前沒有學習點數!" );
			CHAR_talkToCli( talkerindex, meindex, token, CHAR_COLORYELLOW);
			CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
			return;
		}
	}

	// 判斷是否達成學習的條件
	{
		int temp[4] = {0}, count = 0, flag = -1 , need_percent = -1, need_count = 0;

		for( i=0; i<4; i++){
			int limit = -1;
			flag = -1;
			limit = PROFESSION_SKILL_getInt( skillarray, PROFESSION_SKILL_LIMIT1+i*2 );
			need_percent = PROFESSION_SKILL_getInt( skillarray, PROFESSION_SKILL_LIMIT1+i*2 + 1 );
					
			if( limit!= 0  && need_percent == 0 ) need_count++;

			if( limit == 0 ){
				continue;
			}else if( limit == -1 ){
				for( j=0; j<PROFESSION_MAX_LEVEL; j++ ){
					if( CHAR_getCharSkill( talkerindex, j) > 0 ) break;
				}
				if( j >=  PROFESSION_MAX_LEVEL ){
					char token[256];	
					sprintf( token, "需先學會任1種戰斗技能才能學習!");
					CHAR_talkToCli( talkerindex, meindex, token, CHAR_COLORYELLOW);
					CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
					return;
				}
			}else{
				flag = -1;
				for( j=0; j<PROFESSION_MAX_LEVEL; j++ ){
					// 判斷技能
					if( CHAR_getCharSkill( talkerindex, j) == limit ){
						int skill_level = -1;
						CHAR_HaveSkill* hskill;
						flag = -2;
						hskill = CHAR_getCharHaveSkill( talkerindex, j );
						skill_level = SKILL_getInt( &hskill->skill, SKILL_LEVEL);	
						
						// 判斷熟練度
						if( skill_level >= need_percent ){
							flag = 1;	break;
						}					
					}
				}
				
				// 未達成條件
				if( flag == -1 && need_percent == 0 ){
						temp[count] = limit;
						count ++;					
				}else if( flag == -1 ){
					char token[256];	
					memset(token, -1, sizeof(token) );
					sprintf( token, "尚未學會%s!", PROFESSION_SKILL_getChar( limit, PROFESSION_SKILL_NAME) );
					CHAR_talkToCli( talkerindex, -1, token, CHAR_COLORYELLOW);
					CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
					return;
				}else if( flag == -2 ){
					char token[256];	
					memset(token, -1, sizeof(token) );
					sprintf( token, "%s熟練度不足%d!", PROFESSION_SKILL_getChar( limit, PROFESSION_SKILL_NAME), need_percent );
					CHAR_talkToCli( talkerindex, -1, token, CHAR_COLORYELLOW);
					CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
					return;
				}
			}
		}
	
		if( count == need_count &&  need_count != 0 ){
			char msg[256] = {0};
		
			sprintf( msg, "需先學會 " );
			for( i = 0; i< count; i++ ){
				if( temp[i] != 0 ){
					char token[50] = {0};
					sprintf( token, "%s ", PROFESSION_SKILL_getChar( temp[i], PROFESSION_SKILL_NAME) );
					strcat( msg, token );
				}
			}
			sprintf( msg, "%s 任一種技能", msg );
			CHAR_talkToCli( talkerindex, -1, msg, CHAR_COLORYELLOW);
			CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);

			return;
		}

	}

	// 判斷金錢	
	{
		cost = PROFESSION_SKILL_getInt( skillarray, PROFESSION_SKILL_COST );
		cost = cost * rate;

		if(CHAR_getInt(talkerindex,CHAR_GOLD) < cost){
			CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
			return;
		}
	}

#ifdef _NPC_ProfessionTrans
	//判斷轉生
	{
		if( NPC_Util_GetStrFromStrWithDelim( argstr, "trans", msg, sizeof(msg) ) != NULL){
		    int trans = atoi(msg);
			print("\n轉生要求:%d,%d",CHAR_getInt( talkerindex, CHAR_TRANSMIGRATION),trans);
			if( CHAR_getInt( talkerindex, CHAR_TRANSMIGRATION) < trans){ 
				if( NPC_Util_GetStrFromStrWithDelim( argstr, "trans_msg", msg, sizeof(msg) ) != NULL){
                    CHAR_talkToCli( talkerindex, meindex, msg, CHAR_COLORYELLOW);
				    return;
				}
				else{
                    CHAR_talkToCli( talkerindex, meindex, "您的轉生次數不夠哦。", CHAR_COLORYELLOW);
				    return;
				}
			}
		}
	}
#endif

	// 增加技能
	{
		int skill_level = 0;

		// 共通技能熟練度給50,其馀給10
		if( (skillID == 63) || (skillID == 64) || (skillID == 65)  ){
			int	Pskillid = -1;
			skill_level = 50;
			Pskillid = PROFESSION_SKILL_getskillArray( skillID );
		}else{
			skill_level = 10;
		}

		if( PROFESSION_SKILL_ADDSK( talkerindex, skillID, skill_level ) == -1 )	return;

		CHAR_DelGold( talkerindex, cost );

		CHAR_sendStatusString( talkerindex , "S");

		NPC_Welfare_selectWindow( meindex, talkerindex,0,-1);
	}

	// 傳送訊息
	{
		char token[256];
		int next_profession_skill_point = profession_skill_point-1;
		
		CHAR_setInt( talkerindex, PROFESSION_SKILL_POINT, next_profession_skill_point );
		
		memset(token, -1, sizeof(token) );
		sprintf( token, "您學習了 %s,剩馀學習點數 %d"
				,PROFESSION_SKILL_getChar( skillarray, PROFESSION_SKILL_NAME )
				,next_profession_skill_point );
		CHAR_talkToCli( talkerindex, -1, token, CHAR_COLORYELLOW);
    
		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( talkerindex , CHAR_WORKOBJINDEX ));
	}

}             

void NPC_WelfareMakeStr(int meindex,int toindex,int select)
{
	char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
	char msg[256];
	double rate=1.0;
	int i=0;
	char token[65530];
	int fd = getfdFromCharaIndex( toindex);

	if(select==0){
		sprintf(token,"0|0");
		lssproto_WN_send( fd, WINDOW_MESSAGETYPE_PETSKILLSHOP, 
			WINDOW_BUTTONTYPE_NONE, 
			CHAR_WINDOWTYPE_WINDOWPETSKILLSHOP,
			CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
			token);
		
	}

	if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
		print("GetArgStrErr");
		return;
	}

	if( NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", msg, sizeof( msg)) == NULL){
		print("mainERR");
		return ;
	}

	sprintf(token,"1|%s|%s", CHAR_getChar(meindex,CHAR_NAME), msg);
		
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "skill_rate", msg, sizeof( msg)) != NULL){
		rate=atof(msg);
	}

		
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "profession_skill", msg, sizeof( msg) ) != NULL){
		int skillarray;
		int skillID;
		int cost;
		char token2[265];
		char buf[64];

		i=1;
	    while( getStringFromIndexWithDelim(msg,",",i,buf,sizeof(buf)) !=FALSE ){
			i++;
			skillID=atoi(buf);

			skillarray = PROFESSION_SKILL_getskillArray( skillID );

			if( PROFESSION_SKILL_CHECKINDEX( skillarray ) == FALSE )		continue;

			cost = PROFESSION_SKILL_getInt( skillarray, PROFESSION_SKILL_COST );

			cost = (int)cost*rate;

			sprintf(token2,"|%s|%d|%s|%d",
				PROFESSION_SKILL_getChar( skillarray, PROFESSION_SKILL_NAME ),	// 技能名稱
				cost,															// 金額
				PROFESSION_SKILL_getChar( skillarray, PROFESSION_SKILL_TXT ),	// 說明
				PROFESSION_SKILL_getInt( skillarray, PROFESSION_SKILL_ICON )	// 圖示
			);
			strcat(token,token2);
		} 
	}

	lssproto_WN_send( fd, WINDOW_MESSAGETYPE_PROFESSIONSHOP, 
				WINDOW_BUTTONTYPE_NONE, 
				WINDOW_MESSAGETYPE_PROFESSIONSHOP,
				CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
				token);

	return;
}


#endif
#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国模大尺度私拍在线视频| 色婷婷狠狠综合| 91同城在线观看| 欧美一卡2卡3卡4卡| 亚洲女同ⅹxx女同tv| 蜜臀国产一区二区三区在线播放| 成人av在线播放网站| 日韩欧美美女一区二区三区| 亚洲激情网站免费观看| 日韩电影一区二区三区四区| aaa亚洲精品| 久久免费偷拍视频| 久久国产夜色精品鲁鲁99| 欧美亚洲动漫精品| 成人免费小视频| 国产精品一级片| 26uuu亚洲综合色| 青青草视频一区| 欧美精品自拍偷拍动漫精品| 亚洲女同ⅹxx女同tv| www.日韩av| 国产精品三级电影| 福利一区福利二区| 国产欧美一区二区三区鸳鸯浴 | 看电视剧不卡顿的网站| 色偷偷一区二区三区| 亚洲欧洲色图综合| k8久久久一区二区三区 | 99视频国产精品| 国产午夜一区二区三区| 国产一区二区福利| 欧美精品一区二区高清在线观看| 日韩成人午夜精品| 69成人精品免费视频| 日本不卡一二三| 日韩欧美精品在线视频| 美女任你摸久久| 欧美成人精品高清在线播放| 麻豆精品一二三| 国产日本亚洲高清| 成人教育av在线| 亚洲少妇最新在线视频| 欧美综合欧美视频| 午夜视频在线观看一区二区三区| 欧美日韩亚洲综合一区| 日本午夜精品一区二区三区电影| 欧美成人欧美edvon| 国产成人亚洲综合a∨婷婷| 国产精品美女视频| 在线欧美小视频| 婷婷丁香激情综合| xnxx国产精品| 99久久国产免费看| 日韩和欧美一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 成人深夜在线观看| 91精品国产一区二区三区| 一区二区三区四区在线播放| 欧美视频在线一区| 国产一区二三区| 国产精品美女久久久久高潮| 91精品1区2区| 奇米影视在线99精品| 国产欧美精品国产国产专区| 9l国产精品久久久久麻豆| 亚洲国产欧美另类丝袜| 精品国产免费人成在线观看| 成人av网站在线| 天天综合网天天综合色| 国产欧美日韩在线| 欧美伊人久久久久久午夜久久久久| 免费人成黄页网站在线一区二区| 国产亚洲视频系列| 色婷婷综合五月| 国产一区二区精品久久| 一区二区三区日韩欧美精品| 日韩小视频在线观看专区| 91在线小视频| 久久99最新地址| 亚洲主播在线观看| 久久精品视频在线看| 欧美浪妇xxxx高跟鞋交| 成人亚洲一区二区一| 男女男精品网站| 亚洲三级在线播放| 国产亚洲精品超碰| 欧美熟乱第一页| 99久久精品国产麻豆演员表| 激情图片小说一区| 午夜激情综合网| 综合色中文字幕| 国产清纯白嫩初高生在线观看91 | 欧美亚洲综合一区| 国产成人h网站| 久久精品国产**网站演员| 亚洲一区二区三区四区在线观看| 中文字幕不卡一区| 精品成人在线观看| 欧美一级欧美一级在线播放| 欧美亚洲一区三区| 91亚洲国产成人精品一区二三| 久久国产婷婷国产香蕉| 日韩高清国产一区在线| 亚洲香蕉伊在人在线观| 一区二区三区在线观看视频| 国产精品日韩精品欧美在线| 久久久久综合网| 精品国产第一区二区三区观看体验 | 成人自拍视频在线观看| 精品一区二区三区免费播放| 日韩av不卡一区二区| 亚洲一区二区视频| 亚洲一区av在线| 亚洲国产婷婷综合在线精品| 亚洲综合色成人| 亚洲免费观看高清| 一区二区三区中文字幕电影| 亚洲久本草在线中文字幕| 1024亚洲合集| 一区二区免费在线播放| 亚洲激情在线播放| 天堂在线亚洲视频| 蜜桃视频在线观看一区| 久久不见久久见免费视频1| 久久国产夜色精品鲁鲁99| 蜜臀久久99精品久久久久久9| 日韩电影免费在线观看网站| 麻豆久久久久久久| 国产伦精品一区二区三区免费迷 | 成人午夜av影视| 97se亚洲国产综合自在线| 在线观看一区二区视频| 精品视频在线免费观看| 日韩欧美国产一二三区| 久久免费美女视频| 成人免费一区二区三区在线观看 | 国产精品免费人成网站| 亚洲色图.com| 青青草成人在线观看| 风流少妇一区二区| 91高清在线观看| 欧美成人aa大片| 国产精品狼人久久影院观看方式| 亚洲欧美一区二区三区孕妇| 亚洲一区中文在线| 国内精品国产成人国产三级粉色 | 视频在线在亚洲| 国产一区二区美女| 色哟哟亚洲精品| 精品国产99国产精品| 亚洲视频每日更新| 国内精品伊人久久久久av一坑| eeuss鲁片一区二区三区| 欧美精品粉嫩高潮一区二区| 久久久久久久久蜜桃| 香蕉影视欧美成人| 成人免费看视频| 欧美日韩aaa| 中文字幕一区二区三区精华液| 日韩av午夜在线观看| 97精品国产露脸对白| 精品国产一区二区三区不卡| 一区二区三区在线播放| 国产精品99久久久久久宅男| 欧美日韩国产综合草草| 日本一区二区免费在线观看视频 | av一区二区三区| 日韩一区二区视频| 一区二区三区毛片| 国产91精品一区二区麻豆网站 | 精久久久久久久久久久| 欧美性一区二区| 中文一区二区在线观看| 国产资源在线一区| 制服丝袜在线91| 亚洲另类在线制服丝袜| 成人中文字幕合集| 精品久久久久久久人人人人传媒| 一区二区三区四区在线| 91亚洲国产成人精品一区二区三 | 欧美在线一二三| 亚洲欧洲国产日韩| 国产高清不卡一区| 精品国产91久久久久久久妲己 | 色婷婷综合久久久久中文一区二区| 精品国产sm最大网站免费看| 污片在线观看一区二区| 欧美亚洲丝袜传媒另类| 亚洲最大色网站| 色综合天天综合在线视频| 99久久夜色精品国产网站| 日韩精品在线看片z| 免费在线观看精品| 日韩一区二区精品在线观看| 亚洲成在人线免费| 欧美日韩一区二区三区在线| 亚洲精品国产a| 欧美日韩在线播放三区| 香蕉成人啪国产精品视频综合网 | 欧美不卡一区二区|