Как сохранить экспу при покупке в Cash Shop в MU Online?

Автор logic, 2010 Июнь 17, 15:16

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlineсерверные файлы MUпроблемаcash shopсохранить экспуэкспа на сервере

logic

Есть cash shop вот такой:

При покупки какого либо увеличения експы, после switch, пропадает, можно как-то сохранять?
И как понять 200%, это +200х , или + 200% от експы на сервере?

Sky_

То, что не сохраняется при перезаходе не сохраняется - это в ГСе, наврятли исправиш.. А 200% это значит +200% от экспа, установленного на сервере..

3BEPb

не сохраняет скорее всего в базе не хватает таблички или столбцов

netpartizan

#3
в процедуре wz_perioditeminsert

перед строчкой INSERT INTO T_PeriodItem_Info

добавь SET DATEFORMAT YMD

logic

#4
Цитата: netpartizan от 2010 Июнь 17, 23:15  в процедуре wz_perioditeminsert

перед строчкой INSERT INTO T_PeriodItem_Info

добавь SET DATEFORMAT YMD
мм, а если нету T_PeriodItem_Info, а только T_PeriodItem_Data?
И еще у меня нету таблицы T_PeriodItem_Data, в Tables. Я так понял ее надо создать?
Вот процедура:

CREATE PROCEDURE [dbo].[WZ_PeriodItemInsert]
@memb_guid int,
@CharName  varchar(10),
@ItemCode   int,
@ItemEffect1   int,
@ItemEffect2   int,
@ItemUseTime   int,
@DateTime   varchar(20)
AS
BEGIN
BEGIN TRANSACTION
SET NOCOUNT ON

DECLARE @CurUseTime int
SET @CurUseTime = 0

IF EXISTS(SELECT memb_guid FROM T_PeriodItem_Data  WITH (READUNCOMMITTED)
WHERE memb_guid = @memb_guid AND memb__char = @CharName)
BEGIN
SELECT @CurUseTime = UseTime FROM T_PeriodItem_Data WHERE memb_guid = @memb_guid AND memb__char = @CharName

IF @CurUseTime <> 0
BEGIN
SELECT 2 AS QueryResult
END
ELSE
BEGIN
UPDATE T_PeriodItem_Data SET
ItemCode = @ItemCode,
ItemEffect1 = @ItemEffect1,
ItemEffect2 = @ItemEffect2,
UseTime = @ItemUseTime,
ExpireDate = @DateTime
WHERE memb_guid = @memb_guid AND memb__char = @CharName
SELECT 0 AS QueryResult
END
END
ELSE
BEGIN
INSERT INTO T_PeriodItem_Data (memb_guid,memb__char,ItemCode,ItemEffect1,ItemEffect2,UseTime,ExpireDate) VALUES
(@memb_guid,@CharName,@ItemCode,@ItemEffect1,@ItemEffect2,@ItemUseTime,@DateTime
)
SELECT 0 AS QueryResult
END

IF(@@Error <> 0 )
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
SET NOCOUNT OFF
END


/****** Object:  StoredProcedure [dbo].[WZ_PeriodItemSelect]    Script Date: 08/21/2008 19:09:12 ******/
SET ANSI_NULLS ON

GO

3BEPb

#5
ну у меня такая и всё сохраняется

