• 01-01-2016, 14:42:08
    #1
    Botman, Codemaster
    Merhaba arkadaşlar,




    Yukarıdaki resimde gördüğünüz gibi bir php tabanlı oyun üzerinde çalışıyoruz. Oyunda amaç para kazanıp zengin olmak ve daha güçlü olmak, tarayıcıda çalış butonuna basarak sürenin geçmesini bekleyerek belli sürelerde belli işlerde çalışıp para kazanılabiliyor. Yalnız oyunda şöyle bir sıkıntı var. Örneğin 1 saatlik işte çalışılacak, çalış butonuna basıldıktan sonra Cheat engine denen program ile tarayıcı hızlandırıldığında süre çok çabuk geçiyor ve yaklaşık 30 dakikada alınacak parayı oyuncu 1 - 2 dk içerisinde alabiliyor. Bu konuda ne yapabiliriz. Resmini gösterdiğim bölümün php dosyası aşağıdaki gibidir ;

    <?php
    include "core.php";
    head();
    
    $lang = new Language("languages/");
    $lang->setLang(get_user_language($username));
    
    @$tab = $_GET['tab'];
    ?>
                    <div class="row well">
    				<center><h2><i class="fa fa-briefcase"></i> <?= $lang->data["jobs"]; ?></h2><br /></center>
    		        <div class="col-md-12">
    				<center>
    <?php
    $userid = get_userid($_SESSION['username']);
    if (@$_POST['gowork']) {
        $worktime = security($_POST['worktime']);
        $money    = security($_POST['money']);
        $gold     = security($_POST['gold']);
        $jobid    = security($_POST['jobid']);
        $timeleft = time() + $worktime;
        $insert   = mysql_query("INSERT work (userid, jobid, money, gold, timeleft) VALUES ('$userid', '$jobid', '$money', '$gold', '$timeleft')");
        echo '<meta http-equiv="refresh" content="0;url=jobs">';
    }
    if (@$_POST['getprice']) {
        $sel   = mysql_query("SELECT * FROM work WHERE userid='$userid'");
        $r     = mysql_fetch_array($sel);
        $money = $r['money'];
        $gold  = $r['gold'];
        $upd   = mysql_query("UPDATE users SET money=money+$money, gold=gold+$gold WHERE id='$userid'");
        $del   = mysql_query("DELETE FROM work WHERE userid='$userid'");
        echo okbox('' . $lang->data["workday-over"] . '. ' . $lang->data["you-earn"] . ' <b><i class="fa fa-money"></i> $' . $money . ' ' . $lang->data["moneysm"] . '</b> ' . $lang->data["and"] . ' <b><i class="fa fa-inbox"></i> ' . $gold . ' ' . $lang->data["goldsm"] . '</b> .');
        echo '<meta http-equiv="refresh" content="3;url=jobs">';
    }
    ?>
    <?php
    $username = $_SESSION['username'];
    $userid   = get_userid($username);
    $sqlj     = mysql_query("SELECT * FROM jobs");
    while ($rowj = mysql_fetch_array($sqlj)) {
        echo '
    <div class="well2 col-md-3">
    			    <h4>' . $rowj['name'] . '</h4>
    			    <br/>
    			    <img src="' . $rowj['image'] . '" width="150px">
    			    <br/>
    			    ' . $lang->data["time"] . ': <b>' . $rowj['time'] . ' ' . $rowj['timetype'] . '</b><br/>
    			    ' . $lang->data["money"] . ': <b>$' . $rowj['money'] . '</b><br/>
    				' . $lang->data["gold"] . ': <b>' . $rowj['gold'] . '</b><br/><br/>
    ';
        $sql = mysql_query("SELECT * FROM work WHERE userid='$userid' and jobid='$rowj[id]'");
        if (mysql_num_rows($sql) > 0) {
            $work    = mysql_fetch_array($sql);
            $voteend = $work['timeleft'] - time();
            echo "<script src=\"js/clock.js\" type=\"text/javascript\"></script>
    <div id=\"bxx\"></div>
    <script src=\"js/clock.js\" type=\"text/javascript\"></script>
    <div id=\"bxx\"></div><script language=\"javascript\">pp='$voteend'; pk='1'; pl='$username'; ps=''; t(); </script><br />";
        } else {
            if ($rowj['timetype'] == "saat") {
                $workseconds = $rowj['time'] * 3600;
            } else {
                if ($rowj['timetype'] == "dakika") {
                    $workseconds = $rowj['time'] * 60;
                } else {
                    if ($rowj['timetype'] == "saniye") {
                        $workseconds = $rowj['time'];
                    }
                }
            }
            $sql = mysql_query("SELECT * FROM work WHERE userid='$userid'");
            if (mysql_num_rows($sql) == 0) {
                echo '
    <form action="" method="POST">
    <input type="hidden" name="jobid" value="' . $rowj['id'] . '">
    <input type="hidden" name="worktime" value="' . $workseconds . '">
    <input type="hidden" name="money" value="' . $rowj['money'] . '">
    <input type="hidden" name="gold" value="' . $rowj['gold'] . '">
    <input type="submit" class="btn btn-primary" name="gowork" value="' . $lang->data["start-work"] . '">
    </form>
    ';
            } else {
                echo '<font color="#F27D00"><b>' . $lang->data["must-finish-work"] . '</b></font>';
            }
        }
        echo '
    	</div>
    ';
    }
    ?>
                    </center>
    				</div>
    	            </div>
    <?php
    footer();
    ?>
    Yardımınızı bekliyorum.
  • 01-01-2016, 15:12:22
    #2
    Üyeliği durduruldu
    Date fonksiyonu ile yapılabilir. Başlangıç saatini date ile alırsın üstüne ne kadar çalışılacaksa mesela 1 saat ise başlangıç saatine 1 saat eklersiniz onuda bitiş saati yaparsınız.Bir sorgu ile de bitiş saatini normal saat ile karşılaştırırsınız eğer eşit ise işi bitirir.
  • 01-01-2016, 15:18:49
    #3
    Merhaba,
    Sever insanlar böyle oyunları hayırlı olsun şimdiden kolay gelsin.

    Satır satır kodları okumak pek mümkün değil ve kodların da bi kısmını göndermişsiniz zaten. ps(); ne yapıyor onu da bilmeden biraz atma cevap olacak ama gördüğüm kadarıyla kişinin çalışma zamanını $worktime = security($_POST['worktime']); şununla alıyor ve direk mevcut zamana + olarak veritabanına ekliyorsunuz. Bu rahatlıkla spoof edilebilecek bir durum ki bu işlerle uğraşacak amatörler de ilk önce bu noktaları zorlarlar.

    Hele bir de
    <input type="hidden" name="money" value="' . $rowj['money'] . '">
    <input type="hidden" name="gold" value="' . $rowj['gold'] . '">
    şunları da korumuyorsanız bu input'lar arka planda değiştirilip 1000lerce altın sahibi olunabilir.


    Kişinin işe başlama saatini tarayıcı taraflı tutar aradaki farkı tarayıcı taraflı hesaplayarak gönderirseniz bunu korumanız biraz zor. Son iş kayıt tarihini bakıp aradaki farkı alıp ondan az mı fazla mı bakılabilir ama yine de bu bir açık. Çünkü son iş tarihinden şuana kadar geçen zaman gösterilir, oyun yine maksimum faydayla kandırılır.

    Velhasıl işe başlama zamanını sunucuda tutmalısınız. Ayrıca kodlarınızda idxx id'li 2 nesne var. Bir sayfada 1 id 1 tane olmalıdır. Ayrıca eğer yeni başladıysanız mysql PDO bakmanızı öneririm. Ayrıca kapsamlı bir oyun olacaksa bir de eliniz değmişken ileride rahat geliştirme yapabilmeniz için OOP'a bakmanızı öneririm.

    Yolunuz uzun
    Kolay gelsin, iyi senler.


    HelixTm adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar,




    Yukarıdaki resimde gördüğünüz gibi bir php tabanlı oyun üzerinde çalışıyoruz. Oyunda amaç para kazanıp zengin olmak ve daha güçlü olmak, tarayıcıda çalış butonuna basarak sürenin geçmesini bekleyerek belli sürelerde belli işlerde çalışıp para kazanılabiliyor. Yalnız oyunda şöyle bir sıkıntı var. Örneğin 1 saatlik işte çalışılacak, çalış butonuna basıldıktan sonra Cheat engine denen program ile tarayıcı hızlandırıldığında süre çok çabuk geçiyor ve yaklaşık 30 dakikada alınacak parayı oyuncu 1 - 2 dk içerisinde alabiliyor. Bu konuda ne yapabiliriz. Resmini gösterdiğim bölümün php dosyası aşağıdaki gibidir ;

    <?php
    include "core.php";
    head();
    
    $lang = new Language("languages/");
    $lang->setLang(get_user_language($username));
    
    @$tab = $_GET['tab'];
    ?>
                    <div class="row well">
    				<center><h2><i class="fa fa-briefcase"></i> <?= $lang->data["jobs"]; ?></h2><br /></center>
    		        <div class="col-md-12">
    				<center>
    <?php
    $userid = get_userid($_SESSION['username']);
    if (@$_POST['gowork']) {
        $worktime = security($_POST['worktime']);
        $money    = security($_POST['money']);
        $gold     = security($_POST['gold']);
        $jobid    = security($_POST['jobid']);
        $timeleft = time() + $worktime;
        $insert   = mysql_query("INSERT work (userid, jobid, money, gold, timeleft) VALUES ('$userid', '$jobid', '$money', '$gold', '$timeleft')");
        echo '<meta http-equiv="refresh" content="0;url=jobs">';
    }
    if (@$_POST['getprice']) {
        $sel   = mysql_query("SELECT * FROM work WHERE userid='$userid'");
        $r     = mysql_fetch_array($sel);
        $money = $r['money'];
        $gold  = $r['gold'];
        $upd   = mysql_query("UPDATE users SET money=money+$money, gold=gold+$gold WHERE id='$userid'");
        $del   = mysql_query("DELETE FROM work WHERE userid='$userid'");
        echo okbox('' . $lang->data["workday-over"] . '. ' . $lang->data["you-earn"] . ' <b><i class="fa fa-money"></i> $' . $money . ' ' . $lang->data["moneysm"] . '</b> ' . $lang->data["and"] . ' <b><i class="fa fa-inbox"></i> ' . $gold . ' ' . $lang->data["goldsm"] . '</b> .');
        echo '<meta http-equiv="refresh" content="3;url=jobs">';
    }
    ?>
    <?php
    $username = $_SESSION['username'];
    $userid   = get_userid($username);
    $sqlj     = mysql_query("SELECT * FROM jobs");
    while ($rowj = mysql_fetch_array($sqlj)) {
        echo '
    <div class="well2 col-md-3">
    			    <h4>' . $rowj['name'] . '</h4>
    			    <br/>
    			    <img src="' . $rowj['image'] . '" width="150px">
    			    <br/>
    			    ' . $lang->data["time"] . ': <b>' . $rowj['time'] . ' ' . $rowj['timetype'] . '</b><br/>
    			    ' . $lang->data["money"] . ': <b>$' . $rowj['money'] . '</b><br/>
    				' . $lang->data["gold"] . ': <b>' . $rowj['gold'] . '</b><br/><br/>
    ';
        $sql = mysql_query("SELECT * FROM work WHERE userid='$userid' and jobid='$rowj[id]'");
        if (mysql_num_rows($sql) > 0) {
            $work    = mysql_fetch_array($sql);
            $voteend = $work['timeleft'] - time();
            echo "<script src=\"js/clock.js\" type=\"text/javascript\"></script>
    <div id=\"bxx\"></div>
    <script src=\"js/clock.js\" type=\"text/javascript\"></script>
    <div id=\"bxx\"></div><script language=\"javascript\">pp='$voteend'; pk='1'; pl='$username'; ps=''; t(); </script><br />";
        } else {
            if ($rowj['timetype'] == "saat") {
                $workseconds = $rowj['time'] * 3600;
            } else {
                if ($rowj['timetype'] == "dakika") {
                    $workseconds = $rowj['time'] * 60;
                } else {
                    if ($rowj['timetype'] == "saniye") {
                        $workseconds = $rowj['time'];
                    }
                }
            }
            $sql = mysql_query("SELECT * FROM work WHERE userid='$userid'");
            if (mysql_num_rows($sql) == 0) {
                echo '
    <form action="" method="POST">
    <input type="hidden" name="jobid" value="' . $rowj['id'] . '">
    <input type="hidden" name="worktime" value="' . $workseconds . '">
    <input type="hidden" name="money" value="' . $rowj['money'] . '">
    <input type="hidden" name="gold" value="' . $rowj['gold'] . '">
    <input type="submit" class="btn btn-primary" name="gowork" value="' . $lang->data["start-work"] . '">
    </form>
    ';
            } else {
                echo '<font color="#F27D00"><b>' . $lang->data["must-finish-work"] . '</b></font>';
            }
        }
        echo '
    	</div>
    ';
    }
    ?>
                    </center>
    				</div>
    	            </div>
    <?php
    footer();
    ?>
    Yardımınızı bekliyorum.
  • 02-01-2016, 09:56:05
    #4
    öncelikle merhaba,

    kodlama kolaylığı ve sonradan yapılacak olan geliştirme / bakım çalışmaları için framework kullanmanızı öneririm.
    framework oop için de avantaj olacaktır.

    bunun dışında form'ları yalnızca input için kullanmanızı öneririm.
    hidden form kullanmak oyunlarda çok mantıklı değil. (security token vs hariç)

    işlerin başlangıç ya da bitiş saatlerini (ya da ikisi de) veritabanından alırsanız, bu saatten önce hesaba geçmeyecek gibi bir kodlama yaparsanız cheat engine işe yaramayacaktır.
  • 02-01-2016, 10:03:09
    #5
    OyunEditoru adlı üyeden alıntı: mesajı görüntüle
    Date fonksiyonu ile yapılabilir. Başlangıç saatini date ile alırsın üstüne ne kadar çalışılacaksa mesela 1 saat ise başlangıç saatine 1 saat eklersiniz onuda bitiş saati yaparsınız.Bir sorgu ile de bitiş saatini normal saat ile karşılaştırırsınız eğer eşit ise işi bitirir.
    Yapılması gereken bu.
    Taracıyı üzerinden yürütülen işlemlere müdahaleler olabilir.
  • 02-01-2016, 11:25:30
    #6
    İşin başlama saatini alıp şuanki saate göre işlem yapmanız gerekiyor.
    2015-1-1 11:23:43 => başlangıçsa
    2015-1-1 12:23:43 => bitiş
    olmalı
  • 02-01-2016, 11:54:57
    #7
    HelixTm adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar,




    Yukarıdaki resimde gördüğünüz gibi bir php tabanlı oyun üzerinde çalışıyoruz. Oyunda amaç para kazanıp zengin olmak ve daha güçlü olmak, tarayıcıda çalış butonuna basarak sürenin geçmesini bekleyerek belli sürelerde belli işlerde çalışıp para kazanılabiliyor. Yalnız oyunda şöyle bir sıkıntı var. Örneğin 1 saatlik işte çalışılacak, çalış butonuna basıldıktan sonra Cheat engine denen program ile tarayıcı hızlandırıldığında süre çok çabuk geçiyor ve yaklaşık 30 dakikada alınacak parayı oyuncu 1 - 2 dk içerisinde alabiliyor. Bu konuda ne yapabiliriz. Resmini gösterdiğim bölümün php dosyası aşağıdaki gibidir ;

    <?php
    include "core.php";
    head();
    
    $lang = new Language("languages/");
    $lang->setLang(get_user_language($username));
    
    @$tab = $_GET['tab'];
    ?>
                    <div class="row well">
    <center><h2><i class="fa fa-briefcase"></i> <?= $lang->data["jobs"]; ?></h2><br /></center>
            <div class="col-md-12">
    <center>
    <?php
    $userid = get_userid($_SESSION['username']);
    if (@$_POST['gowork']) {
        $worktime = security($_POST['worktime']);
        $money    = security($_POST['money']);
        $gold     = security($_POST['gold']);
        $jobid    = security($_POST['jobid']);
        $timeleft = time() + $worktime;
        $insert   = mysql_query("INSERT work (userid, jobid, money, gold, timeleft) VALUES ('$userid', '$jobid', '$money', '$gold', '$timeleft')");
        echo '<meta http-equiv="refresh" content="0;url=jobs">';
    }
    if (@$_POST['getprice']) {
        $sel   = mysql_query("SELECT * FROM work WHERE userid='$userid'");
        $r     = mysql_fetch_array($sel);
        $money = $r['money'];
        $gold  = $r['gold'];
        $upd   = mysql_query("UPDATE users SET money=money+$money, gold=gold+$gold WHERE id='$userid'");
        $del   = mysql_query("DELETE FROM work WHERE userid='$userid'");
        echo okbox('' . $lang->data["workday-over"] . '. ' . $lang->data["you-earn"] . ' <b><i class="fa fa-money"></i> $' . $money . ' ' . $lang->data["moneysm"] . '</b> ' . $lang->data["and"] . ' <b><i class="fa fa-inbox"></i> ' . $gold . ' ' . $lang->data["goldsm"] . '</b> .');
        echo '<meta http-equiv="refresh" content="3;url=jobs">';
    }
    ?>
    <?php
    $username = $_SESSION['username'];
    $userid   = get_userid($username);
    $sqlj     = mysql_query("SELECT * FROM jobs");
    while ($rowj = mysql_fetch_array($sqlj)) {
        echo '
    <div class="well2 col-md-3">
        <h4>' . $rowj['name'] . '</h4>
        <br/>
        <img src="' . $rowj['image'] . '" width="150px">
        <br/>
        ' . $lang->data["time"] . ': <b>' . $rowj['time'] . ' ' . $rowj['timetype'] . '</b><br/>
        ' . $lang->data["money"] . ': <b>$' . $rowj['money'] . '</b><br/>
    ' . $lang->data["gold"] . ': <b>' . $rowj['gold'] . '</b><br/><br/>
    ';
        $sql = mysql_query("SELECT * FROM work WHERE userid='$userid' and jobid='$rowj[id]'");
        if (mysql_num_rows($sql) > 0) {
            $work    = mysql_fetch_array($sql);
            $voteend = $work['timeleft'] - time();
            echo "<script src=\"js/clock.js\" type=\"text/javascript\"></script>
    <div id=\"bxx\"></div>
    <script src=\"js/clock.js\" type=\"text/javascript\"></script>
    <div id=\"bxx\"></div><script language=\"javascript\">pp='$voteend'; pk='1'; pl='$username'; ps=''; t(); </script><br />";
        } else {
            if ($rowj['timetype'] == "saat") {
                $workseconds = $rowj['time'] * 3600;
            } else {
                if ($rowj['timetype'] == "dakika") {
                    $workseconds = $rowj['time'] * 60;
                } else {
                    if ($rowj['timetype'] == "saniye") {
                        $workseconds = $rowj['time'];
                    }
                }
            }
            $sql = mysql_query("SELECT * FROM work WHERE userid='$userid'");
            if (mysql_num_rows($sql) == 0) {
                echo '
    <form action="" method="POST">
    <input type="hidden" name="jobid" value="' . $rowj['id'] . '">
    <input type="hidden" name="worktime" value="' . $workseconds . '">
    <input type="hidden" name="money" value="' . $rowj['money'] . '">
    <input type="hidden" name="gold" value="' . $rowj['gold'] . '">
    <input type="submit" class="btn btn-primary" name="gowork" value="' . $lang->data["start-work"] . '">
    </form>
    ';
            } else {
                echo '<font color="#F27D00"><b>' . $lang->data["must-finish-work"] . '</b></font>';
            }
        }
        echo '
    </div>
    ';
    }
    ?>
                    </center>
    </div>
                </div>
    <?php
    footer();
    ?>
    Yardımınızı bekliyorum.
    Kardeş başlangıç ve bitiş saatini neden kullanıcıdan alıyorsun ki? Sunucunun saatine gore işlem yap sunucunun saati 4 ise 4:30 alana kadar işlemi onaylatma.Sonrasında kullanıcı isterse pc 2 yıl sonrasına alsın

    GT-I9500 cihazımdan Tapatalk kullanılarak gönderildi
  • 02-01-2016, 12:27:32
    #8
    Ek olarak hidden post göndermeyin. Ajax kullanın