亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? char_walk.c

?? 石器時代8.0服務端完整源代碼??梢灾苯泳幾g
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "version.h"
#include <stdio.h>
#include <ctype.h>
#include <time.h>
//???
#include "common.h"
#include "handletime.h"
#include "object.h"
#include "char_base.h"
#include "char.h"
#include "char_event.h"
#include "lssproto_serv.h"
#include "readmap.h"
#include "map_deal.h"
#include "npccreate.h"
#include "encount.h"
#include "npcutil.h"
#include "battle.h"
#include "net.h"
#include "configfile.h"
#include "npc_npcenemy.h"

static void CHAR_sendCharaAtWalk( int charaindex, int of, int ox, int oy, int xflg, int yflg );
static void CHAR_sendCDCharaAtWalk( int charaindex, int of, int ox, int oy,	int xflg, int yflg );

static CHAR_WALKRET CHAR_walk_turn( int index, int dir )
{
    int     fx,fy,ff;
    OBJECT  object;

    if(!CHAR_CHECKINDEX( index ))return CHAR_WALKSYSTEMERROR;
    CHAR_setInt(index,CHAR_DIR,dir);
    fx = CHAR_getInt(index,CHAR_X);
    fy = CHAR_getInt(index,CHAR_Y);
    ff = CHAR_getInt(index,CHAR_FLOOR);
    CHAR_sendWatchEvent( CHAR_getWorkInt(index, CHAR_WORKOBJINDEX),
                         CHAR_ACTTURN,NULL,0,FALSE);
	CHAR_setWorkInt( index, CHAR_WORKACTION, CHAR_ACTTURN);
    for( object = MAP_getTopObj(ff,fx,fy) ; object ;
         object = NEXT_OBJECT(object ) ){
        typedef void (*POSTOFUNC)(int,int);
        POSTOFUNC   pfunc=NULL;
        int objindex = GET_OBJINDEX(object);

        switch( OBJECT_getType(objindex)  ){
        case OBJTYPE_CHARA:
            pfunc = (POSTOFUNC)CHAR_getFunctionPointer(
                OBJECT_getIndex(objindex),
                CHAR_POSTOVERFUNC);
            break;
        case OBJTYPE_ITEM:
            pfunc = (POSTOFUNC)ITEM_getFunctionPointer(
                OBJECT_getIndex(objindex),
                ITEM_POSTOVERFUNC);
            break;
        case OBJTYPE_GOLD:
            break;
        default:
            break;
        }
        if( pfunc )pfunc( OBJECT_getIndex(objindex),index );
    }
    return CHAR_WALKSUCCESSED;
}


/*------------------------------------------------------------
 * n 洶 洶中兇map毛霜月
 * 婁醒
 *  index       int     平乓仿及奶件犯永弁旦
 *  fl          int     白夫失ID
 *  ox          int     蟆及橇謫及x
 *  oy          int     蟆及橇謫及y
 *  fx          int     洶中兇  及x
 *  fy          int     洶中兇  及y
 * 忒曰襖
 *  卅仄
 ------------------------------------------------------------*/
