blob: 681d45b07115809150342d40703d918650fe06ff [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001/*
2 17.04.2007 Ennox angepasst fuer Blinde, automatisches filtern oder eigenes
3 Verzeichnis fuer blindenfreundliche Version einzelner Seiten per
4 buchdir_noascii
5 */
6inherit "std/thing";
7
8#include <properties.h>
9#include <language.h>
10
11#define TP this_player()
12#define TPN this_player()->name()
13
14int offen = 0;
15int seite = 0;
16
17int getseitzahl();
18
19void create() {
20 if (!clonep(this_object())) return;
21 ::create();
22 SetProp(P_SHORT, "Ein Buch");
23 SetProp(P_LONG,
24 "Du haeltst ein leinengebundenes Buch in Deinen Haenden. Der Titel heisst:\n"+
25 "@@buchinfo@@.\n");
26 SetProp(P_NAME,"Buch");
27 AddId("buch");
28 SetProp(P_GENDER, NEUTER);
29 SetProp(P_WEIGHT,80);
30 SetProp(P_NOBUY, 1);
31 AddCmd("lies|lese&@ID", "lies", "Was willst Du lesen ? Syntax: LIES <ETWAS>.\n");
32 AddCmd("oeffne&@ID","oeffne","Was willst Du oeffnen?");
33 AddCmd("schliesse|schliess@ID","schliesse","Was willst Du schliessen?");
34 AddCmd("blaettere","blaettere");
35}
36
37static int oeffne() {
38 if (offen)
39 write("Es ist schon geoeffnet.\n");
40 else {
41 offen=1;
42 seite=1;
43 write("Du oeffnest das Buch auf Seite 1.\n");
44 say(TPN + " oeffnet ein Buch.\n",TP);
45 }
46 return 1;
47}
48
49static int schliesse() {
50 if (!offen)
51 write("Es ist schon geschlossen.\n");
52 else {
53 offen=0;
54 seite=0;
55 write("Du schliesst das Buch wieder.\n");
56 say(TPN + " schliesst ein Buch wieder.\n",TP);
57 }
58 return 1;
59}
60
61static int blaettere(string str) {
62 if (!offen || !stringp(str)) return 0;
63 int zu_seite;
64 if (sscanf(str,"zu seite %d",zu_seite)!=1) return 0;
65 int seitenzahl = getseitzahl();
66 if (zu_seite < 1 || zu_seite > seitenzahl) return 0;
67 write("Du blaetterst zu Seite "+zu_seite+".\n");
68 say(TPN + "blaettert in einem Buch.\n");
69 seite=zu_seite;
70 return 1;
71}
72
73
74string buchinfo() {
75 return "'Standardbuch oder Wie man ein standardisiertes Buch schreibt'";
76}
77
78int getseitzahl() {
79 return 3;
80}
81
82string buchdir() {
83 return "/items/buch/";
84}
85// Zeigt gewuenschte Seite an, mit clear werden grafische
86// Seiten aufgespalten und ohne Rahmen gezeigt
87
88void zeige_seite(string file, status clear) {
89 if (!clear) {
90 TP->more(file,1);
91 return;
92 }
93 string text=read_file(file);
94 if (!stringp(text)) return;
95
96 string* pages=({"",""});
97 string* lines=explode(text,"\n");
98 int len, count=sizeof(lines)-1;
99 string line;
100
101 for (int i=1;i<count;i++) {
102 line=lines[i];
103 len=sizeof(line);
104 if (len>50) {
105 pages[0]+=line[1..len/2-2]+"\n";
106 pages[1]+=line[len/2+2..<2]+"\n";
107 }
108 else
109 pages[0]+=line[1..<2]+"\n";
110 }
111 TP->More((pages[0]+pages[1]));
112}
113
114// Schaut ob es die Seiten-Datei mit dir/seite01 oder dir/seite1 findet
115string find_file(string dir, string file, int page) {
116 string filename=dir+file+(page? (page<10 ? "0"+page : page ) : "");
117 if (file_size(filename)>=0) return filename;
118 filename=dir+file+(page? page : "");
119 if (file_size(filename)>=0) return filename;
120 return 0;
121}
122
123// wenn keine geradzahlige seite vorhanden, dann wird ungerade angezeigt
124string find_page(string dir, string file, int page) {
125 string filename=find_file(dir,file,page);
126 // eigentlich nur ungerade seiten gefordert
127 if (!filename && seite%2==0) {
128 return find_file(dir,file,page+1);
129 }
130 return filename;
131}
132
133// wenn _noascii Verzeichnis wird zuerst dort gesucht, wenn flag
134// noascii gesetzt ist, da die files dann aufbereitet sind, wird das
135// flag geloescht
136string find_page_noascii(string dir, string file, int page, status noascii) {
137 if (noascii) {
138 string noascii_dir=dir[..<2]+"_noascii/";
139 if (file_size(noascii_dir)==-2) {
140 string filename=find_page(noascii_dir,file,page);
141 if (stringp(filename)) {
142 noascii=0;
143 return filename;
144 }
145 }
146 }
147 return find_page(dir,file,page);
148}
149
150void lesseite(int seite) {
151 string dir=buchdir();
152 status noascii=0;
153 if (TP->QueryProp(P_NO_ASCII_ART)) {
154 noascii=1;
155 }
156 string buch_file=find_page_noascii(dir,seite ? "seite" : "titel",seite,&noascii);
157 if (!buch_file) {
158 write("Buchdaten nicht gefunden!\n");
159 return;
160 }
161 zeige_seite(buch_file,noascii);
162}
163void lesbuch() {
164 lesseite(seite);
165 seite+=2;
166 if (seite > getseitzahl()) {
167 offen=0;
168 seite=0;
169 write("Du hast das Buch ausgelesen und schliesst es.\n");
170 say(TPN + " hat ein Buch ausgelesen und schliesst es.\n",TP);
171 } else {
172 write("Du blaetterst um.\n");
173 say(TPN + " blaettert um.\n",TP);
174 }
175}
176
177void titel() {
178 lesseite(0);
179}
180
181static int lies(string str) {
182 string was;
183 notify_fail("Zu welcher Seite willst Du blaettern?\n");
184 if(!str) return 0;
185 if(sscanf(str,"%s",was)!=1) return 0;
186 if (!id(str)) return 0;
187 say(TPN + " liest in einem Buch.\n",TP);
188 if (offen) {
189 lesbuch();
190 } else {
191 titel();
192 }
193 return 1;
194}