Нужна помощь

Статус
Закрыто для дальнейших ответов.

Spiteful

Новичок
Регистрация
22.06.2006
Сообщения
3
Доброй ночи всем!
Нужна помощь в отладке скрипты онлайн-игры.На данный момент я застрял на "Боях"Дело вот в чем.При нормальной подаче заявки бой между юзерами происходит нормально без всяких глюков,тоже и при груповом бое,но если я пытаюсь тренироваться на боте то нужно бить два раза,тоесть - ставиться две точки блока,точка на удар нажимаю "Ударить" обновляеться окно и снова появляеться возможность бить пока опять не сделаешь всю процедуру блока и удара,и лишь только затем подгружаеться файл с описанием удара.Не уверен эта ли часть отвечает за бой с ботом,если кто-то заинтересуеться помочь,вышлю исходник файла.
Вот часть кода

Код:
</TD>
  <td width=4>&nbsp</td>
  <TD WIDTH=240 VALIGN=TOP ALIGN=LEFT>
  <?
  if($opponent!='' AND $db["hp"]>0){
  $bot = 0;
		$BOT_L = mysql_query("SELECT * FROM bot_temp WHERE battle_id='$bid'");
		while($BOT_D = mysql_fetch_array($BOT_L)){
				if($BOT_D["bot_name"] == $opponent){
				$bot = 1;
				$prototype = $BOT_D["prototype"];
				}
		}

		if($bot == 0){
		  showHP($opponent);
		  showPlayer($opponent);
		}
		else if($bot == 1){
		showHPBot($opponent,$bid);
		showPlayer($prototype);
		}
  }
  else{
  print "Ждите...";
  }
  ?>
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
imho оторванный от контекста кусок кода бесполезен.
 

Spiteful

Новичок
Регистрация
22.06.2006
Сообщения
3
Да уж,вы правы.
Вот файл

Код:
<?
session_start();
include "conf.cfg";
include "functions.php";
?>
<LINK REL=StyleSheet HREF='style.css' TYPE='text/css'>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<?
$data = mysql_connect($base_name, $base_user, $base_pass);
mysql_select_db($db_name,$data);
$sql = "SELECT * FROM users WHERE login='$login'";
$result = mysql_query($sql);
$db = mysql_fetch_array($result);
$creator = $db["battle_pos"];
$opponent = $db["battle_opponent"];
$bid = $db["battle"];
$team = $db["battle_team"];


if($db["battle"]==0){
print "<script>location.href='main.php?act=none'</script>";
die();
}

$BB = mysql_query("SELECT status FROM battles WHERE id=$bid");
$BDD = mysql_fetch_array($BB);
$status = $BDD["status"];
$b = 1;

$winer = 0;
$loser = 0;

if(empty($act)){$act="";}

if($act=="t_draw"){
lose(1,$bid,11);
lose(2,$bid,11);
clearZayavka($creator,$bid);
}
if($act=="t_win"){
$GET_T = mysql_query("SELECT * FROM timeout WHERE battle_id='$bid'");
$GET_TD = mysql_fetch_array($GET_T);
$lasthit = $GET_TD["lasthit"];

if($lasthit == ''){
lose(1,$bid,1);
lose(2,$bid,1);
clearZayavka($creator,$bid);
}

$SEEK_T = mysql_query("SELECT timeout FROM zayavka WHERE creator = '$creator'");
$SEEK_TD = mysql_fetch_array($SEEK_T);
$to = $SEEK_TD["timeout"]*60;
$timeout = $lasthit+$to - time();




		if($timeout<0){
				if($team == 1){
				$SS = mysql_query("UPDATE battles SET win='1',status='finished' WHERE id=$bid");
				$winer=1;
				$loser=2;
				}
				else if($team == 2){
				$SS = mysql_query("UPDATE battles SET win='2',status='finished' WHERE id=$bid");
				$winer=2;
				$loser=1;
				}
		print "<script>location.href='battle.php?act=exit'</script>";
		die();
		}

}