USE [MuOnline]
GO
/****** Объект:  StoredProcedure [dbo].[WZ_PeriodItemInsert]    Дата сценария: 06/18/2010 20:07:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[WZ_PeriodItemInsert]
@UserGuid   int,
@CharacterName   varchar(10),
@ItemCode   int,
@OptionType   tinyint,
@EffectType1   tinyint,
@EffectType2   tinyint,
@TotalUsePeriod   int,
@ExpireDate   varchar(20)
as
BEGIN
DECLARE @ErrorCode int
DECLARE @PeriodItemIndex int

SET @ErrorCode = 0
SET @PeriodItemIndex = 0

SET XACT_ABORT ON
Set  nocount on
begin transaction

-- OptionType捞 鞍绊 荤侩吝牢 酒捞袍捞 乐绰瘤 犬牢茄促.
SELECT  @PeriodItemIndex = PeriodIndex FROM T_PeriodItemInfo WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND OptionType = @OptionType AND UsedInfo = 1

IF ( @PeriodItemIndex != 0 )
BEGIN
UPDATE T_PeriodItemInfo SET UsedInfo = 0 WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND OptionType = @OptionType AND UsedInfo = 1
END

INSERT INTO T_PeriodItemInfo (UserGuid, CharacterName, ItemCode, OptionType, EffectType1, EffectType2, LeftTime, BuyDate, ExpireDate, UsedInfo) VALUES
( @UserGuid, @CharacterName, @ItemCode, @OptionType, @EffectType1, @EffectType2, @TotalUsePeriod, GETDATE(), @ExpireDate, 1 )
IF( @@Error <> 0 )
BEGIN
SET @ErrorCode = 2
END

IF ( @ErrorCode  <> 0 )
rollback transaction
ELSE
commit transaction

SELECT @ErrorCode

Set  nocount off
SET XACT_ABORT OFF
END



logic

Цитата: 3BEPb от 2010 Июнь 18, 20:09  ну у меня такая и всё сохраняется
А таблица есть T_PeriodItem_Data ?

3BEPb

#7
Цитата: logic от 2010 Июнь 18, 19:15  А таблица есть T_PeriodItem_Data ?
нет только T_PeriodItemInfo

USE [MuOnline]
GO
/****** Объект:  Table [dbo].[T_PeriodItemInfo]    Дата сценария: 06/18/2010 20:36:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[T_PeriodItemInfo](
[PeriodIndex] [int] IDENTITY(1,1) NOT NULL,
[UserGuid] [int] NOT NULL,
[CharacterName] [char](10) NOT NULL,
[ItemCode] [int] NOT NULL,
[EffectType1] [tinyint] NOT NULL,
[EffectType2] [tinyint] NULL,
[UsedTime] [int] NOT NULL CONSTRAINT [DF_T_PeriodItemInfo_UsedTime]  DEFAULT (0),
[LeftTime] [int] NOT NULL,
[BuyDate] [smalldatetime] NOT NULL,
[ExpireDate] [smalldatetime] NOT NULL,
[UsedInfo] [tinyint] NOT NULL CONSTRAINT [DF_T_PeriodItemInfo_UsedInfo]  DEFAULT (0),
[OptionType] [tinyint] NOT NULL CONSTRAINT [DF_T_PeriodItemInfo_OptionType]  DEFAULT (2)
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

в моей функции нет обращения к T_PeriodItem_Data
и у меня несколько процедур
WZ_PeriodItemDelete
USE [MuOnline]
GO
/****** Объект:  StoredProcedure [dbo].[WZ_PeriodItemDelete]    Дата сценария: 06/18/2010 20:37:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[WZ_PeriodItemDelete]
@UserGuid int,
@CharacterName varchar(10)
AS BEGIN
DECLARE @ErrorCode int
DECLARE @ItemInfoCount int

SET @ErrorCode = 0
SET @ItemInfoCount = 0

SET nocount on

SELECT @ItemInfoCount = COUNT(*) FROM T_PeriodItemInfo where UserGuid = @UserGuid AND CharacterName = @CharacterName

IF( @ItemInfoCount < 1 )
BEGIN
 SET @ErrorCode = 1
END

IF( @ErrorCode <> 1 )
BEGIN
 UPDATE T_PeriodItemInfo SET UsedInfo = 0 WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName
END

SELECT @ErrorCode

SET nocount off
END


WZ_PeriodItemInsert
USE [MuOnline]
GO
/****** Объект:  StoredProcedure [dbo].[WZ_PeriodItemInsert]    Дата сценария: 06/18/2010 20:37:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[WZ_PeriodItemInsert]
@UserGuid int,
@CharacterName varchar(10),
@ItemCode int,
@OptionType tinyint,
@EffectType1 tinyint,
@EffectType2 tinyint,
@TotalUsePeriod int,
@ExpireDate varchar(20)
as
BEGIN
DECLARE @ErrorCode int
DECLARE @PeriodItemIndex int

SET @ErrorCode = 0
SET @PeriodItemIndex = 0

SET XACT_ABORT ON
Set  nocount on  
begin transaction

-- OptionType捞 鞍绊 荤侩吝牢 酒捞袍捞 乐绰瘤 犬牢茄促.
SELECT  @PeriodItemIndex = PeriodIndex FROM T_PeriodItemInfo WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND OptionType = @OptionType AND UsedInfo = 1

IF ( @PeriodItemIndex != 0 )
BEGIN
 UPDATE T_PeriodItemInfo SET UsedInfo = 0 WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND OptionType = @OptionType AND UsedInfo = 1
END

INSERT INTO T_PeriodItemInfo (UserGuid, CharacterName, ItemCode, OptionType, EffectType1, EffectType2, LeftTime, BuyDate, ExpireDate, UsedInfo) VALUES
( @UserGuid, @CharacterName, @ItemCode, @OptionType, @EffectType1, @EffectType2, @TotalUsePeriod, GETDATE(), @ExpireDate, 1 )
IF( @@Error <> 0 )
BEGIN
 SET @ErrorCode = 2
END

IF ( @ErrorCode  <> 0 )
 rollback transaction
ELSE
 commit transaction

SELECT @ErrorCode

Set  nocount off
SET XACT_ABORT OFF
END


WZ_PeriodItemSelect
USE [MuOnline]
GO
/****** Объект:  StoredProcedure [dbo].[WZ_PeriodItemSelect]    Дата сценария: 06/18/2010 20:38:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[WZ_PeriodItemSelect]
@UserGuid int,
@CharacterName varchar(10)
as
BEGIN
DECLARE @ErrorCode int
DECLARE @ItemInfoCount int
DECLARE @PeriodIndex int
DECLARE @ExpireDate smalldatetime
DECLARE @UsedInfo tinyint

SET @PeriodIndex = 0
SET @ErrorCode = 0
SET @ItemInfoCount = 0
SET @UsedInfo = 0

Set nocount on

-- 父丰 老磊啊 瘤抄 酒捞袍篮 荤侩阑 吝窜 矫挪促.
DECLARE CUR CURSOR FOR SELECT [PeriodIndex], [ExpireDate], [UsedInfo]  FROM T_PeriodItemInfo WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND UsedInfo = 1 FOR UPDATE
OPEN CUR
FETCH NEXT FROM CUR INTO @PeriodIndex, @ExpireDate, @UsedInfo
WHILE( @@fetch_status <> -1 )
BEGIN
 IF( @@fetch_status <> -2 )
 BEGIN
  IF( @ExpireDate < GetDate() )
  BEGIN
   UPDATE T_PeriodItemInfo SET UsedInfo = 0 WHERE PeriodIndex = @PeriodIndex
  END
 END
 FETCH NEXT FROM CUR INTO @PeriodIndex, @ExpireDate, @UsedInfo
END

-- 酒捞袍 父丰 老磊啊 巢篮 酒捞袍阑 免仿矫难霖促.

SELECT *, DATEDIFF( minute, BuyDate, GETDATE() ) AS UsedMinutes, DATEDIFF( minute, GETDATE(), ExpireDate ) AS LeftMinutes FROM T_PeriodItemInfo where UserGuid = @UserGuid AND CharacterName = @CharacterName AND UsedInfo = 1
--SELECT * FROM T_PeriodItemInfo where UserGuid = @UserGuid AND CharacterName = @CharacterName AND UsedInfo = 1
IF( @@Error <> 0 )
BEGIN
 SET @ErrorCode = -1
END

CLOSE CUR
DEALLOCATE CUR

Set  nocount off
END


WZ_PeriodItemUpdate
USE [MuOnline]
GO
/****** Объект:  StoredProcedure [dbo].[WZ_PeriodItemUpdate]    Дата сценария: 06/18/2010 20:39:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[WZ_PeriodItemUpdate]
@UserGuid int,
@CharacterName varchar(10),
@ItemCode int,
@UsedTime int,
@LeftTime int
as
BEGIN
DECLARE @ErrorCode int
DECLARE @ItemInfoCount int
DECLARE @RetLeftTime int

SET @ErrorCode = 0
SET @ItemInfoCount = 0
SET @RetLeftTime = 0

SET XACT_ABORT ON

Set nocount on

begin transaction

SELECT @ItemInfoCount = COUNT(*) FROM T_PeriodItemInfo where UserGuid = @UserGuid AND CharacterName = @CharacterName AND UsedInfo = 1

IF( @ItemInfoCount <> 1 )
BEGIN
 SET @ErrorCode = 1
END
ELSE
BEGIN
 UPDATE T_PeriodItemInfo SET UsedTime = UsedTime + @UsedTime, LeftTime = @LeftTime WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND ItemCode = @ItemCode AND UsedInfo = 1
 IF( @@Error <> 0 )
 BEGIN
  SET @ErrorCode = 2
 END
END

SELECT @RetLeftTime = LeftTime FROM T_PeriodItemInfo where UserGuid = @UserGuid AND CharacterName = @CharacterName AND ItemCode = @ItemCode AND UsedInfo = 1
IF ( @RetLeftTime <= 0 )
BEGIN
 UPDATE T_PeriodItemInfo SET UsedInfo = 0, LeftTime = 0 WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND ItemCode = @ItemCode AND UsedInfo = 1
 SET @ErrorCode = 3
END

IF ( @ErrorCode  <> 0  AND @ErrorCode <> 3 )
 rollback transaction
ELSE
 commit transaction

select @ErrorCode

Set  nocount off
SET XACT_ABORT OFF
END


logic

#8
Цитата: 3BEPb от 2010 Июнь 18, 20:23  нет только T_PeriodItemInfo
в моей функции нет обращения к T_PeriodItem_Data
А да заметил. Можешь выложить пожалуйста скрипт создания таблички T_PeriodItemInfo? Для query A.
Мне именно T_PeriodItemInfo твою, которая в Table а не процедруах

3BEPb

Цитата: logic от 2010 Июнь 18, 19:32  А да заметил. Можешь выложить пожалуйста скрипт создания таблички T_PeriodItemInfo? Для query A.
Мне именно T_PeriodItemInfo твою, которая в Table а не процедруах
я выложил смотри лудше (wait)

logic

#10
Сделал все, но все равно не сохраняет.
Вот что на ГС, во время покупки амуета

Это как делаю switch

Это в Dataserver.exe


И правильно ли я впихнул  SET DATEFORMAT YMD  ?


Попрежнему не сохраняетв  базу.. уже все перепробывал

netpartizan

Цитата: logic от 2010 Июнь 19, 06:40  И правильно ли я впихнул  SET DATEFORMAT YMD  ?


Попрежнему не сохраняетв  базу.. уже все перепробывал
перед и после, есть разница?)

logic

Цитата: netpartizan от 2010 Июнь 19, 11:33  перед и после, есть разница?)
Все равно...
Может есть смысл вернуть те таблицы которые были вместо T_PeriodInfo сделать T_PeriodData как и должно быть? Хотя разницы не особа вижу в этом..

up
Спойлер
[свернуть]
Спойлер
[свернуть]

8BitCore

проблема в Dataserver-e. выход edataserver.
вот почему у килла не работало, а с релиза ронни работало.

SmallHabit

WZ_PeriodItemDeleteCREATE Procedure WZ_PeriodItemDelete

@UserGuid int,
@CharacterName varchar(10)
AS
BEGIN
DECLARE @ErrorCode int
DECLARE @ItemInfoCount int

SET @ErrorCode = 0
SET @ItemInfoCount = 0

SET NOCOUNT ON

SELECT @ItemInfoCount = COUNT(*) FROM T_PeriodItem_Info where UserGuid = @UserGuid AND CharacterName = @CharacterName

IF( @ItemInfoCount < 1 )
BEGIN
SET @ErrorCode = 1
END

IF( @ErrorCode <> 1 )
BEGIN
UPDATE T_PeriodItem_Info SET UsedInfo = 0 WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName
END

SELECT @ErrorCode

SET NOCOUNT OFF
END

GO

WZ_PeriodItemInsertCREATE Procedure WZ_PeriodItemInsert

@UserGuid int,
@CharacterName varchar(10),
@ItemCode int,
@OptionType tinyint,
@EffectType1 tinyint,
@EffectType2 tinyint,
@TotalUsePeriod int,
@ExpireDate varchar(20)
AS
BEGIN
DECLARE @ErrorCode int
DECLARE @PeriodItemIndex int

SET @ErrorCode = 0
SET @PeriodItemIndex = 0

SET XACT_ABORT ON
SET NOCOUNT ON

BEGIN TRANSACTION

SELECT  @PeriodItemIndex = PeriodIndex FROM T_PeriodItem_Info WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND OptionType = @OptionType AND UsedInfo = 1

IF ( @PeriodItemIndex != 0 )
BEGIN
UPDATE T_PeriodItem_Info SET UsedInfo = 0 WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND OptionType = @OptionType AND UsedInfo = 1
END

INSERT INTO T_PeriodItem_Info (UserGuid, CharacterName, ItemCode, OptionType, EffectType1, EffectType2, LeftTime, BuyDate, ExpireDate, UsedInfo) VALUES
( @UserGuid, @CharacterName, @ItemCode, @OptionType, @EffectType1, @EffectType2, @TotalUsePeriod, GETDATE(), @ExpireDate, 1 )
IF( @@Error <> 0 )
BEGIN
SET @ErrorCode = 2
END

IF ( @ErrorCode  <> 0 )
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION

SELECT @ErrorCode

SET NOCOUNT OFF
SET XACT_ABORT OFF
END

GO

WZ_PeriodItemSelectCREATE Procedure WZ_PeriodItemSelect

@UserGuid int,
@CharacterName varchar(10)
AS
BEGIN
DECLARE @ErrorCode int
DECLARE @ItemInfoCount int
DECLARE @PeriodIndex int
DECLARE @ExpireDate smalldatetime
DECLARE @UsedInfo tinyint

SET @PeriodIndex = 0
SET @ErrorCode = 0
SET @ItemInfoCount = 0
SET @UsedInfo = 0

SET NOCOUNT ON
DECLARE CUR CURSOR FOR SELECT [PeriodIndex], [ExpireDate], [UsedInfo]  FROM T_PeriodItem_Info WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND UsedInfo = 1 FOR UPDATE
OPEN CUR
FETCH NEXT FROM CUR INTO @PeriodIndex, @ExpireDate, @UsedInfo
WHILE( @@fetch_status <> -1 )
BEGIN
IF( @@fetch_status <> -2 )
BEGIN
IF( @ExpireDate < GetDate() )
BEGIN
UPDATE T_PeriodItem_Info SET UsedInfo = 0 WHERE PeriodIndex = @PeriodIndex
END
END
FETCH NEXT FROM CUR INTO @PeriodIndex, @ExpireDate, @UsedInfo
END

SELECT *, DATEDIFF( minute, BuyDate, GETDATE() ) AS UsedMinutes, DATEDIFF( minute, GETDATE(), ExpireDate ) AS LeftMinutes FROM T_PeriodItem_Info where UserGuid = @UserGuid AND CharacterName = @CharacterName AND UsedInfo = 1
IF( @@Error <> 0 )
BEGIN
SET @ErrorCode = -1
END

CLOSE CUR
DEALLOCATE CUR

SET NOCOUNT OFF
END

GO

WZ_PeriodItemUpdateCREATE Procedure WZ_PeriodItemUpdate

@UserGuid int,
@CharacterName varchar(10),
@ItemCode int,
@UsedTime int,
@LeftTime int
AS
BEGIN
DECLARE @ErrorCode int
DECLARE @ItemInfoCount int
DECLARE @RetLeftTime int

SET @ErrorCode = 0
SET @ItemInfoCount = 0
SET @RetLeftTime = 0

SET XACT_ABORT ON
SET NOCOUNT ON

BEGIN TRANSACTION

SELECT @ItemInfoCount = COUNT(*) FROM T_PeriodItem_Info where UserGuid = @UserGuid AND CharacterName = @CharacterName AND UsedInfo = 1

IF( @ItemInfoCount <> 1 )
BEGIN
SET @ErrorCode = 1
END
ELSE
BEGIN
UPDATE T_PeriodItem_Info SET UsedTime = UsedTime + @UsedTime, LeftTime = @LeftTime WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND ItemCode = @ItemCode AND UsedInfo = 1
IF( @@Error <> 0 )
BEGIN
SET @ErrorCode = 2
END
END

SELECT @RetLeftTime = LeftTime FROM T_PeriodItem_Info where UserGuid = @UserGuid AND CharacterName = @CharacterName AND ItemCode = @ItemCode AND UsedInfo = 1
IF ( @RetLeftTime <= 0 )
BEGIN
UPDATE T_PeriodItem_Info SET UsedInfo = 0, LeftTime = 0 WHERE UserGuid = @UserGuid AND CharacterName = @CharacterName AND ItemCode = @ItemCode AND UsedInfo = 1
SET @ErrorCode = 3
END

IF ( @ErrorCode  <> 0  AND @ErrorCode <> 3 )
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION

SELECT @ErrorCode

SET NOCOUNT OFF
SET XACT_ABORT OFF
END

GO

Таблица T_PeriodItem_Info
CREATE TABLE [T_PeriodItem_Info] (
[PeriodIndex] [int] IDENTITY (1, 1) NOT NULL ,
[UserGuid] [int] NOT NULL ,
[CharacterName] [char] (10) COLLATE Korean_Wansung_CI_AS NOT NULL ,
[ItemCode] [int] NOT NULL ,
[EffectType1] [tinyint] NOT NULL ,
[EffectType2] [tinyint] NULL ,
[UsedTime] [int] NOT NULL CONSTRAINT [DF_T_PeriodItem_Info_UsedTime] DEFAULT (0),
[LeftTime] [int] NOT NULL ,
[BuyDate] [smalldatetime] NOT NULL ,
[ExpireDate] [smalldatetime] NOT NULL ,
[UsedInfo] [tinyint] NOT NULL CONSTRAINT [DF_T_PeriodItem_Info_UsedInfo] DEFAULT (0),
[OptionType] [tinyint] NOT NULL CONSTRAINT [DF_T_PeriodItem_Info_OptionType] DEFAULT (2)
) ON [PRIMARY]
GO

DataServer 0.7.0.4 - https://uploadbox.com/files/31d8cc8d49/ || https://www.megaupload.com/?d=CPKOFXB6
CashShop - https://uploadbox.com/files/604244dc58/ || https://www.megaupload.com/?d=PEQ6YXP8

Похожие темы (5)