1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010,2011 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2002 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992 Frank Tore Johansen |
6 | * Copyright (©) 1992 Frank Tore Johansen |
7 | * |
7 | * |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
8 | * 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 |
9 | * the terms of the Affero GNU General Public License as published by the |
… | |
… | |
31 | * information, having it here probably makes more sense. |
31 | * information, having it here probably makes more sense. |
32 | */ |
32 | */ |
33 | void |
33 | void |
34 | load_settings () |
34 | load_settings () |
35 | { |
35 | { |
36 | char buf[MAX_BUF], *cp; |
36 | object_thawer thawer (settings.confdir, "settings"); |
37 | int has_val, comp; |
|
|
38 | FILE *fp; |
|
|
39 | |
37 | |
40 | sprintf (buf, "%s/settings", settings.confdir); |
38 | if (!thawer) |
41 | |
|
|
42 | /* We don't require a settings file at current time, but down the road, |
|
|
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 | { |
39 | { |
48 | LOG (llevError, "Error: No settings file found\n"); |
40 | LOG (llevError, "Error: No settings file found\n"); |
49 | exit (1); |
41 | exit (1); |
50 | } |
42 | } |
51 | |
43 | |
52 | while (fgets (buf, MAX_BUF - 1, fp) != NULL) |
44 | while (thawer.kw) |
53 | { |
45 | { |
54 | if (buf[0] == '#') |
46 | const char *buf = thawer.kw_str; |
55 | continue; |
47 | const char *cp = thawer.value_nn; |
56 | /* eliminate newline */ |
|
|
57 | if ((cp = strrchr (buf, '\n')) != NULL) |
|
|
58 | *cp = '\0'; |
|
|
59 | |
48 | |
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")) |
49 | if (!strcmp (buf, "not_permadeth")) |
80 | { |
50 | { |
81 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
51 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
82 | { |
52 | { |
83 | settings.not_permadeth = TRUE; |
53 | settings.not_permadeth = TRUE; |
84 | } |
54 | } |
85 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
55 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
86 | { |
56 | { |
87 | settings.not_permadeth = FALSE; |
57 | settings.not_permadeth = FALSE; |
88 | } |
58 | } |
89 | else |
59 | else |
90 | { |
60 | { |
91 | LOG (llevError, "load_settings: Unknown value for not_permadeth" ": %s\n", cp); |
61 | LOG (llevError, "load_settings: Unknown value for not_permadeth" ": %s\n", cp); |
92 | } |
62 | } |
93 | } |
63 | } |
94 | else if (!strcasecmp (buf, "resurrection")) |
64 | else if (!strcmp (buf, "resurrection")) |
95 | { |
65 | { |
96 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
66 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
97 | { |
67 | { |
98 | settings.resurrection = TRUE; |
68 | settings.resurrection = TRUE; |
99 | } |
69 | } |
100 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
70 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
101 | { |
71 | { |
102 | settings.resurrection = FALSE; |
72 | settings.resurrection = FALSE; |
103 | } |
73 | } |
104 | else |
74 | else |
105 | { |
75 | { |
106 | LOG (llevError, "load_settings: Unknown value for resurrection" ": %s\n", cp); |
76 | LOG (llevError, "load_settings: Unknown value for resurrection" ": %s\n", cp); |
107 | } |
77 | } |
108 | } |
78 | } |
109 | else if (!strcasecmp (buf, "set_title")) |
79 | else if (!strcmp (buf, "set_title")) |
110 | { |
80 | { |
111 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
81 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
112 | { |
82 | { |
113 | settings.set_title = TRUE; |
83 | settings.set_title = TRUE; |
114 | } |
84 | } |
115 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
85 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
116 | { |
86 | { |
117 | settings.set_title = FALSE; |
87 | settings.set_title = FALSE; |
118 | } |
88 | } |
119 | else |
89 | else |
120 | { |
90 | { |
121 | LOG (llevError, "load_settings: Unknown value for set_title" ": %s\n", cp); |
91 | LOG (llevError, "load_settings: Unknown value for set_title" ": %s\n", cp); |
122 | } |
92 | } |
123 | } |
93 | } |
124 | else if (!strcasecmp (buf, "search_items")) |
94 | else if (!strcmp (buf, "search_items")) |
125 | { |
95 | { |
126 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
96 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
127 | { |
97 | { |
128 | settings.search_items = TRUE; |
98 | settings.search_items = TRUE; |
129 | } |
99 | } |
130 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
100 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
131 | { |
101 | { |
132 | settings.search_items = FALSE; |
102 | settings.search_items = FALSE; |
133 | } |
103 | } |
134 | else |
104 | else |
135 | { |
105 | { |
136 | LOG (llevError, "load_settings: Unknown value for search_items" ": %s\n", cp); |
106 | LOG (llevError, "load_settings: Unknown value for search_items" ": %s\n", cp); |
137 | } |
107 | } |
138 | } |
108 | } |
139 | else if (!strcasecmp (buf, "spell_encumbrance")) |
109 | else if (!strcmp (buf, "spell_encumbrance")) |
140 | { |
110 | { |
141 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
111 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
142 | { |
112 | { |
143 | settings.spell_encumbrance = TRUE; |
113 | settings.spell_encumbrance = TRUE; |
144 | } |
114 | } |
145 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
115 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
146 | { |
116 | { |
147 | settings.spell_encumbrance = FALSE; |
117 | settings.spell_encumbrance = FALSE; |
148 | } |
118 | } |
149 | else |
119 | else |
150 | { |
120 | { |
151 | LOG (llevError, "load_settings: Unknown value for " "spell_encumbrance: %s\n", cp); |
121 | LOG (llevError, "load_settings: Unknown value for " "spell_encumbrance: %s\n", cp); |
152 | } |
122 | } |
153 | } |
123 | } |
154 | else if (!strcasecmp (buf, "spell_failure_effects")) |
124 | else if (!strcmp (buf, "spell_failure_effects")) |
155 | { |
125 | { |
156 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
126 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
157 | { |
127 | { |
158 | settings.spell_failure_effects = TRUE; |
128 | settings.spell_failure_effects = TRUE; |
159 | } |
129 | } |
160 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
130 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
161 | { |
131 | { |
162 | settings.spell_failure_effects = FALSE; |
132 | settings.spell_failure_effects = FALSE; |
163 | } |
133 | } |
164 | else |
134 | else |
165 | { |
135 | { |
166 | LOG (llevError, "load_settings: Unknown value for " "spell_failure_effects: %s\n", cp); |
136 | LOG (llevError, "load_settings: Unknown value for " "spell_failure_effects: %s\n", cp); |
167 | } |
137 | } |
168 | } |
138 | } |
169 | else if (!strcasecmp (buf, "spellpoint_level_depend")) |
139 | else if (!strcmp (buf, "spellpoint_level_depend")) |
170 | { |
140 | { |
171 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
141 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
172 | { |
142 | { |
173 | settings.spellpoint_level_depend = TRUE; |
143 | settings.spellpoint_level_depend = TRUE; |
174 | } |
144 | } |
175 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
145 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
176 | { |
146 | { |
177 | settings.spellpoint_level_depend = FALSE; |
147 | settings.spellpoint_level_depend = FALSE; |
178 | } |
148 | } |
179 | else |
149 | else |
180 | { |
150 | { |
181 | LOG (llevError, "load_settings: Unknown value for " "spellpoint_level_depend: %s\n", cp); |
151 | LOG (llevError, "load_settings: Unknown value for " "spellpoint_level_depend: %s\n", cp); |
182 | } |
152 | } |
183 | } |
153 | } |
184 | else if (!strcasecmp (buf, "stat_loss_on_death")) |
154 | else if (!strcmp (buf, "stat_loss_on_death")) |
185 | { |
155 | { |
186 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
156 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
187 | { |
157 | { |
188 | settings.stat_loss_on_death = TRUE; |
158 | settings.stat_loss_on_death = TRUE; |
189 | } |
159 | } |
190 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
160 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
191 | { |
161 | { |
192 | settings.stat_loss_on_death = FALSE; |
162 | settings.stat_loss_on_death = FALSE; |
193 | } |
163 | } |
194 | else |
164 | else |
195 | { |
165 | { |
196 | LOG (llevError, "load_settings: Unknown value for " "stat_loss_on_death: %s\n", cp); |
166 | LOG (llevError, "load_settings: Unknown value for " "stat_loss_on_death: %s\n", cp); |
197 | } |
167 | } |
198 | } |
168 | } |
199 | else if (!strcasecmp (buf, "use_permanent_experience")) |
169 | else if (!strcmp (buf, "use_permanent_experience")) |
200 | { |
170 | { |
201 | LOG (llevError, "use_permanent_experience is deprecated, use" "permenent_experience_percentage instead\n"); |
171 | LOG (llevError, "use_permanent_experience is deprecated, use" "permenent_experience_percentage instead\n"); |
202 | } |
172 | } |
203 | else if (!strcasecmp (buf, "permanent_experience_percentage")) |
173 | else if (!strcmp (buf, "permanent_experience_percentage")) |
204 | { |
174 | { |
205 | int val = atoi (cp); |
175 | int val = atoi (cp); |
206 | |
176 | |
207 | if (val < 0 || val > 100) |
177 | if (val < 0 || val > 100) |
208 | LOG (llevError, "load_settings: permenent_experience_percentage" "must be between 0 and 100, %d is invalid\n", val); |
178 | LOG (llevError, "load_settings: permenent_experience_percentage" "must be between 0 and 100, %d is invalid\n", val); |
209 | else |
179 | else |
210 | settings.permanent_exp_ratio = val; |
180 | settings.permanent_exp_ratio = val; |
211 | } |
181 | } |
212 | else if (!strcasecmp (buf, "death_penalty_percentage")) |
182 | else if (!strcmp (buf, "death_penalty_percentage")) |
213 | { |
183 | { |
214 | int val = atoi (cp); |
184 | int val = atoi (cp); |
215 | |
185 | |
216 | if (val < 0 || val > 100) |
186 | if (val < 0 || val > 100) |
217 | LOG (llevError, "load_settings: death_penalty_percentage" "must be between 0 and 100, %d is invalid\n", val); |
187 | LOG (llevError, "load_settings: death_penalty_percentage" "must be between 0 and 100, %d is invalid\n", val); |
218 | else |
188 | else |
219 | settings.death_penalty_ratio = val; |
189 | settings.death_penalty_ratio = val; |
220 | } |
190 | } |
221 | else if (!strcasecmp (buf, "death_penalty_levels")) |
191 | else if (!strcmp (buf, "death_penalty_levels")) |
222 | { |
192 | { |
223 | int val = atoi (cp); |
193 | int val = atoi (cp); |
224 | |
194 | |
225 | if (val < 0 || val > 255) |
195 | if (val < 0 || val > 255) |
226 | LOG (llevError, "load_settings: death_penalty_levels" "can not be negative, %d is invalid\n", val); |
196 | LOG (llevError, "load_settings: death_penalty_levels" "can not be negative, %d is invalid\n", val); |
227 | else |
197 | else |
228 | settings.death_penalty_level = val; |
198 | settings.death_penalty_level = val; |
229 | } |
199 | } |
230 | else if (!strcasecmp (buf, "balanced_stat_loss")) |
200 | else if (!strcmp (buf, "balanced_stat_loss")) |
231 | { |
201 | { |
232 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
202 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
233 | { |
203 | { |
234 | settings.balanced_stat_loss = TRUE; |
204 | settings.balanced_stat_loss = TRUE; |
235 | } |
205 | } |
236 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
206 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
237 | { |
207 | { |
238 | settings.balanced_stat_loss = FALSE; |
208 | settings.balanced_stat_loss = FALSE; |
239 | } |
209 | } |
240 | else |
210 | else |
241 | { |
211 | { |
242 | LOG (llevError, "load_settings: Unknown value for " "balanced_stat_loss: %s\n", cp); |
212 | LOG (llevError, "load_settings: Unknown value for " "balanced_stat_loss: %s\n", cp); |
243 | } |
213 | } |
244 | } |
214 | } |
245 | else if (!strcasecmp (buf, "simple_exp")) |
215 | else if (!strcmp (buf, "simple_exp")) |
246 | { |
216 | { |
247 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
217 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
248 | { |
218 | { |
249 | settings.simple_exp = TRUE; |
219 | settings.simple_exp = TRUE; |
250 | } |
220 | } |
251 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
221 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
252 | { |
222 | { |
253 | settings.simple_exp = FALSE; |
223 | settings.simple_exp = FALSE; |
254 | } |
224 | } |
255 | else |
225 | else |
256 | { |
226 | { |
257 | LOG (llevError, "load_settings: Unknown value for simple_exp: %s\n", cp); |
227 | LOG (llevError, "load_settings: Unknown value for simple_exp: %s\n", cp); |
258 | } |
228 | } |
259 | } |
229 | } |
260 | else if (!strcasecmp (buf, "item_power_factor")) |
230 | else if (!strcmp (buf, "item_power_factor")) |
261 | { |
231 | { |
262 | float tmp = atof (cp); |
232 | float tmp = atof (cp); |
263 | |
233 | |
264 | if (tmp < 0) |
234 | if (tmp < 0) |
265 | LOG (llevError, "load_settings: item_power_factor must be a positive number (%f < 0)\n", tmp); |
235 | LOG (llevError, "load_settings: item_power_factor must be a positive number (%f < 0)\n", tmp); |
266 | else |
236 | else |
267 | settings.item_power_factor = tmp; |
237 | settings.item_power_factor = tmp; |
268 | } |
238 | } |
269 | else if (!strcasecmp (buf, "pk_luck_penalty")) |
239 | else if (!strcmp (buf, "pk_luck_penalty")) |
270 | { |
240 | { |
271 | sint16 val = atoi (cp); |
241 | sint16 val = atoi (cp); |
272 | |
242 | |
273 | if (val < -100 || val > 100) |
243 | if (val < -100 || val > 100) |
274 | LOG (llevError, "load_settings: pk_luck_penalty must be between -100 and 100" ", %d is invalid\n", val); |
244 | LOG (llevError, "load_settings: pk_luck_penalty must be between -100 and 100" ", %d is invalid\n", val); |
275 | else |
245 | else |
276 | settings.pk_luck_penalty = val; |
246 | settings.pk_luck_penalty = val; |
277 | } |
247 | } |
278 | else if (!strcasecmp (buf, "set_friendly_fire")) |
248 | else if (!strcmp (buf, "set_friendly_fire")) |
279 | { |
249 | { |
280 | int val = atoi (cp); |
250 | int val = atoi (cp); |
281 | |
251 | |
282 | if (val < 0 || val > 100) |
252 | if (val < 0 || val > 100) |
283 | LOG (llevError, "load_settings: set_friendly_fire must be between 0 an 100" ", %d is invalid\n", val); |
253 | LOG (llevError, "load_settings: set_friendly_fire must be between 0 an 100" ", %d is invalid\n", val); |
284 | else |
254 | else |
285 | settings.set_friendly_fire = val; |
255 | settings.set_friendly_fire = val; |
286 | } |
256 | } |
287 | else if (!strcasecmp (buf, "armor_max_enchant")) |
257 | else if (!strcmp (buf, "armor_max_enchant")) |
288 | { |
258 | { |
289 | int max_e = atoi (cp); |
259 | int max_e = atoi (cp); |
290 | |
260 | |
291 | if (max_e <= 0) |
261 | if (max_e <= 0) |
292 | LOG (llevError, "load_settings: armor_max_enchant is %d\n", max_e); |
262 | LOG (llevError, "load_settings: armor_max_enchant is %d\n", max_e); |
293 | else |
263 | else |
294 | settings.armor_max_enchant = max_e; |
264 | settings.armor_max_enchant = max_e; |
295 | } |
265 | } |
296 | else if (!strcasecmp (buf, "armor_weight_reduction")) |
266 | else if (!strcmp (buf, "armor_weight_reduction")) |
297 | { |
267 | { |
298 | int wr = atoi (cp); |
268 | int wr = atoi (cp); |
299 | |
269 | |
300 | if (wr < 0) |
270 | if (wr < 0) |
301 | LOG (llevError, "load_settings: armor_weight_reduction is %d\n", wr); |
271 | LOG (llevError, "load_settings: armor_weight_reduction is %d\n", wr); |
302 | else |
272 | else |
303 | settings.armor_weight_reduction = wr; |
273 | settings.armor_weight_reduction = wr; |
304 | } |
274 | } |
305 | else if (!strcasecmp (buf, "armor_weight_linear")) |
275 | else if (!strcmp (buf, "armor_weight_linear")) |
306 | { |
276 | { |
307 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
277 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
308 | { |
278 | { |
309 | settings.armor_weight_linear = TRUE; |
279 | settings.armor_weight_linear = TRUE; |
310 | } |
280 | } |
311 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
281 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
312 | { |
282 | { |
313 | settings.armor_weight_linear = FALSE; |
283 | settings.armor_weight_linear = FALSE; |
314 | } |
284 | } |
315 | else |
285 | else |
316 | { |
286 | { |
317 | LOG (llevError, "load_settings: unknown value for armor_weight_linear: %s\n", cp); |
287 | LOG (llevError, "load_settings: unknown value for armor_weight_linear: %s\n", cp); |
318 | } |
288 | } |
319 | |
289 | |
320 | } |
290 | } |
321 | else if (!strcasecmp (buf, "armor_speed_improvement")) |
291 | else if (!strcmp (buf, "armor_speed_improvement")) |
322 | { |
292 | { |
323 | int wr = atoi (cp); |
293 | int wr = atoi (cp); |
324 | |
294 | |
325 | if (wr < 0) |
295 | if (wr < 0) |
326 | LOG (llevError, "load_settings: armor_speed_improvement is %d\n", wr); |
296 | LOG (llevError, "load_settings: armor_speed_improvement is %d\n", wr); |
327 | else |
297 | else |
328 | settings.armor_speed_improvement = wr; |
298 | settings.armor_speed_improvement = wr; |
329 | } |
299 | } |
330 | else if (!strcasecmp (buf, "armor_speed_linear")) |
300 | else if (!strcmp (buf, "armor_speed_linear")) |
331 | { |
301 | { |
332 | if (!strcasecmp (cp, "on") || !strcasecmp (cp, "true")) |
302 | if (!strcmp (cp, "on") || !strcmp (cp, "true")) |
333 | { |
303 | { |
334 | settings.armor_speed_linear = TRUE; |
304 | settings.armor_speed_linear = TRUE; |
335 | } |
305 | } |
336 | else if (!strcasecmp (cp, "off") || !strcasecmp (cp, "false")) |
306 | else if (!strcmp (cp, "off") || !strcmp (cp, "false")) |
337 | { |
307 | { |
338 | settings.armor_speed_linear = FALSE; |
308 | settings.armor_speed_linear = FALSE; |
339 | } |
309 | } |
340 | else |
310 | else |
341 | { |
311 | { |
342 | LOG (llevError, "load_settings: unknown value for armor_speed_linear: %s\n", cp); |
312 | LOG (llevError, "load_settings: unknown value for armor_speed_linear: %s\n", cp); |
343 | } |
313 | } |
344 | |
314 | |
345 | } |
315 | } |
346 | else |
316 | else |
347 | LOG (llevError, "Unknown value in settings file: %s\n", buf); |
317 | thawer.parse_error ("settings file"); |
|
|
318 | |
|
|
319 | thawer.next (); |
348 | } |
320 | } |
349 | |
|
|
350 | close_and_delete (fp, comp); |
|
|
351 | } |
321 | } |
352 | |
322 | |
353 | /* |
323 | /* |
354 | * init() is called only once, when starting the program. |
324 | * init() is called only once, when starting the program. |
355 | */ |
325 | */ |
… | |
… | |
359 | init_done = 0; /* Must be done before init_signal() */ |
329 | init_done = 0; /* Must be done before init_signal() */ |
360 | |
330 | |
361 | init_environ (); |
331 | init_environ (); |
362 | cfperl_init (); |
332 | cfperl_init (); |
363 | init_done = 1; |
333 | init_done = 1; |
364 | } |
|
|
365 | |
|
|
366 | void |
|
|
367 | usage () |
|
|
368 | { |
|
|
369 | fprintf (stderr, "Usage: deliantra-server [-h] [-<flags>]...\n"); |
|
|
370 | } |
|
|
371 | |
|
|
372 | void |
|
|
373 | help () |
|
|
374 | { |
|
|
375 | |
|
|
376 | /* The information in usage is redundant with what is given below, so why call it? */ |
|
|
377 | |
|
|
378 | /* usage();*/ |
|
|
379 | printf ("Flags:\n"); |
|
|
380 | printf (" -csport <port> Specifies the port to use for the new client/server code.\n"); |
|
|
381 | printf (" -d Turns on some debugging.\n"); |
|
|
382 | printf (" +d Turns off debugging (useful if server compiled with debugging\n"); |
|
|
383 | printf (" as default).\n"); |
|
|
384 | printf (" -detach The server will go in the background, closing all\n"); |
|
|
385 | printf (" connections to the tty.\n"); |
|
|
386 | printf (" -h Display this information.\n"); |
|
|
387 | printf (" -log <file> Specifies which file to send output to.\n"); |
|
|
388 | printf (" Only has meaning if -detach is specified.\n"); |
|
|
389 | printf (" -mon Turns on monster debugging.\n"); |
|
|
390 | printf (" -o Prints out info on what was defined at compile time.\n"); |
|
|
391 | printf (" -s Display the high-score list.\n"); |
|
|
392 | printf (" -score <name or class> Displays all high scores with matching name/class.\n"); |
|
|
393 | printf (" -v Print version and contributors.\n"); |
|
|
394 | printf (" -data Sets the lib dir (archetypes, treasures, etc.)\n"); |
|
|
395 | printf (" -local Read/write local data (hiscore, unique items, etc.)\n"); |
|
|
396 | printf (" -maps Sets the directory for maps.\n"); |
|
|
397 | printf (" -arch Sets the archetype file to use.\n"); |
|
|
398 | printf (" -regions Sets the regions file to use.\n"); |
|
|
399 | printf (" -playerdir Sets the directory for the player files.\n"); |
|
|
400 | printf (" -templatedir Sets the directory for template generate maps.\n"); |
|
|
401 | printf (" -treasures Sets the treasures file to use.\n"); |
|
|
402 | printf (" -uniquedir Sets the unique items/maps directory.\n"); |
|
|
403 | printf (" -tmpdir Sets the directory for temporary files (mostly maps.)\n"); |
|
|
404 | printf (" -m Lists out suggested experience for all monsters.\n"); |
|
|
405 | printf (" -m2 Dumps out abilities.\n"); |
|
|
406 | printf (" -m3 Dumps out artifact information.\n"); |
|
|
407 | printf (" -m4 Dumps out spell information.\n"); |
|
|
408 | printf (" -m5 Dumps out skill information.\n"); |
|
|
409 | printf (" -m6 Dumps out race information.\n"); |
|
|
410 | printf (" -m7 Dumps out alchemy information.\n"); |
|
|
411 | printf (" -m8 Dumps out gods information.\n"); |
|
|
412 | printf (" -m9 Dumps out more alchemy information (formula checking).\n"); |
|
|
413 | printf (" -mt <name> Dumps out list of treasures for a monster.\n"); |
|
|
414 | exit (0); |
|
|
415 | } |
334 | } |
416 | |
335 | |
417 | /* Signal handlers: */ |
336 | /* Signal handlers: */ |
418 | |
337 | |
419 | static void |
338 | static void |
… | |
… | |
622 | |
541 | |
623 | mon->race = race; |
542 | mon->race = race; |
624 | } |
543 | } |
625 | |
544 | |
626 | /* if the arch is a monster, add it to the race list */ |
545 | /* if the arch is a monster, add it to the race list */ |
627 | if (set_list && QUERY_FLAG (mon, FLAG_MONSTER)) |
546 | if (set_list && mon->flag [FLAG_MONSTER]) |
628 | add_to_racelist (race, mon); |
547 | add_to_racelist (race, mon); |
629 | } |
548 | } |
630 | } |
549 | } |
631 | } |
550 | } |
632 | |
551 | |