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

Comparing deliantra/server/server/c_misc.C (file contents):
Revision 1.62 by root, Sun Jul 1 05:00:19 2007 UTC vs.
Revision 1.72 by root, Fri Dec 19 22:47:29 2008 UTC

1/* 1/*
2 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. 2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 * 3 *
4 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team 4 * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team 5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992,2007 Frank Tore Johansen 6 * Copyright (©) 1992,2007 Frank Tore Johansen
7 * 7 *
8 * Crossfire TRT is free software: you can redistribute it and/or modify 8 * Deliantra is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or 10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version. 11 * (at your option) any later version.
12 * 12 *
13 * This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
16 * GNU General Public License for more details. 16 * GNU General Public License for more details.
17 * 17 *
18 * You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. 19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 * 20 *
21 * The authors can be reached via e-mail to <crossfire@schmorp.de> 21 * The authors can be reached via e-mail to <support@deliantra.net>
22 */ 22 */
23 23
24#include <global.h> 24#include <global.h>
25#include <loader.h> 25#include <loader.h>
26#include <sproto.h> 26#include <sproto.h>
32{ 32{
33 display_motd (op); 33 display_motd (op);
34 return 1; 34 return 1;
35} 35}
36 36
37#ifdef DEBUG_MALLOC_LEVEL
38int
39command_malloc_verify (object *op, char *parms)
40{
41 extern int malloc_verify (void);
42
43 if (!malloc_verify ())
44 new_draw_info (NDI_UNIQUE, 0, op, "Heap is corrupted.");
45 else
46 new_draw_info (NDI_UNIQUE, 0, op, "Heap checks out OK.");
47 return 1;
48}
49#endif
50
51int
52command_whereabouts (object *op, char *params)
53{
54 //TODO: should obviously not waste space in struct region for this.
55 /*
56 * reset the counter on the region, then use it to store the number of
57 * players there.
58 * I don't know how thread-safe this would be, I suspect not very....
59 */
60 for_all_regions (rgn)
61 rgn->counter = 0;
62
63 for_all_players (pl)
64 if (pl->ob->map)
65 ++pl->ob->region ()->counter;
66
67 /* we only want to print out by places with a 'longname' field... */
68 for_all_regions (rgn)
69 {
70 if (!rgn->longname && rgn->counter > 0)
71 {
72 if (rgn->parent)
73 {
74 rgn->parent->counter += rgn->counter;
75 rgn->counter = 0;
76 }
77 else /*uh oh, we shouldn't be here. */
78 LOG (llevError, "command_whereabouts() Region %s with no longname has no parent", &rgn->name);
79 }
80 }
81
82 new_draw_info_format (NDI_UNIQUE, 0, op, "In the world currently there are:");
83
84 for_all_regions (rgn)
85 if (rgn->counter)
86 new_draw_info_format (NDI_UNIQUE, 0, op, "%u players %s", rgn->counter, &rgn->longname);
87
88 return 1;
89}
90
91typedef struct 37typedef struct
92{ 38{
93 char namebuf[MAX_BUF]; 39 char namebuf[MAX_BUF];
94 int login_order; 40 int login_order;
95} chars_names; 41} chars_names;
96 42
97int 43int
98command_time (object *op, char *params) 44command_time (object *op, char *params)
99{ 45{
100 print_tod (op); 46 print_tod (op);
101 return 1;
102}
103
104int
105command_weather (object *op, char *params)
106{
107#if 0
108 int wx, wy, temp, sky;
109 char buf[MAX_BUF];
110
111 if (settings.dynamiclevel < 1)
112 return 1;
113
114 if (op->map == NULL)
115 return 1;
116
117 if (worldmap_to_weathermap (op->x, op->y, &wx, &wy, op->map) != 0)
118 return 1;
119
120 if (QUERY_FLAG (op, FLAG_WIZ))
121 {
122 /* dump the weather, Dm style! Yo! */
123 new_draw_info_format (NDI_UNIQUE, 0, op, "Real temp: %d", real_world_temperature (op->x, op->y, op->map));
124 new_draw_info_format (NDI_UNIQUE, 0, op, "Base temp: %d", weathermap[wx][wy].temp);
125 new_draw_info_format (NDI_UNIQUE, 0, op, "Humid: %d", weathermap[wx][wy].humid);
126 new_draw_info_format (NDI_UNIQUE, 0, op, "Wind: dir=%d speed=%d", weathermap[wx][wy].winddir, weathermap[wx][wy].windspeed);
127 new_draw_info_format (NDI_UNIQUE, 0, op, "Pressure: %d", weathermap[wx][wy].pressure);
128 new_draw_info_format (NDI_UNIQUE, 0, op, "Avg Elevation: %d", weathermap[wx][wy].avgelev);
129 new_draw_info_format (NDI_UNIQUE, 0, op, "Rainfall: %d Water: %d", weathermap[wx][wy].rainfall, weathermap[wx][wy].water);
130 }
131
132 temp = real_world_temperature (op->x, op->y, op->map);
133 new_draw_info_format (NDI_UNIQUE, 0, op, "It's currently %d degrees " "Centigrade out.", temp);
134
135 /* humid */
136 if (weathermap[wx][wy].humid < 20)
137 new_draw_info (NDI_UNIQUE, 0, op, "It is very dry.");
138 else if (weathermap[wx][wy].humid < 40)
139 new_draw_info (NDI_UNIQUE, 0, op, "It is very comfortable today.");
140 else if (weathermap[wx][wy].humid < 60)
141 new_draw_info (NDI_UNIQUE, 0, op, "It is a bit muggy.");
142 else if (weathermap[wx][wy].humid < 80)
143 new_draw_info (NDI_UNIQUE, 0, op, "It is muggy.");
144 else
145 new_draw_info (NDI_UNIQUE, 0, op, "It is uncomfortably muggy.");
146
147 /* wind */
148 switch (weathermap[wx][wy].winddir)
149 {
150 case 1:
151 sprintf (buf, "north");
152 break;
153 case 2:
154 sprintf (buf, "northeast");
155 break;
156 case 3:
157 sprintf (buf, "east");
158 break;
159 case 4:
160 sprintf (buf, "southeast");
161 break;
162 case 5:
163 sprintf (buf, "south");
164 break;
165 case 6:
166 sprintf (buf, "southwest");
167 break;
168 case 7:
169 sprintf (buf, "west");
170 break;
171 case 8:
172 sprintf (buf, "northwest");
173 break;
174 }
175 if (weathermap[wx][wy].windspeed < 5)
176 new_draw_info_format (NDI_UNIQUE, 0, op, "There is a mild breeze " "coming from the %s.", buf);
177 else if (weathermap[wx][wy].windspeed < 10)
178 new_draw_info_format (NDI_UNIQUE, 0, op, "There is a strong breeze " "coming from the %s.", buf);
179 else if (weathermap[wx][wy].windspeed < 15)
180 new_draw_info_format (NDI_UNIQUE, 0, op, "There is a light wind " "coming from the %s.", buf);
181 else if (weathermap[wx][wy].windspeed < 25)
182 new_draw_info_format (NDI_UNIQUE, 0, op, "There is a strong wind " "coming from the %s.", buf);
183 else if (weathermap[wx][wy].windspeed < 35)
184 new_draw_info_format (NDI_UNIQUE, 0, op, "There is a heavy wind " "coming from the %s.", buf);
185 else
186 new_draw_info_format (NDI_UNIQUE, 0, op, "The wind from the %s is " "incredibly strong!", buf);
187
188 sky = weathermap[wx][wy].sky;
189 if (temp <= 0 && sky > SKY_OVERCAST && sky < SKY_FOG)
190 sky += 10; /*let it snow */
191 switch (sky)
192 {
193 case SKY_CLEAR:
194 new_draw_info (NDI_UNIQUE, 0, op, "There isn''t a cloud in the sky.");
195 break;
196 case SKY_LIGHTCLOUD:
197 new_draw_info (NDI_UNIQUE, 0, op, "There are a few light clouds in the sky.");
198 break;
199 case SKY_OVERCAST:
200 new_draw_info (NDI_UNIQUE, 0, op, "The sky is cloudy and dreary.");
201 break;
202 case SKY_LIGHT_RAIN:
203 new_draw_info (NDI_UNIQUE, 0, op, "It is raining softly.");
204 break;
205 case SKY_RAIN:
206 new_draw_info (NDI_UNIQUE, 0, op, "It is raining.");
207 break;
208 case SKY_HEAVY_RAIN:
209 new_draw_info (NDI_UNIQUE, 0, op, "It is raining heavily.");
210 break;
211 case SKY_HURRICANE:
212 new_draw_info (NDI_UNIQUE, 0, op, "There is a heavy storm! You should go inside!");
213 break;
214 case SKY_FOG:
215 new_draw_info (NDI_UNIQUE, 0, op, "It''s foggy and miserable.");
216 break;
217 case SKY_HAIL:
218 new_draw_info (NDI_UNIQUE, 0, op, "It''s hailing out! Take cover!");
219 break;
220 case SKY_LIGHT_SNOW:
221 new_draw_info (NDI_UNIQUE, 0, op, "Snow is gently falling from the sky.");
222 break;
223 case SKY_SNOW:
224 new_draw_info (NDI_UNIQUE, 0, op, "It''s snowing out.");
225 break;
226 case SKY_HEAVY_SNOW:
227 new_draw_info (NDI_UNIQUE, 0, op, "The snow is falling very heavily now.");
228 break;
229 case SKY_BLIZZARD:
230 new_draw_info (NDI_UNIQUE, 0, op, "A full blown blizzard is in effect. You might want to take cover!");
231 break;
232 }
233#endif
234 return 1;
235}
236
237int
238command_hiscore (object *op, char *params)
239{
240 display_high_score (op, op == NULL ? 9999 : 50, params);
241 return 1; 47 return 1;
242} 48}
243 49
244int 50int
245command_debug (object *op, char *params) 51command_debug (object *op, char *params)
284command_dumpfriendlyobjects (object *op, char *params) 90command_dumpfriendlyobjects (object *op, char *params)
285{ 91{
286 dump_friendly_objects (); 92 dump_friendly_objects ();
287 return 0; 93 return 0;
288} 94}
289
290int
291command_printlos (object *op, char *params)
292{
293 if (op)
294 print_los (op);
295 return 0;
296}
297
298 95
299int 96int
300command_version (object *op, char *params) 97command_version (object *op, char *params)
301{ 98{
302 version (op); 99 version (op);
357} 154}
358 155
359int 156int
360command_fix_me (object *op, char *params) 157command_fix_me (object *op, char *params)
361{ 158{
362 sum_weight (op); 159 op->update_weight ();
363 op->update_stats (); 160 op->update_stats ();
364 new_draw_info (NDI_UNIQUE, 0, op, "Your character was fixed."); 161 new_draw_info (NDI_UNIQUE, 0, op, "Your character was fixed.");
365
366 return 1;
367}
368
369int
370command_logs (object *op, char *params)
371{
372 new_draw_info (NDI_UNIQUE, 0, op, "Nobody is currently logging kills.");
373 162
374 return 1; 163 return 1;
375} 164}
376 165
377int 166int
489 int attack; 278 int attack;
490 object *tmp; 279 object *tmp;
491 280
492 for (tmp = op->inv; tmp != NULL; tmp = tmp->below) 281 for (tmp = op->inv; tmp != NULL; tmp = tmp->below)
493 { 282 {
494 if ((tmp->type == FORCE) && (strcmp (tmp->arch->archname, "dragon_skin_force") == 0)) 283 if ((tmp->type == FORCE) && tmp->arch->archname == shstr_dragon_skin_force)
495 { 284 {
496 new_draw_info (NDI_UNIQUE, 0, op, "\nNatural skin resistances:"); 285 new_draw_info (NDI_UNIQUE, 0, op, "\nNatural skin resistances:");
497 for (attack = 0; attack < NROFATTACKS; attack++) 286 for (attack = 0; attack < NROFATTACKS; attack++)
498 { 287 {
499 if (atnr_is_dragon_enabled (attack)) 288 if (atnr_is_dragon_enabled (attack))

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines