Kosmetik.
- Einrueckungen gesetzt
- Klammern gesetzt um Lesbarkeit zu erhoehen
- Kleinkram
Change-Id: I878c365b43cfedec18f08f19920dfab0e630961e
diff --git a/std/container/items.c b/std/container/items.c
index 9961bfe..5b87bf0 100644
--- a/std/container/items.c
+++ b/std/container/items.c
@@ -42,215 +42,263 @@
protected void create()
{
- Set( P_ITEMS, ({}) );
- Set( P_ITEMS, SECURED, F_MODE_AS );
-
- OBJECTD->QueryObject(); // querying general objects
+ Set(P_ITEMS,({}));
+ Set(P_ITEMS,SECURED,F_MODE_AS);
+
+ OBJECTD->QueryObject(); // querying general objects
}
-protected void create_super() {
+protected void create_super()
+{
set_next_reset(-1);
}
/* Kram zum Aufraeumen von multiplen gleichen Items im Container. */
-private object removeable_ob( object ob )
+private object removeable_ob(object ob)
{
- if ( !query_once_interactive(ob) && !living(ob) )
- return ob;
+ if(!query_once_interactive(ob) && !living(ob))
+ {
+ return ob;
+ }
- return 0;
+ return 0;
}
protected varargs void remove_multiple(int limit, mixed fun)
{
- object *inh = all_inventory(this_object()) - ({0});
+ object *inh = all_inventory(ME)-({0});
- inh = filter( inh, #'removeable_ob );
- foreach(mixed item : QueryProp(P_ITEMS))
- inh -= ({ item[0] });
-
- if (!stringp(fun) && !closurep(fun))
- fun = "description_id";
- inh = unique_array(inh, fun, 0);
- foreach(mixed arr: inh)
+ inh=filter(inh,#'removeable_ob);
+ foreach(mixed item : QueryProp(P_ITEMS))
+ {
+ inh-=({item[0]});
+ }
+
+ if(!stringp(fun) && !closurep(fun))
+ {
+ fun="description_id";
+ }
+ inh=unique_array(inh,fun,0);
+ foreach(mixed arr : inh)
+ {
+ if(sizeof(arr)<=limit)
{
- if (sizeof(arr) <= limit)
- continue;
- catch(call_other(arr[limit ..], "remove"); publish);
+ continue;
}
+ catch(call_other(arr[limit ..], "remove"); publish);
+ }
}
/* Item handling */
-public varargs object AddItem( mixed filename, int refresh, mixed props )
+public varargs object AddItem(mixed filename, int refresh, mixed props)
{
- string file;
- object ob;
- int i;
+ string file;
+ object ob;
+ int i;
- if( pointerp(filename) ) {
- for( i = sizeof(filename); i--; )
- filename[i] = (string)master()->_get_path( filename[i], "?" );
-
- file = filename[random( sizeof(filename) )];
+ if(pointerp(filename))
+ {
+ for(i=sizeof(filename);i--;)
+ {
+ filename[i] = (string)master()->_get_path( filename[i], "?" );
}
- else
- file = filename = (string)master()->_get_path( filename, "?" );
-
- if ( props == 1 )
- catch(ob = load_object( file); publish);
- else
- catch(ob = clone_object(file); publish);
-
- if (objectp(ob)) {
- ob->move( this_object(), M_NOCHECK|M_NO_ATTACK );
- // mit Absicht keine Pruefung aufs Move, wenns nicht geht, solls 2s
- // spaeter auf der Ebene buggen, weil praktisch niemand im create() das
- // Ergebnis vom AddItem() prueft.
- }
+
+ file=filename[random(sizeof(filename))];
+ }
+ else
+ {
+ file=filename=(string)master()->_get_path(filename,"?");
+ }
+
+ if(props==1)
+ {
+ catch(ob=load_object(file); publish);
+ }
+ else
+ {
+ catch(ob=clone_object(file); publish);
+ }
+
+ if(objectp(ob))
+ {
+ ob->move(ME,M_NOCHECK|M_NO_ATTACK);
+ // mit Absicht keine Pruefung aufs Move, wenns nicht geht, solls 2s
+ // spaeter auf der Ebene buggen, weil praktisch niemand im create() das
+ // Ergebnis vom AddItem() prueft.
+ }
- // In P_ITEMS vermerken, es sei denn, REFRESH_NONE ist gegeben, in dem
- // Fall ist die Speicherung voellig unnoetig.
- // TODO: Pruefen, ob das wirklich problemlos geht. Bis dahin werden auch
- // TODO::REFRESH_NONE-Items vermerkt. (s. clean_up() in /std/room.c)
- //if (!(refresh & REFRESH_NONE)) {
- SetProp( P_ITEMS, QueryProp(P_ITEMS) +
- ({ ({ ob, // RITEM_OBJECT
- filename, // RITEM_FILE
- refresh // RITEM_REFRESH
- }) +
- ((mappingp(props) || props == 1) ? ({ props }) : ({})) }) );
- //}
+ // In P_ITEMS vermerken, es sei denn, REFRESH_NONE ist gegeben, in dem
+ // Fall ist die Speicherung voellig unnoetig.
+ // TODO: Pruefen, ob das wirklich problemlos geht. Bis dahin werden auch
+ // TODO::REFRESH_NONE-Items vermerkt. (s. clean_up() in /std/room.c)
+ //if (!(refresh&REFRESH_NONE)) {
+ SetProp(P_ITEMS,QueryProp(P_ITEMS)+
+ ({
+ ({
+ ob, // RITEM_OBJECT
+ filename, // RITEM_FILE
+ refresh // RITEM_REFRESH
+ })+
+ ((mappingp(props) || props==1) ? ({props}) : ({}))
+ }));
+ //}
- if ( ob && mappingp(props) )
- walk_mapping( props, symbol_function( "SetProp", ob ) );
-
- return ob;
+ if(ob && mappingp(props))
+ walk_mapping(props,symbol_function("SetProp",ob));
+
+ return ob;
}
-private void ri_rem_ob( object ob )
+private void ri_rem_ob(object ob)
{
- object *inv;
- int i;
-
- if ( objectp(ob) && present(ob, this_object()) ) {
- inv = deep_inventory(ob);
-
- for ( i = sizeof(inv); i--; )
- if ( inv[i] ) {
- inv[i]->remove(1);
-
- if ( inv[i] )
- destruct(inv[i]);
- }
-
- ob->remove(1);
-
- if ( ob )
- destruct(ob);
- }
-}
+ object *inv;
+ int i;
-
-private int ri_filter( mixed *ritem, mixed file )
-{
- object ob, *inv;
- int i;
-
- ob = ritem[RITEM_OBJECT];
-
- if ( stringp(file) && ritem[RITEM_FILE] == file )
- return ri_rem_ob(ob), 0;
- else if ( pointerp(ritem[RITEM_FILE]) && pointerp(file) &&
- sizeof(file & ritem[RITEM_FILE]) == sizeof(ritem[RITEM_FILE]) )
- return ri_rem_ob(ob), 0;
-
- return 1;
-}
-
-
-public void RemoveItem( mixed filename )
-{
- mixed *items;
- int i;
-
- if ( !pointerp(items = QueryProp(P_ITEMS)) || !sizeof(items) )
- return;
-
- if ( pointerp(filename) )
- for ( i = sizeof(filename); i--; )
- filename[i] = (string)master()->_get_path( filename[i], "?" );
- else
- filename = (string)master()->_get_path( filename, "?" );
-
- SetProp( P_ITEMS, filter( items, #'ri_filter/*'*/, filename ) );
-}
-
-
-private mixed _do_refresh( mixed item )
-{
- string file;
- object ob;
-
- if ( !pointerp(item) || item[RITEM_REFRESH] == REFRESH_NONE )
- return item;
-
- if ( pointerp(item[RITEM_FILE]) )
- file = item[RITEM_FILE][random( sizeof(item[RITEM_FILE]) )];
- else
- file = item[RITEM_FILE];
-
- switch( item[RITEM_REFRESH] ){
- case REFRESH_MOVE_HOME:
- if ( objectp(item[RITEM_OBJECT]) &&
- environment(item[RITEM_OBJECT]) != ME ) {
- item[RITEM_OBJECT]->move( ME, M_GO|M_NO_ATTACK );
- break;
+ if(objectp(ob) && present(ob,ME))
+ {
+ inv=deep_inventory(ob);
+
+ for(i=sizeof(inv);i--;)
+ {
+ if(inv[i])
+ {
+ inv[i]->remove(1);
+
+ if(inv[i])
+ {
+ destruct(inv[i]);
}
-
+ }
+ }
+ ob->remove(1);
+
+ if(ob)
+ {
+ destruct(ob);
+ }
+ }
+}
+
+
+private int ri_filter(mixed *ritem, mixed file)
+{
+ object ob, *inv;
+ int i;
+
+ ob=ritem[RITEM_OBJECT];
+
+ if(stringp(file) && ritem[RITEM_FILE]==file)
+ return ri_rem_ob(ob), 0;
+ else if(pointerp(ritem[RITEM_FILE]) && pointerp(file) &&
+ sizeof(file&ritem[RITEM_FILE])==sizeof(ritem[RITEM_FILE]))
+ return ri_rem_ob(ob), 0;
+
+ return 1;
+}
+
+
+public void RemoveItem(mixed filename)
+{
+ mixed *items;
+ int i;
+
+ if(!pointerp(items=QueryProp(P_ITEMS)) || !sizeof(items))
+ return;
+
+ if(pointerp(filename))
+ {
+ for(i=sizeof(filename);i--;)
+ {
+ filename[i] = (string)master()->_get_path( filename[i], "?" );
+ }
+ }
+ else
+ {
+ filename = (string)master()->_get_path( filename, "?" );
+ }
+
+ SetProp(P_ITEMS,filter(items,#'ri_filter,filename));
+}
+
+
+private mixed _do_refresh(mixed item)
+{
+ string file;
+ object ob;
+
+ if(!pointerp(item) || item[RITEM_REFRESH]==REFRESH_NONE)
+ {
+ return item;
+ }
+
+ if(pointerp(item[RITEM_FILE]))
+ {
+ file=item[RITEM_FILE][random(sizeof(item[RITEM_FILE]))];
+ }
+ else
+ {
+ file=item[RITEM_FILE];
+ }
+
+ switch(item[RITEM_REFRESH])
+ {
+ case REFRESH_MOVE_HOME:
+ if(objectp(item[RITEM_OBJECT]) &&
+ environment(item[RITEM_OBJECT])!=ME)
+ {
+ item[RITEM_OBJECT]->move(ME,M_GO|M_NO_ATTACK);
+ break;
+ }
+
// fall through
case REFRESH_DESTRUCT:
- if ( objectp(item[RITEM_OBJECT]) )
- break; // else FALL THROUGH
-
+ if(objectp(item[RITEM_OBJECT]))
+ break; // else FALL THROUGH
+
case REFRESH_REMOVE:
- if ( objectp(item[RITEM_OBJECT]) &&
- environment(item[RITEM_OBJECT]) == ME )
- break; // else FALL THROUGH
-
+ if(objectp(item[RITEM_OBJECT]) &&
+ environment(item[RITEM_OBJECT])==ME)
+ break; // else FALL THROUGH
+
default:
- if ( sizeof(item) > RITEM_PROPS && item[RITEM_PROPS] == 1 ) {
- ob = load_object(file);
- }
- else
- ob = clone_object(file);
+ if(sizeof(item)>RITEM_PROPS && item[RITEM_PROPS]==1)
+ {
+ ob=load_object(file);
+ }
+ else
+ {
+ ob=clone_object(file);
+ }
- ob->move( ME, M_NOCHECK|M_NO_ATTACK );
- break;
- }
-
- if ( ob ){
- item[RITEM_OBJECT] = ob;
-
- if ( sizeof(item) > RITEM_PROPS && mappingp(item[RITEM_PROPS]) )
- walk_mapping( item[RITEM_PROPS], symbol_function( "SetProp", ob ) );
- }
-
- return item;
+ ob->move(ME,M_NOCHECK|M_NO_ATTACK);
+ break;
+ }
+
+ if(ob)
+ {
+ item[RITEM_OBJECT]=ob;
+
+ if(sizeof(item)>RITEM_PROPS && mappingp(item[RITEM_PROPS]))
+ walk_mapping(item[RITEM_PROPS],symbol_function("SetProp",ob));
+ }
+
+ return item;
}
// reset handling: check how the items should be refreshed.
void reset()
{
- mixed *items;
+ mixed *items;
- if ( !pointerp(items = QueryProp(P_ITEMS)) ){
- SetProp( P_ITEMS, ({}) );
- return;
- }
-
- SetProp( P_ITEMS, map( items, #'_do_refresh/*'*/ ) - ({0}) );
+ if(!pointerp(items=QueryProp(P_ITEMS)))
+ {
+ SetProp(P_ITEMS,({}));
+ return;
+ }
+
+ SetProp(P_ITEMS,map(items,#'_do_refresh)-({0}));
}