Перейти к содержанию
Авторизация  
Crea

ght5 под l2jlovely

Рекомендуемые сообщения

Есть у кого готовый файлик с запросами под ловели? А то тот который на гите не совсем корректный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у тебя есть база данных l2jlovely обкатаная с персонажами и кланами, итемами..., то я могу тебе дать свою самописку бесплатно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у тебя есть база данных l2jlovely обкатаная с персонажами и кланами, итемами..., то я могу тебе дать свою самописку бесплатно.

 

Если у тебя есть база данных l2jlovely обкатаная с персонажами и кланами, итемами..., то я могу тебе дать свою самописку бесплатно.

Что именно самописное, файлик с запросами или обвязку? Обвязка мне не нужна, а вот файлик пригодился бы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть у кого готовый файлик с запросами под ловели? А то тот который на гите не совсем корректный.

я просто указывал lucera в gthweb5 и все прекрасно работало) а так ты напишу самому разрабу веба, он бесплатно делает запросы под любую сборку. Его слова. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я просто указывал lucera в gthweb5 и все прекрасно работало) а так ты напишу самому разрабу веба, он бесплатно делает запросы под любую сборку. Его слова. 

Я тоже поставил lucera2, частично работает, не выдаёт только итемы, а мне это как раз и нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот собственно запросы под Lucera2, работает частично. Не работает выдача предметов.

 

 

<?php 

// Version >= 8.3
class Lucera2
{
    /**
     * Объект подключения к БД
     * @var CDbConnection
     */
    private $_db;

    /**
     * Объект класса Lineage
     * @var Lineage
     */
    private $_context;

    /**
     * Поля из БД
     * @var array
     */
    private $_fields = array(
        'accounts.access_level' => 'accounts.accessLevel',
        //'characters.access_level' => 'characters.access_level', // В таблице такого поля нет
        'characters.char_id' => 'characters.charId',
        'clan_data.clan_id' => 'clan_data.clan_id',
    );


    public function __construct($context)
    {
        $this->_context = $context;
        $this->_db = $context->getDb();
    }

    /**
     * Создание игрового аккаунта
     *
     * @param $login
     * @param $password
     * @param int $access_level
     *
     * @return bool
     */
    public function insertAccount($login, $password, $access_level = 0)
    {
        return $this->_db->createCommand()->insert('accounts', array(
            'login'        => $login,
            'password'     => $this->_context->passwordEncrypt($password),
            'accessLevel'  => $access_level,
        ));
    }

    /**
     * Возвращает аккаунты
     *
     * @param CDbCommand $command
     *
     * @return CDbCommand
     */
    public function accounts($command = NULL)
    {
        if(!($command instanceof CDbCommand))
        {
            $command = $this->_db->createCommand();
        }

        return $command->select('login, password, lastactive AS last_active, accessLevel AS access_level')
            ->from('accounts');
    }