if($act == "exit"){
		if($db["battle"]!=0){
		$S = mysql_query("SELECT * FROM battles WHERE id=$bid");


		$D = mysql_fetch_array($S);
		if($team == 1){$an_team = 2;}else{ $an_team = 1;}

				if($team == $D["win"]){
				win($team,$bid);
				lose($an_team,$bid,0);
				clearZayavka($creator,$bid);
				}
				else{
				win($an_team,$bid);
				lose($team,$bid,0);
				clearZayavka($creator,$bid);
				}
		print "<script>location.href='main.php?act=none'</script>";
		die();
		}
}

		$team1_c = 0;
		$team2_c = 0;

		$T1 = mysql_query("SELECT * FROM team1 WHERE battle_id='$creator'");
		while($T1_DATA = mysql_fetch_array($T1)){
		$player=$T1_DATA["player"];
		$S = mysql_query("SELECT hp FROM users WHERE login='$player'");
		$D = mysql_fetch_array($S);
				if($D["hp"] > 0){$team1_c++;}
		}

		$T2 = mysql_query("SELECT * FROM team2 WHERE battle_id='$creator'");
		while($T2_DATA = mysql_fetch_array($T2)){
		$player=$T2_DATA["player"];
		$S = mysql_query("SELECT hp FROM users WHERE login='$player'");
		$D = mysql_fetch_array($S);
				if($D["hp"] > 0){$team2_c++;}
		}

		$BOT = mysql_query("SELECT * FROM bot_temp WHERE battle_id='$bid'");
		while($BOTD = mysql_fetch_array($BOT)){
		$player = $BOTD["bot_name"];
		$S = mysql_query("SELECT hp,team FROM bot_temp WHERE bot_name='$player' and battle_id='$bid'");
		$D = mysql_fetch_array($S);
				if($D["team"]==1){
						if($D["hp"]>0){$team1_c++;}
				}
				else if($D["team"]==2){
						if($D["hp"]>0){$team2_c++;}
				}

		}

		if($team1_c == 0 AND $team2_c>0){
		$winer=2;
		$loser=1;
		$SS = mysql_query("UPDATE battles SET win='2',status='finished' WHERE id=$bid");
		}
		if($team2_c == 0 AND $team1_c>0){
		$winer=1;
		$loser=2;
		$SS = mysql_query("UPDATE battles SET win='1',status='finished' WHERE id=$bid");
		}
		if($team1_c == 0 AND $team2_c == 0){
		lose(1,$bid,1);
		lose(2,$bid,1);
		clearZayavka($creator,$bid);
		}

if($opponent == '' AND $b == 1){
		if($team == 1){
		$LIST = mysql_query("SELECT * FROM team2 WHERE battle_id = $creator");
		}
		else if($team == 2){
		$LIST = mysql_query("SELECT * FROM team1 WHERE battle_id = $creator");
		}
		$opp = array();
		$i=0;
		while($LIST_DATA = mysql_fetch_array($LIST)){
		$player = $LIST_DATA["player"];
		$PL_SQL = mysql_query("SELECT battle_opponent FROM users WHERE login = '$player'");
		$PL_DATA = mysql_fetch_array($PL_SQL);
				if($PL_DATA["battle_opponent"]==''){
				$opp[$i] = $player;
				$i++;
				}
		}
		$j = count($opp);
		$BOT_LIST = mysql_query("SELECT * FROM bot_temp WHERE battle_id='$bid'");
		while($BLD = mysql_fetch_array($BOT_LIST)){
				if($team == 1){
						if($BLD["team"]==2 AND $BLD["hp"]>0){
						$opp[$j] = $BLD["bot_name"];
						$j++;
						}
				}
				else if($team == 2){
						if($BLD["team"]==1 AND $BLD["hp"]>0){
						$opp[$j] = $BLD["bot_name"];
						$j++;
						}
				}
		}

$c = count($opp);
$set_opp = $opp[rand(0,count($opp)-1)];

$U_UPDATE = mysql_query("UPDATE users SET battle_opponent='$set_opp' WHERE login='$login'");
$OPP_UPDATE = mysql_query("UPDATE users SET battle_opponent='$login' WHERE login='$set_opp'");

}


