Beispiel #1
0
int			hook_key(int keycode, t_fdf *fdf)
{
	if (keycode == KEY_ESCAPE)
		exit(0);
	else if (keycode == KEY_MOVE_UP)
		action_move(fdf, 0, 1);
	else if (keycode == KEY_MOVE_DOWN)
		action_move(fdf, 0, -1);
	else if (keycode == KEY_MOVE_RIGHT)
		action_move(fdf, 1, 0);
	else if (keycode == KEY_MOVE_LEFT)
		action_move(fdf, -1, 0);
	else if (keycode == KEY_ZOOM_IN)
		action_scale(fdf, 1);
	else if (keycode == KEY_ZOOM_OUT)
		action_scale(fdf, -1);
	else if (keycode == KEY_SCALE_UP_X)
		action_scale_x(fdf, 1);
	else
		hook_key2(keycode, fdf);
	return (0);
}
Beispiel #2
0
int action(string arg)
{
        string keyword,verb,type,err_msg,check_ob,clan,*ally;
        object obj;
        int check_clan;


        verb = query_verb();
        keyword = env->query("action/"+verb+"/keyword");
        type = env->query("action/"+verb+"/type");
        err_msg = env->query("action/"+verb+"/err_msg");
        check_ob = env->query("action/"+verb+"/check_ob");
        check_clan = env->query("action/"+verb+"/check_clan");
        sscanf(base_name(env),"/open/clan/%s/%*s",clan);
        ally = CLAN_D->clan_query( this_player()->query("clan/id"), "ally" );

         if(!env->query("action/"+verb+"/filename")&& env->query("action/"+verb+"/filename")=="")
                return notify_fail("这个指令尚未完成。\n");
        if(!type) return notify_fail("这个指令尚未完成。\n");

// 这边是检查帮派的部份.
        switch(check_clan){
// 1时..就非本帮的不能使用...        
        case 1:
        if(this_player()->query("clan/id") != clan)
                return 0;
        break;
// 2.非同盟帮的不能使用.
        case 2:
        if(member_array( clan, ally ) == -1 && 
           this_player()->query("clan/id") != clan)
                return 0;
        default:
        }


        
        if(arg && keyword=="") return notify_fail(err_msg+"\n");  
        else if(keyword != "" && (!arg || arg != keyword)) return notify_fail(err_msg+"\n");
        if(check_ob && !obj=present(check_ob,this_player()))
                return notify_fail(err_msg+"\n");
        if(obj) destruct(obj);

        type(verb,"action");
return 1;
}

int type(string verb,string ftype)
{
        string type,filename,check;
        type = env->query(ftype+"/"+verb+"/type");
        filename  = env->query(ftype+"/"+verb+"/filename"); 
//下面是防作弊检查
// 只检查帮派的区域,帮派以外的区域不给inherit...
       if(filename!="" && sscanf(filename,"/open/clan/%s/%*s",check)!=2){
        log_file("clan/move_bug",sprintf("[%s] %s(%s)的房间 filename 为 %s\n",
            ctime(time()),
                        this_player()->name(),
                        getuid(this_player()),
filename,
        base_name(env)));
                return 0;
        }
// 以下是捡查该用那一种的移动,或招换..之类的..
// 并各自呼叫各字的fun...

        switch(type){

        case "action_move":
                action_move(ftype,verb);
        break;

        case "link_way":
                link_way(ftype,verb);
        break;

        case "add_mob":
                add_mob(ftype,verb);
        break;

        case "find_obj":
                find_obj(ftype,verb);
        break;

        }
        return 1;


}