⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 char_item.c.bak

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 BAK
📖 第 1 页 / 共 5 页
字号:
#include "version.h"#include <stdio.h>#include "readmap.h"#include "map_deal.h"#include "object.h"#include "char.h"#include "char_base.h"#include "item.h"#include "lssproto_serv.h"#include "handletime.h"#include "log.h"#include "item_event.h"#include "battle.h"#include "petmail.h"#ifdef _MARKET_TRADE#include "item_trade.h"#endif#ifdef _DROPSTAKENEW#define CASINOTOKENID				20121			// 游乐场彩券代号#define MAXCASINOMAPNUM				150			// 游乐场地图上限#define MAXACCUMULATION				1000000		// 积分上限typedef struct tagCasinoMapTable{	int casinofl;				// 游乐场图层	int casinox;				// 游乐场X座标	int casinoy;				// 游乐场Y座标	int casinotype;			// 赌注类型	int dropflag;				// 是否可下注 flag	char casinoinfo[64];		// 赌注类型说明	int accumulation;			// 积分	int stakenum;				// 彩券数量}CasinoMapTable;CasinoMapTable casinomap[MAXCASINOMAPNUM] = {	{ 7008, 13, 13, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 14, 13, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 15, 13, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 16, 13, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 17, 13, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 13, 14, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 14, 14, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 15, 14, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 16, 14, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 17, 14, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 13, 15, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 14, 15, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 15, 15, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 16, 15, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008, 17, 15, DICE_BIG, 1, "骰子-大", 1, 0},	{ 7008,  8, 13, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008,  9, 13, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 10, 13, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 11, 13, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 12, 13, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008,  8, 14, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008,  9, 14, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 10, 14, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 11, 14, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 12, 14, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008,  8, 15, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008,  9, 15, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 10, 15, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 11, 15, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7008, 12, 15, DICE_SMALL, 1, "骰子-小", 1, 0},	{ 7005, 22, 21, PET_RACE1, 1, "竞速场-宠物1", 2, 0},	{ 7005, 23, 21, PET_RACE1, 1, "竞速场-宠物1", 2, 0},	{ 7005, 24, 21, PET_RACE1, 1, "竞速场-宠物1", 2, 0},	{ 7005, 25, 21, PET_RACE1, 1, "竞速场-宠物1", 2, 0},	{ 7005, 26, 21, PET_RACE1, 1, "竞速场-宠物1", 2, 0},	{ 7005, 27, 21, PET_RACE1, 1, "竞速场-宠物1", 2, 0},	{ 7005, 28, 21, PET_RACE1, 1, "竞速场-宠物1", 2, 0},	{ 7005, 22, 24, PET_RACE2, 1, "竞速场-宠物2", 2, 0},	{ 7005, 23, 24, PET_RACE2, 1, "竞速场-宠物2", 2, 0},	{ 7005, 24, 24, PET_RACE2, 1, "竞速场-宠物2", 2, 0},	{ 7005, 25, 24, PET_RACE2, 1, "竞速场-宠物2", 2, 0},	{ 7005, 26, 24, PET_RACE2, 1, "竞速场-宠物2", 2, 0},	{ 7005, 27, 24, PET_RACE2, 1, "竞速场-宠物2", 2, 0},	{ 7005, 28, 24, PET_RACE2, 1, "竞速场-宠物2", 2, 0},	{ 7005, 22, 27, PET_RACE3, 1, "竞速场-宠物3", 2, 0},	{ 7005, 23, 27, PET_RACE3, 1, "竞速场-宠物3", 2, 0},	{ 7005, 24, 27, PET_RACE3, 1, "竞速场-宠物3", 2, 0},	{ 7005, 25, 27, PET_RACE3, 1, "竞速场-宠物3", 2, 0},	{ 7005, 26, 27, PET_RACE3, 1, "竞速场-宠物3", 2, 0},	{ 7005, 27, 27, PET_RACE3, 1, "竞速场-宠物3", 2, 0},	{ 7005, 28, 27, PET_RACE3, 1, "竞速场-宠物3", 2, 0},	{ 7003, 21, 15, ROULETTE1, 1, "轮盘红1", 1, 0}, { 7003, 17, 15, ROULETTE3, 1, "轮盘红3", 1, 0},	{ 7003, 13, 15, ROULETTE5, 1, "轮盘红5", 1, 0}, { 7003, 21, 21, ROULETTE6, 1, "轮盘红6", 1, 0},	{ 7003, 17, 21, ROULETTE8, 1, "轮盘红8", 1, 0}, { 7003, 15, 21, ROULETTE9, 1, "轮盘红9", 1, 0},	{ 7003, 13, 21, ROULETTE10, 1, "轮盘红10", 1, 0}, { 7003, 13, 18, ROULETTE13, 1, "轮盘红13", 1, 0},	{ 7003,  9, 21, ROULETTE17, 1, "轮盘红17", 1, 0}, { 7003, 21, 18, ROULETTE18, 1, "轮盘红18", 1, 0},	{ 7003, 19, 15, ROULETTE22, 1, "轮盘绿2", 1, 0}, { 7003, 15, 15, ROULETTE24, 1, "轮盘绿4", 1, 0},	{ 7003, 19, 21, ROULETTE27, 1, "轮盘绿7", 1, 0}, { 7003, 11, 15, ROULETTE31, 1, "轮盘绿11", 1, 0},	{ 7003,  9, 15, ROULETTE32, 1, "轮盘绿12", 1, 0}, { 7003, 11, 18, ROULETTE34, 1, "轮盘绿14", 1, 0},	{ 7003,  9, 18, ROULETTE35, 1, "轮盘绿15", 1, 0}, { 7003, 11, 21, ROULETTE36, 1, "轮盘绿16", 1, 0},	{ 7003, 19, 18, ROULETTE39, 1, "轮盘绿19", 1, 0}, { 7003, 17, 18, ROULETTE40, 1, "轮盘绿20", 1, 0},	{ 7003, 17, 24, ROULETTE41, 1, "轮盘红", 1, 0}, { 7003, 16, 24, ROULETTE41, 1, "轮盘红", 1, 0},	{ 7003, 17, 25, ROULETTE41, 1, "轮盘红", 1, 0}, { 7003, 16, 25, ROULETTE41, 1, "轮盘红", 1, 0},	{ 7003, 14, 24, ROULETTE42, 1, "轮盘绿", 1, 0}, { 7003, 13, 24, ROULETTE42, 1, "轮盘绿", 1, 0},	{ 7003, 14, 25, ROULETTE42, 1, "轮盘绿", 1, 0}, { 7003, 13, 25, ROULETTE42, 1, "轮盘绿", 1, 0},    // WON ADD 修正地图上单双的错误	{ 7003, 11, 24, ROULETTE43, 1, "轮盘单", 1, 0}, { 7003, 10, 24, ROULETTE43, 1, "轮盘单", 1, 0},	{ 7003, 11, 25, ROULETTE43, 1, "轮盘单", 1, 0}, { 7003, 10, 25, ROULETTE43, 1, "轮盘单", 1, 0},	{ 7003, 20, 24, ROULETTE44, 1, "轮盘双", 1, 0}, { 7003, 19, 24, ROULETTE44, 1, "轮盘双", 1, 0},	{ 7003, 20, 25, ROULETTE44, 1, "轮盘双", 1, 0}, { 7003, 19, 25, ROULETTE44, 1, "轮盘双", 1, 0},	{ 7003, 20, 15, (ROULETTE1<<16)+ROULETTE22, 1, "双号红1绿2", 1, 0},	{ 7003, 18, 15, (ROULETTE3<<16)+ROULETTE22, 1, "双号红3绿2", 1, 0},	{ 7003, 16, 15, (ROULETTE3<<16)+ROULETTE24, 1, "双号红3绿4", 1, 0},	{ 7003, 14, 15, (ROULETTE5<<16)+ROULETTE24, 1, "双号红5绿4", 1, 0},	{ 7003, 12, 15, (ROULETTE5<<16)+ROULETTE31, 1, "双号红5绿11", 1, 0},	{ 7003, 10, 15, (ROULETTE32<<16)+ROULETTE31, 1, "双号绿12绿11", 1, 0},	{ 7003, 20, 18, (ROULETTE18<<16)+ROULETTE39, 1, "双号红18绿19", 1, 0},	{ 7003, 18, 18, (ROULETTE40<<16)+ROULETTE39, 1, "双号绿20绿19", 1, 0},	{ 7003, 16, 18, (ROULETTE40<<16)+ROULETTE45, 1, "双号绿20黑00", 1, 0},	{ 7003, 14, 18, (ROULETTE13<<16)+ROULETTE45, 1, "双号红13黑00", 1, 0},	{ 7003, 12, 18, (ROULETTE13<<16)+ROULETTE34, 1, "双号红13绿14", 1, 0},	{ 7003, 10, 18, (ROULETTE35<<16)+ROULETTE34, 1, "双号绿15绿14", 1, 0},	{ 7003, 20, 21, (ROULETTE6<<16) +ROULETTE27, 1, "双号红6绿7", 1, 0},	{ 7003, 18, 21, (ROULETTE8<<16) +ROULETTE27, 1, "双号红8绿7", 1, 0},	{ 7003, 16, 21, (ROULETTE8<<16) + ROULETTE9, 1, "双号红8红9", 1, 0},	{ 7003, 14, 21, (ROULETTE10<<16)+ ROULETTE9, 1, "双号红10红9", 1, 0},	{ 7003, 12, 21, (ROULETTE10<<16)+ROULETTE36, 1, "双号红10绿16", 1, 0},	{ 7003, 10, 21, (ROULETTE17<<16)+ROULETTE36, 1, "双号红17绿16", 1, 0},	{ 7003,  8, 15, ROULETTE51, 1, "横列1", 1, 0},	//横列	{ 7003,  8, 18, ROULETTE52, 1, "横列2", 1, 0},	{ 7003,  8, 21, ROULETTE53, 1, "横列3", 1, 0},	{ 7003,  6, 15, ROULETTE61, 1, "号码1-10", 1, 0},	//1到10	{ 7003,  5, 15, ROULETTE61, 1, "号码1-10", 1, 0},	{ 7003,  6, 16, ROULETTE61, 1, "号码1-10", 1, 0},	{ 7003,  5, 16, ROULETTE61, 1, "号码1-10", 1, 0},	{ 7003, 24, 15, ROULETTE62, 1, "号码11-20", 1, 0},	//10到11	{ 7003, 23, 15, ROULETTE62, 1, "号码11-20", 1, 0},	{ 7003, 24, 16, ROULETTE62, 1, "号码11-20", 1, 0},	{ 7003, 23, 16, ROULETTE62, 1, "号码11-20", 1, 0},	{ 7003, 15, 18, ROULETTE45, 1, "轮盘(00)", 1, 0},};#endifstatic char CHAR_sendItemBuffer[STRINGBUFSIZ];BOOL CHAR_sendItemDataOne( int charaindex, int haveitemindex){	int		itemgrp[1];	itemgrp[0] = haveitemindex;	return CHAR_sendItemData( charaindex, itemgrp, 1);}BOOL CHAR_sendItemData( int charaindex, int *itemgroup, int num){	int		i;	int		strlength = 0;	int     fd;	if( num <= 0 || num > CHAR_MAXITEMHAVE) return FALSE;	if( CHAR_getInt(charaindex,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER ) {		return FALSE;	}	for( i = 0; i < num; i ++ ) {		char    token[512];		int     itemindex;DebugPoint = 200;		if( !CHAR_CHECKITEMINDEX( charaindex, itemgroup[i])) {			continue;		}		itemindex = CHAR_getItemIndex( charaindex, itemgroup[i] );		if( itemindex >= 0 ) {			snprintf( token ,sizeof(token),"%s|" ,					  ITEM_makeItemStatusString( itemgroup[i],itemindex ) );		}else {			snprintf( token ,sizeof(token),"%s|" ,					  ITEM_makeItemFalseStringWithNum( itemgroup[i]) );		}		strcpysafe( CHAR_sendItemBuffer + strlength,					sizeof(CHAR_sendItemBuffer) - strlength, token );		strlength += strlen( token );		if( strlength >= arraysizeof(CHAR_sendItemBuffer) ) {			break;		}	}	dchop( CHAR_sendItemBuffer , "|" );	fd = getfdFromCharaIndex( charaindex );	if( fd != -1 ){		lssproto_I_send( fd, CHAR_sendItemBuffer );		return TRUE;	}	return FALSE;}static void CHAR_sendItemDetachEvent( int charaindex,int itemid ){	char    mesg[256];	snprintf( mesg, sizeof( mesg), "卸下%s ", ITEM_getAppropriateName(itemid) );	CHAR_talkToCli(charaindex,-1,mesg,CHAR_COLORWHITE);#ifdef _ITEM_METAMO	if( ITEM_getEquipPlace( charaindex, itemid) == CHAR_BODY 			&& CHAR_getWorkInt( charaindex, CHAR_WORKITEMMETAMO) != 0 ) {		CHAR_setWorkInt( charaindex, CHAR_WORKITEMMETAMO, 0);		CHAR_setWorkInt( charaindex, CHAR_WORKNPCMETAMO, 0 ); //与npc对话後的变身也要变回来		CHAR_complianceParameter( charaindex);		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX ));		CHAR_send_P_StatusString( charaindex , CHAR_P_STRING_BASEBASEIMAGENUMBER);		CHAR_talkToCli( charaindex, -1, "变身失效了!", CHAR_COLORWHITE);	}#endif	{		typedef void (*DETACHFUNC)(int,int);		DETACHFUNC def;		def=(DETACHFUNC)ITEM_getFunctionPointer(itemid,ITEM_DETACHFUNC);		if( def )	{			def( charaindex,itemid );		}	}}static void CHAR_sendItemAttachEvent( int charaindex,int itemid ){	char    mesg[256];	snprintf( mesg, sizeof( mesg), "装备%s ",			  ITEM_getAppropriateName(itemid) );	CHAR_talkToCli(charaindex,-1,mesg,CHAR_COLORWHITE);	{		typedef void (*ATTACHFUNC)(int,int);		ATTACHFUNC atf;		atf=(ATTACHFUNC)ITEM_getFunctionPointer(itemid,ITEM_ATTACHFUNC);		if( atf )			atf( charaindex,itemid );	}}int CHAR_findSurplusItemBox( int charaindex ){	int i, remnants=0, itemindex;	for(i=CHAR_STARTITEMARRAY; i< CHAR_MAXITEMHAVE; i++){		itemindex = CHAR_getItemIndex( charaindex , i );		if( itemindex == -1 ) remnants++;    }	return remnants;}static int CHAR_findEmptyItemBoxFromChar( Char* ch ){	int     i;	for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE  ; i ++ ){		int     itemindex;		itemindex = ch->indexOfExistItems[i];		if( itemindex == -1 )return i;	}	return -1;}static int CHAR_findEmptyPoolItemBoxFromChar( Char* ch ){	int     i;	for( i=0; i<CHAR_MAXPOOLITEMHAVE; i++ ){		int     itemindex;		itemindex = ch->indexOfExistPoolItems[i];		if( itemindex == -1 ) return i;	}	return -1;}int CHAR_findEmptyPoolItemBox( int index ){	Char*   ch;	if( !CHAR_CHECKINDEX( index ) )return -1;	ch = CHAR_getCharPointer(index);	if( ch != NULL )		return CHAR_findEmptyPoolItemBoxFromChar( ch );	else		return -1;}int CHAR_findEmptyItemBox( int index ){	Char*   ch;	if( !CHAR_CHECKINDEX( index ) )return -1;	ch = CHAR_getCharPointer(index);	if( ch != NULL )		return CHAR_findEmptyItemBoxFromChar( ch );	else		return -1;}#define LACKOFCLASS {CHAR_talkToCli(index,-1,"能力不足无法装备。",CHAR_COLORWHITE);}#define CANNOTEQUIP {CHAR_talkToCli(index,-1,"无法装备该项物品。",CHAR_COLORWHITE);}#define CANNOTEQUIP2 {CHAR_talkToCli(index,-1,"无法同时装备两项同种类的物品。",CHAR_COLORWHITE);}#define CANNOTEXCHANGE {CHAR_talkToCli(index,-1,"无法交换此两项物品。",CHAR_COLORWHITE);}#define CANNOTMOVE  {CHAR_talkToCli(index,-1,"无法移动该项物品。",CHAR_COLORWHITE);}static BOOL CHAR_sendSIToCli( int charindex , int from , int to ){	int fd = getfdFromCharaIndex( charindex );	if( fd != -1 ){		lssproto_SI_send( fd , from, to  );		return TRUE;	}	return FALSE;}static BOOL CHAR_moveItemFromItemBoxToEquip( int index, int fromindex,											int toindex ){	int     fromid,toid;	int     fromeqplace;	BOOL	flg = FALSE;	if( !CHAR_CHECKINDEX( index ) )return FALSE;	fromid  = CHAR_getItemIndex(index,fromindex);	toid    = CHAR_getItemIndex(index,toindex);	if( !ITEM_CHECKINDEX( fromid) )		return FALSE;	if( CHAR_getInt( index, CHAR_TRANSMIGRATION ) <= 0 ){	    if( ITEM_getInt(fromid,ITEM_LEVEL) > CHAR_getInt(index,CHAR_LV) ){        	LACKOFCLASS;	        return FALSE;    	}	}#ifdef _ITEMSET4_TXT	if( CHAR_getInt( index, CHAR_STR) < ITEM_getInt( fromid, ITEM_NEEDSTR) ) return FALSE;	if( CHAR_getInt( index, CHAR_DEX) < ITEM_getInt( fromid, ITEM_NEEDDEX) ) return FALSE;	if( CHAR_getInt( index, CHAR_TRANSMIGRATION) < ITEM_getInt( fromid, ITEM_NEEDTRANS) ) return FALSE;#ifdef _CHAR_PROFESSION			// WON ADD 人物职业	if( ITEM_getInt( fromid, ITEM_NEEDPROFESSION) != 0 ){		if( CHAR_getInt( index, PROFESSION_CLASS ) != ITEM_getInt( fromid, ITEM_NEEDPROFESSION) )			return FALSE;	}#endif#endif#ifdef _FIXBUG_ATTACKBOW	{		if( CHAR_getWorkInt( index, CHAR_WORKITEMMETAMO) > 0 ||			CHAR_getWorkInt( index, CHAR_WORKNPCMETAMO) > 0 			|| CHAR_getWorkInt( index, CHAR_WORKFOXROUND ) != -1){ //若是变成小狐狸			int armtype = ITEM_getInt( fromid, ITEM_TYPE );			if( armtype == ITEM_BOW || armtype == ITEM_BOUNDTHROW ||				armtype == ITEM_BREAKTHROW || armtype == ITEM_BOOMERANG)	{				CHAR_talkToCli( index, -1, "变身无法使用远距离武器!", CHAR_COLORYELLOW );				return FALSE;			}		}	}#endif#ifdef _ANGEL_SUMMON	//if( !strcmp( ITEM_getChar( fromid, ITEM_USEFUNC), "ITEM_AngelToken") ) {	if( ITEM_getInt( fromid, ITEM_ID) == ANGELITEM ) {		int mindex;		char nameinfo[64];		mindex = checkIfAngel( index);		getMissionNameInfo( index, nameinfo);		if( mindex < 0 ||			strcmp( ITEM_getChar( fromid, ITEM_ANGELINFO), missiontable[mindex].angelinfo) ||			strcmp( ITEM_getChar( fromid, ITEM_HEROINFO), missiontable[mindex].heroinfo) ||			strcmp( ITEM_getChar( fromid, ITEM_ANGELINFO), nameinfo) ) {			CHAR_talkToCli( index, -1, "这并不是属於你的信物,无法装备。", CHAR_COLORYELLOW );			return FALSE;		}	}#endif	fromeqplace = ITEM_getEquipPlace( index, fromid );	if( fromeqplace == -1 ){		CANNOTEQUIP;		return FALSE;	}	//if( BATTLE_GetWepon( charaindex ) != ITEM_BOW )	if( fromeqplace == CHAR_DECORATION1 ) {		int checkplace = ( toindex == CHAR_DECORATION1)						? CHAR_DECORATION2:CHAR_DECORATION1;		int	otheritemindex;		if( toindex == CHAR_DECORATION1 || toindex == CHAR_DECORATION2 ) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -