blob: c836caeefe8e19d60b563b5a2ba5948c51a6e2e0 [file] [log] [blame]
/*
Objekt zum Eintragen von Raeumen die Zaubertraenke enthalten beim
potionmaster.
*/
#include <wizlevels.h>
#include <properties.h>
#include <language.h>
inherit "std/thing";
int dump();
int secure()
{
if (!previous_object()) return 0;
if (geteuid(previous_object())==ROOTID) return 1;
if (geteuid(previous_object()) != geteuid(this_interactive())) return 0;
if (this_interactive() != this_player()) return 0;
if (!ARCH_SECURITY) return 0;
return 1;
}
void create()
{
if (!clonep(this_object())) return;
::create();
SetProp(P_SHORT, "Potion-Tool");
SetProp(P_LONG,
"Ein Tool zum Eintragen von Raumen in den Potionmaster.\n"+
"Folgende Befehle gibt es:\n"+
"ptadd <liste> Addiert den ZT im Raum in Liste <liste>\n"+
" und aktiviert ihn gleichzeitig.\n"+
"ptset <liste> Aktiviert den ZT im Raum und setzt ihn in\n"+
" die Liste <liste>.\n"+
"ptchange <nummer> Ersetzt den ZT <nummer> durch den ZT im Raum.\n"+
"ptact Aktiviert einen deaktivierten ZT in seiner\n"+
" bisherigen Liste.\n"+
"ptdeact Deaktiviert den ZT im Raum aus der ZTListe\n"+
" und verschiebt ihn nach 'deaktivierte ZTs'.\n"+
"ptinfo [para] kein para: Zeigt Infos ueber den ZT im aktu-\n"+
" ellen Raum.\n"+
" int para: Zeigt Infos zum ZT para an.\n"+
" string para: Zeigt ZT-Infos des Spielers para.\n"+
"ptdump Erzeugt ein Dump der aktuellen ZTListe und\n"+
" speichert diesen ab.\n\n");
SetProp(P_NAME, "PTool");
SetProp(P_GENDER, NEUTER);
AddId(({"tool", "ptool"}));
SetProp(P_NODROP, 1);
SetProp(P_AUTOLOADOBJ, 1);
AddCmd("ptadd", "add");
AddCmd("ptset", "setlist");
AddCmd("ptchange", "changepath");
AddCmd("ptact", "activate");
AddCmd("ptdeact", "deactivate");
AddCmd("ptinfo", "info");
AddCmd("ptdump", "dump");
}
int add(string number)
{
int nr, next, active;
string room;
if (!secure())
{ printf("Fehler: -1\n"); return -1; }
if (!query_once_interactive(environment()))
{ printf("Fehler: -2\n"); return -2; }
if (!number)
{ printf("Fehler: -3\n"); return -3; }
sscanf(number, "%d", nr);
if (!intp(nr))
{ printf("Fehler: -4\n"); return -4; }
room = object_name(environment(environment(this_object())));
next = "/secure/potionmaster"->AddPotionRoom(room,nr);
if (next>0)
printf("Raum in Gesamtliste eingetragen, Nummer: %d\n", next-1);
else
{
printf("Raum konnte nicht eingetragen werden, Ergebnis: %d\n", next);
return 1;
}
// Nicht mehr noetig, Arathorn, 2013-Mai-30
//active = "/secure/potionmaster"->SetListNr(room, nr);
if (active>=0)
{
printf("Raum aktiviert in Liste %d\n", nr);
dump();
}
else
printf("Fehler beim Aktivieren, Ergebnis: %d\n", active);
return 1;
}
int changepath(string number)
{
int nr,neu;
string room;
mixed roomold;
if (!secure())
{ printf("Fehler: -1\n"); return -1; }
if (!query_once_interactive(environment()))
{ printf("Fehler: -2\n"); return -2; }
if (!number)
{ printf("Fehler: -3\n"); return -3; }
sscanf(number, "%d", nr);
if (!intp(nr))
{ printf("Fehler: -4\n"); return -4; }
room = object_name(environment(environment(this_object())));
roomold = "/secure/potionmaster"->GetFilenameByNumber(nr);
if (roomold==-1)
{ printf("Fehler: -5\n"); return -5; }
neu = "/secure/potionmaster"->ChangeRoomPath(roomold,room);
if (neu>0)
{
printf("ZT %d durch aktuellen Raum ersetzt.\n", neu);
dump();
}
else
printf("ZT %d konnte nicht ersetzt werden, Ergebnis: %d\n", nr,neu);
return 1;
}
int setlist(string number)
{
int nr, next, active;
string room;
if (!secure())
{ printf("Fehler: -1\n"); return -1; }
if (!query_once_interactive(environment()))
{ printf("Fehler: -2\n"); return -2; }
if (!number)
{ printf("Fehler: -3\n"); return -3; }
sscanf(number, "%d", nr);
if (!intp(nr) || nr<0 || nr>7)
{ printf("Fehler: -4\n"); return -4; }
room = object_name(environment(environment(this_object())));
active = "/secure/potionmaster"->SetListNr(room, nr);
if (active>=0)
{
printf("Raum aktiviert in Liste %d\n", nr);
dump();
}
else
printf("Fehler beim Aktivieren, Ergebnis: %d\n", active);
return 1;
}
int activate()
{
int nr, active;
string room;
if (!secure())
{ printf("Fehler: -1\n"); return -1; }
if (!query_once_interactive(environment()))
{ printf("Fehler: -2\n"); return -2; }
room = object_name(environment(environment(this_object())));
active = "/secure/potionmaster"->ActivateRoom(room);
if (active>=0)
{
printf("Raum aktiviert in Liste %d\n", active);
dump();
}
else
printf("Fehler beim Aktivieren, Ergebnis: %d\n", active);
return 1;
}
int deactivate()
{
int deactive;
string room;
if (!secure())
{ printf("Fehler: -1\n"); return -1; }
if (!query_once_interactive(environment()))
{ printf("Fehler: -2\n"); return -2; }
room = object_name(environment(environment(this_object())));
deactive = "/secure/potionmaster"->DeactivateRoom(room);
if (deactive>=0)
{
printf("Raum deaktiviert in Liste %d\n",deactive);
dump();
}
else
printf("Fehler beim Deaktivieren, Ergebnis: %d\n", deactive);
return 1;
}
int info(string para)
{
int info,nr;
string s;
object room,o;
mixed m,*potions;
if (!secure())
{ printf("Fehler: -1\n"); return -1; }
if (!query_once_interactive(environment()))
{ printf("Fehler: -2\n"); return -2; }
if (!para || para=="")
{
room = environment(environment(this_object()));
info = "/secure/potionmaster"->HasPotion(room);
if (info>=0)
{
printf("Raum hat ZT mit Nr: %d\n\n",info);
nr = "/secure/potionmaster"->GetListByNumber(info);
if (nr>=0)
printf("ZT aktiv in Liste: %d\n\n",nr);
else
{
nr = "/secure/potionmaster"->GetInactListByNumber(info);
if (nr>=0)
printf("ZT INaktiv in Liste: %d\n\n",nr);
else
printf("ZT INaktiv\n\n");
}
if (info>=0 && s=read_file("/secure/ARCH/ZT/"+info+".zt"))
{
write("Tip:\n"+s);
}
}
else
printf("Raum hat keinen ZT eingetragen.\n");
}
else
if (sscanf(para,"%d",info)==1)
{
printf("ZT mit Nummer: %d\n\n",info);
m = "/secure/potionmaster"->GetFilenameByNumber(info);
if (m!=-1)
{
write("Filename: "+m+"\n\n");
nr = "/secure/potionmaster"->GetListByNumber(info);
if (nr>=0)
printf("ZT aktiv in Liste: %d\n\n",nr);
else
{
nr = "/secure/potionmaster"->GetInactListByNumber(info);
if (nr>=0)
printf("ZT INaktiv in Liste: %d\n\n",nr);
else
printf("ZT INaktiv\n\n");
}
if (info>=0 && s=read_file("/secure/ARCH/ZT/"+info+".zt"))
{
write("Tip:\n"+s);
}
}
else
write("Kein ZT mit dieser Nummer bekannt.\n");
}
else
{
write("Spieler "+capitalize(para)+"\n\n");
if (o=find_player(para))
{
potions=sort_array(o->QueryProp(P_POTIONROOMS),#'>);
if (sizeof(potions))
{
s="";
for (nr=0;nr<sizeof(potions);nr++)
s+=potions[nr]+", ";
write("Potionrooms:\n"+break_string(s[0..<3],78)+"\n");
}
else write("Spieler hat keine weiteren Potionrooms.\n");
potions=sort_array(o->QueryProp(P_KNOWN_POTIONROOMS),#'>);
if (sizeof(potions))
{
s="";
for (nr=0;nr<sizeof(potions);nr++)
s+=potions[nr]+", ";
write("Bekannte Potionrooms:\n"+
break_string(s[0..<3],78));
}
else write("Spieler hat keine bekannten Potionrooms.\n");
}
else
write("Kein Spieler mit diesem Namen anwesend.\n");
}
return 1;
}
int dump()
{
"/secure/potionmaster"->DumpList();
printf("Liste wurde erzeugt.\n");
return 1;
}