Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/secure/gildenmaster.c b/secure/gildenmaster.c
new file mode 100644
index 0000000..56c5e3d
--- /dev/null
+++ b/secure/gildenmaster.c
@@ -0,0 +1,165 @@
+#pragma strict_types
+#pragma no_clone
+#pragma no_shadow
+#pragma no_inherit
+#pragma verbose_errors
+#pragma combine_strings
+//#pragma pedantic
+//#pragma range_check
+#pragma warn_deprecated
+
+#define NEED_PROTOTYPES
+#include <thing/properties.h>
+#include <properties.h>
+#include <wizlevels.h>
+#include <new_skills.h>
+#include <events.h>
+
+string *valid_guilds = ({});
+
+void create() {
+ seteuid(getuid(this_object()));
+ restore_object(GUILD_SAVEFILE);
+ if (!pointerp(valid_guilds))
+ valid_guilds=({});
+}
+
+//noetig, da nun valid_guilds eine Variable ist
+public mixed QueryProp( string name )
+{
+ if (name==P_VALID_GUILDS)
+ return copy(valid_guilds);
+ return 0;
+}
+
+nomask int beitreten() {
+ object pl,gilde;
+ string gname,ogname;
+
+ if (!(pl=this_player()) || !(gilde=previous_object()))
+ return 0;
+ // Gilden sind Blueprints.
+ gname=object_name(gilde);
+
+ if ((GUILD_DIR+ogname)==gname) {
+ write("Du bist schon in dieser Gilde.\n");
+ return -4;
+ }
+
+ if ((ogname=(string)pl->QueryProp(P_GUILD)) &&
+ (ogname!=(((string)pl->QueryProp(P_DEFAULT_GUILD)) || DEFAULT_GUILD))) {
+ write("Du bist noch in einer anderen Gilde.\n");
+ return -1;
+ }
+ if (gname[0..7]!=GUILD_DIR ||
+ member(valid_guilds,(gname=gname[8..]))<0) {
+ write("Diese Gilde ist leider nicht zugelassen.\n"+
+ "Bitte verstaendige einen Erzmagier.\n");
+ return -2;
+ }
+ pl->SetProp(P_GUILD,gname);
+ // Event Gildenwechsel triggern
+ EVENTD->TriggerEvent(EVT_GUILD_CHANGE, ([
+ E_OBJECT: pl, E_PLNAME: getuid(pl),
+ E_ENVIRONMENT: environment(pl),
+ E_GUILDNAME: gname,
+ E_LAST_GUILDNAME: ogname ]) );
+
+ return 1;
+}
+
+static nomask void loose_ability(mixed key, mixed dat, int loss) {
+ mixed val;
+
+ val=mappingp(dat)?dat[SI_SKILLABILITY]:dat;
+ if (!intp(val) || val<=0) return;
+ val-=(val*loss)/100;if (val<=0) val=1;
+ if (mappingp(dat))
+ dat[SI_SKILLABILITY]=val;
+ else
+ dat=val;
+}
+
+varargs nomask int austreten(int loss) {
+ object pl,gilde;
+ string gname;
+ mapping skills;
+
+ if (!(pl=this_player()) || !(gilde=previous_object()))
+ return 0;
+ // Gilden muessen Blueprints sein, so. ;-)
+ gname=object_name(gilde);
+ if (gname[0..7]!=GUILD_DIR ||
+ ((string)pl->QueryProp(P_GUILD))!=gname[8..]) {
+ write("Du kannst hier nicht aus einer anderen Gilde austreten.\n");
+ return -1;
+ }
+ if (gname[8..]==(pl->QueryProp(P_DEFAULT_GUILD)||DEFAULT_GUILD))
+ {
+ write("Aus dieser Gilde kannst Du nicht austreten.\n");
+ return -1;
+ }
+ if (loss<=0) loss=20;
+ skills=(mapping)pl->QueryProp(P_NEWSKILLS);
+ walk_mapping(skills,"loose_ability",this_object(),loss);
+ pl->SetProp(P_NEWSKILLS,skills);
+ pl->SetProp(P_GUILD,0);
+ // Event Gildenwechsel triggern
+ EVENTD->TriggerEvent(EVT_GUILD_CHANGE, ([
+ E_OBJECT: pl, E_PLNAME: getuid(pl),
+ E_ENVIRONMENT: environment(pl),
+ E_GUILDNAME: pl->QueryProp(P_GUILD),
+ E_LAST_GUILDNAME: gname ]) );
+
+ // Defaultgilde ggf. neuen Titel setzen lassen.
+ gname = (string)pl->QueryProp(P_GUILD);
+ (GUILD_DIR+"/"+gname)->adjust_title(pl);
+
+ return 1;
+}
+
+nomask static int security_check()
+{
+ if (previous_object() && geteuid(previous_object())==ROOTID)
+ return 1;
+ if (!process_call() && previous_object() && ARCH_SECURITY)
+ return 1;
+ return 0;
+}
+
+nomask int AddGuild(string gildob) {
+ object tp;
+
+ if (!stringp(gildob) || !sizeof(gildob) || !security_check()
+ || file_size(GUILD_DIR+gildob+".c")<0)
+ return 0;
+ if (member(valid_guilds, gildob) != -1)
+ return 0;
+ valid_guilds+=({gildob});
+ save_object(GUILD_SAVEFILE);
+ return 1;
+}
+
+nomask int RemoveGuild(string gildob) {
+ object tp;
+
+ if (!stringp(gildob) || !sizeof(gildob)
+ || !security_check())
+ return 0;
+ if (member(valid_guilds, gildob) == -1)
+ return 0;
+ valid_guilds-=({gildob});
+
+ save_object(GUILD_SAVEFILE);
+ return 1;
+}
+
+nomask int ValidGuild(string gildenob) {
+ if (!stringp(gildenob))
+ return 0;
+
+ return (member(valid_guilds,gildenob)>=0);
+}
+
+nomask string *_query_valid_guilds() {return copy(valid_guilds); }
+