--- /dev/null
+1~Slime~Acid Goo~The slime oozes into nothing... you clean the acid goo off of your weapon~\r
+1~Ghost~Cold Breath~You feel a chill as the spirit leaves the realm.~\r
+1~Ugly Rodent~Sharp Teeth~You stomp on the Ugly Rodent's remains for a finishing blow.~\r
+1~Whart Hog~Tusks~You cook and eat the hog for good measure!~\r
+1~Pesky Kid~Slingshot~You take his slingshot and snap the band, sending the kid crying home to mom~\r
+1~Playground Bully~Painful Noogie~You give him an indian burn, and punt him across the schoolyard!~\r
+1~Small Imp~Dagger~You can't help but laugh as he stumbles and falls onto his own dagger!~\r
+1~Little Monkey~Monkey Wrench~You want to cook it, but you just can't think of eating something that looks so human!~\r
+1~Grub Worm~Minor Nudge~You decide to save the poor little fella for your next fishing trip.~\r
+1~Drakee~Tail Slap~You hold the little Drakee by its tale and slam it down on a dry stump!~\r
+1~Fat Slob~Smelly Breath~You kick his stomach for fun, and are thrown back by the spring of it all!~\r
+1~Lost Warrior~Long Sword~You give him a proper burial in respect for the dead warrior.~\r
+1~Harry Potter~Nimbus 2000~I don't go looking for trouble. Trouble usually finds me.~\r
+1~Snake Nidhogg~Crushtail~CURSE YOU!~\r
+1~Seven of Nine~Nanoprobes~Death is irrelevant, resistance is futile~\r
+1~Great Smiley~Happiness~Wheeeeeeeee, party!! :D~\r
+1~Crud Puppy~Bad Office Coffee~My evil powers have grown weak!~\r
+1~Layla~Sexy Kiss of Insanity~She lookes at you with her misleading eyes, almost making you feel bad you killed her.~\r
+1~Ignatz Despoiler-of-Maidens~Bludgeon~Blessed with his own stupidity!~\r
+1~King Kong~Skyscraper~I want my woman!~\r
+1~Sergeant Gunnary Heartman~Drill Voice~You still need training boy!~\r
+1~Cartman~Flammable Fart~Respect my authority!\r
+2~Lost Warrior's Cousin Larry~Wood Axe~He was pretty pissed you killed his cousin, but he seems to have suffered the same fate!~\r
+2~Sandman~Sleeping Dust~You put the sandman to his final sleep.~\r
+2~Skank~Stiletto Heel~Your pimp hand is way strong!~\r
+2~Goblin Gardener~Garden Spade~You trample on his garden after slaying him... that felt good!~\r
+2~Evil Elf~Dark Bow~Elves are usually nice you thought... hmm.~\r
+2~Viking Warrior~Broad Sword~You heard vikings were big, but not THAT big!~\r
+2~Wicked Witch~Cackling Laugh~Just for kicks, you splash some water on her and watch her melt.~\r
+2~Vampire Bat~Blood Sucking Fangs~You fry up the bat and eat it... needs gaaahlic.~\r
+2~Thorn Bush~101 Thorns~You set the bush ablaze and roast some marshmallows.~\r
+2~Barbarian~Heavy Sword~You listen to him moan as he falls over dead.~\r
+2~Crypt Rat~Stinging Bite~You squash the little rodent for fear that it might not be dead.~\r
+2~Small Orc~Sharp Blade~It's an ugly one, and it would've grown up to be a terror...~\r
+2~Virus Bots~Trojan Horses~You run a quick virus scan before you leave this software in the dust.\r
+2~Hex Maniac~Satanic Powers~You'll go to hell!~\r
+2~Eight-legged-freak~Venom~We'll meet again!~\r
+2~Anger Piercer~Pointy sword~You broke my sword!~\r
+2~Bookwarp Cadaver~Rotten smell~Don't let me rott!~\r
+2~Clubthunder Enchanter~Enchantments~My magic has run dry...~\r
+2~Disinterred Medusa~Snakes~What did you do to my snakes!~\r
+2~Dissolver Manipulator-hangman~Itching ropes~You broke my rope!~\r
+2~Gloomy Kraken~Weirdness~Glooooooooooom~\r
+2~Hookweb Ophidian~Bad breath~Noooooooooooo~\r
+2~Leech Ant~Leech~You anti-leecher!~\r
+3~Teferi~Puzzle Box~It was a puzzling experience.~\r
+3~Spineless Thug~Spiked Bat~See you at the crossroads!~\r
+3~Pyromaniac~Flame Thrower~He chants FIRE FIRE as he falls to the ground... a burning heap of flesh.~\r
+3~Evil Enchantress~Deadly Spell~She looked just about as good as she fought.~\r
+3~Killer Leprechaun~Gold Rush~You steal his pot of gold... that's a lot of money!~\r
+3~Avalanche Rider~Huge Snowball~You take his snowboard and snap it in two!~\r
+3~Blundering Idiot~Stupidity~Now there's one person you don't feel sorry for killing!~\r
+3~Militant Anarchist~Molotov Cocktail~Order has been restored for now...~\r
+3~Scathe Zombies~Death Grip~That was perhaps the scariest experience of your life.~\r
+3~Demon Llama~Flamed Spit~You wipe the spit off your face and fling it back at the Llama.~\r
+3~Juggalo~Clown Axe~What is a Juggalo? I don't know!~\r
+3~The Boogie Man~Striking Fear~He's scared you for the very last time!~\r
+3~Mace Plant~Mace~You stepped on me!~\r
+3~Magician Ear~Odd powers~AAAH! Not so loud!~\r
+3~Pudding Barracuda~Bad taste~You don't like my flavor?~\r
+3~Rock Scavenger~Nosepick~Don't leave me here!~\r
+3~Russet Pup~Licking power~Arf?~\r
+3~Scavenging Lich~Spiked club~Bad, bad man!~ \r
+3~Scream Controller~Loud Shriek~My voice....~\r
+4~Living Fire~Scorching Wind~You extinguish the Living Flame once and for all!~\r
+4~Raging Orc~Orcish Artillary~This orc was a bit tougher than you remembered!~\r
+4~Huge Tarantula~Tangling Web~You're glad you overcame your arachniphobia so soon!~\r
+4~Rabid Wolf~Cujo Bite~The mutt falls over dead as white foam drips from its deadly canines...~\r
+4~Goblin Fighter~Morning Star~He almost got you, but you sliced off his head.~\r
+4~Grizzly Bear~Razor Claws~It almost got you this time... better be careful~\r
+4~Skeleton Man~Leg Bone~As a finisher, you wind up with the broad side of your weapon and hit his skull off for a home run!~\r
+4~Young Werewolf~Gnashed Teeth~You scatter the wolf's body parts in hopes he will stay dead!~\r
+4~Dark Infantry~Flesh Reaper~Light has prevailed this time... but it's only so long before you meet again.~\r
+4~Erie Spirit~Deadly Grin~His cousin the ghost was a little bit easier.~\r
+4~Gollum~His Precious~Gollum screams out "MY PRECIOUS" as his small body falls limp from your blow.~\r
+4~Rock Fighter~Boulders~You dodge his last rock, and counter with a low blow, cutting off his legs.~\r
+4~Shadowy Flail Cactus~Spikes~You won?!?!~\r
+4~Slicktome Wight~Acid~You're pretty slick!~\r
+4~Songaxe Sprite~Axe~Lalalalalalaaaaa~\r
+4~Tearblood Roper~Bloodthirst~I have to cry.~\r
+4~Thunder-Basher~Bash~Fine! Be like that!~\r
+4~Unicorn Monster~Horn~My horn! You broke it!~\r
+4~Unknowable Brain Choker~Mental Asphyxiation~But I'm smarter!~\r
+4~Zombie Tangler~Voodoo powers~Well, I'm dead!~\r
+4~Bloomgas~Putrid Gas~Whats that smell?~\r
+4~Brilliant Swarm-Posessor~Sting~Well thats just Brilliant!~\r
+4~Chromatic Imp~Imp Scale~You suck!~\r
+5~Giant Sphinx~Ancient Curse~You look in awe at the great wonder, collapsed at your feet!~\r
+5~Giant Ogre~Big Log~Your wits outmatched the ogre's brawn... big dumb thing.~\r
+5~Massive Cockroach~Piercing Hiss~Where's the exterminator when you need one?~\r
+5~Large Venomous Snake~Poison Fangs~After killing this beast you check for puncture marks... you find none, luckily.~\r
+5~Lizard Man~Deadly Jaws~His scales made for tough armor, and his jaws for a tougher opponent!~\r
+5~Face Dancer~Illusion Scyth~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!~\r
+5~Darklord Longbow Archer~Deadly Bow and Arrows~Your face turns white with horror after you realize you just met the devil's protector!~\r
+5~Hell's Paladin~Sword of Hellfire~This is starting to get tough you think. Do you really want to go to level 6?~\r
+5~The Unknown Soldier~Soul Torture~Who was that? Where was he from? And what was that weapon??~\r
+5~Undead Cult Leader~Lance of Deceit~His words fall on deaf ears... this is one cult you will NOT be part of!~\r
+5~Water Serpent~Forked Tongue~The serpent squeals as you cut off its head!~\r
+5~Silverback Gorilla~Deadly Poison Banana Peel~Was that gorilla or guerilla?~\r
+5~Cosmic Slash Spider~Venom bite~I'm going back to my web!~\r
+5~Crystal Berserker-behemoth~Beserk!~You're just crazy~\r
+5~Elder Corpse-miner~Rotten smell~Back to the 'ol mine~ \r
+5~Gibber Shocker~Electricity~What a shock!~\r
+5~Hellish Choker~Choking~But I'm evil, I'm supposed to win!~\r
+5~Hypnotic Bane~Hypnotic powers~I need to order the new "Hypnotism for Dummies"~\r
+5~Lakevolcano Man~Lava~Perhaps Lava and water make a bad combo..~\r
+5~Memory Orb~Knowledge~I'm still smarter~\r
+5~Meteor Bear~Gihugic Claws~Rawwwwrrrrr~\r
+5~Meteorleaf~Fire~*WHAM*~\r
+5~Quadra Seeker-breaker~Quad~I never liked people like you~\r
+6~Cheap Bastard~Sack of Pennies~You hear him scream, "MY COINS!!" as you run off with his sack.~\r
+6~Disgruntled Postal Worker~AK-47~I guess he went postal!~\r
+6~Unix Administrator~rm -rf you~mv unixadmin /dev/null ; ls unixadmin ... You make sure he's null and void!~\r
+6~Tremble Troll~Tree Trunk Sized Arms~The creature lies shaking in a pool of blood at your feet.~\r
+6~Flood Monkey~Swamp Weed Rope~Don't tie me down! Ooh Ooh! Aah Aah!~\r
+6~Mim Gryan~Needle Fingers~The once razor sharp needles have been grinded to a dull point by your armor.~\r
+6~Galley Beggar~Shrieking Laugh~What the heck was so funny?~\r
+6~Freybug~Rocks~Your mother was a rolling stone!~\r
+6~Psi Morph~Mind Control~It's a good thing this monster couldn't control your spirit!~\r
+6~Aibyteyu~Spear Fork~Where's the Beef!?!?~\r
+6~Atax~Tiny Daggers~This THING took on the form of your best friend! Keep your eyes peeled next time!~\r
+6~Idunkjoo~Trident~You frantically struggle for air as you asphyxiate between the trident's prongs! WHEW!~\r
+6~Sandmountain Hangman~Sand~Arg, there's sand in my eye!~\r
+6~Secret Stench Magician~Stinky Magic~Is that smell really me?~\r
+6~Southern Flare Soaker~Red Flare~I'm going west...~\r
+6~Steel Zombie~Ghost Steel~But.. how!?~\r
+6~Stunhowl Phantom~Ghostly powers~I'm stunned!~\r
+6~Wooden Glove~Splinter~Crap, got a splinter in my glove!~\r
+7~Godzilla~Sparks~<Godzilla> ROAAAAAAR!!!~\r
+7~Night Crawler~Long Tail~You cannot defend against my teleporting!~\r
+7~Large Cactus~10,000 Needles~Pins and needles!!~\r
+7~Fremen Fedaykin~Weirding Way~The death commando calls out for his beloved Muad'Dib before he dies.~\r
+7~Land Shark~Razor Jaws~After you slay the half breed you tear off its fin and watch the pool of blood gather.~\r
+7~Wraith Knight~Dark Sword~You could almost taste your impending doom with every swing of his sword!~\r
+7~Daredevil~Walking Cane~All you can hear him say through his now toothless grin is "I'm not the bad guy!"~\r
+7~Invisible Boxer~Floating Gloves~You had a hard time with this opponent, his blood soaked flesh is now fully visible.~\r
+7~Evil Santa~Bag of Coal~This wicked black cloaked rival can do no more harm!~\r
+7~Referee~Screeching Whistle~Personal foul. Penalty: his life!~\r
+7~Warlock~Magic Staff~His spells were no match for your heroic display of power!~\r
+7~Mafia Boss~Gatling Gun~You made him an offer he couldn't refuse!~\r
+8~Cyclops~Laser Eye~That's one hot laser.\r
+8~Wan's Beast~Crushing Embrace~The hairy thing has finally stopped moving.\r
+8~Lord Mathese~Fencing Sword~You have wiped the sneer off his face once and for all.\r
+8~King Arthur's Evil Twin~Excabular~You feel lucky to have lived, things could have gone sour..\r
+8~Gate Keeper~Large Key~Goodness he was strong! No wonder he's guarding the gate!\r
+8~Flying Elephant~Trunk~You wonder how such a large beast was able to fly.\r
+8~Two Headed Lion~Two Headed Pounce~You have slain the mythical beast and, in the process, have cut off both of its heads!\r
+8~Flying Purple People Eater~Horn on his Head~He was a one eyed one eared flying purple people eater!\r
+8~Red Neck of the East~Trailer Hitch~If you go to your family reunion to pick up women, you might be a redneck!\r
+8~Decomposed Corpse~Horrid Stench~Your stomach churns as you flee from this vile creature's twice killed carcus!\r
+8~Empty Armor~Translucent Sword~The armor falls into a pile as your finishing blow misses completely! Where did it go?\r
+8~Liquid Gold Man~Sword Arm~He was tough, and you were greedy, but the payoff is wonderful!\r
+9~Iron Maiden~Hell and Fire~666! THE NUMBER OF THE BEAST!\r
+9~Black Eye~Blank Stare~The eye seems to stare eternally inward from now on!\r
+9~Bill Gates~Blue Screen of Death~format c: /q ...He's DEAD!\r
+9~Honored Matre~Tantric Ecstacy~The whore's attempts at sexual government have been halted for now!\r
+9~Shaitan~Melange Agony~Shai Hulud's warning must be taken with extreme humility, lest you invoke the wrath of Leto! Bi La Kaifa!\r
+9~Bene Tleilax Master Waff~Poison Tipped Darts~You almost didn't have time to dodge the darts thrown from his sleeves!\r
+9~Reverend Mother~Gom Jabbar~Her muscle conditioning was exquisite... but yours is better!\r
+9~Extremely Large Dingo~Sharp Canines~That stupid mutt won't bother you anymore mate!\r
+9~Walking Ebola Virus~Disease Ridden Body~You better decontaminate yourself, lest you find yourself infected by the vile monster!\r
+9~Corprus Stalker~Swollen Limbs~He was slow, but extremely powerful! The corprus disease must do something to his body...\r
+9~Alien Priest~Religious Banter~Green blood oozes from the carcus of this deceased missionary from beyond...\r
+9~Mad Scientist~Hydrochloric Acid~The strange man cackles as he crawls away. All you catch is something about chemistry... ?\r
+10~Baby Lag Beast~Lag Knife~It shrinks up into a little ball and slowly fades away.\r
+10~Horrible Smell~Stink Bombs~You finish it off by hanging up a pine tree deodorizer around its neck.\r
+10~Small Lag Beast~Glowing Lag Knife~Wow, that was an ugly little thing!\r
+10~Undead Egyptian Slave~Carpenter's Mallet~That will be the last time he will strike with a hammer again!\r
+10~Medium Lag Beast~Lag dagger~You wipe off the brain matter left behind. You just had this armor washed too!\r
+10~Boat Builder~A Large Adz~The adz falls to the ground next to the builder's corpse.\r
+10~Unwelcomed Guest~A Fruit Cake with Nuts~Easily one of the funnest kills today!\r
+10~John The Bard~An Oak Staff~He earned \1fhis\1f wings earlier than he had planned.\r
+10~Mad Summoner~Swarm of Bees~The bees begin devouring the summoner's corpse. You slowly back away...\r
+10~Ugly Harlot~Rock Filled Purse~Her tattered purse falls as she crumples to the ground.\r
+10~White Ninja~Large Sai~As he begins to fall, a puff of smoke appears and the corpse is gone...hmmm..\r
+10~Werewolf~Razor Sharp Fangs~The werewolf yelps like a kicked puppy, then turns into human form before releasing its final breath.\r
+Large Lag Beast~Lag Sword~These things keep getting nastier and nastier.\r
+11~Mean Lag Beast~Glowing Lag Broadsword~It slowly doubles over, as the halves of its body seperate into two peices from your blow...\r
+11~Lag Beast Lord~Huge Lag Battle Axe~It explodes in a massive array of bright light.\r
+11~Black Widow~Dripping Fangs~As you deliver the final blow, the spider shrivles up on its back and twitches..\r
+11~Mephistopheles~Faustian Sword~The corpse erupts into a burst of extremely hot flames before disappearing into the void.\r
+11~Amen Ra~Large Golden Staff~The heavens shake violently at the death of this one...\r
+11~Insane Clown~Big Red Shoe~DEAD! No loss here, you hate clowns anyway...\r
+11~Black Wyrm~Bloodied Claws~It dies with a piercing hiss...\r
+11~UnHoly Wrath~Sword of Armageddon~Shadows engulf the corpse. A chill passes through the air.\r
+11~Stone Giant~Huge Boudler~The once fearsome Stone Giant turns into a pile of pebbles.\r
+11~Evil Unicorn~Large Golden Horn~The Unicorn's beautiful mane is now covered in blood as it falls over, dead.\r
+11~Troll~Large Spiked Club~The smell is overwhelming, this is a good place for a stick-up.\r
+12~Insane Lag Beast~Glowing claws~Cackling, it looks at you and giggles before his head separates from his body.\r
+12~Ghost of the Mean Lag Beast~Fangs covered in feces~With a soft eerie moan, the ghost dissipates.\r
+12~Imhotep~Shimmering Sword~Thunder deafens all who live, you feel a surge of power pass through you, and you ask yourself, "What have I done?"\r
+12~Holy Wrath~Hand of God~If it bleeds and dies, then it was no god.\r
+12~Inu Yasha~The Tetsusaiga~Just before he dies, you notice his eyes turn red! You quickly run away victorious. (You hope)\r
+12~Sesshoumaru~The Tensaiga~You see The Tensaiga glow just before Sesshoumaru's body seemingly evaporates...\r
+12~Floating Bastard Sword~Slicing Blade~The sword falls to the ground motionless, then promptly rusts...they just don't make em like they used to...\r
+12~Floating Eye~Gaze of Death~Liquid oozes from the punctures, ewww...\r
+12~Ghost of Mephistopheles~Glowing Faustian Sword~You sent him straight back to Hell...again...\r
+12~Screeching Wraith~Peircing Scream~Ahh, precious silence, you still have ringing in your ears, though...\r
+12~Ogre Lord~Titan's Hammer~He was tough, but not tough enough.\r
+12~Mumrah the Everliving~Touch of Decay~Everliving? HAH! Riggghht...
\ No newline at end of file
+++ /dev/null
-Slime~Acid Goo~The slime oozes into nothing... you clean the acid goo off of your weapon~\r
-Ghost~Cold Breath~You feel a chill as the spirit leaves the realm.~\r
-Ugly Rodent~Sharp Teeth~You stomp on the Ugly Rodent's remains for a finishing blow.~\r
-Whart Hog~Tusks~You cook and eat the hog for good measure!~\r
-Pesky Kid~Slingshot~You take his slingshot and snap the band, sending the kid crying home to mom~\r
-Playground Bully~Painful Noogie~You give him an indian burn, and punt him across the schoolyard!~\r
-Small Imp~Dagger~You can't help but laugh as he stumbles and falls onto his own dagger!~\r
-Little Monkey~Monkey Wrench~You want to cook it, but you just can't think of eating something that looks so human!~\r
-Grub Worm~Minor Nudge~You decide to save the poor little fella for your next fishing trip.~\r
-Drakee~Tail Slap~You hold the little Drakee by its tale and slam it down on a dry stump!~\r
-Fat Slob~Smelly Breath~You kick his stomach for fun, and are thrown back by the spring of it all!~\r
-Lost Warrior~Long Sword~You give him a proper burial in respect for the dead warrior.~\r
-Harry Potter~Nimbus 2000~I don't go looking for trouble. Trouble usually finds me.~\r
-Snake Nidhogg~Crushtail~CURSE YOU!~\r
-Seven of Nine~Nanoprobes~Death is irrelevant, resistance is futile~\r
-Great Smiley~Happiness~Wheeeeeeeee, party!! :D~\r
-Crud Puppy~Bad Office Coffee~My evil powers have grown weak!~\r
-Layla~Sexy Kiss of Insanity~She lookes at you with her misleading eyes, almost making you feel bad you killed her.~\r
-Ignatz Despoiler-of-Maidens~Bludgeon~Blessed with his own stupidity!~\r
-King Kong~Skyscraper~I want my woman!~\r
-Sergeant Gunnary Heartman~Drill Voice~You still need training boy!~\r
-Cartman~Flammable Fart~Respect my authority!
\ No newline at end of file
+++ /dev/null
-# Name~Weapon~Death Phrase (said when they die)\r
-# Level 10 <damaged at damaged.no-ip.com>\r
-Baby Lag Beast~Lag Knife~It shrinks up into a little ball and slowly fades away.\r
-Horrible Smell~Stink Bombs~You finish it off by hanging up a pine tree deodorizer around its neck.\r
-Small Lag Beast~Glowing Lag Knife~Wow, that was an ugly little thing!\r
-Undead Egyptian Slave~Carpenter's Mallet~That will be the last time he will strike with a hammer again!\r
-Medium Lag Beast~Lag dagger~You wipe off the brain matter left behind. You just had this armor washed too!\r
-Boat Builder~A Large Adz~The adz falls to the ground next to the builder's corpse.\r
-Unwelcomed Guest~A Fruit Cake with Nuts~Easily one of the funnest kills today!\r
-John The Bard~An Oak Staff~He earned \1fhis\1f wings earlier than he had planned.\r
-Mad Summoner~Swarm of Bees~The bees begin devouring the summoner's corpse. You slowly back away...\r
-Ugly Harlot~Rock Filled Purse~Her tattered purse falls as she crumples to the ground.\r
-White Ninja~Large Sai~As he begins to fall, a puff of smoke appears and the corpse is gone...hmmm..\r
-Werewolf~Razor Sharp Fangs~The werewolf yelps like a kicked puppy, then turns into human form before releasing its final breath.
\ No newline at end of file
+++ /dev/null
-# Name~Weapon~Death Phrase (said when they die)\r
-# Level 11 <damaged at damaged.no-ip.com>\r
-Large Lag Beast~Lag Sword~These things keep getting nastier and nastier.\r
-Mean Lag Beast~Glowing Lag Broadsword~It slowly doubles over, as the halves of its body seperate into two peices from your blow...\r
-Lag Beast Lord~Huge Lag Battle Axe~It explodes in a massive array of bright light.\r
-Black Widow~Dripping Fangs~As you deliver the final blow, the spider shrivles up on its back and twitches..\r
-Mephistopheles~Faustian Sword~The corpse erupts into a burst of extremely hot flames before disappearing into the void.\r
-Amen Ra~Large Golden Staff~The heavens shake violently at the death of this one...\r
-Insane Clown~Big Red Shoe~DEAD! No loss here, you hate clowns anyway...\r
-Black Wyrm~Bloodied Claws~It dies with a piercing hiss...\r
-UnHoly Wrath~Sword of Armageddon~Shadows engulf the corpse. A chill passes through the air.\r
-Stone Giant~Huge Boudler~The once fearsome Stone Giant turns into a pile of pebbles.\r
-Evil Unicorn~Large Golden Horn~The Unicorn's beautiful mane is now covered in blood as it falls over, dead.\r
-Troll~Large Spiked Club~The smell is overwhelming, this is a good place for a stick-up.
\ No newline at end of file
+++ /dev/null
-# Name~Weapon~Death Phrase (said when they die) \r
-# Level 12 <damaged at damaged.no-ip.com>\r
-Insane Lag Beast~Glowing claws~Cackling, it looks at you and giggles before his head separates from his body.\r
-Ghost of the Mean Lag Beast~Fangs covered in feces~With a soft eerie moan, the ghost dissipates.\r
-Imhotep~Shimmering Sword~Thunder deafens all who live, you feel a surge of power pass through you, and you ask yourself, "What have I done?"\r
-Holy Wrath~Hand of God~If it bleeds and dies, then it was no god.\r
-Inu Yasha~The Tetsusaiga~Just before he dies, you notice his eyes turn red! You quickly run away victorious. (You hope)\r
-Sesshoumaru~The Tensaiga~You see The Tensaiga glow just before Sesshoumaru's body seemingly evaporates...\r
-Floating Bastard Sword~Slicing Blade~The sword falls to the ground motionless, then promptly rusts...they just don't make em like they used to...\r
-Floating Eye~Gaze of Death~Liquid oozes from the punctures, ewww...\r
-Ghost of Mephistopheles~Glowing Faustian Sword~You sent him straight back to Hell...again...\r
-Screeching Wraith~Peircing Scream~Ahh, precious silence, you still have ringing in your ears, though...\r
-Ogre Lord~Titan's Hammer~He was tough, but not tough enough.\r
-Mumrah the Everliving~Touch of Decay~Everliving? HAH! Riggghht...
\ No newline at end of file
+++ /dev/null
-Lost Warrior's Cousin Larry~Wood Axe~He was pretty pissed you killed his cousin, but he seems to have suffered the same fate!~\r
-Sandman~Sleeping Dust~You put the sandman to his final sleep.~\r
-Skank~Stiletto Heel~Your pimp hand is way strong!~\r
-Goblin Gardener~Garden Spade~You trample on his garden after slaying him... that felt good!~\r
-Evil Elf~Dark Bow~Elves are usually nice you thought... hmm.~\r
-Viking Warrior~Broad Sword~You heard vikings were big, but not THAT big!~\r
-Wicked Witch~Cackling Laugh~Just for kicks, you splash some water on her and watch her melt.~\r
-Vampire Bat~Blood Sucking Fangs~You fry up the bat and eat it... needs gaaahlic.~\r
-Thorn Bush~101 Thorns~You set the bush ablaze and roast some marshmallows.~\r
-Barbarian~Heavy Sword~You listen to him moan as he falls over dead.~\r
-Crypt Rat~Stinging Bite~You squash the little rodent for fear that it might not be dead.~\r
-Small Orc~Sharp Blade~It's an ugly one, and it would've grown up to be a terror...~\r
-Virus Bots~Trojan Horses~You run a quick virus scan before you leave this software in the dust.\r
-Hex Maniac~Satanic Powers~You'll go to hell!~\r
-Eight-legged-freak~Venom~We'll meet again!~\r
-Anger Piercer~Pointy sword~You broke my sword!~\r
-Bookwarp Cadaver~Rotten smell~Don't let me rott!~\r
-Clubthunder Enchanter~Enchantments~My magic has run dry...~\r
-Disinterred Medusa~Snakes~What did you do to my snakes!~\r
-Dissolver Manipulator-hangman~Itching ropes~You broke my rope!~\r
-Gloomy Kraken~Weirdness~Glooooooooooom~\r
-Hookweb Ophidian~Bad breath~Noooooooooooo~\r
-Leech Ant~Leech~You anti-leecher!~
\ No newline at end of file
+++ /dev/null
-Teferi~Puzzle Box~It was a puzzling experience.~\r
-Spineless Thug~Spiked Bat~See you at the crossroads!~\r
-Pyromaniac~Flame Thrower~He chants FIRE FIRE as he falls to the ground... a burning heap of flesh.~\r
-Evil Enchantress~Deadly Spell~She looked just about as good as she fought.~\r
-Killer Leprechaun~Gold Rush~You steal his pot of gold... that's a lot of money!~\r
-Avalanche Rider~Huge Snowball~You take his snowboard and snap it in two!~\r
-Blundering Idiot~Stupidity~Now there's one person you don't feel sorry for killing!~\r
-Militant Anarchist~Molotov Cocktail~Order has been restored for now...~\r
-Scathe Zombies~Death Grip~That was perhaps the scariest experience of your life.~\r
-Demon Llama~Flamed Spit~You wipe the spit off your face and fling it back at the Llama.~\r
-Juggalo~Clown Axe~What is a Juggalo? I don't know!~\r
-The Boogie Man~Striking Fear~He's scared you for the very last time!~\r
-Mace Plant~Mace~You stepped on me!~\r
-Magician Ear~Odd powers~AAAH! Not so loud!~\r
-Pudding Barracuda~Bad taste~You don't like my flavor?~\r
-Rock Scavenger~Nosepick~Don't leave me here!~\r
-Russet Pup~Licking power~Arf?~\r
-Scavenging Lich~Spiked club~Bad, bad man!~ \r
-Scream Controller~Loud Shriek~My voice....~
\ No newline at end of file
+++ /dev/null
-Living Fire~Scorching Wind~You extinguish the Living Flame once and for all!~\r
-Raging Orc~Orcish Artillary~This orc was a bit tougher than you remembered!~\r
-Huge Tarantula~Tangling Web~You're glad you overcame your arachniphobia so soon!~\r
-Rabid Wolf~Cujo Bite~The mutt falls over dead as white foam drips from its deadly canines...~\r
-Goblin Fighter~Morning Star~He almost got you, but you sliced off his head.~\r
-Grizzly Bear~Razor Claws~It almost got you this time... better be careful~\r
-Skeleton Man~Leg Bone~As a finisher, you wind up with the broad side of your weapon and hit his skull off for a home run!~\r
-Young Werewolf~Gnashed Teeth~You scatter the wolf's body parts in hopes he will stay dead!~\r
-Dark Infantry~Flesh Reaper~Light has prevailed this time... but it's only so long before you meet again.~\r
-Erie Spirit~Deadly Grin~His cousin the ghost was a little bit easier.~\r
-Gollum~Precious Treasure~Gollum screams out "MY PRECIOUS" as his small body falls limp from your blow.~\r
-Rock Fighter~Boulders~You dodge his last rock, and counter with a low blow, cutting off his legs.~\r
-Shadowy Flail Cactus~Spikes~You won?!?!~\r
-Slicktome Wight~Acid~You're pretty slick!~\r
-Songaxe Sprite~Axe~Lalalalalalaaaaa~\r
-Tearblood Roper~Bloodthirst~I have to cry.~\r
-Thunder-Basher~Bash~Fine! Be like that!~\r
-Unicorn Monster~Horn~My horn! You broke it!~\r
-Unknowable Brain Choker~Mental Asphyxiation~But I'm smarter!~\r
-Zombie Tangler~Voodoo powers~Well, I'm dead!~\r
-Bloomgas~Putrid Gas~Whats that smell?~\r
-Brilliant Swarm-Posessor~Sting~Well thats just Brilliant!~\r
-Chromatic Imp~Imp Scale~You suck!~
\ No newline at end of file
+++ /dev/null
-# Name~Weapon~~Death Phrase (said when they die)\r
-#Level 5\r
-Giant Sphinx~Ancient Curse~You look in awe at the great wonder, collapsed at your feet!~\r
-Giant Ogre~Big Log~Your wits outmatched the ogre's brawn... big dumb thing.~\r
-Massive Cockroach~Piercing Hiss~Where's the exterminator when you need one?~\r
-Large Venomous Snake~Poison Fangs~After killing this beast you check for puncture marks... you find none, luckily.~\r
-Lizard Man~Deadly Jaws~His scales made for tough armor, and his jaws for a tougher opponent!~\r
-Face Dancer~Illusion Scyth~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!~\r
-Darklord Longbow Archer~Deadly Bow and Arrows~Your face turns white with horror after you realize you just met the devil's protector!~\r
-Hell's Paladin~Sword of Hellfire~This is starting to get tough you think. Do you really want to go to level 6?~\r
-The Unknown Soldier~Soul Torture~Who was that? Where was he from? And what was that weapon??~\r
-Undead Cult Leader~Lance of Deceit~His words fall on deaf ears... this is one cult you will NOT be part of!~\r
-Water Serpent~Forked Tongue~The serpent squeals as you cut off its head!~\r
-Silverback Gorilla~Deadly Poison Banana Peel~Was that gorilla or guerilla?~\r
-Cosmic Slash Spider~Venom bite~I'm going back to my web!~\r
-Crystal Berserker-behemoth~Beserk!~You're just crazy~\r
-Elder Corpse-miner~Rotten smell~Back to the 'ol mine~ \r
-Gibber Shocker~Electricity~What a shock!~\r
-Hellish Choker~Choking~But I'm evil, I'm supposed to win!~\r
-Hypnotic Bane~Hypnotic powers~I need to order the new "Hypnotism for Dummies"~\r
-Lakevolcano Man~Lava~Perhaps Lava and water make a bad combo..~\r
-Memory Orb~Knowledge~I'm still smarter~\r
-Meteor Bear~Gihugic Claws~Rawwwwrrrrr~\r
-Meteorleaf~Fire~*WHAM*~\r
-Quadra Seeker-breaker~Quad~I never liked people like you~
\ No newline at end of file
+++ /dev/null
-# Name~Weapon~Death Phrase (said when they die)\r
-#Level 6\r
-Cheap Bastard~Sack of Pennies~You hear him scream, "MY COINS!!" as you run off with his sack.~\r
-Disgruntled Postal Worker~AK-47~I guess he went postal!~\r
-Unix Administrator~rm -rf you~mv unixadmin /dev/null ; ls unixadmin ... You make sure he's null and void!~\r
-Tremble Troll~Tree Trunk Sized Arms~The creature lies shaking in a pool of blood at your feet.~\r
-Flood Monkey~Swamp Weed Rope~Don't tie me down! Ooh Ooh! Aah Aah!~\r
-Mim Gryan~Needle Fingers~The once razor sharp needles have been grinded to a dull point by your armor.~\r
-Galley Beggar~Shrieking Laugh~What the heck was so funny?~\r
-Freybug~Rocks~Your mother was a rolling stone!~\r
-Psi Morph~Mind Control~It's a good thing this monster couldn't control your spirit!~\r
-Aibyteyu~Spear Fork~Where's the Beef!?!?~\r
-Atax~Tiny Daggers~This THING took on the form of your best friend! Keep your eyes peeled next time!~\r
-Idunkjoo~Trident~You frantically struggle for air as you asphyxiate between the trident's prongs! WHEW!~\r
-Sandmountain Hangman~Sand~Arg, there's sand in my eye!~\r
-Secret Stench Magician~Stinky Magic~Is that smell really me?~\r
-Southern Flare Soaker~Red Flare~I'm going west...~\r
-Steel Zombie~Ghost Steel~But.. how!?~\r
-Stunhowl Phantom~Ghostly powers~I'm stunned!~\r
-Wooden Glove~Splinter~Crap, got a splinter in my glove!~
\ No newline at end of file
+++ /dev/null
-# Name~Weapon~Death Phrase (said when they die)\r
-#Level 7\r
-Godzilla~Sparks~<Godzilla> ROAAAAAAR!!!~\r
-Night Crawler~Long Tail~You cannot defend against my teleporting!~\r
-Large Cactus~10,000 Needles~Pins and needles!!~\r
-Fremen Fedaykin~Weirding Way~The death commando calls out for his beloved Muad'Dib before he dies.~\r
-Land Shark~Razor Jaws~After you slay the half breed you tear off its fin and watch the pool of blood gather.~\r
-Wraith Knight~Dark Sword~You could almost taste your impending doom with every swing of his sword!~\r
-Daredevil~Walking Cane~All you can hear him say through his now toothless grin is "I'm not the bad guy!"~\r
-Invisible Boxer~Floating Gloves~You had a hard time with this opponent, his blood soaked flesh is now fully visible.~\r
-Evil Santa~Bag of Coal~This wicked black cloaked rival can do no more harm!~\r
-Referee~Screeching Whistle~Personal foul. Penalty: his life!~\r
-Warlock~Magic Staff~His spells were no match for your heroic display of power!~\r
-Mafia Boss~Gatling Gun~You made him an offer he couldn't refuse!~
\ No newline at end of file
+++ /dev/null
-# Name~Weapon~Death Phrase (said when they die)\r
-#Level 8\r
-Cyclops~Laser Eye~That's one hot laser.\r
-Wan's Beast~Crushing Embrace~The hairy thing has finally stopped moving.\r
-Lord Mathese~Fencing Sword~You have wiped the sneer off his face once and for all.\r
-King Arthur's Evil Twin~Excabular~You feel lucky to have lived, things could have gone sour..\r
-Gate Keeper~Large Key~Goodness he was strong! No wonder he's guarding the gate!\r
-Flying Elephant~Trunk~You wonder how such a large beast was able to fly.\r
-Two Headed Lion~Two Headed Pounce~You have slain the mythical beast and, in the process, have cut off both of its heads!\r
-Flying Purple People Eater~Horn on his Head~He was a one eyed one eared flying purple people eater!\r
-Red Neck of the East~Trailer Hitch~If you go to your family reunion to pick up women, you might be a redneck!\r
-Decomposed Corpse~Horrid Stench~Your stomach churns as you flee from this vile creature's twice killed carcus!\r
-Empty Armor~Translucent Sword~The armor falls into a pile as your finishing blow misses completely! Where did it go?\r
-Liquid Gold Man~Sword Arm~He was tough, and you were greedy, but the payoff is wonderful!
\ No newline at end of file
+++ /dev/null
-# Name~Weapon~Death Phrase (said when they die) level 9\r
-# Level 9\r
-Iron Maiden~Hell and Fire~666! THE NUMBER OF THE BEAST!\r
-Black Eye~Blank Stare~The eye seems to stare eternally inward from now on!\r
-Bill Gates~Blue Screen of Death~format c: /q ...He's DEAD!\r
-Honored Matre~Tantric Ecstacy~The whore's attempts at sexual government have been halted for now!\r
-Shaitan~Melange Agony~Shai Hulud's warning must be taken with extreme humility, lest you invoke the wrath of Leto! Bi La Kaifa!\r
-Bene Tleilax Master Waff~Poison Tipped Darts~You almost didn't have time to dodge the darts thrown from his sleeves!\r
-Reverend Mother~Gom Jabbar~Her muscle conditioning was exquisite... but yours is better!\r
-Extremely Large Dingo~Sharp Canines~That stupid mutt won't bother you anymore mate!\r
-Walking Ebola Virus~Disease Ridden Body~You better decontaminate yourself, lest you find yourself infected by the vile monster!\r
-Corprus Stalker~Swollen Limbs~He was slow, but extremely powerful! The corprus disease must do something to his body...\r
-Alien Priest~Religious Banter~Green blood oozes from the carcus of this deceased missionary from beyond...\r
-Mad Scientist~Hydrochloric Acid~The strange man cackles as he crawls away. All you catch is something about chemistry... ?
\ No newline at end of file
using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
#include <GameServ/DataLayer/IItemDAO.h>\r
using GameServ::DataLayer::DataAccessObjects::IItemDAO;\r
+#include <GameServ/DataLayer/IMonsterDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IMonsterDAO;\r
\r
\r
#include <boost/smart_ptr/shared_ptr.hpp>\r
\r
virtual shared_ptr<IPlayerDAO> GetPlayerDAO(void) const;\r
virtual shared_ptr<IItemDAO> GetItemDAO(void) const;\r
+ virtual shared_ptr<IMonsterDAO> GetMonsterDAO(void) const;\r
\r
private:\r
\r
\r
static string CreateItemId(const string &Number);\r
static string GetItemNumberFromId(const string &Id);\r
+\r
+ static string CreateMonsterId(const unsigned int &Level, const string &Name);\r
+\r
private:\r
FileId();\r
~FileId();\r
+#ifndef __GS__FILEMONSTERDAO_H__\r
+#define __GS__FILEMONSTERDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/MonsterGO.h>\r
+#include <GameServ/DataLayer/IMonsterDAO.h>\r
+using GameServ::GameLayer::GameObjects::MonsterGO;\r
+using GameServ::DataLayer::DataAccessObjects::IMonsterDAO;\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <vector>\r
+using std::vector;\r
+\r
+#include <map>\r
+using std::map;\r
+\r
+namespace GameServ { namespace DataLayer { namespace File\r
+{\r
+ //! File implementation of IMonsterDAO interface\r
+ /*!\r
+ If you're using an File datasource, you will be using this\r
+ DAO to access Monsters.\r
+ */\r
+ class FileMonsterDAO : public IMonsterDAO\r
+ {\r
+ public:\r
+ // Ctors, Dtors ///////////////////////////////////////////////////////\r
+ FileMonsterDAO(void);\r
+ FileMonsterDAO(const string &filename);\r
+ virtual ~FileMonsterDAO();\r
+\r
+ // Methods ////////////////////////////////////////////////////////////\r
+ virtual shared_ptr<MonsterGO> GetById(const string &Id) const;\r
+\r
+ virtual vector< shared_ptr<MonsterGO> > GetMonstersByLevel(const unsigned int &Level) const;\r
+\r
+ virtual bool IdExists(const string &Id) const;\r
+\r
+ void LoadMonsterCache(void);\r
+\r
+ private:\r
+ //! Data file\r
+ string mFilename;\r
+\r
+ // Helper Methods /////////////////////////////////////////////////////\r
+\r
+ //! Creates the MonsterGO found at iterator position\r
+ shared_ptr<MonsterGO> CreateMonsterFromLine(const string &line) const;\r
+\r
+ //! Get the Monster database file path\r
+ string GetMonsterFilePath(void) const;\r
+\r
+ void Initialize(const string &filename);\r
+\r
+ map<string, shared_ptr<MonsterGO> > spMonsterCache;\r
+ };\r
+} } } // GameServ.DataLayer.DataAccessObjects.File\r
+\r
+#endif // __GS__FileMonsterDAO_H__\r
using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
#include <GameServ/DataLayer/IItemDAO.h>\r
using GameServ::DataLayer::DataAccessObjects::IItemDAO;\r
+#include <GameServ/DataLayer/IMonsterDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IMonsterDAO;\r
\r
\r
#include <boost/smart_ptr/shared_ptr.hpp>\r
//! Item DataAccessObject for all item related operations\r
virtual shared_ptr<IItemDAO> GetItemDAO(void) const = 0;\r
\r
+ //! Monster DataAccessObject for all monster related operations\r
+ virtual shared_ptr<IMonsterDAO> GetMonsterDAO(void) const = 0;\r
+\r
private:\r
\r
};\r
+#ifndef __GS__ILEVELDAO_H__\r
+#define __GS__ILEVELDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/LevelGO.h>\r
+using GameServ::GameLayer::GameObjects::LevelGO;\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <list>\r
+using std::list;\r
+#include <string>\r
+using std::string;\r
+\r
+namespace GameServ { namespace DataLayer { namespace DataAccessObjects\r
+{\r
+ //! Interface for Level Data Access Objects \r
+ /*! \r
+ This is the interface for all Level DAOs. Each specific datasource\r
+ will need to inherit this common interface.\r
+ */\r
+ class ILevelDAO\r
+ {\r
+ public:\r
+ // Ctors, Dtors ///////////////////////////////////////////////////////\r
+ ILevelDAO(void);\r
+ virtual ~ILevelDAO(void); // Needs to be virtual \r
+\r
+ //! Get the Level using a unique data/object Id\r
+ /*!\r
+ \param Id Unique identifier\r
+ \return A boost shared pointer to a Level game object if found\r
+ otherwise the list is empty.\r
+ */\r
+ virtual shared_ptr<LevelGO> GetById(const string &Id) const = 0;\r
+\r
+ //! Function to quickly search to see if an Id exists or not\r
+ /*!\r
+ \param Id The Id of the game object to search for\r
+ \return true if the Id is valid and exists in the data, false otherwise\r
+ */\r
+ virtual bool IdExists(const string &Id) const = 0;\r
+\r
+ private:\r
+ \r
+ \r
+ };\r
+} } }\r
+#endif // __GS__ILevelDAO_H__\r
+#ifndef __GS__IMASTERDAO_H__\r
+#define __GS__IMASTERDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/MasterGO.h>\r
+using GameServ::GameLayer::GameObjects::MasterGO;\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <list>\r
+using std::list;\r
+#include <string>\r
+using std::string;\r
+\r
+namespace GameServ { namespace DataLayer { namespace DataAccessObjects\r
+{\r
+ //! Interface for Master Data Access Objects \r
+ /*! \r
+ This is the interface for all Master DAOs. Each specific datasource\r
+ will need to inherit this common interface.\r
+ */\r
+ class IMasterDAO\r
+ {\r
+ public:\r
+ // Ctors, Dtors ///////////////////////////////////////////////////////\r
+ IMasterDAO(void);\r
+ virtual ~IMasterDAO(void); // Needs to be virtual \r
+\r
+ //! Get the Master using a unique data/object Id\r
+ /*!\r
+ \param Id Unique identifier\r
+ \return A boost shared pointer to a Master game object if found\r
+ otherwise the list is empty.\r
+ */\r
+ virtual shared_ptr<MasterGO> GetById(const string &Id) const = 0;\r
+\r
+ //! Function to quickly search to see if an Id exists or not\r
+ /*!\r
+ \param Id The Id of the game object to search for\r
+ \return true if the Id is valid and exists in the data, false otherwise\r
+ */\r
+ virtual bool IdExists(const string &Id) const = 0;\r
+\r
+ private:\r
+ \r
+ \r
+ };\r
+} } }\r
+#endif // __GS__IMasterDAO_H__\r
+#ifndef __GS__IMONSTERDAO_H__\r
+#define __GS__IMONSTERDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/MonsterGO.h>\r
+using GameServ::GameLayer::GameObjects::MonsterGO;\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <vector>\r
+using std::vector;\r
+#include <string>\r
+using std::string;\r
+\r
+namespace GameServ { namespace DataLayer { namespace DataAccessObjects\r
+{\r
+ //! Interface for Monster Data Access Objects \r
+ /*! \r
+ This is the interface for all Monster DAOs. Each specific datasource\r
+ will need to inherit this common interface.\r
+ */\r
+ class IMonsterDAO\r
+ {\r
+ public:\r
+ // Ctors, Dtors ///////////////////////////////////////////////////////\r
+ IMonsterDAO(void);\r
+ virtual ~IMonsterDAO(void); // Needs to be virtual \r
+\r
+ //! Get the Monster using a unique data/object Id\r
+ /*!\r
+ \param Id Unique identifier\r
+ \return A boost shared pointer to a Monster game object if found\r
+ otherwise the list is empty.\r
+ */\r
+ virtual shared_ptr<MonsterGO> GetById(const string &Id) const = 0;\r
+\r
+ //! Function to quickly search to see if an Id exists or not\r
+ /*!\r
+ \param Id The Id of the game object to search for\r
+ \return true if the Id is valid and exists in the data, false otherwise\r
+ */\r
+ virtual bool IdExists(const string &Id) const = 0;\r
+\r
+ virtual vector< shared_ptr<MonsterGO> > GetMonstersByLevel(const unsigned int &Level) const = 0;\r
+\r
+ private:\r
+ \r
+ \r
+ };\r
+} } }\r
+#endif // __GS__IMonsterDAO_H__\r
//! Property get - Master\r
shared_ptr<MasterGO> Master(void) const;\r
\r
- //! Property set - Monster list\r
- void Monsters(const vector< shared_ptr<MonsterGO> > &spMonsters);\r
\r
- //! Property get - Monster List\r
- vector< shared_ptr<MonsterGO> > Monsters(void) const;\r
-\r
- //! Remove a monster from the list\r
- void RemoveMonster(shared_ptr<MonsterGO> spMonster);\r
-\r
- //! Add a monster to the list\r
- void AddMonster(shared_ptr<MonsterGO> spMonster);\r
\r
private:\r
-\r
- vector< shared_ptr<MonsterGO> > mspMonsters;\r
shared_ptr<MasterGO> mspMaster;\r
\r
};\r
//! Property set - Name\r
void Name(const string &value);\r
\r
+ //! Property get - Level\r
+ unsigned int Level(void) const;\r
+ //! Property set - Level\r
+ void Level(const unsigned int &value);\r
+\r
//! Property get - Gold\r
unsigned long int Gold(void) const;\r
//! Property set - Gold\r
void Gold(const unsigned long int &value);\r
\r
//! Property get - Health\r
- int Health(void) const;\r
+ unsigned int Health(void) const;\r
//! Property set - Health\r
- void Health(const int &value);\r
+ void Health(const unsigned int &value);\r
\r
//! Property get - Max Health\r
- int MaxHealth(void) const;\r
+ unsigned int MaxHealth(void) const;\r
//! Property set - Max Health\r
- void MaxHealth(const int &value);\r
+ void MaxHealth(const unsigned int &value);\r
\r
//! Property get - Strength\r
- int Strength(void) const;\r
+ unsigned int Strength(void) const;\r
//! Property set - Strength\r
- void Strength(const int &value);\r
+ void Strength(const unsigned int &value);\r
\r
//! Property get - Defense\r
- int Defense(void) const;\r
+ unsigned int Defense(void) const;\r
//! Property set - Defense\r
- void Defense(const int &value);\r
+ void Defense(const unsigned int &value);\r
\r
//! Property get - Weapon Name\r
string WeaponName(void) const;\r
virtual ObjectTypes::ObjectType ObjectType(void) const;\r
\r
private:\r
+ void Initialize(void);\r
+\r
string mName;\r
+ unsigned int mLevel;\r
unsigned long int mGold;\r
- int mHealth;\r
- int mMaxHealth;\r
- int mStrength;\r
- int mDefense;\r
+ unsigned int mHealth;\r
+ unsigned int mMaxHealth;\r
+ unsigned int mStrength;\r
+ unsigned int mDefense;\r
string mWeaponName;\r
string mDeathCry;\r
};\r
#include <GameServ/DataLayer/File/FileDAOFactory.h>\r
#include <GameServ/DataLayer/File/FilePlayerDAO.h>\r
#include <GameServ/DataLayer/File/FileItemDAO.h>\r
+#include <GameServ/DataLayer/File/FileMonsterDAO.h>\r
\r
using GameServ::DataLayer::File::FileDAOFactory;\r
using GameServ::DataLayer::File::FilePlayerDAO;\r
using GameServ::DataLayer::File::FileItemDAO;\r
+using GameServ::DataLayer::File::FileMonsterDAO;\r
\r
#include <boost/smart_ptr/shared_ptr.hpp>\r
using boost::shared_ptr;\r
return shared_ptr<IItemDAO>(new FileItemDAO());\r
}\r
\r
+shared_ptr<IMonsterDAO> FileDAOFactory::GetMonsterDAO(void) const\r
+{\r
+ return shared_ptr<IMonsterDAO>(new FileMonsterDAO());\r
+}\r
+\r
{\r
return Id;\r
}\r
+\r
+string FileId::CreateMonsterId(const unsigned int &Level, const string &Name)\r
+{\r
+ return str(format("%1%:%2%") % Level % Name);\r
+}
\ No newline at end of file
+#include <GameServ/DataLayer/File/FileMonsterDAO.h>\r
+using GameServ::DataLayer::File::FileMonsterDAO;\r
+\r
+#include <GameServ/GameLayer/GameObjects/MonsterGO.h>\r
+using GameServ::GameLayer::GameObjects::MonsterGO;\r
+\r
+#include <GameServ/DataLayer/DataLayerExceptions.h>\r
+using GameServ::DataLayer::Exceptions::ResourceException;\r
+using GameServ::DataLayer::Exceptions::DataLayerException;\r
+\r
+#include <GameServ/DataLayer/File/FileId.h>\r
+using GameServ::DataLayer::File::FileId;\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+#include <boost/format.hpp>\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/lexical_cast.hpp>\r
+using boost::shared_ptr;\r
+using boost::shared_static_cast;\r
+using boost::format;\r
+using boost::str;\r
+using boost::algorithm::to_upper;\r
+using boost::algorithm::to_lower;\r
+using boost::lexical_cast;\r
+using boost::bad_lexical_cast;\r
+#include <boost/tokenizer.hpp>\r
+typedef boost::tokenizer<boost::char_separator<char> > \r
+ tokenizer;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <fstream>\r
+using std::ifstream;\r
+using std::getline;\r
+using std::ofstream;\r
+using std::endl;\r
+\r
+#include <map>\r
+using std::map;\r
+\r
+FileMonsterDAO::FileMonsterDAO() : mFilename("data\\monsters.dat")\r
+{\r
+ Initialize(GetMonsterFilePath());\r
+}\r
+\r
+FileMonsterDAO::FileMonsterDAO(const string &filename)\r
+{\r
+ Initialize(filename);\r
+}\r
+\r
+FileMonsterDAO::~FileMonsterDAO()\r
+{\r
+}\r
+\r
+void FileMonsterDAO::Initialize(const string &filename)\r
+{\r
+ mFilename = filename;\r
+ LoadMonsterCache();\r
+}\r
+\r
+void FileMonsterDAO::LoadMonsterCache(void)\r
+{\r
+ assert(!mFilename.empty());\r
+ spMonsterCache.clear();\r
+ ifstream infile;\r
+ infile.open(mFilename.c_str());\r
+ if (infile.fail())\r
+ {\r
+ throw DataLayerException(str(format("Unable to open %1% for loading Monsters") % mFilename),\r
+ __FILE__, __LINE__);\r
+ }\r
+ while (!infile.eof())\r
+ {\r
+ string line;\r
+ shared_ptr<MonsterGO> spMonster;\r
+ getline(infile, line);\r
+ spMonster = CreateMonsterFromLine(line);\r
+ string id = spMonster->Id();\r
+ to_lower(id);\r
+ spMonsterCache[id] = spMonster;\r
+ }\r
+ infile.close();\r
+}\r
+\r
+string FileMonsterDAO::GetMonsterFilePath() const\r
+{\r
+ return mFilename;\r
+}\r
+\r
+shared_ptr<MonsterGO> FileMonsterDAO::GetById(const string &Id) const\r
+{\r
+ map<string, shared_ptr<MonsterGO> >::const_iterator iter;\r
+ string id = Id;\r
+ to_lower(id);\r
+ iter = spMonsterCache.find(id);\r
+ if (iter != spMonsterCache.end())\r
+ {\r
+ return shared_ptr<MonsterGO>(iter->second->Clone());\r
+ }\r
+ return shared_ptr<MonsterGO>();\r
+}\r
+\r
+shared_ptr<MonsterGO> FileMonsterDAO::CreateMonsterFromLine(const string &line) const\r
+{\r
+ assert(!line.empty());\r
+ shared_ptr<MonsterGO> spMonster;\r
+ spMonster = shared_ptr<MonsterGO>(new MonsterGO());\r
+ boost::char_separator<char> sep("~", 0, boost::keep_empty_tokens);\r
+ tokenizer tokens(line, sep);\r
+ tokenizer::iterator tok_iter = tokens.begin();\r
+\r
+ try\r
+ {\r
+ spMonster->Level(lexical_cast<unsigned int>((*tok_iter)));\r
+ }\r
+ catch (bad_lexical_cast)\r
+ {\r
+ throw DataLayerException(str(format("Corrupt monster line %1%. Improperly formatted level.") %\r
+ line), __FILE__, __LINE__);\r
+ }\r
+\r
+ tok_iter++;\r
+ if (tok_iter == tokens.end())\r
+ {\r
+ throw DataLayerException(str(format("Corrupt monster line %1%. Missing information") %\r
+ line), __FILE__, __LINE__);\r
+ }\r
+ spMonster->Name((*tok_iter));\r
+ spMonster->Id(FileId::CreateMonsterId(spMonster->Level(), spMonster->Name()));\r
+ tok_iter++;\r
+ if (tok_iter == tokens.end())\r
+ {\r
+ throw DataLayerException(str(format("Corrupt monster line %1%. Missing information") %\r
+ line), __FILE__, __LINE__);\r
+ }\r
+ tok_iter++;\r
+ if (tok_iter == tokens.end())\r
+ {\r
+ throw DataLayerException(str(format("Corrupt monster line %1%. Missing information") %\r
+ line), __FILE__, __LINE__);\r
+ }\r
+ spMonster->WeaponName((*tok_iter));\r
+ tok_iter++;\r
+ if (tok_iter == tokens.end())\r
+ {\r
+ throw DataLayerException(str(format("Corrupt monster line %1%. Missing information") %\r
+ line), __FILE__, __LINE__);\r
+ }\r
+ spMonster->DeathCry((*tok_iter));\r
+\r
+ return spMonster;\r
+}\r
+\r
+bool FileMonsterDAO::IdExists(const string &Id) const\r
+{\r
+ map<string, shared_ptr<MonsterGO> >::const_iterator iter;\r
+ string id = Id;\r
+ to_lower(id);\r
+ iter = spMonsterCache.find(id);\r
+ return (iter != spMonsterCache.end());\r
+}\r
+\r
+vector< shared_ptr<MonsterGO> > FileMonsterDAO::GetMonstersByLevel(const unsigned int &Level) const\r
+{\r
+ vector< shared_ptr<MonsterGO> > monsters(12);\r
+\r
+ map<string, shared_ptr<MonsterGO> >::const_iterator iter;\r
+ for (iter = spMonsterCache.begin(); iter != spMonsterCache.end(); iter++)\r
+ {\r
+ if (iter->second->Level() == Level)\r
+ {\r
+ monsters.push_back(shared_ptr<MonsterGO>(iter->second->Clone()));\r
+ }\r
+ }\r
+ return monsters;\r
+}\r
+#include <GameServ/DataLayer/ILevelDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::ILevelDAO;\r
+\r
+ILevelDAO::ILevelDAO()\r
+{\r
+}\r
+\r
+ILevelDAO::~ILevelDAO()\r
+{\r
+}
\ No newline at end of file
+#include <GameServ/DataLayer/IMasterDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IMasterDAO;\r
+\r
+IMasterDAO::IMasterDAO()\r
+{\r
+}\r
+\r
+IMasterDAO::~IMasterDAO()\r
+{\r
+}
\ No newline at end of file
+#include <GameServ/DataLayer/IMonsterDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IMonsterDAO;\r
+\r
+IMonsterDAO::IMonsterDAO()\r
+{\r
+}\r
+\r
+IMonsterDAO::~IMonsterDAO()\r
+{\r
+}
\ No newline at end of file
\r
LevelGO::~LevelGO()\r
{\r
- mspMonsters.clear();\r
- mspMaster.reset();\r
}\r
\r
bool LevelGO::operator ==(const LevelGO &right) const\r
{\r
- bool equal = (right.mspMaster == mspMaster && right.mspMonsters.size() == mspMonsters.size());\r
- // Just because it's expensive to check an entire vector, let's split it off to be sure the\r
- // initial comparison is true first.\r
- if (equal)\r
- {\r
- return right.mspMonsters == mspMonsters;\r
- }\r
- return equal;\r
+ return right.mspMaster == mspMaster;\r
}\r
\r
bool LevelGO::operator !=(const LevelGO &right) const\r
return ObjectTypes::Level;\r
}\r
\r
-void LevelGO::AddMonster(shared_ptr<MonsterGO> spMonster)\r
-{\r
- vector< shared_ptr<MonsterGO> >::const_iterator iter;\r
- iter = std::find(mspMonsters.begin(), mspMonsters.end(), spMonster);\r
- if (iter == mspMonsters.end())\r
- {\r
- mspMonsters.push_back(spMonster);\r
- }\r
-}\r
-\r
-void LevelGO::RemoveMonster(shared_ptr<MonsterGO> spMonster)\r
-{\r
- vector< shared_ptr<MonsterGO> >::const_iterator iter;\r
- iter = std::find(mspMonsters.begin(), mspMonsters.end(), spMonster);\r
- if (iter != mspMonsters.end())\r
- {\r
- mspMonsters.erase(iter);\r
- }\r
-}\r
-\r
-void LevelGO::Monsters(const vector< shared_ptr<MonsterGO> > &spMonsters)\r
-{\r
- mspMonsters = spMonsters;\r
-}\r
-\r
-vector< shared_ptr<MonsterGO> > LevelGO::Monsters(void) const\r
-{\r
- return mspMonsters;\r
-}\r
-\r
void LevelGO::Master(shared_ptr<MasterGO> spMaster)\r
{\r
mspMaster = spMaster;\r
\r
MonsterGO::MonsterGO() : GameObject()\r
{\r
+ Initialize();\r
}\r
\r
MonsterGO::MonsterGO(const string &Id) : GameObject(Id)\r
{\r
+ Initialize();\r
+}\r
+\r
+void MonsterGO::Initialize(void)\r
+{\r
+ mLevel = 0;\r
+ mGold = 0;\r
+ mHealth = 0;\r
+ mMaxHealth = 0;\r
+ mStrength = 0;\r
+ mDefense = 0;\r
}\r
\r
MonsterGO::~MonsterGO()\r
return mName;\r
}\r
\r
-void MonsterGO::Strength(const int &value)\r
+void MonsterGO::Level(const unsigned int &value)\r
+{\r
+ mLevel = value;\r
+}\r
+\r
+unsigned int MonsterGO::Level(void) const\r
+{\r
+ return mLevel;\r
+}\r
+\r
+void MonsterGO::Strength(const unsigned int &value)\r
{\r
- assert(value > 0);\r
mStrength = value;\r
}\r
\r
-int MonsterGO::Strength(void) const\r
+unsigned int MonsterGO::Strength(void) const\r
{\r
return mStrength;\r
}\r
\r
-void MonsterGO::Defense(const int &value)\r
+void MonsterGO::Defense(const unsigned int &value)\r
{\r
- assert(value > 0);\r
mDefense = value;\r
}\r
\r
-int MonsterGO::Defense(void) const\r
+unsigned int MonsterGO::Defense(void) const\r
{\r
return mDefense;\r
}\r
\r
-void MonsterGO::Gold(const unsigned long &value)\r
+void MonsterGO::Gold(const unsigned long int &value)\r
{\r
mGold = value;\r
}\r
\r
-unsigned long MonsterGO::Gold(void) const\r
+unsigned long int MonsterGO::Gold(void) const\r
{\r
return mGold;\r
}\r
\r
-void MonsterGO::Health(const int &value)\r
+void MonsterGO::Health(const unsigned int &value)\r
{\r
mHealth = value;\r
}\r
\r
-int MonsterGO::Health(void) const\r
+unsigned int MonsterGO::Health(void) const\r
{\r
return mHealth;\r
}\r
\r
-void MonsterGO::MaxHealth(const int &value)\r
+void MonsterGO::MaxHealth(const unsigned int &value)\r
{\r
mMaxHealth = value;\r
}\r
\r
-int MonsterGO::MaxHealth(void) const\r
+unsigned int MonsterGO::MaxHealth(void) const\r
{\r
return mMaxHealth;\r
}\r
\r
bool MonsterGO::operator==(const MonsterGO &right) const\r
{\r
- return mId == right.mId && mHealth == right.mHealth &&\r
+ return mId == right.mId && mLevel == right.mLevel && mHealth == right.mHealth &&\r
mDefense == right.mDefense && mDeathCry == right.mDeathCry &&\r
mGold == right.mGold && mHealth == right.mHealth && \r
mMaxHealth == right.mMaxHealth && mName == right.mName &&\r
bool MonsterGO::operator!=(const MonsterGO &right) const\r
{\r
return (!(*this == right));\r
-}
\ No newline at end of file
+}\r
+\r
+ObjectTypes::ObjectType MonsterGO::ObjectType(void) const\r
+{\r
+ return ObjectTypes::Monster;\r
+}\r