📄 pet.c
字号:
#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 + -