intensity -= autocvar_g_sandbox_object_material_velocity_min; // start from minimum velocity, not actual velocity
intensity = bound(0, intensity * autocvar_g_sandbox_object_material_velocity_factor, 1);
- sound(self, CH_TRIGGER, strcat("object/impact_", self.material, "_", ftos(ceil(random() * 5)) , ".ogg"), VOL_BASE * intensity, ATTN_NORM);
+ sound(self, CH_TRIGGER, strcat("object/impact_", self.material, "_", ftos(ceil(random() * 5)) , ".wav"), VOL_BASE * intensity, ATTN_NORM);
pointparticles(particleeffectnum(strcat("impact_", self.material)), self.origin, '0 0 0', ceil(intensity * 10)); // allow a count from 1 to 10
}
return world; // entity is not an object
if(!permissions)
return trace_ent; // don't check permissions, anyone can edit this object
- if(!trace_ent.crypto_idfp)
+ if(trace_ent.crypto_idfp == "")
return trace_ent; // the player who spawned this object did not have an UID, so anyone can edit it
if not(trace_ent.realowner != self && autocvar_g_sandbox_editor_free < 2)
return trace_ent; // object does not belong to the player, and players can only edit their own objects on this server
string sandbox_ObjectPort_Save(entity e, float database)
{
// save object properties, and return them as a string
- float i;
+ float i = 0;
string s;
entity head;
}
// now apply the array to a simple string, with the ; symbol separating objects
+ s = "";
for(i = 0; i <= MAX_STORAGE_ATTACHMENTS; ++i)
{
if(port_string[i])
{
// load object properties, and spawn a new object with them
float n, i;
- entity e, parent;
+ entity e = world, parent = world;
// separate objects between the ; symbols
n = tokenizebyseparator(s, "; ");
for(i = 0; i < n; ++i)
{
float argv_num;
- string tagname;
+ string tagname = string_null;
argv_num = 0;
tokenize_console(port_string[i]);
e = sandbox_ObjectSpawn(database);
for(;;)
{
file_read = fgets(file_get);
- if(!file_read)
+ if(file_read == "")
break;
if(substring(file_read, 0, 2) == "//")
continue;
{
// since objects are being loaded for the first time, precache material sounds for each
for (i = 1; i <= 5; i++) // 5 sounds in total
- precache_sound(strcat("object/impact_", e.material, "_", ftos(i), ".ogg"));
+ precache_sound(strcat("object/impact_", e.material, "_", ftos(i), ".wav"));
}
}
if(autocvar_g_sandbox_info > 0)
return TRUE;
}
self.object_flood = time + autocvar_g_sandbox_editor_flood;
- if(!argv(3)) // no object in clipboard
+ if(argv(3) == "") // no object in clipboard
{
print_to(self, "^1SANDBOX - WARNING: ^7No object in clipboard. You must copy an object before you can paste it");
return TRUE;
// ---------------- COMMAND: OBJECT, EDIT ----------------
case "object_edit":
- if(!argv(2))
+ if(argv(2) == "")
{
print_to(self, "^1SANDBOX - WARNING: ^7Too few parameters. You must specify a property to edit");
return TRUE;
if(argv(3))
{
for (i = 1; i <= 5; i++) // precache material sounds, 5 in total
- precache_sound(strcat("object/impact_", argv(3), "_", ftos(i), ".ogg"));
+ precache_sound(strcat("object/impact_", argv(3), "_", ftos(i), ".wav"));
e.material = strzone(argv(3));
}
else
print_to(self, strcat("^2SANDBOX - INFO: ^7Object is owned by \"^7", e.netname, "^7\", created \"^3", e.message, "^7\", last edited \"^3", e.message2, "^7\""));
return TRUE;
case "mesh":
- for(i = 1; gettaginfo(e, i); i++)
+ s = "";
+ FOR_EACH_TAG(e)
s = strcat(s, "^7\"^5", gettaginfo_name, "^7\", ");
print_to(self, strcat("^2SANDBOX - INFO: ^7Object mesh is \"^3", e.model, "^7\" at animation frame ^3", ftos(e.frame), " ^7containing the following tags: ", s));
return TRUE;
case "attachments":
// this should show the same info as 'mesh' but for attachments
+ s = "";
entity head;
+ i = 0;
for(head = world; (head = find(head, classname, "object")); )
{
if(head.owner == e)
return TRUE;
}
+MUTATOR_HOOKFUNCTION(sandbox_SetModname)
+{
+ modname = "Sandbox";
+ return TRUE;
+}
+
MUTATOR_DEFINITION(sandbox)
{
MUTATOR_HOOK(SV_ParseClientCommand, sandbox_PlayerCommand, CBC_ORDER_ANY);
MUTATOR_HOOK(SV_StartFrame, sandbox_StartFrame, CBC_ORDER_ANY);
+ MUTATOR_HOOK(SetModname, sandbox_SetModname, CBC_ORDER_ANY);
MUTATOR_ONADD
{
sandbox_Database_Load();
}
+ MUTATOR_ONROLLBACK_OR_REMOVE
+ {
+ // nothing to roll back
+ }
+
+ MUTATOR_ONREMOVE
+ {
+ // nothing to remove
+ }
+
return FALSE;
}