Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/secure/repmaster.c b/secure/repmaster.c
new file mode 100644
index 0000000..8ac817d
--- /dev/null
+++ b/secure/repmaster.c
@@ -0,0 +1,329 @@
+#pragma strict_types
+#pragma no_clone
+#pragma no_shadow
+#pragma no_inherit
+#pragma verbose_errors
+#pragma warn_deprecated
+
+#include <reputation.h>
+#include <wizlevels.h>
+
+/* Datenstruktur reputations:
+ * (["id": (["uids": ({ "uid1", "uid2" }), "name":"", "changemsg":"",
+ * "flags":x|x|x
+ * ])
+ * ])
+ * Bsp:
+ * (["schaedlspalta": (["uids": ({"d.wald.nibel", "d.wald.kessa"}),
+ * "name": "Schaedlspalta-Klan", "active": 1,
+ * "changemsg":"beim Schaedlspalta-Klan"
+ * ])
+ * ])
+ */
+
+private mapping reputations;
+
+protected void create() {
+ seteuid(getuid(this_object()));
+
+ if(!restore_object(REP_SAVEFILE) || !mappingp(reputations))
+ reputations = ([ ]);
+}
+
+// Zugriff auf Handlingmethoden fuer ROOT, EMs+
+private int Sec() {
+ if(process_call()) return 0;
+ if(previous_object() && geteuid(previous_object()) == ROOTID) return 1;
+ return objectp(previous_object()) && ARCH_SECURITY;
+}
+
+
+/* Argumente:
+ * repid = id im mapping reputations
+ * validuids = UIDs welche die Reputation veraendern duerfen, String
+ * oder String-Array
+ * name = Name der Reputationsfraktion
+ * changemsg = Text der in die Default-Changemsg eingefuegt wird
+ * (Dein Ansehen %s hat sich ... verbessert.)
+ *
+ * Returns:
+ * 1 = Reputation erfolgreich hinzugefuegt
+ * -1 = Keine Zugriffsrechte
+ * -2 = Falsche Argumente
+ * -3 = Reputation bereits vorhanden
+ */
+public int AddReputation(string repid, mixed validuids, string name,
+ string changemsg) {
+ if(!Sec())
+ return -1;
+ if(stringp(validuids)) validuids = ({ validuids });
+ if(!pointerp(validuids)) validuids = ({ });
+ // validuids + changemsgs kann auch erstmal leer bleiben
+ if(!stringp(repid) || !sizeof(repid) || !stringp(name) || !sizeof(name))
+ return -2;
+ if(member(reputations, repid))
+ return -3;
+ reputations += ([ repid : ([
+ "uids": validuids,
+ "name": name,
+ "flags": REP_FLAG_ACTIVE,
+ "changemsg": changemsg
+ ]) ]);
+ save_object(REP_SAVEFILE);
+ tell_object(this_interactive(), sprintf("Reputation eingetragen:\n"
+ "Name: %s\nValid UIDs: %O\nFlags: REP_FLAG_ACTIVE\nChangemsg: %s\n",
+ reputations[repid]["name"], reputations[repid]["uids"],
+ reputations[repid]["changemsg"]));
+ return 1;
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ *
+ * Returns:
+ * 1 = wurde erfolgreich deaktiviert
+ * -1 = Keine Zugriffsrechte
+ * -2 = Falsche Argumente
+ * -3 = Rep nicht vorhanden
+ * -4 = Ist bereits deaktiviert
+ */
+public int DeactivateReputation(string repid) {
+ if(!Sec())
+ return -1;
+ if(!stringp(repid) || !sizeof(repid))
+ return -2;
+ if(!member(reputations, repid))
+ return -3;
+ if(!(reputations[repid]["flags"] & REP_FLAG_ACTIVE))
+ return -4;
+ reputations[repid]["flags"] |= REP_FLAG_ACTIVE;
+ save_object(REP_SAVEFILE);
+ return 1;
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ *
+ * Returns:
+ * 1 = wurde erfolgreich aktiviert
+ * -1 = Keine Zugriffsrechte
+ * -2 = Falsche Argumente
+ * -3 = Rep nicht vorhanden
+ * -4 = Ist bereits aktiviert
+ */
+public int ActivateReputation(string repid) {
+ if(!Sec())
+ return -1;
+ if(!stringp(repid) || !sizeof(repid))
+ return -2;
+ if(!member(reputations, repid))
+ return -3;
+ if(reputations[repid]["flags"] & REP_FLAG_ACTIVE)
+ return -4;
+ reputations[repid]["flags"] ^= REP_FLAG_ACTIVE;
+ save_object(REP_SAVEFILE);
+ return 1;
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ * uid = UID welche die Reputation veraendern darf
+ *
+ * Returns:
+ * 1 = UID erfolgreich hinzugefuegt
+ * -1 = Keine Zugriffsrechte
+ * -2 = Falsche Argumente
+ * -3 = Rep nicht vorhanden
+ * -4 = UID ist bereits vorhanden
+ */
+public int AddReputationUid(string repid, string uid) {
+ if(!Sec())
+ return -1;
+ if(!stringp(repid) || !sizeof(repid) || !stringp(uid) || !sizeof(uid))
+ return -2;
+ if(!member(reputations, repid))
+ return -3;
+ if(member(reputations[repid]["uids"], uid) != -1)
+ return -4;
+ reputations[repid]["uids"] += ({ uid });
+ save_object(REP_SAVEFILE);
+ return 1;
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ * uid = UID welche die Reputation nicht mehr veraendern darf
+ *
+ * Returns:
+ * 1 = UID erfolgreich geloescht
+ * -1 = Keine Zugriffsrechte
+ * -2 = Falsche Argumente
+ * -3 = Rep nicht vorhanden
+ * -4 = UID nicht vorhanden
+ */
+public int RemoveReputationUid(string repid, string uid) {
+ if(!Sec())
+ return -1;
+ if(!stringp(repid) || !sizeof(repid) || !stringp(uid) || !sizeof(uid))
+ return -2;
+ if(!member(reputations, repid))
+ return -3;
+ if(member(reputations[repid]["uids"], uid) == -1)
+ return -4;
+ reputations[repid]["uids"] -= ({ uid });
+ save_object(REP_SAVEFILE);
+ return 1;
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ * name = Neuer Name der Rep
+ *
+ * Returns:
+ * 1 = Neuer Name erfolgreich gesetzt
+ * -1 = Keine Zugriffsrechte
+ * -2 = Falsche Argumente
+ * -3 = Rep nicht vorhanden
+ * -4 = Name entspricht dem derzeitigen
+ */
+public int ChangeReputationName(string repid, string name) {
+ if(!Sec())
+ return -1;
+ if(!stringp(repid) || !sizeof(repid) || !stringp(name) || !sizeof(name))
+ return -2;
+ if(!member(reputations, repid))
+ return -3;
+ if(reputations[repid]["name"] == name)
+ return -4;
+ reputations[repid]["name"] = name;
+ save_object(REP_SAVEFILE);
+ return 1;
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ * msg = Neuer String in der Default-Changemsg
+ *
+ * Returns:
+ * 1 = Neue Msg erfolgreich gesetzt
+ * -1 = Keine Zugriffsrechte
+ * -2 = Falsche Argumente
+ * -3 = Rep nicht vorhanden
+ * -4 = Msg entspricht der derzeitigen
+ */
+public int ChangeReputationMsg(string repid, string msg) {
+ if(!Sec())
+ return -1;
+ if(!stringp(repid) || !sizeof(repid) || !stringp(msg) || !sizeof(msg))
+ return -2;
+ if(!member(reputations, repid))
+ return -3;
+ if(reputations[repid]["changemsg"] == msg)
+ return -4;
+ reputations[repid]["changemsg"] = msg;
+ save_object(REP_SAVEFILE);
+ return 1;
+}
+
+/* Argumente:
+ * repid = id(s) im mapping reputations, ohne Argument werden alle aufgelistet,
+ * String oder String-array
+ *
+ * Returns:
+ * 1 = Liste ausgegeben
+ * -1 = Falsche Argumente
+ * -2 = Rep nicht vorhanden
+ */
+public varargs int ViewReputationData(mixed repids) {
+ // Fuer alle sichtbar, damit man ggf. weiss, wo man nachfragen muss
+ if(!repids) repids = m_indices(reputations);
+ else if(stringp(repids)) repids = ({ repids });
+ if(!pointerp(repids) || !sizeof(repids))
+ return -1;
+ // Textausgabe fuer alle richtigen IDs
+ foreach(string repid : repids) {
+ if(!member(reputations, repid)) continue;
+ tell_object(this_interactive(), sprintf("%s %s\n Name: %s\n Changemsg: "
+ "%s\n ValidUIDS: %O\n\n", repid,
+ (reputations[repid]["flags"] & REP_FLAG_ACTIVE ? "" :
+ "(Inaktiv)"), reputations[repid]["name"],
+ reputations[repid]["changemsg"], reputations[repid]["uids"]));
+ }
+ // Min. 1 nicht vorhanden: return -2, sonst 1
+ return (sizeof(repids - m_indices(reputations)) ? -2 : 1);
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ *
+ * Returns:
+ * mapping = Daten der Reputation
+ * 0 = Falsches Argument / Reputation nicht vorhanden
+ */
+public mapping GetReputationData(string repid) {
+ if(!stringp(repid) || !sizeof(repid) || !member(reputations, repid))
+ return 0;
+ return deep_copy(reputations[repid]);
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ * value = Wert um den die Rep veraendert wird (+ / -)
+ *
+ * Returns:
+ * string = "Dein Ansehen %s hat sich ... .\n"
+ * 0 = Falsche Argumente / Rep nicht vorhanden
+ */
+public string GetDefaultChangeMsg(string repid, int value) {
+ string strength;
+ if(!stringp(repid) || !sizeof(repid) || !intp(value) || !value ||
+ !member(reputations, repid))
+ return 0;
+ switch(abs(value)) {
+ case 0..25 : strength = "kaum merklich"; break;
+ case 26..50 : strength = "leicht"; break;
+ case 51..100 : strength = "deutlich"; break;
+ case 101..250 : strength = "erheblich"; break;
+ case 251..1000: strength = "sehr stark"; break;
+ default: strength = "ausserordentlich stark"; break;
+ }
+ return sprintf("Dein Ansehen %s hat sich%s%s.\n",
+ reputations[repid]["changemsg"], (!strength ? " " : " "+ strength +" "),
+ (value < 0 ? "verschlechtert" : "verbessert"));
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ * ob = Objekt, dessen UID geprueft wird, ohne Argument -> prev_ob()
+ *
+ * Returns:
+ * 1 = UID valid
+ * 0 = UID invalid
+ * -1 = Falsche Argumente
+ * -2 = Rep nicht vorhanden
+ */
+public int CheckValidUid(string repid, object ob) {
+ if(!stringp(repid) || !sizeof(repid) || !objectp(ob))
+ return -1;
+ if(!member(reputations, repid))
+ return -2;
+ return (member(reputations[repid]["uids"], getuid(ob)) != -1);
+}
+
+/* Argumente:
+ * repid = id im mapping reputations
+ *
+ * Returns:
+ * 1 = Rep aktiv
+ * 0 = Rep inaktiv
+ * -1 = Falsche Argumente
+ * -2 = Rep nicht vorhanden
+ */
+public int CheckRepActive(string repid) {
+ if(!stringp(repid) || !sizeof(repid))
+ return -1;
+ if(!member(reputations, repid))
+ return -2;
+ // Verboolung
+ return !!(reputations[repid]["flags"] & REP_FLAG_ACTIVE);
+}