Вопрос к знатокам :)

risi

Прославленный
Местный
Сообщения
476
Розыгрыши
0
Репутация
358
Реакции
201
Баллы
1 435
Ув. Админы, подскажите плж каким образом можно вынуть процедуру создания чара с базы. Почему спрашиваю - не подошел ни 1 запрос из тех что были на форуме и стартовый лвл не изменился. Играюсь с ПТС-кой, вангант.
P.S. Еще раз уточняю PTS :)
 
Последнее редактирование модератором:

В смысле "вынуть" ? В базе и смотри "хранимку" lin_CreateChar.
Нашел, правой кнопкой мыши её жмакни, выбирай "модифай" и смотри её сколько душе угодно.
Из загашника нарыл от ГФ Вагант 2015го года.
Даже пример есть закоментаренный как левел выставить:
--set @Exp=25259243744
--set @SP=50000000
--set @Lev=85

Собственно не забывай, что уровень это прежде всего экспа.

Код:
/**
name:    lin_CreateChar
desc:    create user_data, quest, user_slot

history:    2007-03-30    modified by btwinuni
*/
CREATE procedure [dbo].[lin_CreateChar]
( 
    @char_name    nvarchar(24),
    @account_name    nvarchar(24),
    @account_id    int,
    @pledge_id    int,
    @builder        tinyint,
    @gender    tinyint,
    @race        tinyint,
    @class        tinyint,
    @world        smallint,
    @xloc        int,
    @yloc        int,
    @zloc        int,
    @HP        float,
    @MP        float,
    @SP        int,
    @Exp        bigint,
    @Lev        tinyint,
    @align        smallint,
    @PK        int,
    @Duel        int,
    @PKPardon    int,
    @FaceIndex    int = 0,
    @HairShapeIndex    int = 0,
    @HairColorIndex    int = 0
) 
as

--set @Exp=25259243744
--set @SP=50000000
--set @Lev=85

set nocount on

declare @char_id int

set @char_id = 0
set @char_name = rtrim(@char_name)


if(@FaceIndex>7)set @FaceIndex=0
if(@HairShapeIndex>4)set @HairShapeIndex=0
if(@HairColorIndex>3)set @HairColorIndex=0

if @char_name like N''%[^a-zA-Z0-9]%''
begin
    raiserror (''Character name has space : name = [%s]'', 16, 1, @char_name) 
    return -1
end

if @char_name like N''% %''
begin
    raiserror (''Character name has space : name = [%s]'', 16, 1, @char_name) 
    return -1
end

if @char_name like N''% %''
begin
    raiserror (''Character name has space : name = [%s]'', 16, 1, @char_name) 
    return -1
end

-- check user_data
if exists(select char_name from user_data (nolock) where char_name = @char_name)
begin
    raiserror (''Character name is used: name = [%s]'', 16, 1, @char_name)
    return -1
end

-- check user_prohibit
if exists(select char_name from user_prohibit (nolock) where char_name = @char_name)
begin
    raiserror (''Character name is prohibited: name = [%s]'', 16, 1, @char_name)
    return -1
end

declare @user_prohibit_word nvarchar(20)
select top 1 @user_prohibit_word = words from user_prohibit_word (nolock) where @char_name like ''%'' + words + ''%''
if @user_prohibit_word is not null
begin
    raiserror (''Character name has prohibited word: name = [%s], word[%s]'', 16, 1, @char_name, @user_prohibit_word)
    return -1
end

-- check reserved name
declare @reserved_name nvarchar(50)
declare @reserved_account_id int
select top 1 @reserved_name = char_name, @reserved_account_id = account_id from user_name_reserved (nolock) where used = 0 and char_name = @char_name
if not @reserved_name is null
begin
    if not @reserved_account_id = @account_id
    begin
        raiserror (''Character name is reserved by other player: name = [%s]'', 16, 1, @char_name)
        return -1
    end
end

-- insert user_data
insert into user_data (
    char_name, account_name, account_id, pledge_id, builder, gender, race, class, subjob0_class,
    world, xloc, yloc, zloc, HP, MP, max_hp, max_mp, SP, Exp, Lev, align, PK, PKpardon, duel,
    create_date, face_index, hair_shape_index, hair_color_index
)
values (
    @char_name, @account_name, @account_id, @pledge_id, @builder, @gender, @race, @class, @class,
    @world, @xloc, @yloc, @zloc, @HP, @MP, @HP, @MP, @SP, @Exp, @Lev, @align, @PK, @Duel, @PKPardon,
    GETDATE(), @FaceIndex, @HairShapeIndex, @HairColorIndex
)
 
if (@@error = 0)
begin
    set @char_id = @@identity
    insert into quest (char_id) values (@char_id)
    insert into user_slot (char_id) values (@char_id)
end

select @char_id

if @char_id > 0
begin
    -- make user_history 
    exec lin_InsertUserHistory @char_name, @char_id, 1, @account_name, NULL
    if not @reserved_name is null
        update user_name_reserved set used = 1 where char_name = @reserved_name
end
 
Назад
Сверху Снизу