Cevap: __Open4 Gemi Savaşını "Nereids Island Active" Aktif Etmek__
ALTER PROCEDURE UPDATE_KNIGHTS
@sRet smallint OUTPUT,
@bType tinyint,
@strCharID char(20),
@sClanID smallint,
@bDomination tinyint
AS
-- =============================================
-- Modify by katanatr.
-- Update : 2013-10-11
-- =============================================
DECLARE @bCount tinyint, @bMembers tinyint, @bUserMembers tinyint, @sKnightsID smallint
DECLARE @ViceChief1 char(20), @ViceChief2 char(20), @ViceChief3 char(20)
SELECT @bCount = COUNT(*) FROM KNIGHTS WHERE IDNum = @sClanID
IF (@bCount = 0) AND (@bType NOT IN(19, 20, 23))
BEGIN
SET @sRet = 7
RETURN
END
IF (@bType = 18)
BEGIN
SELECT @sKnightsID = Knights FROM USERDATA WHERE strUserID = @strCharID
IF (@sKnightsID <= 0)
BEGIN
SELECT TOP 1 @sKnightsID = sIDNum FROM KNIGHTS_USER WHERE strUserID = @strCharID
IF (@sKnightsID IS NOT NULL)
BEGIN
DELETE FROM KNIGHTS_USER WHERE strUserID = @strCharID AND sIDNum = @sKnightsID
UPDATE KNIGHTS SET Members = (SELECT COUNT(*) FROM USERDATA WHERE Knights = @sKnightsID) WHERE IDNum = @sKnightsID
END
END
SELECT @bCount = COUNT(*) FROM KNIGHTS_USER WHERE strUserID = @strCharID
IF @bCount >= 1
BEGIN
SET @sRet = 5
RETURN
END
END
SELECT @bMembers = Members, @ViceChief1 = ViceChief_1, @ViceChief2 = ViceChief_2, @ViceChief3 = ViceChief_3 FROM KNIGHTS WHERE IDNum = @sClanID
IF (@bType = 18)
BEGIN
SELECT @bUserMembers = COUNT(*) FROM USERDATA WHERE Knights = @sClanID
IF (@bMembers >= 36) OR (@bUserMembers >= 36)
BEGIN
SET @sRet = 8
RETURN
END
END
ELSE IF (@bType NOT IN(19, 20, 23)) AND (@bMembers > 36)
BEGIN
SET @sRet = 8
RETURN
END
SELECT @bCount = COUNT(*) FROM USERDATA WHERE strUserID = @strCharID
IF (@bCount = 0)
BEGIN
SET @sRet = 2
RETURN
END
BEGIN TRAN
IF (@bType = 18) -- Join
BEGIN
UPDATE KNIGHTS SET Members = Members + 1 WHERE IDNum = @sClanID
INSERT INTO KNIGHTS_USER (sIDNum, strUserID) VALUES (@sClanID, @strCharID)
UPDATE USERDATA SET Knights = @sClanID WHERE strUserID = @strCharID
END
ELSE IF (@bType = 19) OR (@bType = 20) OR (@bType = 23) -- Withdraw / Remove / Reject
BEGIN
IF (@bMembers <= 1)
UPDATE KNIGHTS SET Members = 1 WHERE IDNum = @sClanID
ELSE
UPDATE KNIGHTS SET Members = Members - 1 WHERE IDNum = @sClanID
DELETE FROM KNIGHTS_USER WHERE strUserID = @strCharID
IF (@ViceChief1 = @strCharID)
UPDATE KNIGHTS SET ViceChief_1 = NULL WHERE IDNum = @sClanID
IF (@ViceChief2 = @strCharID)
UPDATE KNIGHTS SET ViceChief_2 = NULL WHERE IDNum = @sClanID
IF (@ViceChief3 = @strCharID)
UPDATE KNIGHTS SET ViceChief_3 = NULL WHERE IDNum = @sClanID
END
ELSE IF (@bType = 25) -- Change Chief
BEGIN
UPDATE KNIGHTS SET Chief = @strCharID WHERE IDNum = @sClanID
IF (@ViceChief1 = @strCharID)
UPDATE KNIGHTS SET ViceChief_1 = NULL WHERE IDNum = @sClanID
IF (@ViceChief2 = @strCharID)
UPDATE KNIGHTS SET ViceChief_2 = NULL WHERE IDNum = @sClanID
IF (@ViceChief3 = @strCharID)
UPDATE KNIGHTS SET ViceChief_3 = NULL WHERE IDNum = @sClanID
END
ELSE IF (@bType = 26) -- Change Vice Chief
BEGIN
IF (@ViceChief1 IS NOT NULL) AND (@ViceChief2 IS NOT NULL) AND (@ViceChief3 IS NOT NULL)
BEGIN
IF ((LEN(@ViceChief1) != 0) AND (LEN(@ViceChief2) != 0) AND (LEN(@ViceChief3) != 0))
BEGIN
SET @sRet = 8
COMMIT TRAN
RETURN
END
END
IF (@ViceChief1 IS NULL) OR (LEN(@ViceChief1) = 0)
UPDATE KNIGHTS SET ViceChief_1 = @strCharID WHERE IDNum = @sClanID
ELSE IF (@ViceChief2 IS NULL) OR (LEN(@ViceChief2) = 0)
UPDATE KNIGHTS SET ViceChief_2 = @strCharID WHERE IDNum = @sClanID
ELSE IF (@ViceChief3 IS NULL) OR (LEN(@ViceChief3) = 0)
UPDATE KNIGHTS SET ViceChief_3 = @strCharID WHERE IDNum = @sClanID
END
/* ELSE IF (@bType = 27) -- Change Officer
UPDATE KNIGHTS SET ViceChief_2 = @strCharID WHERE IDNum = @sClanID
*/ ELSE IF (@bType = 76) -- Clan Point Method
UPDATE KNIGHTS SET ClanPointMethod = @bDomination WHERE IDNum = @sClanID
ELSE IF (@bType = 95) -- Change Vice Chief
BEGIN
IF (@ViceChief1 IS NOT NULL) AND (@ViceChief2 IS NOT NULL) AND (@ViceChief3 IS NOT NULL)
BEGIN
IF ((LEN(@ViceChief1) != 0) AND (LEN(@ViceChief2) != 0) AND (LEN(@ViceChief3) != 0))
BEGIN
SET @sRet = 8
COMMIT TRAN
RETURN
END
END
IF (@ViceChief1 IS NULL) OR (LEN(@ViceChief1) = 0)
UPDATE KNIGHTS SET ViceChief_1 = @strCharID WHERE IDNum = @sClanID
ELSE IF (@ViceChief2 IS NULL) OR (LEN(@ViceChief2) = 0)
UPDATE KNIGHTS SET ViceChief_2 = @strCharID WHERE IDNum = @sClanID
ELSE IF (@ViceChief3 IS NULL) OR (LEN(@ViceChief3) = 0)
UPDATE KNIGHTS SET ViceChief_3 = @strCharID WHERE IDNum = @sClanID
END
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
SET @sRet = 2
RETURN
END
IF (@bType = 20) -- Remove
BEGIN
UPDATE USERDATA SET Knights = -1, Fame = 0 WHERE strUserID = @strCharID
DELETE FROM KNIGHTS_USER WHERE strUserID = @strCharID
END
COMMIT TRAN
SET @sRet = 0
GO