ďťż

[php + mysql]Gra mmorpg Ogolne pytania

       

Podstrony


telcocafe

Witam! Zalozylem ten temat aby sie dowiedziec paru rzeczy, ktore moga byc mi przydatne przy tworzeniu mojej drugiej gry mmorpg. Tamta miala mnostwo bledow, jak teraz patrze na jej kod to mnie ogarnia smiech. Od razu mowie ze nie potrzebuje prawie* zadnej pomocy przy tworzeniu gry, to raczej temat blizniaczy do tego ktory zrobil Temporal w dziale "programowanie"

* - potrzebuje kilku rad ktore tu bede wpisywal i kogos kto zrobi layout - szczegoly na pw. Ale NIE JEST TO kolejne "szukam programisty"

1. Pytanie - bezpieczenstwo. Przy tworzeniu starej gry nie uzywalem zadnych register_globals, a mimo to ktos w jakis sposob wszedl do gry bez logowania. Czy da sie zatem jakimis programami zmodyfikowac/ustawic wartosc sesji (na ktorych jest logowanie)?
2. Znow bezpieczenstwo. Czy includowanie w taki sposob:
if (zalogowany == true) { //tak dla skrocenia, to nie jest wazne include ('./'.$_GET['act'].'.inc.php'); }
jest bezpieczne? Zawsze na sztywno ustawia sie poczatek './' - czyli aktualny katalog, oraz koniec - '.inc.php' czyli rozszerzenie. W ten sposob przekazuje to co ma byc zaincludowane w sposob np skrypt.php?act=kartapostaci //przyklad

3. Szybkosc skryptu - co jest szybsze, uzywanie:
$zmienna = "witaj $zmienna2";
czy
$zmienna = 'witaj '.$zmienna2;
?

4. Czy ktos sie orientuje o ile mniej wiecej procent obnizana jest wydajnosc _duzego_ skryptu gdy ten stosuje klasy praktycznie do wszystkiego?

5. Planuje zrobic plik z tlumaczeniem - co bedzie wydajniejsze, np:
$language['hello_text']='Witaj w grze!'; $language['exit_text']='Do zobaczenia ponownie!';
Czy tez raczej stale:
define ('Lang_hello_text', 'Witaj w grze!'); define ('Lang_exit_text', 'Do zobaczenia ponownie!');
Oczywiscie to tylko przyklad, bo bedzie wiele, wiele takich linijek. Wiec co lepiej zastosowac? A moze najlepiej uzyc bazy danych do tego celu? Chodzi mi glownie o szybkosc.

6. Kodowanie md5 - tutaj mi troche zamotal inny temat z forum. Jesli w bazie danych hasla beda kodowane za pomoca md5 w sposob np ZapiszWBazie(md5($zmienna_z_haslem)); to w bazie bedzie ten hash. No i ok. Ale z tego tematu wywnioskowalem ze aby odwrocic proces (czyli np zalogowac uzywajac tego hasla) bede musial za kazdym razem haslo.. lamac? Jak z tym jest? Jesli potraktuje hash funkcja md5 powinno mi chyba zwrocic zwykle haslo jako czysty tekst, i bede mogl porownac z tym co wpisal uzytkownik. Nie jest tak?

7. Ma ktos pomysl w jaki sposob zrealizowac "licznik" ktory opoznia pewne zdarzenia w grze? (np w grze travian jest licznik - jeszcze 5 minut do zbudowania czegos)? Zupelnie nie mam pomyslu jak mialoby to dzialac :unsure:

8. Cos dla graczy raczej :) Jak byscie ocenili taka "fabule":

Jestes jednym z wielu rycerzy w czasie wojny miedzy dwoma sasiadujacymi ze soba krolestwami. Chwilowo nie odbywaja sie zadne walki, wiec ty wraz z kolegami bez celu snujecie sie po miescie.
W grze mozna stanac po jednej z dwoch stron - "dobrej" gdzie dla pieniedzy bedziesz pomagac wiesniakom (a to trzeba smoka ubic, a to poborce podatkow pogonic) w zamian dostajac czesto schronienie i jedzenie, czy tez "zlej" gdzie wiesniakow bedziesz okradal i oszukiwal, by w zamian miec wiecej rodzajow broni i pancerzy od swych "kolegow po fachu". Zatrzymujac sie na broniach i pancerzach - w grze beda rozne bronie (miecze, kusze, luki, sztylety), pancerze (i ich elementy, np helm, pas, nagolenniki) ktore moga byc silnymi artefaktami, na ktore inni rycerze "dybia". Przedmioty te beda roznie dzialac (skutecznosc) w nocy i w dzien. Poza tym trzeba cos jesc, trenowac, spac. Kupic nowy miecz, gdyz stary juz dawno zardzewial. Zdobywac doswiadczenie i poziomy, trenowac sile, zrecznosc, witalnosc i charyzme. To wszystko jest dostepne w grze.

Taka historyjka ;) jak na razie nie mam zadnej sensownej nazwy, jedynie JIYU ktore gdzies uslyszalem i ktore oznacza "wolnosc" po japonsku. Co wiec sadzicie o takiej gierce && nazwie?

Uuufff ale sie rozpisalem ... na razie tyle pytan mam co do samego tworzenia tej gry. Z gory dziekuje za wszystkie uwagi i zainteresowanie tematem.




3. Szybkosc skryptu - co jest szybsze, uzywanie:
$zmienna = "witaj $zmienna2";
czy
$zmienna = 'witaj '.$zmienna2;
?

5. Planuje zrobic plik z tlumaczeniem - co bedzie wydajniejsze, np:
$language['hello_text']='Witaj w grze!'; $language['exit_text']='Do zobaczenia ponownie!';
Czy tez raczej stale:
define ('Lang_hello_text', 'Witaj w grze!'); define ('Lang_exit_text', 'Do zobaczenia ponownie!');
Oczywiscie to tylko przyklad, bo bedzie wiele, wiele takich linijek. Wiec co lepiej zastosowac? A moze najlepiej uzyc bazy danych do tego celu? Chodzi mi glownie o szybkosc.

7. Ma ktos pomysl w jaki sposob zrealizowac "licznik" ktory opoznia pewne zdarzenia w grze? (np w grze travian jest licznik - jeszcze 5 minut do zbudowania czegos)? Zupelnie nie mam pomyslu jak mialoby to dzialac :unsure:


Co do md5: Hashujesz do md5 i zapisujesz w bazie. Potem to co wpisał gracz hashujesz, i porównujesz z hashem w bazie :)

Co do licznika: Zapisujesz w bazie date/godzine rozpoczęcia budowy. Potem przy wyświetlaniu pobierasz date/godzine i w javacripcie obliczasz ile jeszcze pozostało.
Użytkownik pawkow edytował ten post 29 styczeń 2006, 18:29

Jesli potraktuje hash funkcja md5 powinno mi chyba zwrocic zwykle haslo jako czysty tekst, i bede mogl porownac z tym co wpisal uzytkownik. Jeśli potraktujesz hash funkcją md5, ta zwróci ci hash hasha :D



3. Szybkosc skryptu - co jest szybsze, uzywanie:
$zmienna = "witaj $zmienna2";
czy
$zmienna = 'witaj '.$zmienna2;
?
Logiczne, że szybsze jest to 2 - skrypt idzi zmienne odrazu, a nie przeszukuje ciąg znaków.

6. Kodowanie md5 - tutaj mi troche zamotal inny temat z forum. Jesli w bazie danych hasla beda kodowane za pomoca md5 w sposob np ZapiszWBazie(md5($zmienna_z_haslem)); to w bazie bedzie ten hash. No i ok. Ale z tego tematu wywnioskowalem ze aby odwrocic proces (czyli np zalogowac uzywajac tego hasla) bede musial za kazdym razem haslo.. lamac? Jak z tym jest? Jesli potraktuje hash funkcja md5 powinno mi chyba zwrocic zwykle haslo jako czysty tekst, i bede mogl porownac z tym co wpisal uzytkownik. Nie jest tak?

Nie, nie jest tak. Hashujesz do md5 kiedy użytkownik podaje swoje chasło, i hashujesz kidey on je podaje potemprzy logowaniu. Potem porówujesz, i jeżeli są takie same, to jesteś zalogowany.

7. Ma ktos pomysl w jaki sposob zrealizowac "licznik" ktory opoznia pewne zdarzenia w grze? (np w grze travian jest licznik - jeszcze 5 minut do zbudowania czegos)? Zupelnie nie mam pomyslu jak mialoby to dzialac :unsure:

Zapisujesz w bazie date/godzine rozpoczęcia budowy. Potem przy wyświetlaniu pobierasz date/godzine i w javacripcie obliczasz ile jeszcze pozostało.

Fabułajest interesująca, alenpewno nie każdemu się spodoba.



Co do licznika: Zapisujesz w bazie date/godzine rozpoczęcia budowy. Potem przy wyświetlaniu pobierasz date/godzine i w javacripcie obliczasz ile jeszcze pozostało.


raczej nie w javascripcie, samo obliczenie trzeba zrobic w php a javascriptem tylko zmniejszac liczbe pokazywana na stronie... ale dobra rada: NIE rob niczego typu: kliknij raz, czekaj dzien. to jest bardzo nudne na pocztku, i bez duzej bazy graczy (bo w takich grach jedyna przyjemnosc to skopanie komus tylka ;) raczej nie zdobedzie popularnosci (kolo sie zamyka ;p ), poza tym jest juz kilka tego typu produkcji. radzilbym ci raczej stworzyc jakis ciekawy system walki (moze cos jak w final fantasy?) i zeby to bylo blizej "normlanym" mmorpg


Powiem tyle - pograjcie w ogame. Tam bunynki na początku budują sie szybko, potem zbieracie na nie surowce, budujecie fabrykę robotów, żeby bunki się szybciej budowały, budujecie elektrownie. Jak chcecie zacząć grać to zapraszam a u 15 :] A co do licznika, to przy otwieraniu strony należy pobrać odpowiednią godzinkę, a następnie w JS wyświetlać ILE CZASU POZOSTAŁO.


1. Pytanie - bezpieczenstwo.

Dzieki wam za rady, na pewno wykorzystam. Mam jeszcze pytanie -
@Dodek - ad2. Uzytkownik nie bedzie wpisywal tych wartosci w pasku przegladarki, tu chodzi o linki :) probowalem sprawdzic to na zewnetrznym serwerze, to sie wywalilo, bo nie znalazl pliku "[katalog gry]/http://inny.serwer.z.kodem.pl/plik.php.inc.php" wiec chyba takie zabezpieczenie wystarczy. Tak wiec nie bedzie includowania zewnetrznych plikow. Chyba ze cos pominalem :>. Nie chce robic switch bo mi to robi zamieszanie w kodzie, ale jesli juz trzeba to w koncu to zrobie.

a może ktoś się pkusi i mimo wszystko wpisze coś w pasku przeglądarki ??


Jak już napisał dh_maniak hashowanie hasha zwróci ci po prostu inny hash. Za to wpadłem na lepsze rozwiązanie. zamiast hashować md5 zhaszuj md5, potem sha1 i jeszcze raz md5. Nie widziałem słownika, który zawiera takie hashe.


po co tak kombinować z hasłami ??

no to jak się przed tym zabezpieczyć :P ??

Zdaje sie ze chodzilo o to, ze przy takich kombinacjach hash pobrany z bazy danych nic nie pomoze, bo bardzo dlugo by sie musialo rozkodowywac, i "agresor" by musial wiedziec ze to jest w ten sposob kodowane. Mozna sie tez zabezpieczyc tak, ze w php dane mysql (haslo login itp) by byly zakodowane, i przy laczeniu do sql - dynamicznie odkodowywane. Chyba wlasnie tak zrobie.
Czy zna ktos odpowiedz na czwarte pytanie: obnizenie wydajnosci skryptu gdy stosowane sa klasy? Czy owa wydajnosc naprawde spada (ktos z forum cos o tym wspomnial...) jesli tak to czy bardzo spada?
Swoja droga - napisalem juz cala klase do obslugi uzytkownikow ;)


(...)
Czy zna ktos odpowiedz na czwarte pytanie: obnizenie wydajnosci skryptu gdy stosowane sa klasy? Czy owa wydajnosc naprawde spada (ktos z forum cos o tym wspomnial...) jesli tak to czy bardzo spada?
Swoja droga - napisalem juz cala klase do obslugi uzytkownikow ;)

- PDO lub ew. MySQLi do obsługi bazy danych. PDO umożliwi migrację na inne wydajniejsze bazy danych jeżeli zajdzie taka potrzebna.
- Model obiektowy z PHP5, obsługa wyjątków (obsługa błędów)
- Np. Gettext jako sposób tłumaczenia interfejsu

Co do przenosnosci skryptu wymyslilem takie cos, ze w configu bedzie zdefiniowany plik ktory ma sie laczyc z baza danych i na swoj sposob (dla roznych baz danych) wykonywac zapytania, a nastepnie je przedstawiac tak by wynik byl kompatybilny. Dla mnie to prostrze, tyle ze najpierw musze sie nauczyc innych baz danych (same plusy :)) - obecnie jest tylko obsluga mysql.

Model obiektowy - hmm tego (chyba) nie umiem, czy nie wystarczy normalne stosowanie klas? Tak czy siak sie tego naucze, ale czy
a) robic na swoj sprawdzony i dzialajacy sposob
B) przepisac kawal kodu by byl wlasnie taki jak piszesz?

Jeszcze jedno pytanie - jak byscie ocenili wersje bardzo_beta szablonu: http://einz.ovh.org/jiyu/ (mozna sie zalogowac jako Einzeinbleth haslo test123 - ale uwaga, zadne linki nie dzialaja oprocz loguj/wyloguj/strona glowna ;)). Wiem ze na razie jest kilka bledow ze zgodnoscia w3c, ale jak najszybciej chcialem to "ruszyc". Gdy skoncze bedzie to zgodne z html 4.01 trans.

- Czy zna ktos darmowe bazy danych typu freesql.org gdzie mozna sobie zalozyc jakies bardziej "egzotyczne" bazy typu oracle czy mssql? Nie potrzebuje jakiejs mega pojemnosci, nawet 20 kb mi wystarczy na poczatek. Oczywiscie darmowe ...

-System walki jaki wymyslilem - co na niego powiecie?

Przy atakowaniu dowolnej istoty (takze innych graczy) role przeciwnika by przejmowal komputer. Bylby pokazany taki niby rycerzyk z zanaczonymi paroma miejscami gdzie trzeba kliknac by w to miejsce zaatakowac, oczywiscie walka by byla ograniczona do np 10 ruchow, wplyw na wynik by mialy przedmioty / statystyki / rowniez szczescie obu graczy. Wygrany moglby zebrac cos co zostalo po przeciwniku (nie wiem czy isc w strone diablo 2 - gdzie wypadaly bezwartosciowe uszka, jedynie jako dowod, czy raczej tibii, gdzie wypadala czesc ekwipunku). Oczywiscie pokonujac potwory (przykladowo) walka by sie tak samo odbywala. Kazda "Strefa" obrazen przeciwnika (np nogi, glowa, tors) by zadawala rozne obrazenia i by miala odpowiedni % szans na trafienie. Dodam jeszcze ze cala walka sie odbywa turowo - raz ty raz przeciwnik (sterowany przez komputer najlepiej jak sie da)
Tak w skrocie to :) Jak myslicie czy taki system walk by sie sprawdzil? czy jest ciekawy, innowacyjny? Zastanawiam sie nad nim, sam go wymyslilem i mysle ze jest dobry. Problemem moze byc jak ktos kogos zaatakowal, a potem nie skonczyl walki - tylko sie np wylogowal lub po prostu zamknal przegladarke. Co wtedy by sie dzialo nie potrafie tego przewidziec .. sklaniam sie ku temu, zeby atakowany niczego nie zauwazyl (dopoki walka nie jest skonczona) a atakujacy by nie mogl nic zrobic w grze oprocz zakonczenia walki (moze byc jako poddanie sie co by oczywiscie obnizalo reputacje o wiele bardziej niz przegrana - a przegrana by skutkowala pobytem w jakims miejscu przez jakis czas (np pod opieka troskliwej gospodyni Twojego dworku))

Pozdrawiam i dziekuje, wasze rady sa wprost bezcenne :)

Dopisek:

Nie chopdzi o hashowanie hasha tylko hasła podanego przez usera.


Jeśli potraktujesz hash funkcją md5, ta zwróci ci hash hasha :D


-System walki jaki wymyslilem - co na niego powiecie?

Tak w skrocie to :) Jak myslicie czy taki system walk by sie sprawdzil? czy jest ciekawy, innowacyjny? Zastanawiam sie nad nim, sam go wymyslilem i mysle ze jest dobry. Problemem moze byc jak ktos kogos zaatakowal, a potem nie skonczyl walki - tylko sie np wylogowal lub po prostu zamknal przegladarke. Co wtedy by sie dzialo nie potrafie tego przewidziec .. sklaniam sie ku temu, zeby atakowany niczego nie zauwazyl (dopoki walka nie jest skonczona) a atakujacy by nie mogl nic zrobic w grze oprocz zakonczenia walki (moze byc jako poddanie sie co by oczywiscie obnizalo reputacje o wiele bardziej niz przegrana - a przegrana by skutkowala pobytem w jakims miejscu przez jakis czas (np pod opieka troskliwej gospodyni Twojego dworku))

Najlepszym rozwiązaniem byłoby zrobienie gierki we Flashu+PHP+MySQL tak, aby można było rozgrywać jakieś walki.

Oczywiscie flash bylby idealnym system do walk, ale nie umiem i cos sie nauczyc nie moge (nie mam do tego nerwow...)

@Deadeye - myslalem nad tym, jednak bylby maly problem - co jesli nikogo by nie bylo dostepnego? A co jesli ktos by wyszedl do wc, a ktos inny by z nim walke zaczal? Ten by nawet nie wiedzial. Przemyslalem to co napisalem - imho to najlepszy system jaki moge zrobic (oprocz flasha ktory by jednak jedynie dynamiki dodal) a przy tym prosty do wykonania i efektowny. Zawsze moge isc na kompromis - jesli sie atakuje kogos kto jest offline - jest moj system. Jesli ktos jest on-line role przeciwnika przejmuje zywy gracz. Mam jeszcze jeden pomysl - walki tylko po "umowieniu" sie na jakis turniej czy cos takiego - wtedy automagicznie problem by sie rozwiazal, a nacisk byl kladl glownie na rozwiazywanie questow ktore beda sie pojawiac w grze (w tym takze zlecenie na zabicie wyjatkowo uciazliwego dla npc gracza! -> i tu wracamy do mojego systemu, lub kompromisu)
Btw. wzorowalem sie nieco na falloucie, te tury i celowanie w czesci ciala :)

Aha - wymyslilem do gry cos jeszcze: umiejetnosci (np kazda postac z biegiem gry zdobedzie jakis unikalny atak)

Co do hasel to juz nie mam zadnych problemow, zrozumialem wszystko za 1 razem, w ostatnim poscie rozwazalem przechowywanie w skrypcie hasla do mysql (ktore jakby nie bylo - musi gdzies tam byc zapisane)

Ponawiam pytanie: Czy zna ktos serwisy typu freesql.org gdzie mozna sobie zalozyc za darmo baze oracle, mssql i inne bardziej "egzotyczne" ?

Btw - nie wyobrazam sobie tego systemu Deadeye. Przemyslalem to i doszedlem do wniosku ze to niewykonalne - lub bylyby mizerne efekty. Tak wiec zostane przy swoim systemie. Dlaczego? Po prostu synchronizacja graczy - tak by byly zachowane tury. Wiec atakowany dowie sie o tym (i straci jakas czesc zycia/zyska cos w razie wygranej/itp) dopiero gdy walka zostanie zakonczona.
Użytkownik Einzeinbleth edytował ten post 31 styczeń 2006, 16:03

Oczywiscie flash bylby idealnym system do walk, ale nie umiem i cos sie nauczyc nie moge (nie mam do tego nerwow...)


Ponawiam pytanie: Czy zna ktos serwisy typu freesql.org gdzie mozna sobie zalozyc za darmo baze oracle, mssql i inne bardziej "egzotyczne" ?

Btw - nie wyobrazam sobie tego systemu Deadeye. Przemyslalem to i doszedlem do wniosku ze to niewykonalne - lub bylyby mizerne efekty. Tak wiec zostane przy swoim systemie. Dlaczego? Po prostu synchronizacja graczy - tak by byly zachowane tury. Wiec atakowany dowie sie o tym (i straci jakas czesc zycia/zyska cos w razie wygranej/itp) dopiero gdy walka zostanie zakonczona.

Co do baz to racja, to w koncu nie bedzie uniwersalny silnik :oops: wiec mysle ze mysql wystarczy. Co do pvp:
Myslalem nad ograniczeniem czasowym tury ale:
- Co jak user nagle wylaczy java script?
- Co z lagami, naglym wyjsciem z gry etc?
- Wszystko sie sypnie, jestem pewien tego.

Jeszcze jedno pytanie: Co myslicie o tym ze kazdy gracz bedzie mial swoje "domostwo" w krolestwie, oznaczone pewnymi wspolzednymi (jak w ogame albo travian) i moglby taki ktos miec "mile" odwiedziny innych graczy.

Teraz mam inne pytanie, juz sie z tym od wczoraj mecze, otoz w zmienne $str mam pewna liczbe (to jest sila gracza) i teraz przy jej treningu powinno to troche potrwac. I wszystko pieknie, ale jak to zrobic zeby im wiecej sily tym wiecej czasu na to trzeba? Probowalem cos takiego:
$str = 5;  //przyklad $delay = time()+$str*60*60;
zdawalo mi sie ze wyjdzie dobrze - ale nie wychodzi dobrze, bo jest ogromna roznica. W zalozeniu powinno to do aktualnego czasu dodac sile*60*60 (czyli 5*60*60 milisekund = 5 minut - afaik tak powinno byc) - lecz dodaje sie ogromna wartosc, czesto zupelnie "z kosmosu"
Czy wie ktos zatem jak dodac przykladowo wartosc zmiennej $str jako czas w minutach do aktualnego czasu? Nastepnie potrzebuje to wyprowadzic do timestampa by to latwo porownywac. Czy moglby mi ktos pomoc? Zupelnie nie wiem jak to rozwiazac ...


Co do baz to racja, to w koncu nie bedzie uniwersalny silnik :oops: wiec mysle ze mysql wystarczy. Co do pvp:
Myslalem nad ograniczeniem czasowym tury ale:
- Co jak user nagle wylaczy java script?
- Co z lagami, naglym wyjsciem z gry etc?
- Wszystko sie sypnie, jestem pewien tego.

Jeszcze jedno pytanie: Co myslicie o tym ze kazdy gracz bedzie mial swoje "domostwo" w krolestwie, oznaczone pewnymi wspolzednymi (jak w ogame albo travian) i moglby taki ktos miec "mile" odwiedziny innych graczy.

Teraz mam inne pytanie, juz sie z tym od wczoraj mecze, otoz w zmienne $str mam pewna liczbe (to jest sila gracza) i teraz przy jej treningu powinno to troche potrwac. I wszystko pieknie, ale jak to zrobic zeby im wiecej sily tym wiecej czasu na to trzeba? Probowalem cos takiego:
$str = 5;  //przyklad $delay = time()+$str*60*60;
zdawalo mi sie ze wyjdzie dobrze - ale nie wychodzi dobrze, bo jest ogromna roznica. W zalozeniu powinno to do aktualnego czasu dodac sile*60*60  (czyli 5*60*60 milisekund = 5 minut - afaik tak powinno byc) - lecz dodaje sie ogromna wartosc, czesto zupelnie "z kosmosu"
Czy wie ktos zatem jak dodac przykladowo wartosc zmiennej $str jako czas w minutach do aktualnego czasu? Nastepnie potrzebuje to wyprowadzic do timestampa by to latwo porownywac. Czy moglby mi ktos pomoc? Zupelnie nie wiem jak to rozwiazac ...

