Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak dodać minimalną i maksymalną wartość w pliku php (gra online)?
cascader
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


Witam! Edytuje silnik pewnej gry, jednak mam problem, nie mam pojęcia jak się za to zabrać (laik, dopiero się uczę). Chodzi konkretnie o plik, który odpowiada za tworzenie przedmiotu- w tym wypadku księżyca (gra kosmiczna), jest tutaj zawarty fragment, który odpowiada za wielkość księżyca, jednak chciałbym dodać linie, która mówi, że minimalny rozmiar księżyca to 1000, niezależnie od obliczeń(czyli nawet jeśli nie przekroczy progu liczby z obliczeń, który stwierdziłby, że może powstać księżyc z taką średnicą) i maksymalną wartość 9000. Mam nadzieje, że wyjaśniłem o co mi chodzi dość jasno. Czy jest to w ogóle możliwe? Liczę na Wasze sugestie.

fragment kodu z zawartym wzorem na tworzenie księżyca:

  1. function CreateOneMoonRecord($Galaxy, $System, $Planet, $Universe, $Owner, $MoonName, $Chance, $time = 0, $Size = 0)
  2. {
  3. global $USER;
  4.  
  5. $SQL = "SELECT id_luna,planet_type,id,name,temp_max,temp_min FROM ".PLANETS." ";
  6. $SQL .= "WHERE ";
  7. $SQL .= "universe = '".$Universe."' AND ";
  8. $SQL .= "galaxy = '".$Galaxy."' AND ";
  9. $SQL .= "system = '".$System."' AND ";
  10. $SQL .= "planet = '".$Planet."' AND ";
  11. $SQL .= "planet_type = '1';";
  12. $MoonPlanet = $GLOBALS['DATABASE']->getFirstRow($SQL);
  13.  
  14. if ($MoonPlanet['id_luna'] != 0)
  15. return false;
  16.  
  17. if($Size == 0) {
  18. $size = floor(pow(mt_rand(10, 20) + 3 * $Chance, 0.5) * 200);
  19. } else {
  20. $size = $Size;
  21. }
  22.  
  23. $maxtemp = $MoonPlanet['temp_max'] - mt_rand(10, 45);
  24. $mintemp = $MoonPlanet['temp_min'] - mt_rand(10, 45);
  25.  
  26. $GLOBALS['DATABASE']->multi_query("INSERT INTO ".PLANETS." SET
  27. name = '".$MoonName."',
  28. id_owner = ".$Owner.",
  29. universe = ".$Universe.",
  30. galaxy = ".$Galaxy.",
  31. system = ".$System.",
  32. planet = ".$Planet.",
  33. last_update = ".TIMESTAMP.",
  34. planet_type = '3',
  35. image = 'mond',
  36. diameter = ".$size.",
  37. field_max = '1',
  38. temp_min = ".$mintemp.",
  39. temp_max = ".$maxtemp.",
  40. metal = 0,
  41. metal_perhour = 0,
  42. crystal = 0,
  43. crystal_perhour = 0,
  44. deuterium = 0,
  45. deuterium_perhour = 0;
  46. SET @moonID = LAST_INSERT_ID();
  47. UPDATE ".PLANETS." SET
  48. id_luna = @moonID
  49. WHERE
  50. id = ".$MoonPlanet['id'].";");
  51.  
  52. return true;
  53. }
  54.  


PS. W tym wypadku, fields nie ma nic do wielkości księżyca, to jest wartość, która określa ile można zbudować budynków na danym księżycu.

Ten post edytował cascader 1.02.2014, 18:42:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Ale to jest tylko funkcja, a taki tekst powinieneś dać gdzieś, gdzie tę funkcję wywołujesz.
Go to the top of the page
+Quote Post
cascader
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


myślałem, że mogę edytować to w tym pliku, bo ogółem z tego co wiem to on miał być odpowiedzialny za powstawanie księżyca, tym bardziej zmyliło mnie to, że jest tu wzór na wielkość księżyca, który mogę swobodnie edytować. No nic, to muszę poszukać kolejnego pliku jak dobrze zrozumiałem. (ponad 1000 plików, trochę tego jest)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




TotalCommander > Alt+F7 > "szukana sekwencja:" > "CreateOneMoonRecord".
Go to the top of the page
+Quote Post
cascader
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


z tym, że jest to nazwa pliku, a często mam nazwy np. GeneralFunctions czy vars, Game itd. Chyba, że ten program przeczesuje treści plików (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat(cascader @ 1.02.2014, 19:21:46 ) *
z tym, że jest to nazwa pliku, a często mam nazwy np. GeneralFunctions czy vars, Game itd. Chyba, że ten program przeczesuje treści plików (IMG:style_emoticons/default/smile.gif)

To jest nazwa funkcji, odpowiedzialnej za Twój księżyc:
  1. function CreateOneMoonRecord(...
Go to the top of the page
+Quote Post
cascader
post
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


Mam kod, który był umieszczony w pliku odpowiedzialnym za kilka innych rzeczy, ale mam nadzieję, że to jest to czego szukałem. Wkleję może część kodu, bo ponad 600 linijek raczej mogłoby namieszać niż pomóc (chyba, że stwierdzicie, że cały plik wrzucić) :


  1. $diameter = floor(pow(mt_rand(10, 20) + 3 * $chance, 0.5) * 1000);
  2. }
  3.  
  4. $maxTemperature = $parentPlanet['temp_max'] - mt_rand(10, 45);
  5. $minTemperature = $parentPlanet['temp_min'] - mt_rand(10, 45);
  6.  
  7. if(empty($moonName))
  8. {
  9. $moonName = $LNG['type_planet'][3];
  10. }
  11.  
  12. $sql = "INSERT INTO %%PLANETS%% SET
  13. name = :name,
  14. id_owner = :owner,
  15. universe = :universe,
  16. galaxy = :galaxy,
  17. system = :system,
  18. planet = :planet,
  19. last_update = :updateTimestamp,
  20. planet_type = :type,
  21. image = :image,
  22. diameter = :diameter,
  23. field_max = :fields,
  24. temp_min = :minTemperature,
  25. temp_max = :maxTemperature,
  26. metal = :metal,
  27. metal_perhour = :metPerHour,
  28. crystal = :crystal,
  29. crystal_perhour = :cryPerHour,
  30. deuterium = :deuterium,
  31. deuterium_perhour = :deuPerHour;";
  32.  
  33. $db->insert($sql, array(
  34. ':name' => $moonName,
  35. ':owner' => $userId,
  36. ':universe' => $universe,
  37. ':galaxy' => $galaxy,
  38. ':system' => $system,
  39. ':planet' => $position,
  40. ':updateTimestamp' => TIMESTAMP,
  41. ':type' => 3,
  42. ':image' => 'mond',
  43. ':diameter' => $diameter,
  44. ':fields' => 1,
  45. ':minTemperature' => $minTemperature,
  46. ':maxTemperature' => $maxTemperature,
  47. ':metal' => 0,
  48. ':metPerHour' => 0,
  49. ':crystal' => 0,
  50. ':cryPerHour' => 0,
  51. ':deuterium' => 0,
  52. ':deuPerHour' => 0,
  53. ));
  54.  

Da radę coś z tym zrobić?
Go to the top of the page
+Quote Post
com
post
Post #8





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


wracając do pierwszego kodu to rozumiem że rozmiar księżyca określasz tu :
  1. if($Size == 0) {
  2. $size = floor(pow(mt_rand(10, 20) + 3 * $Chance, 0.5) * 200);
  3. } else {
  4. $size = $Size;
  5. }

?
Go to the top of the page
+Quote Post
cascader
post
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


tak, w drugim pliku też to jest zawarte, jednak zamiast 200 jest tam 1000, mój błąd, wkleiłem ze starszego pliku przed zmianą.
  1. " $diameter = floor(pow(mt_rand(10, 20) + 3 * $chance, 0.5) * 1000); "
w drugim pliku też jest te odniesienie co do tworzenia się księżyca.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #10





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat(cascader @ 1.02.2014, 18:41:59 ) *
chciałbym dodać linie, która mówi, że minimalny rozmiar księżyca to 1000, niezależnie od obliczeń

To chcesz dodać komunikat o rozmiarze księżyca, czy chcesz zmodyfikować skrypt tak, żeby księżyc miał zawsze powyżej 1000?
Go to the top of the page
+Quote Post
markonix
post
Post #11





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Raczej to drugie bo i tak rozmiar jest losowany jeżeli nie jest przekazany.
Po prostu po linii 18 (patrzę na pierwszy listing) dodaj warunek że jeżeli size większe od 1000 to size = 1000, jeżeli max ma też być to podobnie.
Go to the top of the page
+Quote Post
cascader
post
Post #12





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


To jest tak: Chcę, żeby minimalny księżyc jaki powstanie (jeśli powstanie) miał średnice 1000 jednostek, a maksymalny (po tym jak ze skryptu wyjdzie, że osiągnął wymagany do tego wynik) 9000 jednostek. Rozmiar księżyca nie jest losowy, W pewnych chwilach szansa na powstanie księżyca waha się od 1 do 20% (zależnie od sytuacji), a gdy już się trafi na to, że ma powstać to wielkość liczy się ze skryptu:
  1. " $diameter = floor(pow(mt_rand(10, 20) + 3 * $chance, 0.5) * 200); "
. I z tego skryptu, czasem tworzą się bardzo małe księżyce (np. 100 jednostek) lub bardzo duże (20.000 jednostek). I chcę to tak zrobić, że w momencie kiedy obliczenia wskażą, że księżyc ma powstać z rozmiarem mniejszym niż 999 jednostek to żeby mimo to powstał księżyc z rozmiarem 1000 jednostek. W drugą stronę podobnie, jeśli ma wyjść księżyc 15000 to zamiast tego ma powstać księżyc 9000 jednostek.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #13





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No to w czym problem? Skoro:
  1. $size = floor(pow(mt_rand(10, 20) + 3 * $Chance, 0.5) * 200);

To dodaj warunek na zasadzie:
  1. if($size < 1000) { $size = 1000; }


Albo tak mądrzej:
  1. if($Size == 0) {
  2. $size = floor(pow(mt_rand(10, 20) + 3 * $Chance, 0.5) * 200);
  3. // jeżeli #size jest mniejsza niż 1000 przypisz 1000, jeżeli inaczej, $size
  4. $size = $size < 1000 ? 1000 : $size;
  5. } else {
  6. $size = $Size;
  7. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 06:16