1. Bitcoin адрес для пожертвований: 1dapfB97R98wg8J3hknWpMDJ7P61CWjNn
    Скрыть объявление
  2. Участникам форума доступна Skype конференция. Присоединяйтесь!
  3. Наши основные группы и каналы: VK, Twitter. Подписывайтесь!
  4. Скрыть объявление

Реализация "Живого" НПСа [by AlexPro]

Тема в разделе "Готовые модули", создана пользователем ALIGARX, 14 мар 2010.

  1. ALIGARX Старейшина

    Репутация

    21 / 11


    Еще когда начинал делать игру хотел иметь "Живого" нпс..
    Т.е. не выбирать из готовых ссылок нужную и тыкать на нее.. а сразу вводить текст и чтоб бот на нее отвечал.. Это конечно же лучше выглядит, но я со временем понял - это геморой.. необходимо прописывать различные варианты бесед, в огромном колличестве... Потому, Чтоб уйти от от этого самого гемороя, я юзаю старые добрые ссылки...

    Вобщем кому интересно и то хочет поковырять, Вот скрипты.

    КИдаю готовым зданием (Пути, айди и ссылки поменяете на свои)
    bot.php
    PHP:
    1.  
    2. <?
    3. $now=time();
    4. if (isset($take1)) {
    5. if ($stat['kwest0'] != 20) $msg="Ошибка, не пытайтесь взломать игру :)!";
    6. else {
    7. mysql_query("UPDATE person SET kwest0=21 WHERE user='".$stat['user']."'");
    8. echo"Вы попытались взять котёнка в руки, но он убежал от вас..."; } }
    9.  
    10. $hp_max=$stat['hp_max'];
    11.  
    12. if ($stat['level'] < 4) { $hp_reglev=180; } else { $hp_reglev=360; }
    13.  
    14. $reg_time = $hp_reglev*(1-($stat['sp_5']/100));
    15.  
    16. echo"<body leftmargin=0 topmargin=0>
    17. <table border='0' cellspacing='0' cellpadding='0' class='tmain'>
    18. <tr><td valign='top' style='text-align:center;'>
    19. <table border='0' cellspacing='0' cellpadding='0' align='center' class='ltable' style='width:98%;'>
    20. <tr>
    21. <td colspan='3' valign='top' style='width:100%;'>
    22. <table border='0' cellspacing='0' cellpadding='0'>
    23. <tr>
    24. <td><img src='../img/game/main/ltmenu.png' width='22' height='23' border='0' alt='' /></td>
    25. <td class='nmenu' style='white-space: nowrap; width:50%'>&nbsp;У вас: <font color='#EDE2BE'>".$stat['credits']."<img src='http://10.4.1.2/img/money/gold.gif' alt='Золотой'></font> | <font color='#EDE2BE'>".$stat['f_credits']."<img src='http://10.4.1.2/img/money/bril.gif' alt='Бриллиант'></font></td>
    26. <td align='center' valign='top' class='nmenu'>
    27. <table border='0' cellspacing='0' cellpadding='0'>
    28. <tr>
    29. <td><img src='../img/game/main/l_z_l.png' width='34' height='23' alt='' border='0' /></td>
    30. <td class='l_z_f'>Таррон</td>
    31. <td><img src='../img/game/main/l_z_r.png' width='34' height='23' alt='' border='0' /></td>
    32. </tr>
    33. </table>
    34. </td>
    35. <td class='nmenu' style='white-space: nowrap; width:50%; text-align:right;'> </td>
    36. <td><img src='../img/game/main/rtmenu.png' width='22' height='23' border='0' alt='' /></td>            
    37.  
    38. </tr>
    39. </table>
    40. </td>
    41. </tr>
    42. <tr>
    43. <td class='rkfon'><img src='../img/game/main/z.gif' width='2' height='1' border='0' alt='' /></td>
    44. <td valign='top' class='lpfon'>
    45. <table border='0' cellspacing='0' cellpadding='0' class='bfon'>
    46. <td valign='top' class='tmain' style='text-align:center;padding-top:4px;'>
    47. <span class='hlight'></span>";
    48. echo"<script src='../img/js/time.js'></script>";
    49. echo"
    50. <table width=100% cellspacing=0 cellpadding=3 border=0>
    51. <td align=center valign=top>
    52. <table border=0 cellspacing=0 cellpadding=5 width=450 bordercolor=silver>
    53. <tr>
    54. <td align=center>";
    55. include("../config/html_city.php");
    56. include("config.php");
    57. ?>
    58. <html>
    59. <head>
    60. <title>NPC-InteGraL</title>
    61. <meta http-equiv="Content-Type" content="text/html;  charset=<? echo $cfg["encoding"] ?>">
    62. <link href="bot.css" rel="stylesheet" type="text/css">
    63. </head>
    64.  
    65. <body>
    66.  
    67. <div align="center">
    68.  
    69.   <form name="form1" method="post" action="bot.php">
    70.   <table width="910" cellpadding="9" cellspacing="1" >
    71.  
    72.     <tr>
    73.  
    74.       <td height="80" class="scr">
    75.  
    76.       <div style="<? echo (($cfg["scrolling"]) ? "overflow: auto;height:100%;" : "") ?>">
    77.         <?
    78.        
    79.         if ($_POST["submit"])
    80.         {
    81.             $a = answer();
    82.             $out =  "<h2>Ты:</h2><h3>$ask</h3><br><h2>InteGraL:</h2><h3>".$a;
    83.             $tile = ($cfg["scrolling"]) ? $tile : "";
    84.             echo "$out<br>$tile";
    85.             echo "<input name='tile' type='hidden' id='tile' value='$out<br>$tile'>";
    86.         }
    87.      
    88.    
    89.         function answer()
    90.         {
    91.             global $cfg, $ask;
    92.             $ask = (empty($ask)) ? "<empty>" : $ask;
    93.             $kick = array("?","\n");
    94.             $ask = str_replace($kick,"",$ask);
    95.             $f = file($cfg["answersfile"]);
    96.             for ($i=0; $i<=count($f); $i++)
    97.             {
    98.                 $an = split(";", $f[$i]);
    99.                 $a = $an[0];
    100.                 if (strstr($a,trim($ask)))
    101.                 {
    102.                     if ($wasone)
    103.                     {
    104.                         return("Скажи конкретнее!");
    105.                     }
    106.                     array_shift($an);
    107.                     array_pop($an);
    108.                     $ai = rand(0, count($an)-1);
    109.                     $wasone = true;
    110.                     $retval = $an[$ai];
    111.                 }
    112.             }
    113.             $retval = (empty($retval)) ? "Я не врубаюсь ,что ты хочешь?" : $retval;
    114.             return $retval;
    115.         }
    116.       ?>
    117. <?
    118. print("<td width=140 valign=right><table border=2>");
    119. print("<tr><td><center><img src=/img/npc/1001.gif></center></td></tr>");
    120. print("<tr><td class=colhead><center><b>[<a href=\"/ct/cm.php\" target=\"_blank\" onmouseover=\"chim('m5','9')\" onmouseout=\"chim('m5','8')\">Команды NPC</a>]</center></td></tr>");
    121. print("<tr><td><font color=black><b>Таррон</b>, просто гусь по жизни =)</font></td></tr>");
    122. print("</table>");
    123. print("</td></tr></table>");
    124. ?>
    125. </div>
    126.      
    127.  
    128.  
    129.           <table border="0" cellspacing="0" cellpadding="0">
    130. <form method="POST" action="main.php?set=edit&do=compl" name="reg">
    131. <tr>
    132. <td>
    133. <table border="0" cellspacing="0" cellpadding="0">
    134. <tr>
    135. <td>
    136. <table border="0" cellspacing="0" cellpadding="0">
    137. <tr>
    138. <td><img src="http://10.4.1.2/img/game/main/in_l.gif" width="20" height="35" alt="" border="0" /></td>
    139. <td class="in_f"><input name="ask" type="text" class="tint" id="ask" style="width:250px;" value="Квест" onFocus="if (this.value == 'Квест') { this.value = '' }" onBlur="if (this.value == '') { this.value = 'Квест' }" ></td>
    140. <td><img src="http://10.4.1.2/img/game/main/in_r.gif" width="20" height="35" alt="" border="0" /></td>
    141. </tr>
    142. </table>
    143. </td>
    144. </tr>
    145. </table>
    146. </td>
    147. <td>
    148. <table border="0" cellspacing="0" cellpadding="0">
    149. <tr>
    150. <td><img src="http://10.4.1.2/img/game/main/btn_l.gif" width="19" height="26" alt="" border="0" /></td>
    151. <td class="btn_f"><input name="sss" type="submit" class="int" id="sss" value="Сказать"></td>
    152. <input name="submit" type="hidden" id="submit" value="yup">
    153. <td><img src="http://10.4.1.2/img/game/main/btn_r.gif" width="19" height="26" alt="" border="0" /></td>
    154. </tr>
    155. </table>
    156. </td>
    157. </tr>
    158. </form>
    159. </table>
    160. </td>
    161. </tr>
    162. <tr>
    163.  
    164.  
    165.  
    166.  
    167. </div>
    168. <?
    169. echo"
    170. </td>
    171. </tr>
    172. </table>
    173. </td>
    174. </tr>
    175. </table>
    176. </td>
    177. </tr>
    178. <tr>
    179. <td align='center'><img src='../img/game/main/dr.gif' width='187' height='40' border='0' alt='' /></td>
    180. </tr>
    181. </table>
    182. </td>
    183. <td class='rkfon'><img src='../img/game/main/z.gif' width='2' height='1' border='0' alt='' /></td>
    184. </tr>
    185. <tr>
    186. <td><img src='../img/game/main/ldp.gif' width='2' height='16' border='0' alt='' /></td>
    187. <td align='center' class='dpfon'><img src='../img/game/main/trm2.gif' width='365' height='16' border='0' alt='' /></td>
    188. <td><img src='../img/game/main/rdp.gif' width='2' height='16' border='0' alt='' /></td>
    189. </tr>      
    190. </table>
    191. </td></tr>
    192. </table>
    193. </center>
    194. </body>
    195. </html>
    196. ";
    197. ?>
    198.  
    файл с вопросами - ответами:
    integral.php
    PHP:
    1.  
    2. кулл;Ололо что я должен на такое ответить? О.о;0;
    3. бред;ololoddddd;1;
    4. ха;LOИКС;2;
    5. тыкто; Анатоле!;3;
    6. тыктоо; ololo!;4;
    7.  
    config.php Для самого бота
    PHP:
    1.  
    2. <?
    3. $cfg["answersfile"] = "integral.php;
    4. $cfg["scrolling"] = false;
    5. $cfg["encoding"] = "windows-1251";
    6. ini_set("register_globals", true);
    7. ?>
    8.  
    Ковырял этот скрипт давно (Поправите все пути себе)
    Если к примеру у нас в файле integral.php есть предусмотренно слово "Квест" и ответы на него, тогда, если мы введем это слово в строку и отправим, нам выведет ответы из файла.
    Выглядит этопримерно так:

    [​IMG]

    Тычем спасибо :bk:

    ALIGARX
    Для g-craft

  2. Mr.Ory Флудир йа Старейшина

    Репутация

    205 / 73


    Код (Text):
    1. <html>
    2. <head>
    3. <title>Образец создания говорящего НПС</title>
    4. </head>
    5. <body>
    6. <table width=100% cellpadding=0 cellspacing=0 border=0>
    7. <td bgcolor=#ffccc0><center><b>Говорящий НПС</b></td>
    8. </table>
    9. <table border=0 width=100% bgcolor=#00c00с>
    10. <tr>
    11. <td bgcolor=#00c00с valign=top height=210>
    12. <center>
    13. <img src='nps.gif' width=90 height=210>
    14. </td>
    15. </tr>
    16. <tr>
    17. <td valign=top bgcolor=#00c00с valign=top>
    18. <script>
    19. function talk(phrase){
    20. var tab_b='<center><table border=0 class=inv width=95% cellpadding=1 cellspacing=1 bgcolor=#0dd0dс><tr><td>';
    21. var tab_e='</td></tr></table><BR>';
    22. if(phrase==1){
    23. grunvald.innerHTML=tab_b+'<B>НПС:</B><BR>- Позволь представиться, я НПС, здешний искусственный робот. Я делаю любую игру интересней...<BR><BR><a href="java script:talk(7)" class=us2><B>- Можно еще пару вопросов?</B></a><BR><a href="java script:talk(8)" class=us2><B>- Спасибо, до свидания!</B></a>'+tab_e;
    24. }
    25. if(phrase==2){
    26. grunvald.innerHTML=tab_b+'<B>НПС:</B><BR>- Нужен? Хм...Ты наверное не понял что я могу помочь тебе в создании очень интересных и увлекательных квестов. <BR><BR><a href="java script:talk(7)" class=us2><B>- Можно еще пару вопросов?</B></a><BR><a href="java script:talk(8)" class=us2><B>- Спасибо, до свидания!</B></a>'+tab_e;
    27. }
    28. if(phrase==3){
    29. grunvald.innerHTML=tab_b+'<B>НПС:</B><BR>- Открой документ index.htm в любов текстовам редакторе и просто настрой мой исходной код под себя...<BR><BR><a href="java script:talk(8)" class=us2><B>- Спасибо,это все что я хотел узнать.</B></a><BR><a href="java script:talk(7)" class=us2><B>- Можно еще несколько вопросов?</B></a><BR>'+tab_e;
    30. }
    31. if(phrase==7){
    32. grunvald.innerHTML=tab_b+'<B>НПС:</B><BR>- Конечно! Что бы ты хотел узнать?<BR><BR><a href="java script:talk(2)" class=us2><B>- Для чего ты мне нужен?</B></a><BR><a href="java script:talk(3)" class=us2><B>- Как сделать похожего НПС?</B></a><BR><a href="java script:talk(8)" class=us2><B>- Нет, ничего...До свидания!</B></a>'+tab_e;
    33. }
    34. if(phrase==8){
    35. grunvald.innerHTML=tab_b+'<B>НПС:</B><BR>- До скорой встречи!'+tab_e;
    36. }
    37. if(phrase==9){
    38. grunvald.innerHTML=tab_b+'<B>НПС:</B><BR>- С удовольствием! Мой род один из самых древних в Грэйхолме! Все мужчины нашего рода занимаються кузнечным делом, и мой сын уже учиться держать молот в ручках! Мой прадед узнал секреты изготовления легкого и прочного оружия у одного гнома, и теперь наш род хранит этот секрет! Такое оружие ты не купиш нигде кроме как у меня!<BR><BR><a href="java script:talk(7)" class=us2><B>- Спасибо, еще вопрос?</B></a><BR><a href="java script:talk(8)" class=us2><B>- До свидания!</B></a>'+tab_e;
    39. }
    40. }
    41. function dialog(){
    42. grunvald.innerHTML='<center><table border=0 class=inv width=95% cellpadding=1 cellspacing=1 bgcolor=#0dd0dс><tr><td><B>НПС:</B><BR>- Приветствую тебя, друг, ты решил научиться создавать говорящих НПС? Ну что ж давай начнем!<BR><BR><a href="java script:talk(1)" class=us2><B>- Кто ты?</B></a><BR><a href="java script:talk(2)" class=us2><B>- Для чего ты мне нужен?</B></a><BR><a href="java script:talk(3)" class=us2><B>- Как сделать похожего НПС?</B></a><BR><a href="java script:talk(8)" class=us2><B>- Извини я зря потревожил тебя!</B></a></td></tr></table><BR>';
    43. dia.visible=0;
    44. }
    45. </script>
    46. <div id='grunvald'></div>
    47. <div id="dia" align=center><input type=button class=b name="dia" value="Диалог" onClick="dialog()"><BR><BR>
    48. <input type=button class=b value=" Выйти " onClick="location.href='#"></div>
    49. </td>
    50. </tr>
    51. <td bgcolor=#ffccc0 valign=top height=20></td>
    52. </table>
    53. </body>
    54. </html>
    взято

    Пожалуйста, войдите или зарегистрируйтесь для просмотра скрытого текста.




    так же насколько я помню в какой то из сборок Алекса также есть бот-информатор и спамер =)

     
  3. limon007 Новичок

    Репутация

    0 / 0


    Я думаю нужный мод для ИВ) Так и квестов можно через него замутить каких хочешь)

     
  4. ALIGARX Старейшина

    Репутация

    21 / 11


    Ну как сказать.. он конечно хорош... но ооочень много нужно продумывать последующих шагов игрока... Либо просто ограничивать функционал бота определенными фразами.. а на остальные делать статический ответ вида "Я таким вопросам не обучен"

     
  5. jumper-leader Старейшина

    Репутация

    0 / 0


    Помогите кто-то с установкой,не могу "роздуплится" что куда закинуть и что конкретно ТОЧНО поменять.
    Помогите *plz*

     
  6. jumper-leader Старейшина

    Репутация

    0 / 0


    Все,роздуплился,извените за беспокойствие

     
  7. wo7as Философ

    Репутация

    151 / 503


    Не стоит этого делать ... везде , просто во всех играх все нпсы имеют варианты ответа . А вот это . Это извращение ))