Vallheru: Vallheru - Pomocnik administratora

Mariusz Siwko
05.09.2015

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ł...

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie