ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/init.C
Revision: 1.59
Committed: Thu Apr 29 07:32:33 2010 UTC (14 years ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-3_0
Changes since 1.58: +1 -8 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 elmex 1.1 /*
2 root 1.41 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 pippijn 1.23 *
4 root 1.55 * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 root 1.54 * Copyright (©) 2002 Mark Wedel & Crossfire Development Team
6     * Copyright (©) 1992 Frank Tore Johansen
7 pippijn 1.23 *
8 root 1.49 * Deliantra is free software: you can redistribute it and/or modify it under
9     * the terms of the Affero GNU General Public License as published by the
10     * Free Software Foundation, either version 3 of the License, or (at your
11     * option) any later version.
12 pippijn 1.23 *
13 root 1.38 * 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 pippijn 1.23 *
18 root 1.49 * You should have received a copy of the Affero GNU General Public License
19     * and the GNU General Public License along with this program. If not, see
20     * <http://www.gnu.org/licenses/>.
21 root 1.36 *
22 root 1.41 * The authors can be reached via e-mail to <support@deliantra.net>
23 pippijn 1.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.48 dynbuf_text msg_dynbuf (65536, 65536);
31    
32 root 1.10 extern const char *const attacktype_desc[NROFATTACKS] = {
33 root 1.11 # define def(uc, lc, name, plus, change) # name,
34     # include "attackinc.h"
35     # undef def
36 root 1.7 };
37    
38 root 1.10 extern const char *const resist_plus[NROFATTACKS] = {
39 root 1.11 # define def(uc, lc, name, plus, change) # plus,
40     # include "attackinc.h"
41     # undef def
42 root 1.7 };
43    
44 root 1.10 extern const char *const change_resist_msg[NROFATTACKS] = {
45 root 1.11 # define def(uc, lc, name, plus, change) # change,
46     # include "attackinc.h"
47     # undef def
48 root 1.7 };
49    
50     int resist_table[NROFATTACKS] = {
51 root 1.11 # define def(uc, lc, name, plus, change) ATNR_ ## uc,
52     # include "attackinc.h"
53     # undef def
54 root 1.7 };
55    
56 elmex 1.1 /* You unforunately need to looking in include/global.h to see what these
57     * correspond to.
58     */
59     struct Settings settings = {
60 root 1.10 LOGFILE, /* Logfile */
61     CSPORT, /* Client/server port */
62 root 1.59 llevTrace, /* Log level */
63 root 1.10 0, NULL, 0, /* dumpvalues, dumparg, daemonmode */
64     0, /* argc */
65     NULL, /* argv */
66     CONFDIR,
67     DATADIR,
68     LOCALDIR,
69     PLAYERDIR, MAPDIR, ARCHETYPES, REGIONS, TREASURES,
70 root 1.53 UNIQUE_DIR, "",
71 root 1.10 TMPDIR,
72 root 1.34 PK_LUCK_PENALTY,
73 root 1.10 STAT_LOSS_ON_DEATH,
74     PERMANENT_EXPERIENCE_RATIO,
75     DEATH_PENALTY_RATIO,
76     DEATH_PENALTY_LEVEL,
77     BALANCED_STAT_LOSS,
78     NOT_PERMADETH,
79     SIMPLE_EXP,
80     SET_TITLE,
81     RESURRECTION,
82     SEARCH_ITEMS,
83     SPELL_ENCUMBRANCE,
84     SPELL_FAILURE_EFFECTS,
85 root 1.34 SET_FRIENDLY_FIRE,
86 root 1.35 0,
87     0,
88 root 1.10 EXPLORE_MODE,
89     SPELLPOINT_LEVEL_DEPEND,
90     0,
91     1.0,
92    
93 elmex 1.1 /* Armor enchantment stuff */
94 root 1.10 ARMOR_MAX_ENCHANT,
95     ARMOR_WEIGHT_REDUCTION,
96     ARMOR_WEIGHT_LINEAR,
97     ARMOR_SPEED_IMPROVEMENT,
98     ARMOR_SPEED_LINEAR,
99 elmex 1.1 };
100    
101     /* perhaps not the best place for this, but needs to be
102     * in some file in the common area so that standalone
103     * programs, like the random map generator, can be built.
104     */
105 root 1.10 const char *const spellpathnames[NRSPELLPATHS] = {
106     "Protection",
107     "Fire",
108     "Frost",
109     "Electricity",
110     "Missiles",
111     "Self",
112     "Summoning",
113     "Abjuration",
114     "Restoration",
115     "Detonation",
116     "Mind",
117     "Creation",
118     "Teleportation",
119     "Information",
120     "Transmutation",
121     "Transferrence",
122     "Turning",
123     "Wounding",
124     "Death",
125     "Light"
126 elmex 1.1 };
127    
128 pippijn 1.21 /* init_environ initialises values from the environmental variables.
129 elmex 1.1 * it needs to be called very early, since command line options should
130     * overwrite these if specified.
131     */
132 root 1.10 void
133 root 1.52 init_environ ()
134 root 1.10 {
135 root 1.46 const char *cp;
136 elmex 1.1
137 root 1.47 if (cp = getenv ("DELIANTRA_CONFDIR" )) settings.confdir = cp;
138 root 1.46 if (cp = getenv ("DELIANTRA_LIBDIR" )) settings.datadir = cp;
139     if (cp = getenv ("DELIANTRA_LOCALDIR" )) settings.localdir = cp;
140     if (cp = getenv ("DELIANTRA_PLAYERDIR" )) settings.playerdir = cp;
141     if (cp = getenv ("DELIANTRA_MAPDIR" )) settings.mapdir = cp;
142     if (cp = getenv ("DELIANTRA_ARCHETYPES" )) settings.archetypes = cp;
143     if (cp = getenv ("DELIANTRA_TREASURES" )) settings.treasures = cp;
144     if (cp = getenv ("DELIANTRA_UNIQUEDIR" )) settings.uniquedir = cp;
145     if (cp = getenv ("DELIANTRA_TEMPLATEDIR")) settings.templatedir = cp;
146     if (cp = getenv ("DELIANTRA_TMPDIR" )) settings.tmpdir = cp;
147    
148     if (cp = getenv ("DELIANTRA_LOGFILE" )) settings.logfilename = cp;
149 elmex 1.1 }
150 root 1.10
151 elmex 1.1 /*
152     * Initialises all global variables.
153     * Might use environment-variables as default for some of them.
154     */
155 root 1.10 void
156 root 1.52 init_globals ()
157 root 1.10 {
158     if (settings.logfilename[0] == 0)
159 root 1.56 log_setfd (-1);
160 root 1.44 else
161 root 1.10 {
162 root 1.44 int logfd = open (settings.logfilename, O_CREAT|O_WRONLY|O_APPEND, 0666);
163    
164     if (logfd >= 0)
165 root 1.56 log_setfd (logfd);
166 root 1.44 else
167     {
168 root 1.56 log_setfd (-1);
169 root 1.44 LOG (llevError, "Unable to open %s as the logfile - will use stderr instead", settings.logfilename);
170     }
171 elmex 1.1 }
172     }
173    
174 root 1.10 void
175 root 1.52 init_dynamic ()
176 root 1.10 {
177 root 1.39 first_map_ext_path = "/start/HallsOfSelection";
178     first_map_path = "/HallOfSelection";
179 elmex 1.1 }
180    
181     /*
182 pippijn 1.21 * initialises the attack messages.
183 elmex 1.1 * Called by init_library().
184     */
185    
186     //attackmess_t attack_mess[NROFATTACKMESS][MAXATTACKMESS];
187    
188 root 1.10 void
189 root 1.52 init_attackmess ()
190 root 1.10 {
191 root 1.58 object_thawer thawer (settings.datadir, "attackmess");
192 root 1.57
193     if (!thawer)
194 root 1.10 {
195 root 1.58 LOG (llevError, "Can't open %s.\n", thawer.name);
196 root 1.10 return;
197 elmex 1.1 }
198    
199 root 1.57 int msgnum = -1;
200     int total = 0;
201    
202     while (thawer.kw)
203 root 1.10 {
204 root 1.57 if (thawer.kw != KW_type)
205     if (!thawer.parse_error ("attackmess file"))
206     break;
207 root 1.45
208 root 1.57 thawer.get (msgnum);
209     thawer.next ();
210 root 1.45
211 root 1.57 int level = 0;
212 root 1.10
213 root 1.57 while (thawer.kw == KW_hp)
214 root 1.10 {
215 root 1.57 // our old friend, dog-slow sscanf
216     int hp;
217     char buf1[1024];
218     char buf2[1024];
219     char buf3[1024];
220    
221     if (4 != sscanf (thawer.value_nn, "%d %1023[^|]|%1023[^|]|%1023[^|]",
222     &hp, buf1, buf2, buf3))
223     thawer.parse_error ("attackmess file");
224     else
225 root 1.10 {
226 root 1.57 if (*buf2 == '-')
227     *buf2 = 0; // sscanf can't parse empty fields, so use "-" as marker
228 root 1.45
229 root 1.57 attack_mess[msgnum][level].level = hp;
230     attack_mess[msgnum][level].buf1 = strdup (buf1);
231     attack_mess[msgnum][level].buf2 = strdup (buf2);
232     attack_mess[msgnum][level].buf3 = strdup (buf3);
233 root 1.51
234 root 1.57 ++level;
235     ++total;
236     }
237 root 1.51
238 root 1.57 thawer.next ();
239 root 1.10 }
240 root 1.51
241 root 1.57 attack_mess[msgnum][level].level = -1;
242     attack_mess[msgnum][level].buf1 = 0;
243     attack_mess[msgnum][level].buf2 = 0;
244     attack_mess[msgnum][level].buf3 = 0;
245 elmex 1.1 }
246 root 1.45
247 root 1.51 LOG (llevDebug, "got %d messages in %d categories.\n", total, msgnum + 1);
248 elmex 1.1 }
249 root 1.45