W jaki sposób mógłbym na mapie umieścić npc czytającego z bazy danych?

0

witam, w jaki sposób mógłbym na mapie umieścić npc czytającego z bazy danych?

mam takie coś

<?php
require_once('../php/mysql-connect.php');
require_once('../php/load-data.php');

if($postac['zycie'] > 0){
$teleport = mysql_fetch_array(mysql_query("select * from mapa_przenies where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".$postac['y']." limit 1"));

if($_POST['move'] == 'lewo'){
$npcblock = mysql_fetch_array(mysql_query("select * from npc where mapa = ".$postac['mapa']." and x = ".($postac['x'] - 1)." and y = ".$postac['y']." limit 1"));
$npcblock2 = mysql_fetch_array(mysql_query("select * from mob where mapa = ".$postac['mapa']." and x = ".($postac['x'] - 1)." and y = ".$postac['y']." and respawn <= ".$czas_ogolny." limit 1"));
$blokada = mysql_fetch_array(mysql_query("select * from blokadaprzejscia where mapa = ".$postac['mapa']." and x = ".($postac['x'] - 1)." and y = ".$postac['y']." limit 1"));
if((empty($npcblock)) && (empty($blokada)) && (empty($npcblock2))){
mysql_query("update postac set x = x - 1 where id = ".$postac['id']." and x > 0 limit 1");
$postac['x'] -= 1;
echo $mapa['obrazek'];
exit;
}
}

if($_POST['move'] == 'prawo'){
$npcblock = mysql_fetch_array(mysql_query("select * from npc where mapa = ".$postac['mapa']." and x = ".($postac['x'] + 1)." and y = ".$postac['y']." limit 1"));
$npcblock2 = mysql_fetch_array(mysql_query("select * from mob where mapa = ".$postac['mapa']." and x = ".($postac['x'] + 1)." and y = ".$postac['y']." and respawn <= ".$czas_ogolny." limit 1"));
$blokada = mysql_fetch_array(mysql_query("select * from blokadaprzejscia where mapa = ".$postac['mapa']." and x = ".($postac['x'] + 1)." and y = ".$postac['y']." limit 1"));
if((empty($npcblock)) && (empty($blokada)) && (empty($npcblock2))){
mysql_query("update postac set x = x + 1 where id = ".$postac['id']." and x < ".$mapa['maks_x']." limit 1");
$postac['x'] += 1;
echo $mapa['obrazek'];
exit;
}
}

if($_POST['move'] == 'gora'){
$npcblock = mysql_fetch_array(mysql_query("select * from npc where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] - 1)." limit 1"));
$npcblock2 = mysql_fetch_array(mysql_query("select * from mob where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] - 1)." and respawn <= ".$czas_ogolny." limit 1"));
$blokada = mysql_fetch_array(mysql_query("select * from blokadaprzejscia where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] - 1)." limit 1"));
if((empty($npcblock)) && (empty($blokada)) && (empty($npcblock2))){
mysql_query("update postac set y = y - 1 where id = ".$postac['id']." and y > 0 limit 1");
$postac['y'] -= 1;
echo $mapa['obrazek'];
exit;
}
}

if($_POST['move'] == 'dol'){
$npcblock = mysql_fetch_array(mysql_query("select * from npc where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] + 1)." limit 1"));
$npcblock2 = mysql_fetch_array(mysql_query("select * from mob where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] + 1)." and respawn <= ".$czas_ogolny." limit 1"));
$blokada = mysql_fetch_array(mysql_query("select * from blokadaprzejscia where mapa = ".$postac['mapa']." and x = ".$postac['x']." and y = ".($postac['y'] + 1)." limit 1"));
if((empty($npcblock)) && (empty($blokada)) && (empty($npcblock2))){
mysql_query("update postac set y = y + 1 where id = ".$postac['id']." and y < ".$mapa['maks_y']." limit 1");
$postac['y'] += 1;
echo $mapa['obrazek'];
exit;
}
}
}
echo false;
exit;
?>
0

o mój borze...

i co ten npc ma czytać z tej bazy?

ten kod nic nikomu nie powie...

0

na tą chwilę chcę tak zrobić zeby npc stał na mapie i postacią można było do niego podejść tak samo npc nie może się po mapie przesuwać.
z npc tylko sam obrazek np
tabela npc
id nazwa nic wiecej reszte już sobie dam radę sam

zle napsiałem
sql.
tabela:
id:numer npc
nazwa:nazwa npc
obrazek:sciezka do grafiki
x:polozenie na mapie
y:polozenie na mapie
mapa:ktora mapa

zrobiłem to tak

<?php
require_once('../php/mysql-connect.php');

$npcall = mysql_query("select * from npc where mapa = ".$postac['mapa']." ");
while($npc = mysql_fetch_array($npcall)){
$tpx = (($npc['x'] - $postac['x']) * 32) + 240;
$tpy = (($npc['y'] - $postac['y']) * 32) + 240;

$ajax_txt .= ";
<div style='background-image: url(".$npc['obrazek']."); display: block;
position: absolute; width: ".$npc['szerokosc']."px; height: ".$npc['dlugosc']."px; left: ".$tpx."px; top: ".$tpy."px; z-index: 29;'></div></a>
"
;
};
$ajax_txt .= "</div>";

$npcall = mysql_query("select * from postac where mapa = ".$postac['mapa']."");
while($npc = mysql_fetch_array($npcall)){
$tpx = (($npc['x'] - $postac['x']) * 32) + 240;
$tpy = (($npc['y'] - $postac['y']) * 32) + 240;
}

echo $ajax_txt;
exit;
?>

powinnem gdzieś coś poprawić?
wiem że jeszcze trzeba dodać w npc.js

0

zrobione to mam tak:

<?php
$npcall = mysql_query("select * from npc where mapa = ".$player['mapa']." ");
while($npc = mysql_fetch_array($npcall)){
$tpx = (($npc['x'] - $player['x']) * 32) + 240;
$tpy = (($npc['y'] - $player['y']) * 32) + 240;

$ajax_txt .= ";
<div style='background-image: url(".$npc['obrazek']."); display: block;
position: absolute; width: ".$npc['szerokosc']."px; height: ".$npc['dlugosc']."px; left: ".$tpx."px; top: ".$tpy."px; z-index: 29;'></div></a>";
};
$ajax_txt .= "</div>";

$npcall = mysql_query("select * from player where mapa = ".$player['mapa']."");
while($npc = mysql_fetch_array($npcall)){
$tpx = (($npc['x'] - $player['x']) * 32) + 240;
$tpy = (($npc['y'] - $player['y']) * 32) + 240;
}

echo $ajax_txt;
exit;
?>

ale wywala błąd

Notice: Undefined variable: ajax_txt in C:\xampp\htdocs\game\system\npc.php on line 11
; 
0

Kolego masz zmienna ajax_txt z nie zamkniętym cudzysłowem

0

Raczej chodzi o to że powinien przed pętlą definiować zmienną ajax_txt i nadać jej wartość początkową np. $ajax_txt = ""; skoro chce później w pętli łączyć stringi.

0

zrobiłem to tak poprawiłem kod.

<?php
require_once('config.php');
$ajax_txt = "";

$npcall = mysql_query("select * from npc where mapa = ".$player['mapa']." ");
while($npc = mysql_fetch_array($npcall)){
$tpx = (($npc['x'] - $player['x']) * 32) + 240;
$tpy = (($npc['y'] - $player['y']) * 32) + 240;
$ajax_txt .= "

<div style='background-image: url(".$npc['obrazek']."); display: block;position: absolute; width: ".$npc['szerokosc']."px; height: ".$npc['dlugosc']."px; left: ".$tpx."px; top: ".$tpy."px; z-index: 29;'></div></a>
";
$ajax_txt .= "</div>";
}

echo $ajax_txt;
exit;
?>

teraz jest problem postac jest na stronie ale mapa znikła nie można się poruszać ani nie widać npc

0

Przeanalizuj kod HTML jaki "wypluwa" ten skrypt przecież jest bez sensu w pętli kończysz jakiś link a którego nie ma początku a poza pętlą jakiś div który także nie ma początku...

2
Marcin Z Marwini napisał(a):

na tą chwilę chcę tak zrobić zeby npc stał na mapie i postacią można było do niego podejść tak samo npc nie może się po mapie przesuwać.
z npc tylko sam obrazek np

Na tą chwilę próbujesz przekopać się łyżeczką od herbaty do Australii.
Poczytaj o funkcjach, strukturach danych, DAL-ach, PDO, bindowaniu, "why not select *" itd.

1

I o separation of concerns. Ten kod woła o pomstę do nieba. Mieszanie totalnie wszystkiego - w kilku linijkach mamy HTML, CSS, SQL i PHP*. Pomijając to, że będzie to koszmarne w utrzymaniu, to bardzo łatwo o błędy jak widać. Rozdzieliłbyś sobie kod, poczytał o templatingu, MVC, separation of concerns etc. Wydaje mi się, że od niedawna programujesz i nie zaliczyłeś jeszcze paru fakupów na własnej skórze...

*nawet kilku rodzajów PHP - bo same odwołania do bazy MySQL:

mysql_query("select * from npc where mapa = ".$player['mapa']." ");

to coś innego niż logika gry:

$tpx = (($npc['x'] - $player['x']) * 32) + 240;
$tpy = (($npc['y'] - $player['y']) * 32) + 240;

i jeszcze co innego niż prezentacja outputu:

ajax_txt .= "
 
<div style='background-image: url(".$npc['obrazek']."); display: block;position: absolute; width: ".$npc['szerokosc']."px; height: ".$npc['dlugosc']."px; left: ".$tpx."px; top: ".$tpy."px; z-index: 29;'></div></a>
";
$ajax_txt .= "</div>";

Dopóki to jest kod, który ma 10 linijek i który napiszesz od nowa w godzinę jak będzie trzeba, to nie razi. Ale jak to ma być jakaś gra, i to jeszcze z mapą, npcami i nie wiadomo czym - raczej tej gry z takim podejściem nie zrobisz, skoro już na wstępie piszesz spaghetti kod.

kAzek napisał(a):

Przeanalizuj kod HTML jaki "wypluwa" ten skrypt przecież jest bez sensu w pętli kończysz jakiś link a którego nie ma początku a poza pętlą jakiś div który także nie ma początku...

tak się kończy programowanie na kolanie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1