Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Sposób zapisu danych o przedmiotach
Forum PHP.pl > Forum > PHP
kemot
Witam!

Mam pewien dylemat dotyczący tworzenia przedmiotów do gry, nad którą pracuje już od jakiegoś czasu. Pojawił się on na etapie pisania części kodu odpowiedzialnej za przedmioty. Chciałem, żeby każdy przedmiot mógł przyjmować pewne wartości będące premiami do punktów cech, ale niekoniecznie musiał (w przypadku gorszych przedmiotów), posiadając przy tym pewne cechy danego typu przedmiotów np. przedmioty typu weapon minimalne i maksymalne obrażenia a typu armor szanse na udany unik. Wynikałoby z tego, że najlepszym rozwiązaniem będzie klasa Item z właściwościami wspólnymi dla wszystkich przedmiotów i klasy dziedziczące np Weapon. Jednak problem pojawiałby się przy wyświetlaniu przedmiotów w oknie ekwipunku. Gracz nie mógłby w prosty sposób sortować zawartości swojego inwentarza. W przypadku bazy wystarczyłoby odpowiednie zapytanie. Wydaje mi się jednak, że pobieranie tylu rekordów byłoby mocnym obciążeniem dla bazy danych. Myślałem również o zapisywaniu do bazy wszystkich danych do jednej zmiennej tablicowej za pomocą serializacji. Niestety pojawiłby się ten sam problem co przy rozwiązaniu za pomocą klas a mianowicie brak całkowitej kontroli nad porządkowaniem i możliwość operowania na wybranych przedmiotach. Ostatecznie pomyślałem, żeby wykonać to w następujący sposób:

Stworzyć oddzielne tabele dla ogólnych cech przedmiotów (items), i oddzielne dla typów (weapons, armors, rings, questitems), a także tabele w której zapisywane były by informacje jakie przedmioty i w jakiej ilości należą do gracza.

Tabela items miałaby wted formę:

id - unikalny identyfikator przedmiotu
name - nazwa przedmiotu
imageurl - url obrazka przedmiotu
requiredlvl - wymagany poziom by przedmiotu używać
bonuses - tablica z premiami do punków cech

Natomiast tabela z typem następującą budowe (na przykładzie broni):

id - takie samo jak w tabeli items by możliwa była relacja między tabelami, reszta pól do umożliwienia sortowania wedługo określonych kryteriów
type
mindamage
maxdamage
critic
criticchance
extratype
extramindamage
extramaxdamage
extrachance
attackspeed


Tabela useritems:

userid - id gracza
itemid - id posiadanego przedmiotu
amount - ilość tych samych przedmiotów


Ma ktoś może jakiś pomysł by jeszcze lepiej zoptymalizować działanie tego typu skryptu? Ponieważ nie za bardzo potrafię stwierdzić kiedy baza danych i serwer może mieć problemy ze sprawnym działaniem, wynikającym z tabel o zbyt wielu rekordach, będę bardzo wdzięczny za pomoc.

Kasyx
Hmm miałem do rozwiązania podobny problem smile.gif

Twój pomysł jest bardzo dobry, jeśli chcesz stworzyć bazę danych przedmiotów, które gracz będzie mógł w jakiś sposób te przedmioty zdobywać. Wtedy pobierasz sobie dane z bazy, budujesz klasę Item, którą rozszerzasz odpowiednimi typami (Weapon, Armor itp). W środku mógłbyś wykonywać wszelkie niezbędne operacje na przedmiotach. System w porządku, bo możesz go praktycznie dowolnie rozszerzać, co jest ważną cechą.

Jedyne co bym zmienił to dodał w tabeli items rodzaj przedmiotu. Musisz w końcu wiedzieć do której tabeli się odwołać.
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.