if($act == "hit"){
$i = 0;
$p1_set = 0;
$p2_set = 0;

$weapons = array('axe','fail','knife','sword','spear','shot');

$hand_r_s = mysql_query("SELECT object_type FROM inv WHERE id='".$db["hand_r"]."'");
$hand_r_d = mysql_fetch_array($hand_r_s);
$hand_r_type = $hand_r_d["object_type"];

$hand_l_s = mysql_query("SELECT object_type FROM inv WHERE id='".$db["hand_l"]."'");
$hand_l_d = mysql_fetch_array($hand_l_s);
$hand_l_type = $hand_l_d["object_type"];

$hand_r_weapon = false;
$hand_l_weapon = false;
$two_hands	 = false;

		for($n=0;$n<count($weapons);$n++){
			 if($hand_r_type == $weapons[$n]){
		 $hand_r_weapon = true;
		}
		if($hand_l_type == $weapons[$n]){
		 $hand_l_weapon = true;
		}
	}

	if($hand_r_weapon == true && $hand_l_weapon == true){
	 $two_hands = true;
	}

		if(!empty($D1)){
	$i++;
	$point1 = 1;
	$p1_set = 1;
	$p2_set = 0;
	}
	if(!empty($D2)){
	$i++;
			if($p1_set == 0){
		$point1 = 2;
		$p1_set = 1;
		}
		if($p2_set == 0 && $point1!=2){
		$point2 = 2;
		$p2_set = 1;
		}
	}
	if(!empty($D3)){
	$i++;
			if($p1_set == 0){
		$point1 = 3;
		$p1_set = 1;
		}
		if($p2_set == 0 && $point1!=3){
		$point2 = 3;
		$p2_set = 1;
		}
	}
	if(!empty($D4)){
	$i++;
	if($p1_set == 0){
		$point1 = 4;
		$p1_set = 1;
		}
		if($p2_set == 0 && $point1!=4){
		$point2 = 4;
		$p2_set = 1;
		}
	}
	if(!empty($D5)){
	$i++;
			if($p1_set == 0){
		$point1 = 5;
		$p1_set = 1;
		}
		if($p2_set == 0 && $point1!=5){
		$point2 = 5;
		$p2_set = 1;
		}
	}

 if($i>2){
	  print "<center><B>Вы выбрали слишком много($i) точек блока!Надо выбрать две!</B></center>";
	}
	else if($i==2 && !empty($hit) && !$two_hands){
	  hit($login,$opponent,$hit,0,$point1,$point2);
	}
	else if($i==2 && empty($hit) && !$two_hands){
	 print "<center><b>Вы не выбрали точку удара!</B></center>";
	}
	else if($two_hands){
	$j = 0;
		$p1_a_set = 0;
		$p2_a_set = 0;

	if(!empty($hit1)){
	$j++;
	$point_a_1 = 1;
	$p1_a_set = 1;
	$p2_a_set = 0;
	}
	if(!empty($hit2)){
	$j++;
			if($p1_a_set == 0){
		$point_a_1 = 2;
		$p1_a_set = 1;
		}
		if($p2_a_set == 0 && $point_a_1!=2){
		$point_a_2 = 2;
		$p2_a_set = 1;
		}
	}
	if(!empty($hit3)){
	$j++;
			if($p1_a_set == 0){
		$point_a_1 = 3;
		$p1_a_set = 1;
		}
		if($p2_a_set == 0 && $point_a_1!=3){
		$point_a_2 = 3;
		$p2_a_set = 1;
		}
	}
	if(!empty($hit4)){
	$j++;
	if($p1_a_set == 0){
		$point_a_1 = 4;
		$p1_a_set = 1;
		}
		if($p2_a_set == 0 && $point_a_1!=4){
		$point_a_2 = 4;
		$p2_a_set = 1;
		}
	}
	if(!empty($hit5)){
	$j++;
			if($p1_a_set == 0){
		$point_a_1 = 5;
		$p1_a_set = 1;
		}
		if($p2_a_set == 0 && $point_a_1!=5){
		$point_a_2 = 5;
		$p2_a_set = 1;
		}
	}

		if($j<2){
	  print "<center><B>Надо выбрать две точки удара!</B></center>";
	}
	else if($j>2){
	  print "<center><B>Вы выбрали слишком много($j) точек удара!Надо выбрать две!</B></center>";
	}
	else if($j == 2){
	  hit($login,$opponent,$point_a_1,$point_a_2,$point1,$point2);
	}

	}
}

