Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak dodać minimalną i maksymalną wartość w pliku php (gra online)?
Forum PHP.pl > Forum > Przedszkole
cascader
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.
Kshyhoo
Ale to jest tylko funkcja, a taki tekst powinieneś dać gdzieś, gdzie tę funkcję wywołujesz.
cascader
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)
Kshyhoo
TotalCommander > Alt+F7 > "szukana sekwencja:" > "CreateOneMoonRecord".
cascader
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 smile.gif
Kshyhoo
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 smile.gif

To jest nazwa funkcji, odpowiedzialnej za Twój księżyc:
  1. function CreateOneMoonRecord(...
cascader
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ć?
com
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. }

?
cascader
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.
Kshyhoo
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?
markonix
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.
cascader
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.
Kshyhoo
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. }
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.