Просмотр файла wofh/attackf.php

Размер файла: 4.48Kb
  1. //<?
  2. if ((substr($fromid,0,5)!='user.' && substr($fromid,0,4)!='npc.') || (substr($toid,0,5)!='user.' && substr($toid,0,4)!='npc.')) return; // только игроки и нпс
  3. $from=&$game["loc"][$loc][$fromid];
  4. if (!$from || $from["ghost"]) return;
  5. //проверим время отдыха (кроме когда отвечаем)
  6. if (!$answer && time()<=$from["time_speed"]) return;
  7. if ($magic) $fromwar=split("\|",$magic); else $fromwar=split("\|",$from["war"]);
  8. if ($answer) $from["time_speed"]=time()+$fromwar[3]; // время для отдыха
  9. $hit=$fromwar[0];
  10. $b=0;
  11. $loc1=split("\|",$locations[$loc]);
  12. if (!isset($game["loc"][$loc][$toid]) && $fromwar[4]) { // если ranged и не магией, то ищем в соседних локациях
  13. for ($i=3;$i<count($loc1);$i+=2) if (isset($game["loc"][$loc1[$i]][$toid])) {
  14. $b=1; $to=&$game["loc"][$loc1[$i]][$toid]; $hit-=10; if ($hit<0) $hit=0; break;
  15. } //нашли, штраф к меткости
  16. }
  17. if (!$b && !isset($game["loc"][$loc][$toid])) {addjournal($fromid,"Цель недоступна"); return;}
  18. $to=&$game["loc"][$loc][$toid];
  19. if ($to["ghost"]) return;
  20. $towar=split("\|",$to["war"]);
  21.  
  22. if ($magic) {
  23. $uklon = $towar[9]; // вероятность уклониться 0..100%
  24. $parring = $towar[10]; // вероятность уменьшить урон на $shield
  25. $shield = $towar[11];
  26. } else {
  27. $uklon = $towar[6];
  28. $parring = $towar[7];
  29. $shield = $towar[8];
  30. }
  31.  
  32. // если напали на хорошего (не крим и не атакует вас), кроме животных вне охраняемой зоны (для охоты), то становимся кримами
  33. $crim=$to["crim"] || substr($toid,0,9)=='npc.crim.' || (substr($toid,0,11)=='npc.animal.' && !$loc1[1]);
  34. if (!$crim && $to["attack"]!=$fromid) docrim($fromid);
  35.  
  36. // проверим, а есть ли стрелы или что там нужно...
  37. $needok=1;
  38. if ($fromwar[14]) {
  39. if (isset($from["items"][$fromwar[14]])) {
  40. // тратим 1 патрон
  41. $item=split("\|",$from["items"][$fromwar[14]]);
  42. $item[1]=$item[1]-1;
  43. if ($item[1]>=1) {
  44. $from["items"][$fromwar[14]]=implode("|",$item);
  45. }else { // патроны кончились, заново расчет параметров
  46. unset($from["items"][$fromwar[14]]);
  47. unset($from["equip"]["arm"]); // убираем с рук
  48. calcparam($fromid);
  49. }
  50. } else $needok=0;
  51. }
  52.  
  53. if ($needok) {
  54. // проверим, попали ли
  55. if (rand(0,100)<=$hit) {
  56. // урон
  57. $damage=rand($fromwar[1],$fromwar[2]);
  58. // уклон
  59. if (rand(0,100)>$uklon) {
  60. // щит
  61. if ($parring && $shield) if (rand(0,100)<=$parring) {if (!$magic) {$damage-=$shield; addjournalall($loc,$to["title"]." парировал щитом");} else {$damage-=$damage*$shield/100; addjournalall($loc,$to["title"]." сопротивляется магии");}}
  62. // броня
  63. if (!$magic && $towar[5]) $damage-=$towar[5]; // есть броня, гасим на armor, но не для магии
  64. if ($damage<0) $damage=0;
  65. if ($fromwar[12]) $skrit=5; //крит
  66. if ($fromwar[14]) $skrit=15; //крит лучникам
  67. if ($damage && rand(0,100)<$skrit) {$damage*=2; $tkrit="<b> критически</b>";} else $tkrit="";
  68. if ($to["god"]) $damage=0; // режим БОГА
  69. // наносим урон
  70. $to["life"]-=$damage;
  71. if ($to["life"]<0) $to["life"]=0;
  72. addjournal($fromid,"Вы нанесли ".$to["title"]." урон ".$tkrit." ".$fromwar[12]." ".$damage);
  73. addjournal($toid,$from["title"]." нанес вам урон ".$tkrit." ".$fromwar[12]." ".$damage);
  74. addjournalall($loc,$from["title"]." нанес ".$to["title"]." урон ".$tkrit." ".$fromwar[12]." ".$damage,$fromid,$toid);
  75. // если убили, добавим труп
  76. if ($to["life"]<1) {
  77. include"kill.php";
  78. }
  79. } else {addjournal($toid,"Вы уклонились"); addjournalall($loc,$to["title"]." уклонился",$toid);}
  80. } else {addjournal($fromid,"Вы промахнулись");addjournalall($loc,$from["title"]." промахнулся",$fromid);}
  81. } else addjournal($fromid,"Нет патронов: ".$fromwar[15]);
  82.  
  83. // если оба живы, то обороняющийся отвечает (кроме магии)
  84. if(isset($game["loc"][$loc][$fromid]) && isset($game["loc"][$loc][$toid]) && $fromid!=$toid) {
  85. if (!isset($to["attack"])) $to["attack"]=$fromid;
  86. if ($answer && !$magic) attack($loc,$toid,$fromid,0,0);
  87. }