?? char_event.c
字號:
pShow[i].paramindex) - 1 );
if( old == 1 ){
if( CHAR_getInt(charaindex,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER){
CHAR_talkToCli( charaindex,-1, pShow[i].offmessage,
CHAR_COLORWHITE );
}
cure = TRUE;
}
}
}
if( cure ){
CHAR_sendStatusString( charaindex, "P" );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt(
charaindex, CHAR_WORKOBJINDEX) );
}
}
static BOOL CHAR_clairvoyance_gold(int objindex,char* buf )
{
if( OBJECT_getType( objindex ) == OBJTYPE_GOLD ){
*buf = 'G';
return TRUE;
}
return FALSE;
}
static BOOL CHAR_clairvoyance_item(int objindex,char* buf )
{
if( OBJECT_getType( objindex ) == OBJTYPE_ITEM){
*buf = 'I';
return TRUE;
}
return FALSE;
}
static BOOL CHAR_clairvoyance_player(int objindex,char* buf )
{
if( OBJECT_getType( objindex ) == OBJTYPE_CHARA
&& CHAR_getInt(OBJECT_getIndex(objindex),CHAR_WHICHTYPE)
== CHAR_TYPEPLAYER ){
*buf = 'P';
return TRUE;
}
return FALSE;
}
static BOOL CHAR_clairvoyance_enemy(int objindex,char* buf )
{
if( OBJECT_getType( objindex ) == OBJTYPE_CHARA
&& CHAR_getInt(OBJECT_getIndex(objindex),CHAR_WHICHTYPE)
== CHAR_TYPEENEMY ){
*buf = 'E';
return TRUE;
}
return FALSE;
}
static char CHAR_clairvoyanceString[STRINGBUFSIZ];
static void CHAR_clairvoyance( int charaindex )
{
char onebuf[128];
int stringlen=0;
int clairvoyancelevel;
int centerx,centery,fl;
int i,j;
BOOL sendclairvoyance=FALSE;
#define CHAR_CLAIRVOYANCEWIDTH 81
BOOL (*clairvoyancefunc[])(int,char*) ={
CHAR_clairvoyance_gold,
CHAR_clairvoyance_item,
CHAR_clairvoyance_player,
CHAR_clairvoyance_enemy,
};
if( CHAR_getWorkInt( charaindex, CHAR_WORKLOOPSTARTSEC)%10 != 0 )
return;
clairvoyancelevel = CHAR_getInt(charaindex,CHAR_RADARSTRENGTH );
if( clairvoyancelevel <= 0 )return;
if( clairvoyancelevel > arraysizeof( clairvoyancefunc ) )
clairvoyancelevel = arraysizeof( clairvoyancefunc );
centerx = CHAR_getInt(charaindex,CHAR_X);
centery = CHAR_getInt(charaindex,CHAR_Y);
fl = CHAR_getInt(charaindex,CHAR_FLOOR);
for( i = centerx - CHAR_CLAIRVOYANCEWIDTH/2 ;
i < centerx + CHAR_CLAIRVOYANCEWIDTH/2 ; i ++ ){
for( j = centery - CHAR_CLAIRVOYANCEWIDTH/2 ;
j < centery + CHAR_CLAIRVOYANCEWIDTH/2 ; j ++ ){
OBJECT object;
for( object = MAP_getTopObj(fl,i,j) ; object ;
object = NEXT_OBJECT( object ) ){
int objindex = GET_OBJINDEX(object);
int loop;
if( OBJECT_getType(objindex) == OBJTYPE_NOUSE )continue;
if( OBJECT_getType(objindex) == OBJTYPE_CHARA
&& OBJECT_getIndex(objindex) == charaindex) continue;
for( loop = 0 ; loop < clairvoyancelevel ; loop ++ ){
BOOL ret;
char id;
ret = clairvoyancefunc[loop](objindex,&id);
if( ret == TRUE ){
sendclairvoyance=TRUE;
snprintf( onebuf,sizeof(onebuf),
"%d|%d|%c|",i,j,id );
strcpysafe( CHAR_clairvoyanceString + stringlen,
sizeof(CHAR_clairvoyanceString)
- stringlen, onebuf);
stringlen += strlen(onebuf);
if( stringlen > sizeof(CHAR_clairvoyanceString) )
goto RETURN;
}
}
}
}
}
RETURN:
if( stringlen >= 1 ){
int fd;
fd = getfdFromCharaIndex( charaindex );
dchop( CHAR_clairvoyanceString, "|" );
if( fd != -1 )
lssproto_R_send( fd, CHAR_clairvoyanceString );
}else if( !sendclairvoyance ){
int fd;
fd = getfdFromCharaIndex( charaindex );
if( fd != -1 )
lssproto_R_send( fd, "" );
}
}
void CHAR_loopFunc( int charaindex )
{
CHAR_recoveryStatus( charaindex );
CHAR_clairvoyance( charaindex );
}
void CHAR_playerresurrect( int charaindex, int hp )
{
CHAR_setInt(charaindex,CHAR_BASEIMAGENUMBER,
CHAR_getInt(charaindex,CHAR_BASEBASEIMAGENUMBER));
CHAR_setFlg(charaindex,CHAR_ISDIE, 0);
CHAR_setFlg(charaindex,CHAR_ISATTACKED, 1);
CHAR_setFlg(charaindex,CHAR_ISOVERED, 0);
if( hp >= CHAR_getWorkInt(charaindex,CHAR_WORKMAXHP) )
hp = CHAR_getWorkInt(charaindex,CHAR_WORKMAXHP);
else if( hp <= 0 )
hp = 1;
CHAR_setInt(charaindex,CHAR_HP, hp);
}
int CHAR_die( int charaindex )
{
CHAR_DischargeParty( charaindex, 0);
{
int bymonster = 0;
int attackindex = CHAR_getWorkInt(charaindex,
CHAR_WORKLASTATTACKCHARAINDEX);
if( attackindex == -2 )
bymonster = 0;
else if( CHAR_CHECKINDEX(attackindex) == TRUE ){
if( CHAR_getInt(attackindex,CHAR_WHICHTYPE)
== CHAR_TYPEENEMY ){
bymonster = 1;
}else{
bymonster = 2;
}
}
if( bymonster == 0 || bymonster == 1 ){
int i;
for( i=0 ; i<CHAR_EQUIPPLACENUM ; i++ )
CHAR_DropItem(charaindex,i);
}else{
int eqindex[CHAR_EQUIPPLACENUM];
int itemhavenum=0;
int i;
for( i=0 ; i<CHAR_EQUIPPLACENUM ; i++ )
if( ITEM_CHECKINDEX(CHAR_getItemIndex(charaindex,i)) )
eqindex[itemhavenum++] = i;
if( itemhavenum >= 1 ){
int randomindex = RAND(0,itemhavenum-1);
CHAR_DropItem(charaindex,eqindex[randomindex]);
}
}
CHAR_DropMoney(charaindex,
CHAR_getInt(charaindex,CHAR_GOLD)/2 );
CHAR_setInt(charaindex,CHAR_GOLD,0);
}
CHAR_complianceParameter(charaindex);
CHAR_sendCToArroundCharacter( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX) );
CHAR_setInt(charaindex,CHAR_DEADCOUNT,
CHAR_getInt(charaindex,CHAR_DEADCOUNT)+1);
{
int i;
BOOL old=FALSE;
for( i=0 ; i<arraysizeof(pShow);i++)
if( CHAR_setInt( charaindex, pShow[i].paramindex, 0 ) > 0 ){
old = TRUE;
}
if( CHAR_setInt( charaindex, CHAR_POISON, 0 ) > 0 )old=TRUE;
if( old )
CHAR_sendCToArroundCharacter( CHAR_getInt(charaindex, CHAR_WORKOBJINDEX));
}
CHAR_sendStatusString( charaindex, "P");
CHAR_sendStatusString( charaindex, "I");
CHAR_setFlg(charaindex,CHAR_ISDIE,1);
CHAR_setFlg(charaindex,CHAR_ISATTACKED,0);
return 0;
}
void CHAR_playerTalkedfunc( int charaindex, int talkindex,char* message, int color, int channel )
{
int fd;
char lastbuf[4096];
char mesgbuf[4096];
char escapebuf[4096];
int fmindex = CHAR_getInt( charaindex, CHAR_FMINDEX );
fd = getfdFromCharaIndex( charaindex );
if( fd == -1 )return;
if( (channel>-1) && (fmindex>0) ){
if( channel == 0 ){
#ifndef _CHANNEL_MODIFY
snprintf( lastbuf,sizeof(lastbuf),"P|[族]%s",
#else
snprintf( lastbuf,sizeof(lastbuf),"P|F|[族]%s",
#endif
makeEscapeString( CHAR_appendNameAndTitle(talkindex, message, mesgbuf,sizeof(mesgbuf)),
escapebuf,sizeof(escapebuf) ));
}
#ifdef _FMVER21
else if( channel == FAMILY_MAXCHANNEL && CHAR_getInt( talkindex, CHAR_FMLEADERFLAG ) == FMMEMBER_LEADER ){
#else
else if( channel == FAMILY_MAXCHANNEL && CHAR_getInt( talkindex, CHAR_FMLEADERFLAG ) == 1 ){
#endif
#ifndef _CHANNEL_MODIFY
snprintf( lastbuf,sizeof(lastbuf),"P|[族長廣播]%s",
#else
snprintf( lastbuf,sizeof(lastbuf),"P|F|[族長廣播]%s",
#endif
makeEscapeString(CHAR_appendNameAndTitle(talkindex, message,mesgbuf,sizeof(mesgbuf)),
escapebuf,sizeof(escapebuf) ));
}else{
snprintf( lastbuf,sizeof(lastbuf),"P|[%d]%s",channel,
makeEscapeString(CHAR_appendNameAndTitle(talkindex, message,mesgbuf,sizeof(mesgbuf)),
escapebuf,sizeof(escapebuf) ));
}
}else{
#ifdef _CHANNEL_MODIFY
if(CHAR_getFlg(talkindex,CHAR_ISPARTYCHAT) && (CHAR_getWorkInt(talkindex,CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE))
snprintf( lastbuf,sizeof(lastbuf),"P|T|[隊]%s",
makeEscapeString(CHAR_appendNameAndTitle(talkindex, message,mesgbuf,sizeof(mesgbuf)),
escapebuf,sizeof(escapebuf) ));
else
#ifdef _FONT_SIZE
snprintf( lastbuf,sizeof(lastbuf),"P|P|%s|%d",
makeEscapeString(CHAR_appendNameAndTitle(talkindex, message,mesgbuf,sizeof(mesgbuf)),
escapebuf,sizeof(escapebuf) ), CHAR_getWorkInt( talkindex, CHAR_WORKFONTSIZE) );
#else
snprintf( lastbuf,sizeof(lastbuf),"P|P|%s",
makeEscapeString(CHAR_appendNameAndTitle(talkindex, message,mesgbuf,sizeof(mesgbuf)),
escapebuf,sizeof(escapebuf) ));
#endif
#else
snprintf( lastbuf,sizeof(lastbuf),"P|%s",
makeEscapeString(CHAR_appendNameAndTitle(talkindex, message,mesgbuf,sizeof(mesgbuf)),
escapebuf,sizeof(escapebuf) ));
#endif
}
lssproto_TK_send( fd, CHAR_getWorkInt( talkindex, CHAR_WORKOBJINDEX ),lastbuf, color);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -