?? pet_event.c
字號(hào):
CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE );
return TRUE;
}
}else{
if( PetTalk_BSCheck( meindex, talker, buff2) == TRUE ){
CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE );
return TRUE;
}
}
}
CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, FALSE );
return FALSE;
}
BOOL PetTalk_BSCheck(int meindex,int talker,char* buf)
{
char buff2[128];
int kosuu,temp=-1,flg=0;
char buff1[128],buff3[128];
if(strstr( buf, "-") != NULL) {
//buff3為抓寵物ID
getStringFromIndexWithDelim( buf, "-", 2, buff3, sizeof(buff3));
temp = atoi( buff3);
getStringFromIndexWithDelim( buf, "-", 1, buff1, sizeof(buff1));
strcpy( buf, buff1);
}
if(strstr( buf, "<") != NULL){
getStringFromIndexWithDelim( buf, "<", 2, buff2, sizeof(buff2));
kosuu = atoi( buff2);
getStringFromIndexWithDelim( buf, "<", 1, buff2, sizeof(buff2));
if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, 1, temp)==TRUE){
return TRUE;
}
}else if(strstr( buf, ">") != NULL){
getStringFromIndexWithDelim( buf, ">", 2, buff2, sizeof(buff2));
kosuu = atoi(buff2);
getStringFromIndexWithDelim( buf, ">" ,1, buff2, sizeof(buff2));
if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, 2, temp)==TRUE){
return TRUE;
}
}else if(strstr( buf, "!" ) != NULL){
getStringFromIndexWithDelim( buf, "!=", 2, buff2, sizeof(buff2));
kosuu = atoi( buff2);
if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, 0, temp) == TRUE){
return FALSE;
}else{
return TRUE;
}
}else if(strstr( buf, "=") != NULL){
getStringFromIndexWithDelim( buf, "=", 2, buff2, sizeof(buff2));
kosuu = atoi( buff2);
getStringFromIndexWithDelim( buf, "=", 1, buff2, sizeof(buff2));
if( strstr( buf, "PET")) {
flg = 3;
}
if(strstr( buf, "*") != NULL){
if( PetTalk_WarpManReduce( meindex, talker, buf)==TRUE){
return TRUE;
}
}else if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, flg, temp)==TRUE){
return TRUE;
}
}
return FALSE;
}
BOOL PetTalk_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp)
{
int Type = -1;
if(strcmp(buf,"LV")==0){
if(PetTalk_LevelCheck(meindex,talker,kosuu,flg)==TRUE){
return TRUE;
}
}
if( strcmp( buf, "TRANS") == 0 ) {
if( PetTalk_CheckTrans( meindex, talker, kosuu, flg) == TRUE )
return TRUE;
}
if( strcmp( buf, "PET") == 0 ) {
if( temp > 0 ) {
if( PetTalk_CheckMyPet( meindex, talker, kosuu, flg, temp) == TRUE )
return TRUE;
}else
return FALSE;
}
if(strcmp( buf, "ITEM")==0){
if(PetTalk_ItemCheck(meindex,talker,kosuu,flg)==TRUE){
return TRUE;
}
}
if(strcmp( buf, "ENDEV")==0){
if(NPC_EventCheckFlg( talker, kosuu)==TRUE){
return TRUE;
}
}
if(strcmp( buf, "NOWEV")==0){
if(NPC_NowEventCheckFlg( talker, kosuu)==TRUE){
return TRUE;
}
}
if(strcmp( buf, "HP" ) == 0 ) {
Type = 0;
if( PetTalk_CheckMyType( meindex, talker, kosuu, flg, Type ) == TRUE ) {
return TRUE;
}
}
#ifdef _PET_TALKBBI
if(strcmp( buf, "BBI" ) == 0 ) {
if( PET_CheckPlayerBBI( meindex, talker, kosuu, flg)== TRUE) {
return TRUE;
}
}
#endif
return FALSE;
}
BOOL PetTalk_CheckMyType( int meindex, int toindex, int kosuu, int flg, int Type ) {
int MyType=0,MyMaxType=0;
switch( Type ) {
case 0: //HP
MyType = CHAR_getInt( toindex, CHAR_HP);
MyMaxType = CHAR_getWorkInt( toindex, CHAR_WORKMAXHP);
MyMaxType = (MyMaxType * kosuu )/ 100;
if( PetTalk_BigSmallLastCheck( MyMaxType, MyType , flg ) == TRUE ) {
return TRUE;
}
break;
}
return FALSE;
}
BOOL PetTalk_WarpManReduce(int meindex,int talker,char *buf)
{
char buf2[512];
char buf3[256];
int id=0;
int i;
int itemindex;
int itemno;
int kosuu;
int cnt=0;
getStringFromIndexWithDelim(buf,"=",2,buf2,sizeof(buf2));
getStringFromIndexWithDelim(buf2,"*",1,buf3,sizeof(buf3));
itemno = atoi(buf3);
getStringFromIndexWithDelim(buf2,"*",2,buf3,sizeof(buf3));
kosuu = atoi(buf3);
for( i=0 ; i < CHAR_MAXITEMHAVE;i++ ){
itemindex=CHAR_getItemIndex( talker , i );
if( ITEM_CHECKINDEX(itemindex) ){
id=ITEM_getInt(itemindex ,ITEM_ID );
if(itemno==id){
cnt++;
if(cnt==kosuu){
}
}
}
}
return FALSE;
}
BOOL PetTalk_LevelCheck(int meindex,int talker,int level,int flg)
{
int mylevel;
mylevel=CHAR_getInt(talker,CHAR_LV);
if(PetTalk_BigSmallLastCheck(level,mylevel,flg)==TRUE) {
return TRUE;
}
return FALSE;
}
BOOL PetTalk_CheckTrans(int meindex,int talker,int trans,int flg)
{
int myTrans;
myTrans=CHAR_getInt(talker, CHAR_TRANSMIGRATION);
if( PetTalk_BigSmallLastCheck( trans, myTrans, flg ) == TRUE ) {
return TRUE;
}
return FALSE;
}
BOOL PetTalk_CheckMyPet( int meindex, int talker, int petLv, int flg, int petid)
{
int petsel,petindex=-1;
for(petsel=0 ; petsel < CHAR_MAXPETHAVE ; petsel++) {
petindex = CHAR_getCharPet( talker, petsel);
if( petindex == -1 )
continue;
if(CHAR_getInt( petindex, CHAR_PETID) != petid )
continue;
break;
}
if( petsel == CHAR_MAXPETHAVE ) {
return FALSE;
}else { //找到條件寵
if( PetTalk_BigSmallLastCheck( petLv, CHAR_getInt( petindex, CHAR_LV), flg ) == TRUE )
return TRUE;
}
return FALSE;
}
BOOL PetTalk_ItemCheck(int meindex,int talker,int itemNo,int flg)
{
int i;
int itemindex=-1;
int id;
for( i=0;i<CHAR_MAXITEMHAVE;i++ ){
itemindex = CHAR_getItemIndex( talker , i );
if( ITEM_CHECKINDEX( itemindex) ) {
id=ITEM_getInt(itemindex ,ITEM_ID );
if( PetTalk_BigSmallLastCheck(itemNo,id,flg) == TRUE )
return TRUE;
}
}
return FALSE;
}
BOOL PetTalk_BigSmallLastCheck(int point1,int mypoint,int flg)
{
if(flg==0){
if(point1==mypoint) {
return TRUE;
}
}else if(flg==1){
if(mypoint < point1) {
return TRUE;
}
}else if(flg==2){
if(mypoint > point1) {
return TRUE;
}
}
return FALSE;
}
#else
void PET_Talkfunc( int meindex, int talkerindex, char *msg, int color)
{
print("\n PET_Talkfunc(...) return; ");
return;
}
#endif
void PET_CleanFreePetAll()
{
int objindex;
int objmaxnum = OBJECT_getNum();
for( objindex=0; objindex<objmaxnum; objindex++) {
if( CHECKOBJECT( objindex ) == FALSE ) continue;
PET_CleanPetdeletetime( objindex);
}
}
int PET_CleanPetdeletetime( int objmeindex)
{
int pindex;
if( OBJECT_getType(objmeindex) != OBJTYPE_CHARA ) return 0;
pindex = OBJECT_getIndex( objmeindex);
if( CHAR_getInt( pindex, CHAR_WHICHTYPE) != CHAR_TYPEPET) return 0;
#ifdef _MARKET_TRADE
if( CHAR_getWorkInt( pindex, CHAR_WORKTRADETYP) == TRADETYPE_SELL) return 0;
#endif
if( CHAR_getInt( pindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) {
}else if( CHAR_getWorkInt( pindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){
}else {
#ifdef _PET_LOSTPET
// CHAR_CharSaveLostPet( pindex, 0);
#endif
LogPet(
"系統(tǒng)",
"Watchfunc",
CHAR_getChar( pindex, CHAR_NAME),
CHAR_getInt( pindex, CHAR_LV),
"timeout_lost(系統(tǒng)清除-地上自由寵)",
CHAR_getInt( pindex, CHAR_FLOOR),
CHAR_getInt( pindex,CHAR_X ),
CHAR_getInt( pindex,CHAR_Y ),
CHAR_getChar( pindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
CHAR_CharaDelete(pindex);
return 1;
}
return 0;
}
void PET_CHECKFreePetIsIt( int petindex)
{
int petputtime, defmaxtime;
defmaxtime = getPetdeletetime();
petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME);
if( NowTime.tv_sec < ( petputtime + getPetdeletetime() ) ) return;
#ifdef _PET_LOSTPET
// CHAR_CharSaveLostPet( petindex, 0);
#endif
LogPet(
"系統(tǒng)",
"Watchfunc",
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"timeout_lost(系統(tǒng)清除-地上自由寵)",
CHAR_getInt( petindex, CHAR_FLOOR),
CHAR_getInt( petindex,CHAR_X ),
CHAR_getInt( petindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
CHAR_CharaDelete(petindex);
}
#define PETFOLLOW_TIME 60*60
void PET_Watchfunc( int objmeindex, int objmoveindex, CHAR_ACTION act, int x, int y, int dir,
int* opt, int optlen )
{
int pindex;
int petindex;
int petputtime;
if( OBJECT_getType(objmoveindex) != OBJTYPE_CHARA ) return;
pindex = OBJECT_getIndex( objmoveindex);
if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) return;
petindex = OBJECT_getIndex( objmeindex);
petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME);
#ifdef _MARKET_TRADE
if( CHAR_getWorkInt( petindex, CHAR_WORKTRADETYP) != TRADETYPE_SELL) {
#endif
if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) {
//寵?quán)]不處理
}else if( CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){
if( NowTime.tv_sec >= (petputtime + 60*60) ) {
int ownerindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX);
if( CHAR_CHECKINDEX( ownerindex) ){
if( CHAR_pickupFollowPet( ownerindex, petindex ) ) {
return;
}
CHAR_talkToCli( ownerindex, -1, "溜寵太久,寵物走失了!!", CHAR_COLORYELLOW );
}
#ifdef _PET_LOSTPET
CHAR_CharSaveLostPet( petindex, 1);
LogPet(
"系統(tǒng)",
"Watchfunc",
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"timeout_lost(系統(tǒng)扣留-溜寵自由寵)",
CHAR_getInt( petindex, CHAR_FLOOR),
CHAR_getInt( petindex,CHAR_X ),
CHAR_getInt( petindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
print("系統(tǒng)扣留-溜寵自由寵:%s\n", CHAR_getUseName( petindex));
CHAR_CharaDelete( petindex);
#else
CHAR_setInt( petindex, CHAR_PUTPETTIME, NowTime.tv_sec);
CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWMODE, CHAR_PETFOLLOW_NONE);
LogPet(
CHAR_getChar( pindex, CHAR_NAME ),
CHAR_getChar( pindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"timeout_lost(溜寵太久,寵物走失))",
CHAR_getInt( pindex,CHAR_FLOOR),
CHAR_getInt( pindex,CHAR_X ),
CHAR_getInt( pindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
#endif
return;
}
}else{
PET_CHECKFreePetIsIt( petindex);
}
#ifdef _MARKET_TRADE
}
#endif
if( CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE3 ||
CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE2){
if( act == CHAR_ACTATTACK) {
if( NPC_Util_isFaceToChara( pindex,petindex,1 ) == TRUE ) {
int action[2] = { CHAR_ACTDAMAGE, CHAR_ACTGUARD};
CHAR_sendWatchEvent( objmeindex, action[RAND(0,1)], NULL,0,FALSE);
CHAR_setWorkInt( petindex, CHAR_WORKACTION, act);
}
}
}else if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) {
;
}else if( CHAR_getWorkInt( petindex, CHAR_WORKFIXAI) >= 100 ) {
int workpindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX);
if( act == CHAR_ACTWALK && CHAR_CHECKINDEX( workpindex) && workpindex == pindex ){
dir = NPC_Util_GetDirCharToChar( petindex, pindex, 0);
if( dir != -1 ) {
if( CHAR_getInt( petindex, CHAR_DIR) != dir ) {
CHAR_setInt( petindex, CHAR_DIR, dir);
CHAR_sendWatchEvent( CHAR_getWorkInt( petindex, CHAR_WORKOBJINDEX),
CHAR_ACTTURN,NULL,0,TRUE);
}
}
}else if( NPC_Util_isFaceToFace( petindex, pindex, 2 ) == TRUE ) {
switch( act) {
case CHAR_ACTATTACK:
case CHAR_ACTDAMAGE:
case CHAR_ACTDOWN:
case CHAR_ACTSTAND:
case CHAR_ACTACTIONWALK:
case CHAR_ACTGUARD:
case CHAR_ACTACTIONSTAND:
CHAR_sendWatchEvent( objmeindex, act, NULL,0,FALSE);
CHAR_setWorkInt( petindex, CHAR_WORKACTION, act);
break;
default:
break;
}
}
}else {
/*
#ifdef _MARKET_TRADE
if( CHAR_getWorkInt( petindex, CHAR_WORKTRADETYP) != TRADETYPE_SELL) {
#endif
if( CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWMODE) != CHAR_PETFOLLOW_NOW ){
if( RAND(0,30) == 1 ) {
CHAR_walk( petindex,RAND( 0,7),0);
}
}
#ifdef _MARKET_TRADE
}
#endif
*/
}
return;
}
#ifdef _PET_TALKBBI
BOOL PET_CheckPlayerBBI( int meindex, int charindex, int BBI, int flg)
{
int MyBBI;
if( !CHAR_CHECKINDEX( charindex))
return FALSE;
if( BBI < 0 )
return FALSE;
MyBBI = CHAR_getInt( charindex, CHAR_BASEIMAGENUMBER);
if(flg==0){
if(BBI==MyBBI)
return TRUE;
}else if(flg==1){
if(BBI < MyBBI)
return TRUE;
}else if(flg==2){
if(BBI > MyBBI)
return TRUE;
}
return FALSE;
}
#endif
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -