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

📄 char_event.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#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_00BOOL 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;}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;		// 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 _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,                                          pShow[i].paramindex) - 1 );            if( old == 1 ){                if( CHAR_getInt(charaindex,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER){                    CHAR_talkToCli( charaindex,-1, pShow[i].offmessage,                                    CHAR_COLORWHITE );

⌨️ 快捷键说明

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