X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ftarget%2Fspawn.qc;fp=qcsrc%2Fcommon%2Ftriggers%2Ftarget%2Fspawn.qc;h=0000000000000000000000000000000000000000;hp=9c999ed4df4758612b9052a34aeb22101b85b905;hb=fbd313c7ceb26a09310d8062926f4ac2468623a8;hpb=15560a4a494efe42e0e5fa69a628eebc11d97fc7 diff --git a/qcsrc/common/triggers/target/spawn.qc b/qcsrc/common/triggers/target/spawn.qc deleted file mode 100644 index 9c999ed4df..0000000000 --- a/qcsrc/common/triggers/target/spawn.qc +++ /dev/null @@ -1,340 +0,0 @@ -#include "spawn.qh" -#if defined(CSQC) -#elif defined(MENUQC) -#elif defined(SVQC) - #include - #include -#endif - -#ifdef SVQC - -// spawner entity -// "classname" "target_spawn" -// "message" "fieldname value fieldname value ..." -// "spawnflags" -// ON_MAPLOAD = trigger on map load - -float target_spawn_initialized; -.void(entity this) target_spawn_spawnfunc; -float target_spawn_spawnfunc_field; -.entity target_spawn_activator; -.float target_spawn_id; -float target_spawn_count; - -void target_spawn_helper_setmodel(entity this) -{ - _setmodel(this, this.model); -} - -void target_spawn_helper_setsize(entity this) -{ - setsize(this, this.mins, this.maxs); -} - -void target_spawn_edit_entity(entity this, entity e, string msg, entity kt, entity t2, entity t3, entity t4, entity act, entity trigger) -{ - float i, n, valuefieldpos; - string key, value, valuefield, valueoffset, valueoffsetrandom; - entity valueent; - vector data, data2; - - n = tokenize_console(msg); - - for(i = 0; i < n-1; i += 2) - { - key = argv(i); - value = argv(i+1); - if(key == "$") - { - data.x = -1; - data.y = FIELD_STRING; - } - else - { - data = stov(db_get(TemporaryDB, strcat("/target_spawn/field/", key))); - if(data.y == 0) // undefined field, i.e., invalid type - { - LOG_INFO("target_spawn: invalid/unknown entity key ", key, " specified, ignored!"); - continue; - } - } - if(substring(value, 0, 1) == "$") - { - value = substring(value, 1, strlen(value) - 1); - if(substring(value, 0, 1) == "$") - { - // deferred replacement - // do nothing - // useful for creating target_spawns with this! - } - else - { - // replace me! - valuefieldpos = strstrofs(value, "+", 0); - valueoffset = ""; - if(valuefieldpos != -1) - { - valueoffset = substring(value, valuefieldpos + 1, strlen(value) - valuefieldpos - 1); - value = substring(value, 0, valuefieldpos); - } - - valuefieldpos = strstrofs(valueoffset, "+", 0); - valueoffsetrandom = ""; - if(valuefieldpos != -1) - { - valueoffsetrandom = substring(valueoffset, valuefieldpos + 1, strlen(valueoffset) - valuefieldpos - 1); - valueoffset = substring(valueoffset, 0, valuefieldpos); - } - - valuefieldpos = strstrofs(value, ".", 0); - valuefield = ""; - if(valuefieldpos != -1) - { - valuefield = substring(value, valuefieldpos + 1, strlen(value) - valuefieldpos - 1); - value = substring(value, 0, valuefieldpos); - } - - if(value == "self") - { - valueent = this; - value = ""; - } - else if(value == "activator") - { - valueent = act; - value = ""; - } - else if(value == "other") - { - valueent = trigger; - value = ""; - } - else if(value == "pusher") - { - if(time < act.pushltime) - valueent = act.pusher; - else - valueent = NULL; - value = ""; - } - else if(value == "target") - { - valueent = e; - value = ""; - } - else if(value == "killtarget") - { - valueent = kt; - value = ""; - } - else if(value == "target2") - { - valueent = t2; - value = ""; - } - else if(value == "target3") - { - valueent = t3; - value = ""; - } - else if(value == "target4") - { - valueent = t4; - value = ""; - } - else if(value == "time") - { - valueent = NULL; - value = ftos(time); - } - else - { - LOG_INFO("target_spawn: invalid/unknown variable replacement ", value, " specified, ignored!"); - continue; - } - - if(valuefield == "") - { - if(value == "") - value = ftos(etof(valueent)); - } - else - { - if(value != "") - { - LOG_INFO("target_spawn: try to get a field of a non-entity, ignored!"); - continue; - } - data2 = stov(db_get(TemporaryDB, strcat("/target_spawn/field/", valuefield))); - if(data2_y == 0) // undefined field, i.e., invalid type - { - LOG_INFO("target_spawn: invalid/unknown entity key replacement ", valuefield, " specified, ignored!"); - continue; - } - value = getentityfieldstring(data2_x, valueent); - } - - if(valueoffset != "") - { - switch(data.y) - { - case FIELD_STRING: - value = strcat(value, valueoffset); - break; - case FIELD_FLOAT: - value = ftos(stof(value) + stof(valueoffset)); - break; - case FIELD_VECTOR: - value = vtos(stov(value) + stov(valueoffset)); - break; - default: - LOG_INFO("target_spawn: only string, float and vector fields can do calculations, calculation ignored!"); - break; - } - } - - if(valueoffsetrandom != "") - { - switch(data.y) - { - case FIELD_FLOAT: - value = ftos(stof(value) + random() * stof(valueoffsetrandom)); - break; - case FIELD_VECTOR: - data2 = stov(valueoffsetrandom); - value = vtos(stov(value) + random() * data2_x * '1 0 0' + random() * data2_y * '0 1 0' + random() * data2_z * '0 0 1'); - break; - default: - LOG_INFO("target_spawn: only float and vector fields can do random calculations, calculation ignored!"); - break; - } - } - } - } - if(key == "$") - { - if(substring(value, 0, 1) == "_") - value = strcat("target_spawn_helper", value); - putentityfieldstring(target_spawn_spawnfunc_field, e, value); - - e.target_spawn_spawnfunc(e); - - // We called an external function, so we have to re-tokenize msg. - n = tokenize_console(msg); - } - else - { - if(data.y == FIELD_VECTOR) - value = strreplace("'", "", value); // why?!? - putentityfieldstring(data.x, e, value); - } - } -} - -void target_spawn_useon(entity e, entity this, entity actor, entity trigger) -{ - this.target_spawn_activator = actor; - target_spawn_edit_entity( - this, - e, - this.message, - find(NULL, targetname, this.killtarget), - find(NULL, targetname, this.target2), - find(NULL, targetname, this.target3), - find(NULL, targetname, this.target4), - actor, - trigger - ); -} - -bool target_spawn_cancreate(entity this) -{ - float c; - entity e; - - c = this.count; - if(c == 0) // no limit? - return true; - - ++c; // increase count to not include MYSELF - for(e = NULL; (e = findfloat(e, target_spawn_id, this.target_spawn_id)); --c) - ; - - // if c now is 0, we have AT LEAST the given count (maybe more), so don't spawn any more - if(c == 0) - return false; - return true; -} - -void target_spawn_use(entity this, entity actor, entity trigger) -{ - if(this.target == "") - { - // spawn new entity - if(!target_spawn_cancreate(this)) - return; - entity e = spawn(); - e.spawnfunc_checked = true; - target_spawn_useon(e, this, actor, trigger); - e.target_spawn_id = this.target_spawn_id; - } - else if(this.target == "*activator") - { - // edit entity - if(actor) - target_spawn_useon(actor, this, actor, trigger); - } - else - { - // edit entity - FOREACH_ENTITY_STRING(targetname, this.target, - { - target_spawn_useon(it, this, actor, trigger); - }); - } -} - -void target_spawn_spawnfirst(entity this) -{ - entity act = this.target_spawn_activator; - if(this.spawnflags & ON_MAPLOAD) - target_spawn_use(this, act, NULL); -} - -void initialize_field_db() -{ - if(!target_spawn_initialized) - { - float n, i; - string fn; - vector prev, next; - float ft; - - n = numentityfields(); - for(i = 0; i < n; ++i) - { - fn = entityfieldname(i); - ft = entityfieldtype(i); - next = i * '1 0 0' + ft * '0 1 0' + '0 0 1'; - prev = stov(db_get(TemporaryDB, strcat("/target_spawn/field/", fn))); - if(prev.y == 0) - { - db_put(TemporaryDB, strcat("/target_spawn/field/", fn), vtos(next)); - if(fn == "target_spawn_spawnfunc") - target_spawn_spawnfunc_field = i; - } - } - - target_spawn_initialized = 1; - } -} - -spawnfunc(target_spawn) -{ - initialize_field_db(); - this.use = target_spawn_use; - this.message = strzone(strreplace("'", "\"", this.message)); - this.target_spawn_id = ++target_spawn_count; - InitializeEntity(this, target_spawn_spawnfirst, INITPRIO_LAST); -} -#endif