일상

울티마 온라인 npc 대화 ( .net2001 c# + 2006년runuo )

by 흑엽 posted May 09, 2014
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

2007년도 쯤에 C# 공부하면서 만든

울티마 온라인 npc 대화

 

 

1. npc에 휴대폰에 저장된 지인들 이름을 xml로 적용(남여만 구분)

2. 지인들의 전화번호및 개인 정보를 mdb에 만듬...

3. c#코드로 mdb의 정보를 검색해서 간단한 대화를 할수 있게 만듬;;.

public virtual void OnSpeech( SpeechEventArgs e )
  {
   if ( e.Mobile.Alive && e.Mobile.InRange( m_Mobile.Location, 3 ) && m_Mobile.IsHumanInTown() )
   {
    

    //흑엽
    String Spe = e.Speech;

    if (Spe.Equals(m_Mobile.Name)) // **
    {
    m_Mobile.Say( "어쩌라고~어쩌라고~말을해~"+e.Mobile.Name+"...벙어리야?기죽었어?그런거야??");
    }

    if (Spe.Equals(m_Mobile.Name +" ?")) // *?*
    {
    string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=gugalnpc.mdb";

    string strAccessSelect = "select 소개 from whoami WHERE 이름 like '%" + m_Mobile.Name + "%'";

    // 데이터 집합을 만들어 Categories 테이블을 추가합니다.
    DataSet myDataSet = new DataSet();
    OleDbConnection myAccessConn = null;
    try
    {
    myAccessConn = new OleDbConnection(strAccessConn);
    }
    catch(Exception ex)
    {
     Console.WriteLine("Error: Failed to create a database connection. \n{0}", ex.Message);
     return;
    }

    try
    {

     OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect,myAccessConn);
     OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);

     myAccessConn.Open();
     myDataAdapter.Fill(myDataSet,"whoami");

    }
    catch (Exception ex)
    {
     Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.\n{0}", ex.Message);
     return;
    }
    finally
    {
     myAccessConn.Close();
    }

     int Count = myDataSet.Tables["whoami"].Rows.Count;
     if (Count == 0)
     {
     m_Mobile.Say( false,"헐..." + m_Mobile.Name + "씨는 성우네 자기소개db에 없군요  어쩌라고~" + e.Mobile.Name +"씨");
     }
     else
     { //행에있는 데이타출력함
      DataRowCollection dra = myDataSet.Tables["whoami"].Rows;
      m_Mobile.Say(false,dra[0][0].ToString());
     }

   } 

 

 


    if (Spe.Equals(m_Mobile.Name +" .")) // *?*
    {
     string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=gugalnpc.mdb";

     string strAccessSelect = "select 답글 from whoami WHERE 이름 like '%" + m_Mobile.Name + "%'";

     // 데이터 집합을 만들어 Categories 테이블을 추가합니다.
     DataSet myDataSet = new DataSet();
     OleDbConnection myAccessConn = null;
     try
     {
      myAccessConn = new OleDbConnection(strAccessConn);
     }
     catch(Exception ex)
     {
      Console.WriteLine("Error: Failed to create a database connection. \n{0}", ex.Message);
      return;
     }

     try
     {

      OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect,myAccessConn);
      OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);

      myAccessConn.Open();
      myDataAdapter.Fill(myDataSet,"whoami");

     }
     catch (Exception ex)
     {
      Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.\n{0}", ex.Message);
      return;
     }
     finally
     {
      myAccessConn.Close();
     }

      int Count = myDataSet.Tables["whoami"].Rows.Count;
     if (Count == 0)
     {
     m_Mobile.Say( false,m_Mobile.Name + "씨는 성우네 자기소개의 답글이 없군요");
     }
     else
     { //행에있는 데이타출력함
      DataRowCollection dra = myDataSet.Tables["whoami"].Rows;
      m_Mobile.Say(false,dra[0][0].ToString());
     }

    } 

 


   if (Spe.Equals(m_Mobile.Name +" ,")) // *?*
   {
    string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=gugalnpc.mdb";

    string strAccessSelect = "select 이름,구분,폰,집,메모 from phone WHERE 이름 like '%" + m_Mobile.Name + "%'";

    // 데이터 집합을 만들어 Categories 테이블을 추가합니다.
    DataSet myDataSet = new DataSet();
    OleDbConnection myAccessConn = null;
    try
    {
     myAccessConn = new OleDbConnection(strAccessConn);
    }
    catch(Exception ex)
    {
     Console.WriteLine("Error: Failed to create a database connection. \n{0}", ex.Message);
     return;
    }

    try
    {

     OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect,myAccessConn);
     OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);

     myAccessConn.Open();
     myDataAdapter.Fill(myDataSet,"whoami");

    }
    catch (Exception ex)
    {
     Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.\n{0}", ex.Message);
     return;
    }
    finally
    {
     myAccessConn.Close();
    }

     int Count = myDataSet.Tables["whoami"].Rows.Count;
    if (Count == 0)
    {
    m_Mobile.Say( false,m_Mobile.Name + "씨는 검색못해요~");
    }
    else
    {//칼럼네임출력함
     DataColumnCollection drc = myDataSet.Tables["whoami"].Columns;
    //행에있는 데이타출력함
     DataRowCollection dra = myDataSet.Tables["whoami"].Rows;
     string Info=null;
     foreach (DataRow dr in dra)
     {
      int i = 0;
      foreach (DataColumn dc in drc)
      {
       // 열 첨자를 출력한 다음 해당 열의 이름 및 데이터 형식도
       // 출력합니다.
       Info += dc.ColumnName.ToString()+": "+ dr[i].ToString()+"\n";
       i++;
      }

     }
     m_Mobile.Say(false,Info);
    }