I came across one of the warfare code pieces on the archives and tried to install it tonight. I managed to go from about 2 pages of errors down to half a screen. I just can't get the rest of these errors. I've been at this for the better part of the day. Any insight or help would be greatly appreciated.
Thanks,
Mo
--
// Compiler errors:
//
gcc -Wall -O -ggdb -DNOCRYPT -DQMFIXES -c -o obj/war.o war.c
war.c: In function `auto_war':
war.c:229: warning: assignment from incompatible pointer type
war.c:191: warning: `ch' might be used uninitialized in this function
war.c: In function `do_war':
war.c:468: parse error before `abort_race_war'
war.c:477: `vict' undeclared (first use in this function)
war.c:477: (Each undeclared identifier is reported only once
war.c:477: for each function it appears in.)
war.c:484: warning: `return' with a value, in function returning void
war.c:489: warning: `return' with a value, in function returning void
war.c: In function `abort_class_war':
war.c:505: warning: implicit declaration of function `is_same_class'
war.c: In function `war_wait':
war.c:543: warning: `ch' might be used uninitialized in this function
war.c: In function `war_update':
war.c:624: warning: `ch' might be used uninitialized in this function
war.c: In function `check_war':
war.c:674: warning: `wch' might be used uninitialized in this function
war.c: In function `war_talk':
war.c:846: parse error at end of input
make: *** [obj/war.o] Error 1
// war.c
//
1:/**************************************************************************
2:* Devil's Lament MUD is copyright (c) 1999-2001 by Ryan Jennings *
3:* Telnet : <spaceservices.net:3778> *
4:* E-Mail : <markanth#spaceservices,net> *
5:* Website: <
http://spaceservices.net/~markanth/> *
6:***************************************************************************/
7:
8:
9:#if defined(macintosh)
10:#include <types.h>
11:#include <time.h>
12:#else
13:#include <sys/types.h>
14:#include <sys/time.h>
15:#endif
16:
17:#include <dirent.h>
18:#include <ctype.h>
19:#include <sys/stat.h>
20:#include <sys/resource.h>
21:#include <time.h>
22:#include <stdio.h>
23:#include <string.h>
24:#include <stdlib.h>
25:#include <unistd.h>
26:
27:#include "merc.h"
28:#include "interp.h"
29:#include "recycle.h"
30:#include "tables.h"
31:#include "lookup.h"
32:#include "db.h"
33:#include "magic.h"
34:
35:// #include <ctype.h>
36:// #include <stdio.h>
37:// #include <stdlib.h>
38:// #include <string.h>
39:// #include "merc.h"
40:
41:char *wartype_name(int type)
42:{
43: switch (type)
44: {
45: case 1:
46: return "Race";
47: case 2:
48: return "Class";
49: case 3:
50: return "Genocide";
51: case 4:
52: return "Clan";
53: default:
54: return "Unknown";
55: }
56:}
57:
58:bool start_war(CHAR_DATA * ch, char *argument)
59:{
60: char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
61: char arg3[MAX_INPUT_LENGTH];
62: char buf[MAX_STRING_LENGTH];
63: CHAR_DATA *wch, *warmaster = NULL;
64: int blevel, elevel, type;
65:
66: for (warmaster = ch->in_room->people; warmaster != NULL;
67: warmaster = warmaster->next_in_room)
68: {
69: if (!IS_NPC(warmaster))
70: continue;
71: if (warmaster->spec_fun == spec_lookup("spec_warmaster"))
72: break;
73: }
74:
75: if (!IS_IMMORTAL(ch) &&
76: (warmaster == NULL ||
77: warmaster->spec_fun != spec_lookup("spec_warmaster")))
78: {
79: send_to_char("You can't do that here.\n\r", ch);
80: return FALSE;
81: }
82:
83: if (!IS_IMMORTAL(ch) && warmaster->fighting != NULL)
84: {
85: send_to_char("Wait until the fighting stops.\n\r", ch);
86: return FALSE;
87: }
88:
89: argument = one_argument(argument, arg1);
90: argument = one_argument(argument, arg2);
91: argument = one_argument(argument, arg3);
92:
93: if (IS_NULLSTR(arg1) || IS_NULLSTR(arg2) || IS_NULLSTR(arg3))
94: {
95: send_to_char("Syntax: war start <min_level> <max_level> <type>\n\r"
96: "where <type> is either:\n\r"
97: "1 - race war,\n\r2 - class war,\n\r3 - genocide war,\n\r4 clan war\n\r",
98: ch);
99: return FALSE;
100: }
101:
102: blevel = atoi(arg1);
103: elevel = atoi(arg2);
104: type = atoi(arg3);
105:
106: if (blevel <= 0 || blevel > MAX_LEVEL)
107: {
108: sprintf(buf, "Level must be between 1 and %d.\n\r", MAX_LEVEL);
109: send_to_char(buf, ch);
110: return FALSE;
111: }
112:
113: if (blevel <= 0 || elevel > MAX_LEVEL)
114: {
115: sprintf(buf, "Level must be between 1 and %d.\n\r", MAX_LEVEL);
116: send_to_char(buf, ch);
117: return FALSE;
118: }
119:
120: if (elevel < blevel)
121: {
122: send_to_char("Max level must be greater than the min level.\n\r", ch);
123: return FALSE;
124: }
125:
126: if (elevel - blevel < 5)
127: {
128: send_to_char("Levels must have a difference of at least 5.\n\r", ch);
129: return FALSE;
130: }
131:
132: if (type < 1 || type > 4)
133: {
134: send_to_char
135: ("The type either has to be 1 (race), 2 (class), 3 (genocide) or 4 (clan).\n\r",
136: ch);
137: return FALSE;
138: }
139:
140: if (war_info.iswar != WAR_OFF)
141: {
142: send_to_char("There is already a war going!\n\r", ch);
143: return FALSE;
144: }
145:
146: if (!IS_IMMORTAL(ch))
147: {
148: int cost = 5000;
149:
150: if (ch->gold < cost)
151: {
152: sprintf(buf,
153: "$N tells you 'It costs %d gold coins to start a %s war.'", cost,
154: wartype_name(type));
155: act(buf, ch, NULL, warmaster, TO_CHAR);
156: return FALSE;
157: }
158: else
159: {
160: sprintf(buf,
161: "$N tells you 'Thank you $n, %s war started, you are %d gold coins lighter.'",
162: wartype_name(type), cost);
163: act(buf, ch, NULL, warmaster, TO_CHAR);
164: ch->gold -= cost;
165: }
166: }
167:
168: war_info.iswar = WAR_WAITING;
169: free_string(war_info.who);
170: war_info.who = str_dup(ch->name);
171: war_info.min_level = blevel;
172: war_info.max_level = elevel;
173: war_info.wartype = type;
174:
175: sprintf(buf, "$n announces a %s war for levels %d to %d. Type 'WAR' to kill or be killed.",
176: wartype_name(war_info.wartype), war_info.min_level, war_info.max_level);
177: war_channel(ch, buf);
178: war_info.timer = 3;
179: war_info.next = 0;
180: for (wch = char_list; wch != NULL; wch = wch->next)
181: {
182: if (!IS_NPC(wch) && IS_SET(wch->act, PLR_WAR))
183: REMOVE_BIT(wch->act, PLR_WAR);
184: }
185: return TRUE;
186:}
187:
188:void auto_war(void)
189:{
190: char buf[MSL];
191: CHAR_DATA *ch, *wch, *wch_last, *warmaster;
192: int maxlvl = 0, minlvl = MAX_LEVEL, middle = 50;
193: int clan = 0, count = 0, lbonus = 0, half = 0;
194:
195: if (war_info.iswar != WAR_OFF)
196: return;
197:
198: for (wch = char_list; wch != NULL; wch = wch->next)
199: {
200: if ((!IS_NPC(wch)) && (!IS_IMMORTAL(wch)))
201: {
202: count++;
203: maxlvl = UMAX(maxlvl, wch->level);
204: minlvl = UMIN(minlvl, wch->level);
205: if (is_clan(wch))
206: {
207: for (wch_last = char_list; wch_last != NULL; wch_last = wch_last->next)
208: {
209: if (!IS_NPC(wch_last) && !IS_IMMORTAL(wch_last) && is_clan(wch_last) &&
210: !is_same_clan(wch, wch_last))
211: clan++;
212: }
213: }
214: }
215: }
216: if (count < 2)
217: {
218: end_war();
219: return;
220: }
221:
222: lbonus = number_range(5, 10);
223: minlvl = UMAX(1, minlvl - lbonus);
224: maxlvl = UMIN(100, maxlvl + lbonus);
225: half = ((maxlvl - minlvl) / 2);
226: middle = URANGE(minlvl, maxlvl - half, maxlvl);
227: minlvl = number_range(minlvl, middle - lbonus);
228: maxlvl = number_range(middle + lbonus, maxlvl);
229: warmaster = get_mob_index(MOB_VNUM_WARMASTER);
230: war_info.iswar = WAR_WAITING;
231: free_string(war_info.who);
232: war_info.who 233: !warmaster ? str_dup("AutoWar (tm)") : str_dup(warmaster->short_descr);
234: war_info.min_level = minlvl;
235: war_info.max_level = maxlvl;
236:
237: if (clan >= 2)
238: war_info.wartype = number_range(1, 4);
239: else
240: war_info.wartype = number_range(1, 3);
241:
242: sprintf(buf,
243: "%s %s war for levels %d to %d%s. Type 'WAR' to kill or be killed.",
244: !warmaster ? "A" : "$n announces a",
245: wartype_name(war_info.wartype), war_info.min_level,
246: war_info.max_level, !warmaster ? " has started" : "");
247: war_channel(ch, buf);
248: war_info.timer = 3;
249: war_info.next = 0;
250: for (wch = char_list; wch != NULL; wch = wch->next)
251: {
252: if (!IS_NPC(wch) && IS_SET(wch->act, PLR_WAR))
253: REMOVE_BIT(wch->act, PLR_WAR);
254: }
255:}
256:
257:void end_war(void)
258:{
259: CHAR_DATA *wch;
260:
261: free_string(war_info.who);
262: war_info.who = str_dup("");
263: war_info.wartype = 0;
264: war_info.min_level = 0;
265: war_info.max_level = 0;
266: war_info.iswar = WAR_OFF;
267: war_info.inwar = 0;
268: war_info.timer = 0;
269: war_info.next = number_range(30, 60);
270: for (wch = char_list; wch != NULL; wch = wch->next)
271: {
272: if (!IS_NPC(wch) && IS_SET(wch->act, PLR_WAR))
273: {
274: stop_fighting(wch, TRUE);
275: REMOVE_BIT(wch->act, PLR_WAR);
276: if (IS_SET(wch->in_room->room_flags, ROOM_ARENA) ||
277: wch->in_room->vnum == ROOM_VNUM_WAITROOM)
278: {
279: char_from_room(wch);
280: char_to_room(wch, get_room_index(ROOM_VNUM_TEMPLE));
281: }
282: wch->hit = wch->max_hit;
283: wch->mana = wch->max_mana;
284: wch->move = wch->max_move;
285: update_pos(wch);
286: do_look(wch, "auto");
287: }
288: }
289:}
290:
291:void do_war(CHAR_DATA *ch, char *argument)
292:{
293: char arg[MAX_INPUT_LENGTH];
294: char buf[MAX_STRING_LENGTH];
295: ROOM_INDEX_DATA *location;
296: int i = 0;
297:
298: if (IS_NPC(ch))
299: {
300: send_to_char("Mobiles not supported yet.\n\r", ch);
301: return;
302: }
303:
304: argument = one_argument(argument, arg);
305:
306: if (arg[0] == '\0')
307: {
308: send_to_char("{gSyntax:{R war {Wstart <minlev> <maxlev> <#type>\n\r", ch);
309: send_to_char(" {Rwar {Wtalk <message>\n\r", ch);
310: send_to_char(" {Rwar {Wstatus\n\r", ch);
311: send_to_char(" {Rwar {Winfo\n\r", ch);
312: send_to_char(" {Rwar {Wjoin{x\n\r", ch);
313: if (IS_IMMORTAL(ch))
314: {
315: send_to_char(" {Rwar {Wend{x\n\r", ch);
316: send_to_char(" {Rwar {Wnext{x\n\r", ch);
317:
318: return;
319: }
320: else if (!str_cmp(arg, "start"))
321: {
322: if (ch->gold < 10000 && !IS_IMMORTAL(ch))
323: {
324: send_to_char("It costs 10000 gold coins to start a war.\n\r", ch);
325: return;
326: }
327: if (start_war(ch, argument) && !IS_IMMORTAL(ch))
328: ch->gold -= 10000;
329: return;
330: }
331:
332: else if (!str_cmp(arg, "talk"))
333: {
334: war_talk(ch, argument);
335: return;
336: }
337: else if (!str_cmp(arg, "next") && IS_IMMORTAL(ch))
338: {
339: if (war_info.iswar == TRUE)
340: {
341: send_to_char("Not while a war is running.\n\r", ch);
342: return;
343: }
344:
345: i = is_number(argument) ? atoi(argument) : number_range(30, 100);
346: war_info.next = i;
347: sprintf(buf, "The next war will start in %d minutes.\n\r",
348: war_info.next);
349: send_to_char(buf, ch);
350: return;
351: }
352:
353: if (war_info.iswar != TRUE)
354: {
355: sprintf(buf,
356: "There is no war going! The next war will start in %d minutes.\n\r",
357: war_info.next);
358: send_to_char(buf, ch);
359: return;
360: }
361:
362: if (!str_cmp(arg, "end") && IS_IMMORTAL(ch))
363: {
364: end_war();
365: sprintf(buf, "You end the war. Next war in %d minutes.\n\r",
366: war_info.next);
367: send_to_char(buf, ch);
368: sprintf(buf,
369: "$n has ended the war. The next autwar will start in %d minutes.",
370: war_info.next);
371: war_channel(ch, buf);
372: return;
373: }
374: else if (!str_cmp(arg, "info"))
375: {
376: send_to_char( "{g[ {WWAR INFO{g ]{x\n\r", ch);
377: sprintf(buf, "{RStarted by : {W%s\n\r",
378: IS_NULLSTR(war_info.who) ? "Unknown" : war_info.who);
379: send_to_char(buf, ch);
380: sprintf(buf, "{RFighting : {W%d player%s.\n\r", war_info.inwar,
381: war_info.inwar == 1 ? "" : "s");
382: send_to_char(buf, ch);
383: sprintf(buf, "{RLevels : {W%d - %d{x\n\r", war_info.min_level,
384: war_info.max_level);
385: send_to_char(buf, ch);
386: sprintf(buf, "{RStatus : {W%s for %d minutes.{x\n\r",
387: war_info.iswar == WAR_WAITING ? "Waiting" : "Running",
388: war_info.timer);
389: send_to_char(buf, ch);
390: sprintf(buf, "{RType : {W%s war.{x\n\r",
391: wartype_name(war_info.wartype));
392: send_to_char(buf, ch);
393: return;
394: }
395: else if (!str_cmp(arg, "check"))
396: {
397: CHAR_DATA *wch;
398: bool found = FALSE;
399:
400: send_to_char("[ {WWAR COMBATENTS{g ]\n\r", ch);
401: for (wch = char_list; wch != NULL; wch = wch->next)
402: {
403: if (!IS_NPC(wch) && IS_SET(wch->act, PLR_WAR))
404: {
405: sprintf(buf,
406: "{W%-12s : [{R%d%% hit{W] [{M%d%% mana{W] [Pos: {GN/A{W]{x\n\r",
407: wch == ch ? "You" : wch->name,
408: wch->hit * 100 / wch->max_hit,
409: wch->mana * 100 / wch->max_mana);
410: send_to_char(buf, ch);
411: found = TRUE;
412: }
413: }
414: if (!found)
415: send_to_char("No one in the war yet.\n\r", ch);
416: return;
417: }
418: else if (!str_cmp(arg, "join"))
419: {
420: if (war_info.iswar == WAR_RUNNING)
421: {
422: send_to_char("The war has allready started, your too late.\n\r", ch);
423: return;
424: }
425:
426: if ((ch->level < war_info.min_level) || (ch->level > war_info.max_level))
427: {
428: sprintf(buf, "Sorry, you may not join this war.\n\r");
429: send_to_char(buf, ch);
430: return;
431: }
432:
433: if (IS_SET(ch->act, PLR_WAR))
434: {
435: send_to_char("You are already in the war.\n\r", ch);
436: return;
437: }
438:
439: if (war_info.wartype == 4 && !is_clan(ch))
440: {
441: send_to_char("You aren't in a clan, you can't jon this war.\n\r", ch);
442: return;
443: }
444:
445: if ((location = get_room_index(ROOM_VNUM_WAITROOM)) == NULL)
446: {
447: send_to_char("Arena is not yet completed, sorry.\n\r", ch);
448: return;
449: }
450: else
451: {
452: act("$n goes to get $s ass whipped in war!", ch, NULL, NULL,TO_ROOM);
453: char_from_room(ch);
454: char_to_room(ch, location);
455: SET_BIT(ch->act, PLR_WAR);
456: sprintf(buf, "%s Level %d joins the war!", ch->name,ch->level);
457: war_channel(ch, buf);
458: act("$n arrives to get $s ass whipped!", ch, NULL, NULL, TO_ROOM);
459: war_info.inwar++;
460: do_look(ch, "auto");
461: }
462: return;
463: }
464: do_war(ch, "");
465: return;
466:}
467:
468:bool abort_race_war(void)
469:{
470: CHAR_DATA *ch;
471: CHAR_DATA *vict;
472:
473: for (ch = char_list; ch != NULL; ch = ch->next)
474: {
475: if (!IS_NPC(ch) && IS_SET(ch->act, PLR_WAR))
476: {
477: for (vict = char_list; vict != NULL; vict = vict->next)
478: {
479: if (!IS_NPC(vict) && IS_SET(vict->act, PLR_WAR))
480: {
481: if (ch->race == vict->race)
482: continue;
483: else
484: return FALSE;
485: }
486: }
487: }
488: }
489: return TRUE;
490:}
491:
492:bool abort_class_war(void)
493:{
494: CHAR_DATA *ch;
495: CHAR_DATA *vict;
496:
497: for (ch = char_list; ch != NULL; ch = ch->next)
498: {
499: if (!IS_NPC(ch) && IS_SET(ch->act, PLR_WAR))
500: {
501: for (vict = char_list; vict != NULL; vict = vict->next)
502: {
503: if (!IS_NPC(vict) && IS_SET(vict->act, PLR_WAR))
504: {
505: if (is_same_class(ch, vict))
506: continue;
507: else
508: return FALSE;
509: }
510: }
511: }
512: }
513: return TRUE;
514:}
515:
516:bool abort_clan_war(void)
517:{
518: CHAR_DATA *ch;
519: CHAR_DATA *vict;
520:
521: for (ch = char_list; ch != NULL; ch = ch->next)
522: {
523: if (!IS_NPC(ch) && IS_SET(ch->act, PLR_WAR) && is_clan(ch))
524: {
525: for (vict = char_list; vict != NULL; vict = vict->next)
526: {
527: if (!IS_NPC(vict) && IS_SET(vict->act, PLR_WAR) && is_clan(vict))
528: {
529: if (is_same_clan(ch, vict))
530: continue;
531: else
532: return FALSE;
533: }
534: }
535: }
536: }
537: return TRUE;
538:}
539:
540:void war_wait(void)
541:{
542: int randm = 0;
543: CHAR_DATA *wch, *ch;
544: char buf[MSL];
545:
546: if (war_info.iswar != WAR_WAITING)
547: return;
548:
549: if (war_info.timer > 0)
550: {
551: sprintf(buf,
552: "%d minute%s left to join the war. (Levels %d - %d, %s War)",
553: war_info.timer, war_info.timer == 1 ? "" : "s",
554: war_info.min_level, war_info.max_level,
555: war_info.wartype == 1 ? "Race" : war_info.wartype =556: 2 ? "Class" : war_info.wartype == 3 ? "Genocide" : "Clan");
557: war_channel(ch, buf);
558: war_info.timer--;
559: return;
560: }
561: else
562: {
563: if (war_info.inwar <= 1)
564: {
565: end_war();
566: sprintf(buf,
567: "Not enough people for war. Next autowar in %d minutes.",
568: war_info.next);
569: war_channel(ch, buf);
570: return;
571: }
572: else if (war_info.wartype == 1 && abort_race_war())
573: {
574: end_war();
575: sprintf(buf,
576: "Not enough races for war. Next autowar in %d minutes.",
577: war_info.next);
578: war_channel(ch, buf);
579: return;
580: }
581: else if (war_info.wartype == 2 && abort_class_war())
582: {
583: end_war();
584: sprintf(buf,
585: "Not enough classes for war. Next autowar in %d minutes.",
586: war_info.next);
587: war_channel(ch, buf);
588: return;
589: }
590: else if (war_info.wartype == 4 && abort_clan_war())
591: {
592: end_war();
593: sprintf(buf,
594: "Not enough clans for war. Next autowar in %d minutes.",
595: war_info.next);
596: war_channel(ch, buf);
597: return;
598: }
599: else
600: {
601: sprintf(buf,
602: "The battle begins! %d players are fighting!",
603: war_info.inwar);
604: war_channel(ch, buf);
605: war_info.timer 606: number_range(3 * war_info.inwar, 5 * war_info.inwar);
607: for (wch = char_list; wch != NULL; wch = wch->next)
608: {
609: if (!IS_NPC(wch) && IS_SET(wch->act, PLR_WAR))
610: {
611: /* replace #### with the begining and end vnums of an arena area */
612: randm = number_range(251, 261);
613: char_from_room(wch);
614: char_to_room(wch, get_room_index(randm));
615: do_look(wch, "auto");
616: }
617: }
618: }
619: }
620:}
621:
622:void war_update(void)
623:{
624: CHAR_DATA *ch;
625: char buf[MSL];
626:
627: if (war_info.next > 0 && war_info.iswar == WAR_OFF)
628: {
629: if (--war_info.next == 0)
630: auto_war();
631: }
632:
633: if (war_info.iswar == WAR_RUNNING)
634: {
635: if (war_info.inwar == 0)
636: {
637: end_war();
638: sprintf(buf,
639: "No one left in the War, next war will start in %d minutes.",
640: war_info.next);
641: war_channel(ch, buf);
642: return;
643: }
644:
645: switch (war_info.timer)
646: {
647: case 0:
648: end_war();
649: sprintf(buf,
650: "Time has run out on the War, next war will start in %d minutes.",
651: war_info.next);
652: war_channel(ch, buf);
653: return;
654: case 1:
655: case 2:
656: case 3:
657: case 4:
658: case 5:
659: case 10:
660: case 15:
661: sprintf(buf, "%d minute%s remaining in the war.",
662: war_info.timer, war_info.timer > 1 ? "s" : "");
663: war_channel(ch, buf);
664: default:
665: war_info.timer--;
666: break;
667: }
668: return;
669: }
670:}
671:
672:void check_war(CHAR_DATA * ch, CHAR_DATA * victim)
673:{
674: CHAR_DATA *wch;
675: char buf[MAX_STRING_LENGTH];
676: int reward = number_range(500, 1500);
677: int qreward = number_range(50, 150);
678:
679: if (IS_NPC(ch) || IS_NPC(victim))
680: return;
681:
682: REMOVE_BIT(victim->act, PLR_WAR);
683: war_info.inwar--;
684: stop_fighting(victim, TRUE);
685: char_from_room(victim);
686: char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
687: victim->hit = UMAX(1, victim->hit);
688: victim->mana = UMAX(1, victim->hit);
689: victim->move = UMAX(1, victim->hit);
690: update_pos(victim);
691: do_look(victim, "auto");
692: send_to_char("\n\r", ch);
693: send_to_char("\n\r", victim);
694: sprintf(buf, "%s was killed in combat by %s!{x",
695: victim->name, ch->name);
696: war_channel(ch, buf);
697: switch (war_info.wartype)
698: {
699: case 1:
700: if (abort_race_war())
701: {
702: sprintf(buf, "The %s have won the War!",
703: pc_race_table[ch->race].name);
704: war_channel(ch, buf);
705: for (wch = char_list; wch != NULL; wch = wch->next)
706: {
707: if (!IS_NPC(wch) && IS_SET(wch->act, PLR_WAR))
708: continue;
709:
710: if (wch->race == ch->race)
711: {
712: wch->gold += reward;
713: wch->questpoints += qreward;
714: sprintf(buf,
715: "You recieve %d gold and %d questpoints from the war tribunal!\n\r",
716: reward, qreward);
717: send_to_char(buf, wch);
718: }
719:
720: }
721: end_war();
722: return;
723: } // end abort
724: break;
725: case 2:
726: if (abort_class_war())
727: {
728: sprintf(buf, "The %s have won the War!{x",
729: class_table[ch->class].name);
730: war_channel(ch, buf);
731: for (wch = char_list; wch != NULL; wch = wch->next)
732: {
733: if (!IS_NPC(wch) && IS_SET(wch->act, PLR_WAR))
734: continue;
735: if (wch->class == ch->class)
736: {
737: wch->gold += reward;
738: wch->questpoints += qreward;
739: sprintf(buf,
740: "You recieve %d gold and %d questpoints from the war tribunal!\n\r",
741: reward, qreward);
742: send_to_char(buf, wch);
743: }
744: }
745: end_war();
746: return;
747: }
748: break;
749: case 4:
750: if (abort_clan_war())
751: {
752: sprintf(buf, "%s has won the War!{x",
753: clan_table[ch->clan].who_name);
754: war_channel(ch, buf);
755: for (wch = char_list; wch != NULL; wch = wch->next)
756: {
757: if (!IS_NPC(wch) && IS_SET(wch->act, PLR_WAR))
758: continue;
759: if (is_same_clan(ch, wch))
760: {
761: wch->gold += reward;
762: wch->questpoints += qreward;
763: sprintf(buf,
764: "You recieve %d gold and %d questpoints from the war tribunal!\n\r",
765: reward, qreward);
766: send_to_char(buf, wch);
767: }
768: }
769: end_war();
770: return;
771: }
772: break;
773: case 3:
774: if (war_info.inwar == 1)
775: {
776: sprintf(buf, "%s has won the War!{x", ch->name);
777: war_channel(ch, buf);
778: ch->gold += reward;
779: ch->questpoints += qreward;
780: sprintf(buf,
781: "You recieve %d gold and %d questpoints from the war tribunal!\n\r",
782: reward, qreward);
783: send_to_char(buf, wch);
784: end_war();
785: return;
786: }
787: break;
788: }
789: return;
790:}
791:
792:bool is_safe_war(CHAR_DATA * ch, CHAR_DATA * wch)
793:{
794: if (war_info.iswar == WAR_OFF)
795: return FALSE;
796:
797: if ((!IS_IN_WAR(ch)) || (!IS_IN_WAR(wch)))
798: return FALSE;
799:
800: if (war_info.wartype == 3)
801: return FALSE;
802:
803: if (war_info.wartype == 1 && ch->race == wch->race)
804: return TRUE;
805:
806: if (war_info.wartype == 2 && ch->class == wch->class)
807: return TRUE;
808:
809: if (war_info.wartype == 4 && is_same_clan(ch, wch))
810: return TRUE;
811:
812: return FALSE;
813:}
814:
815:void war_talk(CHAR_DATA *ch, char *argument)
816:{
817: DESCRIPTOR_DATA *d;
818: char buf[MAX_STRING_LENGTH];
819:
820: if (IS_NULLSTR(argument))
821: {
822: send_to_char
823: ("Wartalk what?\n\r",
824: ch);
825: return;
826: }
827: sprintf(buf, "{Y({RWarTalk{Y) {gYou drum: %s{x\n\r", argument);
828: send_to_char(buf, ch);
829:
830: for (d = descriptor_list; d != NULL; d = d->next)
831: {
832: CHAR_DATA *victim;
833:
834: if( d->connected == CON_PLAYING
835: && ((victim = d->character) != ch)
836: && !IS_SET(victim->comm, COMM_QUIET)
837: && !IS_NPC(ch)
838: && IS_SET(ch->act, PLR_WAR)
839: && IS_SET(ch->in_room->room_flags, ROOM_ARENA) )
840: {
841: sprintf(buf, "{Y({RWarTalk{Y) {g%s drums: %s{w\n\r", ch->name, argument);
842: send_to_char(buf, victim);
843: }
844: return;
845:}
--
ROM mailing list
ROM@rom.org
Unsubscribe here ->>>
http://www.rom.org/cgi-bin/mailman/listinfo/rom