1. Bitcoin адрес для пожертвований: 1dapfB97R98wg8J3hknWpMDJ7P61CWjNn
    Скрыть объявление
  2. Участникам форума доступна Skype конференция. Присоединяйтесь!
  3. Наши основные группы и каналы: VK, Twitter. Подписывайтесь!
  4. Скрыть объявление

Репутация для ALIGARX

Тема в разделе "Готовые модули", создана пользователем Joe, 23 июн 2010.

  1. Joe Старейшина

    Репутация

    261 / 75


    PHP:
    1.  
    2. <?php
    3.     /* ###############
    4.     ### Вот такая вот фигня..
    5.     ### Тут только функционал, HTML часть сделать может любой не очень ленивый школьник..
    6.     ### Скрипт подойдет для обсолютно любой игры
    7.     ### Есть возможность автоустановки
    8.     ### Тестировалось на AW от AlexPro
    9.     ### Специально для ALIGARX
    10.     ### http://g-craft.ws/
    11.     */ ################
    12.  
    13.  
    14. DEFINE ('INSTALL', false); // Устанавливать ли БД при запуске скрипта.
    15. DEFINE ('UNINSTALL', false); // Удалять ли БД при запуске скрипта.
    16. DEFINE ('UPDATER', false); // Обновляет в базе юзеров репутацию
    17. DEFINE ('REPUT_ATABLE', 'Reputation'); // Название поля в БД игроков
    18. DEFINE ('REPUT_CTABLE', 'Reputation'); // Название таблици для репутации
    19. DEFINE ('USER_TABLE', 'person'); // Название таблици, где хранятся юзеры..
    20. DEFINE ('USER_ID', 'id'); // Поле в таблице юзеров, где хранится идентификатор юзера
    21. DEFINE ('REPUT_AMOUT', 1); // Сколько раз может изменять пользователь репутацию юзеру
    22. DEFINE ('ID_USR', $info['id']); // Идентификатор юзера (ID)
    23. DEFINE ('ID_YOU', $stat['id']); // Идентификатор вас (ID)
    24.  
    25.  
    26.     $rep = new Rep();
    27.     if ( isset($_GET['reput']) ) $rep->GetEdit($_GET['reput']);
    28.  
    29. class Rep
    30. {
    31.     private $sql = Array('query'=>'mysql_query','row'=>'mysql_fetch_row','res'=>'mysql_result');
    32.     var $PRs = 0;
    33.     var $usr = 0;
    34.     var $you = 0;
    35.    
    36.     # Задаются первоначальные параметры
    37.     function __construct()
    38.     {
    39.         if ( INSTALL==true ) $this->Installer();
    40.         if ( UNINSTALL==true ) $this->UnInstall();
    41.         if ( UPDATER==true ) $this->Updaters();
    42.         $this->usr = intval(ID_USR);
    43.         $this->you = intval(ID_YOU);
    44.     }
    45.     # Функция создает все нужное в БД
    46.     # Поле в таблице юзера и таблицу, в которой хранится информация, кому добавлена репутация,
    47.     # Кто ее повышал и как
    48.     private function Installer()
    49.     {
    50.         if ( UNINSTALL==true ) $this->Installer();
    51.         if ( $this->sql['query']("ALTER TABLE `". USER_TABLE . "` ADD `". REPUT_ATABLE ."` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0'")==true and
    52.         $this->sql['query']("CREATE TABLE `". REPUT_CTABLE ."` (`pid` MEDIUMINT( 8 ) UNSIGNED NOT NULL DEFAULT '0',`rid` MEDIUMINT( 8 ) UNSIGNED NOT NULL DEFAULT '0',`res` TINYINT( 3 ) UNSIGNED NOT NULL DEFAULT '0',INDEX ( `pid` , `rid` ) ) ENGINE = MYISAM COMMENT = 'Репутация';")==true
    53.         ) echo 'БД удачно отдедактирована.'; else echo 'Возникла ошибка при корректировании БД.';
    54.     }
    55.     # Функция удаляет следы пребывания репутации в базе игры
    56.     # Удобно если нужно очистить репутацию, то одним разом чистим все что нужно
    57.     private function UnInstall()
    58.     {
    59.         if ( $this->sql['query']("ALTER TABLE `". USER_TABLE . "` DROP `". REPUT_ATABLE ."`")==true and
    60.         $this->sql['query']("DROP TABLE `". REPUT_CTABLE ."`")==true
    61.         ) echo 'БД успешно удалена.'; else echo 'Возникла ошибка при удалении БД.';
    62.     }
    63.     # Эта функция по ID позьзователя определяет его репутацию и возврящает ее..
    64.     # Если юзера в БД не окажется, то вернет 0
    65.     public function PrintRes($id=0)
    66.     {
    67.         if ($id==0) $id = $this->usr;
    68.         $this->PRs = $this->sql['row']($this->sql['query']("SELECT `". REPUT_ATABLE . "` FROM `". USER_TABLE ."` WHERE `". USER_ID ."`=".intval($id).""));
    69.         if ( $this->PRs[0]==true ) return $this->PRs[0]; else return 0;
    70.     }
    71.     # Функция пребавляет +1 или -1 к репутации, но не более раз, чем задано в параметрах..
    72.     # Если параметр $is задан 1, то идет пребавление к репутации, если что-то другое, то снимает репутацию..
    73.     public function GetEdit($is=0)
    74.     {
    75.         $res = $this->sql['res']($this->sql['query']("SELECT COUNT(*) FROM `". REPUT_CTABLE ."` WHERE `pid`=".$this->usr." AND `rid`=".$this->you.""),0);
    76.         if ( $res==false or $res<REPUT_AMOUT )
    77.         {
    78.             $is = ($is<>1) ? 0 : 1;
    79.             if ($is==1) $parm = '+1'; else $parm = '-1';
    80.             $this->sql['query']("UPDATE `". USER_TABLE ."` SET `". REPUT_ATABLE . "`= ". REPUT_ATABLE . $parm ." WHERE `". USER_ID ."`=".$this->usr."");
    81.             $this->sql['query']("INSERT INTO `". REPUT_CTABLE ."` (`pid`, `rid`, `res`) VALUES (". $this->usr .", ". $this->you .", ".$is.");");
    82.         } else echo 'Вы не можете больше изменять репутацию данному пользователю.';
    83.         unset($res);
    84.     }
    85.     # Функция корректирует ошибки..
    86.     private function Updaters()
    87.     {
    88.         $_rs = $this->sql['query']("SELECT `". USER_ID ."`,`". REPUT_ATABLE ."` FROM `". USER_TABLE ."`");
    89.         $i=0;
    90.         while ( $rs = $this->sql['row']($_rs) )
    91.         {
    92.             $i++;
    93.             $res = $this->sql['res']($this->sql['query']("SELECT SUM(res) FROM `". REPUT_CTABLE ."` WHERE `pid`=".$rs[0].""),0);
    94.             if ( $res<>$rs[1] ) $this->sql['query']("UPDATE `". USER_TABLE ."` SET `". REPUT_ATABLE . "`= ".$res." WHERE `". USER_ID ."`=".$rs[0]."");
    95.         } echo 'Обработано '.$i.' юзеров.';
    96.     }
    97. }
    98. ?>
    99.  


    Последнее редактирование модератором: 23 июн 2010
  2. Otto Старейшина

    Репутация

    115 / 53


    А зачем создавать ещё одну таблицу ? и делать столько запросов ?

    Я всё реализовал через 2 поля, которые в поле юзеров. И код мой поменьше.
    У меня всего 2 запроса.
    Щас на Jquery хочю переписать, что бы при изменения репутации страницы инфы игрока не обнавлялась

     
  3. Joe Старейшина

    Репутация

    261 / 75


    Я оформил как мод) если бы делал для себя в игру, то было бы две строчки кода) jquеry уже клиентовая часть, а тут только серверная)
    Я для ИВ не пишу моды, для этого сделал максимальную самостоятельность скрипта, настройка под игру, без редактирования основного скрипта) указал что требуется, и радуешся жизни)
    Вообще, для такой фигни класс не кто не пишет, так как делается элементарно)
    Вообще, читай название темы *wink*

     
  4. Otto Старейшина

    Репутация

    115 / 53


    RICH,
    Теперь ясно и согласен *wink*

     
  5. ALIGARX Старейшина

    Репутация

    21 / 11


    :D:bi:

    К чему нужен был такой гемморой.. действительно ты перестарался, у меня все попроще и доступней.. :bp:

     
  6. Otto Старейшина

    Репутация

    115 / 53


    ALIGARX
    Ну перестарался да, но он написал отдельный скрипт, под кокую игру хочешь под ту и ставь