コード例 #1
0
ファイル: script_event.c プロジェクト: prophile/dim3
JSBool js_event_call_object_by_id_func(JSContext *cx,JSObject *j_obj,uintN argc,jsval *argv,jsval *rval)
{
	int				n,arg_count;
	char			func_name[64];
	jsval			args[20];
	obj_type		*obj;

		// get arguments

	obj=object_find_uid(JSVAL_TO_INT(argv[0]));
	if (obj==NULL) {
		*rval=JSVAL_FALSE;
		return(JS_TRUE);
	}

	script_value_to_string(argv[1],func_name,64);

	arg_count=argc-2;
	if (arg_count<0) arg_count=0;
	if (arg_count>20) arg_count=20;

	for (n=0;n!=arg_count;n++) {
		args[n]=argv[n+2];
	}

		// call function

	if (!scripts_direct_call(&obj->attach,func_name,arg_count,args,rval)) return(JS_FALSE);

	return(JS_TRUE);
}
コード例 #2
0
ファイル: script_event.c プロジェクト: rzel/dim3
JSValueRef js_event_call_game_func(JSContextRef cx,JSObjectRef func,JSObjectRef j_obj,size_t argc,const JSValueRef argv[],JSValueRef *exception)
{
	int				n,arg_count;
	char			func_name[64],err_str[256];
	JSValueRef		rval,args[20];

	if (!script_check_param_at_least_count(cx,func,argc,1,exception)) return(script_null_to_value(cx));
	if (!script_check_fail_in_construct(cx,func,j_obj,exception)) return(script_null_to_value(cx));
	
		// get arguments

	script_value_to_string(cx,argv[0],func_name,64);

	arg_count=argc-1;
	if (arg_count<0) arg_count=0;
	if (arg_count>20) arg_count=20;

	for (n=0;n!=arg_count;n++) {
		args[n]=argv[n+1];
	}

		// call function

	rval=scripts_direct_call(script_get_index(j_obj),js.game_script_idx,-1,func_name,arg_count,args,err_str);
	if (rval==NULL) {
		*exception=script_create_exception(cx,err_str);
		return(script_null_to_value(cx));
	}
	
	return(rval);
}
コード例 #3
0
ファイル: script_event.c プロジェクト: rzel/dim3
JSValueRef js_event_call_spawn_weapon_func(JSContextRef cx,JSObjectRef func,JSObjectRef j_obj,size_t argc,const JSValueRef argv[],JSValueRef *exception)
{
	int				n,arg_count,script_idx;
	char			func_name[64],err_str[256];
	JSValueRef		rval,args[20];
	obj_type		*obj;
	weapon_type		*weap;
	proj_type		*proj;
	script_type		*script;

	if (!script_check_param_at_least_count(cx,func,argc,1,exception)) return(script_null_to_value(cx));
	if (!script_check_fail_in_construct(cx,func,j_obj,exception)) return(script_null_to_value(cx));

		// find weapon that fired
		// this projectile

	script_idx=(int)JSObjectGetPrivate(j_obj);
	script=js.script_list.scripts[script_idx];
	
	if (script->attach.thing_type!=thing_type_projectile) {
		*exception=script_create_exception(cx,"Not an projectile script");
		return(script_null_to_value(cx));
	}

	proj=server.proj_list.projs[script->attach.proj_idx];
	if (!proj->on) {
		*exception=script_create_exception(cx,"Could not find projectile");
		return(script_null_to_value(cx));
	}

	obj=server.obj_list.objs[script->attach.obj_idx];
	weap=obj->weap_list.weaps[script->attach.weap_idx];
	if (weap==NULL) {
		*exception=script_create_exception(cx,"Could not find weapon");
		return(script_null_to_value(cx));
	}

		// get arguments

	script_value_to_string(cx,argv[0],func_name,64);

	arg_count=argc-1;
	if (arg_count<0) arg_count=0;
	if (arg_count>20) arg_count=20;

	for (n=0;n!=arg_count;n++) {
		args[n]=argv[n+1];
	}

		// call function

	rval=scripts_direct_call(script_get_index(j_obj),weap->script_idx,-1,func_name,arg_count,args,err_str);
	if (rval==NULL) {
		*exception=script_create_exception(cx,err_str);
		return(script_null_to_value(cx));
	}

	return(rval);
}
コード例 #4
0
ファイル: script_event.c プロジェクト: rzel/dim3
JSValueRef js_event_call_held_weapon_func(JSContextRef cx,JSObjectRef func,JSObjectRef j_obj,size_t argc,const JSValueRef argv[],JSValueRef *exception)
{
	int				n,arg_count,script_idx;
	char			func_name[64],err_str[256];
	JSValueRef		rval,args[20];
	obj_type		*obj;
	weapon_type		*weap;
	script_type		*script;

	if (!script_check_param_at_least_count(cx,func,argc,1,exception)) return(script_null_to_value(cx));
	if (!script_check_fail_in_construct(cx,func,j_obj,exception)) return(script_null_to_value(cx));

		// find held weapon

	script_idx=(int)JSObjectGetPrivate(j_obj);
	script=js.script_list.scripts[script_idx];
	
	if (script->attach.thing_type!=thing_type_object) {
		*exception=script_create_exception(cx,"Not an object script");
		return(script_null_to_value(cx));
	}

	obj=object_get_attach(j_obj);
	weap=weapon_find_current(obj);
	if (weap==NULL) {
		*exception=script_create_exception(cx,"No held weapon");
		return(script_null_to_value(cx));
	}

		// get arguments

	script_value_to_string(cx,argv[0],func_name,64);

	arg_count=argc-1;
	if (arg_count<0) arg_count=0;
	if (arg_count>20) arg_count=20;

	for (n=0;n!=arg_count;n++) {
		args[n]=argv[n+1];
	}

		// call function

	rval=scripts_direct_call(script_get_index(j_obj),weap->script_idx,-1,func_name,arg_count,args,err_str);
	if (rval==NULL) {
		*exception=script_create_exception(cx,err_str);
		return(script_null_to_value(cx));
	}

	return(rval);
}
コード例 #5
0
ファイル: script_event.c プロジェクト: prophile/dim3
JSBool js_event_call_game_func(JSContext *cx,JSObject *j_obj,uintN argc,jsval *argv,jsval *rval)
{
	int				n,arg_count;
	char			func_name[64];
	jsval			args[20];

		// get arguments

	script_value_to_string(argv[0],func_name,64);

	arg_count=argc-1;
	if (arg_count<0) arg_count=0;
	if (arg_count>20) arg_count=20;

	for (n=0;n!=arg_count;n++) {
		args[n]=argv[n+1];
	}

		// call function

	if (!scripts_direct_call(&js.game_attach,func_name,arg_count,args,rval)) return(JS_FALSE);

	return(JS_TRUE);
}