ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/init.C
(Generate patch)

Comparing deliantra/server/server/init.C (file contents):
Revision 1.79 by root, Sun Apr 11 00:34:06 2010 UTC vs.
Revision 1.80 by root, Thu Apr 15 22:03:23 2010 UTC

31 * information, having it here probably makes more sense. 31 * information, having it here probably makes more sense.
32 */ 32 */
33void 33void
34load_settings () 34load_settings ()
35{ 35{
36 char buf[MAX_BUF], *cp; 36 char fname [1024];
37 int has_val, comp;
38 FILE *fp;
39
40 sprintf (buf, "%s/settings", settings.confdir); 37 sprintf (fname, "%s/settings", settings.confdir);
38 object_thawer thawer (fname);
41 39
42 /* We don't require a settings file at current time, but down the road, 40 if (!thawer)
43 * there will probably be so many values that not having a settings file
44 * will not be a good thing.
45 */
46 if (!(fp = open_and_uncompress (buf, 0, &comp)))
47 { 41 {
48 LOG (llevError, "Error: No settings file found\n"); 42 LOG (llevError, "Error: No settings file found\n");
49 exit (1); 43 exit (1);
50 } 44 }
51 45
52 while (fgets (buf, MAX_BUF - 1, fp) != NULL) 46 while (thawer.kw)
53 { 47 {
54 if (buf[0] == '#') 48 const char *buf = thawer.kw_str;
55 continue; 49 const char *cp = thawer.value_nn;
56 /* eliminate newline */
57 if ((cp = strrchr (buf, '\n')) != NULL)
58 *cp = '\0';
59 50
60 /* Skip over empty lines */
61 if (buf[0] == 0)
62 continue;
63
64 /* Skip all the spaces and set them to nulls. If not space,
65 * set cp to "" to make strcpy's and the like easier down below.
66 */
67 if ((cp = strchr (buf, ' ')) != NULL)
68 {
69 while (*cp == ' ')
70 *cp++ = 0;
71 has_val = 1;
72 }
73 else
74 {
75 cp = (char *)"";
76 has_val = 0;
77 }
78
79 if (!strcasecmp (buf, "not_permadeth")) 51 if (!strcmp (buf, "not_permadeth"))
80 { 52 {
81 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 53 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
82 { 54 {
83 settings.not_permadeth = TRUE; 55 settings.not_permadeth = TRUE;
84 } 56 }
85 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 57 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
86 { 58 {
87 settings.not_permadeth = FALSE; 59 settings.not_permadeth = FALSE;
88 } 60 }
89 else 61 else
90 { 62 {
91 LOG (llevError, "load_settings: Unknown value for not_permadeth" ": %s\n", cp); 63 LOG (llevError, "load_settings: Unknown value for not_permadeth" ": %s\n", cp);
92 } 64 }
93 } 65 }
94 else if (!strcasecmp (buf, "resurrection")) 66 else if (!strcmp (buf, "resurrection"))
95 { 67 {
96 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 68 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
97 { 69 {
98 settings.resurrection = TRUE; 70 settings.resurrection = TRUE;
99 } 71 }
100 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 72 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
101 { 73 {
102 settings.resurrection = FALSE; 74 settings.resurrection = FALSE;
103 } 75 }
104 else 76 else
105 { 77 {
106 LOG (llevError, "load_settings: Unknown value for resurrection" ": %s\n", cp); 78 LOG (llevError, "load_settings: Unknown value for resurrection" ": %s\n", cp);
107 } 79 }
108 } 80 }
109 else if (!strcasecmp (buf, "set_title")) 81 else if (!strcmp (buf, "set_title"))
110 { 82 {
111 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 83 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
112 { 84 {
113 settings.set_title = TRUE; 85 settings.set_title = TRUE;
114 } 86 }
115 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 87 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
116 { 88 {
117 settings.set_title = FALSE; 89 settings.set_title = FALSE;
118 } 90 }
119 else 91 else
120 { 92 {
121 LOG (llevError, "load_settings: Unknown value for set_title" ": %s\n", cp); 93 LOG (llevError, "load_settings: Unknown value for set_title" ": %s\n", cp);
122 } 94 }
123 } 95 }
124 else if (!strcasecmp (buf, "search_items")) 96 else if (!strcmp (buf, "search_items"))
125 { 97 {
126 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 98 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
127 { 99 {
128 settings.search_items = TRUE; 100 settings.search_items = TRUE;
129 } 101 }
130 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 102 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
131 { 103 {
132 settings.search_items = FALSE; 104 settings.search_items = FALSE;
133 } 105 }
134 else 106 else
135 { 107 {
136 LOG (llevError, "load_settings: Unknown value for search_items" ": %s\n", cp); 108 LOG (llevError, "load_settings: Unknown value for search_items" ": %s\n", cp);
137 } 109 }
138 } 110 }
139 else if (!strcasecmp (buf, "spell_encumbrance")) 111 else if (!strcmp (buf, "spell_encumbrance"))
140 { 112 {
141 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 113 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
142 { 114 {
143 settings.spell_encumbrance = TRUE; 115 settings.spell_encumbrance = TRUE;
144 } 116 }
145 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 117 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
146 { 118 {
147 settings.spell_encumbrance = FALSE; 119 settings.spell_encumbrance = FALSE;
148 } 120 }
149 else 121 else
150 { 122 {
151 LOG (llevError, "load_settings: Unknown value for " "spell_encumbrance: %s\n", cp); 123 LOG (llevError, "load_settings: Unknown value for " "spell_encumbrance: %s\n", cp);
152 } 124 }
153 } 125 }
154 else if (!strcasecmp (buf, "spell_failure_effects")) 126 else if (!strcmp (buf, "spell_failure_effects"))
155 { 127 {
156 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 128 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
157 { 129 {
158 settings.spell_failure_effects = TRUE; 130 settings.spell_failure_effects = TRUE;
159 } 131 }
160 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 132 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
161 { 133 {
162 settings.spell_failure_effects = FALSE; 134 settings.spell_failure_effects = FALSE;
163 } 135 }
164 else 136 else
165 { 137 {
166 LOG (llevError, "load_settings: Unknown value for " "spell_failure_effects: %s\n", cp); 138 LOG (llevError, "load_settings: Unknown value for " "spell_failure_effects: %s\n", cp);
167 } 139 }
168 } 140 }
169 else if (!strcasecmp (buf, "spellpoint_level_depend")) 141 else if (!strcmp (buf, "spellpoint_level_depend"))
170 { 142 {
171 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 143 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
172 { 144 {
173 settings.spellpoint_level_depend = TRUE; 145 settings.spellpoint_level_depend = TRUE;
174 } 146 }
175 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 147 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
176 { 148 {
177 settings.spellpoint_level_depend = FALSE; 149 settings.spellpoint_level_depend = FALSE;
178 } 150 }
179 else 151 else
180 { 152 {
181 LOG (llevError, "load_settings: Unknown value for " "spellpoint_level_depend: %s\n", cp); 153 LOG (llevError, "load_settings: Unknown value for " "spellpoint_level_depend: %s\n", cp);
182 } 154 }
183 } 155 }
184 else if (!strcasecmp (buf, "stat_loss_on_death")) 156 else if (!strcmp (buf, "stat_loss_on_death"))
185 { 157 {
186 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 158 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
187 { 159 {
188 settings.stat_loss_on_death = TRUE; 160 settings.stat_loss_on_death = TRUE;
189 } 161 }
190 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 162 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
191 { 163 {
192 settings.stat_loss_on_death = FALSE; 164 settings.stat_loss_on_death = FALSE;
193 } 165 }
194 else 166 else
195 { 167 {
196 LOG (llevError, "load_settings: Unknown value for " "stat_loss_on_death: %s\n", cp); 168 LOG (llevError, "load_settings: Unknown value for " "stat_loss_on_death: %s\n", cp);
197 } 169 }
198 } 170 }
199 else if (!strcasecmp (buf, "use_permanent_experience")) 171 else if (!strcmp (buf, "use_permanent_experience"))
200 { 172 {
201 LOG (llevError, "use_permanent_experience is deprecated, use" "permenent_experience_percentage instead\n"); 173 LOG (llevError, "use_permanent_experience is deprecated, use" "permenent_experience_percentage instead\n");
202 } 174 }
203 else if (!strcasecmp (buf, "permanent_experience_percentage")) 175 else if (!strcmp (buf, "permanent_experience_percentage"))
204 { 176 {
205 int val = atoi (cp); 177 int val = atoi (cp);
206 178
207 if (val < 0 || val > 100) 179 if (val < 0 || val > 100)
208 LOG (llevError, "load_settings: permenent_experience_percentage" "must be between 0 and 100, %d is invalid\n", val); 180 LOG (llevError, "load_settings: permenent_experience_percentage" "must be between 0 and 100, %d is invalid\n", val);
209 else 181 else
210 settings.permanent_exp_ratio = val; 182 settings.permanent_exp_ratio = val;
211 } 183 }
212 else if (!strcasecmp (buf, "death_penalty_percentage")) 184 else if (!strcmp (buf, "death_penalty_percentage"))
213 { 185 {
214 int val = atoi (cp); 186 int val = atoi (cp);
215 187
216 if (val < 0 || val > 100) 188 if (val < 0 || val > 100)
217 LOG (llevError, "load_settings: death_penalty_percentage" "must be between 0 and 100, %d is invalid\n", val); 189 LOG (llevError, "load_settings: death_penalty_percentage" "must be between 0 and 100, %d is invalid\n", val);
218 else 190 else
219 settings.death_penalty_ratio = val; 191 settings.death_penalty_ratio = val;
220 } 192 }
221 else if (!strcasecmp (buf, "death_penalty_levels")) 193 else if (!strcmp (buf, "death_penalty_levels"))
222 { 194 {
223 int val = atoi (cp); 195 int val = atoi (cp);
224 196
225 if (val < 0 || val > 255) 197 if (val < 0 || val > 255)
226 LOG (llevError, "load_settings: death_penalty_levels" "can not be negative, %d is invalid\n", val); 198 LOG (llevError, "load_settings: death_penalty_levels" "can not be negative, %d is invalid\n", val);
227 else 199 else
228 settings.death_penalty_level = val; 200 settings.death_penalty_level = val;
229 } 201 }
230 else if (!strcasecmp (buf, "balanced_stat_loss")) 202 else if (!strcmp (buf, "balanced_stat_loss"))
231 { 203 {
232 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 204 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
233 { 205 {
234 settings.balanced_stat_loss = TRUE; 206 settings.balanced_stat_loss = TRUE;
235 } 207 }
236 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 208 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
237 { 209 {
238 settings.balanced_stat_loss = FALSE; 210 settings.balanced_stat_loss = FALSE;
239 } 211 }
240 else 212 else
241 { 213 {
242 LOG (llevError, "load_settings: Unknown value for " "balanced_stat_loss: %s\n", cp); 214 LOG (llevError, "load_settings: Unknown value for " "balanced_stat_loss: %s\n", cp);
243 } 215 }
244 } 216 }
245 else if (!strcasecmp (buf, "simple_exp")) 217 else if (!strcmp (buf, "simple_exp"))
246 { 218 {
247 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 219 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
248 { 220 {
249 settings.simple_exp = TRUE; 221 settings.simple_exp = TRUE;
250 } 222 }
251 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 223 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
252 { 224 {
253 settings.simple_exp = FALSE; 225 settings.simple_exp = FALSE;
254 } 226 }
255 else 227 else
256 { 228 {
257 LOG (llevError, "load_settings: Unknown value for simple_exp: %s\n", cp); 229 LOG (llevError, "load_settings: Unknown value for simple_exp: %s\n", cp);
258 } 230 }
259 } 231 }
260 else if (!strcasecmp (buf, "item_power_factor")) 232 else if (!strcmp (buf, "item_power_factor"))
261 { 233 {
262 float tmp = atof (cp); 234 float tmp = atof (cp);
263 235
264 if (tmp < 0) 236 if (tmp < 0)
265 LOG (llevError, "load_settings: item_power_factor must be a positive number (%f < 0)\n", tmp); 237 LOG (llevError, "load_settings: item_power_factor must be a positive number (%f < 0)\n", tmp);
266 else 238 else
267 settings.item_power_factor = tmp; 239 settings.item_power_factor = tmp;
268 } 240 }
269 else if (!strcasecmp (buf, "pk_luck_penalty")) 241 else if (!strcmp (buf, "pk_luck_penalty"))
270 { 242 {
271 sint16 val = atoi (cp); 243 sint16 val = atoi (cp);
272 244
273 if (val < -100 || val > 100) 245 if (val < -100 || val > 100)
274 LOG (llevError, "load_settings: pk_luck_penalty must be between -100 and 100" ", %d is invalid\n", val); 246 LOG (llevError, "load_settings: pk_luck_penalty must be between -100 and 100" ", %d is invalid\n", val);
275 else 247 else
276 settings.pk_luck_penalty = val; 248 settings.pk_luck_penalty = val;
277 } 249 }
278 else if (!strcasecmp (buf, "set_friendly_fire")) 250 else if (!strcmp (buf, "set_friendly_fire"))
279 { 251 {
280 int val = atoi (cp); 252 int val = atoi (cp);
281 253
282 if (val < 0 || val > 100) 254 if (val < 0 || val > 100)
283 LOG (llevError, "load_settings: set_friendly_fire must be between 0 an 100" ", %d is invalid\n", val); 255 LOG (llevError, "load_settings: set_friendly_fire must be between 0 an 100" ", %d is invalid\n", val);
284 else 256 else
285 settings.set_friendly_fire = val; 257 settings.set_friendly_fire = val;
286 } 258 }
287 else if (!strcasecmp (buf, "armor_max_enchant")) 259 else if (!strcmp (buf, "armor_max_enchant"))
288 { 260 {
289 int max_e = atoi (cp); 261 int max_e = atoi (cp);
290 262
291 if (max_e <= 0) 263 if (max_e <= 0)
292 LOG (llevError, "load_settings: armor_max_enchant is %d\n", max_e); 264 LOG (llevError, "load_settings: armor_max_enchant is %d\n", max_e);
293 else 265 else
294 settings.armor_max_enchant = max_e; 266 settings.armor_max_enchant = max_e;
295 } 267 }
296 else if (!strcasecmp (buf, "armor_weight_reduction")) 268 else if (!strcmp (buf, "armor_weight_reduction"))
297 { 269 {
298 int wr = atoi (cp); 270 int wr = atoi (cp);
299 271
300 if (wr < 0) 272 if (wr < 0)
301 LOG (llevError, "load_settings: armor_weight_reduction is %d\n", wr); 273 LOG (llevError, "load_settings: armor_weight_reduction is %d\n", wr);
302 else 274 else
303 settings.armor_weight_reduction = wr; 275 settings.armor_weight_reduction = wr;
304 } 276 }
305 else if (!strcasecmp (buf, "armor_weight_linear")) 277 else if (!strcmp (buf, "armor_weight_linear"))
306 { 278 {
307 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 279 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
308 { 280 {
309 settings.armor_weight_linear = TRUE; 281 settings.armor_weight_linear = TRUE;
310 } 282 }
311 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 283 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
312 { 284 {
313 settings.armor_weight_linear = FALSE; 285 settings.armor_weight_linear = FALSE;
314 } 286 }
315 else 287 else
316 { 288 {
317 LOG (llevError, "load_settings: unknown value for armor_weight_linear: %s\n", cp); 289 LOG (llevError, "load_settings: unknown value for armor_weight_linear: %s\n", cp);
318 } 290 }
319 291
320 } 292 }
321 else if (!strcasecmp (buf, "armor_speed_improvement")) 293 else if (!strcmp (buf, "armor_speed_improvement"))
322 { 294 {
323 int wr = atoi (cp); 295 int wr = atoi (cp);
324 296
325 if (wr < 0) 297 if (wr < 0)
326 LOG (llevError, "load_settings: armor_speed_improvement is %d\n", wr); 298 LOG (llevError, "load_settings: armor_speed_improvement is %d\n", wr);
327 else 299 else
328 settings.armor_speed_improvement = wr; 300 settings.armor_speed_improvement = wr;
329 } 301 }
330 else if (!strcasecmp (buf, "armor_speed_linear")) 302 else if (!strcmp (buf, "armor_speed_linear"))
331 { 303 {
332 if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) 304 if (!strcmp (cp, "on") || !strcmp (cp, "true"))
333 { 305 {
334 settings.armor_speed_linear = TRUE; 306 settings.armor_speed_linear = TRUE;
335 } 307 }
336 else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) 308 else if (!strcmp (cp, "off") || !strcmp (cp, "false"))
337 { 309 {
338 settings.armor_speed_linear = FALSE; 310 settings.armor_speed_linear = FALSE;
339 } 311 }
340 else 312 else
341 { 313 {
342 LOG (llevError, "load_settings: unknown value for armor_speed_linear: %s\n", cp); 314 LOG (llevError, "load_settings: unknown value for armor_speed_linear: %s\n", cp);
343 } 315 }
344 316
345 } 317 }
346 else 318 else
347 LOG (llevError, "Unknown value in settings file: %s\n", buf); 319 thawer.parse_error ("settings file");
320
321 thawer.next ();
348 } 322 }
349
350 close_and_delete (fp, comp);
351} 323}
352 324
353/* 325/*
354 * init() is called only once, when starting the program. 326 * init() is called only once, when starting the program.
355 */ 327 */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines