[Help] SQL Triggers with MuOnline Server

hrisiz

Active Member
Joined
Feb 3, 2010
Messages
429
Reaction score
81
Здр. ползвам 97d+99i на DarkMaster и имам следния проблем.

Правя си някакъв SQL Trigger който си работи без проблеми като си пускам SQL заявки написани от мен, но вляза ли в сървъра избирам героя и ми забива не може да извърши заявката или нз нещо странно става и играта забива на Loading след като съм избрал героя.

Смятам че е от това че добавям нови Insert и Delete заявки към други таблици и може би променям result-a от заявката в играта и така тя да влиза в безкраен цикъл понеже не може да намери правилния резултат(само предположение ако някой мисли че е възможно ако може да каже как да го фиксна)
 
Last edited:
Все още търся проблема :( някой ако има идеи да дава :)
 
Покажи тригърите да погледна какво точно правят.
 
CREATE TRIGGER OnMoveAFKPrize
ON Character
AFTER UPDATE
AS
Declare @character nvarchar(50) = (SELECT Name FROM inserted)
Declare @account varchar(10) = (SELECT AccountID FROM inserted)
Declare @characters_count int

SET @characters_count = (Select Count(Character.Name)
From Character,AFKCharacters
Where
Character.Name=@character AND
Character.AccountID = AFKCharacters.AccountId AND
(
Character.MapPosX != AFKCharacters.PosX OR
Character.MapPosY != AFKCharacters.PosY OR
Character.MapNumber != AFKCharacters.Map
))

if(@characters_count = 1)
BEGIN
Declare @map int = (Select MapNumber From Character Where Name=@character)
Declare @time datetime = (Select Time FROM AFKCharacters Where AccountId=@account)
IF(@time < DATEADD(mi, -30, GETDATE()))
BEGIN
if (@map = 0)
BEGIN
Update Renas Set Renas=Renas+(((DATEDIFF(mi,@time,GETDATE()))/30)*4) Where AccountId=@account
END
else if (@map = 2)
BEGIN
Update Bank Set Bank=Bank+(((DATEDIFF(mi,@time,GETDATE()))/30)*4000000) Where AccountId=@account
END
else if (@map = 3)
BEGIN
Update Stones Set Stones=Stones+(((DATEDIFF(mi,@time,GETDATE()))/30)*4) Where AccountId=@account
END
END
Delete From AFKCharacters Where AccountId=@account
IF(@map = 0 OR @map = 2 OR @map = 3)
BEGIN
Insert Into AFKCharacters Select AccountId,MapNumber,GETDATE(),MapPosX,MapPosY,Name From Character Where Name=@character
END
END

else if(@characters_count > 1)
BEGIN
Delete From AFKCharacters Where AccountId=@account
Insert Into SQLProblems values('There more then one acc on '+@account+' Account','GET PRIZE FOR AFK TRIGGER ON CHARACTER')
END
GO

Ето но не мисля че е от него понеже като просто пиша правилни заявки към DB нямам проблем само в игра като съм.
 
Last edited:
Аз да попитам друго нещо... това не може ли да стане чрез сайта ти? А и преди време правих тригер за лимит на гилдиите и явно гс-то не ги обича баш, защото тригера беше верен, но след поставянето му през играта не можеше да се прави нищо свързано с гилдиите.
 
ами то разбира се, че може, но най-правилно и най-точно мисля, че ще е с trigger, а и ми е интересно да пробвам да се занимавам и с triggers :) Надявах се, че така ще стане, ако не по скоро бих го направил на Job, но тогава трябва да обхожда всеки един играч и когато има много играчи става бавно :(
 
Last edited:
ами то разбира се, че може, но най-правилно и най-точно мисля, че ще е с trigger, а и ми е интересно да пробвам да се занимавам и с triggers :) Надявах се, че така ще стане, ако не по скоро бих го направил на Job, но тогава трябва да обхожда всеки един играч и когато има много играчи става бавно :(

Освен че бавно става и лагаво..
 
доообре де... и все пак, защо не го направиш с php : )
 
Добре де. Искам просто да разбера защо го прави проблема .... Знам как да го направя както в сайта така и на JOB, но искам да разбера какъв е проблема с trigger-a . Защото може утре да ми дотрябва нещо което няма как без trigger и какво правим тогава ...
 
Пробвай без да принтваш разни неща в тази част от кода.

END
print 'added'
END
Delete From AFKCharacters Where AccountId=@account
IF(@map = 0 OR @map = 2 OR @map = 3)
BEGIN
print @character
Insert Into AFKCharacters Select AccountId,MapNumber,GETDATE(),MapPosX,MapPosY,Name From Character Where Name=@character
END
END
 
Пробвай без да принтваш разни неща в тази част от кода.

Опс извинявам се това беше за тест иначе ги няма тия print-ове :) сега ще едитна горния пост с правилния код :)