Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL]Pomoc przy skrypcie do gry z poziomami i doswiadczeniem
Forum PHP.pl > Forum > Przedszkole
Toskan
Witam
Mam silnik gry juz troche przerobiony(zawsze sie uczylem na gotowcach i tu jest podobnie)
http://pokemon-beta.cba.pl/index.php
Dosc duzo w nim poprawilem jednak nie mam pojecia jak zrobic zeby ta prowizorka doswiadczenia i poziomow wkoncu zadzialala(sam ja dodalem 'exp' 'expMax' 'poziom' w bazie w tabelce pokemon_pokemony_gracze)
Napisałem kawałek skryptu i dalem go do pliku ustawien ktory zawsze sie wczytuje(polaczenie z baza kodowanie itp)
Kod
<?php
ob_start();
session_start();


    require('var/config.php');
    $polacz = mysql_connect($host, $user, $pass) or die('błąd połaczenia z hostem');
    mysql_select_db($nazwa,$polacz) or die('błąd połaczenia z bazą');
    mysql_query("SET NAMES 'utf8'");

        function tekst($tekst){     
            $search = array('@<script[^>]*?>.*?</script>@si', '@<[\/\!]*?[^<>]*?>@si', '@<style[^>]*?>.*?</style>@siU', '@<![\s\S]*?--[ \t\n\r]*>@');
            $text = preg_replace($search, '', $tekst);
            $arr = array('"',"'","#","//","--");
            $tekst = str_replace($arr, '', $tekst);
            return $tekst = trim(mysql_real_escape_string(nl2br(htmlspecialchars(trim($tekst)))));
        }


        if(!isset($_SESSION['gracz'])) $_SESSION['gracz'] = 0;
        $_SESSION['gracz'] = (int)$_SESSION['gracz'];
        $uzytkownik =  mysql_fetch_array(mysql_query("select * from pokemon_pokemony_gracze where gracz_id = ".$_SESSION['gracz']));

        if(!empty($uzytkownik['exp']) && ($uzytkownik['exp'] >= $uzytkownik['expMax'])){
            mysql_query("update pokemon_pokemony_gracze set poziom = poziom + 1, exp = exp - expMax, expMax = expMax + 10 where gracz = ".$uzytkownik['gracz']." limit 1");
            header('location: postac.php');
        }

//prowizorka cron
$system =  mysql_fetch_array(mysql_query("select * from system limit 1"));
if($system['reset'] + 10 <= time()){
    mysql_query("update graczs set akcje = akcje_max");
    mysql_query("update system set reset = reset + 10");
}

?>

fabrycznie kod tych ustawien byla to baza itp ale przenioslem to do config.php
to jest to co nie działa nie wiem czemu
Kod
    if(!empty($uzytkownik['exp']) && ($uzytkownik['exp'] >= $uzytkownik['expMax'])){
            mysql_query("update pokemon_pokemony_gracze set poziom = poziom + 1, exp = exp - expMax, expMax = expMax + 10 where gracz = ".$uzytkownik['gracz']." limit 1");
            header('location: postac.php');
        }

tak wiec prosze o wasze wypowiedzi:)
w tym moze byc duzo bledow jezeli cos jest zbedne lub czegos brakuje w skrypcie tez proze o wypowiedz
Kshyhoo
Ciapki, ciapki, ciapki... Używanie w zapytaniu cudzysłowów wewnątrz cudzysłowów?
CuteOne
  1. if(!empty($uzytkownik['exp']) && ($uzytkownik['exp'] >= $uzytkownik['expMax'])) {
  2.  
  3. mysql_query("update pokemon_pokemony_gracze set poziom = poziom + 1, exp = exp - expMax, expMax = expMax + 10 where gracz = '{$uzytkownik['gracz']}' limit 1") or die(mysql_error());
  4. //header('location: postac.php');
  5. }


Podmień na to co wyżej i wrzuć ewentualny kod błędu.

ps. nie wiem czy $uzytkownik['gracze'] to liczba czy nick dlatego jest w apostrofie
Toskan
Cytat(CuteOne @ 14.09.2012, 23:06:02 ) *
  1. if(!empty($uzytkownik['exp']) && ($uzytkownik['exp'] >= $uzytkownik['expMax'])) {
  2.  
  3. mysql_query("update pokemon_pokemony_gracze set poziom = poziom + 1, exp = exp - expMax, expMax = expMax + 10 where gracz = '{$uzytkownik['gracz']}' limit 1") or die(mysql_error());
  4. //header('location: postac.php');
  5. }


Podmień na to co wyżej i wrzuć ewentualny kod błędu.

ps. nie wiem czy $uzytkownik['gracze'] to liczba czy nick dlatego jest w apostrofie



$uzytkownik['gracz'] to liczba ale to tak nie moze byc
bo w tabelce mam 'gracz_id' i 'pokemon_id'
to powinno być cos takiego ale... dalej nie działa to u gory mi cos nie pasi
juz nie wiem co tam ma byc

  1. if(!empty($pokemony['exp']) && ($pokemony['exp'] >= $pokemony['expMax'])) {
  2. mysql_query("update pokemon_pokemony_gracze set poziom = poziom + 1, exp = exp - expMax, expMax = expMax + 10 where gracz_id = {$uzytkownik['gracz']} and pokemon_id = {$uzytkownik['aktywny_pokemon']} limit 1") or die(mysql_error());
  3. }

rozwiazanie tego pewnie jest proste ale nie dla mnie jak pisalem ucze sie dopiero

kawalek tabelki z mysql bo sie pogubilem
  1. `pokemon_pokemony_gracze` (
  2. `gracz_id` int(11) NOT NULL,
  3. `pokemon_id` int(11) NOT NULL,
  4. `exp` int(11) NOT NULL,
  5. `expMax` int(11) NOT NULL DEFAULT '10',
  6. `poziom` int(11) NOT NULL DEFAULT '1',
  7. KEY `gracz_id` (`gracz_id`,`pokemon_id`)
  8.  
  9. `pokemon_gracze` (
  10. `gracz` int(11) NOT NULL AUTO_INCREMENT,
  11. `login` varchar(24) NOT NULL,
  12. `aktywny_pokemon` int(11) NOT NULL DEFAULT '0',
  13. PRIMARY KEY (`gracz`),

Ulysess
hmm a nie lepiej expmax wyeliminować i zastąpić np tablica w php:
  1. $tablica_exp = array(0,10,20,30,40,50);
  2.  
  3. if($aktualny_exp >= $table_exp[$level)
  4. {
  5. echo 'lvl up';
  6. }

questionmark.gif
scanner
Temat zamykam do czasu otrzymania od autora PW z propozycja sensownego i regulaminowego tematu, zgodnie z http://forum.php.pl/regulamin.html#IV.2.b

Zdejmuję blokadę.
Toskan
Cytat(Ulysess @ 15.09.2012, 01:37:19 ) *
hmm a nie lepiej expmax wyeliminować i zastąpić np tablica w php:
  1. $tablica_exp = array(0,10,20,30,40,50);
  2.  
  3. if($aktualny_exp >= $table_exp[$level)
  4. {
  5. echo 'lvl up';
  6. }

questionmark.gif


Mogł bys mi bardziej opisac te tablice?
Ulysess
w tablicy przechowywał byś potrzebne doświadczenie na dany poziom
przykład
gracz ma 5 lvl i 55 doświadczenia na 6 poziom jest wymagane 60 doświadczenia
  1. $tablica = array(10,20,30,40,50,60,70,80,90,100);
  2.  
  3. if($twoje_doswiadczenie >= $tablica[$twoj_lvl])
  4. {
  5. // tu nastepuje akcja po lvl up
  6. }

uważam że bez sensu jest trzymanie takich danych skoro można petrzymywać to zwykłej tablicy , nie mówiąc już o zmniejszeniu wielkości bazy
Kshyhoo
Cytat(Ulysess @ 16.09.2012, 12:17:42 ) *
uważam że bez sensu jest trzymanie takich danych skoro można petrzymywać to zwykłej tablicy , nie mówiąc już o zmniejszeniu wielkości bazy

No chyba, że ktoś chce mieć na to wpływ - np. inny serwer, inne ustawienia.
Ulysess
zgadza się , równie dobrze dla róznych typów postaci można mieć inne wymagania ale i w takim wypadku można przetrzymywać wartości w tablicach , dla róznych serwerów też można przecież w plikach bądz nawet w osobnej tabeli w bazie opartych na 2 polach level oraz doświadczenie tylko że tutaj trzeba było by za każdym razem pobierać wartość z bazy (dodatkowe zapytanie). Specialista nie jestem ale osobiście uważam że trzymanie tego w tablicy to dobre rozwiązanie
Toskan
pomysl z tablica bardzo mi sie podoba poniewaz dzieki temu moge dac rozny exp na rozne lvle

wieczorem sprobuje dodac taka tablice

rozumiem ze miedzy tymi dwoma {} na koncu mam umiescic:
  1. mysql_query("update pokemon_pokemony_gracze set poziom = poziom + 1 where gracz_id = {$uzytkownik['gracz']} and pokemon_id = {$uzytkownik['aktywny_pokemon']} limit 1") or die(mysql_error());


@edit

spedzilem okolo 4 godzin i nadal nie dziala

cos nie tak musi byc z sesja innego wyjscia nie widze, jutro odswieze temat jak poedytuje inne pliki odpowiedzialne za sesje

Rozwiazaniem bylo napisanie zmiennej ktora sciaga wartosci bezposrednio z bazy
temat do zamnkniecia
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.