Ha! Jestes pan genialny ;) ja to samo chcialem zrobic inna droga, ale ta rowniez jest dobra. Dlatego ja zastosuje - jutro.
Btw - zrobilem "silnik" do wyswietlania aktualnego ekwipunku gracza - test - obraz jest generowany dynamicznie, na podstawie tego co mamy w ekwipunku. Nie mialem czasu wymyslac cudnych przedmiotow totez jako helm nosze rekawiczki, a jako pas zbroje :D
Wymyslilem rowniez regulamin, mozna go przeczytac na stronie.
Teraz kolejne pytanie:
Co lepiej zrobic - na obrazku ekwipunku ktory wygenerowalem zrobic "mape" gdzie pewne czesci beda linkami, czy obok dac linki? Drugie rozwiazanie jest prostrze i bardziej oczywiste, ale pierwsze ladniejsze i ciekawsze. Co Wy o tym sadzicie? A moze oba?

Ah, i jeszcze jedno jak zapewne widzicie teraz sa uzywane obrazki przedmiotow itp z diablo 2 - czy jest ktos kto by mi zaprojektowal tego typu obrazki i je stworzyl? Potrzebuje 5 roznych z kazdego typu przedmiotu (rekawice, buty, pas, helm, zbroja, tarcza, miecz, topor, luk, kusza, pazury, pierscien i amulet) a takze odpowiedni obrazek jako tlo dla ekranu ekwipunku.


Co lepiej zrobic - na obrazku ekwipunku ktory wygenerowalem zrobic "mape" gdzie pewne czesci beda linkami, czy obok dac linki? Drugie rozwiazanie jest prostrze i bardziej oczywiste, ale pierwsze ladniejsze i ciekawsze. Co Wy o tym sadzicie? A moze oba?



Co lepiej zrobic - na obrazku ekwipunku ktory wygenerowalem zrobic "mape" gdzie pewne czesci beda linkami, czy obok dac linki? Drugie rozwiazanie jest prostrze i bardziej oczywiste, ale pierwsze ladniejsze i ciekawsze. Co Wy o tym sadzicie? A moze oba?

Witam, mam kolejne sprawy :)
1. Czy moglby ktos zrobic kilka screenow strony glownej w roznych przegladarkach? Jak na razie wiem jak to wyglada w operze 9, ie 6. Potrzebne mi screeny z roznych: starych ie, netscape, mozilla/ff, konqueror, epiphany a takze opera pod linuksa, itd. Musze wiedziec czy sie nie rozjezdza.

2. Jak myslicie, czy sposob przechodzenia miedzy stronami jaki stosuje (index.php?act=costam) jest mniej wydajny niz normalne linki do plikow? Teraz mam o tyle dobrze ze moj index.php ma w sobie 6 linijek :P (6x include) i nie musze sie troszczyc o wyglad poszczegolnych podstron, bo to one sa includowane do strony gdzie wyglad juz jest. Dodam tez, ze jakbym zrobil normalne linki w kazdym bym musial includowac 5 plikow :/

3. Czy orientuje sie ktos co do webcron.org? Nie wiem czy mi wystarczy, czy nie ma awarii itp. Jak byscie ocenili "solidnosc" tej uslugi?

4. Zalozmy ze wybralem "cos" co po x czasu musi powiekszyc jeden wpis w bazie danych o 1 (typ int). Ale nie od razu, tylko za wlasnie x minut. Jak to mozna zrobic? Na razie zrobilem tak, ze powieksza sie od razu, ale nie da sie nic zrobic przez to x minut, pokazuje sie komunikat "sproboj pozniej" cos w tym stylu.
Użytkownik Einzeinbleth edytował ten post 18 luty 2006, 09:37
1http://img227.images...1/image14il.jpg firefox 1024/768 wyglada w miare dobrze ale przesunalbym lewa kolumne w prawo, bo teraz tak plywa na srodku ;)
2. tak jest wygodniej, a wydajnoscia nie mozna sie az tak przejmowac zeby sobie przez nia zycie utrudniac ;)
3. francuski, wiec nawet nie wiem co to jest :P jesli chodzi ci o hosting to polecam promocje ovh.pl, za darmo dobre konto (o ile za kazdym razem bedziesz sie rozlaczal z baza, bo najwiekszy limit tego konta to 3 polaczenia naraz do bazy).
4. po prostu zrob sobie sesyjna zmienna
$za_ile=now() + x_sekund;
i przy kazdym przeladowaniu strony sprawdzaj
if (($za_ile < now()) and !($za_ile==0)) { wartosc++; $za_ile=0; }
jesli masz kilka takich zdarzen dla sesji to mozesz je sobie zapisac w tablicy 2wymiarowej
Użytkownik Deadeye edytował ten post 18 luty 2006, 10:27
Zrobiłem zrzuty ekranu na Linixie. Oto, jak to się przedstawia:
Konqueror:
http://crazypc.info/...n_konqueror.jpg

