/********************************************************************************************
 * This is a simple skill I created called "NOFLY" which enables characters of a certain	  *
 * race. This is best used for a race that is affected by AFF_FLYING by defualt 		  *
 * (for exmample, dragons). This skill allows for the race to be able to master the arts	  *
 * of taking off, and landing gracefully. This skill is automatically set for your race at  *
 * level 1, and is set to 100 percent so that it is always effective.				  *
 * You'll have to forive me if it appears large, but I wanted to make sure it was clear and *
 * somewhat easy to read, as this is my ver first snippet I've ever created.			  *
 * Files mucked in this snippet:										  *
 * COMM.C														  *
 * CONST.C														  *
 * DB.C														  *
 * FIGHT.C														  *
 * INTERP.C														  *
 * INTERP.H														  *
 * MERC.H														  *
 ********************************************************************************************/
/* Note: in the following files, lines that begin with the + sign, then those are the lines to add. */

/*====================================================================
 * Okay, to start this off, let's add this skill so that dragons get it at creation, 
 * and it's set to 100 percent.
 * File to MUCK: comm.c
 * Search for the text below (minus the asterisk):
 * gsn_recall
 * and below it add the following, right before the line that says
 * Do you wish to customize this character?
 */
/* Replace dragon with the race name you want to give the skill to. */

+       if (ch->race == race_lookup("dragon"))
+    {
+	ch->pcdata->learned[gsn_nofly] = 100;
+    }

/*====================================================================
 * Next file. This is the actual skill declaration for the skill table.
 * File to MUCK: const.c
 * Search for: !Recall! 
 * You'll see a little } bracket underneath that line. First, you'll want to add a comma right
 * after that bracket, otherwise you'll have compiling errors.
 */
/* Add the following right after: }, */
+
+    {
+    	"nofly",		{ 1, 1, 1, 1 },		{ 1, 1, 1, 1},
+	spell_null,		TAR_IGNORE,		POS_STANDING,
+	&gsn_nofly,		SLOT( 0),	0,	12,
+	"",			"!Nofly!",		""
+    }

/*====================================================================
 * Alright, let's register the gsn in db.c
 * File: db.c
 * Search for: gsn_recall;
 * Right below it, add the following
 */

+sh_int		gsn_nofly;  /* Nofly by Koqlb */

/*====================================================================
 * Now, we'll add the command into the command table.
 * File: interp.c and interp.h
 * Add a separate sction below the immortal commands for racial skills and add the following.
 */
/* in interp.c add: */
+    { "nofly",		do_nofly,   POS_STANDING, 0, LOG_NEVER, 1 },

/* and in interp.h, in the appropriate place (if using stock, right below noemote. Otherwise
 * Add it accordingly in alphabetical order */

+DECLARE_DO_FUN( do_nofly	);

/*====================================================================
 * Now we'll add the gsn in the skill table in merc.h
 * File: merc.h
 * Search for: gsn_recall
 * Add the following */

+
+/* New GSN's for skills by Koqlb */
+extern sh_int gsn_nofly; 

/*====================================================================
 * This is the actual meat and potatoes of the nofly skill. The actual command.
 * This CAN be used by immortals, and mortals, provided they meed the criteria.
 * File: fight.c
 * I recommend putting this at the bottom. I made a section at the bottom of my fight.c
 * file specifically for racial and class skills/spells.
 */

+/* Actual nofly command to compliment skill by Koqlb */
+void do_nofly( CHAR_DATA *ch, char *argument )
+{
+    int race;
+
+    race = race_lookup(argument);
+/* Race lookup detects whether the player is the race that you want the skill for.
+ * Replace the "dragon" race with whatever race
+ *  You have that's automatically affected by flying.
+ */
+    if (ch->race != race_lookup("dragon") && ch->level <= LEVEL_HERO) /* Immortals can use the nofly command too.*/
+    {												
+        send_to_char("Only the Dragon kind can fly and land at will.\n\r",ch);
+        return;
+    }
+	/* If check to make sure the char has enough movement points. You can comment this part if you want. */
+
+    if (ch->race = race_lookup("dragon") && ch->move > 15)
+     {
+ 	   send_to_char("You are too tired to lift off into the skies. Rest a bit.\n\r",ch);
+	   return;
+     }
+/* If check to see if the character isn't flying. If not, sets the character
+ * with AFF_FLYING affect flag.
+ */
+    if (!IS_AFFECTED(ch, AFF_FLYING))   
+   {
+     SET_BIT(ch->affected_by, AFF_FLYING);
+      act( "You expand your wings and take off into the air.", ch, NULL, NULL, TO_CHAR );
+	act( "$n expands $s wings and takes off into the air.", ch, NULL, NULL, TO_ROOM );
+   }
+/* So the player is already flying... Okay, soooooo... */
+  else
+   {
+/* Let's make the player land back on the ground, but we want to enhance RP, so
+ * we'll make it look like somewhat of a graceful landing though.
+ */
+	REMOVE_BIT(ch->affected_by, AFF_FLYING);
+      act( "Your wings are absorbed into your shoulders and you land softly.", ch, NULL, NULL, TO_CHAR );
+	act( "$n's wings disappear into $s shoulders and $e lands softly.", ch, NULL, NULL, TO_ROOM );
+   }
+      return;
+} /*End of the do_nofly command */

/* This is the end of the snippet. Once you add all of this stuff in (Please make sure you didn't leave the
 * plus signs in... That'll always screw up the compile. :P), then go ahead and
 * run a clean compile (in other words, type "rm *.o" [without the quotes], hit enter, and THEN type make).
 * I tested this using ROM 2.4b6 modified with OLC 1.81. However, the race part itself shouldn't mess
 * anything up. It doesn't add any extra flags that stock ROM doesn't already have on it. I don't ask for a ton
 * of credit for this snippet or anything. All I ask for is that you do leave the comments with my name in them
 * Where the line is preceeded by the + sign. I apologize if this code seems sloppy, but I did my best to organize
 * it. If you have any questions or comments, fire an e-mail my way at koqlbmusic@bellsouth.net and I'll make sure 
 * I write ya back. --Koqlb, Owner and creator of Subversive Visions.
 * http://www.subversive-visions.com
 */