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.9 by root, Sun Sep 10 15:59:57 2006 UTC vs.
Revision 1.10 by root, Mon Sep 11 01:49:03 2006 UTC

1
2/*
3 * static char *rcsid_init_c =
4 * "$Id: init.C,v 1.9 2006/09/10 15:59:57 root Exp $";
5 */
6
7/* 1/*
8 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
9 3
10 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
11 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
1196 init_readable (); /* inits useful arrays for readable texts */ 1190 init_readable (); /* inits useful arrays for readable texts */
1197 init_formulae (); /* If not called before, reads formulae from file */ 1191 init_formulae (); /* If not called before, reads formulae from file */
1198 1192
1199 switch (settings.dumpvalues) 1193 switch (settings.dumpvalues)
1200 { 1194 {
1201 case 1: 1195 case 1:
1202 print_monsters (); 1196 print_monsters ();
1203 exit (0); 1197 exit (0);
1204 case 2: 1198 case 2:
1205 dump_abilities (); 1199 dump_abilities ();
1206 exit (0); 1200 exit (0);
1207 case 3: 1201 case 3:
1208 dump_artifacts (); 1202 dump_artifacts ();
1209 exit (0); 1203 exit (0);
1210 case 4: 1204 case 4:
1211 dump_spells (); 1205 dump_spells ();
1212 exit (0); 1206 exit (0);
1213 case 5: 1207 case 5:
1214 exit (0); 1208 exit (0);
1215 case 6: 1209 case 6:
1216 dump_races (); 1210 dump_races ();
1217 exit (0); 1211 exit (0);
1218 case 7: 1212 case 7:
1219 dump_alchemy (); 1213 dump_alchemy ();
1220 exit (0); 1214 exit (0);
1221 case 9: 1215 case 9:
1222 dump_alchemy_costs (); 1216 dump_alchemy_costs ();
1223 exit (0); 1217 exit (0);
1224 case 10: 1218 case 10:
1225 dump_monster_treasure (settings.dumparg); 1219 dump_monster_treasure (settings.dumparg);
1226 exit (0); 1220 exit (0);
1227 } 1221 }
1228} 1222}
1229 1223
1230void 1224void
1231init_startup (void) 1225init_startup (void)
1418 static int init_done = 0; 1412 static int init_done = 0;
1419 1413
1420 if (init_done) 1414 if (init_done)
1421 return; 1415 return;
1422 init_done = 1; 1416 init_done = 1;
1423 first_race = NULL; 1417 first_race = 0;
1424 1418
1425 sprintf (fname, "%s/races", settings.datadir); 1419 sprintf (fname, "%s/races", settings.datadir);
1426 LOG (llevDebug, "Reading races from %s...", fname); 1420 LOG (llevDebug, "Reading races from %s...", fname);
1427 if (!(file = fopen (fname, "r"))) 1421 if (!(file = fopen (fname, "r")))
1428 { 1422 {
1434 { 1428 {
1435 int set_race = 1, set_list = 1; 1429 int set_race = 1, set_list = 1;
1436 1430
1437 if (*buf == '#') 1431 if (*buf == '#')
1438 continue; 1432 continue;
1433
1439 if ((cp = strchr (buf, '\n')) != NULL) 1434 if ((cp = strchr (buf, '\n')) != NULL)
1440 *cp = '\0'; 1435 *cp = '\0';
1436
1441 cp = buf; 1437 cp = buf;
1442 while (*cp == ' ' || *cp == '!' || *cp == '@') 1438 while (*cp == ' ' || *cp == '!' || *cp == '@')
1443 { 1439 {
1444 if (*cp == '!') 1440 if (*cp == '!')
1445 set_race = 0; 1441 set_race = 0;
1446 if (*cp == '@') 1442 if (*cp == '@')
1447 set_list = 0; 1443 set_list = 0;
1448 cp++; 1444 cp++;
1449 } 1445 }
1446
1450 if (sscanf (cp, "RACE %s", variable)) 1447 if (sscanf (cp, "RACE %s", variable))
1451 { /* set new race value */ 1448 { /* set new race value */
1452 strcpy (race, variable); 1449 strcpy (race, variable);
1453 } 1450 }
1454 else 1451 else
1466 break; 1463 break;
1467 } 1464 }
1468 1465
1469 if (cp[strlen (cp) - 1] == '\n') 1466 if (cp[strlen (cp) - 1] == '\n')
1470 cp[strlen (cp) - 1] = '\0'; 1467 cp[strlen (cp) - 1] = '\0';
1468
1471 /* set creature race to race value */ 1469 /* set creature race to race value */
1472 if ((mon = find_archetype (cp)) == NULL) 1470 if ((mon = find_archetype (cp)) == NULL)
1473 LOG (llevError, "\nCreature %s in race file lacks archetype", cp); 1471 LOG (llevError, "\nCreature %s in race file lacks archetype", cp);
1474 else 1472 else
1475 { 1473 {
1476 if (set_race && (!mon->clone.race || strcmp (mon->clone.race, race))) 1474 if (set_race && (!mon->clone.race || strcmp (mon->clone.race, race)))
1477 { 1475 {
1478 if (mon->clone.race) 1476 if (mon->clone.race)
1479 {
1480 LOG (llevDebug, "\n Resetting race to %s from %s for archetype %s", race, &mon->clone.race, &mon->name); 1477 LOG (llevDebug, "\n Resetting race to %s from %s for archetype %s", race, &mon->clone.race, &mon->name);
1481 } 1478
1482 mon->clone.race = race; 1479 mon->clone.race = race;
1483 } 1480 }
1481
1484 /* if the arch is a monster, add it to the race list */ 1482 /* if the arch is a monster, add it to the race list */
1485 if (set_list && QUERY_FLAG (&mon->clone, FLAG_MONSTER)) 1483 if (set_list && QUERY_FLAG (&mon->clone, FLAG_MONSTER))
1486 add_to_racelist (race, &mon->clone); 1484 add_to_racelist (race, &mon->clone);
1487 } 1485 }
1488 } 1486 }
1489 } 1487 }
1488
1490 fclose (file); 1489 fclose (file);
1491 LOG (llevDebug, "done.\n"); 1490 LOG (llevDebug, "done.\n");
1492} 1491}
1493 1492
1494void 1493void
1497 racelink *list; 1496 racelink *list;
1498 objectlink *tmp; 1497 objectlink *tmp;
1499 1498
1500 for (list = first_race; list; list = list->next) 1499 for (list = first_race; list; list = list->next)
1501 { 1500 {
1502 fprintf (stderr, "\nRACE %s:\t", list->name); 1501 fprintf (stderr, "\nRACE %s:\t", &list->name);
1503 for (tmp = list->member; tmp; tmp = tmp->next) 1502 for (tmp = list->member; tmp; tmp = tmp->next)
1504 fprintf (stderr, "%s(%d), ", &tmp->ob->arch->name, tmp->ob->level); 1503 fprintf (stderr, "%s(%d), ", &tmp->ob->arch->name, tmp->ob->level);
1505 } 1504 }
1505
1506 fprintf (stderr, "\n"); 1506 fprintf (stderr, "\n");
1507} 1507}
1508 1508
1509void 1509void
1510add_to_racelist (const char *race_name, object *op) 1510add_to_racelist (const char *race_name, object *op)
1511{ 1511{
1512 racelink *race; 1512 racelink *race;
1513 1513
1514 if (!op || !race_name) 1514 if (!op || !race_name)
1515 return; 1515 return;
1516
1516 race = find_racelink (race_name); 1517 race = find_racelink (race_name);
1517 1518
1518 if (!race) 1519 if (!race)
1519 { /* add in a new race list */ 1520 { /* add in a new race list */
1520 race = get_racelist (); 1521 race = get_racelist ();
1528 objectlink *tmp = get_objectlink (); 1529 objectlink *tmp = get_objectlink ();
1529 1530
1530 tmp->next = race->member; 1531 tmp->next = race->member;
1531 race->member = tmp; 1532 race->member = tmp;
1532 } 1533 }
1534
1533 race->nrof++; 1535 race->nrof++;
1534 race->member->ob = op; 1536 race->member->ob = op;
1535} 1537}
1536 1538
1537racelink * 1539racelink *
1538get_racelist () 1540get_racelist ()
1539{ 1541{
1540 racelink *list; 1542 racelink *list = new racelink;
1541 1543
1542 list = (racelink *) malloc (sizeof (racelink));
1543 list->name = NULL; 1544 list->name = 0;
1544 list->nrof = 0; 1545 list->nrof = 0;
1546 list->next = 0;
1545 list->member = get_objectlink (); 1547 list->member = get_objectlink ();
1546 list->next = NULL;
1547 1548
1548 return list; 1549 return list;
1549} 1550}
1550 1551
1551racelink * 1552racelink *
1552find_racelink (const char *name) 1553find_racelink (const char *name)
1553{ 1554{
1554 racelink *test = NULL; 1555 if (name)
1555 1556 for (racelink *link = first_race; link; link = link->next)
1556 if (name && first_race)
1557 for (test = first_race; test && test != test->next; test = test->next)
1558 if (!test->name || !strcmp (name, test->name)) 1557 if (!link->name || !strcmp (name, link->name))
1559 break; 1558 return link;
1560 1559
1561 return test; 1560 return 0;
1562} 1561}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines