Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 14

Wątek: Sklep, ekwipunek

  1. #1
    Zbanowany
    Dołączył
    Mar 2009
    Posty
    1,335

    Domyślnie Sklep, ekwipunek

    Witam, w grze zrobiłem już rejestracje, logowanie, tzw. dokumenty, system walk, szpital i wiele innych ; ))
    Lecz przyszedł czas, na co się obawiałem - sklep, ekwipunek
    Zapożyłem kod Dixa z przeróbki jego RACE bo ona ma prawie to o co mi chodzi ; )) Czyli kupowanie, zakładanie, zdejmowanie.
    Ale mam jeden problem, gdzie umieścić akcję dodawania ataku ?
    O to kod sklep.php:

    Kod php:
    <?php
    session_start
    ();
    include(
    'g.php');

      
    ?>

     
    <div class="postheader"><h1>Sklep</h1></div>
                    <div class="postcontent">
                    
                    <?php
                    
                    
    if(!($_GET['kup'])){
    $a mysql_query("SELECT * FROM sklep");

    echo
    "<table><tr><td>Nazwa:</td><td>Atak:</td><td>Cena:</td></tr>";
    while(
    $b=mysql_fetch_array($a)){

    echo
    "<tr><td>$b[nazwa]</td><td>$b[atak]</td><td>$b[cena]</td><td><a href=sklep.php?kup=$b[id]>Kup</a></td></tr>";
    }
    echo
    "</table>";
    }


    if(
    $_GET['kup']){
    $c mysql_fetch_array(mysql_query("SELECT * FROM sklep WHERE id='$_GET[kup]'"));
    $d mysql_fetch_array(mysql_query("SELECT * FROM konta WHERE login='$login'"));

    $cc mysql_fetch_array(mysql_query("SELECT * FROM ekwipunek WHERE login='$login'"));

    mysql_query("INSERT INTO ekwipunek SET login='$login', atak='$c[atak]', nazwa='$c[nazwa]', id_sklep='$c[id]'");
    mysql_query("UPDATE konta SET kasa=kasa-'$c[cena]' WHERE login='$login'");
    echo
    "Przedmiot kupiony!";
    }


    include(
    'd.php');

    ?>
    A teraz zaloz.php

    Kod php:
    <?php
    session_start
    ();
    include(
    'g.php');

      
    ?>

     
    <div class="postheader"><h1>Ekwipunek</h1></div>
                    <div class="postcontent">
                    
                    <?php
                    
                    
    echo"<table><tr><td><b>Nazwa</b></td><td><b>Akcja:</b></td></tr>";
    $a mysql_query("SELECT * FROM ekwipunek WHERE login='$login'"); 
    while(
    $b=mysql_fetch_array($a)){
    if(
    $b['stan']==0){$c ="<a href=zaloz.php?zaloz=$b[id]>Zaloz</a>";}else{$c="<a href=zaloz.php?zdejmij=$b[id]>Zdejmij</a>";}
    echo
    "
    <tr><td>
    $b[nazwa]</td><td>$c</td></tr>
    "
    ;
    }
    echo
    "</table>";



    $d mysql_fetch_array(mysql_query("SELECT * FROM konta WHERE login='$login'"));
    if(
    $_GET['zaloz']){

    mysql_query("UPDATE ekwipunek SET stan='1' WHERE id='$_GET[zaloz]' and login='$login'");
    echo
    " Przedmiot założony! ";

    }
    if(
    $_GET['zdejmij']){
    mysql_query("UPDATE ekwipunek SET stan='0' WHERE id='$_GET[zdejmij]' and login='$login'");
    echo
    " Przedmiot zdjęty! ";
    }






    include(
    'd.php');
    ?>
    Pięknie śmiga kupowanie, zakładanie i zdejmowanie.
    Acha... i jak zrobić by nie było można nosić broni tego samego typu, tzn. nie było można nosić dwóch broni, dwóch pancerzy itp. Proszę o pomoc.

    Oczywiście również miałem swój pomysł, lecz uznałem że jest on kompletnie bezsensu ;/
    Ponieważ już przy tylko dwóch broniach zajął mi 100 linijek, ciekawe co by było przy ok. 100 broniach :P
    Tak dla ciekawskich o to on:

    Kod php:
    <?php
      session_start
    ();
    include(
    'g.php');

      
    ?>

     
    <div class="postheader"><h1>Walka</h1></div>
                    <div class="postcontent">
     
     <?php
     
     $sklep
    mysql_fetch_array(mysql_query("SELECT  szybkosc, atak, obrona, exp, kasa, zycie, bron, bron2 FROM konta WHERE login='$login' "));
     
     
    $atak $sklep['atak'];
     
     if(isSet(
    $_POST['1']))
     {
     if(
    $sklep['bron2'] == 1)
     {
     echo 
    'Nie możesz nosić tej broni!';
     include(
    'd.php');
     exit;
     }
     
    $atak_broni 10;
     
    $atak_koncowy $atak $atak_broni ;
     echo 
    '<p><font color="green"> Broń została kupiona i założona </font></p>';
     
    mysql_query('UPDATE konta SET bron=1, atak="'.$atak_koncowy.'" WHERE login="'.$login.'"');
     
     }
     
     
     if(isSet(
    $_POST['1z']))
     {
     
    $atak_broni 10;
     
    $atak_koncowy $atak $atak_broni ;
     echo 
    '<p><font color="green">Przedmiot zdjęty!</font></p>';
      
    mysql_query('UPDATE konta SET bron=0, atak="'.$atak_koncowy.'" WHERE login="'.$login.'"');
     }
     
     if(isSet(
    $_POST['2']))
     {
     if(
    $sklep['bron'] == 1)
     {
     echo 
    'Nie możesz nosić tej broni!';
     include(
    'd.php');
     exit;
     }
     
    $atak_broni 20;
     
    $atak_koncowy $atak $atak_broni ;
     echo 
    '<p><font color="green"> Broń została kupiona i założona </font></p>';
     
    mysql_query('UPDATE konta SET bron2=1, atak="'.$atak_koncowy.'" WHERE login="'.$login.'"');
     
     }
     
     
     if(isSet(
    $_POST['2z']))
     {
     
    $atak_broni 20;
     
    $atak_koncowy $atak $atak_broni ;
     echo 
    '<p><font color="green">Przedmiot zdjęty!</font></p>';
      
    mysql_query('UPDATE konta SET bron2=0, atak="'.$atak_koncowy.'" WHERE login="'.$login.'"');
     }
     
     
     
    ?>
     <form action="sklep1.php" method="post">

            <center><p>Broń pierwsza</p>
            
            <?php
            
    if($sklep['bron'] == 0)
            {
            echo 
    '<button style="border: 0px; background-color: #ffffff;" type="submit" name="1">Kup</button>';
            }
            else
            {
            echo 
    '<button style="border: 0px; background-color: #ffffff;" type="submit" name="1z">Zdejmnij</button>';
            }
            echo
    '<center><p>Broń pierwsza</p><br>';
            if(
    $sklep['bron2'] == 0)
            {
            echo 
    '<button style="border: 0px; background-color: #ffffff;" type="submit" name="2">Kup</button>';
            }
            else
            {
            echo 
    '<button style="border: 0px; background-color: #ffffff;" type="submit" name="2z">Zdejmnij</button>';
            }
            
            
    ?>
    </form>
    Kod ten polegał na, jednoczeście kupuje i zakładam, potem zdejmuje itd. Większośc opierała by się na pliku, tzn. mam już podane ile broń kosztuje i ile ma ataku itp...

  2. #2
    Zbanowany
    Dołączył
    Sep 2009
    Posty
    892

    Domyślnie

    Hmm.. Przyłączam się do pytania wiesz, że stanęliśmy w tym samym punkcie? Jak ktoś pomoże to ja też sobie zapożyczę.

  3. #3
    Dix
    Dix jest nieaktywny
    Zarejestrowany
    Dołączył
    May 2009
    Posty
    684

    Domyślnie

    Kod php:
    mysql_query("UPDATE ekwipunek SET stan='1' WHERE id='$_GET[zaloz]' and login='$login'");
    echo
    " Przedmiot założony! ";

    Masz odpowiednie pola w tabeli z graczami... Dajesz:
    Kod php:
    mysql_query("UPDATE users SET cos='cos', bron='$_GET[zaloz]' WHERE login='$login'");
    // zapisywanie przedmiotu powiedzmy broni do tabeli users(z graczami)
    mysql_query("UPDATE ekwipunek SET stan='1' WHERE id='$_GET[zaloz]' and login='$login'");
    // nadawanie przedmiotu stanu 1 czyli że jest aktualnie używany

    Dodajesz dwa pola pancerz i broń int(1) . Później dajesz ifa
    Kod php:
    $zapytanie mysql_fetch_array(mysql_query("SELECT * FROM users WHERE login='$login'"));
    if(
    $zapytanie['bron']=<0){
    //kod z zakladaniem przedmiotu... W tym wypadku broni.
    }else{
    // error


  4. #4
    Zbanowany
    Dołączył
    Mar 2009
    Posty
    1,335

    Domyślnie

    Czyli nasz kod ma wyglądać tak: (chodzi mi tu tylko o akcję dodawania ataku i odejmowania.)

    Kod php:
    <?php
    session_start
    ();
    include(
    'g.php');

      
    ?>

     
    <div class="postheader"><h1>Ekwipunek</h1></div>
                    <div class="postcontent">
                    
                    <?php
                    
                    
    echo"<table><tr><td><b>Nazwa</b></td><td><b>Akcja:</b></td></tr>";
    $a mysql_query("SELECT * FROM ekwipunek WHERE login='$login'"); 
    $atak_broni $a['atak'];
    $users mysql_query("SELECT * FROM konta WHERE login='$login'");
    $atak $users['ata'];
    while(
    $b=mysql_fetch_array($a)){
    if(
    $b['stan']==0){$c ="<a href=zaloz.php?zaloz=$b[id]>Zaloz</a>";}else{$c="<a href=zaloz.php?zdejmij=$b[id]>Zdejmij</a>";}
    echo
    "
    <tr><td>
    $b[nazwa]</td><td>$c</td></tr>
    "
    ;
    }
    echo
    "</table>";



    $d mysql_fetch_array(mysql_query("SELECT * FROM konta WHERE login='$login'"));
    if(
    $_GET['zaloz']){

    $koncowa_wartosc_ataku $atak_broni $atak ;


    mysql_query("UPDATE ekwipunek SET stan='1', atak='".$koncowa_wartosc_ataku."' WHERE id='$_GET[zaloz]' and login='$login'");
    echo
    " Przedmiot założony! ";

    }
    if(
    $_GET['zdejmij']){

    $koncowa_wartosc_ataku $atak_broni $atak ;

    mysql_query("UPDATE ekwipunek SET stan='0', atak='".$koncowa_wartosc_ataku."' WHERE id='$_GET[zdejmij]' and login='$login'");
    echo
    " Przedmiot zdjęty! ";
    }






    include(
    'd.php');
    ?>

  5. #5
    Zarejestrowany
    Dołączył
    Oct 2009
    Posty
    103

    Domyślnie

    Kod php:
    $a mysql_query("SELECT * FROM ekwipunek WHERE login='$login'"); 
    $atak_broni $a['atak']; 
    Ta konstrukcja jest nieprawidłowa. Zauważ, że zapytanie zwraca dane kilku przedmiotów. Widzę, że później lecisz po nich pętlą while, więc chyba wiesz o co chodzi.
    Kod php:
    $koncowa_wartosc_ataku $atak_broni +- $atak 
    Nie ma sensu liczyć tego za każdym razem i wstawiać do bazy, w tabeli ekwipunku trzymaj tylko atak samego przedmiotu, a liczył będziesz sobie tam, gdzie Ci będzie potrzebne wyświetlenie sumy ataku (przy walce, profilu). Bo co się stanie jeśli atak postaci się zwiększy, a przedmiot będzie cały czas założony?

    Przydałoby się też zrobić typy przedmiotów i/lub sloty żeby gracz nie mógł założyć dwóch (lub więcej) broni jednocześnie.

  6. #6
    Zbanowany
    Dołączył
    Mar 2009
    Posty
    1,335

    Domyślnie

    Nie ma sensu liczyć tego za każdym razem i wstawiać do bazy, w tabeli ekwipunku trzymaj tylko atak samego przedmiotu, a liczył będziesz sobie tam, gdzie Ci będzie potrzebne wyświetlenie sumy ataku (przy walce, profilu). Bo co się stanie jeśli atak postaci się zwiększy, a przedmiot będzie cały czas założony?

    Hmm... czyli proponujesz że liczyć mam dopiero przy walkach ta? Hmm... ale tu nasuwa się problem, jak policzyć tylko założony itemek, mógłbyś podać mały kodzik z przykładem ?

  7. #7
    Zarejestrowany Awatar richcio
    Dołączył
    Sep 2007
    Posty
    1,022

    Domyślnie

    Kod php:
    $a mysql_query("SELECT * FROM ekwipunek WHERE login='$login' AND zalozony=1");
    $atak_calkowity $a['atak'] + $atak_gracza
    Mniej więcej powinno wyglądać to właśnie tak. (wybacz jeśli zrobiłem jakieś głupie błędy :P )

    I atak całkowity używasz tylko przy walkach etc, a sama wartość broni to $['atak'].

  8. #8
    Programista
    Dołączył
    Dec 2008
    Posty
    776

    Domyślnie

    Bez sensu jest pobierania w kółko danych z tabeli konta... jest to tabela używana w każdym pliku (po za stroną główną), dlatego przed każdym skryptem robimy kod użytkowy dla większości plików (np. klasę gracza)

    Masz tu przykładową klasę usera:

    Kod php:
    <?php
    $stat 
    mysql_fetch_object(mysql_query("SELECT id FROM users WHERE mail='".$_SESSION['mail']."' AND pass='".$_SESSION['pass']."'"));
    if (
    $stat !== false)
    {
        echo 
    '<br /><br /><center>Taki użytkownik nie istnieje!</center>';
        exit;
    }
    $pid $stat -> id;
    class 
    User
    {
        private 
    $pid;
        var 
    $get;
        public static function 
    getBasic($pid)
        {
            
    $query sprintf('SELECT * FROM users WHERE id='.$pid);
            
    $result mysql_query($query) or die(mysql_error());
            
    $this -> get mysql_fetch_array($result);
            
    mysql_free_result($result);
        }
    }
    $user = new User;
    $user -> getBasic($pid);
    ?>
    i zamiast tworzyć w kółko zapytania w stylu:
    "SELECT * FROM konta WHERE login='$login'"

    dajemy po prostu: $user -> get['nazwa_pola']



    A co do tego zabezpieczenia przed zakładaniem jednego przedmiotu:

    W akcji gdzie zakładasz przedmiot daj:
    Kod php:
    $pobierz mysql_fetch_object("SELECT stan FROM ekwipunek WHERE login='$login' AND stan=1")
    if (
    $pobierz !== false)
    {
         
    zakładanie przedmiotu
    }
    else echo 
    'Już masz założony przedmiot!'
    Ostatnio edytowane przez Khulmar ; 30-11-2009 o 18:40
    Kod php:
    echo 'A kij wam w oko!'
    Każdą decyzję analizuje na podstawie tysięcy IF'ów i ELSE'ów. ... na zasadzie (if) obiecałem (then) dzwonię - nonsopedia, informatyk

  9. #9
    Zbanowany
    Dołączył
    Mar 2009
    Posty
    1,335

    Domyślnie

    Hmm mój kod wygląda teraz tak:

    Kod php:
    <?php
     session_start
    ();
    include(
    'g.php');

      
    ?>

     
    <div class="postheader"><h1>Ekwipunek</h1></div>
                    <div class="postcontent">
                    
                    <?php
                    

                    
    echo"<table><tr><td><b>Nazwa</b></td><td><b>Akcja:</b></td></tr>";
    $a mysql_query("SELECT * FROM ekwipunek WHERE login='$login' AND zalozony=1");
    $users mysql_query("SELECT * FROM konta WHERE login='$login'");

    $atak $users['atak'];
    while(
    $b=mysql_fetch_array($a)){
    if(
    $b['stan']==0){$c ="<a href=zaloz.php?zaloz=$b[id]>Zaloz</a>";}else{$c="<a href=zaloz.php?zdejmij=$b[id]>Zdejmij</a>";}
    echo
    "
    <tr><td>
    $b[nazwa]</td><td>$c</td></tr>
    "
    ;
    }
    echo
    "</table>";



    $d mysql_fetch_array(mysql_query("SELECT * FROM konta WHERE login='$login'"));
    if(
    $_GET['zaloz']){


    $atak_calkowity $a['atak'] + $atak;  

    mysql_query("UPDATE ekwipunek SET stan='1', atak='".$atak_calkowity."' WHERE id='$_GET[zaloz]' and login='$login'");
    echo
    " Przedmiot założony! ";

    }
    if(
    $_GET['zdejmij']){

    $koncowa_wartosc_ataku $atak_broni $atak ;

    mysql_query("UPDATE ekwipunek SET stan='0', atak='".$koncowa_wartosc_ataku."' WHERE id='$_GET[zdejmij]' and login='$login'");
    echo
    " Przedmiot zdjęty! ";
    }






    include(
    'd.php');
    ?>
    I wywala błąd:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/comosspa/domains/cosmosspace.hsms.pl/public_html/gra/zaloz.php on line 20

  10. #10
    Zarejestrowany Awatar richcio
    Dołączył
    Sep 2007
    Posty
    1,022

    Domyślnie

    Bosik, powiem tyle - masz bajzel w kodzie

    Posłuchaj Khumlara - stwórz sobie klase gracza

Strona 1 z 2 12 OstatniOstatni

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. Sklep i ekwipunek. Błędy w kodzie i konstrukcja tabeli.
    Przez Croos w dziale Problemy przy tworzeniu własnej gry
    Odpowiedzi: 4
    Ostatni post / autor: 27-08-2010, 06:11
  2. Sklep
    Przez Grajek w dziale Problemy przy tworzeniu własnej gry
    Odpowiedzi: 10
    Ostatni post / autor: 20-03-2010, 21:05
  3. sklep sms
    Przez tiger04 w dziale Pytania dotyczące silnika Xnova
    Odpowiedzi: 34
    Ostatni post / autor: 28-01-2010, 20:59
  4. Sklep
    Przez Patrichi w dziale Grand Theft Auto RPG
    Odpowiedzi: 2
    Ostatni post / autor: 22-11-2009, 21:06
  5. Sklep
    Przez Yahooo w dziale prp
    Odpowiedzi: 3
    Ostatni post / autor: 29-10-2007, 22:57

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •