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); }
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; }