static void CHAR_sendMapAtWalk( int index, int fl ,int ox ,int oy,
								int fx, int fy )
{
    /*
     *  蜇箕及襖午}蟆引匹及襖及犒毛葦月
     *  仇丹允月午}伐□皿NPC手棵簽分[
     */
    int     vx,vy;
    const int     seesiz = MAP_CHAR_DEFAULTSEESIZ;

    if( !CHAR_CHECKINDEX( index ) )return;

    vx = fx - ox;
    vy = fy - oy;

    if( ABS(vx) >= seesiz/2 ||       /*  犒互  五中  */
        ABS(vy) >= seesiz/2 ){       /*  犒互  五中  */
        return;

    }else{
        RECT    send,get;
        char*   mapdata;
        int oldlux = ox - (int)(seesiz/2);
        int oldluy = oy - (int)(seesiz/2);
        int absx = ABS(vx);
        int absy = ABS(vy);
        /*
         * 夫午勾聶戶卞旦正□玄毛潸月及午}vx , vy 井日1夫仁及互禾奶件玄
         * 蟆午井今卅日卅中方丹卞}
         * clipRect 反 w,h 0 毛心午戶化中月
         */

        /*  == 0 及凜反霜日卅仁化方中   */
        if( vx != 0 ){
            if( vx > 0 ){
                send.x     = oldlux + seesiz;
                send.width = absx;
            }else if( vx < 0 ){
                send.x     = oldlux - absx;
                send.width = absx;
            }

            if( vy >= 0 ){
                send.y      = oldluy;
                send.height = seesiz + absy;
            }else{
                send.y      = oldluy - absy;
                send.height = seesiz + absy;
            }
{
            int     tilesum, objsum,eventsum;
            mapdata = MAP_getChecksumFromRECT(fl,&send,&get,&tilesum, &objsum,&eventsum );
            if( mapdata != NULL
                && !( get.width == 0 && get.height == 0 ) ){
                int fd = getfdFromCharaIndex( index );
                if( fd !=  -1 )
                    lssproto_MC_send( fd,fl,get.x,get.y,
                                     get.x+get.width,
                                     get.y+get.height,
                                     tilesum,
                                     objsum,
                                     eventsum,
                                     mapdata );
            }
}
        }

        /*  == 0 及凜反霜日卅仁化方中   */
        if( vy != 0 ){
            if( vy > 0 ){
                send.y      = oldluy + seesiz;
                send.height = absy;
            }else{
                send.y      = oldluy - absy;
                send.height = absy;
            }
            if( vx >= 0 ){
                send.x     = oldlux;
                send.width = seesiz + absx;
            }else if( vx < 0 ){
                send.x     = oldlux - absx;
                send.width = seesiz + absx;
            }
{
            int     tilesum, objsum,eventsum;
            mapdata = MAP_getChecksumFromRECT(fl,&send,&get, &tilesum, &objsum,&eventsum);
            if( mapdata != NULL
                && !( get.width == 0 && get.height == 0 ) ){
                int fd = getfdFromCharaIndex( index );
                if( fd !=  -1 )
                    lssproto_MC_send( fd,fl,get.x,get.y,
                                     get.x+get.width,
                                     get.y+get.height,
                                     tilesum,
                                     objsum,
                                     eventsum,
                                     mapdata );

            }
}
        }
    }

}
static CHAR_WALKRET CHAR_walk_move( int charaindex, int dir );
/*------------------------------------------------------------
 * 啖  允月[
 * 婁醒
 *  index       int     平乓仿及奶件犯永弁旦
 *  dir         int       輊
 * 忒曰襖
 *  CHAR_WALKRET
 ------------------------------------------------------------*/
