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.