Вход Регистрация
Файл: silawar.ru/protected/components/BattleHelper.php
Строк: 750
<?php

class BattleHelper extends CWidget {

    
/**
     * Массив со значениями максимально опыта
     * @param type $level уровень, для которого вывести макс. опыт
     * @return int|boolean
     */
    
public static function maxXP($level 1) {
        
$array = array(
            
0,
            
100,
            
250,
            
475,
            
812,
            
1300,
            
2000,
            
3200,
            
4900,
            
7400,
            
11300,
            
17000,
            
25700,
            
38700,
            
58100,
            
/*15+*/
            
83400,
            
116300,
            
159000,
            
214600,
            
286800,
            
380700,
            
502800,
            
661500,
            
867800,
            
1130000,
            
/*25+*/
            
1510000,
            
2030000,
            
2770000,
            
3800000,
            
5240000,
            
7260000,
            
10090000,
            
14050000,
            
19590000,
            
27350000,
            
38210000,
            
/*36+*/
//            53410000,
//            74700000,
//            10450000,
//            146230000,
//            196290000,
//            256380000,
//            328480000,
//            414990000,
//            518820000,
//            643400000,
//            792910000,
//            972310000,
//            1187600000,
//            1445940000,
//            1750000000,
//            2120000000,
//            2570000000,
//            3110000000,
//            3750000000,
//            4460000000,
//            5230000000,
//            6090000000,
//            7030000000,
//            8060000000,
//            10140000000,
//            13240000000,
//            18420000000,
//            26700000000,
//            40160000000,
//            61900000000,
//            97100000000,
//            154040000000,
//            246180000000,
//            395270000000
        
);
        if (
$level) {
            return 
$array[$level];
        }
        return 
true;
    }
    
    
/**
     * Массив со значениями максимально опыта для клана
     * @param type $level уровень, для которого вывести макс. опыт
     * @return int|boolean
     */
    
public static function maxGuildXP($level 1) {
        
$array = array(
            
0,
            
1000000,
            
2500000,
            
4750000,
            
8120000,
            
13180000,
            
20780000,
            
32170000,
            
49250000,
            
74280000,
            
/*10+*/
//            113330000,
//            179900000,
//            257490000,
//            387230000,
//            581850000,
//            873780000,
//            1310000000,
//            1960000000,
//            2950000000,
//            4430000000,
        
);
        if (
$level) {
            return 
$array[$level];
        }
        return 
true;
    }

    
/**
     * Удар по врагу
     * @param type $user бьющий
     * @param type $enemy враг
     * @return mixed
     */
    
public static function damageUser($user$enemy null$energyDamage false) {
        
$enemy_killed false;
        if (!
$enemy) {
            
$log = new BattleLog();
            
$log->battle_type $user->battle_type;
            
$log->battle_id $user->battle_id;
            
$log->id_user $user->id_user;
            
$log->type 8;
            
$log->info 'Вы убили';
            
$log->users $user->id_user;
            
$log->save(false);
            return 
false;
        }
        
/* Высчитываем удар по врагу */
        
if ($energyDamage)
            
$attack self::actionToUser($usertrue);
        else
            
$attack self::actionToUser($user);
        
/* Высчитываем поглощение урона у врага */
        
if ($enemy->id_role == 6) {
            if (
$enemy->armor)
                
$defense round(($attack['value']/100)*$enemy->armor);
            else
                
$defense 0;
        }
        else
            
$defense self::blockAttack($enemy$attack['value']);
        
/* Разбираем последствия удара */
        
$attack['damage'] = $attack['value'] - $defense;
        if (!
$energyDamage) {
            if (
$enemy->health_now $attack['damage']) {
                
$attack['damage'] = $enemy->health_now;
            }
        }
        else {
            if (
$enemy->energy_now $attack['damage']) {
                
$attack['damage'] = $enemy->energy_now;
            }
        }
        
/* Если у ударившего Премиум, даем х2 опыт */
        
if ($user->premium_time time()) {
            
$user_xp $attack['damage'] * 2;
        } else {
            
$user_xp $attack['damage'];
        }
        
$bonus Actions::getBonusValue(2);
        if (
$bonus 0) {
            
$user_xp round($user_xp + ($user_xp/100)*$bonus);
        }
        
/* Записываем все в базу */
        
$user_params = [
            
'xp' => $user->xp $user_xp,
            
'battle_target' => $enemy->id_user,
            
'battle_output' => $attack['damage'],
            
'battle_time_out' => time(),
            
'energy_now' => $user->energy_now $attack['energy']
        ];

        if (
$user->id_role == || $user->id_role == 6) {
            
$user_params['participation'] = $user->participation round($attack['damage']*1.2); 
        }
        else {
           
$user_params['participation'] = $user->participation $attack['damage']; 
           
$user_params self::checkXP($user$user_params);
        }
        
        if (
$user->guild_id) {
            
$user_guild_xp round($user_xp/sqrt(count($user->idGuild->users)));
            
$bonus Actions::getBonusValue(3);
            if (
$bonus 0) {
                
$user_guild_xp round($user_guild_xp + ($user_guild_xp/100)*$bonus);
            }
            
self::checkGuildXP($user->guild_id$user_guild_xp);
            
$user_params['guild_xp'] = $user->guild_xp $user_guild_xp;
        }
        
        if (!
$energyDamage && $enemy->health_now $attack['damage'] <= 0) {
            
$enemy_killed true;
        }

        
/* Если у врага Премиум, даем х2 опыт */
        
if ($enemy->premium_time time()) {
            
$enemy_xp $defense 2;
        } else {
            
$enemy_xp $defense;
        }
        
$bonus Actions::getBonusValue(2);
        if (
$bonus 0) {
            
$enemy_xp round($enemy_xp + ($enemy_xp/100)*$bonus);
        }
        
$enemy_params = [
            
'xp' => $enemy->xp $enemy_xp,
            
'battle_income' => $attack['damage'],
            
'battle_time_in' => time(),
        ];
        if (!
$energyDamage) {
            
$enemy_params['health_now'] = $enemy->health_now $attack['damage'];
        }
        else {
            
$enemy_params['energy_now'] = $enemy->energy_now $attack['damage'];
        }

        if (
$enemy->id_role == || $enemy->id_role == 6) {
            
$enemy_params['participation'] = $enemy->participation round($defense*1.2); 
        }
        else {
           
$enemy_params['participation'] = $enemy->participation $defense
           
$enemy_params self::checkXP($enemy$enemy_params);
        }
        
        if (
$enemy->guild_id) {
            
$enemy_guild_xp round($enemy_xp/sqrt(count($enemy->idGuild->users)));
            
$bonus Actions::getBonusValue(3);
            if (
$bonus 0) {
                
$enemy_guild_xp round($enemy_guild_xp + ($enemy_guild_xp/100)*$bonus);
            }
            
self::checkGuildXP($enemy->guild_id$enemy_guild_xp);
            
$enemy_params['guild_xp'] = $enemy->guild_xp $enemy_guild_xp;
        }

        if (
$enemy_killed) {
            
$criteria = new CDbCriteria();
            
$criteria->select = array('id_user');
            
$criteria->compare('battle_target'$enemy->id_user);
            
$ids CHtml::listData(Users::model()->findAll($criteria), 'id_user''id_user');
            if (!empty(
$ids)) {
                
Users::model()->updateByPk($ids, array('battle_target'=>0));
            }

            
$log = new BattleLog();
            
$log->battle_type $user->battle_type;
            
$log->battle_id $user->battle_id;
            
$log->id_user $user->id_user;
            
$log->id_target $enemy->id_user;
            
$log->type 4;
            if (
$enemy->id_role == 6) {
                
$log->users Users::getUsersForLog($enemy->id_user$user->battle_id);  
            }
            else {
                
$log->users Users::getUsersForLog($enemy->id_user);
            }
            
$log->save(false);
            if (
$enemy->premium_time time() && $enemy->idRole->id_cat_role != 5) {
                
$item UserItems::getRandomItem($enemy->id_user);
                if (
$item && $item->idItem->id_set 1) {
                    
$percent round($item->hardness_max 15 100);
                    
$item->hardness -= $percent;
                    if (!
$item->save(false)) {
                        throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении данных о предмете!'));
                    }
                }
            }
        }
        
Users::model()->updateByPk($user->id_user$user_params);
        
Users::model()->updateByPk($enemy->id_user$enemy_params);

        
/* Если был убит зверь - проверяем убили ли всех и выдаем лут*/
        
if ($enemy_killed && $enemy->id_role == 6) {
            
UserStatistic::addToStatistic(UserStatistic::KM);
            
self::dungeonController($user);
        }
        elseif (
$enemy_killed && $enemy->id_role == 5) {
            
UserStatistic::addToStatistic(UserStatistic::KB);
        }
        elseif (
$enemy_killed) {
            
UserStatistic::addToStatistic(UserStatistic::KU);
        }
        return 
$attack;
    }

    
/**
     * Лечение игрока
     * @param type $user хилер
     * @param type $friend цель
     * @return mixed
     */
    
public static function healUser($user$friend) {
        
/* Высчитываем лечение по союзнику */
        
$heal self::actionToUser($user);
        
$max_health Users::calcParam($friend->id_user'health')*2;
        
/* Записываем все в базу */
        
$user_params = [
            
'battle_target' => $friend->id_user,
            
'battle_output' => $heal['value'],
            
'battle_time_out' => time(),
            
'participation' => $user->participation $heal['value'],
            
'energy_now' => $user->energy_now $heal['energy']
        ];

        
/* Если хилер себя лечит, значит пишем все только в 1 переменную */
        
if ($user->id_user == $friend->id_user) {
            if (
$max_health <= ($user->health_now $heal['value'])) {
                
$heal['value'] = $max_health $user->health_now;
                
$user_params['health_now'] = $max_health;
            } else {
                
$user_params['health_now'] = $user->health_now $heal['value'];
            }
            
$user_params['battle_heal'] = $heal['value'];
        }
        
/* Если хилер лечит союзника, сохраняем и его тоже */ 
        
else {
            
$friend_params = [];
            if (
$max_health <= ($friend->health_now $heal['value'])) {
                
$heal['value'] = $max_health $friend->health_now;
                
$friend_params['health_now'] = $max_health;
            } else {
                
$friend->health_now += $heal['value'];
                
$friend_params['health_now'] = $friend->health_now $heal['value'];
            }
            
$friend_params['battle_heal'] = $heal['value'];
            
Users::model()->updateByPk($friend->id_user$friend_params);

            
/* Если у хилящего Премиум, даем х2 опыт */
            
if ($user->premium_time time()) {
                
$user_xp $heal['value'] * 2;
            } else {
                
$user_xp $heal['value'];
            }
            
$bonus Actions::getBonusValue(2);
            if (
$bonus 0) {
                
$user_xp round($user_xp + ($user_xp/100)*$bonus);
            }
            
$user_params['xp'] = $user->xp $user_xp;
            if (
$user->idRole->id_cat_role != 5) {
                
$user_params self::checkXP($user$user_params);
            }
            if (
$user->guild_id) {
                
$user_guild_xp round($user_xp/sqrt(count($user->idGuild->users)));
                
$bonus Actions::getBonusValue(3);
                if (
$bonus 0) {
                    
$user_guild_xp round($user_guild_xp + ($user_guild_xp/100)*$bonus);
                }
                
$user->guild_xp += $user_guild_xp;
                
self::checkGuildXP($user->guild_id$user_guild_xp);
                
$user_params['guild_xp'] = $user->guild_xp $user_guild_xp;
            }
        }
        
Users::model()->updateByPk($user->id_user$user_params);
        return 
$heal;
    }

    
/**
     * Выпиваем бутылочку
     * @param type $user
     */
    
public static function usePotion($user) {
        if (
$user->bottles && $user->battle_bottles_time time()) {
            
$params Users::calcParam($user->id_user);
            
$log = new BattleLog();
            
$log->battle_type $user->battle_type;
            
$log->battle_id $user->battle_id;
            
$log->id_user $user->id_user;
            
$log->type 6;
            
$log->info 1;
            
$log->users Users::getUsersForLog($user->id_user);
            
$log->save(false);
            
$user_params = [
                
'bottles' => $user->bottles 1,
                
'battle_bottles_time' => time() + 90,
                
'health_now' => $params->totalHealth*2,
                
'energy_now' => $params->totalEnergy*2
            
];
            
Users::model()->updateByPk($user->id_user$user_params);
            
UserStatistic::addToStatistic(UserStatistic::UP);
            return 
true;
        }
        return 
false;
    }

    
/**
     * Захват территории в Битвах
     * @param type $user пользователь
     * @return type
     * @throws CHttpException
     */
    
public static function captureTerritory($user) {
        
/* Высчитываем удар по башне */
        
$attack self::actionToUser($user);
        
$attack['value'] = round($attack['value'] / 2);
        
$location BattlesLocations::model()->findByPk($user->battle_id);
        
$location->health_now -= $attack['value'];
        if (
$location->health_now <= 0) {
            
$location->side_now $user->side;
            
$location->health_now $location->health_default;
        }
        if (!
$location->save(false)) {
            throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении локации!'));
        }

        
/* Если у ударившего Премиум, даем х2 опыт */
        
$user_params = [
            
'battle_output' => $attack['value'],
            
'battle_time_out' => time(),
            
'participation' => $user->participation $attack['value'],
            
'energy_now' => $user->energy_now $attack['energy']
        ];
        if (
$user->premium_time time()) {
            
$user_xp $attack['value'] * 2;
        } else {
            
$user_xp $attack['value'];
        }
        
$bonus Actions::getBonusValue(2);
        if (
$bonus 0) {
            
$user_xp round($user_xp + ($user_xp/100)*$bonus);
        }
        
$user_params['xp'] = $user->xp $user_xp;
        if (
$user->idRole->id_cat_role != 5) {
           
$user_params self::checkXP($user$user_params); 
        }
        if (
$user->guild_id) {
            
$user_guild_xp round($user_xp/sqrt(count($user->idGuild->users)));
            
$bonus Actions::getBonusValue(3);
            if (
$bonus 0) {
                
$user_guild_xp round($user_guild_xp + ($user_guild_xp/100)*$bonus);
            }
            
$user->guild_xp += $user_guild_xp;
            
self::checkGuildXP($user->guild_id$user_guild_xp);
            
$user_params['guild_xp'] = $user->guild_xp $user_guild_xp;
        }
        
Users::model()->updateByPk($user->id_user$user_params);
        return 
$attack;
    }

    
/**
     * Действие в боях, применимое к игрокам, ударить для воина, лечить для медика
     * @param type $id_user массив игрока
     * @return type
     */
    
public static function actionToUser($user$energyDamage false) {
        
$result = array();
        
$result['isCritical'] = false;
        
$result['energy'] = self::countEnergyToAttack($user);
        
$params Users::calcParam($user->id_user);
        
/* Если это зверь, значит делим его урон на всех кто в пещере */

        
if ($user->id_role == 6) {
            
$count count($user->idDungeon->warriors) + count($user->idDungeon->healers);
            
$attack round($user->strength $count);
            if (
$user->password && $user->idDungeon->time_start 60 time()) {
                if (
$user->password == 2) {
                    
Users::model()->updateByPk($user->id_user, array('password'=>3));
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->info '<img src="/images/icons/dragon.png" alt="*"/> ' $user->login ' буйствует';
                    
$log->type 9;
                    
$log->value 2;
                    
$log->users Users::getUsersForLog($user->id_user$user->battle_id);  
                    
$log->save(false);
                }
                
$percent floor((time() - ($user->idDungeon->time_start 60))/60);
                
$attack += $percent * ($attack/100) ;
            }
        }
        else
            
$attack $params->totalStrength;
        
/* Урезаем силу для удара/лечения */
        
if ($user->class && !$energyDamage)
            
$attack round($attack 2);
        else
            
$attack round($attack 3);
        
/* Проверяем на навык Ярость (урон) */
        
$ability UsersAbilities::model()->findByAttributes(['id_user' => $user->id_user], ['condition' => '`id_ability` = 1 AND `time_active` >= unix_timestamp(NOW())']);
        if (
$ability) {
            
$attack round($attack 0.01 $ability->idType->value);
        }
        
/* Проверяем достаточно ли энергии */
        
if ($user->idRole->id_cat_role != 5) {
            if (
$user->energy_now $result['energy']) {
                
$attack round($attack 0.75);
            }
        }
        
/* Проверяем на крит удар/лечение */
        
$rand rand(1,100);
        
/* Проверяем на навык Закалка (криты) */
        
$ability UsersAbilities::model()->findByAttributes(['id_user' => $user->id_user], ['condition' => '`id_ability` = 3 AND `time_active` >= unix_timestamp(NOW())']);
        if (
$ability) {
            
$rand 0;
        }
        if (
Users::getUserCritValue($params->totalEnergy) >= $rand) {
            
$critBoost rand(1317) / 10;
            
$attack round($attack $critBoost);
            
$result['isCritical'] = true;
        }
        if (
$user->idRole->id_cat_role != 5) {
            if (
$user->battle_time_out < (time() - 5)) {
                
$percent 100;
                if (
$user->bottles 100 && rand(1100) > 99) {
                    
Users::model()->updateByPk($user->id_user, array('bottles'=>$user->bottles 1));
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->type 8;
                    
$log->info 'Вы нашли эликсир';
                    
$log->users $user->id_user;
                    
$log->save(false);
                }
            } elseif (
$user->battle_time_out < (time() - 3)) {
                
$percent rand(6080);
            } elseif (
$user->battle_time_out < (time() - 2)) {
                
$percent rand(4060);
            } else {
                
$percent 0;
            }
            
$result['value'] = round(($attack 100) * $percent);
        } else
            
$result['value'] = $attack;
        return 
$result;
    }

    
/**
     * Высчитывает кол-во поглощаемого урона, уменьшает прочность у предмета
     * @param type $id_user массив пользователя, по кому ударили
     * @param type $attack кол-во урона
     * @return type
     */
    
public static function blockAttack($user$attack) {
        
$block Users::getUserBlockValue(Users::calcParam($user->id_user'armor'));
        
$result round(($attack 100) * $block);
        if (
$user->premium_time time() && $user->idRole->id_cat_role != 5) {
            
$item UserItems::getRandomItem($user->id_user);
            if (
$item && $item->idItem->id_set 1) {
                
$item->hardness -= rand(12);
                if (!
$item->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении данных о предмете!'));
                }
            }
        }
        return 
$result;
    }

    
/**
     * Возвращает кол-во энергии необходимое для удара/лечения
     * @param type $user массив с данными юзера
     * @return int кол-во энергии
     */
    
public static function countEnergyToAttack($user) {
        
$result 0;
        if (
$user->level <= 20) {
            
$result round($user->level 3.3);
        } elseif (
$user->level 20 && $user->level <= 25) {
            
$result round($user->level 4);
        } elseif (
$user->level 25 && $user->level <= 30) {
            
$result round($user->level 5);
        } else {
            
$result sqrt(Users::calcParam($user->id_user'strength')) * 4.5;
        }
        return 
$result;
    }