    /**
     * Возвращает список персонажей
     *
     * @param CDbCommand $command
     *
     * @return CDbCommand
     */
    public function characters($command = NULL)
    {
        if(!($command instanceof CDbCommand))
        {
            $command = $this->_db->createCommand();
        }

        /*$where = $command->getWhere();
        $acf = str_replace('.', '\.', $this->_fields['characters.access_level']);

        // Удаляю access_level так как в таблице нет такого поля
        if(preg_match('#' . $acf . ' = ([0-9+])#', $where, $m))
        {
            $where = preg_replace('#' . $acf . ' = ([0-9]+)#', '', $where);
            $command->where = str_replace(array('() AND', 'AND ()'), '', $where);
        }*/

        return $command
            ->select('characters.account_name,characters.charId AS char_id,characters.char_name,characters.sex,characters.x,characters.y,characters.z,characters.karma,characters.pvpkills,characters.pkkills,characters.clanid AS clan_id,characters.title,characters.`online`,
                characters.onlinetime,characters.base_class,characters.`level`,characters.exp,characters.sp,characters.maxHp,characters.curHp,characters.maxCp,characters.curCp,characters.maxMp,characters.curMp,clan_data.clan_level,clan_data.hasCastle,clan_data.hasFort,
                clan_data.crest_id AS clan_crest,clan_data.reputation_score,clan_data.clan_name,(SELECT IF(valueData>0,1,0) FROM character_data WHERE character_data.charId = characters.charId AND character_data.valueName = "jail" LIMIT 1) as jail,0 as access_level')
            ->leftJoin('clan_data', 'characters.clanid = clan_data.clan_id')
            ->from('characters');
    }

    /**
     * Кланы + инфа о лидере + кол-во персонажей в клане
     *
     * @param CDbCommand $command
     *
     * @return CDbCommand
     */
    public function clans($command = NULL)
    {
        if(!($command instanceof CDbCommand))
        {
            $command = $this->_db->createCommand();
        }

        return $command
            ->select('clan_data.clan_id,clan_data.clan_name,clan_data.clan_level,clan_data.hasCastle,clan_data.hasFort,clan_data.ally_id,clan_data.ally_name,clan_data.leader_id,clan_data.crest_id AS clan_crest,clan_data.crest_large_id AS clan_crest_large,clan_data.ally_crest_id AS ally_crest,
                clan_data.reputation_score,characters.char_name,characters.account_name,characters.charId AS char_id,characters.`level`,characters.maxHp,characters.curHp,characters.maxCp,characters.curCp,characters.maxMp,characters.curMp,characters.sex,characters.x,
                characters.y,characters.z,characters.exp,characters.sp,characters.karma,characters.pvpkills,characters.pkkills,characters.base_class,characters.title,characters.`online`,characters.onlinetime,(SELECT COUNT(0) FROM characters WHERE clanid = clan_data.clan_id) as ccount')
            ->leftJoin('characters', 'clan_data.leader_id = characters.charId')
            ->from('clan_data');
    }

    /**
     * Возвращает предметы
     *
     * @param CDbCommand $command
     *
     * @return CDbCommand
     */
    public function items($command = NULL)
    {
        if(!($command instanceof CDbCommand))
        {
            $command = $this->_db->createCommand();
        }

        return $command
            ->select('owner_id,object_id,item_id,count,enchant_level,loc,loc_data')
            ->from('items');
    }

    /**
     * Добавление предмета в игру
     *
     * @param int $ownerId
     * @param int $itemId
     * @param int $count
     * @param int $enchantLevel
     *
     * @return bool
     */
    public function insertItem($ownerId, $itemId, $count = 1, $enchantLevel = 0)
    {
        return $this->_db->createCommand()
            ->insert('items_external', array(
                'owner_id'      => $ownerId,
                'item_id'       => $itemId,
                'count'         => $count,
                'enchant_level' => $enchantLevel,
            ));
    }

    /**
     * Добавление дохуя предметов в игру
     *
     * @param array $items
     *
     * <code>
     *     array(
     *         'owner_id' => 111111
     *         'item_id' => 57
     *         'count' => 100
     *         'enchant' => 0
     *     )
     * </code>
     *
     * @return bool
     */
    public function multiInsertItem(array $items)
    {
        // Докидываю необходимые данные
        foreach($items as $k => $v)
        {
            $items[$k]['description'] = 'GHTWEB';
            $items[$k]['issued']      = 0;
        }

        $builder = $this->_db->schema->commandBuilder;
        $command = $builder->createMultipleInsertCommand('items_external', $items);
        return $command->execute();
    }

    /**
     * Возвращает кол-во людей
     *
     * @return int
     */
    public function getCountRaceHuman()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}` WHERE `race` = 0")->queryScalar();
    }

    /**
     * Возвращает кол-во эльфов
     *
     * @return int
     */
    public function getCountRaceElf()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}` WHERE `race` = 1")->queryScalar();
    }

    /**
     * Возвращает кол-во тэмных эльфов
     *
     * @return int
     */
    public function getCountRaceDarkElf()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}` WHERE `race` = 2")->queryScalar();
    }

    /**
     * Возвращает кол-во орков
     *
     * @return int
     */
    public function getCountRaceOrk()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}` WHERE `race` = 3")->queryScalar();
    }

    /**
     * Возвращает кол-во гномов
     *
     * @return int
     */
    public function getCountRaceDwarf()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}` WHERE `race` = 4")->queryScalar();
    }


    /**
     * Возвращает кол-во аккаунтов
     *
     * @return int
     */
    public function getCountAccounts()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{accounts}}`")->queryScalar();
    }

    /**
     * Возвращает кол-во персонажей
     *
     * @return int
     */
    public function getCountCharacters()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}`")->queryScalar();
    }

    /**
     * Возвращает кол-во персонажей в игре
     *
     * @return int
     */
    public function getCountOnlineCharacters()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}` WHERE `online` = 1")->queryScalar();
    }

    /**
     * Возвращает кол-во кланов
     *
     * @return int
     */
    public function getCountClans()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{clan_data}}`")->queryScalar();
    }

    /**
     * Возвращает кол-во мужчин
     *
     * @return int
     */
    public function getCountMen()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}` WHERE `sex` = 0")->queryScalar();
    }

    /**
     * Возвращает кол-во женщин
     *
     * @return int
     */
    public function getCountWomen()
    {
        return $this->_db->createCommand("SELECT COUNT(0) FROM `{{characters}}` WHERE `sex` = 1")->queryScalar();
    }

    /**
     * Возвращает кол-во камаэлей
     *
     * @return int
     */
    public function getCountRaceKamael()
    {
        // На Interlude нет камаэлей
        return 0;
    }

    /**
     * Возвращает Топ ПВП
     *
     * @param int $limit
     * @param int $offset
     *
     * @return array
     */
    public function getTopPvp($limit = 20, $offset = 0)
    {
        $command = $this->_db->createCommand();

        $command->where  = 'pvpkills > 0';
        $command->order  = 'pvpkills DESC';
        $command->limit  = $limit;
        $command->offset = $offset;

        return $this->characters($command)->queryAll();
    }

    /**
     * Возвращает Топ ПК
     *
     * @param int $limit
     * @param int $offset
     *
     * @return array
     */
    public function getTopPk($limit = 20, $offset = 0)
    {
        $command = $this->_db->createCommand();

        $command->where  = 'pkkills > 0';
        $command->order  = 'pkkills DESC';
        $command->limit  = $limit;
        $command->offset = $offset;

        return $this->characters($command)->queryAll();
    }

    /**
     * Возвращает Топ игроков
     *
     * @param int $limit
     * @param int $offset
     *
     * @return array
     */
    public function getTop($limit = 20, $offset = 0)
    {
        $command = $this->_db->createCommand();

        $command->order  = 'exp DESC';
        $command->limit  = $limit;
        $command->offset = $offset;

        return $this->characters($command)->queryAll();
    }

    /**
     * Возвращает Топ богачей
     *
     * @param int $limit
     * @param int $offset
     *
     * @return array
     */
    public function getTopRich($limit = 20, $offset = 0)
    {
        $command = $this->characters();

        $command->select = $command->select . ',SUM(items.count) AS adena_count';
        $command->where  = 'items.item_id = 57';
        $command->order  = 'adena_count DESC';
        $command->limit  = $limit;
        $command->offset = $offset;
        $command->group  = $this->getField('characters.char_id');
        $command->leftJoin('items', 'items.owner_id = ' . $this->getField('characters.char_id'));

        return $command->queryAll();
    }

    /**
     * Возвращает кто в игре
     *
     * @param int $limit
     * @param int $offset
     *
     * @return array
     */
    public function getOnline($limit = 20, $offset = 0)
    {
        $command = $this->_db->createCommand();

        $command->where  = 'online = 1';
        $command->order  = 'level DESC';
        $command->limit  = $limit;
        $command->offset = $offset;

        return $this->characters($command)->queryAll();
    }

    /**
     * Возвращает Топ кланов
     *
     * @param int $limit
     * @param int $offset
     *
     * @return array
     */
    public function getTopClans($limit = 20, $offset = 0)
    {
        $command = $this->_db->createCommand();

        $command->order  = 'reputation_score DESC';
        $command->limit  = $limit;
        $command->offset = $offset;

        return $this->clans($command)->queryAll();
    }

    /**
     * Возвращает список замков и инфу о владельцах
     *
     * @return array
     */
    public function getCastles()
    {
        $command = $this->_db->createCommand();

        $command->select = 'castle.id,castle.name,castle.taxPercent,castle.siegeDate,clan_data.clan_id,clan_data.clan_name,clan_data.clan_level,clan_data.reputation_score,clan_data.hasCastle,clan_data.ally_id,clan_data.ally_name,clan_data.leader_id,
            clan_data.crest_id,clan_data.crest_large_id,clan_data.ally_crest_id';
        $command->join = 'LEFT JOIN clan_data ON clan_data.hasCastle = castle.id';
        $command->from = 'castle';

        return $command->queryAll();
    }

    public function getSiege()
    {
        $command = $this->_db->createCommand();

        $command->select = 'siege_clans.castle_id,siege_clans.clan_id,siege_clans.type,siege_clans.castle_owner,clan_data.clan_name,clan_data.clan_level,clan_data.reputation_score,clan_data.hasCastle,clan_data.ally_id,clan_data.ally_name,clan_data.leader_id,
            clan_data.crest_id AS clan_crest,clan_data.crest_large_id AS clan_crest_large,clan_data.ally_crest_id AS ally_crest';
        $command->join = 'LEFT JOIN clan_data ON siege_clans.clan_id = clan_data.clan_id';
        $command->from = 'siege_clans';

        return $command->queryAll();
    }

    /**
     * Хроники сервера
     *
     * @return string
     */
    public function getChronicle()
    {
        return 'interlude';
    }

    /**
     * Возвращает название поля из таблицы
     *
     * @param string $fieldName
     *
     * @return string
     */
    public function getField($fieldName)
    {
        return isset($this->_fields[$fieldName]) ? $this->_fields[$fieldName] : NULL;
    }

    /**
     * Возвращает название сервера
     *
     * @return string
     */
    public function getServerName()
    {
        return __CLASS__;
    }

    /**
     * Информация о премиум аккаунте
     * Возвращает дату окончания в timestamp формате
     * 
     * @param string $accountName
     * 
     * @return array
     * 
     * <code>
     *     array(
     *         'dateEnd' => 1234567890
     *     )
     * </code>
     * 
     */
    public function getPremiumInfo($accountName)
    {
        $res = $this->_db->createCommand("SELECT * FROM {{account_data}} WHERE account_name = :account_name AND valueName = 'premium' LIMIT 1")
            ->bindParam('account_name', $accountName, PDO::PARAM_STR)
            ->queryRow();

        return array(
            'dateEnd' => ($res && $res['valueData'] > 0 ? substr($res['valueData'], 0, 10) : 0),
        );
    }

    /**
     * Добавление времени к премиум аккаунту
     * 
     * @param string $accountName
     * @param int $timeEnd
     * @param bool isIssetPremium
     * 
     * @return bool
     */
    public function addPremium($accountName, $timeEnd, $isIssetPremium = FALSE)
    {
        $timeEnd .= '000';

        if($isIssetPremium)
        {
            // Обновляю
            return $this->_db->createCommand("UPDATE `{{account_data}}` SET `valueData` = :valueData WHERE `valueName` = 'premium' AND `account_name` = :account_name LIMIT 1")
                ->bindParam('valueData', $timeEnd, PDO::PARAM_STR)
                ->bindParam('account_name', $accountName, PDO::PARAM_STR)
                ->execute();
        }

        // Добавляю
        return $this->_db->createCommand()
            ->insert('{{account_data}}', array(
                'account_name' => $accountName,
                'valueName'    => 'premium',
                'valueData'    => $timeEnd,
            ));
    }

    /**
     * Удаление привязки по HWID
     *
     * @param string $accountName
     *
     * @return bool
     */
    public function removeHWID($accountName)
    {
        return $this->_db->createCommand("UPDATE `{{accounts}}` SET `allowed_hwid` = '*' WHERE `login` = :login LIMIT 1")
            ->bindParam(':login', $accountName, PDO::PARAM_STR)
            ->execute();
    }

    /**
     * Контроль предметов
     *
     * @param array $itemsIds
     *
     * @return array
     */
    public function getItemsControl(array $itemsIds)
    {
        if(!$itemsIds)
        {
            return array();
        }

        $res = AllItems::model()->findAllByAttributes(array(
            'item_id' => $itemsIds,
        ));

        $itemNames = array();

        foreach($res as $row)
        {
            $itemNames[$row->getPrimaryKey()] = $row;
        }

        unset($res);

        /*
            SELECT
            Max(items.count) AS maxCountItems,Count(items.count) AS countItems,items.owner_id,items.object_id,items.item_id,items.count,items.enchant_level,items.loc,items.loc_data,characters.charId AS char_id,characters.account_name,characters.char_name,
            characters.`level`,characters.curHp,characters.maxCp,characters.curCp,characters.maxMp,characters.curMp,characters.maxHp,characters.x,characters.y,characters.z,characters.exp,characters.sp,characters.pvpkills,characters.pkkills,characters.clanid AS clan_id,
            characters.base_class,characters.title,characters.`online`,characters.onlinetime,clan_data.clan_name,clan_data.clan_level,clan_data.hasCastle,clan_data.hasFort,clan_data.crest_id AS clan_crest,clan_data.reputation_score
            FROM
            items
            LEFT JOIN characters ON items.owner_id = characters.charId
            LEFT JOIN clan_data ON characters.clanid = clan_data.clan_id
            WHERE
            items.item_id IN (57, 4037, 5588, 10)
            GROUP BY
            items.owner_id,
            items.item_id
            ORDER BY
            items.item_id ASC
         */
        $res = $this->_db->createCommand()
            ->select("Max(items.count) AS maxCountItems,Count(items.count) AS countItems,items.owner_id,items.object_id,items.item_id,items.count,items.enchant_level,items.loc,items.loc_data,characters.charId AS char_id,characters.account_name,characters.char_name,
                characters.level,characters.curHp,characters.maxCp,characters.curCp,characters.maxMp,characters.curMp,characters.maxHp,characters.x,characters.y,characters.z,characters.exp,characters.sp,characters.pvpkills,characters.pkkills,characters.clanid AS clan_id,
                characters.base_class,characters.title,characters.online,characters.onlinetime,clan_data.clan_name,clan_data.clan_level,clan_data.hasCastle,clan_data.hasFort,clan_data.crest_id AS clan_crest,clan_data.reputation_score")
            ->leftJoin('characters', 'items.owner_id = characters.charId')
            ->leftJoin('clan_data', 'characters.clanid = clan_data.clan_id')
            ->where(array('in', 'item_id', $itemsIds))
            ->group('items.owner_id, items.item_id')
            ->order('maxCountItems DESC')
            ->from('items')
            ->queryAll();

        $characters = array();

        foreach($res as $item)
        {
            if(!isset($characters[$item['item_id']]['maxTotalItems']))
            {
                $characters[$item['item_id']]['maxTotalItems'] = 0;
            }

            $characters[$item['item_id']]['itemInfo'] = $itemNames[$item['item_id']];
            $characters[$item['item_id']]['characters'][] = $item;
            $characters[$item['item_id']]['maxTotalItems'] += $item['maxCountItems'];
            $characters[$item['item_id']]['totalItems'] = count($characters[$item['item_id']]['characters']);
        }

        foreach(array_diff_key($itemNames, $characters) as $item)
        {
            $characters[$item->item_id]['itemInfo'] = $item;
            $characters[$item->item_id]['characters'] = array();
            $characters[$item->item_id]['maxTotalItems'] = 0;
            $characters[$item->item_id]['totalItems'] = 0;
        }

        return $characters;
    }
}

 

В ловели нет items_delayed, там только items. Не шарю как разобраться :(

Изменено пользователем Crea

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы являетесь клиентом то пишите разрабу в пм, он помогает с такими вопросами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не по теме...

1. может кто подсказать как поменять пусть к админке?

2. как сделать изначально английский язык на сайте а не русский?

 

буду оч. признателен за ответы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не по теме...

1. может кто подсказать как поменять пусть к админке?

2. как сделать изначально английский язык на сайте а не русский?

 

буду оч. признателен за ответы.

2.если по дефолту такой функции нет,то ручками переводить.

1. Link

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...