Показать сообщение отдельно
Старый 23.12.2012, 01:28   #1
SCFMuTeam
Освоившийся
Аватар для SCFMuTeam
OFFLINE
Регистрация: 09.11.2012
Сообщений: 50
Благодарностей:
18 всего
Мнения: + 56
Репутация: 55

[Гайд] По установке премиума и кредитов для 223 сервера.


1. Меняем rfacc.ini в папке с акаунт логин биллинг агентом на такой:

[Options]
DBSTR = Provider=MSDASQL;DSN=BILLING;UID=sa;PWD=пароль;
ErrDBSTR =
LogLevel = 2


2. Меняем rfacc.ini в папке с зоной на такой:

[Options]
DBSTR = Provider=SQLOLEDB;Source=localhost;UID=sa;PWD=паро ль;Initial Catalog = BILLING;
ErrDBSTR =
LogLevel = 2


3.1 Создаём базу BILLING заполняем её из скрипта(Смотрим вложение)
3.2 Ставим фикс


USE [BILLING]
GO

/****** Object: StoredProcedure [dbo].[RF_ChargeBalance] by TriRozhka Script Date: 02/19/2010 15:25:25 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[RF_ChargeBalance]
@s_userid varchar(12)
, @s_character varchar(50)
, @s_pscode varchar(20)
, @s_quantity int
, @s_server varchar (50)
, @s_scode bigint
, @s_price int
, @s_dcrate int
, @p9 int output
AS

set nocount on

DECLARE
@totalAmount int,
@cashBalance int

select @cashBalance=Cash from tbl_user where UserID=@s_userid
set @totalAmount=@s_price*@s_quantity
if @@error <> 0 or @s_quantity < 1 or @s_quantity >99 or @s_price < 1
begin
set @p9 = 0
return
end
else
if @s_dcrate < 100 and (@totalAmount*((100-@s_dcrate)/100)) <= @cashBalance
begin
set @p9 = 1
set @cashBalance=@cashbalance-(@totalAmount*((100-@s_dcrate)/100))
insert into tbl_cashlogrf (userid,character,pscode,quantity,server,scode,pri ce,dcrate,status)
values (@s_userid,@s_character,@s_pscode,@s_quantity,@s_s erver,@s_scode,@s_price,@s_dcrate,@p9)
update tbl_user set Cash = @cashBalance where UserID = @s_userid
return
end
else
if (@cashbalance + @s_dcrate) >= @totalAmount
begin
set @p9 = 1
set @cashBalance=@cashbalance-@totalAmount+@s_dcrate
insert into tbl_cashlogrf (userid,character,pscode,quantity,server,scode,pri ce,dcrate,status)
values (@s_userid,@s_character,@s_pscode,@s_quantity,@s_s erver,@s_scode,@s_price,@s_dcrate,@p9)
update tbl_user set Cash = @cashBalance where UserID = @s_userid
return
end
else
begin
set @p9 = 0
return
end

GO [/HIDE]


3.4 Удаляем таблицу RF_User и применяем запрос

USE [BILLING]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[tbl_user](
[ID] [int] IDENTITY(0,1) NOT NULL,
[UserID] [varchar](20) NOT NULL,
[Cash] [float] NOT NULL,
CONSTRAINT [PK_tbl_user] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[tbl_user] ADD CONSTRAINT [DF_tbl_user_Cash] DEFAULT ((0)) FOR [Cash]
GO [/HIDE]

4. Меняем имя процедуры в базе RF_User pSelect_AccountPass_China на pSelect_AccountPass (Там уже есть такая процедура её тоже переименуйте как-нибудь)

5. Логины из RF_User.tbl_rfaccount должны быть перенесены в BILLING.tbl_personal_billing и BILLING.tbl_user ( в юзере важна только 2 колонка с логином в первой к примеру айди акка)
запрос на перенос акков в биллинг


insert into BILLING.dbo.tbl_personal_billing (id, BillingType, EndDate, RemainTime)
select id, 1, GETDATE(), 0 from RF_USER.dbo.tbl_rfaccount

insert into BILLING.dbo.tbl_user (UserID, Cash)
select id, 0 from RF_USER.dbo.tbl_rfaccount

update RF_User.dbo.tbl_rfaccount
set accounttype = 1
where accounttype = 0 [/HIDE]

Коротко о таблицах:
tbl_user - Хранятся кредиты
tbl_personal_billing:
- BillingType состояние акка. 1 не премиум. 2 премиум. Смена производится автоматически посредством процедуры RF_CheckAccountStatus Пример:
1. статус 2, в колонке с датой окончания дата меньшая чем текущая, персонаж входит в игру. персонажу будет предложено продлить сервис с отправкой на сайт (хексится в лаунчере)
Повторный логин в игру приведёт к тому что игрок войдёт на сервис без премиум статуса.
2. Статус 2 игрок в игре. Дата текущая становится больше чем дата окончания премиума. Рейты премиум будут оключены. табличка премиум сервис сохранится. При перелогине игрок сразу
войдёт в игру непремиум статусом.
3. Статус 1 игрок. входит в игру. Игрок простого сервиса.
Ремейн тайм не трогаем никакого функционала.

tbl_cashList - коды и цены итемов надо для защиты шопа. (должны совпадать с клиентскими + серверные соответственно RU нациию. Перепись всех итемов не обязательна, можно только те которые хотите чтобы продавались)
tbl_cashlogrf - данные о том кто сколько и чего купил и когда. ВНИМАНИЕ Вносятся только валидные транзакции в случае попыток взлома эти запросы отображены не будут (попыток неудачных =) Если статус 1 значит транзакция прошла фильтр если 0 что вряд ли то не прошла)

Процедуры:
RF_CheckAccountStatus - проверка на прем еже5ти минутная для всех онлайн игроков.
RF_CheckBalance - проверка кредитов
RF_ChargeBalance - запрос на покупку с проверкой на взлом
RF_PING - у меня эта процедура просто пингует комп поому как сервер не высылает с ней ничего и назад не просит то я просто сделал тупо пинг. Требует особых настроек активации доступа к стринг операциям. короче хз можете не юзать.

6. Хексим зону. Ищем “81.” Там рядом будет BILLING и 1521. 1521 это порт его меняем на 61433. айпи на 127.0.0.1 или айпи скуля. Там ниже где то пароль na401 или как то так. его хексим на пароль к базе. (ОДБС и всё такое не забываем править )

7. Везде ставим RU аккаунт логин зона биллинг агент. В настройках ФГ USE = YES ( вместо TRUE ) Контрол и манагу можно US ибо при РУ функции урежутся.


BILLING

взято с mmodb.info

Последний раз редактировалось Вульф88; 24.12.2012 в 07:18.
 
Ответить с цитированием