$B = mysql_query("SELECT * FROM battles WHERE id=$bid");
$B_DATA = mysql_fetch_array($B);
$status = $B_DATA["status"];

?>
<body topMargin=4 leftMargin=4 rightMargin=4 bottomMargin=4 bgcolor=#eeeeee>

<script>

function to(name){
var s=top.talk.talker.phrase.value+="to ["+name+"]";
top.talk.talker.phrase.focus();
}
</script>
<script>
function private(name){
var s=top.talk.talker.phrase.value+="private ["+name+"]";
top.talk.talker.phrase.focus();
}
</script>

<TABLE BORDER=0 WIDTH=100% CELLPADDING=0 CELLSPACING=0>
 <TR>
  <TD WIDTH=240 VALIGN=TOP ALIGN=LEFT>
  <?
  showHP($login);
  showPlayer($login);
  ?>
  </TD>
  <td width=4>&nbsp</td>
  <TD VALIGN=TOP>
  <?
  if($winer!=0 AND $loser!=0){
		$b = 0;
  }

		  if($b == 1){
		  showHeader($login);
		  }


		  if($act == "magic"){
		include_once "magic.php";
		}



		if($act == "openBook" AND isset($item_id))
		{
		 if($opponent!=''){
		 $INV_SQL  = mysql_query("SELECT * FROM `inv` WHERE id = '$item_id'");
		 $INV	  = mysql_fetch_array($INV_SQL);
		 $BOOK_SQL = mysql_query("SELECT * FROM `book` WHERE id = '".$INV["object_id"]."'");
		 $BOOK	 = mysql_fetch_array($BOOK_SQL);
		 $PAGE_SQL = mysql_query("SELECT * FROM `book_page` WHERE book_id = '$item_id'");

				  print "<br>".$BOOK["name"]." - ".$INV["book_name"]."<HR color=#000000 size=1 width=50% align=left>";
		 print "страниц: ".$INV["pages_used"]."/".$BOOK["pages"]."; использований: ".$INV["iznos"]."/".$INV["iznos_max"]."<BR>";
		 $i=0;
			while($PAGE = mysql_fetch_array($PAGE_SQL)){
			 $SCROLL_SQL = mysql_query("SELECT * FROM `scroll` WHERE id = '".$PAGE["spell"]."'");
			 $SCROLL = mysql_fetch_array($SCROLL_SQL);
			 print "<a href='?act=magic&type=book&b=$item_id&scroll=".$PAGE["id"]."'><img border=0 src='img/".$SCROLL["img"]."'></a>";
			   if($i==4 || $i==8 || $i==12 || $i==16){
				print "<BR>";
			   }
			 $i++;
			}





			if(!$SCROLL){
			 print "В книге нет записей!";
			}
		 print "<center><a href='?act=' class=us2>вернуться</a></center>";
		 }else{
		  print "<center>Сейчас не Ваш ход!</center>";
		  print "<center><a href='?act=' class=us2>вернуться</a></center>";
		 }
		}


  if($db["hp"]<=0 AND $b == 1){
  print "</center>Вы убиты. Ожидаем окончания поединка.<BR>";
  print "<center><input type=button value='Обновить' class=ad onClick=\"location.href='battle.php'\"></center>";
  }
  else{


		  if($opponent!='' AND $b == 1){
				if(empty($act) OR $act == "none" OR $act == "hit"){
				  genForm($login);

				}

				else if($act == "showMagic" AND $db["level"]>0){
				  genMagicForm($login);
				}
				else if($act == "tech" AND $db["level"]>0){
				  genTechForm($login);
				}




		  }

		  else{
		  $GET_TIMEOUT = mysql_query("SELECT lasthit FROM timeout WHERE battle_id='$bid'");
		  $T_D = mysql_fetch_array($GET_TIMEOUT);
		  $lasthit = $T_D["lasthit"];
		  $SEEK_T = mysql_query("SELECT timeout FROM zayavka WHERE creator = '$creator'");
		  $SEEK_TD = mysql_fetch_array($SEEK_T);
		  $to = $SEEK_TD["timeout"]*60;
		  $timeout = $lasthit+$to - time();
		  $minutes_l = floor($timeout/60);
		  $seconds_l = $timeout - $minutes_l*60;

	  print "<center><img border=0 src=img/line2.gif width=360 height=10></center>";


	  if($winer!=0 AND $loser!=0){
						if($team == $winer){
						print "</center>Поздравляем!! Вы победили!<BR>";
						print "<input type=button value='Вернуться' class=but onClick=\"location.href='battle.php?act=exit'\">";
						$b = 0;
						}
						else{
						print "</center>К сожалению вы проиграли!<BR>";
						print "<input type=button value='Вернуться' class=but onClick=\"location.href='battle.php?act=exit'\">";
						$b = 0;
						}
		  }

				if($timeout > 0 AND $b == 1){
				print "</center>Ожидаем хода противника... До таймаута осталось<font color=#333399><B> $minutes_l мин. $seconds_l сек.</B></font><BR>";
				print "<center><input type=button value='Обновить' class=ad onClick=\"location.href='battle.php'\"></center>";

				}
				if($timeout < 0 AND $b == 1 and $opponent == ''){
				  $BOT_L = mysql_query("SELECT * FROM bot_temp WHERE battle_id='$bid'");
				  $tb1=0;$tb2=0;
				  while($BOT_D = mysql_fetch_array($BOT_L)){
				  if ($BOT_D["team"]=="1"){$tb1++;}elseif($BOT_D["team"]=="2"){$tb2++;}
				  if (($team=="1" & $tb2!="0" & $tb2>$tb1)or ($team=="2" & $tb1!="0" & $tb2<$tb1)){echo "победил бот";}
				  }
			 print "<input type=button value='Вернуться' class=but onClick=\"location.href='battle.php?act=exit'\">";
			 die();


				  print "</center>Ваш противник долго не отвечает. Возможно у него проблемы с Интернетом, или же он просто убежал. Ваши действия:<BR>";
				  print "<center><input type=button value=' Подождать ' class=ad onClick=\"location.href='battle.php'\"></center>";
				  print "<center><input type=button value=' Я победил! ' class=ad onClick=\"location.href='battle.php?act=t_win'\"></center>";
				  print "<center><input type=button value='	 Ничья!	 ' class=ad onClick=\"location.href='battle.php?act=t_draw'\"></center>";
				}
		print "<center><img border=0 src=img/line2.gif width=360 height=10>";
		  }
  }
  print "</center>";
  $dis_file = file("logs/$bid.dis");
  $dis = explode("<BR>",$dis_file[0]);
  $c = count($dis)-1;
  if($c>30){$b = $c; $e = $c-30; $l = 1;}
  else{$b = $c; $e = 0; $l = 0;}
		for($i = $b;$i >= $e;$i--){
		print "$dis[$i]<BR>";
		}
		if($l == 1){
		print "<I>Вырезано для уменьшения объема. Полный лог боя <a href='log.php?log=$bid' class=us2 target=_newlog>здесь.</a></I><BR>";
		}
		if($team == 1){
		$P_HIT = mysql_query("SELECT * FROM team1 WHERE battle_id='$creator' AND player='$login'");
		}
		else if($team == 2){
		$P_HIT = mysql_query("SELECT * FROM team2 WHERE battle_id='$creator' AND player='$login'");
		}
  $P_HDATA = mysql_fetch_array($P_HIT);
  $hitted = $P_HDATA["hitted"];
  print "<center><img border=0 src=img/line2.gif width=360 height=10>";
  print "</center>Всего Вами нанесено урона: <B>$hitted</B>.";
  if($hitted==''){
		$UP = mysql_query("UPDATE users SET battle='0' WHERE login='$login'");
		if($team == 1){
		$CZ = mysql_query("UPDATE team1 SET over='1' WHERE player='$login'");
		}
		if($team == 2){
		$CZ = mysql_query("UPDATE team2 SET over='1' WHERE player='$login'");
		}
		clearZayavka($creator,$bid);
		print "<script>location.href='main.php?act=none'</script>";
		die();
  }
  ?>
  </TD>
  <td width=4>&nbsp</td>
  <TD WIDTH=240 VALIGN=TOP ALIGN=LEFT>
  <?
  if($opponent!='' AND $db["hp"]>0){
  $bot = 0;
		$BOT_L = mysql_query("SELECT * FROM bot_temp WHERE battle_id='$bid'");
		while($BOT_D = mysql_fetch_array($BOT_L)){
				if($BOT_D["bot_name"] == $opponent){
				$bot = 1;
				$prototype = $BOT_D["prototype"];
				}
		}

		if($bot == 0){
		  showHP($opponent);
		  showPlayer($opponent);
		}
		else if($bot == 1){
		showHPBot($opponent,$bid);
		showPlayer($prototype);
		}
  }
  else{
  print "Ждите...";
  }
  ?>
  </TD>
 </TR>
