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

📄 pet.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include <stdio.h>#include "char_base.h"#include "char.h"#include "object.h"#include "readmap.h"#include "map_deal.h"#include "lssproto_serv.h"#include "handletime.h"#include "pet.h"#include "battle.h"#include "petmail.h"#include "log.h"#include "function.h"/* * 矢永玄质  卞楮允月末□旦 *//*------------------------------------------------------------------------ * 矢永玄毛ㄠ勾喃曰癫化月[犯田永弘迕[ * CHAR厌瞻  卞及心综岳今木月[ *   曰袄“综岳今木凶平乓仿index 撩  “-1 *-----------------------------------------------------------------------*/int PET_DEBUG_initPetOne( int charaindex){    Char    ch;    int     havepetindex;    int     index;    /* 矢永玄毛  化月井譬屯月 */    havepetindex = CHAR_getCharPetElement( charaindex) ;    memset( &ch, 0, sizeof( ch));    if( !CHAR_getDefaultChar( &ch,31010 ) )return -1;    /*    飓  寞    */    ch.data[CHAR_BASEBASEIMAGENUMBER]        = ch.data[CHAR_BASEIMAGENUMBER] = 30008;    ch.data[CHAR_WHICHTYPE] = CHAR_TYPEPET;    /*    猾   */    ch.workint[CHAR_WORKATTACKPOWER] = 100;    /*  潮     */    ch.workint[CHAR_WORKDEFENCEPOWER] = 50;    /*  HP */    ch.data[CHAR_HP] = 100;    /*    蟆 */    strcpysafe( ch.string[CHAR_NAME].string, 32, "宠物1" );    /* CHAR卞喃曰癫化月 */    index = PET_initCharOneArray( &ch);    if( index < 0 ) return -1;    /* 仍潜谛本永玄 */    CHAR_setWorkInt( index, CHAR_WORKPLAYERINDEX, charaindex);    CHAR_setWorkInt( index,CHAR_WORKOBJINDEX,-1);    CHAR_setCharPet( charaindex, havepetindex, index);    CHAR_setInt( index, CHAR_SLOT, 2);    return havepetindex;}static int _PET_dropPet( int charaindex, int havepetindex, int tofl, int tox, int toy){    char szPet[128];    int dirx[9],diry[9];    int i, j;    int objindex=-1;    int floor,x,y;    int petindex;    int count_chara =0, count_item =0;	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE)		!= BATTLE_CHARMODE_NONE) return FALSE;    petindex = CHAR_getCharPet(charaindex,havepetindex);    if( !CHAR_CHECKINDEX( petindex )) return FALSE;    if( !CHAR_CHECKINDEX( charaindex ) )return FALSE;    if( CHAR_CHECKINDEX( petindex) == FALSE ) return FALSE;#ifdef _AVID_TRADETRYBUG //丢出宠物	if( CHAR_getWorkInt( charaindex, CHAR_WORKTRADEMODE) == CHAR_TRADE_TRADING ){		CHAR_talkToCli( charaindex, -1, "交易状态中无法丢出宠物。", CHAR_COLORYELLOW );		return FALSE;	}#endif    // CoolFish: Family 2001/6/13    if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1){    	CHAR_talkToCli(charaindex, -1, "家族守护兽无法丢出!", CHAR_COLORYELLOW);    	return	FALSE;    }    if (CHAR_getInt(charaindex, CHAR_RIDEPET) == havepetindex ){    	CHAR_talkToCli(charaindex, -1, "骑乘中的宠物无法丢出!", CHAR_COLORYELLOW);    	return	FALSE;    }    #ifdef _DROPCHECK2		floor = CHAR_getInt( charaindex, CHAR_FLOOR);	x = CHAR_getInt( charaindex, CHAR_X);	y = CHAR_getInt( charaindex, CHAR_Y);		for( i = x-CHAR_DEFAULTSEESIZ/2 ; i <= x+CHAR_DEFAULTSEESIZ/2 ; i++ ){		for( j = y-CHAR_DEFAULTSEESIZ/2 ; j <= y+CHAR_DEFAULTSEESIZ/2 ; j ++ ){		OBJECT  object;		for( object = MAP_getTopObj(floor,i,j); object ; object = NEXT_OBJECT(object ) ) {			int objindex = GET_OBJINDEX(object);			if( OBJECT_getType(objindex) == OBJTYPE_NOUSE ) continue;			if( OBJECT_getType(objindex) == OBJTYPE_CHARA ) {				count_chara++;			}			if( OBJECT_getType(objindex) == OBJTYPE_ITEM || OBJECT_getType(objindex) == OBJTYPE_GOLD ) {				count_item++;			}		}	}		if( count_item > 80 || count_chara > 80 ) {			CHAR_talkToCli( charaindex, -1, "这里已经太拥挤了,不能再丢了。", CHAR_COLORYELLOW );			return FALSE;		}	}#endif	if( tofl == -1 ) {	    for( i  = 0 ; i < 7 ; i  ++ ){	        dirx[i+2] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR) + i+1);	        diry[i+2] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR) + i+1);	    }	    dirx[0] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR));	    diry[0] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR));	    dirx[1] = 0;	    diry[1] = 0;	    floor = CHAR_getInt( charaindex,CHAR_FLOOR );	    for( i = 0 ; i < 9 ; i ++ ){	        int x=CHAR_getInt(charaindex,CHAR_X)+dirx[i];	        int y=CHAR_getInt(charaindex,CHAR_Y)+diry[i];	        if( PET_isPutPoint( floor, x, y ) == TRUE ) {	            break;	        }	    }	    if( i == 9 ) i = 1;	    x=CHAR_getInt(charaindex,CHAR_X)+dirx[i];	    y=CHAR_getInt(charaindex,CHAR_Y)+diry[i];	}else {    	if( MAP_walkAbleFromPoint( tofl,tox,toy, FALSE ) == FALSE ) {			print( "map walkable err %s:%d\n", __FILE__,__LINE__);			return FALSE;		}		floor = tofl;		x = tox;		y = toy;	}    objindex = PET_dropPetAbsolute( petindex,floor,x,y, FALSE );    if( objindex == -1 ) return FALSE;    CHAR_setWorkInt( petindex,CHAR_WORKOBJINDEX,objindex );    CHAR_setCharPet( charaindex, havepetindex, -1);	CHAR_setInt( petindex, CHAR_FLOOR, floor);	CHAR_setInt( petindex, CHAR_X, x);	CHAR_setInt( petindex, CHAR_Y, y);	CHAR_setInt( petindex, CHAR_PUTPETTIME, NowTime.tv_sec);	if( havepetindex == CHAR_getInt( charaindex, CHAR_DEFAULTPET)) {		int	fd;		CHAR_setInt( charaindex, CHAR_DEFAULTPET, -1);	    fd = getfdFromCharaIndex( charaindex);		lssproto_KS_send( fd, havepetindex, 0);	}	CHAR_sendCToArroundCharacter( objindex);    if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) {			snprintf( szPet, sizeof( szPet ), "K%d", havepetindex );			CHAR_sendStatusString( charaindex, szPet );    }    return TRUE;}/*------------------------------------------------------------ *     泫  矢永玄毛  仁 * 娄醒 *  itemindex       int         失奶  丞奶件犯永弁旦 *  floor           int         白夫失ID *  x               int         x甄   *  y               int         y甄   *  net             BOOL        生永玄伐□弁及仇午毛允月井升丹井 * 忒曰袄 *  岳      objindex *  撩      -1 ------------------------------------------------------------*/int PET_dropPetAbsolute( int petindex, int floor, int x, int y,BOOL net){    Object object;    int objindex;    if( !CHAR_CHECKINDEX(petindex) )return FALSE;    object.type = OBJTYPE_CHARA;    object.index = petindex;    object.x = x;    object.y = y;    object.floor = floor;    /*  左皮斥尼弁玄瓒  允月    */    objindex = initObjectOne( &object );    /* 生永玄伐□弁白仿弘互凶匀化中月午五反允月  by ringo*/    if( net )        CHAR_sendWatchEvent( objindex,CHAR_ACTSTAND,NULL,0,TRUE);    return objindex;}BOOL PET_isPutPoint( int fl,int x, int y){    OBJECT  object;    if( MAP_walkAbleFromPoint( fl,x,y, FALSE ) == FALSE )        return FALSE;    for( object=MAP_getTopObj(fl,x,y) ;         object ;         object = NEXT_OBJECT(object ) )    {        int objindex = GET_OBJINDEX(object);        switch( OBJECT_getType(objindex) ){          case OBJTYPE_NOUSE:            break;          case OBJTYPE_ITEM:          case OBJTYPE_GOLD:          case OBJTYPE_CHARA:            return FALSE;            break;          default:            break;        }    }    return TRUE;}int PET_dropPet( int charaindex, int havepetindex){	int petindex;	petindex = CHAR_getCharPet(charaindex,havepetindex);    if( !CHAR_CHECKINDEX( petindex )) return FALSE;	if( _PET_dropPet( charaindex, havepetindex, -1,-1,-1) == TRUE ){		LogPet(			CHAR_getChar( charaindex, CHAR_NAME ), /* 平乓仿   */			CHAR_getChar( charaindex, CHAR_CDKEY ),			CHAR_getChar( petindex, CHAR_NAME),			CHAR_getInt( petindex, CHAR_LV),			"Drop(丢宠)",			CHAR_getInt( charaindex,CHAR_FLOOR),			CHAR_getInt( charaindex,CHAR_X ),			CHAR_getInt( charaindex,CHAR_Y ),			CHAR_getChar( petindex, CHAR_UNIQUECODE)   // shan 2001/12/14		);		return 1;	}	return 0;}int PET_dropPetFLXY( int charaindex, int havepetindex, int fl, int x, int y){	return _PET_dropPet( charaindex, havepetindex, fl,x,y);}/*------------------------------------------------------------ * 矢永玄迕及奶矛件玄楮醒毛本永玄仄化支月 ------------------------------------------------------------*/int PET_initCharOneArray( Char *ch){    int i;    char *tmp[CHAR_FUNCTABLENUM] = {        "",                 /*  CHAR_INITFUNC */        "",     			/*  CHAR_WALKPREFUNC    */        "",    				/*  CHAR_WALKPOSTFUNC   */        "",                 /*  CHAR_PREOVERFUNC    */        "",                 /*  CHAR_PREOVERFUNC    */        "core_PetWatch", 	/*  CHAR_WATCHFUNC  */        "",        			/*  CHAR_LOOPFUNC */        "",       			/*  CHAR_DYINGFUNC */        "core_PetTalk",		/*  CHAR_TALKEDFUNC */        "",                 /*  CHAR_PREATTACKEDFUNC    */        "",                 /*  CHAR_POSTATTACKEDFUNC    */        "",                 /*  CHAR_OFFFUNC    */        "",                 /*  CHAR_LOOKEDFUNC */        "",                 /*  CHAR_ITEMPUTFUNC    */        "",                 /*  CHAR_SPECIALTALKEDFUNC    */        "",                 /*  CHAR_WINDOWTALKEDFUNC    */#ifdef _USER_CHARLOOPS		"",					// CHAR_LOOPFUNCTEMP1,		"",					// CHAR_LOOPFUNCTEMP2,		"",					//CHAR_BATTLEPROPERTY,

⌨️ 快捷键说明

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