Mozilla FireFox:
http://crazypc.info/...lin_firefox.jpg

Opera:
http://crazypc.info/...u_lin_opera.jpg

Jak patrzyłem na Windowsa, to chyba jest tak samo.

// Edit:
Wszystkie zrzuty były robione w rozdzielczości 1024x768.
Użytkownik Txthor edytował ten post 19 luty 2006, 18:45
Dzieki :) z checia przyjme wiecej screenow.

Mam kolejne pytanie - sprawa z ktora nie moge sobie poradzic. Otoz mam trzy liczby - powiedzmy x,y,z:
x = 40
y = 35
z = 25

[zawsze ich suma to 100, kazda z nich moze miec 0-100]

Teraz mam liczbe powiedzmy v ktora jest losowana od 0 do 100
v = rand(0, 100);
I otrzymuje w wyniku powiedzmy 47.
Teraz jak sprawdzic ktora liczba [x,y,z] jest najblizsza liczby v? Zupelnie nie moge sobie z tym poradzic, a jest mi to niezbedne. Wszystkie te liczby sa zmienne, wyczytywane z bazy danych wiec zadne "sztywne" rozwiazania nie wchodza w gre. Za wszelka pomoc z gory dziekuje.

Aha i drugie, prostrze pytanie: Korzystam z webcron.org [taki maly cronik] zeby co godzine wykonywac pewne zadanie. Nie moze takie zadanie byc wykonane przez kogokolwiek innego, tylko webcron co godzine moze to wykonywac. Wiec zrobilem takie rozwiazanie, ze sprawdza ip przy wejsciu i tylko jak sie zgadza ze wzorcem to wykonuje swoje zadanie. Dziala doskonale, ale czy to wystarczajace zabezpieczenie? Sprawdzanie ip?

$roznica_x=abs(v-x); $roznica_y=abs(v-y); $roznica_z=abs(v-z);
teraz pozostaje sprawdzic ktora z liczb jest najmniejsza
co do drugiego, nei wiem czy mozna wmowic skryptowi ze ma sie inne ip, a nawet gdyby mozna to ten ktos nie wiedzialby jakie ma udawac. ale mozesz jeszcze zrobic specjalne konto dla tego serwisu, zeby sie logowal jak zwykly user i dopiero wtedy wykonywal to cos.
Użytkownik Deadeye edytował ten post 25 luty 2006, 18:07

[...]

Aha i drugie, prostrze pytanie: Korzystam z webcron.org [taki maly cronik] zeby co godzine wykonywac pewne zadanie. Nie moze takie zadanie byc wykonane przez kogokolwiek innego, tylko webcron co godzine moze to wykonywac. Wiec zrobilem takie rozwiazanie, ze sprawdza ip przy wejsciu i tylko jak sie zgadza ze wzorcem to wykonuje swoje zadanie. Dziala doskonale, ale czy to wystarczajace zabezpieczenie? Sprawdzanie ip?


Z tego, co rozumiem, to adres IP sprawdzany jest od zwykłego użytkownika. Jeżeli ma stałe IP to tak, ale co, jeśli użytkownik ma bardzo popularną Neostradę i zmienne IP. Chyba, że sprawdza Twoje IP, a masz stałe, to wtedy może być OK. Chociaż pomyślałbym jeszcze nad czymś innym, pewniejszym.


Z tego, co rozumiem, to adres IP sprawdzany jest od zwykłego użytkownika. Jeżeli ma stałe IP to tak, ale co, jeśli użytkownik ma bardzo popularną Neostradę i zmienne IP. Chyba, że sprawdza Twoje IP, a masz stałe, to wtedy może być OK. Chociaż pomyślałbym jeszcze nad czymś innym, pewniejszym.

To sprawdza czy ip nalezy do serwisu webcron.org, i dziala doskonale. Chce sie upewnic ze to wystarczajace zabezpieczenie.

