Главная | Топ серверов | Скины | Регистрация | Вход | English Version Приветствую Вас Гость | Показать правый блок
[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[support] Support
yanakayДата: Вторник, 15.05.2012, 10:37 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Оффлайн
here are code for autorest+item to make res wink
Code

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

/*
Скрипт
*/
Create PROCEDURE    AUTORESET_By_SHAREDNOOB
As
Begin
Set nocount on
Set dateformat dmy --устанавливаем формат даты

Declare --Объявляем переменные
@ItemCount int, --количество
@GroupID int, --группа вещи
@GroupIDHex varbinary(10),
@ItemID int, --номер вещи в групе,
@ItemIDHex varbinary(10),
@ResetLevel int, --левел ресета
@Npp int,
@NppMax int,
@In int,
@InMax int,
@Inventory varbinary(8000),
@PerInv varchar(8000),
@PerInvTMP varchar(8000),
@CharId varchar(10),
@StartPoint int

--Авторесет пройдет за 10 вещей
Set @ItemCount=10
--Авторесет пройдет за джолы
Set @GroupID=14
Set @ItemID=16
--Левел ресета
Set @ResetLevel=350

--Переведенные в HEX значения
set @GroupIDHex=dbo.HexStrToVarBin(master.dbo.fn_varbintohexstr(cast(@GroupID*16 as varbinary(1))) )
set @ItemIDHex=dbo.HexStrToVarBin(master.dbo.fn_varbintohexstr(cast(@ItemID as varbinary(1))) )
-- select @GroupIDHex GroupIDHex, @ItemIDHex ItemIDHex

--select '1' '1'
-----====================================================================
--1) Находим чаров которые претендуют на ресет
-- То есть у которых подходящий левел (в данном случае 350) и которые находятся в оффлайне
Declare @TLS table (CharID varchar(10), inventory varbinary(8000), npp int identity(1,1))
Insert into @TLS (CharID, inventory)
select name, inventory
FROM Character c
JOIN MEMB_STAT m ON c.AccountID = m.memb___id
COLLATE Latin1_general_CI_AI
WHERE (clevel>=@ResetLevel) and (ConnectStat = 0)
--если таких нет то выходим из процедуры
if (Select count(*) from @TLS)=0 Goto EX

--2) Далее раскрываем все что есть в персонал шопе
Declare @PS table (CharID varchar(10), ItemBin Varbinary(1000), ItemId int, Ready int, npp int identity(1,1))
set @NppMax=(select max(npp) from @TLS)
set @InMax=32
Set @Npp=0

--select '2' '2'

While @Npp<>@NppMax
begin
Set @Npp=@Npp+1
Set @In=0
Set @StartPoint=-15
Select @CharId=CharId,
@Inventory=substring(Inventory, 1217, 512) --из инвентаря выбрали только персонал шоп для анализа
from @TLS
where npp=@Npp
While @In<>@InMax
begin
Set @In=@In+1
Set @StartPoint=@StartPoint+16
Insert into @PS (CharID, ItemBin, ItemId, Ready)
select @CharID, substring(@Inventory, @StartPoint, 16), @In, 0
end

end

--После распаковки весчей в персонал шопе находим среди них джолы
Update p set
ready=1
from @PS p
where substring(ItemBin,1,1)=@ItemIDHex
and substring(ItemBin,10,1)=@GroupIDHex

--Находим тех по кому действительно нужно сделать ресет
--то есть тех у кого есть заданоое количестко указанного шмота
Declare @TRES table (CharId varchar(10), inventory varbinary(8000), npp int identity (1,1))
insert into @TRES (CharId)
select CharId
from @PS
where ready=1
group by CharId
having sum(1)>=@ItemCount

--Если нет таких у кого нужное количество то на выход
if (Select count(*) from @TRES)=0 Goto EX

--select '3' '3'
--Далее Нужно очистить весчи из персонал шопа у тех кому надо
--Причем взять именно то количество вещей сколько надо и не больше !
set @NppMax=(select max(npp) from @TRES)
Set @Npp=0
While @Npp<>@NppMax
begin
Set @Npp=@Npp+1
Set @In=0

Select @CharId=CharId
from @TRES
where npp=@Npp

While @In<>@ItemCount
begin
Set @In=@In+1
Set @StartPoint=(select top 1 npp
from @PS
where CharId=@CharId
and ready=1
and ItemBin<>0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
order by ItemId)
Update p set
ItemBin=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
from @PS p
where npp=@StartPoint
end

end

select '4' '4'

--Далее Нужно собрать всю строку inventory во едино для каждого из ресетных чаров
set @NppMax=(select max(npp) from @TRES)
Set @Npp=0
select @Npp Npp, @NppMax NppMax
While @Npp<>@NppMax
begin
Set @Npp=@Npp+1
Set @In=0