    public static function 
participation($id_location$damage) {
        
$location BattlesLocations::model()->findByPk($id_location);
        if (
$location->participation_now $damage >= $location->participation_default) {
            
$location->participation_now 0;

            
$winner Users::getParticipationLeaderForBattles($id_location);
            
$percent BattlesLocations::getDomination($winner->side$location->level_max);
            
$winner->participation round($winner->participation 2);
            if (!
$winner->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении данных пользователя!'));
            }
            
/* Качество выпадающей вещи */
            
if ($percent >= 70)
                
$type rand(25);
            elseif (
$percent >= 50)
                
$type rand(24);
            else
                
$type rand(13);
            
/* Если выпала хорошая, рандомим еще раз :) */
            
if ($type 5)
                
$type rand(36);
            if (
$type 4)
                
$type rand(35);

            
$item ShopItems::getRandomItemInBattles($winner->idLocation);
            if (
$item->id_set == && $type 4)
                
$type 4;
            elseif (
$item->id_set && $type 3)
                
$type 3;
            
$drop ShopItems::getNewItem($item->id_item$type$winner->id_userfalse);

            
$log = new BattleLog();
            
$log->battle_type $winner->battle_type;
            
$log->battle_id $winner->battle_id;
            
$log->id_user $winner->id_user;
            
$log->type 5;
            
$log->value $drop;
            
$log->users Users::getUsersForLog($winner->id_user$winner->battle_id);
            
$log->save(false);
        } else {
            
$location->participation_now += $damage;
        }
        if (!
$location->save(false)) {
            throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении участия!'));
        }
        return 
true;
    }

    
/**
     * Проверяет апнулся ли юзер, и возвращает обьект уже с новыми данными
     * @param type $user
     * @param type $user_params
     * @return boolean
     * @throws CHttpException
     */
    
public static function checkXP($user$user_params) {
        
$max_xp self::maxXP($user->level);
        if (
$user_params['xp'] >= $max_xp && $user->level 15) {
            
$user_params['level'] += 1;
            
$params Users::calcParam($user->id_user);
            
$user_params['health_now'] = $params->totalHealth*2;
            
$user_params['energy_now'] = $params->totalEnergy*2;
            
$log = new BattleLog();
            
$log->battle_type $user->battle_type;
            
$log->battle_id $user->battle_id;
            
$log->id_user $user->id_user;
            
$log->type 6;
            
$log->info 2;
            
$log->users Users::getUsersForLog($user->id_user);
            
$log->save(false);
        }
        elseif (
$user_params['xp'] >= $max_xp && $user->level == 15) {
            
$user_params['xp'] = $max_xp 1;
        }
        return 
$user_params;
    }
    
    
/**
     * Проверяет апнулся ли клан
     * @param type $id_guild
     * @return boolean
     * @throws CHttpException
     */
    
public static function checkGuildXP($id_guild$user_guild_xp) {
        
$guild Guilds::model()->findByPk($id_guild);
        if (
$guild) {
            
$guild->xp += $user_guild_xp;
            if (
$guild->xp >= self::maxGuildXP($guild->level) && $guild->level 9) {
                
$guild->level += 1;
            }
            
$guild->save(false);
        }
        return 
true;
    }
    
    
/**
     * Вызов функции происходит при смерти зверя, проверяет на наличие других, если таковых нет, значит данж пройден
     * @param type $user
     * @return boolean
     */
    
public static function dungeonController($user) {
        
/* Если все звери мертвы завершаем данж */
        
if (BattlesDungeons::model()->with('bots')->count(array('condition' => 'bots.health_now>0 AND t.id_battle='.$user->battle_id)) < 1) {
            
$dungeon BattlesDungeons::model()->findByPk($user->battle_id);
            if (!empty(
$dungeon) && !$dungeon->time_end) {
                
$dungeon->time_end time();
                if (!
$dungeon->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении данных боя!'));
                }

                
$users_ids CHtml::listData($dungeon->users'id_user''id_user');
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->type 9;
                
$log->info 'Ваш отряд прошел пещеру (время '.FuncHelper::timeToCount(time()-$dungeon->time_start).')';
                
$log->users $users_ids;
                
$log->save(false);

                
/*Запишем участие в лог*/
                
foreach ($dungeon->users as $dungeon_user) {
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $dungeon_user->id_user;
                    
$log->type 8;
                    
$log->value $dungeon_user->participation;
                    
$log->info 1;
                    
$log->users $users_ids;
                    
$log->save(false);
                    
UserDungeons::checkHistory($dungeon_user->id_user$dungeon);
//                    $dungeon_user->battle_id = null;
//                    $dungeon_user->battle_type = null;
//                    $dungeon_user->battle_target = null;
//                    if (!$dungeon_user->save(false)) {
//                        throw new CHttpException(500, Yii::t('layout', 'Ошибка при сохранении данных пользователя!'));
//                    }
//                    unset($dungeon_user);
                
}

                
/*Выдаем лут*/
                
if ($dungeon->id_dungeon == 1) {
                    
$id_set 3;
                    
$quality 3;
                    
$items[] = array(
                        
'id_set' => 3,
                        
'quality' => 3
                    
);
                    
$winners_ids[] = array_rand($users_ids);
                }
                elseif (
$dungeon->id_dungeon == 2) {
                    if (
rand(1,100) >= 75) {
                        
$items[] = array(
                            
'id_set' => 5,
                            
'quality' => 4
                        
);
                        
$items[] = array(
                            
'id_set' => 5,
                            
'quality' => 5
                        
);
                        if (
count($users_ids) > 1) {
                            
$winners_ids array_rand($users_ids2);
                        } 
                        else {
                            
$winners_ids $users_ids;
                        }
                    }
                    else {
                        
$items[] = array(
                            
'id_set' => 5,
                            
'quality' => 4
                        
);
                        
$winners_ids[] = array_rand($users_ids);
                    }
                }
                elseif (
$dungeon->id_dungeon == 3) {
                    if (
rand(1,100) >= 75) {
                        
$items[] = array(
                            
'id_set' => rand(6,8),
                            
'quality' => 4
                        
);
                        
$items[] = array(
                            
'id_set' => rand(6,8),
                            
'quality' => 5
                        
);
                        if (
count($users_ids) > 1) {
                            
$winners_ids array_rand($users_ids2);
                        } 
                        else {
                            
$winners_ids $users_ids;
                        }
                    }
                    else {
                        
$items[] = array(
                            
'id_set' => rand(6,8),
                            
'quality' => 4
                        
);
                        
$winners_ids[] = array_rand($users_ids);
                    }
                }
                elseif (
$dungeon->id_dungeon == 4) {
                    if (
rand(1,100) >= 90) {
                        
$items[] = array(
                            
'id_set' => 9,
                            
'quality' => 6
                        
);
                        
$items[] = array(
                            
'id_set' => 9,
                            
'quality' => 6
                        
);
                        if (
count($users_ids) > 1) {
                            
$winners_ids array_rand($users_ids2);
                        } 
                        else {
                            
$winners_ids $users_ids;
                        }
                    }
                    else {
                        
$items[] = array(
                            
'id_set' => 9,
                            
'quality' => 6
                        
);
                        
$winners_ids[] = array_rand($users_ids);
                    }
                }
                elseif (
$dungeon->id_dungeon == 6) {
                    
$items[] = array(
                        
'id_set' => rand(6,8),
                        
'quality' => 4
                    
);
                    
$items[] = array(
                        
'id_set' => rand(6,8),
                        
'quality' => 5
                    
);
                    
$users CHtml::listData($dungeon->users'guild_rank''id_user');
                    
krsort($users);
                    
$winners_ids = array(array_values($users)[0], array_values($users)[0]);
                }
                elseif (
$dungeon->id_dungeon == 7) {
                    
$items[] = array(
                        
'id_set' => rand(6,8),
                        
'quality' => 5
                    
);
                    
$items[] = array(
                        
'id_set' => rand(6,8),
                        
'quality' => 6
                    
);
                    
$users CHtml::listData($dungeon->users'guild_rank''id_user');
                    
krsort($users);
                    
$winners_ids = array(array_values($users)[0], array_values($users)[0]);
                }
                
$i=0;
                foreach (
$winners_ids as $winner_id) {
                    
$item ShopItems::getRandomItemInDungeons($items[$i]['id_set']);
                    
$drop ShopItems::getNewItem($item->id_item$items[$i]['quality'], $winner_idfalsefalse);

                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $winner_id;
                    
$log->type 5;
                    
$log->value $drop;
                    
$log->users $users_ids;
                    
$log->save(false); 
                    
$i++;
                }
                return 
true;
            }
        }
        return 
false;
    }

    public static function 
battleLog($user$user_battle) {
        
$result '';
        
$count 0;
        foreach (
$user->logs as $log) {
            if (
$log->battle_type == $user_battle) {
                
$count++;
                if (
$log->type == 1) {
//                    if ($log->value < 1)
//                        $result .= Users::getLoginWithLink($log->id_user) . ' промахнулся<br />';
                    
if (!$log->id_target)
                        
$result .= Users::getLoginWithLink($log->id_user) . ' ударил по укреплению на ' $log->value '<br />';
                    elseif (
$log->id_target != Yii::app()->user->id) {
                        if (
$user_battle == 3) {
                            
$result .= Users::getLoginWithLink($log->id_user) . ' ударил ' Users::getLogin($log->id_target) . ' на ' $log->value ' ' $log->info '<br />';
                        }
                        else {
                            
$result .= Users::getLoginWithLink($log->id_user) . ' ударил ' Users::getLoginWithLink($log->id_target) . ' на ' $log->value ' ' $log->info '<br />';
                        }
                    }
                    else {
                        
$result .= Users::getLoginWithLink($log->id_user) . '<span class="red"> ударил Вас на ' $log->value ' ' $log->info '</span><br />';
                    }
                        
                }
                elseif (
$log->type == 2) {
//                    if ($log->value < 1)
//                        $result .= Users::getLoginWithLink($log->id_user) . ' промахнулся<br />';
                    
if ($log->id_user == $log->id_target)
                        
$result .= Users::getLoginWithLink($log->id_user) . '<span class="green"> полечил себя на ' $log->value ' ' $log->info '</span><br />';
                    elseif (
$log->id_target != Yii::app()->user->id) {
                        if (
$user_battle == 3) {
                            
$result .= Users::getLoginWithLink($log->id_user) . ' полечил ' Users::getLogin($log->id_target) . ' на ' $log->value ' ' $log->info '<br />';
                        }
                        else {
                            
$result .= Users::getLoginWithLink($log->id_user) . ' полечил ' Users::getLoginWithLink($log->id_target) . ' на ' $log->value ' ' $log->info '<br />';
                        }
                    }
                    elseif (
$log->id_target == Yii::app()->user->id)
                        
$result .= Users::getLoginWithLink($log->id_user) . ' <span class="green">полечил Вас на ' $log->value ' ' $log->info '</span><br />';
                }
                elseif (
$log->type == 3) {
//                    if ($log->value < 1)
//                        $result.=Users::getLoginWithLink($log->id_user) . ' промахнулся<br />';
                    
if ($log->id_target == $log->id_target)
                        
$result.=Users::getLoginWithLink($log->id_user) . ' сжёг у ' Users::getLoginWithLink($log->id_target) . ' ' $log->value ' энергии ' $log->info '<br />';
                    elseif (
$log->id_target != Yii::app()->user->id) {
                        if (
$user_battle == 3) {
                            
$result .= Users::getLoginWithLink($log->id_user) . ' сжёг у ' Users::getLogin($log->id_target) . ' ' $log->value ' энергии ' $log->info '<br />';
                        }
                        else {
                            
$result .= Users::getLoginWithLink($log->id_user) . ' сжёг у ' Users::getLoginWithLink($log->id_target) . ' ' $log->value ' энергии ' $log->info '<br />';
                        }
                    }
                    elseif (
$log->id_target == Yii::app()->user->id)
                        
$result.=Users::getLoginWithLink($log->id_user) . '<span class="red"> сжёг у Вас ' $log->value ' энергии ' $log->info '</span><br />';
                }
                elseif (
$log->type == 4) {
                    if (
$log->id_target != Yii::app()->user->id) {
                        if (
$user_battle == 3) {
                            
$result.=Users::getLoginWithLink($log->id_user) . ' убил ' Users::getLogin($log->id_target) . '<br />';
                        }
                        else {
                            
$result.=Users::getLoginWithLink($log->id_user) . ' убил ' Users::getLoginWithLink($log->id_target) . '<br />';
                        }
                    }
                    else {
                        if (
$user_battle == 3) {
                            
$result.=Users::getLogin($log->id_user) . '<span class="red"> убил Вас</span><br />'
                        }
                        else {
                            
$result.=Users::getLoginWithLink($log->id_user) . '<span class="red"> убил Вас</span><br />'
                        }
                    } 
                }
                elseif (
$log->type == 5) {
                    if (
$log->id_user != Yii::app()->user->id)
                        
$result.=Users::getLoginWithLink($log->id_user) . ' получил ' UserItems::itemName($log->value1) . '<br />';
                    else
                        
$result.='<span class="green">Вы получили ' UserItems::itemName($log->value1) . '</span><br />';
                }
                elseif (
$log->type == 6) {
                    if (
$log->info == 1) {
                        if (
$log->id_user != Yii::app()->user->id)
                            
$result.=Users::getLoginWithLink($log->id_user) . ' выпил эликсир<br />';
                        else
                            
$result.='<span class="green">Вы выпили эликсир</span><br />';
                    }
                    else {
                        if (
$log->id_user != Yii::app()->user->id)
                            
$result.=Users::getLoginWithLink($log->id_user) . ' получил новый уровень<br />';
                        else
                            
$result.='<span class="green">Вы получили новый уровень!</span><br />';
                    }
                }
                elseif (
$log->type == 7) {
                    if (
$log->id_user != Yii::app()->user->id)
                        
$result.=Users::getLoginWithLink($log->id_user) . ' использовал навык <span class="green">' $log->info '</span><br />';
                    else
                        
$result.='<span class="green">Вы использовали навык ' $log->info '</span><br />';
                }
                elseif (
$log->type == 8) {
                    if (
$log->info == 1)
                        
$result .= Users::getLoginWithLink($log->id_user) . ' участие <span class="green">' $log->value '</span><br />';
                    elseif (
$log->info == 2)
                        
$result .= Users::getLoginWithLink($log->id_user) . ' покинул пещеру<br />';
                    else
                        
$result.='<span class="green">' $log->info '</span><br />';
                }
                elseif (
$log->type == 9) {
                    if (
$log->value == 1) {
                        
$result.='<span class="text-success">' $log->info '</span><br />';
                    }
                    elseif (
$log->value == 2) {
                        
$result.='<span class="text-danger">' $log->info '</span><br />';
                    }
                    else {
                        
$result.=$log->info.'<br />';
                    }
                } else
                    
$result.='<span class="red">Бой начался!</span><br />';
                if (
$count 9)
                    break;
            }
        }
        return 
$result;
    }

}

?>
Онлайн: 1
Реклама