@Deadeye niestety takie cos mi nie dziala, bo jesli:
x = 30 y = 60 z = 10 v = 45 $rx=abs(v-x);  // = 15 $ry=abs(v-y); // = |-15| = 15 $rz=abs(v-z); // = 35 Robilem sprawdzanie: if (($rx > $ry) && ($rx > $rz)) { //$rx najwieksze } elseif (($ry > $rx) && ($ry > $rz)) { //$ry najwieksze } elseif (($rz > $rx) && ($rz > $ry)) { //$rz najwieksze } else { //ZAWSZE to mi wskakiwalo :/ }
Teraz zrobilem cos takiego:
$tx = 40; $ty = 20; $tz = 40; $random = rand(0, 100); for ($i=0; $i<=$tx; $i++) { $attack[]=$i; //przepisuj od zera do wartosci $tx //czyli od 0 do 40 } for ($i=$tx; $i<=$ty+$tx; $i++) { $defend[]=$i;   //przepisuj od wartosci tx do $ty + $tx //czyli od 40 do 60 } for ($i=$ty+$tx; $i<=100; $i++) { $heal[]=$i;   //przepisuj od $tx+$ty do 100 //czyli od 60 do 100 } if (in_array($random, $attack)) { //czyli w pierwszej czesci } elseif (in_array($random, $defend)) { //czyli w drugiej czesci } elseif (in_array($random, $heal)) { //czyli w trzeciej czesci } else { //yyy blad? }
Jednak cos w tym kodzie mi sie nie podoba ... nie potrafie tego sprecyzowac "co" dokladnie ale cos jest nie tak ... czy moglby ktos prosze sprawdzic ten kod ?
Od razu powiem ze robie pewien rodzaj skryptu, np bedzie sie wpisywalo ile % na atak, obrone i leczenie, lacznie bedzie 100. Bedzie losowana liczba i ktora wartosc bedzie najblizej - taka akcje wybierze. Kazda wartosc moze byc od 0 do 100, a suma tych trzech wartosci zawsze bedzie rowna 100.

Już miałem napisać, że to dobre zabezpieczenie, gdy nagle mnie olśniło. Wyobraź sobie, że ktoś inny zarejestruje się na webcron.org i doda identyczne zadanie. Twój serwis pozwoli na wykonanie owego zadanie, bo IP bedzie takie samo...

moj kod jest chyba najprostszy, tylko musisz jeszcze rozwazyc sytuacje ze ktoras z liczb jest taka sama jak inna.
$rx=abs(v-x);  // = 15 $ry=abs(v-y); // = |-15| = 15 $rz=abs(v-z); // = 35 if (($rx== $ry) and ($rx == $rz) and ($ry==$rz)) { //wszystkie rowne } elseif (($rx== $ry) or ($rx == $rz)) { //atak - mozesz na sztywno zalozyc, ze jesli prawdopodobienstwo ataku i obrony czy ataku i leczenia bedzie takie samo, to atakuje. i tak to sie bedzie rzadko zdarzac :P ew. mozesz losowac jeszcze raz. i tak bedzie szybciej niz zapelniac 100 wartosci w tablicy;) } elseif ($ry==$rz) { //obrona - a jesli i leczenie i obrona, to wybierz obrone. albo najlepiej - jesli wypadnie ta sama roznica, to niech postac robi naraz leczenie i obrone, albo leczenie i atak itd :) cos jak critical hit, zdarzajacy sie rzadko fuks;) } elseif (($rz > $rx) && ($rz > $ry)) { //$rz najwieksze } elseif ($rx > $ry) { //najwieksze $rx } else { najwieksze $ry }
Użytkownik Deadeye edytował ten post 26 luty 2006, 12:02
Witam mam kolejne pytanie-problem.
Otóż do gry chcę zrobić mapę - cos w stylu traviana czy myfantasy. O ile z samą generacją nie będę mieć żadnych problemów, o tyle nie wiem jak to przechowywać.
Mapa ma składać się z kwadratowych pól, w bazie danych każde pole ma mieć takie kolumny jak obrazek, koszt ruchu itp. Teraz nie wiem, czy jest sens takiego generowania, ze kazde pole by mialo kolumny - polnoc, polnoc-zachod, zachód, południe-zachód itd., gdzie by były id do innych wpisów. Takie coś oczywiście by działało, ale zastanawiam się czy to ma sens, czy istnieje może jakieś prostrze rozwiązanie. Dodam jeszcze że mapa nie może mieć ograniczeń wielkości czy ilości pól. Dodawanie nowych pól w takiej sytuacji jaką przedstawiłem byłoby bardzo męczące, za każdym razem bym musiał podawać dokładną wartość wszystkich sąsiadujących pól, i te także zmieniać by wszystko pasowało. Tak więc proszę o pomoc, a raczej wskazanie, czy ktoś zna jakieś lepsze metody na generowanie tego typu map.

nie prosciej po prostu zachowac parametry x i y kazdego pola? i pozniej jak chcesz przejesc na wschod to x+1 po prostu :) i tylko zrobic wlasciwosc nie mozna isc na polnoc i wrzucic tak na polach najbardziej na polnoc itd.
Użytkownik Deadeye edytował ten post 15 marzec 2006, 21:08
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.