From: Mircea Kitsune Date: Sat, 29 Oct 2011 15:44:23 +0000 (+0300) Subject: Don't store origin and angles at all for child objects. Storage functional again... X-Git-Tag: xonotic-v0.6.0~35^2~18^2~45 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=7c27bf504ba4ae24e70cfc9c7f59fdb52c6fc021;p=xonotic%2Fxonotic-data.pk3dir.git Don't store origin and angles at all for child objects. Storage functional again. Note that this breaks previous storages --- diff --git a/qcsrc/server/mutators/sandbox.qc b/qcsrc/server/mutators/sandbox.qc index 71c77e70c..f3185d789 100644 --- a/qcsrc/server/mutators/sandbox.qc +++ b/qcsrc/server/mutators/sandbox.qc @@ -187,11 +187,22 @@ string sandbox_ObjectPort_Save(entity e, float database) else continue; + // ---------------- OBJECT PROPERTY STORAGE: SAVE ---------------- if(slot) { - // bones are stored only for child objects, and applied first + // properties stored only for child objects if(tagindex) port_string[slot] = strcat(port_string[slot], "\"", tagindex, "\" "); else port_string[slot] = strcat(port_string[slot], "- "); // none } + else + { + // properties stored only for parent objects + if(database) + { + port_string[slot] = strcat(port_string[slot], sprintf("\"%.9v\"", head.origin), " "); + port_string[slot] = strcat(port_string[slot], sprintf("\"%.9v\"", head.angles), " "); + } + } + // properties stored for all objects port_string[slot] = strcat(port_string[slot], "\"", head.model, "\" "); port_string[slot] = strcat(port_string[slot], ftos(head.skin), " "); port_string[slot] = strcat(port_string[slot], ftos(head.alpha), " "); @@ -204,9 +215,8 @@ string sandbox_ObjectPort_Save(entity e, float database) if(head.material) port_string[slot] = strcat(port_string[slot], "\"", head.material, "\" "); else port_string[slot] = strcat(port_string[slot], "- "); // none if(database) { + // properties stored only for the database if(head.crypto_idfp) port_string[slot] = strcat(port_string[slot], "\"", head.crypto_idfp, "\" "); else port_string[slot] = strcat(port_string[slot], "- "); // none - port_string[slot] = strcat(port_string[slot], sprintf("\"%.9v\"", head.origin), " "); - port_string[slot] = strcat(port_string[slot], sprintf("\"%.9v\"", head.angles), " "); } } @@ -236,16 +246,27 @@ entity sandbox_ObjectPort_Load(string s, float database) for(i = 0; i < n; ++i) { float argv_num; + argv_num = 0; tokenize_console(port_string[i]); e = sandbox_ObjectSpawn(database); + // ---------------- OBJECT PROPERTY STORAGE: LOAD ---------------- if(i) { - // bones are stored only for child objects, and applied first + // properties stored only for child objects if(argv(argv_num) != "-") sandbox_ObjectAttach_Set(e, parent, argv(argv_num)); else sandbox_ObjectAttach_Set(e, parent, ""); ++argv_num; } else - parent = e; // parent object, mark it as such + { + // properties stored only for parent objects + if(database) + { + setorigin(e, stov(argv(argv_num))); ++argv_num; + e.angles = stov(argv(argv_num)); ++argv_num; + } + parent = e; // mark parent objects as such + } + // properties stored for all objects setmodel(e, argv(argv_num)); ++argv_num; e.skin = stof(argv(argv_num)); ++argv_num; e.alpha = stof(argv(argv_num)); ++argv_num; @@ -258,9 +279,8 @@ entity sandbox_ObjectPort_Load(string s, float database) if(e.material) strunzone(e.material); if(argv(argv_num) != "-") e.material = strzone(argv(argv_num)); else e.material = string_null; ++argv_num; if(database) { + // properties stored only for the database if(e.crypto_idfp) strunzone(e.crypto_idfp); if(argv(argv_num) != "-") e.crypto_idfp = strzone(argv(argv_num)); else e.crypto_idfp = string_null; ++argv_num; - setorigin(e, stov(argv(argv_num))); ++argv_num; - e.angles = stov(argv(argv_num)); ++argv_num; } }