-- Fallback: в некоторых сборках движка нет C-функции SGuildScriptData. -- Эмуляция через map.GetMapScriptData / map.SetMapScriptData для гильдийного инстанса g01. if SGuildScriptData == nil then function SGuildScriptData(InstanceID, Index, Opt, Value) local GUILD_DUNGEON_MAP_ID = 2573373074 if map == nil then return nil end if Opt == 0 then local ok, result = pcall(map.GetMapScriptData, GUILD_DUNGEON_MAP_ID, InstanceID, 1, Index) if ok then return result end return nil elseif Opt == 1 then pcall(map.SetMapScriptData, GUILD_DUNGEON_MAP_ID, InstanceID, 1, Index, Value) return Value end return nil end end function c6040319_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) local GuildID = guild.GetRoleGuildID(RoleID) local MsgID = msg.BeginMsgEvent() if GuildID ~= nil and GuildID ~= -1 and GuildID ~= 4294967295 then local GuildPos = guild.GetRoleGuildPos(GuildID, RoleID) local ProtectorLevel = 0 local LastTime = -1 local MapState = map.IsCreateMap(2573373074, GuildID) local rawValue1, rawValue2 = guild.GetGuildValue(GuildID) ProtectorLevel, LastTime = ParseGuildProtectorValues(rawValue1, rawValue2) local CurTime = aux.GetCurrentDWORDTime() local CurDay = math.floor(CurTime / 86400) local LastDay = math.floor(LastTime / 86400) if TalkIndex == -1 then msg.AddMsgEvent(MsgID, 20, 950636) msg.AddMsgEvent(MsgID, 24, TargetID) if (GuildPos == 2 or GuildPos == 3) and LastDay~=CurDay and MapState == false then msg.AddMsgEvent(MsgID, 21, 5) msg.AddMsgEvent(MsgID, 1, 950637)-- открыть подземелье elseif MapState == true then msg.AddMsgEvent(MsgID, 21, 6) msg.AddMsgEvent(MsgID, 1, 950638)-- войти в подземелье end elseif TalkIndex == 5 then-- создать подземелье if (GuildPos == 2 or GuildPos == 3) and LastDay~=CurDay and MapState == false then guild.SetGuildValue(GuildID, ProtectorLevel, CurTime) SGuildScriptData(GuildID, 0, 1, 0) msg.AddMsgEvent(MsgID, 20, 950639) msg.AddMsgEvent(MsgID, 24, TargetID) local GuildMsgID = msg.BeginMsgEvent() msg.AddMsgEvent(GuildMsgID, 102, 900260) msg.DispatchGuildMsgEvent(GuildMsgID, GuildID) map.CreateInstance(2573373074, GuildID) end elseif TalkIndex == 6 then-- телепортировать if MapState == true then role.RoleGotoNewMap(MapID, InstanceID, RoleID, 2573373074, 1370, 4220, 210) end end end msg.AddMsgEvent(MsgID, 21, 9) msg.AddMsgEvent(MsgID, 1, 100002) msg.DispatchRoleMsgEvent(RoleID, MsgID) end aux.RegisterCreatureEvent(6040319, 7, "c6040319_OnTalk") function questgetitemdrop(MapID, InstanceID, TargetID, TargetTypeID, RoleID, nIndex) local lootRoleTable = {} lootRoleTable = cre.GetAroundRole(MapID, InstanceID, TargetID, 200000, 200000) for k,RoleID in pairs(lootRoleTable) do role.AddRoleItem(MapID, InstanceID, RoleID, item_guild_dangeon[nIndex][math.random(#item_guild_dangeon[nIndex])], 1, 6, 8, 420) end end