]>
jfr.im git - irc/gameservirc.git/blob - gameserv/gameserv.cpp
11 #if defined(HAVE_CRYPT_H)
15 #elif defined(HAVE_UNISTD_H)
21 List
< aClient
> players
;
22 Monster
* monsters
[ LEVELS
][ MONSTERS
]; // Monsters per level. Total = MONSTERS * LEVELS
24 Monster
* masters
[ LEVELS
]; // A master for each level
32 char * strtok ( char * str
, const char * delim
);
35 int stricmp ( const char * s1
, const char * s2
);
36 int strnicmp ( const char * s1
, const char * s2
, size_t len
);
40 /********** Password functions **********/
42 bool passcmp ( char * encrypted
, char * plaintext
); // Compares an encrypted pass with a plain text one
44 bool check_password ( char * name
, char * plaintext
); // Finds a password for the given name, and checks it with passcmp against the plaintext password given.
46 /********** Password functions **********/
49 /********** GameServ Booleans **********/
51 bool is_playing ( char * u
); // True if the given nickname in the clients list is playing.
52 bool is_playing ( aClient
* user
);
54 bool is_fighting ( char * u
); // True if the given nick in the clients list is fighting anything.
55 bool is_fighting ( aClient
* user
);
57 bool player_fight ( char * u
); // True if the player is fighting another player.
58 bool player_fight ( aClient
* user
);
60 bool master_fight ( char * u
); // True if the player is fighting their master.
61 bool master_fight ( aClient
* user
);
63 /********** GameServ Booleans **********/
65 void display_help ( char * u
, char * file
= NULL
);
66 void display_monster ( char * u
);
67 void display_players ( char * u
);
68 void display_players ( aClient
* user
);
69 long int chartoint ( char ch
);
70 int isstringnum ( char * num
);
71 long int pow ( int x
, int y
);
72 long int stringtoint ( char * number
);
74 char * spaces ( int len
, char * seperator
);
75 void refresh ( Player
* p
);
77 void reset ( Player
* p
);
81 void delete_monsters ();
82 void delete_masters ();
84 void do_admin ( char * u
);
85 void do_attack ( char * u
);
86 void do_bank ( char * u
);
87 void do_fight ( char * u
);
88 void do_heal ( char * u
);
89 void do_help ( char * u
);
90 void do_identify ( char * u
);
91 void do_inventory ( char * u
);
92 void do_refresh ( char * u
);
93 void do_register ( char * u
);
94 void do_list ( char * u
);
95 void do_master ( char * u
);
96 void do_play ( char * u
);
97 void do_quitg ( char * u
);
98 void do_reset ( char * u
);
100 void do_stats ( char * u
);
101 void do_store ( char * u
);
102 void do_tavern ( char * u
);
103 void do_use ( char * u
);
104 void see_master ( char * u
);
106 void showstats ( const char * u
, const char * nick
);
107 void showinventory ( aClient
* from
, aClient
* to
= NULL
);
108 void showBankBalance ( const char * u
);
109 void end_turn ( aClient
* user
);
112 char * weapons
[ WNA
] = { "Fists" , "Stick" , "Dagger" , "Quarterstaff" , "Short Sword" ,
113 "Long Sword" , "Silver Spear" , "Battle Axe" , "The Ragnarok" ,
114 "Chain Saw" , "Poison Sword" , "Flame Sword" , "Earth Hammer" ,
115 "Light Saber" , "Masamune" , "Mystical Sword" };
117 char * armors
[ WNA
] = { "Nothing" , "Clothes" , "Leather Vest" , "Chain Mail" , "Plate Armor" ,
118 "Full Body Armor" , "Magic Mail" , "Graphite Suit" , "Steel Suit" ,
119 "Force Field" , "Armor of Light" , "Mythril Vest" , "DemiGod Armor" ,
120 "Hades' Cloak" , "Dragon Scales" , "Adamantium" };
122 int prices
[ WNA
- 1 ] = { 200 , 1000 , 3000 , 10000 , 30000 , 100000 , 150000 , 200000 , 400000 ,
123 1000000 , 4000000 , 10000000 , 40000000 , 100000000 , 400000000 };
124 int webonus
[ WNA
] = { 0 , 10 , 15 , 25 , 35 , 45 , 65 , 85 , 125 , 185 , 255 , 355 , 505 , 805 , 1205 , 1805 };
125 int arbonus
[ WNA
] = { 0 , 1 , 3 , 10 , 15 , 25 , 35 , 50 , 75 , 100 , 150 , 225 , 300 , 400 , 600 , 1000 };
127 int hpbonus
[ 11 ] = { 10 , 15 , 20 , 30 , 50 , 75 , 125 , 185 , 250 , 350 , 550 };
128 int strbonus
[ 11 ] = { 5 , 7 , 10 , 12 , 20 , 35 , 50 , 75 , 110 , 150 , 200 };
129 int defbonus
[ 11 ] = { 2 , 3 , 5 , 10 , 15 , 22 , 35 , 60 , 80 , 120 , 150 };
131 void gameserv ( char * source
, char * buf
)
134 cmd
= strtok ( buf
, " " );
136 source
++; // Get rid of that : at the beginning of a :Nick privmsg Gameserv :text
137 cmd
++; // Get rid of that : at the beginning of the :text (command)
139 cout
<< "Source: " << source
<< " \n cmd: " << cmd
<< endl
;
140 long int mn
= midnight () - 12 * 3600 ; // 12 noon ;)
149 if ( strnicmp ( cmd
, "\1PING" , 6 ) == 0 )
152 ts
= strtok ( NULL
, "\1" );
153 notice ( s_GameServ
, source
, "\1PING %s \1" , ts
);
154 } else if ( stricmp ( cmd
, "\1VERSION\1" ) == 0 ) {
155 notice ( s_GameServ
, source
, "\1VERSION %s %s +devel\1" , PACKAGE
, VERSION
);
156 } else if ( stricmp ( cmd
, "SEARCH" ) == 0 ) {
157 cmd
= strtok ( NULL
, " " );
160 notice ( s_GameServ
, source
, "SYNTAX: /msg %S SEARCH FOREST" );
164 } else if ( stricmp ( cmd
, "FIGHT" ) == 0 ) {
166 } else if ( stricmp ( cmd
, "ATTACK" ) == 0 ) {
168 } else if ( stricmp ( cmd
, "RUN" ) == 0 ) {
170 } else if ( stricmp ( cmd
, "USE" ) == 0 ) {
172 } else if ( stricmp ( cmd
, "HEAL" ) == 0 ) {
174 } else if ( stricmp ( cmd
, "INVENTORY" ) == 0 ) {
175 do_inventory ( source
);
176 } else if ( stricmp ( cmd
, "MASTER" ) == 0 ) {
178 } else if ( stricmp ( cmd
, "STORE" ) == 0 ) {
180 } else if ( stricmp ( cmd
, "BANK" ) == 0 ) {
182 } else if ( stricmp ( cmd
, "ADMIN" ) == 0 ) {
184 } else if ( stricmp ( cmd
, "REFRESH" ) == 0 ) {
186 } else if ( stricmp ( cmd
, "RESET" ) == 0 ) {
188 } else if ( stricmp ( cmd
, "TAVERN" ) == 0 ) {
190 } else if ( stricmp ( cmd
, "PRINT" ) == 0 ) {
191 cout
<< "Printing Clients List: " << endl
;
193 cout
<< " \n Printing Player List: " << endl
;
195 cout
<< " \n Printing Level 1 of monsters:" << endl
;
196 for ( int xx
= 0 ; xx
< 12 ; xx
++)
198 cout
<< monsters
[ 0 ][ xx
]-> name
<< ' ' <<
199 monsters
[ 0 ][ xx
]-> weapon
<< ' ' << monsters
[ 0 ][ xx
]-> hp
<< '/' <<
200 monsters
[ 0 ][ xx
]-> maxhp
<< ' ' <<
201 monsters
[ 0 ][ xx
]-> strength
<< ' ' << monsters
[ 0 ][ xx
]-> exp
<< ' ' <<
202 monsters
[ 0 ][ xx
]-> gold
<< ' ' << monsters
[ 0 ][ xx
]-> death
<< endl
;
204 } else if ( stricmp ( cmd
, "LIST" ) == 0 ) {
206 } else if ( stricmp ( cmd
, "REGISTER" ) == 0 ) {
208 } else if ( stricmp ( cmd
, "IDENTIFY" ) == 0 ) {
210 } else if ( stricmp ( cmd
, "HELP" ) == 0 ) {
212 } else if ( stricmp ( cmd
, "STATS" ) == 0 ) {
214 } else if ( stricmp ( cmd
, "SHUTDOWN" ) == 0 ) {
217 if (!( user
= find ( source
)))
219 notice ( s_GameServ
, source
, "Error: aClient not found. Contact a %S admin" );
220 cout
<< "Error: aClient not found: " << source
<< endl
;
222 else if (! isAdmin ( user
))
224 notice ( s_GameServ
, source
, "You must be a %S admin to use this command!" );
229 raw ( "SQUIT %s :leaving" , servername
);
231 } else if ( stricmp ( cmd
, "SAVE" ) == 0 ) {
234 if (!( user
= find ( source
)))
236 notice ( s_GameServ
, source
, "Error: aClient not found. Contact a %S admin" );
237 cout
<< "Error: aClient not found: " << source
<< endl
;
239 else if (! isAdmin ( user
))
241 notice ( s_GameServ
, source
, "You must be a %S admin to use this command!" );
247 } else if ( stricmp ( cmd
, "LOAD" ) == 0 ) {
250 if (!( user
= find ( source
)))
252 notice ( s_GameServ
, source
, "Error: aClient not found. Contact a %S admin" );
253 cout
<< "Error: aClient not found: " << source
<< endl
;
255 else if (! isAdmin ( user
))
257 notice ( s_GameServ
, source
, "You must be a %S admin to use this command!" );
261 char * cmd2
= strtok ( NULL
, " " );
264 notice ( s_GameServ
, source
, "Loading player data from %s " , playerdata
);
267 else if ( stricmp ( cmd2
, "MONSTERS" ) == 0 )
269 notice ( s_GameServ
, source
, "Loading monster data from %s " , monsterdata
);
273 display_help ( source
, cmd
);
275 } else if ( stricmp ( cmd
, "RAW" ) == 0 ) {
278 if (!( user
= find ( source
)))
280 notice ( s_GameServ
, source
, "Error: aClient not found. Contact a %S admin" );
281 cout
<< "Error: aClient not found: " << source
<< endl
;
283 else if (! isAdmin ( user
))
285 notice ( s_GameServ
, source
, "You must be a %S admin to use this command!" );
289 char * rest
= strtok ( NULL
, "" );
293 notice ( s_GameServ
, source
, "Unknown command \002 %s \002 . Type /msg %S \002 HELP \002 to get a list of commands." , cmd
);
296 source
--; // Bring the ':' back so we don't leak memory
297 cmd
--; // Same thing :)
300 int stricmp ( const char * s1
, const char * s2
)
304 while (( c
= tolower (* s1
)) == tolower (* s2
)) {
310 if ( c
< tolower (* s2
))
315 void showstats ( const char * u
, const char * nick
)
317 aClient
* ni
, * sender
= find ( u
);
323 if (!( ni
= findplayer ( nick
)))
325 notice ( s_GameServ
, u
, " %s not found" , nick
);
329 notice ( s_GameServ
, sender
-> getNick (), "Stats for %s :" , ni
-> stats
-> name
);
331 sprintf ( buf
, "Experience: %l d" , ni
-> stats
-> exp
);
332 space
= spaces ( strlen ( buf
), " " );
333 notice ( s_GameServ
, sender
-> getNick (), " %s%s Level: %d " , buf
, space
,
337 sprintf ( buf
, "Gold: %l d" , ni
-> stats
-> gold
);
338 space
= spaces ( strlen ( buf
), " " );
339 notice ( s_GameServ
, sender
-> getNick (), " %s%s Gold in Bank: %l d" , buf
, space
, ni
-> stats
-> bank
);
342 notice ( s_GameServ
, sender
-> getNick (), "Hit Points: %d of %d " , ni
-> stats
-> hp
,
345 sprintf ( buf
, "Strength: %d " , ni
-> stats
-> strength
+ webonus
[ ni
-> stats
-> weapon
]);
346 space
= spaces ( strlen ( buf
), " " );
347 notice ( s_GameServ
, sender
-> getNick (), " %s%s Defense: %d " ,
348 buf
, space
, ni
-> stats
-> defense
+ arbonus
[ ni
-> stats
-> armor
]);
351 sprintf ( buf
, "Armor: %s " , armors
[ ni
-> stats
-> armor
]);
352 space
= spaces ( strlen ( buf
), " " );
353 notice ( s_GameServ
, sender
-> getNick (), " %s%s Weapon: %s " , buf
, space
,
354 weapons
[ ni
-> stats
-> weapon
]);
357 sprintf ( buf
, "Forest Fights: %d " , ni
-> stats
-> forest_fights
);
358 space
= spaces ( strlen ( buf
), " " );
359 notice ( s_GameServ
, sender
-> getNick (), " %s%s Player Fights: %d " , buf
, space
, ni
-> stats
-> player_fights
);
364 notice ( s_GameServ
, u
, " %s is not playing!" , ni
-> stats
-> name
);
369 char * spaces ( int len
, char * seperator
)
372 final
= new char [ 30 ];
374 strcpy ( final
, seperator
);
375 for ( y
= 0 ; y
< 30 - len
; y
++)
376 strcat ( final
, seperator
);
380 void raw ( const char * fmt
, ...)
385 input
= new char [ 1024 ];
387 memset ( input
, 0 , sizeof ( input
)); // Initialize to NULL
393 case 'd' : sprintf ( input
, " %s%d " , input
, va_arg ( args
, int )); break ;
394 case 's' : sprintf ( input
, " %s%s " , input
, va_arg ( args
, char *)); break ;
395 case 'S' : sprintf ( input
, " %s%s " , input
, s_GameServ
); break ;
398 sprintf ( input
, " %s%l d" , input
, va_arg ( args
, long int )); break ;
403 sprintf ( input
, " %s%c " , input
, * t
);
407 sprintf ( input
, " %s%s " , input
, " \r\n " );
408 cout
<< "input: " << input
<< flush
;
409 sock_puts ( sock
, input
);
413 /* Send a NOTICE from the given source to the given nick. */
415 void notice ( const char * source
, const char * dest
, const char * fmt
, ...)
423 input
= new char [ 1024 ];
428 sprintf ( input
, ": %s NOTICE %s :" , source
, dest
);
432 sprintf ( input
, ": %s NOTICE %s :" , source
, dest
);
439 case 'd' : sprintf ( input
, " %s%d " , input
, va_arg ( args
, int )); break ;
440 case 's' : sprintf ( input
, " %s%s " , input
, va_arg ( args
, char *)); break ;
441 case 'S' : sprintf ( input
, " %s%s " , input
, s_GameServ
); break ;
444 sprintf ( input
, " %s%l d" , input
, va_arg ( args
, long int )); break ;
449 sprintf ( input
, " %s%c " , input
, * t
);
453 sprintf ( input
, " %s%s " , input
, " \r\n " );
454 cout
<< "input: " << input
<< flush
;
455 sock_puts ( sock
, input
);
461 int strnicmp ( const char * s1
, const char * s2
, size_t len
)
467 while (( c
= tolower (* s1
)) == tolower (* s2
) && len
> 0 ) {
468 if ( c
== 0 || -- len
== 0 )
473 if ( c
< tolower (* s2
))
479 char * strtok ( char * str
, const char * delim
)
481 static char * current
= NULL
;
488 current
+= strspn ( current
, delim
);
489 ret
= * current
? current
: NULL
;
490 current
+= strcspn ( current
, delim
);
499 void do_list ( char * u
)
501 ListNode
< aClient
> * temp
;
502 temp
= players
. First ();
503 if (! players
. isEmpty ())
505 notice ( s_GameServ
, u
, "People Playing:" );
508 notice ( s_GameServ
, u
, "IRC: %s Game: %s " , temp
-> getData ()-> getNick (), temp
-> getData ()-> stats
-> name
);
511 notice ( s_GameServ
, u
, "End of List" );
514 notice ( s_GameServ
, u
, "No one is playing" );
517 void do_register ( char * u
)
521 password
= strtok ( NULL
, " " );
523 static char saltChars
[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./" ;
526 salt
[ 0 ] = saltChars
[ rand () % strlen ( saltChars
)];
527 salt
[ 1 ] = saltChars
[ rand () % strlen ( saltChars
)];
532 notice ( s_GameServ
, u
, "SYNTAX: /msg %S REGISTER PASSWORD" );
534 else if (( user
= find ( u
)))
537 if (! user
-> stats
&& ! p
)
539 user
-> stats
= new Player ( user
);
540 user
-> stats
-> user
= user
; // Set the backwards pointer
541 strcpy ( user
-> stats
-> password
, crypt ( password
, salt
));
542 players
. insertAtBack ( user
);
543 notice ( s_GameServ
, u
, "Player %s registered with password %s ." , user
-> stats
-> name
, password
);
544 notice ( s_GameServ
, u
, "Write this password down. If you lose it, there is no way to retrieve it!" );
548 notice ( s_GameServ
, u
, "Already registered. Contact a %S admin for help." );
553 void do_identify ( char * u
)
555 char * password
, * name
;
557 name
= strtok ( NULL
, " " );
558 password
= strtok ( NULL
, " " );
560 if (! password
|| ! name
)
562 notice ( s_GameServ
, u
, "SYNTAX: /msg %S IDENTIFY NAME PASSWORD" );
565 notice ( s_GameServ
, u
, "Fatal error. Cannot find aClient. Buf: %s " , strtok ( NULL
, "" ));
566 else if (!( p
= findplayer ( name
)) || ! p
-> stats
)
567 notice ( s_GameServ
, u
, "Player %s not found" , name
);
568 else if (! check_password ( name
, password
) && ! isAdmin ( user
))
570 notice ( s_GameServ
, u
, "Password incorrect" );
574 if ( p
-> stats
-> user
&& ! isAdmin ( user
))
576 notice ( s_GameServ
, u
, "That player has already identified." );
581 ListNode
< aClient
> * temp
;
582 temp
= players
. Find ( p
);
585 notice ( s_GameServ
, u
, "Fatal error. Contact %S Admin. Buf: %s " ,
589 user
-> stats
= new Player ( p
-> stats
-> name
);
590 cout
<< "Setting data for identified" << endl
;
591 user
-> stats
-> setData ( p
-> stats
);
592 cout
<< "Player Identified" << endl
<< flush
;
596 notice ( s_GameServ
, u
, "Password Accepted. Identified." );
601 notice ( s_GameServ
, u
, "Already identified. Contact a %S admin for help." );
606 void do_stats ( char * u
)
611 nick
= strtok ( NULL
, " " );
615 if (!( user
= find ( u
)))
617 notice ( s_GameServ
, u
, "Fatal Error in do_stats(). Contact a %S admin for help!" );
620 else if (! is_playing ( user
))
622 notice ( s_GameServ
, u
, "You're not playing, so you have no stats!" );
626 showstats ( u
, user
-> stats
-> name
);
635 for ( int x
= 0 ; x
< LEVELS
; x
++)
636 masters
[ x
] = new Monster
;
638 strcpy ( masters
[ 0 ]-> name
, "Old Bones" );
639 strcpy ( masters
[ 0 ]-> weapon
, "Dull Sword Cane" );
640 masters
[ 0 ]-> strength
= 15 ;
641 masters
[ 0 ]-> gold
= 0 ;
643 masters
[ 0 ]-> maxhp
= 30 ;
645 strcpy ( masters
[ 0 ]-> death
, "You have done well my student, but the road is long. Use your new strength with humility and honor as you progress in levels!" );
647 strcpy ( masters
[ 1 ]-> name
, "Master Chang" );
648 strcpy ( masters
[ 1 ]-> weapon
, "Nanchaku" );
649 masters
[ 1 ]-> strength
= 30 ;
650 masters
[ 1 ]-> gold
= 0 ;
652 masters
[ 1 ]-> maxhp
= 40 ;
654 strcpy ( masters
[ 1 ]-> death
, "You try to make out what Master Chang is saying, but the only thing you catch is something about a grasshopper." );
656 strcpy ( masters
[ 2 ]-> name
, "Chuck Norris" );
657 strcpy ( masters
[ 2 ]-> weapon
, "Ranger Kick" );
658 masters
[ 2 ]-> strength
= 85 ;
659 masters
[ 2 ]-> gold
= 0 ;
661 masters
[ 2 ]-> maxhp
= 70 ;
663 strcpy ( masters
[ 2 ]-> death
, "Be strong, and keep your goals in site. Drink milk, and don't do drugs. One day you may be fighting next to me as a Texas Ranger YEEHAW!" );
666 strcpy ( masters
[ 3 ]-> name
, "Mr. Miagi" );
667 strcpy ( masters
[ 3 ]-> weapon
, "Petrified Bonsai" );
668 masters
[ 3 ]-> strength
= 120 ;
669 masters
[ 3 ]-> gold
= 0 ;
671 masters
[ 3 ]-> maxhp
= 120 ;
672 masters
[ 3 ]-> hp
= 120 ;
673 strcpy ( masters
[ 3 ]-> death
, "Skill comes from repeating the correct but seemingly mundane actions. Wax ON, wax OFF!" );
675 strcpy ( masters
[ 4 ]-> name
, "Jackie Chan" );
676 strcpy ( masters
[ 4 ]-> weapon
, "Kung Fu Kick" );
677 masters
[ 4 ]-> strength
= 135 ;
678 masters
[ 4 ]-> gold
= 0 ;
680 masters
[ 4 ]-> maxhp
= 200 ;
681 masters
[ 4 ]-> hp
= 200 ;
682 strcpy ( masters
[ 4 ]-> death
, "I like to let people talk who like to talk... it's easier to find out how full of it they really are!" );
684 strcpy ( masters
[ 5 ]-> name
, "Jet Li" );
685 strcpy ( masters
[ 5 ]-> weapon
, "Motorcycle" );
686 masters
[ 5 ]-> strength
= 160 ;
687 masters
[ 5 ]-> gold
= 0 ;
689 masters
[ 5 ]-> maxhp
= 400 ;
690 masters
[ 5 ]-> hp
= 400 ;
691 strcpy ( masters
[ 5 ]-> death
, "Failure is a fuel for excuses. It's the doing the do, that makes the making." );
694 strcpy ( masters
[ 6 ]-> name
, "Muhammad Ali" );
695 strcpy ( masters
[ 6 ]-> weapon
, "Quick Jab" );
696 masters
[ 6 ]-> strength
= 185 ;
697 masters
[ 6 ]-> gold
= 0 ;
699 masters
[ 6 ]-> maxhp
= 600 ;
700 masters
[ 6 ]-> hp
= 600 ;
701 strcpy ( masters
[ 6 ]-> death
, "It's just a job. Grass grows, birds fly, waves pound the sand. I beat people up." );
703 strcpy ( masters
[ 7 ]-> name
, "Li Mu Bai" );
704 strcpy ( masters
[ 7 ]-> weapon
, "Green Destiny" );
705 masters
[ 7 ]-> strength
= 210 ;
706 masters
[ 7 ]-> gold
= 0 ;
708 masters
[ 7 ]-> maxhp
= 800 ;
709 masters
[ 7 ]-> hp
= 800 ;
710 strcpy ( masters
[ 7 ]-> death
, "No growth without resistance. No action without reaction. No desire without restraint." );
713 strcpy ( masters
[ 8 ]-> name
, "Jimmy Wang Yu" );
714 strcpy ( masters
[ 8 ]-> weapon
, "Flying Guillotine" );
715 masters
[ 8 ]-> strength
= 275 ;
716 masters
[ 8 ]-> gold
= 0 ;
718 masters
[ 8 ]-> maxhp
= 1200 ;
719 masters
[ 8 ]-> hp
= 1200 ;
720 strcpy ( masters
[ 8 ]-> death
, "You have beaten the one armed boxer. Proceed with caution!" );
722 strcpy ( masters
[ 9 ]-> name
, "Wong Fei Hung" );
723 strcpy ( masters
[ 9 ]-> weapon
, "Drunken Boxing" );
724 masters
[ 9 ]-> strength
= 360 ;
725 masters
[ 9 ]-> gold
= 0 ;
727 masters
[ 9 ]-> maxhp
= 1800 ;
728 masters
[ 9 ]-> hp
= 1800 ;
729 strcpy ( masters
[ 9 ]-> death
, "Hiccup! Monkey drinks master's wine!" );
731 strcpy ( masters
[ 10 ]-> name
, "Bruce Lee" );
732 strcpy ( masters
[ 10 ]-> weapon
, "Fists of fury" );
733 masters
[ 10 ]-> strength
= 575 ;
734 masters
[ 10 ]-> gold
= 0 ;
735 masters
[ 10 ]-> exp
= 0 ;
736 masters
[ 10 ]-> maxhp
= 2500 ;
737 masters
[ 10 ]-> hp
= 2500 ;
738 strcpy ( masters
[ 10 ]-> death
, "You must learn to concentrate. It is like a finger pointing away to the moon... DONT concentrate on the finger, or you will miss all the heavenly glory." );
744 for ( int x
= 0 ; x
< LEVELS
; x
++)
745 for ( int y
= 0 ; y
< MONSTERS
; y
++)
746 monsters
[ x
][ y
] = new Monster ();
748 // Hard coded for now - Kain
751 strcpy(monsters[0][0]->name, "Slime");
752 strcpy(monsters[0][0]->weapon, "Acid Goo");
753 monsters[0][0]->strength = 6;
754 monsters[0][0]->gold = 50;
755 monsters[0][0]->exp = 3;
756 monsters[0][0]->maxhp = 9;
757 strcpy(monsters[0][0]->death, "The slime oozes into nothing... you clean the acid goo off of your weapon");
759 strcpy(monsters[0][1]->name, "Ghost");
760 strcpy(monsters[0][1]->weapon, "Cold Breath");
761 monsters[0][1]->strength = 8;
762 monsters[0][1]->gold = 100;
763 monsters[0][1]->exp = 10;
764 monsters[0][1]->maxhp = 10;
765 strcpy(monsters[0][1]->death, "You feel a chill as the spirit leaves the realm.");
767 strcpy(monsters[0][2]->name, "Ugly Rodent");
768 strcpy(monsters[0][2]->weapon, "Sharp Teeth");
769 monsters[0][2]->strength = 9;
770 monsters[0][2]->gold = 75;
771 monsters[0][2]->exp = 8;
772 monsters[0][2]->maxhp = 13;
773 strcpy(monsters[0][2]->death, "You stomp on the Ugly Rodent's remains for a finishing blow.");
775 strcpy(monsters[0][3]->name, "Whart Hog");
776 strcpy(monsters[0][3]->weapon, "Tusks");
777 monsters[0][3]->strength = 10;
778 monsters[0][3]->gold = 80;
779 monsters[0][3]->exp = 6;
780 monsters[0][3]->maxhp = 10;
781 strcpy(monsters[0][3]->death, "You cook and eat the hog for good measure!");
783 strcpy(monsters[0][4]->name, "Pesky Kid");
784 strcpy(monsters[0][4]->weapon, "Slingshot");
785 monsters[0][4]->strength = 8;
786 monsters[0][4]->gold = 30;
787 monsters[0][4]->exp = 4;
788 monsters[0][4]->maxhp = 6;
789 strcpy(monsters[0][4]->death, "You take his slingshot and snap the band, sending the kid crying home to mom!");
791 strcpy(monsters[0][5]->name, "Playground Bully");
792 strcpy(monsters[0][5]->weapon, "Painful Noogie");
793 monsters[0][5]->strength = 11;
794 monsters[0][5]->gold = 44;
795 monsters[0][5]->exp = 6;
796 monsters[0][5]->maxhp = 10;
797 strcpy(monsters[0][5]->death, "You give him an indian burn, and punt him across the schoolyard!");
799 strcpy(monsters[0][6]->name, "Small Imp");
800 strcpy(monsters[0][6]->weapon, "Dagger");
801 monsters[0][6]->strength = 6;
802 monsters[0][6]->gold = 64;
803 monsters[0][6]->exp = 10;
804 monsters[0][6]->maxhp = 10;
805 strcpy(monsters[0][6]->death, "You can't help but laugh as he stumbles and falls onto his own dagger!");
807 strcpy(monsters[0][7]->name, "Little Monkey");
808 strcpy(monsters[0][7]->weapon, "Monkey Wrench");
809 monsters[0][7]->strength = 6;
810 monsters[0][7]->gold = 53;
811 monsters[0][7]->exp = 9;
812 monsters[0][7]->maxhp = 9;
813 strcpy(monsters[0][7]->death, "You want to cook it, but you just can't think of eating something that looks so human!");
815 strcpy(monsters[0][8]->name, "Grub Worm");
816 strcpy(monsters[0][8]->weapon, "Minor Nudge");
817 monsters[0][8]->strength = 2;
818 monsters[0][8]->gold = 10;
819 monsters[0][8]->exp = 3;
820 monsters[0][8]->maxhp = 3;
821 strcpy(monsters[0][8]->death, "You decide to save the poor little fella for your next fishing trip.");
823 strcpy(monsters[0][9]->name, "Drakee");
824 strcpy(monsters[0][9]->weapon, "Tail Slap");
825 monsters[0][9]->strength = 5;
826 monsters[0][9]->gold = 22;
827 monsters[0][9]->exp = 7;
828 monsters[0][9]->maxhp = 5;
829 strcpy(monsters[0][9]->death, "You pull the little Drakee by its tale and slam it down on a dry stump!");
831 strcpy(monsters[0][10]->name, "Fat Slob");
832 strcpy(monsters[0][10]->weapon, "Smelly Breath");
833 monsters[0][10]->strength = 6;
834 monsters[0][10]->gold = 40;
835 monsters[0][10]->exp = 10;
836 monsters[0][10]->maxhp = 7;
837 strcpy(monsters[0][10]->death, "You kick his stomach for fun, and are thrown back by the spring of it all!");
839 strcpy(monsters[0][11]->name, "Lost Warrior");
840 strcpy(monsters[0][11]->weapon, "Long Sword");
841 monsters[0][11]->strength = 10;
842 monsters[0][11]->gold = 250;
843 monsters[0][11]->exp = 19;
844 monsters[0][11]->maxhp = 15;
845 strcpy(monsters[0][11]->death, "You give him a proper burial in respect for the dead warrior.");
847 strcpy(monsters[1][0]->name, "Lost Warrior's Cousin Larry");
848 strcpy(monsters[1][0]->weapon, "Wood Axe");
849 monsters[1][0]->strength = 19;
850 monsters[1][0]->gold = 134;
851 monsters[1][0]->exp = 24;
852 monsters[1][0]->maxhp = 30;
853 strcpy(monsters[1][0]->death, "He was pretty pissed you killed his cousin, but he seems to have suffered the same fate!");
855 strcpy(monsters[1][1]->name, "Sandman");
856 strcpy(monsters[1][1]->weapon, "Sleeping Dust");
857 monsters[1][1]->strength = 25;
858 monsters[1][1]->gold = 80;
859 monsters[1][1]->exp = 6;
860 monsters[1][1]->maxhp = 27;
861 strcpy(monsters[1][1]->death, "You put the sandman to his final sleep.");
863 strcpy(monsters[1][2]->name, "Dirty Prostitute");
864 strcpy(monsters[1][2]->weapon, "Stiletto Heel");
865 monsters[1][2]->strength = 21;
866 monsters[1][2]->gold = 160;
867 monsters[1][2]->exp = 12;
868 monsters[1][2]->maxhp = 25;
869 strcpy(monsters[1][2]->death, "Your pimp hand is strong!");
871 strcpy(monsters[1][3]->name, "Goblin Gardener");
872 strcpy(monsters[1][3]->weapon, "Garden Spade");
873 monsters[1][3]->strength = 18;
874 monsters[1][3]->gold = 130;
875 monsters[1][3]->exp = 8;
876 monsters[1][3]->maxhp = 20;
877 strcpy(monsters[1][3]->death, "You trample on his garden after slaying him... that felt good!");
879 strcpy(monsters[1][4]->name, "Evil Elf");
880 strcpy(monsters[1][4]->weapon, "Dark Bow");
881 monsters[1][4]->strength = 23;
882 monsters[1][4]->gold = 136;
883 monsters[1][4]->exp = 13;
884 monsters[1][4]->maxhp = 24;
885 strcpy(monsters[1][4]->death, "Elves are usually nice you thought... hmm.");
887 strcpy(monsters[1][5]->name, "Viking Warrior");
888 strcpy(monsters[1][5]->weapon, "Broad Sword");
889 monsters[1][5]->strength = 21;
890 monsters[1][5]->gold = 330;
891 monsters[1][5]->exp = 20;
892 monsters[1][5]->maxhp = 18;
893 strcpy(monsters[1][5]->death, "You heard vikings were big, but not THAT big you thought.");
895 strcpy(monsters[1][6]->name, "Wicked Witch");
896 strcpy(monsters[1][6]->weapon, "Cackling Laugh");
897 monsters[1][6]->strength = 20;
898 monsters[1][6]->gold = 130;
899 monsters[1][6]->exp = 20;
900 monsters[1][6]->maxhp = 26;
901 strcpy(monsters[1][6]->death, "Just for kicks, you splash some water on her and watch her melt.");
903 strcpy(monsters[1][7]->name, "Vampire Bat");
904 strcpy(monsters[1][7]->weapon, "Blood Sucking Fangs");
905 monsters[1][7]->strength = 18;
906 monsters[1][7]->gold = 125;
907 monsters[1][7]->exp = 21;
908 monsters[1][7]->maxhp = 29;
909 strcpy(monsters[1][7]->death, "You fry up the bat and eat it... needs garlic.");
911 strcpy(monsters[1][8]->name, "Thorn Bush");
912 strcpy(monsters[1][8]->weapon, "101 Thorns");
913 monsters[1][8]->strength = 16;
914 monsters[1][8]->gold = 94;
915 monsters[1][8]->exp = 15;
916 monsters[1][8]->maxhp = 25;
917 strcpy(monsters[1][8]->death, "You set the bush ablaze and roast some marshmallows.");
919 strcpy(monsters[1][9]->name, "Barbarian");
920 strcpy(monsters[1][9]->weapon, "Heavy Sword");
921 monsters[1][9]->strength = 29;
922 monsters[1][9]->gold = 250;
923 monsters[1][9]->exp = 25;
924 monsters[1][9]->maxhp = 30;
925 strcpy(monsters[1][9]->death, "You listen to him moan as he falls over dead.");
927 strcpy(monsters[1][10]->name, "Crypt Rat");
928 strcpy(monsters[1][10]->weapon, "Stinging Bite");
929 monsters[1][10]->strength = 25;
930 monsters[1][10]->gold = 119;
931 monsters[1][10]->exp = 20;
932 monsters[1][10]->maxhp = 26;
933 strcpy(monsters[1][10]->death, "You squash the little rodent for fear that it might not be dead.");
935 strcpy(monsters[1][11]->name, "Small Orc");
936 strcpy(monsters[1][11]->weapon, "blade");
937 monsters[1][11]->strength = 28;
938 monsters[1][11]->gold = 300;
939 monsters[1][11]->exp = 30;
940 monsters[1][11]->maxhp = 36;
941 strcpy(monsters[1][11]->death, "It's an ugly one, and it would've grown up to be a terror...");
943 strcpy(monsters[2][0]->name, "Teferi");
944 strcpy(monsters[2][0]->weapon, "Puzzle Box");
945 monsters[2][0]->strength = 29;
946 monsters[2][0]->gold = 380;
947 monsters[2][0]->exp = 18;
948 monsters[2][0]->maxhp = 29;
949 strcpy(monsters[2][0]->death, "It was a puzzling experience.");
951 strcpy(monsters[2][1]->name, "Spineless Thug");
952 strcpy(monsters[2][1]->weapon, "Spiked Bat");
953 monsters[2][1]->strength = 37;
954 monsters[2][1]->gold = 384;
955 monsters[2][1]->exp = 27;
956 monsters[2][1]->maxhp = 32;
957 strcpy(monsters[2][1]->death, "See you at the crossroads!");
959 strcpy(monsters[2][2]->name, "Pyromaniac");
960 strcpy(monsters[2][2]->weapon, "Flame Thrower");
961 monsters[2][2]->strength = 29;
962 monsters[2][2]->gold = 563;
963 monsters[2][2]->exp = 22;
964 monsters[2][2]->maxhp = 45;
965 strcpy(monsters[2][2]->death, "He chants FIRE FIRE as he falls to the ground... a burning heap of flesh.");
967 strcpy(monsters[2][3]->name, "Evil Enchantress");
968 strcpy(monsters[2][3]->weapon, "Deadly Spell");
969 monsters[2][3]->strength = 50;
970 monsters[2][3]->gold = 830;
971 monsters[2][3]->exp = 35;
972 monsters[2][3]->maxhp = 35;
973 strcpy(monsters[2][3]->death, "She looked just about as good as she fought.");
975 strcpy(monsters[2][4]->name, "Killer Leprechaun");
976 strcpy(monsters[2][4]->weapon, "Gold Rush");
977 monsters[2][4]->strength = 35;
978 monsters[2][4]->gold = 1300;
979 monsters[2][4]->exp = 30;
980 monsters[2][4]->maxhp = 37;
981 strcpy(monsters[2][4]->death, "You steal his pot of gold... that's a lot of money!");
983 strcpy(monsters[2][5]->name, "Avalanche Rider");
984 strcpy(monsters[2][5]->weapon, "Huge Snowball");
985 monsters[2][5]->strength = 32;
986 monsters[2][5]->gold = 700;
987 monsters[2][5]->exp = 32;
988 monsters[2][5]->maxhp = 38;
989 strcpy(monsters[2][5]->death, "You take his snowboard and snap it in two!");
991 strcpy(monsters[2][6]->name, "Blundering Idiot");
992 strcpy(monsters[2][6]->weapon, "Stupidity");
993 monsters[2][6]->strength = 14;
994 monsters[2][6]->gold = 700;
995 monsters[2][6]->exp = 20;
996 monsters[2][6]->maxhp = 29;
997 strcpy(monsters[2][6]->death, "Now there's one person you don't feel sorry for killing!");
999 strcpy(monsters[2][7]->name, "Militant Anarchist");
1000 strcpy(monsters[2][7]->weapon, "Molotov Cocktail");
1001 monsters[2][7]->strength = 33;
1002 monsters[2][7]->gold = 245;
1003 monsters[2][7]->exp = 45;
1004 monsters[2][7]->maxhp = 32;
1005 strcpy(monsters[2][7]->death, "Order has been restored for now...");
1007 strcpy(monsters[2][8]->name, "Scathe Zombies");
1008 strcpy(monsters[2][8]->weapon, "Death Grip");
1009 monsters[2][8]->strength = 38;
1010 monsters[2][8]->gold = 763;
1011 monsters[2][8]->exp = 15;
1012 monsters[2][8]->maxhp = 45;
1013 strcpy(monsters[2][8]->death, "That was perhaps the scariest experience of your life.");
1015 strcpy(monsters[2][9]->name, "Spitting Llama");
1016 strcpy(monsters[2][9]->weapon, "Spit Spray");
1017 monsters[2][9]->strength = 48;
1018 monsters[2][9]->gold = 638;
1019 monsters[2][9]->exp = 28;
1020 monsters[2][9]->maxhp = 34;
1021 strcpy(monsters[2][9]->death, "You wipe the spit off your face and fling it back at the Llama.");
1023 strcpy(monsters[2][10]->name, "Juggalo");
1024 strcpy(monsters[2][10]->weapon, "Clown Axe");
1025 monsters[2][10]->strength = 60;
1026 monsters[2][10]->gold = 650;
1027 monsters[2][10]->exp = 30;
1028 monsters[2][10]->maxhp = 29;
1029 strcpy(monsters[2][10]->death, "What is a Juggalo? I don't know!");
1031 strcpy(monsters[2][11]->name, "The Boogie Man");
1032 strcpy(monsters[2][11]->weapon, "Striking Fear");
1033 monsters[2][11]->strength = 46;
1034 monsters[2][11]->gold = 600;
1035 monsters[2][11]->exp = 35;
1036 monsters[2][11]->maxhp = 27;
1037 strcpy(monsters[2][11]->death, "He's scared you for the very last time!");
1039 strcpy(monsters[3][0]->name, "Living Fire");
1040 strcpy(monsters[3][0]->weapon, "Scorching Wind");
1041 monsters[3][0]->strength = 55;
1042 monsters[3][0]->gold = 1100;
1043 monsters[3][0]->exp = 36;
1044 monsters[3][0]->maxhp = 55;
1045 strcpy(monsters[3][0]->death, "You extinguish the Living Flame once and for all!");
1047 strcpy(monsters[3][1]->name, "Raging Orc");
1048 strcpy(monsters[3][1]->weapon, "Orcish Artillary");
1049 monsters[3][1]->strength = 89;
1050 monsters[3][1]->gold = 900;
1051 monsters[3][1]->exp = 25;
1052 monsters[3][1]->maxhp = 50;
1053 strcpy(monsters[3][1]->death, "This orc was a bit tougher than you remembered!");
1055 strcpy(monsters[3][2]->name, "Huge Tarantula");
1056 strcpy(monsters[3][2]->weapon, "Tangling Web");
1057 monsters[3][2]->strength = 59;
1058 monsters[3][2]->gold = 1000;
1059 monsters[3][2]->exp = 35;
1060 monsters[3][2]->maxhp = 60;
1061 strcpy(monsters[3][2]->death, "You're glad you overcame your arachniphobia so soon!");
1063 strcpy(monsters[3][3]->name, "Rabid Wolf");
1064 strcpy(monsters[3][3]->weapon, "Cujo Bite");
1065 monsters[3][3]->strength = 40;
1066 monsters[3][3]->gold = 1200;
1067 monsters[3][3]->exp = 47;
1068 monsters[3][3]->maxhp = 76;
1069 strcpy(monsters[3][3]->death, "The mutt falls over dead as white foam drips from its deadly canines...");
1071 strcpy(monsters[3][4]->name, "Goblin Fighter");
1072 strcpy(monsters[3][4]->weapon, "Morning Star");
1073 monsters[3][4]->strength = 38;
1074 monsters[3][4]->gold = 700;
1075 monsters[3][4]->exp = 30;
1076 monsters[3][4]->maxhp = 75;
1077 strcpy(monsters[3][4]->death, "He almost caught you with his chain mace, but you sliced off his head.");
1079 strcpy(monsters[3][5]->name, "Grizzly Bear");
1080 strcpy(monsters[3][5]->weapon, "Razor Claws");
1081 monsters[3][5]->strength = 68;
1082 monsters[3][5]->gold = 1747;
1083 monsters[3][5]->exp = 81;
1084 monsters[3][5]->maxhp = 51;
1085 strcpy(monsters[3][5]->death, "It almost got you this time... better be careful");
1087 strcpy(monsters[3][6]->name, "Skeleton Man");
1088 strcpy(monsters[3][6]->weapon, "Leg Bone");
1089 monsters[3][6]->strength = 70;
1090 monsters[3][6]->gold = 597;
1091 monsters[3][6]->exp = 57;
1092 monsters[3][6]->maxhp = 60;
1093 strcpy(monsters[3][6]->death, "As a finisher, you wind up with the broad side of your weapon and hit his skull off for a home run!");
1095 strcpy(monsters[3][7]->name, "Young Werewolf");
1096 strcpy(monsters[3][7]->weapon, "Howling Bites");
1097 monsters[3][7]->strength = 75;
1098 monsters[3][7]->gold = 1742;
1099 monsters[3][7]->exp = 65;
1100 monsters[3][7]->maxhp = 42;
1101 strcpy(monsters[3][7]->death, "You scatter the wolf's body parts in hopes he will stay dead!");
1103 strcpy(monsters[3][8]->name, "Dark Infantry");
1104 strcpy(monsters[3][8]->weapon, "Flesh Reaper");
1105 monsters[3][8]->strength = 69;
1106 monsters[3][8]->gold = 870;
1107 monsters[3][8]->exp = 43;
1108 monsters[3][8]->maxhp = 65;
1109 strcpy(monsters[3][8]->death, "Light has prevailed this time... but it's only so long before you meet again.");
1111 strcpy(monsters[3][9]->name, "Erie Spirit");
1112 strcpy(monsters[3][9]->weapon, "Deadly Grin");
1113 monsters[3][9]->strength = 63;
1114 monsters[3][9]->gold = 1300;
1115 monsters[3][9]->exp = 32;
1116 monsters[3][9]->maxhp = 50;
1117 strcpy(monsters[3][9]->death, "His cousin the ghost was a little bit easier.");
1119 strcpy(monsters[3][10]->name, "Gollum");
1120 strcpy(monsters[3][10]->weapon, "Precious Treasure");
1121 monsters[3][10]->strength = 66;
1122 monsters[3][10]->gold = 1492;
1123 monsters[3][10]->exp = 73;
1124 monsters[3][10]->maxhp = 54;
1125 strcpy(monsters[3][10]->death, "Gollum screams out \"MY PRECIOUS\" as his small body falls limp from your blow.");
1127 strcpy(monsters[3][11]->name, "Rock Fighter");
1128 strcpy(monsters[3][11]->weapon, "Small Boulders");
1129 monsters[3][11]->strength = 87;
1130 monsters[3][11]->gold = 1742;
1131 monsters[3][11]->exp = 99;
1132 monsters[3][11]->maxhp = 65;
1133 strcpy(monsters[3][11]->death, "You dodge his last rock, and counter with a low blow, cutting off his legs.");
1136 strcpy(monsters[4][0]->name, "Giant Sphinx");
1137 strcpy(monsters[4][0]->weapon, "Ancient Curse");
1138 monsters[4][0]->strength = 120;
1139 monsters[4][0]->gold = 1000;
1140 monsters[4][0]->exp = 100;
1141 monsters[4][0]->maxhp = 80;
1142 strcpy(monsters[4][0]->death, "You look in awe at the great wonder, collapsed at your feet!");
1144 strcpy(monsters[4][1]->name, "Giant Ogre");
1145 strcpy(monsters[4][1]->weapon, "Big Log");
1146 monsters[4][1]->strength = 130;
1147 monsters[4][1]->gold = 857;
1148 monsters[4][1]->exp = 175;
1149 monsters[4][1]->maxhp = 100;
1150 strcpy(monsters[4][1]->death, "Your wits outmatched the ogre's brawn... big dumb thing.");
1152 strcpy(monsters[4][2]->name, "Massive Cockroach");
1153 strcpy(monsters[4][2]->weapon, "Piercing Hiss");
1154 monsters[4][2]->strength = 125;
1155 monsters[4][2]->gold = 700;
1156 monsters[4][2]->exp = 150;
1157 monsters[4][2]->maxhp = 112;
1158 strcpy(monsters[4][2]->death, "Where's the exterminator when you need one?");
1160 strcpy(monsters[4][3]->name, "Big Venomous Snake");
1161 strcpy(monsters[4][3]->weapon, "Poison Fangs");
1162 monsters[4][3]->strength = 140;
1163 monsters[4][3]->gold = 900;
1164 monsters[4][3]->exp = 175;
1165 monsters[4][3]->maxhp = 126;
1166 strcpy(monsters[4][3]->death, "After killing this beast you check for puncture marks... you find none, luckily.");
1168 strcpy(monsters[4][4]->name, "Lizard Man");
1169 strcpy(monsters[4][4]->weapon, "Deadly Jaws");
1170 monsters[4][4]->strength = 145;
1171 monsters[4][4]->gold = 1250;
1172 monsters[4][4]->exp = 175;
1173 monsters[4][4]->maxhp = 150;
1174 strcpy(monsters[4][4]->death, "His scales made for tough armor, and his jaws for a tougher opponent!");
1176 strcpy(monsters[4][5]->name, "Face Dancer");
1177 strcpy(monsters[4][5]->weapon, "Illusion Scyth");
1178 monsters[4][5]->strength = 138;
1179 monsters[4][5]->gold = 1603;
1180 monsters[4][5]->exp = 198;
1181 monsters[4][5]->maxhp = 173;
1182 strcpy(monsters[4][5]->death, "His carcus takes the shape of many things before it dies. His true form is so repulsive, you know why he changed faces so much!");
1184 strcpy(monsters[4][6]->name, "Darklord Longbow Archer");
1185 strcpy(monsters[4][6]->weapon, "Deadly Bow and Arrows");
1186 monsters[4][6]->strength = 145;
1187 monsters[4][6]->gold = 1569;
1188 monsters[4][6]->exp = 243;
1189 monsters[4][6]->maxhp = 170;
1190 strcpy(monsters[4][6]->death, "Your face turns white with horror after you realize you just met the devil's protector!");
1192 strcpy(monsters[4][7]->name, "Hell's Paladin");
1193 strcpy(monsters[4][7]->weapon, "Sword of Hellfire");
1194 monsters[4][7]->strength = 200;
1195 monsters[4][7]->gold = 2191;
1196 monsters[4][7]->exp = 254;
1197 monsters[4][7]->maxhp = 175;
1198 strcpy(monsters[4][7]->death, "This is starting to get tough you think. Do you really want to go to level 6?");
1200 strcpy(monsters[4][8]->name, "The Unknown Soldier");
1201 strcpy(monsters[4][8]->weapon, "Soul Torture");
1202 monsters[4][8]->strength = 175;
1203 monsters[4][8]->gold = 1890;
1204 monsters[4][8]->exp = 200;
1205 monsters[4][8]->maxhp = 180;
1206 strcpy(monsters[4][8]->death, "Who was that? Where was he from? And what was that weapon??");
1208 strcpy(monsters[4][9]->name, "Undead Cult Leader");
1209 strcpy(monsters[4][9]->weapon, "Lance of Deceit");
1210 monsters[4][9]->strength = 180;
1211 monsters[4][9]->gold = 1792;
1212 monsters[4][9]->exp = 195;
1213 monsters[4][9]->maxhp = 190;
1214 strcpy(monsters[4][9]->death, "His words fall on deaf ears... this is one cult you will NOT be part of!");
1216 strcpy(monsters[4][10]->name, "Water Serpent");
1217 strcpy(monsters[4][10]->weapon, "Forked Tongue");
1218 monsters[4][10]->strength = 150;
1219 monsters[4][10]->gold = 1500;
1220 monsters[4][10]->exp = 176;
1221 monsters[4][10]->maxhp = 220;
1222 strcpy(monsters[4][10]->death, "The serpent squeals as you cut off its head!");
1224 strcpy(monsters[4][11]->name, "Silverback Gorilla");
1225 strcpy(monsters[4][11]->weapon, "Deadly Banana Peel");
1226 monsters[4][11]->strength = 160;
1227 monsters[4][11]->gold = 1300;
1228 monsters[4][11]->exp = 150;
1229 monsters[4][11]->maxhp = 178;
1230 strcpy(monsters[4][11]->death, "Was that gorilla or guerilla?");
1232 strcpy( monsters[5][0]->name, "");
1233 strcpy( monsters[5][0]->weapon, "");
1234 monsters[5][0]->strength = 200;
1235 monsters[5][0]->gold = 2500;
1236 monsters[5][0]->exp = 200;
1237 monsters[5][0]->maxhp = 200;
1238 strcpy( monsters[5][0]->death, "");
1240 strcpy( monsters[5][1]->name, "");
1241 strcpy( monsters[5][1]->weapon, "");
1242 monsters[5][1]->strength = 230;
1243 monsters[5][1]->gold = 3215;
1244 monsters[5][1]->exp = 230;
1245 monsters[5][1]->maxhp = 210;
1246 strcpy( monsters[5][1]->death, "");
1248 strcpy( monsters[5][2]->name, "");
1249 strcpy( monsters[5][2]->weapon, "");
1250 monsters[5][2]->strength = 215;
1251 monsters[5][2]->gold = 2750;
1252 monsters[5][2]->exp = 245;
1253 monsters[5][2]->maxhp = 214;
1254 strcpy( monsters[5][2]->death, "");
1256 strcpy( monsters[5][3]->name, "Cheap Bastard");
1257 strcpy( monsters[5][3]->weapon, "Sack of Pennies");
1258 monsters[5][3]->strength = 245;
1259 monsters[5][3]->gold = 1000;
1260 monsters[5][3]->exp = 195;
1261 monsters[5][3]->maxhp = 200;
1262 strcpy( monsters[5][3]->death, "You hear him scream, \"MY COINS!!\" as you run off with his sack.");
1264 strcpy( monsters[5][4]->name, "");
1265 strcpy( monsters[5][4]->weapon, "");
1266 monsters[5][4]->strength = 300;
1267 monsters[5][4]->gold = 4500;
1268 monsters[5][4]->exp = 375;
1269 monsters[5][4]->maxhp = 221;
1270 strcpy( monsters[5][4]->death, "");
1272 strcpy( monsters[5][5]->name, "");
1273 strcpy( monsters[5][5]->weapon, "");
1274 monsters[5][5]->strength = 1;
1275 monsters[5][5]->gold = 1;
1276 monsters[5][5]->exp = 1;
1277 monsters[5][5]->maxhp = 1;
1278 strcpy( monsters[5][5]->death, "");
1280 strcpy( monsters[5][6]->name, "");
1281 strcpy( monsters[5][6]->weapon, "");
1282 monsters[5][6]->strength = 1;
1283 monsters[5][6]->gold = 1;
1284 monsters[5][6]->exp = 1;
1285 monsters[5][6]->maxhp = 1;
1286 strcpy( monsters[5][6]->death, "");
1288 strcpy( monsters[5][7]->name, "");
1289 strcpy( monsters[5][7]->weapon, "");
1290 monsters[5][7]->strength = 1;
1291 monsters[5][7]->gold = 1;
1292 monsters[5][7]->exp = 1;
1293 monsters[5][7]->maxhp = 1;
1294 strcpy( monsters[5][7]->death, "");
1296 strcpy( monsters[5][8]->name, "");
1297 strcpy( monsters[5][8]->weapon, "");
1298 monsters[5][8]->strength = 1;
1299 monsters[5][8]->gold = 1;
1300 monsters[5][8]->exp = 1;
1301 monsters[5][8]->maxhp = 1;
1302 strcpy( monsters[5][8]->death, "");
1304 strcpy( monsters[5][9]->name, "");
1305 strcpy( monsters[5][9]->weapon, "");
1306 monsters[5][9]->strength = 1;
1307 monsters[5][9]->gold = 1;
1308 monsters[5][9]->exp = 1;
1309 monsters[5][9]->maxhp = 1;
1310 strcpy( monsters[5][9]->death, "");
1312 strcpy( monsters[5][10]->name, "");
1313 strcpy( monsters[5][10]->weapon, "");
1314 monsters[5][10]->strength = 1;
1315 monsters[5][10]->gold = 1;
1316 monsters[5][10]->exp = 1;
1317 monsters[5][10]->maxhp = 1;
1318 strcpy( monsters[5][10]->death, "");
1320 strcpy( monsters[5][11]->name, "");
1321 strcpy( monsters[5][11]->weapon, "");
1322 monsters[5][11]->strength = 1;
1323 monsters[5][11]->gold = 1;
1324 monsters[5][11]->exp = 1;
1325 monsters[5][11]->maxhp = 1;
1326 strcpy( monsters[5][11]->death, "");
1328 strcpy( monsters[6][0]->name, "");
1329 strcpy( monsters[6][0]->weapon, "");
1330 monsters[6][0]->strength = 1;
1331 monsters[6][0]->gold = 1;
1332 monsters[6][0]->exp = 1;
1333 monsters[6][0]->maxhp = 1;
1334 strcpy( monsters[6][0]->death, "");
1336 strcpy( monsters[6][1]->name, "");
1337 strcpy( monsters[6][1]->weapon, "");
1338 monsters[6][1]->strength = 1;
1339 monsters[6][1]->gold = 1;
1340 monsters[6][1]->exp = 1;
1341 monsters[6][1]->maxhp = 1;
1342 strcpy( monsters[6][1]->death, "");
1344 strcpy( monsters[6][2]->name, "");
1345 strcpy( monsters[6][2]->weapon, "");
1346 monsters[6][2]->strength = 1;
1347 monsters[6][2]->gold = 1;
1348 monsters[6][2]->exp = 1;
1349 monsters[6][2]->maxhp = 1;
1350 strcpy( monsters[6][2]->death, "");
1352 strcpy( monsters[6][3]->name, "");
1353 strcpy( monsters[6][3]->weapon, "");
1354 monsters[6][3]->strength = 1;
1355 monsters[6][3]->gold = 1;
1356 monsters[6][3]->exp = 1;
1357 monsters[6][3]->maxhp = 1;
1358 strcpy( monsters[6][3]->death, "");
1360 strcpy( monsters[6][4]->name, "");
1361 strcpy( monsters[6][4]->weapon, "");
1362 monsters[6][4]->strength = 1;
1363 monsters[6][4]->gold = 1;
1364 monsters[6][4]->exp = 1;
1365 monsters[6][4]->maxhp = 1;
1366 strcpy( monsters[6][4]->death, "");
1368 strcpy( monsters[6][5]->name, "");
1369 strcpy( monsters[6][5]->weapon, "");
1370 monsters[6][5]->strength = 1;
1371 monsters[6][5]->gold = 1;
1372 monsters[6][5]->exp = 1;
1373 monsters[6][5]->maxhp = 1;
1374 strcpy( monsters[6][5]->death, "");
1376 strcpy( monsters[6][6]->name, "");
1377 strcpy( monsters[6][6]->weapon, "");
1378 monsters[6][6]->strength = 1;
1379 monsters[6][6]->gold = 1;
1380 monsters[6][6]->exp = 1;
1381 monsters[6][6]->maxhp = 1;
1382 strcpy( monsters[6][6]->death, "");
1384 strcpy( monsters[6][7]->name, "");
1385 strcpy( monsters[6][7]->weapon, "");
1386 monsters[6][7]->strength = 1;
1387 monsters[6][7]->gold = 1;
1388 monsters[6][7]->exp = 1;
1389 monsters[6][7]->maxhp = 1;
1390 strcpy( monsters[6][7]->death, "");
1392 strcpy( monsters[6][8]->name, "");
1393 strcpy( monsters[6][8]->weapon, "");
1394 monsters[6][8]->strength = 1;
1395 monsters[6][8]->gold = 1;
1396 monsters[6][8]->exp = 1;
1397 monsters[6][8]->maxhp = 1;
1398 strcpy( monsters[6][8]->death, "");
1400 strcpy( monsters[6][9]->name, "");
1401 strcpy( monsters[6][9]->weapon, "");
1402 monsters[6][9]->strength = 1;
1403 monsters[6][9]->gold = 1;
1404 monsters[6][9]->exp = 1;
1405 monsters[6][9]->maxhp = 1;
1406 strcpy( monsters[6][9]->death, "");
1408 strcpy( monsters[6][10]->name, "");
1409 strcpy( monsters[6][10]->weapon, "");
1410 monsters[6][10]->strength = 1;
1411 monsters[6][10]->gold = 1;
1412 monsters[6][10]->exp = 1;
1413 monsters[6][10]->maxhp = 1;
1414 strcpy( monsters[6][10]->death, "");
1416 strcpy( monsters[6][11]->name, "");
1417 strcpy( monsters[6][11]->weapon, "");
1418 monsters[6][11]->strength = 1;
1419 monsters[6][11]->gold = 1;
1420 monsters[6][11]->exp = 1;
1421 monsters[6][11]->maxhp = 1;
1422 strcpy( monsters[6][11]->death, "");
1424 strcpy( monsters[7][0]->name, "");
1425 strcpy( monsters[7][0]->weapon, "");
1426 monsters[7][0]->strength = 1;
1427 monsters[7][0]->gold = 1;
1428 monsters[7][0]->exp = 1;
1429 monsters[7][0]->maxhp = 1;
1430 strcpy( monsters[7][0]->death, "");
1432 strcpy( monsters[7][1]->name, "");
1433 strcpy( monsters[7][1]->weapon, "");
1434 monsters[7][1]->strength = 1;
1435 monsters[7][1]->gold = 1;
1436 monsters[7][1]->exp = 1;
1437 monsters[7][1]->maxhp = 1;
1438 strcpy( monsters[7][1]->death, "");
1440 strcpy( monsters[7][2]->name, "");
1441 strcpy( monsters[7][2]->weapon, "");
1442 monsters[7][2]->strength = 1;
1443 monsters[7][2]->gold = 1;
1444 monsters[7][2]->exp = 1;
1445 monsters[7][2]->maxhp = 1;
1446 strcpy( monsters[7][2]->death, "");
1448 strcpy( monsters[7][3]->name, "");
1449 strcpy( monsters[7][3]->weapon, "");
1450 monsters[7][3]->strength = 1;
1451 monsters[7][3]->gold = 1;
1452 monsters[7][3]->exp = 1;
1453 monsters[7][3]->maxhp = 1;
1454 strcpy( monsters[7][3]->death, "");
1456 strcpy( monsters[7][4]->name, "");
1457 strcpy( monsters[7][4]->weapon, "");
1458 monsters[7][4]->strength = 1;
1459 monsters[7][4]->gold = 1;
1460 monsters[7][4]->exp = 1;
1461 monsters[7][4]->maxhp = 1;
1462 strcpy( monsters[7][4]->death, "");
1464 strcpy( monsters[7][5]->name, "");
1465 strcpy( monsters[7][5]->weapon, "");
1466 monsters[7][5]->strength = 1;
1467 monsters[7][5]->gold = 1;
1468 monsters[7][5]->exp = 1;
1469 monsters[7][5]->maxhp = 1;
1470 strcpy( monsters[7][5]->death, "");
1472 strcpy( monsters[7][6]->name, "");
1473 strcpy( monsters[7][6]->weapon, "");
1474 monsters[7][6]->strength = 1;
1475 monsters[7][6]->gold = 1;
1476 monsters[7][6]->exp = 1;
1477 monsters[7][6]->maxhp = 1;
1478 strcpy( monsters[7][6]->death, "");
1480 strcpy( monsters[7][7]->name, "");
1481 strcpy( monsters[7][7]->weapon, "");
1482 monsters[7][7]->strength = 1;
1483 monsters[7][7]->gold = 1;
1484 monsters[7][7]->exp = 1;
1485 monsters[7][7]->maxhp = 1;
1486 strcpy( monsters[7][7]->death, "");
1488 strcpy( monsters[7][8]->name, "");
1489 strcpy( monsters[7][8]->weapon, "");
1490 monsters[7][8]->strength = 1;
1491 monsters[7][8]->gold = 1;
1492 monsters[7][8]->exp = 1;
1493 monsters[7][8]->maxhp = 1;
1494 strcpy( monsters[7][8]->death, "");
1496 strcpy( monsters[7][9]->name, "");
1497 strcpy( monsters[7][9]->weapon, "");
1498 monsters[7][9]->strength = 1;
1499 monsters[7][9]->gold = 1;
1500 monsters[7][9]->exp = 1;
1501 monsters[7][9]->maxhp = 1;
1502 strcpy( monsters[7][9]->death, "");
1504 strcpy( monsters[7][10]->name, "");
1505 strcpy( monsters[7][10]->weapon, "");
1506 monsters[7][10]->strength = 1;
1507 monsters[7][10]->gold = 1;
1508 monsters[7][10]->exp = 1;
1509 monsters[7][10]->maxhp = 1;
1510 strcpy( monsters[7][10]->death, "");
1512 strcpy( monsters[7][11]->name, "");
1513 strcpy( monsters[7][11]->weapon, "");
1514 monsters[7][11]->strength = 1;
1515 monsters[7][11]->gold = 1;
1516 monsters[7][11]->exp = 1;
1517 monsters[7][11]->maxhp = 1;
1518 strcpy( monsters[7][11]->death, "");
1520 strcpy( monsters[8][0]->name, "");
1521 strcpy( monsters[8][0]->weapon, "");
1522 monsters[8][0]->strength = 1;
1523 monsters[8][0]->gold = 1;
1524 monsters[8][0]->exp = 1;
1525 monsters[8][0]->maxhp = 1;
1526 strcpy( monsters[8][0]->death, "");
1528 strcpy( monsters[8][1]->name, "");
1529 strcpy( monsters[8][1]->weapon, "");
1530 monsters[8][1]->strength = 1;
1531 monsters[8][1]->gold = 1;
1532 monsters[8][1]->exp = 1;
1533 monsters[8][1]->maxhp = 1;
1534 strcpy( monsters[8][1]->death, "");
1536 strcpy( monsters[8][2]->name, "");
1537 strcpy( monsters[8][2]->weapon, "");
1538 monsters[8][2]->strength = 1;
1539 monsters[8][2]->gold = 1;
1540 monsters[8][2]->exp = 1;
1541 monsters[8][2]->maxhp = 1;
1542 strcpy( monsters[8][2]->death, "");
1544 strcpy( monsters[8][3]->name, "");
1545 strcpy( monsters[8][3]->weapon, "");
1546 monsters[8][3]->strength = 1;
1547 monsters[8][3]->gold = 1;
1548 monsters[8][3]->exp = 1;
1549 monsters[8][3]->maxhp = 1;
1550 strcpy( monsters[8][3]->death, "");
1552 strcpy( monsters[8][4]->name, "");
1553 strcpy( monsters[8][4]->weapon, "");
1554 monsters[8][4]->strength = 1;
1555 monsters[8][4]->gold = 1;
1556 monsters[8][4]->exp = 1;
1557 monsters[8][4]->maxhp = 1;
1558 strcpy( monsters[8][4]->death, "");
1560 strcpy( monsters[8][5]->name, "");
1561 strcpy( monsters[8][5]->weapon, "");
1562 monsters[8][5]->strength = 1;
1563 monsters[8][5]->gold = 1;
1564 monsters[8][5]->exp = 1;
1565 monsters[8][5]->maxhp = 1;
1566 strcpy( monsters[8][5]->death, "");
1568 strcpy( monsters[8][6]->name, "");
1569 strcpy( monsters[8][6]->weapon, "");
1570 monsters[8][6]->strength = 1;
1571 monsters[8][6]->gold = 1;
1572 monsters[8][6]->exp = 1;
1573 monsters[8][6]->maxhp = 1;
1574 strcpy( monsters[8][6]->death, "");
1576 strcpy( monsters[8][7]->name, "");
1577 strcpy( monsters[8][7]->weapon, "");
1578 monsters[8][7]->strength = 1;
1579 monsters[8][7]->gold = 1;
1580 monsters[8][7]->exp = 1;
1581 monsters[8][7]->maxhp = 1;
1582 strcpy( monsters[8][7]->death, "");
1584 strcpy( monsters[8][8]->name, "");
1585 strcpy( monsters[8][8]->weapon, "");
1586 monsters[8][8]->strength = 1;
1587 monsters[8][8]->gold = 1;
1588 monsters[8][8]->exp = 1;
1589 monsters[8][8]->maxhp = 1;
1590 strcpy( monsters[8][8]->death, "");
1592 strcpy( monsters[8][9]->name, "");
1593 strcpy( monsters[8][9]->weapon, "");
1594 monsters[8][9]->strength = 1;
1595 monsters[8][9]->gold = 1;
1596 monsters[8][9]->exp = 1;
1597 monsters[8][9]->maxhp = 1;
1598 strcpy( monsters[8][9]->death, "");
1600 strcpy( monsters[8][10]->name, "");
1601 strcpy( monsters[8][10]->weapon, "");
1602 monsters[8][10]->strength = 1;
1603 monsters[8][10]->gold = 1;
1604 monsters[8][10]->exp = 1;
1605 monsters[8][10]->maxhp = 1;
1606 strcpy( monsters[8][10]->death, "");
1608 strcpy( monsters[8][11]->name, "");
1609 strcpy( monsters[8][11]->weapon, "");
1610 monsters[8][11]->strength = 1;
1611 monsters[8][11]->gold = 1;
1612 monsters[8][11]->exp = 1;
1613 monsters[8][11]->maxhp = 1;
1614 strcpy( monsters[8][11]->death, "");
1616 strcpy( monsters[9][0]->name, "");
1617 strcpy( monsters[9][0]->weapon, "");
1618 monsters[9][0]->strength = 1;
1619 monsters[9][0]->gold = 1;
1620 monsters[9][0]->exp = 1;
1621 monsters[9][0]->maxhp = 1;
1622 strcpy( monsters[9][0]->death, "");
1624 strcpy( monsters[9][1]->name, "");
1625 strcpy( monsters[9][1]->weapon, "");
1626 monsters[9][1]->strength = 1;
1627 monsters[9][1]->gold = 1;
1628 monsters[9][1]->exp = 1;
1629 monsters[9][1]->maxhp = 1;
1630 strcpy( monsters[9][1]->death, "");
1632 strcpy( monsters[9][2]->name, "");
1633 strcpy( monsters[9][2]->weapon, "");
1634 monsters[9][2]->strength = 1;
1635 monsters[9][2]->gold = 1;
1636 monsters[9][2]->exp = 1;
1637 monsters[9][2]->maxhp = 1;
1638 strcpy( monsters[9][2]->death, "");
1640 strcpy( monsters[9][3]->name, "");
1641 strcpy( monsters[9][3]->weapon, "");
1642 monsters[9][3]->strength = 1;
1643 monsters[9][3]->gold = 1;
1644 monsters[9][3]->exp = 1;
1645 monsters[9][3]->maxhp = 1;
1646 strcpy( monsters[9][3]->death, "");
1648 strcpy( monsters[9][4]->name, "");
1649 strcpy( monsters[9][4]->weapon, "");
1650 monsters[9][4]->strength = 1;
1651 monsters[9][4]->gold = 1;
1652 monsters[9][4]->exp = 1;
1653 monsters[9][4]->maxhp = 1;
1654 strcpy( monsters[9][4]->death, "");
1656 strcpy( monsters[9][5]->name, "");
1657 strcpy( monsters[9][5]->weapon, "");
1658 monsters[9][5]->strength = 1;
1659 monsters[9][5]->gold = 1;
1660 monsters[9][5]->exp = 1;
1661 monsters[9][5]->maxhp = 1;
1662 strcpy( monsters[9][5]->death, "");
1664 strcpy( monsters[9][6]->name, "");
1665 strcpy( monsters[9][6]->weapon, "");
1666 monsters[9][6]->strength = 1;
1667 monsters[9][6]->gold = 1;
1668 monsters[9][6]->exp = 1;
1669 monsters[9][6]->maxhp = 1;
1670 strcpy( monsters[9][6]->death, "");
1672 strcpy( monsters[9][7]->name, "");
1673 strcpy( monsters[9][7]->weapon, "");
1674 monsters[9][7]->strength = 1;
1675 monsters[9][7]->gold = 1;
1676 monsters[9][7]->exp = 1;
1677 monsters[9][7]->maxhp = 1;
1678 strcpy( monsters[9][7]->death, "");
1680 strcpy( monsters[9][8]->name, "");
1681 strcpy( monsters[9][8]->weapon, "");
1682 monsters[9][8]->strength = 1;
1683 monsters[9][8]->gold = 1;
1684 monsters[9][8]->exp = 1;
1685 monsters[9][8]->maxhp = 1;
1686 strcpy( monsters[9][8]->death, "");
1688 strcpy( monsters[9][9]->name, "");
1689 strcpy( monsters[9][9]->weapon, "");
1690 monsters[9][9]->strength = 1;
1691 monsters[9][9]->gold = 1;
1692 monsters[9][9]->exp = 1;
1693 monsters[9][9]->maxhp = 1;
1694 strcpy( monsters[9][9]->death, "");
1696 strcpy( monsters[9][10]->name, "");
1697 strcpy( monsters[9][10]->weapon, "");
1698 monsters[9][10]->strength = 1;
1699 monsters[9][10]->gold = 1;
1700 monsters[9][10]->exp = 1;
1701 monsters[9][10]->maxhp = 1;
1702 strcpy( monsters[9][10]->death, "");
1704 strcpy( monsters[9][11]->name, "");
1705 strcpy( monsters[9][11]->weapon, "");
1706 monsters[9][11]->strength = 1;
1707 monsters[9][11]->gold = 1;
1708 monsters[9][11]->exp = 1;
1709 monsters[9][11]->maxhp = 1;
1710 strcpy( monsters[9][11]->death, "");
1712 strcpy( monsters[10][0]->name, "");
1713 strcpy( monsters[10][0]->weapon, "");
1714 monsters[10][0]->strength = 1;
1715 monsters[10][0]->gold = 1;
1716 monsters[10][0]->exp = 1;
1717 monsters[10][0]->maxhp = 1;
1718 strcpy( monsters[10][0]->death, "");
1720 strcpy( monsters[10][1]->name, "");
1721 strcpy( monsters[10][1]->weapon, "");
1722 monsters[10][1]->strength = 1;
1723 monsters[10][1]->gold = 1;
1724 monsters[10][1]->exp = 1;
1725 monsters[10][1]->maxhp = 1;
1726 strcpy( monsters[10][1]->death, "");
1728 strcpy( monsters[10][2]->name, "");
1729 strcpy( monsters[10][2]->weapon, "");
1730 monsters[10][2]->strength = 1;
1731 monsters[10][2]->gold = 1;
1732 monsters[10][2]->exp = 1;
1733 monsters[10][2]->maxhp = 1;
1734 strcpy( monsters[10][2]->death, "");
1736 strcpy( monsters[10][3]->name, "");
1737 strcpy( monsters[10][3]->weapon, "");
1738 monsters[10][3]->strength = 1;
1739 monsters[10][3]->gold = 1;
1740 monsters[10][3]->exp = 1;
1741 monsters[10][3]->maxhp = 1;
1742 strcpy( monsters[10][3]->death, "");
1744 strcpy( monsters[10][4]->name, "");
1745 strcpy( monsters[10][4]->weapon, "");
1746 monsters[10][4]->strength = 1;
1747 monsters[10][4]->gold = 1;
1748 monsters[10][4]->exp = 1;
1749 monsters[10][4]->maxhp = 1;
1750 strcpy( monsters[10][4]->death, "");
1752 strcpy( monsters[10][5]->name, "");
1753 strcpy( monsters[10][5]->weapon, "");
1754 monsters[10][5]->strength = 1;
1755 monsters[10][5]->gold = 1;
1756 monsters[10][5]->exp = 1;
1757 monsters[10][5]->maxhp = 1;
1758 strcpy( monsters[10][5]->death, "");
1760 strcpy( monsters[10][6]->name, "");
1761 strcpy( monsters[10][6]->weapon, "");
1762 monsters[10][6]->strength = 1;
1763 monsters[10][6]->gold = 1;
1764 monsters[10][6]->exp = 1;
1765 monsters[10][6]->maxhp = 1;
1766 strcpy( monsters[10][6]->death, "");
1768 strcpy( monsters[10][7]->name, "");
1769 strcpy( monsters[10][7]->weapon, "");
1770 monsters[10][7]->strength = 1;
1771 monsters[10][7]->gold = 1;
1772 monsters[10][7]->exp = 1;
1773 monsters[10][7]->maxhp = 1;
1774 strcpy( monsters[10][7]->death, "");
1776 strcpy( monsters[10][8]->name, "");
1777 strcpy( monsters[10][8]->weapon, "");
1778 monsters[10][8]->strength = 1;
1779 monsters[10][8]->gold = 1;
1780 monsters[10][8]->exp = 1;
1781 monsters[10][8]->maxhp = 1;
1782 strcpy( monsters[10][8]->death, "");
1784 strcpy( monsters[10][9]->name, "");
1785 strcpy( monsters[10][9]->weapon, "");
1786 monsters[10][9]->strength = 1;
1787 monsters[10][9]->gold = 1;
1788 monsters[10][9]->exp = 1;
1789 monsters[10][9]->maxhp = 1;
1790 strcpy( monsters[10][9]->death, "");
1792 strcpy( monsters[10][10]->name, "");
1793 strcpy( monsters[10][10]->weapon, "");
1794 monsters[10][10]->strength = 1;
1795 monsters[10][10]->gold = 1;
1796 monsters[10][10]->exp = 1;
1797 monsters[10][10]->maxhp = 1;
1798 strcpy( monsters[10][10]->death, "");
1800 strcpy( monsters[10][11]->name, "");
1801 strcpy( monsters[10][11]->weapon, "");
1802 monsters[10][11]->strength = 1;
1803 monsters[10][11]->gold = 1;
1804 monsters[10][11]->exp = 1;
1805 monsters[10][11]->maxhp = 1;
1806 strcpy( monsters[10][11]->death, "");
1808 strcpy( monsters[11][0]->name, "");
1809 strcpy( monsters[11][0]->weapon, "");
1810 monsters[11][0]->strength = 1;
1811 monsters[11][0]->gold = 1;
1812 monsters[11][0]->exp = 1;
1813 monsters[11][0]->maxhp = 1;
1814 strcpy( monsters[11][0]->death, "");
1816 strcpy( monsters[11][1]->name, "");
1817 strcpy( monsters[11][1]->weapon, "");
1818 monsters[11][1]->strength = 1;
1819 monsters[11][1]->gold = 1;
1820 monsters[11][1]->exp = 1;
1821 monsters[11][1]->maxhp = 1;
1822 strcpy( monsters[11][1]->death, "");
1824 strcpy( monsters[11][2]->name, "");
1825 strcpy( monsters[11][2]->weapon, "");
1826 monsters[11][2]->strength = 1;
1827 monsters[11][2]->gold = 1;
1828 monsters[11][2]->exp = 1;
1829 monsters[11][2]->maxhp = 1;
1830 strcpy( monsters[11][2]->death, "");
1832 strcpy( monsters[11][3]->name, "");
1833 strcpy( monsters[11][3]->weapon, "");
1834 monsters[11][3]->strength = 1;
1835 monsters[11][3]->gold = 1;
1836 monsters[11][3]->exp = 1;
1837 monsters[11][3]->maxhp = 1;
1838 strcpy( monsters[11][3]->death, "");
1840 strcpy( monsters[11][4]->name, "");
1841 strcpy( monsters[11][4]->weapon, "");
1842 monsters[11][4]->strength = 1;
1843 monsters[11][4]->gold = 1;
1844 monsters[11][4]->exp = 1;
1845 monsters[11][4]->maxhp = 1;
1846 strcpy( monsters[11][4]->death, "");
1848 strcpy( monsters[11][5]->name, "");
1849 strcpy( monsters[11][5]->weapon, "");
1850 monsters[11][5]->strength = 1;
1851 monsters[11][5]->gold = 1;
1852 monsters[11][5]->exp = 1;
1853 monsters[11][5]->maxhp = 1;
1854 strcpy( monsters[11][5]->death, "");
1856 strcpy( monsters[11][6]->name, "");
1857 strcpy( monsters[11][6]->weapon, "");
1858 monsters[11][6]->strength = 1;
1859 monsters[11][6]->gold = 1;
1860 monsters[11][6]->exp = 1;
1861 monsters[11][6]->maxhp = 1;
1862 strcpy( monsters[11][6]->death, "");
1864 strcpy( monsters[11][7]->name, "");
1865 strcpy( monsters[11][7]->weapon, "");
1866 monsters[11][7]->strength = 1;
1867 monsters[11][7]->gold = 1;
1868 monsters[11][7]->exp = 1;
1869 monsters[11][7]->maxhp = 1;
1870 strcpy( monsters[11][7]->death, "");
1872 strcpy( monsters[11][8]->name, "");
1873 strcpy( monsters[11][8]->weapon, "");
1874 monsters[11][8]->strength = 1;
1875 monsters[11][8]->gold = 1;
1876 monsters[11][8]->exp = 1;
1877 monsters[11][8]->maxhp = 1;
1878 strcpy( monsters[11][8]->death, "");
1880 strcpy( monsters[11][9]->name, "");
1881 strcpy( monsters[11][9]->weapon, "");
1882 monsters[11][9]->strength = 1;
1883 monsters[11][9]->gold = 1;
1884 monsters[11][9]->exp = 1;
1885 monsters[11][9]->maxhp = 1;
1886 strcpy( monsters[11][9]->death, "");
1888 strcpy( monsters[11][10]->name, "");
1889 strcpy( monsters[11][10]->weapon, "");
1890 monsters[11][10]->strength = 1;
1891 monsters[11][10]->gold = 1;
1892 monsters[11][10]->exp = 1;
1893 monsters[11][10]->maxhp = 1;
1894 strcpy( monsters[11][10]->death, "");
1896 strcpy( monsters[11][11]->name, "");
1897 strcpy( monsters[11][11]->weapon, "");
1898 monsters[11][11]->strength = 1;
1899 monsters[11][11]->gold = 1;
1900 monsters[11][11]->exp = 1;
1901 monsters[11][11]->maxhp = 1;
1902 strcpy( monsters[11][11]->death, "");
1907 void delete_monsters ()
1909 for ( int x
= 0 ; x
< LEVELS
; x
++)
1910 for ( int y
= 0 ; y
< MONSTERS
; y
++)
1912 delete monsters
[ x
][ y
];
1915 void delete_masters ()
1917 for ( int x
= 0 ; x
< LEVELS
; x
++)
1922 void display_monster ( char * u
)
1926 aClient
* user
= find ( u
);
1927 Player
* ni
= user
-> stats
;
1929 notice ( s_GameServ
, u
, "Your Hitpoints: \ 2 %d \ 2 ", ni
-> hp
);
1930 notice ( s_GameServ
, u
, " %s 's Hitpoints: \ 2 %d \ 2 ", ni
-> fight
-> name
, ni
-> fight
-> hp
);
1931 notice ( s_GameServ
, u
, "Here are your commands:" );
1932 notice ( s_GameServ
, u
, "/msg %S attack" );
1933 notice ( s_GameServ
, u
, "/msg %S run" );
1934 notice ( s_GameServ
, u
, "What will you do?" );
1938 void display_players ( char * u
)
1942 aClient
* ni
= find ( u
);
1944 aClient
* battle
= ni
-> stats
-> battle
;
1946 notice ( s_GameServ
, u
, "Your Hitpoints: \ 2 %d \ 2 ", ni
-> stats
-> hp
);
1947 notice ( s_GameServ
, u
, " %s 's Hitpoints: \ 2 %d \ 2 ", battle
-> getNick (),
1950 notice ( s_GameServ
, u
, "Here are your commands:" );
1951 notice ( s_GameServ
, u
, "/msg %S attack" );
1952 notice ( s_GameServ
, u
, "/msg %S run" );
1953 notice ( s_GameServ
, u
, "What will you do?" );
1956 void display_players ( aClient
* user
)
1958 char * u
= user
-> getNick ();
1959 if ( is_playing ( user
) && player_fight ( user
))
1961 aClient
* battle
= user
-> stats
-> battle
;
1962 notice ( s_GameServ
, u
, "Your Hitpoints: \ 2 %d \ 2 ", user
-> stats
-> hp
);
1963 notice ( s_GameServ
, u
, " %s 's Hitpoints: \ 2 %d \ 2 ", battle
-> getNick (), battle
-> stats
-> hp
);
1964 notice ( s_GameServ
, u
, "Here are your commands:" );
1965 notice ( s_GameServ
, u
, "/msg %S attack" );
1966 notice ( s_GameServ
, u
, "/msg %S run" );
1967 notice ( s_GameServ
, u
, "What will you do?" );
1972 bool is_playing ( char * u
)
1975 if (!( user
= find ( u
)))
1981 return user
-> stats
!= NULL
;
1985 bool is_playing ( aClient
* user
)
1987 return user
-> stats
!= NULL
&& ( stricmp ( user
-> getNick (), "!NULL!" ) != 0 );
1990 bool is_fighting ( char * u
)
1994 if (!( user
= find ( u
)))
1998 else if ( user
-> stats
)
2000 return user
-> stats
-> fight
!= NULL
|| user
-> stats
-> battle
!= NULL
2001 || user
-> stats
-> master
!= NULL
;
2006 bool is_fighting ( aClient
* user
)
2008 if (! is_playing ( user
))
2011 return ( user
-> stats
-> fight
!= NULL
|| user
-> stats
-> battle
!= NULL
|| user
-> stats
-> master
!= NULL
);
2014 bool player_fight ( char * u
)
2018 if (!( user
= find ( u
)))
2020 else if ( user
-> stats
)
2021 return user
-> stats
-> battle
!= NULL
;
2025 bool player_fight ( aClient
* user
)
2027 if (! is_fighting ( user
))
2030 return user
-> stats
-> battle
!= NULL
;
2033 bool master_fight ( char * u
)
2037 if (!( user
= find ( u
)))
2039 else if ( user
-> stats
)
2040 return user
-> stats
-> master
!= NULL
;
2044 bool master_fight ( aClient
* user
)
2046 if (! is_playing ( user
))
2049 return user
-> stats
-> master
!= NULL
;
2052 void do_fight ( char * u
)
2054 aClient
* ni
, * battle
;
2056 char * nick
= strtok ( NULL
, " " );
2060 notice ( s_GameServ
, u
, "SYNTAX: /msg %S FIGHT PLAYER" );
2062 else if (!( ni
= find ( u
)))
2064 notice ( s_GameServ
, u
, "Fatal error. Contact a(n) %S admin. buf: %s " , strtok ( NULL
, "" ));
2067 else if (!( battle
= find ( nick
)))
2069 notice ( s_GameServ
, u
, "You can't attack %s while they aren't playing!" , nick
);
2072 else if (! is_playing ( ni
))
2074 notice ( s_GameServ
, u
, "You are not playing!" );
2078 * Offline fighting not implemented yet.
2079 * else if (!(fight = finduser(nick)))
2081 * ni->stats->battle = battle;
2082 * battle->battle = ni;
2084 * battle->yourturn = 0;
2085 * notice(s_GameServ, u, "You decide to fight %s while they're not online!",
2086 * battle->getNick());
2087 * display_players(u);
2090 else if (! isAlive ( ni
-> stats
))
2092 notice ( s_GameServ
, u
, "You are dead. Wait until tomorrow to fight others!" );
2095 else if ( player_fight ( battle
))
2097 notice ( s_GameServ
, u
, " %s is fighting %s already!" , battle
-> stats
-> name
, battle
-> stats
-> battle
-> stats
-> name
);
2100 else if ( is_fighting ( battle
))
2102 notice ( s_GameServ
, u
, " %s is fighting %s already!" , battle
-> stats
-> name
, battle
-> stats
-> fight
-> name
);
2105 else if ( is_playing ( ni
) && is_playing ( battle
) && stricmp ( ni
-> stats
-> name
, battle
-> stats
-> name
) != 0 )
2107 // Set your battle pointer to the other player
2108 ni
-> stats
-> battle
= battle
;
2110 // Set the other player's battle pointer to you
2111 battle
-> stats
-> battle
= ni
;
2113 // The initiator gets the first move (perhaps this should be 50/50)
2114 setYourTurn ( ni
-> stats
);
2115 clearYourTurn ( battle
-> stats
);
2117 // Initiate Battle sequence!
2118 notice ( s_GameServ
, u
, "You challenge %s to an online duel!" , battle
-> getNick ());
2119 notice ( s_GameServ
, battle
-> getNick (), " %s has challenged you to an online duel!" , u
);
2120 notice ( s_GameServ
, battle
-> getNick (), " %s gets to go first because he initiated!" , u
);
2121 notice ( s_GameServ
, battle
-> getNick (), "Please wait while %s decides what to do." , u
);
2125 void do_use ( char * u
)
2130 char * item
= strtok ( NULL
, " " );
2134 notice ( s_GameServ
, u
, "SYNTAX: USE ITEM" );
2135 notice ( s_GameServ
, u
, "Type /msg %S HELP USE for more information." );
2138 else if (!( user
= find ( u
)))
2140 notice ( s_GameServ
, u
, "Fatal Error in do_use. Contact a(n) %S Admin" );
2143 else if (! is_playing ( user
))
2145 notice ( s_GameServ
, u
, "You must be playing to use items!" );
2149 p
= & user
-> stats
-> inventory
;
2151 if ( stricmp ( item
, "HEALTH" ) == 0 )
2153 if ( p
-> Healing () <= 0 )
2155 notice ( s_GameServ
, u
, "You are out of Health Potions!" );
2158 int oldhealth
= user
-> stats
-> hp
;
2159 notice ( s_GameServ
, u
, "You hastiliy gulp down the flask of cool life-giving waters." );
2160 notice ( s_GameServ
, u
, "Rejuvination spreads throughout your body." );
2161 user
-> stats
-> hp
+= ( 10 * user
-> stats
-> level
) + ( rand () % 10 ) * user
-> stats
-> level
;
2162 notice ( s_GameServ
, u
, "You gain %d HP!" , user
-> stats
-> hp
- oldhealth
);
2165 else if ( stricmp ( item
, "STRENGTH" ) == 0 )
2167 if ( p
-> Strength () <= 0 )
2169 notice ( s_GameServ
, u
, "You are out of Strength Potions!" );
2172 int oldstrength
= user
-> stats
-> strength
;
2173 notice ( s_GameServ
, u
, "As you grip the flask containing pure power, you feel adrenaline coarse through your veins!" );
2174 notice ( s_GameServ
, u
, "In one swallow you drink the potion and feel your muscle fibers bulging andgrowing!" );
2175 user
-> stats
-> strength
+= 1 + rand () % 2 ; // 1 - 2 Strength Added
2176 notice ( s_GameServ
, u
, "You gain %d Strength points!" , user
-> stats
-> strength
- oldstrength
);
2179 else if ( stricmp ( item
, "DEFENSE" ) == 0 )
2181 if ( p
-> Defense () <= 0 )
2183 notice ( s_GameServ
, u
, "You are out of Defense Potions!" );
2186 int olddefense
= user
-> stats
-> defense
;
2187 notice ( s_GameServ
, u
, "You drink the foul tasting viscous liquid while pinching your nose in disgust." );
2188 notice ( s_GameServ
, u
, "It tasted bad, but you feel like you are unbeatable!" );
2189 user
-> stats
-> defense
+= 1 + rand () % 2 ; // 1 - 2 Defense Added
2190 notice ( s_GameServ
, u
, "You gain %d Defense points!" , user
-> stats
-> defense
- olddefense
);
2193 else if ( stricmp ( item
, "HP" ) == 0 )
2197 notice ( s_GameServ
, u
, "You are out of HP Potions!" );
2200 int oldHP
= user
-> stats
-> maxhp
;
2201 notice ( s_GameServ
, u
, "You feel your life growing longer as you drink the green glowing liquid." );
2202 user
-> stats
-> maxhp
+= 1 + rand () % 5 ; // 1 - 5 Maxhp
2203 notice ( s_GameServ
, u
, "You gain %d Maximum hit points!" , user
-> stats
-> maxhp
- oldHP
);
2208 notice ( s_GameServ
, u
, "SYNTAX: /msg %S USE {HEALTH | STRENGTH | DEFENSE}" );
2212 end_turn ( user
); // If they're fighting, end their turn
2214 void do_run ( char * u
)
2217 Player
* p
, * p2
= NULL
;
2219 if (!( user
= find ( u
)))
2221 notice ( s_GameServ
, u
, "Couldn't find you. Error. Contact a %S admin" );
2228 p2
= p
-> battle
-> stats
;
2230 if (! is_fighting ( user
))
2231 notice ( s_GameServ
, u
, "You run in place... try fighting next time." );
2232 else if (! player_fight ( user
) && ! master_fight ( user
))
2234 notice ( s_GameServ
, u
, "You run away from \ 2 %s \ 2 like a little baby!", p
-> fight
-> name
);
2238 else if ( player_fight ( user
) && isYourTurn ( p
))
2240 notice ( s_GameServ
, u
, "You run away from \ 2 %s \ 2 like a little baby!", p2
-> name
);
2241 notice ( s_GameServ
, p
-> battle
-> getNick (), "\ 2 %s \ 2 ran away from you like a little baby!", p
-> name
);
2244 else if ( player_fight ( user
) && ! isYourTurn ( p
))
2246 notice ( s_GameServ
, u
, "It is not your turn. Please wait until \ 2 %s \ 2 decides what to do.", p2
-> name
);
2248 else if ( master_fight ( user
))
2250 notice ( s_GameServ
, u
, "You cannot run from \ 2 %s \ 2 ! FIGHT!", p
-> master
-> name
);
2255 void end_turn ( aClient
* user
)
2257 char * nick
, * u
= user
-> getNick ();
2262 nick
= new char [ strlen ( user
-> getNick ()) + 1 ];
2264 if (! user
|| ! is_playing ( user
) || ! is_fighting ( user
))
2267 if (! player_fight ( user
) && ! master_fight ( user
))
2268 fight
= user
-> stats
-> fight
;
2270 fight
= user
-> stats
-> master
;
2271 battle
= user
-> stats
-> battle
;
2273 if (! player_fight ( user
))
2276 mhit
= ( fight
-> strength
/ 2 ) +
2277 ( rand () % ( fight
-> strength
/ 2 ) - ( user
-> stats
-> defense
+
2278 arbonus
[ user
-> stats
-> armor
]));
2283 mhit
= ((( battle
-> stats
-> strength
+ webonus
[ battle
-> stats
-> weapon
]) / 2 ) +
2284 ( rand () % (( battle
-> stats
-> strength
+ webonus
[ battle
-> stats
-> weapon
])) / 2 ) -
2285 ( user
-> stats
-> defense
+ arbonus
[ user
-> stats
-> armor
]));
2287 if (! player_fight ( user
))
2292 notice ( s_GameServ
, u
, "\1f %s \1f attacks with their \1f %s \1f for \ 2 %d \ 2 damage!",
2293 fight
-> name
, fight
-> weapon
, mhit
);
2296 notice ( s_GameServ
, u
, " %s completely misses you!" , fight
-> name
);
2298 if ( mhit
>= user
-> stats
-> hp
)
2300 if (! master_fight ( user
))
2302 notice ( s_GameServ
, u
, "You have been \ 2 \1f killed\1f \ 2 by %s !" , fight
-> name
);
2303 notice ( s_GameServ
, u
, "You lose all gold on hand and lose 10 percent " \
2304 "of your experience!" );
2305 user
-> stats
-> gold
= 0 ;
2306 user
-> stats
-> exp
-= ( long int )( user
-> stats
-> exp
* .10 );
2307 user
-> stats
-> fight
= NULL
;
2308 clearAlive ( user
-> stats
);
2313 notice ( s_GameServ
, u
, " %s has bested you! You will have to wait " \
2314 "until tomorrow to try again" , user
-> stats
-> master
-> name
);
2315 user
-> stats
-> fight
= NULL
;
2316 user
-> stats
-> master
= NULL
;
2323 user
-> stats
-> hp
-= mhit
;
2330 clearYourTurn ( user
-> stats
);
2331 setYourTurn ( battle
-> stats
);
2332 display_players ( battle
);
2338 void do_attack ( char * u
)
2341 aClient
* ni
, * battle
; // The player and perhaps the player they're fighting
2342 Monster
* fight
; // The monster they may be fighting
2344 if (!( ni
= find ( u
)))
2346 notice ( s_GameServ
, u
, "Fatal error in do_attack. Contact a(n) %S admin for help." );
2349 else if (! is_playing ( ni
))
2351 notice ( s_GameServ
, u
, "You're not playing!" );
2354 else if (! is_fighting ( ni
))
2356 notice ( s_GameServ
, u
, "You're not in battle!" );
2361 if (! ni
-> stats
-> master
) // This is not a master fight
2362 fight
= ni
-> stats
-> fight
; // Monster Could be NULL
2363 else // This IS a master fight
2364 fight
= ni
-> stats
-> master
; // Master Could be NULL
2366 battle
= ni
-> stats
-> battle
; // Player Could be NULL
2368 // One has to be !NULL based on the previous else if
2369 // We wouldn't be here if they were all NULL
2372 if (! player_fight ( ni
))
2375 hit
= (( ni
-> stats
-> strength
+ webonus
[ ni
-> stats
-> weapon
]) / 2 ) +
2376 ( rand () % (( ni
-> stats
-> strength
+ webonus
[ ni
-> stats
-> weapon
]) / 2 ));
2379 mhit
= ( fight
-> strength
/ 2 ) +
2380 ( rand () % ( fight
-> strength
/ 2 ) - ( ni
-> stats
-> defense
+
2381 arbonus
[ ni
-> stats
-> armor
]));
2386 mhit
= ((( battle
-> stats
-> strength
+ webonus
[ battle
-> stats
-> weapon
]) / 2 ) +
2387 ( rand () % (( battle
-> stats
-> strength
+ webonus
[ battle
-> stats
-> weapon
])) / 2 ) -
2388 ( ni
-> stats
-> defense
+ arbonus
[ ni
-> stats
-> armor
]));
2391 hit
= ((( ni
-> stats
-> strength
+ webonus
[ ni
-> stats
-> weapon
]) / 2 ) +
2392 ( rand () % (( ni
-> stats
-> strength
+ webonus
[ ni
-> stats
-> weapon
])) / 2 ) -
2393 ( battle
-> stats
-> defense
+ arbonus
[ battle
-> stats
-> armor
]));
2396 if (! player_fight ( ni
))
2399 notice ( s_GameServ
, u
, "You attack \1f %s \1f for \ 2 %d \ 2 points!", fight
-> name
, hit
);
2401 notice ( s_GameServ
, u
, "You miss \1f %s \1f completely!", fight
-> name
);
2403 if ( hit
>= fight
-> hp
)
2405 if ( master_fight ( ni
))
2406 notice ( s_GameServ
, u
, "You have bested %s !" , fight
-> name
);
2408 notice ( s_GameServ
, u
, "You have killed \ 2 %s \ 2 !", fight
-> name
);
2410 notice ( s_GameServ
, u
, " %s " , fight
-> death
);
2411 notice ( s_GameServ
, u
, "You recieve \ 2 %d \ 2 experience and \ 2 %d \ 2 gold!",
2412 fight
-> exp
, fight
-> gold
);
2414 // If your new experience (or gold) will be greater than 2 billion,
2415 // then set your exp to 2bil. (2 billion max)... otherwise add them.
2416 // This could be a problem with overflowing out of the sign bit.
2417 // Unsigned long int maybe? Leave it for now.
2418 ni
-> stats
-> exp
= ( ( ni
-> stats
-> exp
+ fight
-> exp
) > 2000000000 ? 2000000000 :
2419 ni
-> stats
-> exp
+ fight
-> exp
);
2421 ni
-> stats
-> gold
= ( ni
-> stats
-> gold
+ fight
-> gold
> 2000000000 ? 2000000000 :
2422 ni
-> stats
-> gold
+ fight
-> gold
);
2425 if ( master_fight ( ni
))
2427 notice ( s_GameServ
, u
, "You are now level %d !" , ni
-> stats
-> level
+ 1 );
2428 notice ( s_GameServ
, u
, "You gain %d Strength, and %d Defense points!" ,
2429 strbonus
[ ni
-> stats
-> level
- 1 ], defbonus
[ ni
-> stats
-> level
- 1 ]);
2431 // Increase your level
2434 // Increase your maximum hit points
2435 ni
-> stats
-> maxhp
+= hpbonus
[ ni
-> stats
-> level
- 1 ];
2437 // Heal the player by setting hp to their max
2438 ni
-> stats
-> hp
= ni
-> stats
-> maxhp
;
2440 // Add to your strength
2441 ni
-> stats
-> strength
+= strbonus
[ ni
-> stats
-> level
- 1 ];
2443 // Add to your defensive power
2444 ni
-> stats
-> defense
+= defbonus
[ ni
-> stats
-> level
- 1 ];
2446 // Clear the pointer for your master
2447 ni
-> stats
-> master
= NULL
;
2450 // They're dead so remove the pointer
2451 delete ni
-> stats
-> fight
;
2452 ni
-> stats
-> fight
= NULL
;
2453 ni
-> stats
-> master
= NULL
;
2463 notice ( s_GameServ
, u
, "\1f %s \1f attacks with their \1f %s \1f for \ 2 %d \ 2 damage!",
2464 fight
-> name
, fight
-> weapon
, mhit
);
2467 notice ( s_GameServ
, u
, " %s completely misses you!" , fight
-> name
);
2469 if ( mhit
>= ni
-> stats
-> hp
)
2471 if (! master_fight ( ni
))
2473 notice ( s_GameServ
, u
, "You have been \ 2 \1f killed\1f \ 2 by %s !" , fight
-> name
);
2474 notice ( s_GameServ
, u
, "You lose all gold on hand and lose 10 percent " \
2475 "of your experience!" );
2476 ni
-> stats
-> gold
= 0 ;
2477 ni
-> stats
-> exp
-= ( long int )( ni
-> stats
-> exp
* .10 );
2478 ni
-> stats
-> fight
= NULL
;
2479 clearAlive ( ni
-> stats
);
2484 notice ( s_GameServ
, u
, " %s has bested you! You will have to wait " \
2485 "until tomorrow to try again" , ni
-> stats
-> master
-> name
);
2486 ni
-> stats
-> fight
= NULL
;
2487 ni
-> stats
-> master
= NULL
;
2494 ni
-> stats
-> hp
-= mhit
;
2500 else if ( player_fight ( ni
))
2502 /* Offline fighting not available yet
2503 if (!(online = finduser(ni->stats->battle->nick)) || !nick_identified(online))
2506 notice(s_GameServ, u, "You attack \1f %s\1f for \ 2 %d\ 2 points!", battle->nick, hit);
2508 notice(s_GameServ, u, "You miss \1f %s\1f completely!", battle->nick);
2509 if (hit >= battle->stats->hp)
2511 notice(s_GameServ, u, "You have killed \ 2 %s\ 2 !", battle->nick);
2512 * notice(s_GameServ, u, "You recieve \ 2 %d\ 2 experience and \ 2 %ld\ 2 gold!",
2513 (long int)(battle->stats->exp * .10), battle->stats->gold);
2514 if (2000000000 - ni->stats->exp > (long int)(battle->stats->exp * .10))
2516 ni->stats->exp += (long int)(battle->stats->exp * .10);
2517 battle->stats->exp -= (long int)(battle->stats->exp * .10);
2521 battle->stats->exp -= (long int)(battle->stats->exp * .10);
2522 ni->stats->exp = 2000000000;
2525 if (2000000000 - ni->stats->gold > battle->stats->gold)
2527 * ni->stats->gold += battle->stats->gold;
2528 battle->stats->gold = 0;
2532 battle->stats->gold = 2000000000 - ni->stats->gold;
2533 ni->stats->gold = 2000000000;
2535 * ni->stats->battle->stats->alive = 0;
2536 ni->stats->battle->battle = NULL;
2537 ni->stats->battle = NULL;
2543 * battle->stats->hp -= hit;
2546 notice(s_GameServ, u, "\1f %s\1f hits you with their \1f %s\1f for \ 2 %d\ 2 damage!",
2547 battle->nick, weapons[battle->stats->weapon], mhit);
2550 notice(s_GameServ, u, "%s completely misses you!", battle->nick);
2552 if (mhit >= ni->stats->hp)
2554 notice(s_GameServ, u, "You have been \ 2 \1f killed\1f \ 2 by %s!", battle->nick);
2555 if (2000000000 - battle->stats->gold > ni->stats->gold)
2557 notice(s_GameServ, u, "%s took all your gold!", battle->nick);
2558 battle->stats->gold += ni->stats->gold;
2559 * ni->stats->gold = 0;
2563 notice(s_GameServ, u, "You're lucky, %s couldn't carry all your gold.",
2565 ni->stats->gold -= (2000000000 - battle->stats->gold);
2566 notice(s_GameServ, u, "You were left dead with %d gold.",
2567 * (long int)ni->stats->gold);
2568 battle->stats->gold = 2000000000;
2570 ni->stats->battle->battle = NULL;
2571 ni->stats->battle = NULL;
2572 ni->stats->alive = 0;
2578 ni->stats->hp -= mhit;
2584 * end offline fighting */
2586 if ( is_playing ( battle
-> getNick ()))
2588 if (! isYourTurn ( ni
-> stats
))
2590 notice ( s_GameServ
, u
, "Please wait until %s decides what to do!" ,
2596 notice ( s_GameServ
, u
, "You attack \1f %s \1f for \ 2 %d \ 2 points!", battle
-> getNick (), hit
);
2598 notice ( s_GameServ
, battle
-> getNick (), " %s has hit you with their %s for " \
2599 "\ 2 %d \ 2 damage!", u
, weapons
[ ni
-> stats
-> weapon
],
2601 clearYourTurn ( ni
-> stats
);
2602 setYourTurn ( battle
-> stats
);
2603 display_players ( battle
-> getNick ());
2607 notice ( s_GameServ
, u
, "You miss \1f %s \1f completely!", battle
-> getNick ());
2608 notice ( s_GameServ
, battle
-> getNick (), " %s misses you completely!" , u
);
2609 clearYourTurn ( ni
-> stats
);
2610 setYourTurn ( battle
-> stats
);
2611 display_players ( battle
-> getNick ());
2613 if ( hit
>= battle
-> stats
-> hp
)
2615 notice ( s_GameServ
, u
, "You have killed \ 2 %s \ 2 !", battle
-> getNick ());
2616 notice ( s_GameServ
, u
, "You recieve \ 2 %d \ 2 experience and \ 2 %l d\ 2 gold!" ,
2617 ( long int )( battle
-> stats
-> exp
* .10 ), battle
-> stats
-> gold
);
2618 notice ( s_GameServ
, battle
-> getNick (), "You have been killed by \ 2 %s \ 2 !", u
);
2619 battle
-> stats
-> hp
= 0 ;
2620 clearAlive ( battle
-> stats
);
2622 if ( 2000000000 - ni
-> stats
-> exp
> ( long int )( battle
-> stats
-> exp
* .10 ))
2624 ni
-> stats
-> exp
+= ( long int )( battle
-> stats
-> exp
* .10 );
2625 battle
-> stats
-> exp
-= ( long int )( battle
-> stats
-> exp
* .10 );
2629 battle
-> stats
-> exp
-= ( long int )( battle
-> stats
-> exp
* .10 );
2630 ni
-> stats
-> exp
= 2000000000 ;
2633 if ( 2000000000 - ni
-> stats
-> gold
> battle
-> stats
-> gold
)
2635 notice ( s_GameServ
, battle
-> getNick (), "You lose ten percent of experience and " \
2636 "all gold on hand!" );
2637 ni
-> stats
-> gold
+= battle
-> stats
-> gold
;
2638 battle
-> stats
-> gold
= 0 ;
2642 battle
-> stats
-> gold
= 2000000000 - ni
-> stats
-> gold
;
2643 notice ( s_GameServ
, battle
-> getNick (), "You lose ten percent of your experience!" );
2645 notice ( s_GameServ
, battle
-> getNick (), "However, %s could not carry all of your " \
2648 notice ( s_GameServ
, battle
-> getNick (), "Luckily, you still have \ 2 %l d\ 2 gold " \
2649 "left. All is not lost!" , battle
-> stats
-> gold
);
2651 ni
-> stats
-> gold
= 2000000000 ;
2653 battle
-> stats
-> battle
= NULL
;
2654 ni
-> stats
-> battle
= NULL
;
2660 battle
-> stats
-> hp
-= hit
;
2661 clearYourTurn ( ni
-> stats
);
2662 setYourTurn ( battle
-> stats
);
2663 notice ( s_GameServ
, u
, "Please wait while %s decides what to do!" ,
2671 void do_heal ( char * u
)
2674 char * amount
= strtok ( NULL
, " " );
2679 notice ( s_GameServ
, u
, "SYNTAX: /msg %S HEAL {ALL | #}" );
2681 else if (!( ni
= find ( u
)))
2683 notice ( s_GameServ
, u
, "Fatal error. Contact a(n) %S admin. buf: %s " , strtok ( NULL
, "" ));
2686 else if (! is_playing ( ni
))
2688 notice ( s_GameServ
, u
, "You aren't playing!" );
2691 else if (! isAlive ( ni
-> stats
))
2693 notice ( s_GameServ
, u
, "You are dead. Wait until tomorrow for healing." );
2696 else if ( is_fighting ( ni
))
2698 notice ( s_GameServ
, u
, "You can't heal in battle!" );
2700 else if ( ni
-> stats
-> hp
>= ni
-> stats
-> maxhp
)
2702 notice ( s_GameServ
, u
, "You don't need healing!" );
2704 else if ( stricmp ( amount
, "ALL" ) == 0 )
2706 price
= ni
-> stats
-> level
* 3 ;
2707 if ( ni
-> stats
-> gold
< ( ni
-> stats
-> maxhp
- ni
-> stats
-> hp
) * price
)
2709 notice ( s_GameServ
, u
, "Healing \ 2 %d \ 2 points for \ 2 %d \ 2 gold per point.",
2710 ( long int ) ni
-> stats
-> gold
/ price
, price
);
2711 ni
-> stats
-> hp
+= ni
-> stats
-> gold
/ price
;
2712 ni
-> stats
-> gold
%= price
;
2716 notice ( s_GameServ
, u
, "Healing all possible points at \ 2 %d \ 2 gold "\
2717 "per point." , price
);
2718 notice ( s_GameServ
, u
, "\ 2 %d \ 2 points healed for \ 2 %l d\ 2 gold. HP at MAX!" ,
2719 ( ni
-> stats
-> maxhp
- ni
-> stats
-> hp
),
2720 ( price
* ( ni
-> stats
-> maxhp
- ni
-> stats
-> hp
)) );
2721 ni
-> stats
-> gold
-= price
* ( ni
-> stats
-> maxhp
- ni
-> stats
-> hp
);
2722 ni
-> stats
-> hp
= ni
-> stats
-> maxhp
;
2725 else if ( isstringnum ( amount
))
2727 num
= stringtoint ( amount
);
2728 price
= ni
-> stats
-> level
* 3 ;
2729 if ( ni
-> stats
-> gold
< price
* num
)
2731 notice ( s_GameServ
, u
, "You only have enough gold to heal \ 2 %d \ 2 points!",
2732 ( long int ) ni
-> stats
-> gold
/ price
);
2734 else if ( num
<= ni
-> stats
-> maxhp
- ni
-> stats
-> hp
)
2736 notice ( s_GameServ
, u
, "Healing \ 2 %d \ 2 points at \ 2 %d \ 2 gold per point.",
2738 ni
-> stats
-> hp
+= num
;
2739 ni
-> stats
-> gold
-= num
* price
;
2741 else if ( num
> ni
-> stats
-> maxhp
- ni
-> stats
-> hp
)
2743 notice ( s_GameServ
, u
, "Healing all possible points at \ 2 %d \ 2 gold "\
2744 "per point." , price
);
2745 notice ( s_GameServ
, u
, "\ 2 %d \ 2 points healed. HP at MAX!",
2746 ( ni
-> stats
-> maxhp
- ni
-> stats
-> hp
));
2747 ni
-> stats
-> gold
-= price
* ( ni
-> stats
-> maxhp
- ni
-> stats
-> hp
);
2748 ni
-> stats
-> hp
= ni
-> stats
-> maxhp
;
2751 else if ( amount
[ 0 ] == '-' )
2752 notice ( s_GameServ
, u
, "You trying to cheat?" );
2754 notice ( s_GameServ
, u
, "SYNTAX: /msg %S HEAL {ALL | #}" );
2757 int isstringnum ( char * num
)
2760 for ( x
= 0 ; x
< strlen ( num
); x
++)
2762 if (( int ) num
[ x
] < 48 || ( int ) num
[ x
] > 57 )
2768 long int stringtoint ( char * number
)
2770 long int x
, len
= strlen ( number
), sum
= 0 ;
2772 return chartoint ( number
[ 0 ]);
2773 sum
+= chartoint ( number
[ len
- 1 ]);
2774 for ( x
= len
- 2 ; x
>= 0 ; x
--)
2775 sum
+= chartoint ( number
[ x
]) * pow ( 10 , abs ( x
- len
+ 1 ));
2779 long int pow ( int x
, int y
)
2785 if ( x
!= 0 && y
!= 0 )
2787 for ( count
= 1 ; count
<= y
- 1 ; count
++)
2795 long int chartoint ( char ch
)
2797 if ( int ( ch
) >= 48 && int ( ch
) <= 57 )
2798 return int ( ch
) - 48 ;
2805 ListNode
< aClient
> * ptr
= players
. First ();
2809 outfile
. open ( playerdata
);
2813 cout
<< "Error opening " << playerdata
<< endl
;
2819 it
= ptr
-> getData ()-> stats
;
2820 outfile
<< it
-> name
<< ' ' << it
-> level
<< ' ' << it
-> exp
<< ' ' << it
-> gold
<< ' ' << it
-> bank
<< ' '
2821 << it
-> hp
<< ' ' << it
-> maxhp
<< ' ' << it
-> strength
<< ' ' << it
-> defense
<< ' '
2822 << it
-> armor
<< ' ' << it
-> weapon
<< ' '
2823 << it
-> forest_fights
<< ' ' << it
-> player_fights
<< ' '
2824 << it
-> getFlags () << ' ' << it
-> password
<< ' ' << it
-> inventory
. Healing ()
2825 << ' ' << it
-> inventory
. Strength () << ' ' << it
-> inventory
. Defense () << endl
;
2837 char * tempname
, * buf
, * password
;
2838 buf
= new char [ 1023 ];
2840 infile
. open ( playerdata
);
2844 cout
<< "Error opening " << playerdata
<< endl
;
2848 while ( infile
. getline ( buf
, 1024 , ' \n ' ))
2851 tempname
= strtok ( buf
, " " );
2852 temp
-> stats
= new Player ( tempname
);
2855 p
-> level
= stringtoint ( strtok ( NULL
, " " ));
2856 p
-> exp
= stringtoint ( strtok ( NULL
, " " ));
2857 p
-> gold
= stringtoint ( strtok ( NULL
, " " ));
2858 p
-> bank
= stringtoint ( strtok ( NULL
, " " ));
2859 p
-> hp
= stringtoint ( strtok ( NULL
, " " ));
2860 p
-> maxhp
= stringtoint ( strtok ( NULL
, " " ));
2861 p
-> strength
= stringtoint ( strtok ( NULL
, " " ));
2862 p
-> defense
= stringtoint ( strtok ( NULL
, " " ));
2863 p
-> armor
= stringtoint ( strtok ( NULL
, " " ));
2864 p
-> weapon
= stringtoint ( strtok ( NULL
, " " ));
2865 p
-> forest_fights
= stringtoint ( strtok ( NULL
, " " ));
2866 p
-> player_fights
= stringtoint ( strtok ( NULL
, " " ));
2867 p
-> setFlags ( stringtoint ( strtok ( NULL
, " " )));
2869 password
= strtok ( NULL
, " " );
2870 strcpy ( p
-> password
, password
);
2871 temp
-> setNick ( "!NULL!" );
2873 // Old player databases didn't have these three extra values
2874 // If they come up null, leave them to 0 as the default.
2875 // On the next gameserv database save, it will save the values.
2876 tempname
= strtok ( NULL
, " " );
2877 cout
<< tempname
<< endl
;
2878 p
-> inventory
. setHealing ( stringtoint ( tempname
));
2879 p
-> inventory
. setStrength ( stringtoint ( strtok ( NULL
, " " )));
2880 p
-> inventory
. setDefense ( stringtoint ( strtok ( NULL
, " " )));
2882 players
. insertAtBack ( temp
);
2890 bool passcmp ( char * encrypted
, char * plaintext
)
2893 char * plaintext2
, * plainToencrypt
;
2896 plaintext2
= new char [ strlen ( encrypted
) + strlen ( plaintext
)]; // Extra
2897 strcpy ( plaintext2
, plaintext
);
2899 salt
[ 0 ] = encrypted
[ 0 ];
2900 salt
[ 1 ] = encrypted
[ 1 ];
2903 plainToencrypt
= crypt ( plaintext2
, salt
);
2905 same
= ( strcmp (( const char *) encrypted
, plainToencrypt
) == 0 ? true : false );
2907 delete [] plaintext2
;
2912 bool check_password ( char * name
, char * plaintext
)
2916 if (!( client
= findplayer ( name
)))
2920 return passcmp ( client
-> stats
-> password
, plaintext
);
2924 void do_store ( char * u
)
2926 char * cmd
= strtok ( NULL
, " " );
2927 char * item
= strtok ( NULL
, " " );
2928 char * num
= strtok ( NULL
, " " );
2936 notice ( s_GameServ
, u
, "SYNTAX: STORE LIST {ARMOR | WEAPONS}" );
2937 notice ( s_GameServ
, u
, " \ 2 STORE SELL {ARMOR | WEAPON}\ 2 " );
2938 notice ( s_GameServ
, u
, " \ 2 STORE BUY {ARMOR | WEAPON} \1f NUMBER\1f \ 2 " );
2940 else if (!( user
= find ( u
)) || ! is_playing ( user
))
2941 notice ( s_GameServ
, u
, "You must be playing to use the store!" );
2942 else if (! isAlive ( user
-> stats
))
2944 notice ( s_GameServ
, u
, "You are dead. Wait until tomorrow to purchase weapons and armor!" );
2947 else if ( stricmp ( cmd
, "LIST" ) == 0 )
2949 if ( stricmp ( item
, "WEAPONS" ) == 0 )
2951 notice ( s_GameServ
, u
, "Welcome to Kain's Armory" );
2952 notice ( s_GameServ
, u
, "Here are the weapons we have available for the killing, sire:" );
2953 for ( int x
= 1 ; x
< WNA
; x
++)
2955 space
= spaces ( strlen ( weapons
[ x
]), "." );
2956 notice ( s_GameServ
, u
, " %s%d . %s%s%d " ,( x
< 10 ? " " : "" ), x
, weapons
[ x
], space
, prices
[ x
- 1 ]);
2959 notice ( s_GameServ
, u
, "To purchase a weapon, type /msg %S STORE BUY \ 2 NUM\ 2 ." );
2960 notice ( s_GameServ
, u
, "Where num. is the weapon number from the menu above." );
2963 else if ( stricmp ( item
, "ARMOR" ) == 0 )
2965 notice ( s_GameServ
, u
, "Welcome to Kain's Armory" );
2966 notice ( s_GameServ
, u
, "I hope you enjoy the fine armor we have available for your protection:" );
2967 for ( int x
= 1 ; x
< WNA
; x
++)
2969 space
= spaces ( strlen ( armors
[ x
]), "." );
2970 notice ( s_GameServ
, u
, " %s%d . %s%s%d " ,( x
< 10 ? " " : "" ), x
, armors
[ x
], space
, prices
[ x
- 1 ]);
2973 notice ( s_GameServ
, u
, "To purchase armor, type /msg %S store buy armor num." );
2974 notice ( s_GameServ
, u
, "Where num. is the armor number from the menu above." );
2978 } else if ( stricmp ( cmd
, "BUY" ) == 0 ) {
2981 notice ( s_GameServ
, u
, "SYNTAX: \ 2 STORE BUY {ARMOR | WEAPON} \1f NUMBER\1f \ 2 " );
2984 else if (! isstringnum ( num
))
2986 notice ( s_GameServ
, u
, "You must specify a number between 1 and %d . Not %s !" , WNA
- 1 , num
);
2989 if ( stricmp ( item
, "WEAPON" ) == 0 )
2991 wep
= stringtoint ( num
);
2992 if ( wep
>= WNA
|| wep
< 1 )
2994 notice ( s_GameServ
, u
, "The number %d is out of range. The number you provide must be between 1 and %d ." , wep
, WNA
- 1 );
3001 notice ( s_GameServ
, u
, "You have to sell your %s first!" , weapons
[ p
-> weapon
]);
3002 else if ( p
-> gold
< prices
[ wep
- 1 ])
3003 notice ( s_GameServ
, u
, "You don't have enough gold for %s !" , weapons
[ wep
]);
3006 notice ( s_GameServ
, u
, "You have purchased %s ! Thanks for the gold!" , weapons
[ wep
]);
3008 p
-> gold
-= prices
[ wep
- 1 ];
3011 else if ( stricmp ( item
, "ARMOR" ) == 0 )
3013 wep
= stringtoint ( num
);
3014 if ( wep
>= WNA
|| wep
< 1 )
3016 notice ( s_GameServ
, u
, "The number %d is out of range. The number you provide must be between 1 and %d ." , wep
, WNA
- 1 );
3023 notice ( s_GameServ
, u
, "You have to sell your %s first!" , armors
[ p
-> armor
]);
3024 else if ( p
-> gold
< prices
[ wep
- 1 ])
3025 notice ( s_GameServ
, u
, "You don't have enough gold for %s !" , armors
[ wep
]);
3028 notice ( s_GameServ
, u
, "You have purchased %s ! Thanks for the gold!" , armors
[ wep
]);
3030 p
-> gold
-= prices
[ wep
- 1 ];
3034 else if ( stricmp ( cmd
, "SELL" ) == 0 )
3038 if ( stricmp ( item
, "WEAPON" ) == 0 )
3042 notice ( s_GameServ
, u
, "You want me to chop off your hands?" );
3045 else if ( p
-> gold
== 2000000000 )
3047 notice ( s_GameServ
, u
, "You have enough gold. I'll just take that off your hands, sire." );
3050 else if ( 2000000000 - p
-> gold
< ( prices
[ p
-> weapon
- 1 ] / 2 ))
3052 notice ( s_GameServ
, u
, "Thank you for your business! You now have as much gold as you can carry." );
3053 notice ( s_GameServ
, u
, "However, you have no weapon... can I interest you in the %s ?" , weapons
[ WNA
- 1 ]);
3054 p
-> gold
= 2000000000 ;
3059 notice ( s_GameServ
, u
, "Thank you for your business! You now have %d more gold but no weapon!" , ( prices
[ p
-> weapon
- 1 ] / 2 ));
3060 p
-> gold
+= ( prices
[ p
-> weapon
- 1 ] / 2 );
3064 else if ( stricmp ( item
, "ARMOR" ) == 0 )
3070 notice ( s_GameServ
, u
, "I don't think you can be any more naked..." );
3073 if ( p
-> gold
== 2000000000 )
3075 notice ( s_GameServ
, u
, "You have enough gold. I'll just take that off your hands, sire." );
3078 else if ( 2000000000 - p
-> gold
< ( prices
[ p
-> armor
- 1 ] / 2 ))
3080 notice ( s_GameServ
, u
, "Thank you for your business! You now have as much gold as you can carry." );
3081 notice ( s_GameServ
, u
, "However, you have no armor... can I interest you in %s ?" , armors
[ WNA
- 1 ]);
3082 p
-> gold
= 2000000000 ;
3087 notice ( s_GameServ
, u
, "Thank you for your business! You now have %d more gold but no armor!" ,
3088 ( prices
[ p
-> armor
- 1 ] / 2 ));
3090 p
-> gold
+= ( prices
[ p
-> armor
- 1 ] / 2 );
3096 notice ( s_GameServ
, u
, "SYNTAX: STORE LIST {ARMOR | WEAPONS}" );
3097 notice ( s_GameServ
, u
, " \ 2 STORE SELL {ARMOR | WEAPON}\ 2 " );
3098 notice ( s_GameServ
, u
, " \ 2 STORE BUY {ARMOR | WEAPON} \1f NUMBER\1f \ 2 " );
3102 void do_inventory ( char * u
)
3106 if (!( user
= find ( u
)))
3108 notice ( s_GameServ
, u
, "Fatal Error. Contact a %S admin!" );
3111 else if (! is_playing ( user
))
3113 notice ( s_GameServ
, u
, "You must be playing to check your inventory!" );
3116 showinventory ( user
, user
);
3118 void showinventory ( aClient
* from
, aClient
* to
)
3120 char * nick
= to
-> getNick ();
3124 if ( is_playing ( from
))
3126 Pouch
* p
= & from
-> stats
-> inventory
;
3127 notice ( s_GameServ
, nick
, "Inventory for %s :" , from
-> getNick ());
3128 notice ( s_GameServ
, nick
, " Healing Potions: %d " , p
-> Healing ());
3129 notice ( s_GameServ
, nick
, "Strength Potions: %d " , p
-> Strength ());
3130 notice ( s_GameServ
, nick
, " Defense Potions: %d " , p
-> Defense ());
3133 void do_tavern ( char * u
)
3135 char * cmd
= strtok ( NULL
, " " );
3140 if (!( user
= find ( u
)))
3142 notice ( s_GameServ
, u
, "Fatal Error. See a %S admin for help" );
3145 else if (! is_playing ( user
))
3147 notice ( s_GameServ
, u
, "You must be playing to go to the Tavern" );
3150 else if ( is_fighting ( user
))
3152 notice ( s_GameServ
, u
, "You cannot go to the Tavern during a fight!" );
3158 notice ( s_GameServ
, u
, "Welcome to Boot Liquors Mystic Apothecary" );
3159 notice ( s_GameServ
, u
, "Your commands:" );
3160 notice ( s_GameServ
, u
, "/msg %S TAVERN {LIST | BUY} [NUMBER]" );
3161 notice ( s_GameServ
, u
, "What'll it be?" );
3163 else if ( stricmp ( cmd
, "LIST" ) == 0 )
3165 notice ( s_GameServ
, u
, "Here is a list of what we have to offer:" );
3166 notice ( s_GameServ
, u
, "1. Healing Potions for %l d Gold" , 1000 * p
-> level
+ ( p
-> exp
/ 10 ));
3167 notice ( s_GameServ
, u
, "2. Strength Potions for %l d Gold" , 2050 * p
-> level
+ ( p
-> exp
/ 10 ));
3168 notice ( s_GameServ
, u
, "3. Defense Potions for %l d Gold" , 2000 * p
-> level
+ ( p
-> exp
/ 10 ));
3169 notice ( s_GameServ
, u
, "4. HP Potions for %l d Gold" , 2300 * p
-> level
+ ( p
-> exp
/ 10 ));
3170 notice ( s_GameServ
, u
, "To buy a potion, type /msg %S TAVERN BUY #" );
3171 notice ( s_GameServ
, u
, "Example: /msg %S TAVERN BUY 1 buys a healing potion!" );
3172 notice ( s_GameServ
, u
, "By something will ya!" );
3174 else if ( stricmp ( cmd
, "BUY" ) == 0 )
3176 char * chnum
= strtok ( NULL
, " " );
3177 int num
= stringtoint ( chnum
);
3181 notice ( s_GameServ
, u
, "SYNTAX: TAVERN BUY #" );
3182 notice ( s_GameServ
, u
, "Example: /msg %S TAVERN BUY 1" );
3185 if ( num
< 1 || num
> 4 )
3187 notice ( s_GameServ
, u
, "Invalid Choice!" );
3188 notice ( s_GameServ
, u
, "Here is a list of what we have to offer:" );
3189 notice ( s_GameServ
, u
, "1. Healing Potions for %l d Gold" , 1000 * p
-> level
+ ( p
-> exp
/ 10 ));
3190 notice ( s_GameServ
, u
, "2. Strength Potions for %l d Gold" , 2050 * p
-> level
+ ( p
-> exp
/ 10 ));
3191 notice ( s_GameServ
, u
, "3. Defense Potions for %l d Gold" , 2000 * p
-> level
+ ( p
-> exp
/ 10 ));
3192 notice ( s_GameServ
, u
, "4. HP Potions for %l d Gold" , 2300 * p
-> level
+ ( p
-> exp
/ 10 ));
3193 notice ( s_GameServ
, u
, "To buy a potion, type /msg %S TAVERN BUY #" );
3194 notice ( s_GameServ
, u
, "Example: /msg %S TAVERN BUY 1 buys a healing potion!" );
3200 price
= ( 1000 * p
-> level
) + ( p
-> exp
/ 10 );
3201 if ( p
-> gold
>= price
)
3203 notice ( s_GameServ
, u
, "One healing potion coming right up!" );
3204 p
-> inventory
. incHealing ();
3208 notice ( s_GameServ
, u
, "You don't have enough gold!" );
3211 price
= ( 2050 * p
-> level
) + ( p
-> exp
/ 10 );
3212 if ( p
-> gold
>= price
)
3214 notice ( s_GameServ
, u
, "One strength boost coming right up!" );
3215 p
-> inventory
. incStrength ();
3219 notice ( s_GameServ
, u
, "You don't have enough gold!" );
3222 price
= ( 2000 * p
-> level
) + ( p
-> exp
/ 10 );
3223 if ( p
-> gold
>= price
)
3225 notice ( s_GameServ
, u
, "One defense boost coming right up!" );
3226 p
-> inventory
. incDefense ();
3230 notice ( s_GameServ
, u
, "You don't have enough gold!" );
3233 price
= ( 2300 * p
-> level
) + ( p
-> exp
/ 10 );
3234 if ( p
-> gold
>= price
)
3236 notice ( s_GameServ
, u
, "One HP Potion coming right up!" );
3237 p
-> inventory
. incHP ();
3241 notice ( s_GameServ
, u
, "You don't have enough gold!" );
3244 notice ( s_GameServ
, u
, "Logical Error. See a %S admin for help!" );
3250 notice ( s_GameServ
, u
, "Improper Syntax." );
3251 notice ( s_GameServ
, u
, "Type /msg %S HELP TAVERN for help" );
3255 void do_bank ( char * u
)
3257 char * cmd
= strtok ( NULL
, " " );
3258 char * amount
= strtok ( NULL
, " " );
3259 char * nick
= strtok ( NULL
, " " );
3264 if (! cmd
|| (! amount
&& stricmp ( cmd
, "BALANCE" ) != 0 ) || ( stricmp ( cmd
, "TRANSFER" ) == 0 && ! nick
))
3266 notice ( s_GameServ
, u
, "BANK {WITHDRAW | DEPOSIT} {ALL | AMOUNT}" );
3267 notice ( s_GameServ
, u
, "BANK BALANCE" );
3272 if (! is_playing ( user
))
3274 notice ( s_GameServ
, u
, "You must be playing to use the bank!" );
3277 else if (! isAlive ( user
-> stats
))
3279 notice ( s_GameServ
, u
, "You are dead. We don't accept gold from dead folk! Wait 'til tomorrow!" );
3282 else if (! isstringnum ( amount
) && stricmp ( amount
, "ALL" ) != 0 )
3284 notice ( s_GameServ
, u
, "I don't know how to convert alphabet letters into currency, sire!" );
3290 if ( stricmp ( cmd
, "BALANCE" ) == 0 )
3294 else if ( stricmp ( cmd
, "DEPOSIT" ) == 0 )
3296 if ( p
-> bank
== 2000000000 )
3298 notice ( s_GameServ
, u
, "Your bank account is full, sire!" );
3301 else if ( stricmp ( amount
, "ALL" ) == 0 )
3303 if ( 2000000000 - p
-> bank
< p
-> gold
)
3305 notice ( s_GameServ
, u
, "You don't have enough room for all of your gold." );
3306 notice ( s_GameServ
, u
, "Depositing %l d gold into your account" , ( 2000000000 - p
-> bank
));
3307 p
-> gold
-= ( 2000000000 - p
-> bank
);
3308 p
-> bank
= 2000000000 ;
3313 notice ( s_GameServ
, u
, "Depositing %l d gold into your account!" , p
-> gold
);
3319 else if ( stringtoint ( amount
) > p
-> gold
)
3321 notice ( s_GameServ
, u
, "Sire, you only have %l d gold!" , p
-> gold
);
3327 if ( 2000000000 - p
-> bank
< stringtoint ( amount
))
3329 notice ( s_GameServ
, u
, "You don't have room in your account for that much." );
3330 notice ( s_GameServ
, u
, "Capping off your account with %l d gold!" , ( 2000000000 - p
-> bank
));
3331 p
-> gold
-= ( 2000000000 - p
-> bank
);
3332 p
-> bank
= 2000000000 ;
3337 notice ( s_GameServ
, u
, "Depositing %d gold into your account!" , stringtoint ( amount
));
3338 p
-> bank
+= stringtoint ( amount
);
3339 p
-> gold
-= stringtoint ( amount
);
3344 else if ( stricmp ( cmd
, "WITHDRAW" ) == 0 )
3346 if ( p
-> gold
== 2000000000 )
3348 notice ( s_GameServ
, u
, "You cannot carry any more gold, sire!" );
3352 else if ( stricmp ( amount
, "ALL" ) == 0 )
3354 if ( 2000000000 - p
-> gold
< p
-> bank
)
3356 notice ( s_GameServ
, u
, "You don't have enough room to carry all that gold." );
3357 notice ( s_GameServ
, u
, "Withdrawing %l d gold from your account" , ( 2000000000 - p
-> gold
));
3358 p
-> bank
-= ( 2000000000 - p
-> gold
);
3359 p
-> gold
= 2000000000 ;
3364 notice ( s_GameServ
, u
, "Withdrawing %l d gold from your account!" , p
-> bank
);
3370 else if ( stringtoint ( amount
) > p
-> bank
)
3372 notice ( s_GameServ
, u
, "Sire, you only have %l d gold in the bank!" , p
-> bank
);
3378 if ( 2000000000 - p
-> gold
< stringtoint ( amount
))
3380 notice ( s_GameServ
, u
, "You don't enough have room to carry that much gold!" );
3381 notice ( s_GameServ
, u
, "You fill your pockets with %l d gold!" ,
3382 ( 2000000000 - p
-> gold
));
3383 p
-> bank
-= ( 2000000000 - p
-> gold
);
3384 p
-> gold
= 2000000000 ;
3389 notice ( s_GameServ
, u
, "Withdrawing %d gold from your account!" , stringtoint ( amount
));
3390 p
-> gold
+= stringtoint ( amount
);
3391 p
-> bank
-= stringtoint ( amount
);
3399 void do_master ( char * u
)
3406 notice ( s_GameServ
, u
, "Fatal error. Contact a(n) %S admin. buf: %s " , strtok ( NULL
, "" ));
3409 else if ( is_fighting ( user
))
3411 notice ( s_GameServ
, u
, "You're in the middle of a fight! Pay attention!" );
3414 else if (! isAlive ( user
-> stats
))
3416 notice ( s_GameServ
, u
, "You're dead. Wait until tomorrow to see your master!" );
3419 else if (! is_playing ( user
))
3421 notice ( s_GameServ
, u
, "You must be playing to see your master!" );
3425 char * cmd
= strtok ( NULL
, " " );
3426 Player
* p
= user
-> stats
;
3431 notice ( s_GameServ
, u
, "You have already seen your master today. Wait until tomorrow to try again" );
3474 notice ( s_GameServ
, u
, "You are at level 12. You are the master. What's left? The DRAGON!" );
3477 need
= p
-> exp
+ 1 ; // Unknown level... don't let them fight a fake master!
3483 notice ( s_GameServ
, u
, "SYNTAX: MASTER {FIGHT | QUESTION}" );
3487 if ( stricmp ( cmd
, "FIGHT" ) == 0 )
3495 notice ( s_GameServ
, u
, "You are not worthy of fighting %s ! You need %l d more experience." , masters
[ p
-> level
- 1 ]-> name
, ( need
- p
-> exp
));
3498 else if ( stricmp ( cmd
, "QUESTION" ) == 0 )
3501 notice ( s_GameServ
, u
, " %s looks you up and down and decides you are more ready than you will ever be." , masters
[ p
-> level
- 1 ]-> name
);
3503 notice ( s_GameServ
, u
, "You pathetic fool! You are no match for %s , %s !" , masters
[ p
-> level
- 1 ]-> name
, p
-> name
);
3509 notice ( s_GameServ
, u
, "SYNTAX: MASTER {FIGHT | QUESTION}" );
3513 void see_master ( char * u
)
3517 if (!( user
= find ( u
)))
3519 notice ( s_GameServ
, u
, "Fatal error. Contact a(n) %S admin. buf: %s " , strtok ( NULL
, "" ));
3523 if (! is_fighting ( user
) && is_playing ( user
))
3525 Player
* p
= user
-> stats
;
3526 p
-> master
= new Monster ( masters
[ p
-> level
- 1 ]);
3527 p
-> fight
= p
-> master
;
3528 display_monster ( u
); // Since master is the same structure, use this function
3532 void showBankBalance ( const char * u
)
3537 if (!( user
= find ( u
)))
3545 notice ( s_GameServ
, u
, "Account Balance: %l d Gold On hand: %l d" , p
-> bank
, p
-> gold
);
3551 ListNode
< aClient
> * it
;
3554 it
= players
. First ();
3558 p
= it
-> getData ()-> stats
;
3564 void refresh ( Player
* p
)
3569 if ( p
-> hp
< p
-> maxhp
)
3571 p
-> forest_fights
= forestfights
;
3572 p
-> player_fights
= 3 ;
3577 void do_refresh ( char * u
)
3579 char * nick
= strtok ( NULL
, " " );
3582 if (!( user
= find ( u
)))
3584 notice ( s_GameServ
, u
, "Error: aClient not found. Contact a %S admin" );
3585 cout
<< "Error: aClient not found: " << u
<< endl
;
3588 else if (! isAdmin ( user
))
3590 notice ( s_GameServ
, u
, "You must be a %S admin to use this command!" );
3595 notice ( s_GameServ
, u
, "SYNTAX: REFRESH {ALL | NICK}" );
3598 else if ( stricmp ( nick
, "ALL" ) == 0 )
3600 notice ( s_GameServ
, u
, "Refreshing everyone's stats!" );
3603 else if (( user
= find ( nick
)))
3605 if ( is_playing ( user
))
3607 notice ( s_GameServ
, u
, "Refreshing %s ." , user
-> getNick ());
3608 refresh ( user
-> stats
);
3612 notice ( s_GameServ
, u
, " %s is not playing." , user
-> getNick ());
3617 notice ( s_GameServ
, u
, "Nick %s not found." , nick
);
3625 ListNode
< aClient
> * it
;
3628 it
= players
. First ();
3632 p
= it
-> getData ()-> stats
;
3638 void reset ( Player
* p
)
3646 void do_reset ( char * u
)
3648 char * nick
= strtok ( NULL
, " " );
3651 if (!( user
= find ( u
)))
3653 notice ( s_GameServ
, u
, "Error: aClient not found. Contact a %S admin" );
3654 cout
<< "Error: aClient not found: " << u
<< endl
;
3657 else if (! isAdmin ( user
))
3659 notice ( s_GameServ
, u
, "You must be a %S admin to use this command!" );
3664 notice ( s_GameServ
, u
, "SYNTAX: RESET {ALL | NICK}" );
3667 else if ( stricmp ( nick
, "ALL" ) == 0 )
3669 notice ( s_GameServ
, u
, "Resetting everyone's stats!" );
3672 else if (( user
= find ( nick
)))
3674 if ( is_playing ( user
))
3676 notice ( s_GameServ
, u
, "Resetting %s ." , user
-> getNick ());
3681 notice ( s_GameServ
, u
, " %s is not playing." , user
-> getNick ());
3686 notice ( s_GameServ
, u
, "Nick %s not found." , nick
);
3691 void do_help ( char * u
)
3693 char * cmd
= strtok ( NULL
, " " );
3695 display_help ( u
, cmd
);
3698 void display_help ( char * u
, char * file
)
3705 infile
. open ( "helpfiles/help" );
3708 cout
<< "Error opening helpfiles/help" << endl
;
3709 notice ( s_GameServ
, u
, "Error opening helpfiles/help" );
3712 buf
= new char [ 1024 ];
3713 while ( infile
. getline ( buf
, 1024 ))
3715 // Written this way, it will process %S in the helpfiles
3716 // Instead of notice(s_GameServ, u, "%s", buf);
3717 notice ( s_GameServ
, u
, buf
);
3721 aClient
* user
= find ( u
);
3722 if ( user
&& isAdmin ( user
))
3723 display_help ( u
, "admin_commands" );
3728 filename
= new char [ strlen ( file
) + 11 ];
3729 strcpy ( filename
, "helpfiles/" );
3730 strcat ( filename
, file
);
3732 for ( unsigned int x
= 10 ; x
< strlen ( filename
); x
++)
3733 filename
[ x
] = tolower ( filename
[ x
]);
3735 infile
. open ( filename
);
3739 notice ( s_GameServ
, u
, "No help for \ 2 %s \ 2 ", file
);
3742 buf
= new char [ 1024 ];
3743 while ( infile
. getline ( buf
, 1024 ))
3745 // Written this way, it will process %S in the helpfiles
3746 // Instead of notice(s_GameServ, u, "%s", buf);
3747 notice ( s_GameServ
, u
, buf
);
3754 void do_admin ( char * u
)
3757 char * pass
= strtok ( NULL
, " " );
3759 if (!( user
= find ( u
)))
3761 cout
<< "Error: aClient not found: " << u
<< endl
;
3762 notice ( s_GameServ
, u
, "Error: aClient not found. Contact %S admin." );
3767 notice ( s_GameServ
, u
, "SYNTAX: \ 2 ADMIN\ 2 \ 2 \1f password\1f \ 2 " );
3773 notice ( s_GameServ
, u
, "You already have administrator privledges." );
3776 else if ( strcmp ( pass
, adminpass
) == 0 )
3778 notice ( s_GameServ
, u
, "Password accepted. You now have administrator privledges." );
3783 notice ( s_GameServ
, u
, "Invalid password. Remember: case sensitive" );
3788 bool load_monsters ()
3791 infile
. open ( "monsters.dat" );
3797 cout
<< "Error opening monsters.dat" << endl
;
3801 buf
= new char [ 2048 ];
3803 for ( int l
= 0 ; l
< REALLEVELS
; l
++)
3805 for ( int m
= 0 ; m
< MONSTERS
;)
3807 infile
. getline ( buf
, 2048 );
3808 if ( buf
[ 0 ] == ' \n ' || buf
[ 0 ] == '\0' || buf
[ 0 ] == '#' )
3812 strcpy ( monsters
[ l
][ m
]-> name
, strtok ( buf
, "~" ));
3813 strcpy ( monsters
[ l
][ m
]-> weapon
, strtok ( NULL
, "~" ));
3814 monsters
[ l
][ m
]-> strength
= stringtoint ( strtok ( NULL
, "~" ));
3815 monsters
[ l
][ m
]-> gold
= stringtoint ( strtok ( NULL
, "~" ));
3816 monsters
[ l
][ m
]-> exp
= stringtoint ( strtok ( NULL
, "~" ));
3817 monsters
[ l
][ m
]-> maxhp
= stringtoint ( strtok ( NULL
, "~" ));
3818 monsters
[ l
][ m
]-> hp
= monsters
[ l
][ m
]-> maxhp
;
3819 strcpy ( monsters
[ l
][ m
]-> death
, strtok ( NULL
, "" ));