static CHAR_WALKRET CHAR_walk_move( int charaindex, int dir )
{
    int     i;
    int     fx,fy,ff;
    int     ox,oy,of;
    int     objbuf[128];
    int     objbufindex=0;
    int     notover=FALSE;
    int     retvalue=CHAR_WALKSUCCESSED;

    if( !CHAR_CHECKINDEX( charaindex )) return CHAR_WALKSYSTEMERROR;
    ox = CHAR_getInt(charaindex,CHAR_X);
    oy = CHAR_getInt(charaindex,CHAR_Y);
    of = CHAR_getInt(charaindex,CHAR_FLOOR);
    CHAR_getCoordinationDir( dir,ox,oy,1,&fx,&fy);
    ff = of;

    if( CHAR_getInt( charaindex,CHAR_WHICHTYPE ) == CHAR_TYPEENEMY ){
        RECT    walkr;
        POINT   nextp;
        int npccreateindex;
        npccreateindex = CHAR_getInt( charaindex,CHAR_NPCCREATEINDEX );
        if( CHAR_isInvincibleArea( ff,fx,fy)) {
            CHAR_setInt(charaindex,CHAR_DIR,dir);
            retvalue = CHAR_WALKEXTEND;
            goto CHAR_AFTERWALK;
        }
        if( NPC_isBoundarySet( npccreateindex ) &&
            NPC_createGetRECT( npccreateindex,&walkr ) == TRUE )
        {
            nextp.x = fx;
            nextp.y = fy;
            if( PointInRect( &walkr,&nextp ) == FALSE ){
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALKEXTEND;
                goto CHAR_AFTERWALK;
            }
        }else{
            ;
        }
    }


    if( CHAR_getFlg( charaindex, CHAR_ISBIG ) == 1 ){
        static POINT offset[5]={
            { 0,-1},
            {-1, 0},
            { 0, 0},
            { 1, 0},
            { 0, 1},
        };
        int     k;
        for( k=0 ; k<5; k++ ){
            if( !MAP_walkAble( charaindex, ff, fx+offset[k].x,
                               fy+offset[k].y )){
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALK1357;
                goto CHAR_AFTERWALK;
            }
        }

    }else{
        if( CHAR_getDX(dir)*CHAR_getDY(dir) == 0 ){
            if( !MAP_walkAble( charaindex,ff, fx, fy ) ){
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALK1357;
                goto CHAR_AFTERWALK;
            }
        }else{
            int     xflg,yflg;
            if( !MAP_walkAble( charaindex,ff, fx, fy ) ){
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALK1357;
                goto CHAR_AFTERWALK;
            }

            xflg = MAP_walkAble( charaindex,of, ox+CHAR_getDX(dir), oy );
            yflg = MAP_walkAble( charaindex,of, ox, oy+CHAR_getDY(dir) );

            if( !xflg || !yflg ) {
                CHAR_setInt(charaindex,CHAR_DIR,dir);
                retvalue = CHAR_WALK1357;
                goto CHAR_AFTERWALK;
            }
        }
    }
    objbufindex = CHAR_getSameCoordinateObjects( objbuf, arraysizeof( objbuf ), ff,fx,fy );
    for( i = 0 ; i < objbufindex ; i ++ ){
        int     objindex= objbuf[i];
        switch( OBJECT_getType(objindex) ){
        case OBJTYPE_CHARA:
            if( !CHAR_getFlg( OBJECT_getIndex(objindex),CHAR_ISOVERED) )
                notover= TRUE;
            break;
        case OBJTYPE_ITEM:
            if( !ITEM_getInt( OBJECT_getIndex(objindex), ITEM_ISOVERED ) )
                notover= TRUE;
            break;
        case OBJTYPE_GOLD:
            break;
        default:
            break;
        }
    }
    if( notover == TRUE ){
        CHAR_setInt(charaindex,CHAR_DIR,dir);
        retvalue = CHAR_WALKHITOBJECT;
    }else{
        for( i = 0 ; i < objbufindex ; i ++ ){
            typedef void (*PREOFUNC)(int,int);
            PREOFUNC   pfunc=NULL;
            int     objindex=objbuf[i];
            switch( OBJECT_getType(objindex) ){
            case OBJTYPE_CHARA:
                pfunc = (PREOFUNC)CHAR_getFunctionPointer(
                    OBJECT_getIndex(objindex),
                    CHAR_PREOVERFUNC);
                break;
            case OBJTYPE_ITEM:
                pfunc = (PREOFUNC)ITEM_getFunctionPointer(
                    OBJECT_getIndex(objindex),
                    ITEM_PREOVERFUNC);
                break;
            case OBJTYPE_GOLD:
                break;
            default:
                break;
            }
            if( pfunc )pfunc( OBJECT_getIndex(objindex),charaindex );
        }

        CHAR_setInt(charaindex,CHAR_X,fx);
        CHAR_setInt(charaindex,CHAR_Y,fy);
        CHAR_setInt(charaindex,CHAR_FLOOR,ff);
        CHAR_setInt(charaindex,CHAR_DIR,dir);

        {
            int objindex;
            int ox,oy,of;
            objindex = CHAR_getWorkInt( charaindex,CHAR_WORKOBJINDEX );
            of = OBJECT_setFloor(objindex,
                                 CHAR_getInt(charaindex,CHAR_FLOOR));
            ox = OBJECT_setX(objindex,CHAR_getInt(charaindex,CHAR_X));
            oy = OBJECT_setY(objindex,CHAR_getInt(charaindex,CHAR_Y));
            if( !MAP_objmove( objindex, of,ox,oy,ff,fx,fy ) ){
                /*  仇氏卅氏升丹仄方丹手卅中    */
                fprint( "ERROR MAP_OBJMOVE objindex=%d(%s)\n",objindex,
                	CHAR_getUseName( charaindex ) );
            }
        }

        CHAR_setInt(charaindex,CHAR_WALKCOUNT,
                    CHAR_getInt(charaindex,CHAR_WALKCOUNT) + 1 );


        for( i = 0 ; i < objbufindex ; i ++ ){
            typedef void (*POSTOFUNC)(int,int);
            POSTOFUNC   pfunc=NULL;
            int     objindex=objbuf[i];

            switch( OBJECT_getType(objindex) ){
            case OBJTYPE_CHARA:
                pfunc = (POSTOFUNC)CHAR_getFunctionPointer(
                    OBJECT_getIndex(objindex),
                    CHAR_POSTOVERFUNC);
                break;
            case OBJTYPE_ITEM:
                pfunc = (POSTOFUNC)ITEM_getFunctionPointer( OBJECT_getIndex(objindex), ITEM_POSTOVERFUNC);
                break;
            case OBJTYPE_GOLD:
                break;
            default:
                break;
            }
            if( pfunc )pfunc( OBJECT_getIndex(objindex),charaindex );
        }
        objbufindex = CHAR_getSameCoordinateObjects(objbuf, arraysizeof(objbuf), of, ox, oy );
        for( i=0 ;i<objbufindex;i++){
            typedef void (*OFFFUNC)(int,int);
            OFFFUNC   ofunc=NULL;
            int     objindex = objbuf[i];

            switch( OBJECT_getType( objindex ) ){
            case OBJTYPE_CHARA:
                ofunc = (OFFFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex), CHAR_OFFFUNC);
                break;
            case OBJTYPE_ITEM:
                /*    卞窒手仄卅中  */
                break;
            case OBJTYPE_GOLD:
                /*    卞窒手仄卅中  */
                break;
            default:
                break;
            }
            if( ofunc )ofunc( OBJECT_getIndex(objindex), charaindex );

        }
    }
