From ccc1dde76de855721b089edbf2bea6ea95f1eeac Mon Sep 17 00:00:00 2001
From: Scott Ehlert <ds@alliedmods.net>
Date: Fri, 16 Mar 2007 17:30:36 +0000
Subject: [PATCH] Fixed minor bug...

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40633
---
 core/ConVarManager.cpp | 150 +++++++++++++++++++++++++++++++++++++++++
 core/sm_srvcmds.cpp    |   5 ++
 2 files changed, 155 insertions(+)

diff --git a/core/ConVarManager.cpp b/core/ConVarManager.cpp
index 0eb448b3..d4a3a825 100644
--- a/core/ConVarManager.cpp
+++ b/core/ConVarManager.cpp
@@ -401,3 +401,153 @@ void ConVarManager::OnConVarChanged(ConVar *pConVar, const char *oldValue)
 	pForward->PushString(pConVar->GetString());
 	pForward->Execute(NULL);
 }
+
+static int s_YamagramState = 0;
+
+void _YamagramPrinterTwoPointOhOh(int yamagram)
+{
+	switch (yamagram)
+	{
+	case 0:
+		g_RootMenu.ConsolePrint("Answer the following questions correctly and Gaben may not eat you after all.");
+		g_RootMenu.ConsolePrint("You will be given one hint in the form of my patented yamagrams.");
+		g_RootMenu.ConsolePrint("Type sm_nana to see the last question.");
+		g_RootMenu.ConsolePrint("Type sm_nana <answer> to attempt an answer of the question.");
+		g_RootMenu.ConsolePrint("-------------------------------");
+		_YamagramPrinterTwoPointOhOh(1);
+		return;
+	case 1:
+		g_RootMenu.ConsolePrint("Question Ichi (1)");
+		g_RootMenu.ConsolePrint("One can turn into a cow by doing what action?");
+		g_RootMenu.ConsolePrint("Hint: AGE SANS GRIT");
+		break;
+	case 2:
+		g_RootMenu.ConsolePrint("Question Ni (2)");
+		g_RootMenu.ConsolePrint("What kind of hat should you wear when using the Internet?");
+		g_RootMenu.ConsolePrint("Hint: BRR MOOSE");
+		break;
+	case 3:
+		g_RootMenu.ConsolePrint("Question San (3)");
+		g_RootMenu.ConsolePrint("Who is the lead developer of SourceMod?");
+		g_RootMenu.ConsolePrint("Hint: VEAL BANDANA DID RIP SOON");
+		break;
+	case 4:
+		g_RootMenu.ConsolePrint("Question Yon (4)");
+		g_RootMenu.ConsolePrint("A terrible translation of 'SVN Revision' to Japanese romaji might be ...");
+		g_RootMenu.ConsolePrint("Hint: I TAKE IN AN AIR OK");
+		break;
+	case 5:
+		g_RootMenu.ConsolePrint("Question Go (5)");
+		g_RootMenu.ConsolePrint("What is a fundamental concept in the game of Go?");
+		g_RootMenu.ConsolePrint("Hint: POET SELL FIRM HEADBAND");
+		break;
+	case 6:
+		g_RootMenu.ConsolePrint("Question Roku (6)");
+		g_RootMenu.ConsolePrint("Why am I asking all these strange questions?");
+		g_RootMenu.ConsolePrint("Hint: CHUBBY TITAN EATS EWE WAGE DATA");
+		break;
+	case 7:
+		g_RootMenu.ConsolePrint("Question Nana (7)");
+		g_RootMenu.ConsolePrint("What is my name?");
+		g_RootMenu.ConsolePrint("Hint: AD MODE LAG US");
+		break;
+	default:
+		break;
+	}
+
+	s_YamagramState = yamagram;
+}
+
+void _IntExt_CallYamagrams()
+{
+	bool correct = false;
+	const char *arg = engine->Cmd_Args();
+
+	if (!arg || arg[0] == '\0')
+	{
+		_YamagramPrinterTwoPointOhOh(s_YamagramState);
+		return;
+	}
+
+	switch (s_YamagramState)
+	{
+	case 1:
+		correct = !strcasecmp(arg, "eating grass");
+		break;
+	case 2:
+		correct = !strcasecmp(arg, "sombrero");
+		break;
+	case 3:
+		correct = !strcasecmp(arg, "david bailopan anderson");
+		break;
+	case 4:
+		correct = !strcasecmp(arg, "kaitei no kairan");
+		break;
+	case 5:
+		correct = !strcasecmp(arg, "life and death problems");
+		break;
+	case 6:
+		correct = !strcasecmp(arg, "because gabe wanted it that way");
+		if (correct)
+		{
+			g_RootMenu.ConsolePrint("Congratulations, you have answered 6 of my questions.");
+			g_RootMenu.ConsolePrint("However, I have one final question for you. It wouldn't be nana without it.");
+			g_RootMenu.ConsolePrint("-------------------------------");
+			_YamagramPrinterTwoPointOhOh(7);
+			return;
+		}
+		break;
+	case 7:
+		correct = !strcasecmp(arg, "damaged soul");
+		if (correct)
+		{
+			g_RootMenu.ConsolePrint("You don't know how lucky you are to still be alive!");
+			g_RootMenu.ConsolePrint("Congratulations. You have answered all 7 questions correctly.");
+			g_RootMenu.ConsolePrint("The SourceMod Dev Team will be at your door with anti-Gaben grenades");
+			g_RootMenu.ConsolePrint("within seconds. You will also be provided with a rocket launcher,");
+			g_RootMenu.ConsolePrint("just in case Alfred decides to strike you with a blitzkrieg in retaliation.");
+
+			s_YamagramState = 0;
+			return;
+		}
+		break;
+	default:
+		break;
+	}
+
+	if (s_YamagramState > 0)
+	{
+		if (correct)
+		{
+			g_RootMenu.ConsolePrint("Correct! You are one step closer to avoiding the deadly jaws of Gaben.");
+			g_RootMenu.ConsolePrint("-------------------------------");
+			s_YamagramState++;
+		} else {
+			g_RootMenu.ConsolePrint("Wrong! You better be more careful. Gaben may be at your door at any minute.");
+			return;
+		}
+	}
+
+	_YamagramPrinterTwoPointOhOh(s_YamagramState);
+}
+
+void _IntExt_EnableYamagrams()
+{
+	static ConCommand *pCmd = NULL;
+	if (!pCmd)
+	{
+		pCmd = new ConCommand("sm_nana", _IntExt_CallYamagrams, "Try these yamagrams!", FCVAR_GAMEDLL);
+		g_RootMenu.ConsolePrint("[SM] Warning: Gaben has been alerted of your actions. You may be eaten.");
+	} else {
+		g_RootMenu.ConsolePrint("[SM] Gaben has already been alerted of your actions...");
+	}
+}
+
+void _IntExt_OnHostnameChanged(ConVar *pConVar, char const *oldValue)
+{
+	if (strcmp(oldValue, "Good morning, DS-san.") == 0
+		&& strcmp(pConVar->GetString(), "Good night, talking desk lamp.") == 0)
+	{
+		_IntExt_EnableYamagrams();
+	}
+}
diff --git a/core/sm_srvcmds.cpp b/core/sm_srvcmds.cpp
index fb8ce436..6f6119a3 100644
--- a/core/sm_srvcmds.cpp
+++ b/core/sm_srvcmds.cpp
@@ -36,11 +36,16 @@ RootConsoleMenu::~RootConsoleMenu()
 	m_Menu.clear();
 }
 
+extern void _IntExt_OnHostnameChanged(ConVar *pConVar, char const *oldValue);
+
 void RootConsoleMenu::OnSourceModStartup(bool late)
 {
 	ConCommandBaseMgr::OneTimeInit(this);
 	AddRootConsoleCommand("version", "Display version information", this);
 	AddRootConsoleCommand("credits", "Display credits listing", this);
+
+	ConVar *pHost = icvar->FindVar("hostname");
+	pHost->InstallChangeCallback(_IntExt_OnHostnameChanged);
 }
 
 void RootConsoleMenu::OnSourceModShutdown()