avatar_KJloyH

Скрипт ресета! Настройка для MU online.

Автор KJloyH, 2013 Март 01, 14:30

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

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

Ключевые слова [SEO] mu onlineскрипт ресетаавторесетloveмагазин аккаунтов

KJloyH

Кто может написать скрипт для ресета ?
Скрипт состоим в том что бы за ресет брался определенный предмет
В моём случаем это Love ( в 1 сезоне он назывался Remedy of love )

f1x

Это тебе нужно в сайте переписывать систему ресета.
Или же приобрети готовое
http://mymuweb.ru/forum/20-1836-1

KJloyH

Мне надо скрипт для SQL

SanneA

ЦитироватьМне надо скрипт для SQL
/reset ?

иначе тебе нужно именно php

worope

#4
а причем тут пхп человеку нужен скрипт авторесета с забором вещей.
вот скрипт хранимой процедуры:
Спойлер

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
[свернуть]

функция приоброзования varchar to varbinary нужная для работы скрипта

Спойлер
create FUNCTION dbo.HexStrToVarBin(@hexstr varchar(8000))
RETURNS varbinary(8000)
AS BEGIN
DECLARE @hex char(2), @i int, @count int, @b varbinary(8000)
SET @count = LEN(@hexstr)
SET @b = CAST('' as varbinary(1))

IF SUBSTRING(@hexstr, 1, 2) = '0x'
SET @i = 3
ELSE
SET @i = 1

WHILE (@i <= @count)
BEGIN
SET @hex = SUBSTRING(@hexstr, @i, 2)
SET @b = @b + CAST(CASE WHEN SUBSTRING(@hex, 1, 1) LIKE '[0-9]'
THEN CAST(SUBSTRING(@hex, 1, 1) as int)
ELSE CAST(ASCII(UPPER(SUBSTRING(@hex, 1, 1)))-55 as int)
END
* 16 + CASE WHEN SUBSTRING(@hex, 2, 1) LIKE '[0-9]'
THEN CAST(SUBSTRING(@hex, 2, 1) as int)
ELSE CAST(ASCII(UPPER(SUBSTRING(@hex, 2, 1)))-55 as int)
END as binary(1))
SET @i = @i + 2
END
RETURN @b
END
[свернуть]

создав эти процедуры вам остаеться только прописать в Job "exec AUTORESET_By_SHAREDNOOB" и авторесет за вещь готов))

Скрипт от SharedNoob

milik

А не знаете как сделать немного иначе, мне нужно так:
1-9 ресеты, нужно 2 штуки JOL на ресет
10-19 ресеты, нужно 4 штуки JOL+2 на ресет
20-29 ресеты, нужно 6 штук JOL+3 на ресет
и т.д
подскажите как сделать такое или дайте кто то скрипт,спасибо.

epmak

у тебя выше скрипт приведен. впилить туда проверки на ресеты и изменить хекс камней и все...

milik

я не шарю в етом
подскажи как проверку на ресы сделать

epmak

1. нанять программиста, коев тут уйма
2. научится саому писать код для SQL. это не сложно, учитывая кол-во написанных статей. правда на ег-нетворк.

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