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