ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/init.C
Revision: 1.35
Committed: Thu May 17 14:14:54 2007 UTC (17 years ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_1
Changes since 1.34: +3 -5 lines
Log Message:
remove superfluous/broken settings and related code

- COZY_SERVER:
  enabled most msall adjustments, changed digestion formula to the original one,
  party member treament w.r.t. pets enforced.
- PROHIBIT_PLAYERKILL: default
- real_wiz: removed and enforced
- create_home_portals: removed and enforced
- casting_time: removed and forced to be off (was crashing anyways)
- was_wiz flag removed and treated as off usually unless it was used
  in place of flag_wiz.
- do not save or restore wiz, wizcast and wizpass flags.

File Contents

# User Rev Content
1 elmex 1.1 /*
2 root 1.35 * CrossFire, A Multiplayer game
3 pippijn 1.23 *
4     * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
5     * Copyright (C) 2002 Mark Wedel & Crossfire Development Team
6     * Copyright (C) 1992 Frank Tore Johansen
7     *
8     * This program is free software; you can redistribute it and/or modify
9     * it under the terms of the GNU General Public License as published by
10     * the Free Software Foundation; either version 2 of the License, or
11     * (at your option) any later version.
12     *
13     * This program is distributed in the hope that it will be useful,
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16     * GNU General Public License for more details.
17     *
18     * You should have received a copy of the GNU General Public License
19     * along with this program; if not, write to the Free Software
20     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21     *
22     * The authors can be reached via e-mail at <crossfire@schmorp.de>
23     */
24 elmex 1.1
25 root 1.10 #define EXTERN // horrible hack
26 root 1.7
27 elmex 1.1 #include <global.h>
28     #include <object.h>
29    
30 root 1.10 extern const char *const attacktype_desc[NROFATTACKS] = {
31 root 1.11 # define def(uc, lc, name, plus, change) # name,
32     # include "attackinc.h"
33     # undef def
34 root 1.7 };
35    
36 root 1.10 extern const char *const resist_plus[NROFATTACKS] = {
37 root 1.11 # define def(uc, lc, name, plus, change) # plus,
38     # include "attackinc.h"
39     # undef def
40 root 1.7 };
41    
42 root 1.10 extern const char *const change_resist_msg[NROFATTACKS] = {
43 root 1.11 # define def(uc, lc, name, plus, change) # change,
44     # include "attackinc.h"
45     # undef def
46 root 1.7 };
47    
48     int resist_table[NROFATTACKS] = {
49 root 1.11 # define def(uc, lc, name, plus, change) ATNR_ ## uc,
50     # include "attackinc.h"
51     # undef def
52 root 1.7 };
53    
54 elmex 1.1 /* You unforunately need to looking in include/global.h to see what these
55     * correspond to.
56     */
57     struct Settings settings = {
58 root 1.10 LOGFILE, /* Logfile */
59     CSPORT, /* Client/server port */
60 elmex 1.1
61     /* Debug level */
62     #ifdef DEBUG
63     llevDebug,
64     #else
65     llevInfo,
66     #endif
67    
68 root 1.10 0, NULL, 0, /* dumpvalues, dumparg, daemonmode */
69     0, /* argc */
70     NULL, /* argv */
71     CONFDIR,
72     DATADIR,
73     LOCALDIR,
74     PLAYERDIR, MAPDIR, ARCHETYPES, REGIONS, TREASURES,
75     UNIQUE_DIR, TEMPLATE_DIR,
76     TMPDIR,
77 root 1.34 PK_LUCK_PENALTY,
78 root 1.10 STAT_LOSS_ON_DEATH,
79     PERMANENT_EXPERIENCE_RATIO,
80     DEATH_PENALTY_RATIO,
81     DEATH_PENALTY_LEVEL,
82     BALANCED_STAT_LOSS,
83     NOT_PERMADETH,
84     SIMPLE_EXP,
85     SET_TITLE,
86     RESURRECTION,
87     SEARCH_ITEMS,
88     SPELL_ENCUMBRANCE,
89     SPELL_FAILURE_EFFECTS,
90 root 1.34 SET_FRIENDLY_FIRE,
91 root 1.35 0,
92     0,
93 root 1.10 EXPLORE_MODE,
94     SPELLPOINT_LEVEL_DEPEND,
95     MOTD,
96     "rules",
97     "news",
98     "", /* DM_MAIL */
99     0, 0, 0, 0, 0, 0, 0, 0, /* worldmap settings */
100     0,
101     1.0,
102    
103 elmex 1.1 /* Armor enchantment stuff */
104 root 1.10 ARMOR_MAX_ENCHANT,
105     ARMOR_WEIGHT_REDUCTION,
106     ARMOR_WEIGHT_LINEAR,
107     ARMOR_SPEED_IMPROVEMENT,
108     ARMOR_SPEED_LINEAR,
109 elmex 1.1 };
110    
111     /* perhaps not the best place for this, but needs to be
112     * in some file in the common area so that standalone
113     * programs, like the random map generator, can be built.
114     */
115 root 1.10 const char *const spellpathnames[NRSPELLPATHS] = {
116     "Protection",
117     "Fire",
118     "Frost",
119     "Electricity",
120     "Missiles",
121     "Self",
122     "Summoning",
123     "Abjuration",
124     "Restoration",
125     "Detonation",
126     "Mind",
127     "Creation",
128     "Teleportation",
129     "Information",
130     "Transmutation",
131     "Transferrence",
132     "Turning",
133     "Wounding",
134     "Death",
135     "Light"
136 elmex 1.1 };
137    
138     /*
139     * It is vital that init_library() is called by any functions
140     * using this library.
141     * If you want to lessen the size of the program using the library,
142     * you can replace the call to init_library() with init_globals() and
143     * init_function_pointers(). Good idea to also call init_vars and
144     * init_hash_table if you are doing any object loading.
145     */
146 root 1.10 void
147     init_library (void)
148     {
149     init_globals ();
150     init_block ();
151     init_dynamic ();
152     init_attackmess ();
153     init_experience ();
154 elmex 1.1 }
155    
156 pippijn 1.21 /* init_environ initialises values from the environmental variables.
157 elmex 1.1 * it needs to be called very early, since command line options should
158     * overwrite these if specified.
159     */
160 root 1.10 void
161     init_environ (void)
162     {
163     char *cp;
164 elmex 1.1
165 root 1.10 cp = getenv ("CROSSFIRE_LIBDIR");
166     if (cp)
167     settings.datadir = cp;
168 root 1.33
169 root 1.10 cp = getenv ("CROSSFIRE_LOCALDIR");
170     if (cp)
171     settings.localdir = cp;
172 root 1.33
173 root 1.10 cp = getenv ("CROSSFIRE_PLAYERDIR");
174     if (cp)
175     settings.playerdir = cp;
176 root 1.33
177 root 1.10 cp = getenv ("CROSSFIRE_MAPDIR");
178     if (cp)
179     settings.mapdir = cp;
180 root 1.33
181 root 1.10 cp = getenv ("CROSSFIRE_ARCHETYPES");
182     if (cp)
183     settings.archetypes = cp;
184 root 1.33
185 root 1.10 cp = getenv ("CROSSFIRE_TREASURES");
186     if (cp)
187     settings.treasures = cp;
188 root 1.33
189 root 1.10 cp = getenv ("CROSSFIRE_UNIQUEDIR");
190     if (cp)
191     settings.uniquedir = cp;
192 root 1.33
193 root 1.10 cp = getenv ("CROSSFIRE_TEMPLATEDIR");
194     if (cp)
195     settings.templatedir = cp;
196 root 1.33
197 root 1.10 cp = getenv ("CROSSFIRE_TMPDIR");
198     if (cp)
199     settings.tmpdir = cp;
200 elmex 1.1 }
201 root 1.10
202 elmex 1.1 /*
203     * Initialises all global variables.
204     * Might use environment-variables as default for some of them.
205     */
206 root 1.10 void
207     init_globals (void)
208     {
209     if (settings.logfilename[0] == 0)
210 root 1.12 logfile = stderr;
211 root 1.10 else if ((logfile = fopen (settings.logfilename, "a")) == NULL)
212     {
213     fprintf (stderr, "Unable to open %s as the logfile - will use stderr instead\n", settings.logfilename);
214     logfile = stderr;
215 elmex 1.1 }
216 root 1.10 else
217 root 1.12 setvbuf (logfile, NULL, _IOLBF, 0);
218 elmex 1.1 }
219    
220 root 1.10 void
221     init_dynamic (void)
222     {
223     archetype *at = first_archetype;
224    
225     while (at)
226     {
227     if (at->clone.type == MAP)
228     {
229     if (at->clone.race)
230 root 1.19 first_map_ext_path = at->clone.race;
231 root 1.12
232 root 1.10 if (EXIT_PATH (&at->clone))
233     {
234 root 1.19 first_map_path = EXIT_PATH (&at->clone);
235 root 1.10 return;
236 elmex 1.1 }
237 root 1.2 }
238 root 1.12
239 root 1.10 at = at->next;
240 elmex 1.1 }
241 root 1.12
242 root 1.32 LOG (llevDebug, "You need an archetype of type 'map' and it has to contain the player start map\n");
243 root 1.10 exit (-1);
244 elmex 1.1 }
245    
246     /*
247 pippijn 1.21 * initialises the attack messages.
248 elmex 1.1 * Called by init_library().
249     */
250    
251     //attackmess_t attack_mess[NROFATTACKMESS][MAXATTACKMESS];
252    
253 root 1.10 void
254     init_attackmess (void)
255     {
256     char buf[MAX_BUF];
257     char filename[MAX_BUF];
258     char *cp, *p;
259     FILE *fp;
260     static int has_been_done = 0;
261     int mess, level, comp;
262     int mode = 0, total = 0;
263    
264     if (has_been_done)
265     return;
266     else
267     has_been_done = 1;
268    
269     sprintf (filename, "%s/attackmess", settings.datadir);
270 pippijn 1.20 LOG (llevDebug, "Reading attack messages from %s...\n", filename);
271 root 1.10 if ((fp = open_and_uncompress (filename, 0, &comp)) == NULL)
272     {
273     LOG (llevError, "Can't open %s.\n", filename);
274     return;
275 elmex 1.1 }
276    
277 root 1.10 level = 0;
278     while (fgets (buf, MAX_BUF, fp) != NULL)
279     {
280     if (*buf == '#')
281     continue;
282     if ((cp = strchr (buf, '\n')) != NULL)
283     *cp = '\0';
284     cp = buf;
285     while (*cp == ' ') /* Skip blanks */
286     cp++;
287    
288     if (strncmp (cp, "TYPE:", 5) == 0)
289     {
290     p = strtok (buf, ":");
291     p = strtok (NULL, ":");
292     if (mode == 1)
293     {
294     attack_mess[mess][level].level = -1;
295     attack_mess[mess][level].buf1 = NULL;
296     attack_mess[mess][level].buf2 = NULL;
297     attack_mess[mess][level].buf3 = NULL;
298 root 1.2 }
299 root 1.10 level = 0;
300     mess = atoi (p);
301     mode = 1;
302     continue;
303     }
304     if (mode == 1)
305     {
306     p = strtok (buf, "=");
307     attack_mess[mess][level].level = atoi (buf);
308     p = strtok (NULL, "=");
309     if (p != NULL)
310 root 1.16 attack_mess[mess][level].buf1 = strdup (p);
311 root 1.10 else
312 root 1.16 attack_mess[mess][level].buf1 = strdup ("");
313 root 1.10 mode = 2;
314     continue;
315     }
316     else if (mode == 2)
317     {
318     p = strtok (buf, "=");
319     attack_mess[mess][level].level = atoi (buf);
320     p = strtok (NULL, "=");
321     if (p != NULL)
322 root 1.16 attack_mess[mess][level].buf2 = strdup (p);
323 root 1.10 else
324 root 1.16 attack_mess[mess][level].buf2 = strdup ("");
325 root 1.10 mode = 3;
326     continue;
327 root 1.2 }
328 root 1.10 else if (mode == 3)
329     {
330     p = strtok (buf, "=");
331     attack_mess[mess][level].level = atoi (buf);
332     p = strtok (NULL, "=");
333     if (p != NULL)
334 root 1.16 attack_mess[mess][level].buf3 = strdup (p);
335 root 1.10 else
336 root 1.16 attack_mess[mess][level].buf3 = strdup ("");
337 root 1.10 mode = 1;
338     level++;
339     total++;
340     continue;
341 root 1.2 }
342 elmex 1.1 }
343 root 1.10 LOG (llevDebug, "got %d messages in %d categories.\n", total, mess + 1);
344     close_and_delete (fp, comp);
345 elmex 1.1 }