Select @CharId=CharId
from @TRES
where npp=@Npp

Set @PerInv=''
--select 'цикл 1' 'цикл 1'
While @In<>32
begin
Set @In=@In+1
Set @PerInvTMP=master.dbo.fn_varbintohexstr(
(select ItemBin from @PS where CharId=@CharId and ItemId=@In))
Set @PerInv=@PerInv+substring(@PerInvTMP,3,32)
--  select @PerInvTMP
--select 'цикл 2' 'цикл 2'
end

Select @Inventory=Inventory
from @TLS
where CharId=@CharId

Set @PerInvTMP=master.dbo.fn_varbintohexstr(substring(@Inventory, 1, 1216))
Set @PerInvTMP=@PerInvTMP+@PerInv

--    select @PerInvTMP
Update t set
Inventory=dbo.HexStrToVarBin(@PerInvTMP)
from @TRES t
where npp=@Npp
end

--И наконец то сбрасываем статы
UPDATE c SET
clevel= 1, --Уровень
Experience= 0, --Експ
--    Money=Money-100000000, --Ресер стоит 100000000 Зен
Strength = Case when ((class = 0) OR (class = 1))  then 18 --DW SM
when ((class = 16) OR (class = 17))  then 28 --DK BK
when ((class = 32) OR (class = 33))  then 22 --Elf MElf
when (class = 48 )    then 26 --MG
when (class = 64)    then 26 --DL
End,

Dexterity = Case when ((class = 0) OR (class = 1))  then 18 --DW SM
when ((class = 16) OR (class = 17))  then 20 --DK BK
when ((class = 32) OR (class = 33))  then 25 --Elf MElf
when (class = 48 )    then 26 --MG
when (class = 64)    then 26 --DL
End,

Vitality = Case when ((class = 0) OR (class = 1))  then 15 --DW SM
when ((class = 16) OR (class = 17))  then 25 --DK BK
when ((class = 32) OR (class = 33))  then 20 --Elf MElf
when (class = 48 )    then 26 --MG
when (class = 64)    then 26 --DL
End,

Energy = Case when ((class = 0) OR (class = 1))  then 30 --DW SM
when ((class = 16) OR (class = 17))  then 10 --DK BK
when ((class = 32) OR (class = 33))  then 15 --Elf MElf
when (class = 48 )    then 26 --MG
when (class = 64)    then 26 --DL
End,

--    MagicList = NULL, --магии и скилы не горят
MapNumber= Case when ((class = 0) OR (class = 1))  then 0 --DW SM
when ((class = 16) OR (class = 17))  then 0 --DK BK
when ((class = 32) OR (class = 33))  then 3 --Elf MElf
when (class = 48 )    then 0 --MG
when (class = 64)    then 0 --DL
End,

MapPosX= Case when ((class = 0) OR (class = 1))  then 125 --DW SM
when ((class = 16) OR (class = 17))  then 125 --DK BK
when ((class = 32) OR (class = 33))  then 176 --Elf MElf
when (class = 48 )    then 125 --MG
when (class = 64)    then 125 --DL
End,

MapPosY= Case when ((class = 0) OR (class = 1))  then 123 --DW SM
when ((class = 16) OR (class = 17))  then 123 --DK BK
when ((class = 32) OR (class = 33))  then 116 --Elf MElf
when (class = 48 )    then 123 --MG
when (class = 64)    then 123 --DL
End,

PkLevel= 3,

Resets = Resets+1,

LevelUpPoint = Case when ((class = 0) OR (class = 1))  then 500 --DW SM
when ((class = 16) OR (class = 17))  then 500 --DK BK
when ((class = 32) OR (class = 33))  then 500 --Elf MElf
when (class = 48 )    then 650 --MG
when (class = 64)    then 700 --DL
End * (Resets + 1),
inventory=t.inventory
FROM Character c
Inner join @TRES t on c.name=t.charid
COLLATE Latin1_general_CI_AI

--, PS varbinary(1000
--select * from @TLS
--select * from @PS
--select * from @TRES

EX:

End

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


@ItemCount - How much items need for reset
@GroupID - Group id Items(*).txt
@ItemID - number of item from items.txt
@ResetLevel-Which level need for reset

Реклама


<a href='http://s2.muo.lv'>
<img border='0' width='468' height='60'
src='http://s2.muo.lv/static/logo/468x60.php'
alt='muo.lv MuOnline 1.02K GameServer'>
</a>


Сообщение отредактировал yanakay - Вторник, 15.05.2012, 13:06
 
  • Страница 1 из 1
  • 1
Поиск:

This page is designed to be viewed best with Chrome. Home Page MyMuWeb By Vaflan. Хостинг от uCoz.