</TABLE>
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Я не знаю, возможно это все приходит с опытом, но:
1) Нормальный, сильно не заинтересованый человек, не будет копаться в вашем коде, потому-что: как правило аналог написать проще, чем разбираться в коде невысокого уровня. Даже в хорошем коде тяжело разбираться.
2) Вы пробовали использовать что-нибудь показывающее обмен по протоколу? типа минибраузера? Посмотрите какие данные передаются.
3) Нужно применять заглушки, коментируйте кусками и смотрите результаты, debug_backtrace() вам в помощь.
 

Spiteful

Новичок
Регистрация
22.06.2006
Сообщения
3
Может я вас неправильно понял,но что значит "Нормальный ,сильно не заинтересованый человек,не будет копаться в вашем коде?Всего навсего я хотел чтоб люди намного больше понимающие посмотрели на код и указали примерные ошибки,если таковые присутствуют(в данном случае да,иначе небыло бы этой темы)
А насчет заглушек,я об этом не подумал,обязательно попробую..
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Может я вас неправильно понял,но что значит "Нормальный ,сильно не заинтересованый человек,не будет копаться в вашем коде?
Возможно Вы действительно неправильно меня поняли, просто я имею в виду, что почти нереально разобраться влет в чужом коде даже проффи :) Я ничего не хотел сказать сильно плохого про код, но лично мне в нем разобраться не реально. Если вы выкладываете код на обозрение, то желательно чтобы он сопроваждался коментариями если не к каждой операции, то к каждому блоку.
P.S. А вобще код ужасен :) но это с опытом пройдет :)
пример выдрал с мясом из проекта :):
/**
* Функция создает новые элементы
*
* @param string $Name имя переменной
* @param string $HTML_filename имя файла HTML
* @param string $Code кодировка
*/
function read_HTML_XML($Name,$HTML_filename,$Code="UTF-8")
{
$html =file_get_contents($HTML_filename);//считываю файл

$this->$Name = new DOMDocument("1.0",$Code);//новый документ
$this->$Name->loadHTML($html); //преобразую файл
}
 
Статус
Закрыто для дальнейших ответов.
Верх Низ