Witam w elektornicznym pomocniku dla administratorów gier na engine Vallheru. Mam nadzieję że ten artykuł pomoże Ci poznać wszystkie tajniki administracji gry takiej jak Vallheru. Jest to artykuł dla początkujących, jednak i ci bardziej zaawansowani użytkownicy znajdą coś dla siebie (np. "Przyśpieszanie gry").
» Pierwsze błędy
* Sesja zakończona
Lycos ma problemy z szyfrowanymi sesjami (a najprawdopodobniej nie ma w ogóle takiej opcji). Aby naprawić ten błąd musisz zamienić zawartość pliku includes/sessions.php na:
session_start();
?>
* Nie ma takiego gracza!
Kolejny serwer ze zrąbanymi sesjami - zmodyfikuj ewentualnie zapytanie w head.php i w jeszcze jednym miejscu (sam powinieneś to znaleźć).
Znajdź:
$stat = $db -> Execute("SELECT id, email, ip FROM players WHERE email='".$_SESSION['email']."' AND pass='".$pass."'");
Zamień na:
$stat = $db -> Execute("SELECT id, email, ip FROM players WHERE email='".$_SESSION['email']."'");
* Konfiguracja mailera
Konfiguracja dla mailera (przykład pokazuje o2.pl)
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "poczta.o2.pl"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "twój login np nikaragua"; // SMTP username
$mail->Password = "twoje hasło np dentysta"; // SMTP password
Trzeba to dokleić na końcu kodu w mailerconfig.php.
* Instalacja
Ostatnio zaobserwowałem że od wersji 0.9 Vallheru Engine często nie instaluje się baza. Sam doświadczyłem tego problemu, jednak tylko w wersji 0.9, a niektórzy zaczynają się skarżyć na 1.0... By rozwiązać problem należy ręcznie wrzucić bazę przez phpmyadmina. Jednak, jaki jest powód takiego działania? Zadałem to pytanie thindilowi na liście dyskusyjnej. Oto odpowiedź:
Zrzut bazy danych robiłem pod MySQL 4.1 - tam w odróżnieniu od wcześniejszych wersji MySQL są dodane nowe opcje do tabel (dokładnie domyślne kodowanie znaków utf-8). Próbowałem ręcznie modyfikować zrzut bazy danych, widać zapomniałem w jednym miejscu to usunąć. Właśnie coś takiego może powodować ten problem. Najlepiej na obecnym etapie poczekać na wydanie wersji 1.0 rc1 (prawdopodobnie pojawi się na początku grudnia).
» Uniwersalny sposób zmiany nazwy miasta
Zaczynamy od head.php:
Znajdujemy linijkę 491 i zaraz pod nią wstawiamy:
if($player -> location == 'Altara')
{
$strCity = 'Twoje miasto';
}
else
{
$strCity = CITY;
}
Potem w funkcji $smarty -> assign zmieniamy .CITY. na .$strCity.
Przyszedł czas na view.php:
Około linijki 114 (najlepiej przed) wklejamy kod:
if($view -> location == 'Altara')
{
$strLocation = 'Twoje miasto';
}
else
{
$strLocation = $view -> location;
}
A potem w funkcji $smarty -> assign zmieniamy w Location $view -> location na $strLocation.
Teraz czas na wysilenie Twoich szarych komórek. Musisz sam zmodyfikować plik stats.php tak by wyświetlał Twoje miasto, nie Altarę. Do roboty!
» Tworzenie przygód
Tworzymy nowy plik .php w folderze quests. Musi on się nazywać quest(numer przygody).php, czyli np. quest10.php. Zacznijmy jego edycję. Wklejamy kod:
$smarty -> assign(array("Start" => '',
"End" => '',
"Text" => '',
"Box" => '',
"Link" => '',
"Answer" => ''));
Jeżeli chcemy wpisujemy odpowiedni komentarz. Następnie dołączamy klasę quest'ów do pliku i odpowieni plik language, czyli używamy np. funkcji require:
require_once('class/quest_class.php');
require_once("languages/".$player -> lang."/quest10.php");
Teraz musimy sprawdzić czy gracz na pewno uczestniczy w przygodzie:
if (isset($_GET['step']) && $_GET['step'] == 'quest' && empty($objAction -> fields['action']))
{
$db -> Execute("UPDATE players SET miejsce='Altara' WHERE id=".$player -> id);
error(NO_QUEST);
}
Teraz pokrótce opiszę jak zaczynamy przygodę:
if ($objAction -> fields['action'] == 'start')
{
$objQuest -> Show('next'); #pokazujemy tekst
$smarty -> assign(array("Link" => "
(< a href=""grid.php?step=quest">".A_FIGHT2."< /a>)"," #link do walki "start"> ''));
$db -> Execute("UPDATE" players set fight="12" where id=".$player -> id); #ustawienie walki
}
if ($objAction -> fields['action'] == 'next')
{
$_POST['razy'] = 4; #ilość tur
$objQuest -> Battle('grid.php?step=quest'); #walka
$objFight = $db -> Execute("SELECT" fight from players where id=".$player -> id);
if ($objFight -> fields['fight'] == 0)
{
$objHealth = $db -> Execute("SELECT" hp from players where id=".$player -> id);
if ($objHealth -> fields['hp'] <= 0)
{
$objQuest -> Show('lostfight');
$objQuest -> Finish(10);
$smarty -> assign(array("Box" => ''));
}
elseif ($_POST['action'] != 'escape')
{
$objQuest -> Show('winfight'); #pokazywanie 'wygrałeś walkę'
$objQuest -> Box(1);
$db -> Execute("INSERT" into equipment (owner, name, power, type, cost, status, minlev, wt)
VALUES(".$player -> id.", '".I_ARROWHEAD."', 41, 'G', 1, 'U', 10, 10)");
}
elseif ($_POST['action'] == 'escape')
{
$objQuest -> Show('escape');
$objQuest -> Finish(10);
$smarty -> assign(array("Box" => ''));
$db -> Execute("UPDATE players SET hp=0 WHERE id=".$player -> id);
}
$objHealth -> Close();
}
$objFight -> Close();
}
To przykład przygody, która zaczyna się walką. Niestety nie mogę krok po kroku wklejać wam kawałków kodu. Każda przygoda ma inny scenariusz i przebieg.
Teraz opiszę najpotrzebniejsze funkcje klasy Quests:
$objQuest -> Finish($ilosc); #Zakańcza quest - $ilosc to ilość pd za przygodę
$objQuest -> Battle($gdzie); #Zaczyna walkę z potworem
$objQuest -> Box($numer); #Wyświetla pole typu radio
$objQuest -> Show($text); #Wyświetla tekst
$objQuest -> Resign(); #Rezygnacja z przygody
$objQuest -> Answer($pytanie, $zła_odp, $powtorzenie); #Odpowiedź na pytanie
$objQuest -> Gainexp($ile); #Dodawanie exp
Wiem, że to trochę trudne ale po kilku próbach, z pewnością ci się uda!
Powodzenia!
» Co zrobić jeżeli nie ma Crona-Jobs'a na serwerze?
Nie na każdym serwerze jest udostępniony Cron. Dlatego trzeba sobie radzić bez niego. Cron-Jobs jest potrzebny, by wykonywać resety w grze. Jak można go zastąpić? Istnieje kilka rozwiązań. Najprostszym jest wykorzystanie darmowego Crona, jakim jest WebCron (patrz "Pomocne linki"). Można w nim skonfigurować bardzo prosto zadania Crona. Drugim, ale trudniejszym sposobem, jest wykorzystanie Webmonitoringu firmy camel.pl ("Pomocne linki"). Wystarczy podać adres skryptu z resetami i mamy je co godzinę. Istnieje jeszcze trzeci sposób. Można stworzyć skrypt wykonywania resetów przy logowaniu. Polecam go tylko doświadczonym programistom.
» ADOdb Lite - Lite'owa gierka!
Czy wersja 0.7 silnika bezproblemowo "pociągnie" na ADOdb Lite?
Odpowiedź brzmi tak!
1) Ściągamy Adodb_lite z http://adodblite.sourceforge.net/
2) Trzeba wprowadzić kilka modyfikacji:
PLIK => MODYFIKACJA
index.php => wykomentować $db -> LogSQL();
includes/head.php => wykomentować $db -> LogSQL();
includes/foot.php => wykomentować $db -> LogSQL(false);
includes/config.php => wykomentować $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
3) Usuwamy z serwera katalog adodb
4) Zmieniamy nazwę katalogu adodb_lite na adodb
5) Usuwamy zbędne sterowniki, zostawiając w adodb/adodbSQL_drivers/ tylko /mysql
6) Cieszymy się mniejszym obciążeniem serwera i dodatkowym 1 megabajtem miejsca na serwerze!
ADOdb Lite działa bezproblemowo w wersji 0.7. Jednak ja napotkałem się z błędami w 1.0 RC1. W ADOdb Lite nie działa funkcja $db -> date(); Dlatego należy usunąć tą funkcję z wieści, plotek, forum, forum klanu oraz sądu. W foot.php trzeba usunąć wszystkie informacje o wykonywaniu SQL, ponieważ ADOdb Lite też tego nie obsługuje. Ogólnie to troszkę roboty, ale opłaca się gra naprawdę przyśpiesza.
» Przyśpieszenie gry
Wiele osób narzeka na to że Vallheru Engine powoduje zbyt wielkie obciążenie serwera i w rezultacie spowolnienie gry. Jak próbować przyśpieszyć grę? Jest na to kilka sposobów.
- Oczywistym krokiem, polecanym przez wielu użytkowników Vallheru jest wyłączenie bugtracka. Wystarczy wykomentowanie kilku lini w head.php... Wtedy błędy przestaną zapychać bazę. STFW
- Jest to już zadanie bardziej skomplikowane. Można przerobić zwykłe Smarty i ADODB z Vallheru na OPT i ADODB Lite. Według niektórych polepsza to sprawę. Według mnie również. RTFM
- thindil pobawił się trochę z bazą danych i oto co wyszło w wersji 1.0 RC1 silnika - poprostu thin zindeksował i zaktualizował wszystkie tabele bazy danych.
- Sprawa bardziej skomplikowana. Należy zmienić niektóre zapytania do bazy, tak by nie pobierały wszystkich danych, a tylko te potrzebne. Pomaga.
- Chodzi o to by nie używanie zbyt dużej ilości klas. PHP w wersji 4 bardzo słabo rozwija możliwości klas i tylko PHP 5 naprawia ten błąd. Jednak na niektórych serwerach ciągle jest starsza wersja, więc można się spodziewać spowolnienia strony.
- Wyłączyć logowanie zapytań (head.php: usunąć $db -> LogSQL();, foot.php: usunąć $db -> Execute("TRUNCATE TABLE adodb_logsql");)
- Jeżeli masz dużo transferu możesz wyłączyć GZIP'a.
Mam nadzieję że pokazałem wam dostatecznie jak spróbować przyśpieszyć grę.
» Pomocne linki
Oto lista ewentualnych pomocnych linków razem z opisem:
- http://www.webcron.org/
darmowy webcron
- http://www.cityservers.net/serwery_dedykowane_starter_cennik.html
jeśli ktoś ma 3000 złotych - świetne serwery
- http://imageshack.us
image hosting - dobre jeśli kończy nam się transfer
- http://neopets.com/
w przypadku braku natchnienia można zżynać proste pomysły
- http://gildwars.pl/
tu troszkę lepsze (choć można zostać wyklętym przez Thorana)
- http://pl2.php.net
strona o php, dużo modów do vallheru!!! (do samodzielnego montażu)
- http://strefa.pl
stabilne miejsce pod grę
Jest to spis napisany przez Kocurkiewicza i udostępniony tu za jego zgodą.
» Zakończenie
W tym poradniku opierałem się w większości na własnych doświadczeniach, jednak było kilka osób, które pomogły mi w rozwiązywaniu problemu. Dziękuję im za to że byli na stronie (Ender, Mori, MajareQ, Kocurek) i dalej są (thoran, lynks), by pomagać (lub doprowadzać do białej gorączki) userom na forum. Pamiętam, jak sam zaczynałem: wtedy ich jeszcze na stronie nie było, i thindil musiał się trudzić nad odpowiadaniem nam. To były czasy... Pierwszy temat na forum nazywał się: "Sesja zakończona v0.4"... Oczywiście był mój ;)
Jeżeli na forum nie uzyskałeś odpowiedzi dotyczącej twojego problemu, zgłoś go na liście dyskusyjnej Vallheru. Tamczasami jeszcze ktoś zagląda.
W trakcie pisania tej dokumentacji często przeszukiwałem archiwa strony Vallheru, w poszukiwaniu najczęstszych problemów. Więc polecam, zanim zadasz jakieś pytanie, przeszukaj archiwum za pomocą opcji "szukaj" na forum viawww
» Podziękowania
Chciałbym podziękować Kocurkiewiczowi za jego pomoc i krytykę, zaraz po opublikowaniu artykułu. Macie brać z niego przykład, jakbym coś spieprzył...