CHAR_AFTERWALK:
    if( retvalue == CHAR_WALK1357 || retvalue == CHAR_WALKHITOBJECT ){
	    {
	        int     opt[2] = { ox, oy};
	        CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex,
	                                             CHAR_WORKOBJINDEX),
	                             CHAR_ACTWALK,opt,2,TRUE );
	    }
        CHAR_setWorkChar( charaindex, CHAR_WORKWALKARRAY, "");
		if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) {
		    CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX),
    		                     CHAR_ACTWARP,NULL,0,TRUE);
		}
    }else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){

		BOOL	flg = FALSE;
		int		par;
		int		count;
		CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1 );
		if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE ){
			CHAR_sendCharaAtWalk( charaindex, of,ox,oy,CHAR_getDX(dir), CHAR_getDY(dir));
		}

	    {
	        int     opt[2] = { ox, oy};
	        CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex,
	                                             CHAR_WORKOBJINDEX),
	                             CHAR_ACTWALK,opt,2,TRUE );
	    }
		if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) {
			CHAR_sendMapAtWalk( charaindex, of,
								ox,oy,
								CHAR_getInt( charaindex, CHAR_X),
								CHAR_getInt( charaindex, CHAR_Y));
		}
		count = CHAR_getWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT);
		if( count > 0 ) {
			CHAR_setWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT, count -1);
			if( count -1 == 0 ) {
				CHAR_talkToCli( charaindex, -1, "道具的效力已到。", CHAR_COLORWHITE);
			}
		}
		par = ENCOUNT_getEncountPercentMin( charaindex, of,ox,oy);
		if( par != -1 ) {
			if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN) != par ){
				flg = TRUE;
				CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, par);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产sm精品调教视频网站| 欧美一区二区在线不卡| 精品区一区二区| 日韩高清国产一区在线| 欧美一级夜夜爽| 在线91免费看| 国产精品一区免费在线观看| 久久久噜噜噜久噜久久综合| 丁香婷婷综合网| 国产91精品精华液一区二区三区 | 91浏览器入口在线观看| 亚洲久草在线视频| 欧美日韩国产综合一区二区三区| 青青草一区二区三区| 国产欧美久久久精品影院| 91在线免费视频观看| 美女爽到高潮91| 怡红院av一区二区三区| 亚洲专区一二三| 精品va天堂亚洲国产| 欧美性色黄大片| 国产高清不卡一区二区| 首页国产欧美日韩丝袜| 国产精品久久久久久久蜜臀| 欧美巨大另类极品videosbest| 日本欧美肥老太交大片| 免费成人在线观看| 国产suv一区二区三区88区| 99精品视频在线免费观看| 在线观看视频91| 99国产精品国产精品毛片| 欧美视频三区在线播放| 亚洲精品在线电影| 亚洲免费在线观看视频| 国产精品另类一区| 国产午夜精品一区二区三区嫩草 | 日韩精品最新网址| 欧美人xxxx| 欧美国产亚洲另类动漫| 国产欧美日韩激情| 亚洲一区二区欧美日韩| 国产在线播放一区三区四| 麻豆成人在线观看| 91久久一区二区| 91丨porny丨国产入口| 制服.丝袜.亚洲.另类.中文| 国产精品天天看| 免费看日韩精品| 97se亚洲国产综合自在线不卡| 这里只有精品免费| 最新热久久免费视频| 成人欧美一区二区三区视频网页| 亚洲1区2区3区4区| 亚洲图片欧美色图| 日韩电影免费一区| 色综合色综合色综合| 91小视频在线观看| www国产成人免费观看视频 深夜成人网| 日韩免费看的电影| 亚洲国产视频直播| 国产成人精品影视| 日韩欧美亚洲国产另类| 一区二区理论电影在线观看| 亚洲三级电影网站| 亚洲国产精品综合小说图片区| 成人免费视频一区| 99re8在线精品视频免费播放| 精品国产凹凸成av人网站| 亚洲不卡一区二区三区| 日本道色综合久久| |精品福利一区二区三区| 国产成人h网站| www日韩大片| 国产精品538一区二区在线| 精品伦理精品一区| 精品一区二区三区免费播放| 国产精品系列在线观看| 欧美变态凌虐bdsm| 蜜臂av日日欢夜夜爽一区| 在线综合+亚洲+欧美中文字幕| 亚洲香肠在线观看| 欧美性生交片4| 天天影视色香欲综合网老头| 狠狠色丁香婷婷综合| 91免费在线看| 亚洲黄网站在线观看| 91亚洲精品久久久蜜桃网站 | 欧美久久一二三四区| 午夜精品爽啪视频| 91麻豆精品国产综合久久久久久 | 一区二区三区鲁丝不卡| 色婷婷亚洲精品| 亚洲国产一区二区a毛片| 欧美日韩夫妻久久| 久久99精品国产麻豆不卡| 日韩欧美高清在线| 成人精品视频.| 亚洲一区免费在线观看| 日韩情涩欧美日韩视频| 自拍偷自拍亚洲精品播放| 色久优优欧美色久优优| 日韩精品91亚洲二区在线观看 | 一区二区三区欧美亚洲| 欧美日韩免费不卡视频一区二区三区| 日本免费在线视频不卡一不卡二| 精品福利一区二区三区| 9i在线看片成人免费| 欧美国产精品一区二区| 在线视频你懂得一区| 狠狠色丁香婷婷综合久久片| 国产精品成人午夜| 4438x亚洲最大成人网| 国产精品自拍网站| 亚洲成人动漫在线观看| 久久久国产综合精品女国产盗摄| 99久久精品免费精品国产| 日韩av二区在线播放| 国产精品色噜噜| 91精品国产综合久久久久久久 | 成人欧美一区二区三区白人| 欧美精品777| 91影院在线观看| 老司机精品视频线观看86| 91精品国产综合久久福利软件| 国产不卡一区视频| 男女男精品视频| 亚洲精品第一国产综合野| 国产性天天综合网| 欧美日韩精品一区视频| 懂色av一区二区三区免费观看| 天堂av在线一区| 亚洲免费视频成人| 国产视频视频一区| 精品国产乱码久久久久久影片| 在线观看日韩毛片| 国产一区日韩二区欧美三区| 欧美精品一区二区三区一线天视频| 国产美女主播视频一区| 亚洲444eee在线观看| 欧美日韩亚洲国产综合| 日韩一区有码在线| 国产欧美va欧美不卡在线| 欧美电影免费观看高清完整版在线观看 | 欧美性猛交xxxxxx富婆| 99久久免费国产| 国产精品亚洲综合一区在线观看| 日韩精品免费视频人成| 亚洲二区在线观看| 一区二区三区美女视频| 国产精品国产自产拍高清av| 久久久久久黄色| 2021中文字幕一区亚洲| 亚洲精品一区二区三区在线观看| 日韩欧美在线观看一区二区三区| 欧美美女黄视频| 91麻豆精品国产91久久久久| 4438亚洲最大| 欧美成人精品1314www| 欧美不卡123| 国产日本欧洲亚洲| **欧美大码日韩| 亚洲国产精品一区二区久久恐怖片| 一区二区三区毛片| 日韩高清在线不卡| 免费高清在线一区| 国产精品一区二区三区99| 国产在线视频精品一区| 国产成人在线观看| 99久久久久免费精品国产| 97国产精品videossex| 欧美在线你懂得| 欧美一级一区二区| 国产欧美日韩另类一区| 国产精品美女视频| 亚洲成人一区在线| 国内不卡的二区三区中文字幕 | 欧美精品久久99| 日韩免费性生活视频播放| 久久久亚洲欧洲日产国码αv| 国产日韩视频一区二区三区| 亚洲欧美综合色| 五月婷婷激情综合| 国产成人免费高清| 欧美三级视频在线观看| 精品国产麻豆免费人成网站| 国产精品青草综合久久久久99| 亚洲伦理在线精品| 精品一区二区三区视频在线观看| 国产成人av影院| 欧美日韩国产综合草草| 久久精品这里都是精品| 一区二区欧美视频| 国产在线观看免费一区| 91亚洲男人天堂| 日韩欧美不卡一区| 一区二区三区精品在线观看| 久久精品久久综合| 色88888久久久久久影院野外| 日韩欧美国产综合一区 | 久久奇米777|