?? char_event.c
字號(hào):
#include "version.h"
#include <ctype.h>
#include "common.h"
#include "char.h"
#include "item_event.h"
#include "net.h"
#include "item.h"
#include "object.h"
#include "lssproto_serv.h"
#include "util.h"
#include "char_data.h"
#include "readmap.h"
#include "map_deal.h"
#include "item.h"
#include "saacproto_cli.h"
#include "npccreate.h"
#include "handletime.h"
#include "anim_tbl.h"
#include "family.h"
#define SPR_kmydam CG_HIT_MARK_00
BOOL CHAR_allprewalk( int index,int* dir,int* mode)
{
int poisonvalue;
poisonvalue = CHAR_getInt(index, CHAR_POISON );
if( poisonvalue >= 1 ){
CHAR_setInt(index,CHAR_HP , CHAR_getInt(index,CHAR_HP)
- poisonvalue );
CHAR_setWorkInt(index,CHAR_WORKLASTATTACKCHARAINDEX,-2);
{
int opt[2] = { SPR_kmydam,poisonvalue};
CHAR_sendWatchEvent( CHAR_getWorkInt(index,CHAR_WORKOBJINDEX),
CHAR_ACTDAMAGE,opt,2,TRUE);
CHAR_sendStatusString( index,"M");
}
poisonvalue--;
if( poisonvalue <= 0)poisonvalue = 1;
CHAR_setInt(index,CHAR_POISON,poisonvalue);
}
if( CHAR_getInt(index,CHAR_CONFUSION) != 0 )
*dir = RAND(0,7);
if( CHAR_getInt(index,CHAR_STONE) != 0 )
return FALSE;
return TRUE;
}
void CHAR_allpostwalk( int index )
{
return;
}
BOOL CHAR_makeCADefaultString( int objindex,char* buf,int buflen, int act )
{
char objindexbuf[64];
/* 民尼永弁 */
if( CHECKOBJECT(objindex) == FALSE ) return FALSE;
if( OBJECT_getType(objindex) != OBJTYPE_CHARA ) return FALSE;
snprintf( buf,buflen,"%s|%d|%d|%d|%d",
cnv10to62( objindex,objindexbuf, sizeof(objindexbuf)),
OBJECT_getX(objindex), OBJECT_getY(objindex),
act,
CHAR_getInt(OBJECT_getIndex(objindex),CHAR_DIR));
return TRUE;
}
static void CHAR_makeCADAMAGEStringFromSpecifiedCoordinate(
int x , int y, char* buf,int buflen,int ef1,int damagevalue )
{
snprintf( buf,buflen,"%d|%d|%d|%d|%d|%d|%d",
-1,x,y, CHAR_ACTDAMAGE,0, ef1,damagevalue);
}
BOOL CHAR_makeCAOPT1String( int objindex,char* buf, int buflen, int act,int opt1 )
{
char objindexbuf[64];
if( CHECKOBJECT(objindex) == FALSE ) return FALSE;
if( OBJECT_getType(objindex) != OBJTYPE_CHARA ) return FALSE;
snprintf( buf,buflen,"%s|%d|%d|%d|%d|%d",
cnv10to62( objindex,objindexbuf, sizeof(objindexbuf)),
OBJECT_getX(objindex), OBJECT_getY(objindex),
act,
CHAR_getInt(OBJECT_getIndex(objindex),CHAR_DIR), opt1);
return TRUE;
}
#ifdef _STREET_VENDOR
BOOL CHAR_makeCAOPTString(int objindex,char* buf,int buflen,int act,char *string)
{
char objindexbuf[64];
if(CHECKOBJECT(objindex) == FALSE ) return FALSE;
if(OBJECT_getType(objindex) != OBJTYPE_CHARA ) return FALSE;
snprintf( buf,buflen,"%s|%d|%d|%d|%d|%s",
cnv10to62(objindex,objindexbuf, sizeof(objindexbuf)),
OBJECT_getX(objindex), OBJECT_getY(objindex),act,
CHAR_getInt(OBJECT_getIndex(objindex),CHAR_DIR),string);
return TRUE;
}
#endif
BOOL CHAR_makeCAOPT3String( int objindex,char* buf, int buflen, int act,int opt1,int opt2,int opt3 )
{
char objindexbuf[64];
if( CHECKOBJECT(objindex) == FALSE ) return FALSE;
if( OBJECT_getType(objindex) != OBJTYPE_CHARA ) return FALSE;
snprintf( buf,buflen,"%s|%d|%d|%d|%d|%d|%d|%d",
cnv10to62( objindex,objindexbuf, sizeof(objindexbuf)),
OBJECT_getX(objindex), OBJECT_getY(objindex),
act,
CHAR_getInt(OBJECT_getIndex(objindex),CHAR_DIR),
opt1,opt2,opt3);
return TRUE;
}
void CHAR_playerWatchfunc( int objmeindex, int objmoveindex,
CHAR_ACTION act, int x, int y, int dir, int* opt, int optlen )
{
int fd;
int meindex;
if( !CHECKOBJECTUSE(objmeindex) )return;
if( !CHECKOBJECTUSE(objmoveindex))return;
if( OBJECT_getType(objmeindex) != OBJTYPE_CHARA )return;
meindex = OBJECT_getIndex(objmeindex);
if( CHAR_getInt( meindex,CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )return;
fd = getfdFromCharaIndex( meindex );
if( fd == -1 )return;
switch( OBJECT_getType(objmoveindex) ){
case OBJTYPE_CHARA:
{
char buf[128];
if( !CHAR_getFlg( OBJECT_getIndex(objmoveindex),CHAR_ISVISIBLE) )
return;
switch( act ){
case CHAR_ACTSTAND:
case CHAR_ACTWALK:
case CHAR_ACTATTACK:
case CHAR_ACTDEAD:
case CHAR_ACTMAGIC:
case CHAR_ACTITEM:
case CHAR_ACTDOWN:
case CHAR_ACTSIT:
case CHAR_ACTHAND:
case CHAR_ACTPLEASURE:
case CHAR_ACTANGRY:
case CHAR_ACTSAD:
case CHAR_ACTDAMAGE:
case CHAR_ACTGUARD:
case CHAR_ACTTURN:
case CHAR_ACTWARP:
case CHAR_ACTACTIONWALK:
case CHAR_ACTNOD:
case CHAR_ACTTHROW:
case CHAR_ACTACTIONSTAND:
if( CHAR_makeCADefaultString(objmoveindex,buf,sizeof(buf),act) ) {
CONNECT_appendCAbuf( fd,buf,strlen(buf));
}
break;
// shan begin
case CHAR_ACTTRADE:
if( optlen == 1 )
if( CHAR_makeCAOPT1String( objmoveindex, buf,
sizeof( buf), act, opt[0] ) )
CONNECT_appendCAbuf( fd, buf, strlen(buf));
break;
#ifdef _ANGEL_SUMMON
case CHAR_ACTANGEL:
if( optlen == 1 )
if( CHAR_makeCAOPT1String( objmoveindex, buf,
sizeof( buf), act, opt[0] ) )
CONNECT_appendCAbuf( fd, buf, strlen(buf));
break;
#endif
// shan end
#ifdef _MIND_ICON
case CHAR_MIND:
if( optlen == 1 )
if( CHAR_makeCAOPT1String( objmoveindex, buf,
sizeof(buf), act, opt[0]))
CONNECT_appendCAbuf( fd, buf, strlen(buf));
break;
#endif
#ifdef _STREET_VENDOR
case CHAR_STREETVENDOR_OPEN:
if(CHAR_makeCAOPTString(objmoveindex,buf,sizeof(buf),
act,CHAR_getWorkChar(OBJECT_getIndex(objmoveindex),CHAR_STREETVENDOR_NAME)))
CONNECT_appendCAbuf(fd,buf,strlen(buf));
break;
case CHAR_STREETVENDOR_CLOSE:
if(CHAR_makeCAOPTString(objmoveindex,buf,sizeof(buf),
act,CHAR_getWorkChar(OBJECT_getIndex(objmoveindex),CHAR_STREETVENDOR_NAME)))
CONNECT_appendCAbuf(fd,buf,strlen(buf));
break;
#endif
#ifdef _ITEM_CRACKER
case CHAR_ITEM_CRACKER:
if( optlen == 1 )
if( CHAR_makeCAOPT1String( objmoveindex, buf,
sizeof(buf), act, opt[0]))
CONNECT_appendCAbuf( fd, buf, strlen(buf));
break;
#endif
case CHAR_ACTEFFECT:
if( optlen == 1 )
if( CHAR_makeCAOPT1String(objmoveindex,buf,
sizeof(buf),act,opt[0] ) )
CONNECT_appendCAbuf( fd,buf,strlen(buf));
break;
case CHAR_ACTPOPUPNAME:
case CHAR_ACTLEADER:
case CHAR_ACTBATTLEWATCH:
if( optlen == 1 )
if( CHAR_makeCAOPT1String(objmoveindex,buf,
sizeof(buf),act,opt[0] ) )
CONNECT_appendCAbuf( fd,buf,strlen(buf));
break;
case CHAR_ACTBATTLE:
if( optlen == 3 )
if( CHAR_makeCAOPT3String( objmoveindex,buf, sizeof(buf),
act,opt[0],opt[1],opt[2] ) )
CONNECT_appendCAbuf( fd,buf,strlen(buf));
break;
default:
break;
}
break;
}
case OBJTYPE_ITEM:
case OBJTYPE_GOLD:
CHAR_sendSpecifiedobjindexCToCharaindex(meindex,objmoveindex);
break;
default:
break;
}
}
void CHAR_sendWallDamage( int charaindex,int x, int y, int damage )
{
int fd;
char cabuf[256]="";
fd = getfdFromCharaIndex(charaindex);
if( fd == -1 )return;
CHAR_makeCADAMAGEStringFromSpecifiedCoordinate(
x,y,cabuf,sizeof(cabuf),SPR_kmydam,damage );
CONNECT_appendCAbuf( fd,cabuf,strlen(cabuf));
}
static struct ParamShow
{
int paramindex; /* 由仿丟□正及奶件犯永弁旦 */
char* offmessage; /* 勻兇凜及丟永本□斥 儂 */
}pShow[]={
{CHAR_PARALYSIS, CHAR_RECOVERPARALYSISSTRING},
{CHAR_SLEEP, CHAR_RECOVERSILENCESTRING},
{CHAR_STONE, CHAR_RECOVERSTONESTRING},
{CHAR_DRUNK, CHAR_RECOVERDARKNESSSTRING},
{CHAR_CONFUSION, CHAR_RECOVERCONFUSIONSTRING},
};
void CHAR_recoveryStatus( int charaindex )
{
int i;
int cure=FALSE;
if( !CHAR_CHECKINDEX(charaindex) )return;
for( i=0 ; i < arraysizeof(pShow) ; i ++ ){
if( CHAR_getInt(charaindex,pShow[i].paramindex) > 0 ){
int old;
old = CHAR_setInt(charaindex,pShow[i].paramindex,
CHAR_getInt(charaindex,
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -