function ClearGuildSkills(RoleID) for i = 1, 6 do local level = role.IsLearnedSkill(RoleID, 69437 + i) if level ~= nil then role.RemoveSkill(RoleID, 69437 + i) end end end local function ActivateGuildProtectorSkill(MsgID, TargetID, RoleID, ProtectorLevel, skillBaseId) if ProtectorLevel <= 0 then return end ClearGuildSkills(RoleID) role.AddSkill(RoleID, skillBaseId + ProtectorLevel) msg.AddMsgEvent(MsgID, 20, 950806) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) end function c5800124_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) local GuildID = guild.GetRoleGuildID(RoleID) local GuildPos = -1 local GuildLevel = role.GetGuildAtt(RoleID, 1) local GuildLeaderID = role.GetGuildAtt(RoleID, 0) local GuildMaterial = guild.GetGuildMaterial(GuildID) local GuildMaterialRequirement = {2000, 5000, 11000, 20000, 32000, 47000, 65000, 86000, 110000, 137000} -- guild.GetGuildValue: Value1=уровень покровителя, Value2=время последнего использования local rawValue1, rawValue2 = guild.GetGuildValue(GuildID) local ProtectorLevel, LastTime = ParseGuildProtectorValues(rawValue1, rawValue2) local repairLastTime = LastTime if repairLastTime < 0 then repairLastTime = 0 end local needsRepair = (tonumber(rawValue1) or 0) ~= ProtectorLevel or (tonumber(rawValue2) or 0) ~= repairLastTime if needsRepair and GuildID ~= nil and GuildID ~= -1 and GuildID ~= 4294967295 then guild.SetGuildValue(GuildID, ProtectorLevel, repairLastTime) end -- Страховка для индексации skillStats (на случай неконсистентных данных в БД/скрипт-данных) local StatLevel = tonumber(ProtectorLevel) or 0 if StatLevel < 1 then StatLevel = 1 elseif StatLevel > 10 then StatLevel = 10 end local skillStats = {} skillStats[1] = {{1000, 7000}, {11000, 11000}, {22000, 14000}, {33000, 17000}, {44000, 21000}, {55000, 25000}, {66000, 29000}, {77000, 34000}, {88000, 39000}, {99000, 44000}} skillStats[2] = {{1000, 7000}, {11000, 11000}, {22000, 14000}, {33000, 17000}, {44000, 21000}, {55000, 25000}, {66000, 29000}, {77000, 34000}, {88000, 39000}, {99000, 44000}} skillStats[3] = {{500, 300}, {800, 800}, {1100, 1300}, {1400, 1800}, {1700, 2300}, {2000, 2800}, {2300, 3300}, {2600, 3800}, {2900, 4300}, {3200, 4800}} skillStats[4] = {{500, 300}, {800, 800}, {1100, 1300}, {1400, 1800}, {1700, 2300}, {2000, 2800}, {2300, 3300}, {2600, 3800}, {2900, 4300}, {3200, 4800}} skillStats[5] = {{100, 132}, {200, 264}, {300, 396}, {400, 528}, {500, 660}, {600, 792}, {700, 924}, {800, 1056}, {900, 1188}, {1000, 1320}} skillStats[6] = {{2500, 4500}, {3000, 5000}, {3500, 5500}, {4000, 6000}, {4500, 6500}, {5000, 7000}, {5500, 7500}, {6000, 8000}, {6500, 8500}, {7000, 9000}} local money = role.GetRoleSilver(MapID, InstanceID, RoleID) local skillLearned1 = role.GetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill1"]) local skillLearned2 = role.GetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill2"]) local skillLearned3 = role.GetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill3"]) local skillLearned4 = role.GetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill4"]) local skillLearned5 = role.GetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill5"]) local skillLearned6 = role.GetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill6"]) GuildPos = guild.GetRoleGuildPos(GuildID, RoleID) local MsgID = msg.BeginMsgEvent() if GuildID == nil or GuildID == -1 or GuildID == 4294967295 then msg.AddMsgEvent(MsgID, 20, 950769) msg.AddMsgEvent(MsgID, 24, TargetID) else if TalkIndex == -1 or TalkIndex == 8 then msg.AddMsgEvent(MsgID, 20, 950770) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 19, GuildID) msg.AddMsgEvent(MsgID, 9, ProtectorLevel) msg.AddMsgEvent(MsgID, 21, 4) msg.AddMsgEvent(MsgID, 1, 950771) if GuildPos == 2 or GuildPos == 3 then msg.AddMsgEvent(MsgID, 21, 5) msg.AddMsgEvent(MsgID, 1, 950773) end if ProtectorLevel > 0 then msg.AddMsgEvent(MsgID, 21, 6) msg.AddMsgEvent(MsgID, 1, 950777) end elseif TalkIndex == 4 then msg.AddMsgEvent(MsgID, 20, 950772) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 21, 8) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 5 or TalkIndex == 9 then if ProtectorLevel < 10 then msg.AddMsgEvent(MsgID, 20, 950774) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 19, GuildID) msg.AddMsgEvent(MsgID, 9, ProtectorLevel) msg.AddMsgEvent(MsgID, 9, GuildMaterialRequirement[ProtectorLevel + 1]) msg.AddMsgEvent(MsgID, 9, ProtectorLevel + 1) msg.AddMsgEvent(MsgID, 21, 7) msg.AddMsgEvent(MsgID, 1, 950776) else msg.AddMsgEvent(MsgID, 20, 950775) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 19, GuildID) msg.AddMsgEvent(MsgID, 9, ProtectorLevel) end msg.AddMsgEvent(MsgID, 21, 8) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 6 or TalkIndex == 13 then msg.AddMsgEvent(MsgID, 20, 950778) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 21, 11) msg.AddMsgEvent(MsgID, 1, 950779) msg.AddMsgEvent(MsgID, 21, 21) msg.AddMsgEvent(MsgID, 1, 950780) msg.AddMsgEvent(MsgID, 21, 31) msg.AddMsgEvent(MsgID, 1, 950781) msg.AddMsgEvent(MsgID, 21, 41) msg.AddMsgEvent(MsgID, 1, 950782) msg.AddMsgEvent(MsgID, 21, 51) msg.AddMsgEvent(MsgID, 1, 950783) msg.AddMsgEvent(MsgID, 21, 61) msg.AddMsgEvent(MsgID, 1, 950784) msg.AddMsgEvent(MsgID, 21, 8) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 7 then if GuildLevel >= ProtectorLevel then if GuildMaterial >= GuildMaterialRequirement[ProtectorLevel + 1] then guild.SetGuildValue(GuildID, ProtectorLevel + 1, LastTime) guild.ModifyGuildMaterial(GuildID, -1, GuildMaterialRequirement[ProtectorLevel + 1] * (-1), -1) msg.AddMsgEvent(MsgID, 20, 950801) msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 950799) msg.AddMsgEvent(MsgID, 24, TargetID) end else msg.AddMsgEvent(MsgID, 20, 950800) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, ProtectorLevel) end msg.AddMsgEvent(MsgID, 21, 9) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 11 then if skillLearned1 == 0 then msg.AddMsgEvent(MsgID, 20, 950788) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[1][1][1]) msg.AddMsgEvent(MsgID, 9, skillStats[1][1][2]) msg.AddMsgEvent(MsgID, 21, 12) msg.AddMsgEvent(MsgID, 1, 950786) else msg.AddMsgEvent(MsgID, 20, 950787) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[1][StatLevel][1]) msg.AddMsgEvent(MsgID, 9, skillStats[1][StatLevel][2]) msg.AddMsgEvent(MsgID, 21, 14) msg.AddMsgEvent(MsgID, 1, 950785) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 12 then if money >= 10000000 then role.DecRoleSilver(MapID, InstanceID, RoleID, 10000000, -1) role.SetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill1"], 1) msg.AddMsgEvent(MsgID, 20, 950803) msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 950967) msg.AddMsgEvent(MsgID, 24, TargetID) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 14 then ActivateGuildProtectorSkill(MsgID, TargetID, RoleID, ProtectorLevel, 6943800) elseif TalkIndex == 21 then if skillLearned2 == 0 then msg.AddMsgEvent(MsgID, 20, 950790) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[2][1][1]) msg.AddMsgEvent(MsgID, 9, skillStats[2][1][2]) msg.AddMsgEvent(MsgID, 21, 22) msg.AddMsgEvent(MsgID, 1, 950786) else msg.AddMsgEvent(MsgID, 20, 950789) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[2][StatLevel][1]) msg.AddMsgEvent(MsgID, 9, skillStats[2][StatLevel][2]) msg.AddMsgEvent(MsgID, 21, 24) msg.AddMsgEvent(MsgID, 1, 950785) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 22 then if money >= 10000000 then role.DecRoleSilver(MapID, InstanceID, RoleID, 10000000, -1) role.SetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill2"], 1) msg.AddMsgEvent(MsgID, 20, 950803) msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 950967) msg.AddMsgEvent(MsgID, 24, TargetID) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 24 then ActivateGuildProtectorSkill(MsgID, TargetID, RoleID, ProtectorLevel, 6943900) elseif TalkIndex == 31 then if skillLearned3 == 0 then msg.AddMsgEvent(MsgID, 20, 950792) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[3][1][1]) msg.AddMsgEvent(MsgID, 9, skillStats[3][1][2]) msg.AddMsgEvent(MsgID, 21, 32) msg.AddMsgEvent(MsgID, 1, 950786) else msg.AddMsgEvent(MsgID, 20, 950791) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[3][StatLevel][1]) msg.AddMsgEvent(MsgID, 9, skillStats[3][StatLevel][2]) msg.AddMsgEvent(MsgID, 21, 34) msg.AddMsgEvent(MsgID, 1, 950785) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 32 then if money >= 10000000 then role.DecRoleSilver(MapID, InstanceID, RoleID, 10000000, -1) role.SetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill3"], 1) msg.AddMsgEvent(MsgID, 20, 950803) msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 950967) msg.AddMsgEvent(MsgID, 24, TargetID) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 34 then ActivateGuildProtectorSkill(MsgID, TargetID, RoleID, ProtectorLevel, 6944000) elseif TalkIndex == 41 then if skillLearned4 == 0 then msg.AddMsgEvent(MsgID, 20, 950794) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[4][1][1]) msg.AddMsgEvent(MsgID, 9, skillStats[4][1][2]) msg.AddMsgEvent(MsgID, 21, 42) msg.AddMsgEvent(MsgID, 1, 950786) else msg.AddMsgEvent(MsgID, 20, 950793) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[4][StatLevel][1]) msg.AddMsgEvent(MsgID, 9, skillStats[4][StatLevel][2]) msg.AddMsgEvent(MsgID, 21, 44) msg.AddMsgEvent(MsgID, 1, 950785) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 42 then if money >= 10000000 then role.DecRoleSilver(MapID, InstanceID, RoleID, 10000000, -1) role.SetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill4"], 1) msg.AddMsgEvent(MsgID, 20, 950803) msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 950967) msg.AddMsgEvent(MsgID, 24, TargetID) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 44 then ActivateGuildProtectorSkill(MsgID, TargetID, RoleID, ProtectorLevel, 6944100) elseif TalkIndex == 51 then if skillLearned5 == 0 then msg.AddMsgEvent(MsgID, 20, 950796) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[5][1][1]) msg.AddMsgEvent(MsgID, 9, skillStats[5][1][2]) msg.AddMsgEvent(MsgID, 21, 52) msg.AddMsgEvent(MsgID, 1, 950786) else msg.AddMsgEvent(MsgID, 20, 950795) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[5][StatLevel][1]) msg.AddMsgEvent(MsgID, 9, skillStats[5][StatLevel][2]) msg.AddMsgEvent(MsgID, 21, 54) msg.AddMsgEvent(MsgID, 1, 950785) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 52 then if money >= 10000000 then role.DecRoleSilver(MapID, InstanceID, RoleID, 10000000, -1) role.SetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill5"], 1) msg.AddMsgEvent(MsgID, 20, 950803) msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 950967) msg.AddMsgEvent(MsgID, 24, TargetID) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 54 then ActivateGuildProtectorSkill(MsgID, TargetID, RoleID, ProtectorLevel, 6944200) elseif TalkIndex == 61 then if skillLearned6 == 0 then msg.AddMsgEvent(MsgID, 20, 950798) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[6][1][1]) msg.AddMsgEvent(MsgID, 9, skillStats[6][1][2]) msg.AddMsgEvent(MsgID, 21, 62) msg.AddMsgEvent(MsgID, 1, 950786) else msg.AddMsgEvent(MsgID, 20, 950797) msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, skillStats[6][StatLevel][1]) msg.AddMsgEvent(MsgID, 9, skillStats[6][StatLevel][2]) msg.AddMsgEvent(MsgID, 21, 64) msg.AddMsgEvent(MsgID, 1, 950785) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 62 then if money >= 10000000 then role.DecRoleSilver(MapID, InstanceID, RoleID, 10000000, -1) role.SetRoleScriptData(RoleID, 1, RoleDataType["guildProtectorSkill6"], 1) msg.AddMsgEvent(MsgID, 20, 950803) msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 950967) msg.AddMsgEvent(MsgID, 24, TargetID) end msg.AddMsgEvent(MsgID, 21, 13) msg.AddMsgEvent(MsgID, 1, 951137) elseif TalkIndex == 64 then ActivateGuildProtectorSkill(MsgID, TargetID, RoleID, ProtectorLevel, 6944300) end end msg.DispatchRoleMsgEvent(RoleID, MsgID) end aux.RegisterCreatureEvent(5800124, 7, "c5800124_OnTalk") -- [Тест] Свиток полной прокачки защитника гильдии (item 4902012) local GUILD_PROTECTOR_MAX_LEVEL = 10 local GUILD_PROTECTOR_SKILL_IDS = {6943800, 6943900, 6944000, 6944100, 6944200, 6944300} function I4902012_CanUse(MapID, InstanceID, TypeID, TargetID) local GuildID = guild.GetRoleGuildID(TargetID) if GuildID == nil or GuildID == -1 or GuildID == 4294967295 then return 32, false end local GuildPos = guild.GetRoleGuildPos(GuildID, TargetID) if GuildPos ~= 2 and GuildPos ~= 3 then return 32, false end return 0, false end function I4902012_OnUse(MapID, InstanceID, TypeID, TargetID) local GuildID = guild.GetRoleGuildID(TargetID) local rawValue1, rawValue2 = guild.GetGuildValue(GuildID) local _, LastTime = ParseGuildProtectorValues(rawValue1, rawValue2) if LastTime < 0 then LastTime = 0 end guild.SetGuildValue(GuildID, GUILD_PROTECTOR_MAX_LEVEL, LastTime) for i = 1, 6 do role.SetRoleScriptData(TargetID, 1, RoleDataType["guildProtectorSkill" .. i], 1) end ClearGuildSkills(TargetID) role.AddSkill(TargetID, GUILD_PROTECTOR_SKILL_IDS[1] + GUILD_PROTECTOR_MAX_LEVEL) end aux.RegisterItemEvent(4902012, 0, "I4902012_CanUse") aux.RegisterItemEvent(4902012, 1, "I4902012_OnUse")