Шанс

Discussion in 'PHP' started by Allen21, 25 Feb 2012.

  1. Allen21

    Allen21 New Member

    Joined:
    25 Nov 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    PHP:
    if (!$res)
            {
                if (
    $battle->module=='zver')
                {
                
    $tmp rtrim($battle->side2,';');
                
    $db->query("SELECT * FROM zver WHERE id = $tmp");
                
    $r $db->fetch_array();
                
    $arr explode(';',$r['vipad']);
                
    $razn abs($r['level']-$user->level);
                
    $tmp2 ceil($sk/(100+($razn*100))*100);
                if (
    rand(1,10000)<$tmp2*4)
                {
                    
    $count count($arr);
                    
    $db->query("SELECT * FROM items WHERE id = ".$arr[rand(0,($count-1))]."");
                    
    $r $db->fetch_array();
                    
    $amount ceil($r['iznos']*(rand(1,($sk+1))/($sk+1)));
                    if (
    rand(1,100)==1$amount $r['iznos'];
                    
    $db->query("insert into bag (owner,id,pid,iznos,srab,present,dressed) values('".$_SESSION["id"]."','".$r["id"]."','".(time()+$i)."','".$amount."','".$r["iznos"]."','n','n')");    
                    
    $res "Найдено: <b>$r[name]</b>";
                }
                }
            }
            if (!
    $res)
            
    $res "<b>Ничего не найдено.</b>";                
            break;
        
        
    }

    echo 
    $res;

    exit;
    Часть скрипта, который выполняет дроп, хочется уточнить по поводу шанса, if (rand(1,10000)<$tmp2*4), я как понял, если выпало это число в рандомном диапазоне, дальше выполняется действие, а именно запись в БД вида:$db->query("insert into bag (owner,id,pid,iznos,srab,present,dressed) values('".$_SESSION["id"]."','".$r["id"]."','".(time()+$i)."','".$amount."','".$r["iznos"]."','n','n')"); так?
    и как можно сделать более-менее фиксированый рэндом или "шанс"?
     
    #1 Allen21, 25 Feb 2012
    Last edited by a moderator: 25 Feb 2012
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Allen21 генерируется "рандомное" число в фиксированном диапазоне. Если полученное число меньше некоторого вычисляемого 4*$tmp2 - то персонаж получит какой-то итем.

    Что такое "фиксированный рэндом"? Например если 4*$tmp2 равно 5000, то шанс получить итем равен 50%.
     
    _________________________
    1 person likes this.
  3. Kusto

    Kusto Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    я думаю он рулетку хочет обмануть)) тогда or поможет))
     
  4. Allen21

    Allen21 New Member

    Joined:
    25 Nov 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    спасибо за ответ)
    еще вопросик, этот диапазон можно сократить if (rand(1,10000) например поставить, if (rand(1,100)
    или только сама функция рэндома генерирует и не смотрит на этот диапазон?
     
  5. Allen21

    Allen21 New Member

    Joined:
    25 Nov 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    то есть, вместо знака "<" поставить or ?
    а если меня первый диапазон смущает, так как этот диапазон от 1 до 10000, собственно в этом и загвоздка, смогу ли я этот диапазон уменьшить поставив
    rand(1,100)
     
  6. Kusto

    Kusto Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    нет вместо знака меньше нельзя- or это русским языком"или" смотри мануал пыха т е можно несмотря на рандом добиться 100% варианта при известном каком то условии тебе- на которое можеш влиять
    По поводу второй части твоего вопроса- да так можно
     
  7. Allen21

    Allen21 New Member

    Joined:
    25 Nov 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    нет я то синтаксис пыхы знаю, меня то и смутило наличия ор вместо <.
    а вот на счет 100% результат, немного не понял, как его можно добиться?
    если логически подумать то rand(1,1), но я так понял такой диапазон и rand(1,2) нельзя ставить в рэндоме?
     
  8. Kusto

    Kusto Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    if ($tmp2 == $tmp2) вместо if (rand(1,10000)<$tmp2*4)

    или if (rand(1,10000)<$tmp2*4 or $id == "тут например твой айди") / но тут ты должен свой натуральный айди в системе получить в переменную и тогда только у твоего акка 100% шанс у остальных рандом
     
    #8 Kusto, 25 Feb 2012
    Last edited: 25 Feb 2012
  9. Allen21

    Allen21 New Member

    Joined:
    25 Nov 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    росписал как школьнику, а мне то это и нужно было, спасибо большое-)))