Скрипт поощрения

Скрипт поощрения для Mu Online

Данный скрипт предназначен для игры Mu Online, для хранения голосов использует, в качестве базы данных, MSSQL.
Для успешного начисления кредитов в таблицу MEMB_CREDITS, при голосовании игрок должен вводить ник персонажа.
При правильной установке, скрипт на экран ничего выводить не должен, в таблицу должны занестись голоса, игрокам начислены кредиты.

Установка

Для установки потребуется наличие: базы данных (в примере используется MSSQL) и планировщик Cron на хостинге (для автоматического выполнения скрипта, можно и без него вручную выполнять).
Установка поделенна на пункты:
  1. Необходимо создать таблицу в базе данных MSSQL, выполнив следующий код в Server Management Studio.
    USE [MuOnline]
    на первой строчке означает, в какую базу данных (в нашем случае это MuOnline), создавать новую таблицу qtop_vote.
    USE [MuOnline]
    GO
    /****** Object:  Table [dbo].[qtop_vote]     ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[qtop_vote](
    	[id] [int] IDENTITY(1,1) NOT NULL,
    	[v_id] [bigint] NOT NULL,
    	[v_username] [varchar](50) COLLATE Cyrillic_General_CI_AS NULL,
    	[v_date] [varchar](50) COLLATE Cyrillic_General_CI_AS NULL,
    	[v_time] [varchar](50) COLLATE Cyrillic_General_CI_AS NULL,
    	[v_type] [int] NULL,
    	[v_ip] [varchar](50) COLLATE Cyrillic_General_CI_AS NULL
    ) ON [PRIMARY]
    
    GO
    SET ANSI_PADDING OFF
            
            
  2. Необходимо поместить файл qtop_vote_reward.php на свой сайт в корень сайта или в любую из директорий, но не в пустую папку! Иначе смогут скачать php файл и узнать ваши данные от базы. Если папка пустая, то защитите ее наличием рядом индексного файла или .htaccess.
    
    	/* Скрипт без копирования статистики, для игры MuOnline, с использованием MSSQL 
    	   Данный скрипт подготовлен администраторами Q-top.ru */
    	
    	# Данные, для соединения с базой данных (БД)
    	$connect['host_name'] 	= 'localhost'; 	# Где расположенна БД 
    	$connect['user_name'] 	= 'sa'; 		# Имя пользователя БД 
    	$connect['password'] 	= ''; 			# Пароль пользователя БД
    	$connect['db_name'] 	= 'MuOnline'; 	# Имя БД (name_db)
    	
    	# Адрес статистики, его можно посмотреть в услугах на сайте 
    	# Например /profiles/10/100/f96s94yfx68819s00v77asxv.txt
    	$v_config['statistic_url'] = '/profiles/12213/1212/337ff21126f0ac23c75befdcdb50b.txt';
    	
    	# Сколько бонусов за обычный голос
    	$v_config['reward'] = 2;
    	
    	# Сколько бонусов за vip голос
    	$v_config['reward_sms'] = 4;
    	
    	# Максимальная длина ника/логина игрока
    	$v_config['user_max_length'] = 20;
    	
    	
    	
    	/* Подключение к БД */
    	# Устанавливаем соединение с базой данных (в данном примере используется MSSQL)
    	$db = @mssql_connect($connect['host_name'], $connect['user_name'], $connect['password']);
    	if(!$db) die('Ошибка в подключении базы данных');
    	mssql_select_db($connect['db_name'], $db);
    
    	
    	# Открываем файл статистики
    	$fd = fopen($v_config['statistic_url'], 'r');
    	while (!feof($fd))
    	{
    
    		# Считываем построчно данные из блокнота
    		$str = fgets($fd, 1024);
    
    
    		# Разбиваем строку $str на отдельные элементы, используя в качестве разделителя ||
    		list($vote['id'], $vote['date'], $vote['time'], $vote['ip'], $vote['user_name'], $vote['type']) = explode('||', $str);
    				
    				
    				
    		# Обрезаем возможные пробелы в типе голоса
    		$vote['type'] = trim($vote['type']);		
    
    
    
    		# Голоса без ников/логинов не обрабатываем, т.к. начислять поощрение некому. Переходим к следующему голосу
    		if (empty($vote['user_name'])) continue;
    
    
    
    		# Проверяем длину ника/логина, если она не удолетворяет заданному значению, то данный ник будет игнорироваться и цикл перейдет к следующему голосу 
    		if (mb_strlen($vote['user_name'], 'UTF-8') > $v_config['user_max_length']) continue; 
    
    
    
    		# В нике/логине допустимы следующие символы: a-zA-Z0-9
    		$vote['user_name'] = preg_replace("/[^a-zA-Z0-9]/", '', $vote['user_name']);
    	
    	
    	
    		# Проверяем по таблице qtop_vote, был ли уже учтен голос, проверка по id голосу (он всегда уникальный, даже после сброса месячной статистики)
    		if (mssql_num_rows(mssql_query("SELECT v_id
    											FROM qtop_vote 
    												WHERE v_id='".$vote['id']."' ")) > 0) continue;
    		
    		
    		
    		# Вставляем в базу qtop_vote новый голос
    		$insert = mssql_query("INSERT INTO qtop_vote 
    								(v_id, v_date, v_time, v_ip, v_username, v_type) 
    									VALUES ('".$vote['id']."', '".$vote['date']."', '".$vote['time']."', '".$vote['ip']."', '".$vote['user_name']."', '".$vote['type']."')");
    		 
    		 
    		
    		 # Если запрос вставки прошел успешно, то переходим к начислению поощрения
    		 if ($insert)
    		 {
    			
    			# Получаем логин данного персонажа, для поощрения
       			$user = mssql_fetch_assoc(mssql_query("SELECT AccountID, Name 
    													FROM Character 
    														WHERE Name='".$vote['user_name']."' "));
       
       
       			# Если не существует или пустое имя/логин то, прерываем текущий и переходим к следующему голосу
       			if (!isset($user['AccountID']) or empty($user['AccountID'])) continue;
    
       
    			# Начисление бонусов в таблицу MEMB_CREDITS, для простых голосов
    			if($vote['type'] == 1) 	mssql_query ("UPDATE MEMB_CREDITS 
    													SET credits=credits+'".$v_config['reward']."' 
    														WHERE memb___id='".$user['AccountID']."'");
    			
    			
    			# Начисление бонусов в таблицу MEMB_CREDITS, для vip голосов
    			if($vote['type'] == 2) 	mssql_query ("UPDATE MEMB_CREDITS 
    													SET credits=credits+'".$v_config['reward_sms']."' 
    														WHERE memb___id='".$user['AccountID']."'");
    		 }
    		 
    	
    	}
    
    
    	/* Если у вас имеются вопросы, проблемы, идеи по улучшению, сообщайте по скайпу: q-top.ru или в группу в vk: https://vk.com/club36638011 рассмотрим! */
    
    	
    	
    	
  3. Теперь необходимо настроить Cron (для автоматического выполнения скрипта). Cron находится на вашем хостинге сайта, задайте промежуток времени, по прошествии которого скрипт будет автоматически выполняться, например каждый день, раз в 4 часа.
    Описание Cron при использовании панели ISP manager.
Если вы захотите очистить таблицу с голосами (в этом нет большой необходимости), то делайте это в последний день месяца.