Sistem experienta.

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

quadmachine
Senior Member
Mesaje: 805
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Sistem experienta.

Mesajde quadmachine » Dum Aug 23, 2020 9:27 pm

Bun, am incercat sa scriu un sistem de experienta si nu pot sa imi dau seama cum calculez nivelul actual si diferenta de experienta daca a facut level up.Ce am incercat pana acum:

actualizare user // functioneaza in parametrii normali

Cod: Selectaţi tot

function update_user_xp($user_id, $xp_ammount){

   global $db;

   $params = array('user_id' => $user_id);

   $users = $db->rawQuery("SELECT * FROM users_xp WHERE user_id = ?", $params);

   $data = array(
      'user_xp_amount' => $xp_ammount + $users[0]['user_xp_amount'],
      'user_id' => $user_id
   );

   $db->where ('user_id', $data['user_id']);

      if ($db->update ('users_xp', $data)){

         $xpReceived = 'You have received '.$xp_ammount.' points of experience! Have a total of '.$data['user_xp_amount'].' points of experience.';

      } else {

         $xpReceived = $db->getLastError();
      }

   return $xpReceived;
}


luare xp din db de la utilizator pe baza de id

Cod: Selectaţi tot

function get_user_xp ($user_id){
   global $db;

   $params = array('user_id' => $user_id);

   $user = $db->rawQueryOne ('SELECT * FROM users_xp WHERE user_id=?', $params);

   $xp = $user['user_xp_amount'];

   return $xp;

}


//Aici codul problema si ce am incercat

Cod: Selectaţi tot

function xp_need ($user_id) {

   global $db;

   $userXP = get_user_xp($user_id);

   $xpBarNeed = $db->rawQuery("SELECT `level`, `expneeded` FROM `experience_level`");


   $output = array();

      foreach($xpBarNeed as $key => $value){

         for($i = 0; $i < count($value['expneeded']); $i++){

            if(isset($value['expneeded'])){

               var_dump($key[$i]);

            }

         }
      }

   return $output;

}


$xpuserNeed = xp_need(4);

var_dump($xpuserNeed);


Ceva sugestii??


Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

quadmachine
Senior Member
Mesaje: 805
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Re: Sistem experienta.

Mesajde quadmachine » Dum Aug 23, 2020 11:56 pm

Ok, eram putin obosit si am mai parcurs o data codul.

Cod: Selectaţi tot

function xp_need ($user_id) {

   global $db;

   $userXP = get_user_xp($user_id);

   $xpBarNeed = $db->rawQuery("SELECT `level`, `expneeded` FROM `experience_level`");

   foreach ($xpBarNeed as $key => $value) {

      $output[] = $value;

   }


   return $output;

}



Ar fii ok, numai ca imi afiseaza din ambele conditii (IF-uri)

Cod: Selectaţi tot

$xpn = xp_need(4);

$userXP = get_user_xp(4);

for($i = 0; $i < count($xpn); $i++){

         if($xpn[$i]['expneeded'] == $userXP)
         {

            print 'You are level ' . $xpn[$i]['level'].'<br>';

            print 'Next level is '. $xpn[$i]['level'] += 1;

         } else {

            if ($userXP > $xpn[$i]['expneeded'])
         {

                  print 'Next level is '. $userXP - $xpn[$i]['expneeded'];

         }
      }

}


Cam asa imi afiseaza.
https://prnt.sc/u4lrc9

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

quadmachine
Senior Member
Mesaje: 805
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Re: Sistem experienta.

Mesajde quadmachine » Sâm Sep 05, 2020 6:31 pm

Solutie.

Cod: Selectaţi tot

function displayLevelExperience($sessionID){


   $xpn = xp_need();

   $userXP = get_user_xp($sessionID);

   $level = 0;
   $expNeeded = 0;
   $currentExp = 0;

   for ($i = count($xpn) - 1;$i >= 0;$i--)
   {
       if ($userXP >= $xpn[$i]['expneeded'])
       {

          $expMax = $xpn[$i]['expneeded'];

           $level = $xpn[$i]['level'];

           if(isset($xpn[$i + 1]['expneeded'])){

              $nextExp = $xpn[$i + 1]['expneeded'];

           } else {

              $nextExp = $xpn[$i]['expneeded'];
           }

           break;

       }
   }

   //max level

   global $db;

   $mxl = $db->rawQuery("SELECT * FROM `experience_level` ORDER BY expid DESC LIMIT 1");

   foreach ($mxl as $key => $value) {
      
      $maxExpLevel[] = $value['expneeded'];

   }

   if($expMax == $maxExpLevel) {

      $percentage = 100;

   } else {

   $expNeeded = $nextExp - $userXP;

   $percentage = round((($userXP - $expNeeded )/$nextExp) * 100);

   }

   $data = array(
      'level'       => $level,
      'nextlvl'      => ($level + 1),
      'expnl'       => $expNeeded,
      'cexp'          => $userXP,
      'pc'         => $percentage
   );

   return $data;
}

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 62 vizitatori