Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mój zegarek w grze...
Forum PHP.pl > Forum > PHP
colinQ
Zrobiłem taki zegarek... Wszystko jest prawie ok...

Tylko że gdy mam zbudowany już 1 budynek, buduje się drugi a w trzecim zamiast pokazać się "-" to pisze "buduj" i można go zbudować...

Jak zrobic że przy budowie 1 budynku blokują się inne?


  1. function budynki_buduj_budynek($czas, $funkcja) {
  2.  
  3. $login = $_SESSION['login'];
  4. $id = $_SESSION['id'];
  5. $b = "select * from budynki where user='$login' AND nazwa='$funkcja'";
  6. $wynik2 = mysql_query($b);
  7. $ile2 = mysql_num_rows($wynik2);
  8. $feth2 = mysql_fetch_assoc($wynik2);
  9. $time = time();
  10. $all2 = $time + $czas;
  11.  
  12. global $koszty;
  13. global $_cegla;
  14. global $_stal;
  15. global $_zwir;
  16. global $_cement;
  17.  
  18. $wyj_kasa = $_SESSION['money'] - $koszty[$funkcja];
  19. $wyj_cegla = $_SESSION['cegla'] - $_cegla[$funkcja];
  20. $wyj_stal = $_SESSION['stal'] - $_stal[$funkcja];
  21. $wyj_zwir = $_SESSION['zwir'] - $_zwir[$funkcja];
  22. $wyj_cement = $_SESSION['cement'] - $_cement[$funkcja];
  23.  
  24. if($ile2>0) {
  25. if($feth2['time'] <= $time){
  26.  
  27. if(!empty($_SESSION['budowa']) ){
  28. mysql_query("update users set budowa='' where log='$login'");
  29. $_SESSION['budowa'] = '';
  30. }
  31.  
  32. echo 'rozbuduj';
  33.  
  34. } else { 
  35. ?>
  36. <script language="javascript" type="text/javascript"> 
  37. <!-- 
  38. i = 0;
  39. function zegar2() {
  40. teraz = <? echo time(); ?> + i;
  41. dzien = <? echo $feth2['time']; ?>
  42. sekund = Math.abs((teraz-dzien)); 
  43. minut = Math.floor(sekund/60); 
  44. godzin = Math.floor(minut/60); 
  45. dni = Math.floor(godzin/24); 
  46. lat = Math.floor(dni/365); 
  47. sekund = Math.floor(sekund-minut*60); 
  48. minut = Math.floor(minut-godzin*60); 
  49. godzin = Math.floor(godzin-dni*24); 
  50. dni = Math.floor(dni-lat*365);
  51. if(dni > 0)
  52. {
  53. dni = dni * 24;
  54. godzin = godzin + dni;
  55. }
  56. godziny = Math.floor(godzin-1);
  57. roznica=+godzin+ 
  58. ":"+((minut<10)?"0":"")+minut+ 
  59. ":"+((sekund<10)?"0":"")+sekund; 
  60. document.getElementById("okienko").innerHTML = ""+roznica; 
  61. if (teraz<dzien) { 
  62. i = i + 1;
  63. setTimeout("zegar2()",1000); 
  64. }
  65. else
  66. {
  67. location.reload();
  68. }
  69. // --> 
  70. </script>
  71.  
  72. <?
  73. if($wyj_cegla > 0 && $wyj_stal > 0 && $wyj_zwir > 0 && $wyj_cement > 0) {
  74.  
  75. if($wyj_kasa > 0)
  76. echo '<body onload=zegar2();><span id="okienko">-</span></body>';
  77. else 
  78. echo "Masz za mało funduszy! Potrzebne ci $koszty[$funkcja] !";
  79.  
  80. }else
  81. echo 'brak surowców';
  82. }
  83. } else {
  84.  
  85. if(isset($_GET["buduj_$funkcja"]) && $ile2==&& empty($_SESSION['budowa'])) {
  86.  
  87.  
  88. if($wyj_kasa > 0 && $wyj_cegla > 0 && $wyj_stal > 0 && $wyj_zwir > 0 && $wyj_cement > 0) {
  89.  
  90. mysql_query("update users set money='$kasa' where log='$login'");
  91.  
  92. mysql_query("update users set budowa='$funkcja' where log='$login'");
  93.  
  94. $_SESSION['budowa'] = $funkcja;
  95.  
  96.  
  97. mysql_query("update users set money='$wyj_kasa' where id='$id'");
  98. mysql_query("update users set cegla='$wyj_cegla' where id='$id'");
  99. mysql_query("update users set stal='$wyj_stal' where id='$id'");
  100. mysql_query("update users set zwir='$wyj_zwir' where id='$id'");
  101. mysql_query("update users set cement='$wyj_cement' where id='$id'");
  102.  
  103. $_SESSION['money'] = $wyj_kasa;
  104. $_SESSION['cegla'] = $wyj_cegla;
  105. $_SESSION['stal'] = $wyj_stal;
  106. $_SESSION['zwir'] = $wyj_zwir;
  107. $_SESSION['cement'] = $wyj_cement;
  108.  
  109.  
  110.  
  111. $razem2 = $time + $czas2;
  112.  
  113. $query2 = "insert into budynki values('$funkcja', '$all2', '1', '$login')";
  114.  
  115. if(mysql_query($query2)) 
  116. echo "<body onload=location.reload();></body>";
  117.  
  118. } else
  119. echo "<body onload=location.reload();></body>";
  120.  
  121. } else {
  122. if(empty($_SESSION['budowa']))
  123. echo "<a href=index.php?frame=budynki&buduj_$funkcja>buduj!</a>";
  124. else
  125. echo '-';
  126. }
  127.  
  128. }
  129.  
  130. }
Boski
możesz zrobić cache w pliku lub tablice w bazie która przechowuje np login gracza czy tam konta nazwę budynku i czas rozpoczęcia i czas trwania lub porostu czas zakończenia i przy każdej budowli powinien sprawdzać czy dla tego użytkownika data zakończenia jest mniejsza od aktualnego czasu i wtedy kasować istniejący wpis o ile istnieje po czym wyświetlać linka z funkcją buduj. jeżeli sie buduje przy budynku wyświetlany jest czas zakończenia lub w javascripcie zegarek odliczający ten czas.


  1. <?php
  2. mysql_query("update users set money='$wyj_kasa' where id='$id'");
  3. mysql_query("update users set cegla='$wyj_cegla' where id='$id'");
  4. mysql_query("update users set stal='$wyj_stal' where id='$id'");
  5. mysql_query("update users set zwir='$wyj_zwir' where id='$id'");
  6. mysql_query("update users set cement='$wyj_cement' where id='$id'");
  7. ?>


jest niedouszczalen zabardoz obciążasz baze ilościa zapytań lepiej:

  1. <?php
  2. $query = "update users set money='$wyj_kasa' , cegla='$wyj_cegla' , stal='$wyj_stal' , zwir='$wyj_zwir' , cement='$wyj_cement' where id='$id'";
  3. mysql_query($query);
  4. ?>
colinQ
Z tymi cache nic nie skumałem... Ja mam podobny mechanizm na sesjach ale mam go w złym miejscu a nie wiem które to dobre tongue.gif

Za to drugie dzięki smile.gif
Boski
po prostu musisz zrobić coś do czego bezie zapisywany taki bufor czy na danym konie aktualnie się coś buduje w sesji będzie złe bo jak się coś buduje a ktoś zakończy sesje to budowa zaostanie niedokończona musisz to mieć na serwerze w bazie danych lub pliku
colinQ
w bazie danych też jest winksmiley.jpg

to jest ten kod winksmiley.jpg

  1. <?php
  2. if(!empty($_SESSION['budowa']) ){
  3. mysql_query("update users set budowa='' where log='$login'");
  4. $_SESSION['budowa'] = '';
  5. }
  6. ?>
Boski
no tak tylko że oprucz samego budowa true or false musi być data zakończenia i teraz jak masz spis budowli to wstawiasz zwykłego if że data czy buduj = true jeżeli tak to sprawdza czy budowa sie nie zakończyła czyli czy czas zakończenia jest większy od czasu aktualnego jeżeli jest większy to wyświetla tylko - chyba że ta aktualnie budowało jak sie buduje to tez trzeba zmienna z nazwą budowli a najlepiej id_budowli wstawić sprawdzenie czy to ta budowal sie buduje.
colinQ
Podpiąłbyś mi ten swój pomysł do mojego kodu?

Bo nie mogę zrozumieć...
Boski
oraz co zwraca to zapytanie?
  1. SELECT * FROM budynki WHERE user='$login' AND nazwa='$funkcja'


  1. <?// jezeli czas budowy jest mniejszy od aktualnego 
  2. if($feth2['time'] <= $time){
  3.  // opróżnia bufor budowy
  4. if(!empty($_SESSION['budowa']) ){
  5. mysql_query("update users set budowa='' where log='$login'");
  6. $_SESSION['budowa'] = '';
  7. }
  8. // i pokazuje że można ten budynek rozbudować
  9. echo 'rozbuduj';
  10. }
  11. else { 
  12. // w przeciwnym wypadku java z zegarem odliczającym
  13. ?>
  14. <script language="javascript" type="text/javascript"> 
  15. <!-- 
  16. i = 0;
  17. function zegar2() {
  18. teraz = <? echo time(); ?> + i;
  19. dzien = <? echo $feth2['time']; ?>
  20. sekund = Math.abs((teraz-dzien)); 
  21. minut = Math.floor(sekund/60); 
  22. godzin = Math.floor(minut/60); 
  23. dni = Math.floor(godzin/24); 
  24. lat = Math.floor(dni/365); 
  25. sekund = Math.floor(sekund-minut*60); 
  26. minut = Math.floor(minut-godzin*60); 
  27. godzin = Math.floor(godzin-dni*24); 
  28. dni = Math.floor(dni-lat*365);
  29. if(dni > 0){
  30. dni = dni * 24;
  31. godzin = godzin + dni;
  32. }
  33. godziny = Math.floor(godzin-1);
  34. roznica=+godzin+ 
  35. ":"+((minut<10)?"0":"")+minut+ 
  36. ":"+((sekund<10)?"0":"")+sekund; 
  37. document.getElementById("okienko").innerHTML = ""+roznica; 
  38. if (teraz<dzien) { 
  39. i = i + 1;
  40. setTimeout("zegar2()",1000); 
  41. }
  42. else{
  43. location.reload();
  44. }
  45. // --> 
  46. </script>
  47. <?
  48. //oraz sprawdzenie czy cie stać na rozbudowę questionmark.gif czemu??
  49. if($wyj_cegla > 0 && $wyj_stal > 0 && $wyj_zwir > 0 && $wyj_cement > 0) {
  50. if($wyj_kasa > 0){
  51. echo '<body onload=zegar2();><span id="okienko">-</span></body>';
  52. }
  53. else {
  54. echo "Masz za mało funduszy! Potrzebne ci $koszty[$funkcja] !";
  55. }
  56. }
  57. else{
  58. echo 'brak surowców';
  59. }
  60. }?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.