Familienverwaltunt vereinfacht.
SetFamilie() und DeleteFamilie() erlauben das Setzen und Loeschen
von expliziten Familien-IDs ohne SQL zu bemuehen.
Change-Id: I25947075486f810b2044f7be347e36fd6ac9fbbc
diff --git a/doc/wiz/familien b/doc/wiz/familien
index 39bf831..11ff978 100644
--- a/doc/wiz/familien
+++ b/doc/wiz/familien
@@ -1,3 +1,6 @@
+FAMILIEN
+========
+
Eine Familie umfasst den Erstie und alle Zweities, sprich alle diese haben den
gleichen "Familiennamen". Dieser Name ist in der Regel die UUID des Ersties
dieser Familie. Falls aber der Erstie sich aendern sollte (z.B. Magierwerdung
@@ -22,3 +25,18 @@
personalisiert man irgendwas ueber die Familie, koennen alle Chars dieser
Familie das irgendwas nutzen.
+Wenn sich der Erstie aendert, aber die Familie aller Zweities erhalten bleiben
+soll (z.B. weil sich der Erstie innerhalb der Familie wegen Magierwerdung
+aendert), muss dies in der Familienverwaltung hinterlegt werden, indem fuer
+den *neuen* Erstie die alte Familien-ID eingetragen wird. Dies koennen zur
+Zeit EM+.
+
+Beispiel: Der alte Erstie einer Familie ist bert_123456, der neue Erstie ist
+alice_654321. Die Familie soll aber weiterhin bert_123456 sein:
+# xcall /secure/zweities->SetFamilie("alice_654321, "bert_123456")
+Ein solcher expliziter Familieneintrag kann wieder geloescht werden:
+# xcall /secure/zweities->DeleteFamilie("alice_654321")
+
+LETZTE AeNDERUNG:
+ 8.1.2019, Zesstra
+
diff --git a/secure/zweities.c b/secure/zweities.c
index 3501523..d5e8f8c 100644
--- a/secure/zweities.c
+++ b/secure/zweities.c
@@ -166,3 +166,43 @@
return erstie;
}
+public string SetFamilie(object|string pl, string familie)
+{
+ if (!ARCH_SECURITY)
+ return 0;
+
+ // Wenn Spielerobjekt, UUID ermitteln
+ if (objectp(pl) && query_once_interactive(pl))
+ pl = getuuid(pl);
+
+ sl_exec("INSERT OR REPLACE INTO familien(erstieuuid, familie) "
+ "VALUES(?1, ?2);", pl, familie);
+
+ mixed tmp = sl_exec("SELECT familie FROM familien WHERE "
+ "erstieuuid=?1", pl);
+ if (sizeof(tmp))
+ return tmp[0][0];
+
+ return 0;
+}
+
+public int DeleteFamilie(object|string pl)
+{
+ if (!ARCH_SECURITY)
+ return 0;
+
+ // Wenn Spielerobjekt, UUID ermitteln
+ if (objectp(pl) && query_once_interactive(pl))
+ pl = getuuid(pl);
+
+ sl_exec("DELETE FROM familien WHERE erstieuuid=?1;",
+ pl);
+
+ mixed tmp = sl_exec("SELECT familie FROM familien WHERE "
+ "erstieuuid=?1", pl);
+ if (sizeof(tmp))
+ return -1;
+
+ return 1;
+}
+