function GetGuildProtectAttributes(MapID, InstanceID, RoleID) local isGuild = 1 local isLeader = 0 local GuildID = guild.GetRoleGuildID(RoleID) local GuildLevel = role.GetGuildAtt(RoleID, 1) local GuildMaterial = guild.GetGuildMaterial(GuildID) local GuildFund = guild.GetGuildFund(GuildID) local GuildLeader = guild.GetGuildLeader(GuildID) local GuildPoint = tonumber(Guildhunt(GuildID, 2, 0)) local GuildPointLevel = tonumber(Guildhunt(GuildID, 4, 0)) -- permanent pay flag (file + RoleScriptData); RoleScriptData alone is lost on restart local CanAddBuff = 0 if type(GetGuildProtectPaid) == "function" and GetGuildProtectPaid(RoleID) == 1 then CanAddBuff = 1 else local protectIdx = RoleDataType["guild_protect"] if protectIdx == nil then protectIdx = 171 end CanAddBuff = tonumber(role.GetRoleScriptData(RoleID, 1, protectIdx)) or 0 if CanAddBuff == 1 and type(SetGuildProtectPaid) == "function" then SetGuildProtectPaid(RoleID) end end if CanAddBuff ~= 1 then CanAddBuff = 0 end local CanAddedBuff = 1 local money = role.GetRoleSilver(MapID, InstanceID,RoleID) if GuildID == nil or GuildID == -1 or GuildID == 4294967295 then isGuild = 0 else isGuild = 1 Guildhunt(GuildID, 0, 0) end if money < 100000000 then CanAddedBuff = 0 else CanAddedBuff = 1 end if RoleID == GuildLeader then isLeader = 1 else isLeader = 0 end return isGuild,GuildLevel,GuildMaterial,GuildFund,GuildLeader,isLeader,GuildPoint,GuildPointLevel,CanAddBuff,CanAddedBuff end function cGuildProtect_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) local lev = role.GetRoleLevel(MapID, InstanceID,RoleID) local GuildMaterialRequirement = {5000,15000,21000,40000,65000,0} local GuildFundRequirement = {2000000,3000000,4000000,5000000,8000000,0} local GuildPointsRequirement = {100,250,350,600,1200,0} local money = role.GetRoleSilver(MapID, InstanceID,RoleID) local GuildID = guild.GetRoleGuildID(RoleID) local isGuild,GuildLevel,Material,Fund,LeaderID,isLeader,Points,PointLevel,CanAddBuff,BuffAdd = GetGuildProtectAttributes(MapID, InstanceID, RoleID) local RoleBuff = {92245,92246,92247,92248,92249,92250,92251,92252,92253} if PointLevel == nil then PointLevel = 0 Guildhunt(GuildID, 0, 0) end local NextLevel = PointLevel + 1 local MsgID = msg.BeginMsgEvent() if TalkIndex == -1 then if isGuild == 0 then msg.AddMsgEvent(MsgID, 20, 9151017) --Вступите в гильдию чтобы взаимодействовать со мной! msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 9151001) --Сила покровителя растёт вместе с тобой... msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 21, 300) --- Казна Гильдии msg.AddMsgEvent(MsgID, 1, 9151002) if PointLevel < 5 then msg.AddMsgEvent(MsgID, 21, 301) --- Прокачать покровителя msg.AddMsgEvent(MsgID, 1, 9151004) end msg.AddMsgEvent(MsgID, 21, 303) --- Внести казну msg.AddMsgEvent(MsgID, 1, 9151011) msg.AddMsgEvent(MsgID, 21, 304) --- Зачем нужен взнос? msg.AddMsgEvent(MsgID, 1, 9151012) msg.AddMsgEvent(MsgID, 21, 305) --- Получить бафф msg.AddMsgEvent(MsgID, 1, 9151016) end elseif TalkIndex >= 401 and TalkIndex <= 409 then if CanAddBuff == 1 then if PointLevel ~= nil and PointLevel > 0 then unit.AddBuff(MapID, InstanceID, RoleID,RoleBuff[TalkIndex-400]*100+PointLevel,RoleID) else msg.AddMsgEvent(MsgID, 20, 9151018) --Уровень покровителя равен 0. Невозможно получить бафф! msg.AddMsgEvent(MsgID, 24, TargetID) end else msg.AddMsgEvent(MsgID, 20, 9151015) --Нет доступа — пополните казну msg.AddMsgEvent(MsgID, 24, TargetID) end elseif TalkIndex == 305 then if CanAddBuff == 1 then if PointLevel > 0 then msg.AddMsgEvent(MsgID, 20, 9151019) --Выберите бафф с нужной характеристикой! msg.AddMsgEvent(MsgID, 24, TargetID) for i = 1, 9 do msg.AddMsgEvent(MsgID, 21, 400 + i) msg.AddMsgEvent(MsgID, 1, 9151019 + i) end else msg.AddMsgEvent(MsgID, 20, 9151018) --Уровень покровителя равен 0. Невозможно получить бафф! msg.AddMsgEvent(MsgID, 24, TargetID) end else msg.AddMsgEvent(MsgID, 20, 9151015) --Нет доступа — пополните казну msg.AddMsgEvent(MsgID, 24, TargetID) end elseif TalkIndex == 304 then msg.AddMsgEvent(MsgID, 20, 9151013) --Взнос нужен для получения любого баффа у покровителя! msg.AddMsgEvent(MsgID, 24, TargetID) elseif TalkIndex == 303 then if CanAddBuff == 0 then if money >= 100000000 then role.DecRoleSilver(MapID, InstanceID,RoleID,100000000, 400) local protectIdx = RoleDataType["guild_protect"] if protectIdx == nil then protectIdx = 171 end role.SetRoleScriptData(RoleID, 1, protectIdx, 1) if type(SetGuildProtectPaid) == "function" then SetGuildProtectPaid(RoleID) end CanAddBuff = 1 msg.AddMsgEvent(MsgID, 20, 9151033) -- treasury filled, can take buff msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 9151030) -- need more gold msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, (100000000-money)/10000) end else msg.AddMsgEvent(MsgID, 20, 9151031) -- already paid msg.AddMsgEvent(MsgID, 24, TargetID) end elseif TalkIndex == 300 then msg.AddMsgEvent(MsgID, 20, 9151003) --Очки / Фонд / Ресурсы msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, Points) msg.AddMsgEvent(MsgID, 9, Fund) msg.AddMsgEvent(MsgID, 9, Material) elseif TalkIndex == 302 then if GuildLevel > PointLevel then if isLeader == 1 and lev >= 95 then if Points >= GuildPointsRequirement[NextLevel] then if Fund >= GuildFundRequirement[NextLevel] then if Material >= GuildMaterialRequirement[NextLevel] then if PointLevel < 5 then guild.ModifyGuildMaterial(GuildID, RoleID, -GuildMaterialRequirement[NextLevel], 105) guild.ModifyGuildFund(GuildID, RoleID, -GuildFundRequirement[NextLevel], 104) Guildhunt(GuildID, 6, Points - GuildPointsRequirement[NextLevel]) Guildhunt(GuildID, 5, 0) msg.AddMsgEvent(MsgID, 20, 9151014) -- Уровень покровителя успешно повышен! msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 9151029) -- Уровень достиг максимума msg.AddMsgEvent(MsgID, 24, TargetID) end else msg.AddMsgEvent(MsgID, 20, 9151008) -- Не достаточно ресурсов гильдии. msg.AddMsgEvent(MsgID, 24, TargetID) end else msg.AddMsgEvent(MsgID, 20, 9151007) -- Не достаточно фонда гильдии. msg.AddMsgEvent(MsgID, 24, TargetID) end else msg.AddMsgEvent(MsgID, 20, 9151006) -- Не достаточно очков гильдии. msg.AddMsgEvent(MsgID, 24, TargetID) end else msg.AddMsgEvent(MsgID, 20, 9151005) -- Прокачать покровителя может только глава выше 94 ур. msg.AddMsgEvent(MsgID, 24, TargetID) end else msg.AddMsgEvent(MsgID, 20, 9151009) -- Уровень гильдии должен быть больше или равен уровню покровителя. msg.AddMsgEvent(MsgID, 24, TargetID) end elseif TalkIndex == 301 then if isLeader == 0 or lev < 95 then msg.AddMsgEvent(MsgID, 20, 9151005) --Прокачать покровителя может только глава выше 94 ур. msg.AddMsgEvent(MsgID, 24, TargetID) else msg.AddMsgEvent(MsgID, 20, 9151010) --Для прокачки требуется... msg.AddMsgEvent(MsgID, 24, TargetID) msg.AddMsgEvent(MsgID, 9, GuildPointsRequirement[NextLevel]) msg.AddMsgEvent(MsgID, 9, GuildFundRequirement[NextLevel]) msg.AddMsgEvent(MsgID, 9, GuildMaterialRequirement[NextLevel]) msg.AddMsgEvent(MsgID, 21, 302) msg.AddMsgEvent(MsgID, 1, 9151004) end end msg.AddMsgEvent(MsgID, 21, -1) msg.AddMsgEvent(MsgID, 1, 100002) msg.DispatchRoleMsgEvent(RoleID, MsgID) end aux.RegisterCreatureEvent(5610100, 7, "cGuildProtect_OnTalk")