diff --git a/pastes/pastes_20241122180650.csv b/pastes/pastes_20241122180650.csv new file mode 100644 index 0000000..ef81ea9 --- /dev/null +++ b/pastes/pastes_20241122180650.csv @@ -0,0 +1,10944 @@ +id,title,username,language,date,content +qVsHjVQV,⭐ Binance Account hack QK,SlyHikari03,JavaScript,Friday 22nd of November 2024 12:05:19 PM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #FrTBO9wzcy + +" +ik1DAUGY,⭐ get any gift card for FREE⭐ 2I,menyezisplayzz,JavaScript,Friday 22nd of November 2024 12:04:42 PM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #tydJMzqkjE + +" +m9N1ubje,Armor.2024.720p.AMZN.WEBRip.6CH.x265.10bit.HEVC-[MUNFAQQIHA],Munfaqqiha,C++,Friday 22nd of November 2024 12:03:53 PM CDT,"+------------------------------------------------------------------------------+ +| Armor.2024.720p.AMZN.WEBRip.6CH.x265.10bit.HEVC-[MUNFAQQIHA].mkv = 703.75 MB | ++------------------------------------------------------------------------------+ +| https://pixeldrain.com/u/jcY4vxyX | +| https://buzzheavier.com/hmiemlsvnnl9 | +| https://terabox.com/s/1pBnpLM6RrnJ1mm4Ot8PzPQ | +| https://u.pcloud.link/publink/show?code=XZ5N3V5ZdVflbVwzh981L3b93riMs77XLSSV | ++------------------------------------------------------------------------------+" +qNgGMG9S,luakt3bosko,Happypea,Lua,Friday 22nd of November 2024 12:02:38 PM CDT," +settingsNotes = ""Scoreboard Settings"" +dashboardTag = ""Kill Team Dashboard"" +scoreboardTag = ""Kill Team Scoreboard"" + +defaultSettings = [[{ + ""packet"":{ + ""name"":""Kill Team"", + ""players"":[ + ""Red"", + ""Blue"" + ], + ""streamers"":[ + ""Black"", + ""White"" + ], + ""autoPromote"":false + }, + ""scoring"":{ + ""maxRounds"":4, + ""max"":18, + ""limitRecordToMax"":false, + ""primary"":{ + ""max"":9, + ""maxEach"":0, + ""objectives"":[ + ""Hold 1+"", + ""Hold 2+"", + ""Hold More"" + ], + ""exclusive"":[ + false, + false, + true + ] + }, + ""secondary"":{ + ""max"":9, + ""maxEach"":3, + ""objectives"":[ + ""Attrition"", + ""Bounty Hunter"", + ""Cut Apart"", + ""Cut Off The Head"", + ""Death From Afar"", + ""Domination"", + ""Engage On All Fronts"", + ""High-Profile Targets"", + ""Proximity Alert"", + ""Recon Sweep"", + ""Scout the Field"", + ""Thin Their Ranks"" + ], + ""maxExemption"":{ + } + }, + ""bonus"":{ + ""max"":0, + ""objectives"":[ + ] + } + }, + ""art"":{ + ""graphics"":{ + ""eventLogo"":null, + ""eventBanner"":null, + ""initiative"":{ + ""Off"":""https://steamusercontent-a.akamaihd.net/ugc/1750182972143392609/48283228AFC1906F43CD6D39A402B3DC29EAE371/"", + ""On"":""https://steamusercontent-a.akamaihd.net/ugc/1750182972143393402/5BE39A862B6C1F71A467892906E21C0CD54C257E/"" + }, + ""primary"":{ + ""Off"":""https://steamusercontent-a.akamaihd.net/ugc/1750182972137668614/C48602D532FC7C6974B12FDD1B8C27CC3A9F9C32/"", + ""On"":""https://steamusercontent-a.akamaihd.net/ugc/1750182972137669364/44345B2435C44D87BB88DB3673E25ED6C4CB7F92/"" + } + }, + ""colors"":{ + ""lighter"":""#9a9a9aff"", + ""background"":""#555555ff"", + ""darker"":""#3a3a3aff"", + ""darkest"":""#000000ff"", + ""highlight"":""#e74f0aff"" + }, + ""gui"":{ + ""overlay"":{ + ""logoWidth"":128, + ""logoHeight"":128 + }, + ""scoreboard"":{ + ""bannerWidth"":740, + ""bannerHeight"":150, + ""width"":750, + ""primaryColumns"":3, + ""layFlat"":true + } + } + } +}]] +setupMessage = ""Performing first time scoreboard setup. You can customize the scoreboard for this map by editing the "" .. settingsNotes .. "" tab in the notebook."" + +function atrName(s) + return ""kts__"" .. s +end + +function atrPrimary(player, rule, round, k) + return string.format(""kts__primary_player%d_%d_%d_%s"", player, rule, round, k) +end + +function atrInitiative(player, round, k) + return string.format(""kts__initiative_player%d_%d_%s"", player, round, k) +end + +function atrSecondary(player, secondary, k) + return string.format(""kts__secondary_player%d_%d_%s"", player, secondary, k) +end + +paramPlayer = {atrName(""player1""), atrName(""player2"")} + +players = {} +playerNames = {} +playerNumber = {} + +dropdowns = {} + +rules = {} +scoring = {} + +-- ADDED by ZAKA +-- TODO Add here GUID of MegaDeck +megaDeckGuid = ""a2a37e"" +oldMegaDeckGuid = ""18fcc4"" +masterBagOpen = ""ebbb8c"" +masterBagItd = ""ef8c27"" +-- TODO for the future -> if faction added, update +imperiumFactions = { + ""Ecclesiarchy"", + ""Novitiates"", + ""Talons of the Emperor"", + ""Forge World"", + ""Hunter Clade"", + ""Imperial Guard"", + ""Veteran Guard"", + ""Grey Knights"", + ""Space Marines"", + ""Phobos Strike Team"", + ""Intercession Squad Team"", + ""Imperial Navy Breachers"", + ""Elucidian Starstriders"", + ""Kasrkin"", +} +chaosFactions = { + ""Chaos Daemons"", + ""Legionary"", + ""Traitor Space Marines"", + ""Death Guard"", + ""Thousand Sons"", + ""Warp Coven"", + ""Blooded"", + ""Gellerpox Infected"", +} +xenosFactions = { + ""Brood Coven"", + ""Wyrmblade"", + ""Tomb World"", + ""Greenskins"", + ""Kommandos"", + ""Cadre Mercenary"", + ""Hunter Cadre"", + ""Pathfinders"", + ""Hive Fleet"", + ""Farstalker Kinband"", + ""Hierotek Circle"", + +} +aeldariFactions = { + ""Corsair Voidscarred"", + ""Craftworlds"", + ""Commorites"", + ""Troupe"", + ""Void-dancer Troupe"", +} + +gameStateMachine = { + whoToPress="""", + preGame={ + active=true, + }, + tp1={ + init=false, + ploys=false, + tacops=false, + firefight=false, + scoring=false + }, + tp2={ + init=false, + ploys=false, + tacops=false, + firefight=false, + scoring=false + }, + tp3={ + init=false, + ploys=false, + tacops=false, + firefight=false, + scoring=false + }, + tp4={ + init=false, + ploys=false, + tacops=false, + firefight=false, + scoring=false + }, + endGame={ + active=false, + }, +} +checkListPlayer = { + name = """", + allow = false, + superFaction = ""Select One"", + faction = ""Select One"", + tacOps = false, + equipment = false, + barricades = false, + deployed = false, + scouting = ""Select One"", +} +checkListStatus = { + killZoneLoaded = false, + allowOW = false, + gameType = ""Open play"", + edition= ""KT 2021 - Open"", + mission = ""Select One"", + tournament = ""Select One"", + rollOffWinner=""Select One"", + rollOffAttacker=false, + rollOffDefender=false, + revealed=false, + winner="""", +} +result = {} +missionIndexOpen = {} +missionIndexItd = {} +factionsInSuperDeck = {} + +-- TODO if tournament added, update +tournamentIndex = { + ""III Liga Mercenaria"", +} + +-- TODO if game type added, update +gameTypeIndex = { + ""Open Play"", + ""Matched Play"", + ""Narrative Play"", +} + +-- TODO if edition added, update +editionIndex = { + ""KT 2021 - Open"", + ""KT 2022 - Critical Ops"", + ""KT 2022 - Into the Dark"", +} + +-- TODO if mission added, update +missionIndexOpen['8cc4c8'] = { + code=1.1, + name=""Loot and Salvage"", + objGuid='fef2fe' +} +missionIndexOpen['653576'] = { + code=1.2, + name=""Consecration"", + objGuid='aa55ae' +} +missionIndexOpen['2da116'] = { + code=1.3, + name=""Awaken the data Spirits"", + objGuid='6f0b59' +} +missionIndexOpen['cb09ac'] = { + code=2.1, + name=""Escalating Hostilities"", + objGuid='bcfd2c' +} +missionIndexOpen['ab2f17'] = { + code=2.2, + name=""Seize Ground"", + objGuid='082875' +} +missionIndexOpen['fd5afd'] = { + code=2.3, + name=""Domination"", + objGuid='db097f' +} +missionIndexOpen['c50020'] = { + code=3.1, + name=""Secure Archeotech"", + objGuid='91d284' +} +missionIndexOpen['d03785'] = { + code=3.2, + name=""Duel of wits"", + objGuid='edd0ad' +} +missionIndexOpen['5ec111'] = { + code=3.3, + name=""Master the terminals"", + objGuid='2fb4cc' +} +missionIndexItd = {} +--TODO add guids +missionIndexItd[""25d8b1""] = { + code=1.1, + name=""Command station control"", + objGuid='7ce808', + terrainGuid='02f7ea', + primary = { + exclusive = JSON.decode('[false, false, false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+"", ""2+"", ""3+""]') + }, + bonus = { + max = 0, + objectives = JSON.decode('[]') + } +} +missionIndexItd[""574334""] = { + code=1.2, + name=""Power surge"", + objGuid='65ed51', + terrainGuid='543851', + primary = { + exclusive = JSON.decode('[false, false, false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+"", ""2+"", ""3+""]') + }, + bonus = { + max = 0, + objectives = JSON.decode('[]') + } +} +missionIndexItd[""4bd33e""] = { + code=1.3, + name=""Supply raid"", + objGuid='03d7e1', + terrainGuid='af8f16', + primary = { + exclusive = JSON.decode('[false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+""]') + }, + bonus = { + max = 8, + objectives = JSON.decode('[""End battle""]') + } +} +missionIndexItd[""e1bd09""] = { --NO first + code=2.1, + name=""Junction assault"", + objGuid='', + terrainGuid='b7e8a6', + primary = { + exclusive = JSON.decode('[false, false, false, false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+"", ""2+"", ""3+"", ""4+""]') + }, + bonus = { + max = 0, + objectives = JSON.decode('[]') + } +} +missionIndexItd[""6ad39d""] = { + code=2.2, + name=""Full-Scale attack"", + objGuid='158e30', + terrainGuid='180b15', + primary = { + exclusive = JSON.decode('[false, false, false, false, false, false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+"", ""2+"", ""3+"", ""4+"", ""5+"", ""6+""]') + }, + bonus = { + max = 0, + objectives = JSON.decode('[]') + } +} +missionIndexItd[""d23b90""] = { + code=2.3, + name=""Mysterious signature"", + objGuid='d49add', + terrainGuid='6e6c6b', + primary = { + exclusive = JSON.decode('[false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+""]') + }, + bonus = { + max = 6, + objectives = JSON.decode('[""End battle""]') + } +} +missionIndexItd[""451ffb""] = { --NO first + code=3.1, + name=""Forge stronghold"", + objGuid='ebe98e', + terrainGuid='e2fb73', + primary = { + exclusive = JSON.decode('[false, false, false, false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+"", ""2+"", ""3+"", ""4+""]') + }, + bonus = { + max = 0, + objectives = JSON.decode('[]') + } +} +missionIndexItd[""72ceb4""] = { + code=3.2, + name=""Vault plunder"", + objGuid='04420d', + terrainGuid='00e169', + primary = { + exclusive = JSON.decode('[false, false, false, false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+"", ""2+"", ""3+"", ""4+""]') + }, + bonus = { + max = 8, + objectives = JSON.decode('[""End battle""]') + } +} +missionIndexItd[""b3a100""] = { + code=3.3, + name=""Exposed trove"", + objGuid='49d002', + terrainGuid='0a6ec7', + primary = { + exclusive = JSON.decode('[false, false, false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+"", ""2+"", ""3+""]') + }, + bonus = { + max = 4, + objectives = JSON.decode('[""End battle""]') + } +} +missionSelectedForScoreboard = """" +overwatchTable = { + checked=false +} + +function getUIAttribute(id, attr) + if UI.getAttribute(id, attr) ~= nil then + return UI.getAttribute(id, attr) + end + if self.UI.getAttribute(id, attr) ~= nil then + return self.UI.getAttribute(id, attr) + end +end +-- ADDED by ZAKA + +function showUI(id) + UI.show(id) + self.UI.show(id) +end + +function hideUI(id) + UI.hide(id) + self.UI.hide(id) +end + +function setUIValue(id, value) + UI.setValue(id, value) + self.UI.setValue(id, value) +end + +function setUIAttribute(id, attr, value) + UI.setAttribute(id, attr, value) + self.UI.setAttribute(id, attr, value) +end + +function setUIAttributes(id, data) + UI.setAttributes(id, data) + --self.UI.setAttributes(id, data) +end + +function refresh() + for p, uiid in pairs(players) do + local player = Player[p] + if player.seated then + playerNames[p] = player.steam_name + if rules.packet.autoPromote and not (player.host or player.promoted) then + player.promote() + end + else + playerNames[p] = p + end + setUIValue(uiid, playerNames[p]) + setUIValue(uiid..""_streamer"", playerNames[p]) + local color = Color.fromString(p) + local color1 = color:lerp(Color(1, 1, 1), 0.25) + local color2 = color:lerp(Color(1, 1, 1), 0.6) + setUIAttribute(uiid..""_panel"", ""color"", ""#""..color1:toHex()) + setUIAttribute(uiid..""_panel2"", ""color"", ""#""..color2:toHex()) + --ADDED by ZAKA + setUIValue(""kts__red_faction_ui_text"", ""Red Faction"") + setUIValue(""kts__blue_faction_ui_text"", ""Blue Faction"") + --ADDED by ZAKA + end + for pl=1,2 do + local plscore = scoring[pl] + for round=1,rules.scoring.maxRounds do + for rule,_ in pairs(rules.scoring.primary.objectives) do + setPrimaryUI(pl, rule, round, plscore.primary[rule][round]) + end + setInitiativeUI(pl, round, plscore.initiative[round]) + end + for secondary=1,3 do + local ssec = plscore.secondary[secondary] + if ssec[1] then setSecondaryObjective(pl, secondary, ssec[1]) end + refreshSecondaryUI(pl, secondary) + end + refreshBonusUI(pl) + updateScoreUI(pl) + end + updateInitiativeUI() +end + +function onPlayerChangeColor(pc) + if pc == ""Red"" or pc == ""Blue"" then + + --ADDED by ZAKA + if checkListStatus[Player[pc].steam_name] == nil then + checkListStatus[Player[pc].steam_name] = { + name = """", + allow = false, + superFaction = ""Select One"", + faction = ""Select One"", + tacOps = false, + equipment = false, + barricades = false, + deployed = false, + allowOW = false, + scouting = ""Select One"", + } + end + if (pc == ""Red"" and getUIAttribute(""kts__blue_roloff_winner_text"", ""text"") ~= Player[pc].steam_name) or + (pc == ""Blue"" and getUIAttribute(""kts__red_roloff_winner_text"", ""text"") ~= Player[pc].steam_name) then + setUIAttribute(""kts__""..string.lower(pc)..""_roloff_winner_text"", ""text"", Player[pc].steam_name) + setUIAttribute(""kts__toggle_""..string.lower(pc)..""_accept_text"", ""text"", Player[pc].steam_name) + setUIAttribute(""kts__toggle_""..string.lower(pc)..""_tacops_text"", ""text"", Player[pc].steam_name) + setUIAttribute(""kts__toggle_""..string.lower(pc)..""_equipment_text"", ""text"", Player[pc].steam_name) + setUIAttribute(""kts__toggle_""..string.lower(pc)..""_barricades_text"", ""text"", Player[pc].steam_name) + setUIAttribute(""kts__toggle_""..string.lower(pc)..""_deployed_text"", ""text"", Player[pc].steam_name) + setUIAttribute(""kts__toggle_""..string.lower(pc)..""_overwatch_funct_text"", ""text"", Player[pc].steam_name) + setUIAttribute(""kts__dropdown_""..string.lower(pc)..""_faction_text"", ""text"", ""Faction ""..Player[pc].steam_name) + end + if result[Player[pc].steam_name] == nil then + result[Player[pc].steam_name] = {} + end + result[Player[pc].steam_name].color = pc + --ADDED by ZAKA + + refresh() + end +end + +function onPlayerDisconnect(pc) + refresh() +end + +function makePrimaryScoreTable() + local primaryScore = {} + for k,_ in pairs(rules.scoring.primary.objectives) do + local scoreRow = {} + for i=1, rules.scoring.maxRounds do + scoreRow[i] = false + end + primaryScore[k] = scoreRow + end + return primaryScore +end + +function calculatePrimaryScore(pl) + local plPrimaries = scoring[pl].primary + local total = 0 + local maxEach = rules.scoring.primary.maxEach + for k,_ in pairs(rules.scoring.primary.objectives) do + local orule = plPrimaries[k] + local ototal = 0 + for v=1, rules.scoring.maxRounds do + ototal = ototal + (orule[v] and 1 or 0) + end + if maxEach > 0 then + total = total + math.min(ototal, maxEach) + else + total = total + ototal + end + end + -- ADDED by ZAKA + total = total + scoring[pl].secondary[4] + -- ADDED by ZAKA + return math.min(total, rules.scoring.primary.max) +end + +function makeSecondaryScoreTable() + local secondaryScore = {} + for i=1,3 do + secondaryScore[i]={nil, 0} + end + secondaryScore[4] = 0 + return secondaryScore +end + +function makeInitiativeScoreTable() + local initiative = {} + for i=1, rules.scoring.maxRounds do + initiative[i]=false + end + return initiative +end + +function calculateSecondaryScore(pl) + local plSec = scoring[pl].secondary + return math.min( + plSec[1][2] + + plSec[2][2] + + plSec[3][2], + --DELETED by ZAKA + + --plSec[4], + --DELETED by ZAKA + rules.scoring.secondary.max) +end + +function calculateScore(pl) + local prime = calculatePrimaryScore(pl) + local sec = calculateSecondaryScore(pl) + return math.min(prime + sec, rules.scoring.max), prime, sec +end + +function resetScoring() + broadcastToAll(""rules updated, resetting score"") + + scoring = { + { + primary=makePrimaryScoreTable(), + secondary=makeSecondaryScoreTable(), + initiative=makeInitiativeScoreTable(), + command=0 + }, + { + primary=makePrimaryScoreTable(), + secondary=makeSecondaryScoreTable(), + initiative=makeInitiativeScoreTable(), + command=0 + } + } +end + +function deepcopy(orig, copies) + copies = copies or {} + local orig_type = type(orig) + local copy + if orig_type == 'table' then + if copies[orig] then + copy = copies[orig] + else + copy = {} + copies[orig] = copy + for orig_key, orig_value in next, orig, nil do + copy[deepcopy(orig_key, copies)] = deepcopy(orig_value, copies) + end + setmetatable(copy, deepcopy(getmetatable(orig), copies)) + end + else -- number, string, boolean, etc + copy = orig + end + return copy +end + +function deepcompare(t1,t2,ignore_mt) + local ty1 = type(t1) + local ty2 = type(t2) + if ty1 ~= ty2 then return false end + -- non-table types can be directly compared + if ty1 ~= 'table' and ty2 ~= 'table' then return t1 == t2 end + -- as well as tables which have the metamethod __eq + local mt = getmetatable(t1) + if not ignore_mt and mt and mt.__eq then return t1 == t2 end + for k1,v1 in pairs(t1) do + local v2 = t2[k1] + if v2 == nil or not deepcompare(v1,v2) then return false end + end + for k2,v2 in pairs(t2) do + local v1 = t1[k2] + if v1 == nil or not deepcompare(v1,v2) then return false end + end + return true +end + +function setup(settings) + + if not deepcompare(settings, rules, true) then + local player1 = settings.packet.players[1] + local player2 = settings.packet.players[2] + + players[player1] = paramPlayer[1] + players[player2] = paramPlayer[2] + playerNumber[player1] = 1 + playerNumber[player2] = 2 + rules = settings + resetScoring() + end +end + +function buildScoreBanner(x, y, w, h) + local ch = {} + if rules.art.graphics.eventBanner then + ch = {{ + tag=""Image"", + attributes={ + image=""eventBanner"", + height=h + } + }} + else + ch = {{ + tag=""Text"", + attributes={ + class=""title"" + }, + value=rules.packet.name + }} + end + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=""UpperCenter"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y)) + }, + children=ch + } +end + +function buildNameplate(x, y, w, h, player) + local playerc = rules.packet.players[player] + local ch = {{ + tag=""Text"", + attributes={ + class=""steamName"", + id=paramPlayer[player], + color= string.format(""#%s"", Color.fromString(playerc):toHex()) + }, + value=playerc + }} + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y)) + }, + children=ch + } +end + +function insertPrimaryCel(t, x, y, w, h, rule, round, player) + table.insert(t,{ + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y)) + }, + children={ + { + tag=""Text"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = 32, + offsetXY = ""0 0"" + }, + value=rules.scoring.primary.objectives[rule] + }, + { + tag=""Image"", + attributes={ + onClick=""onPrimaryPressed"", + id=atrPrimary(player, rule, round,""toggle""), + rectAlignment=""UpperCenter"", + class=""scoreToggle"", + width=w, + height=h - 36, + offsetXY= string.format(""0 %f"", tostring(-32)) + } + } + } + } ) +end + +function insertRoundPrimaries(ch, x, y, w, round, player, gap) + local objs = #rules.scoring.primary.objectives + local cols = math.min(objs, rules.art.gui.scoreboard.primaryColumns) + local rows = math.ceil(objs/cols) + local celw = math.floor(w/cols) + local celh = 100 + local pch = {} + local h = celh * rows + + for i=1,rows do + local rcols = math.min(cols, objs-(i-1)*cols) + local rofs = (cols - rcols)*celw*0.5 + for j=1,rcols do + local rule = ((i-1)*cols + j) + if round > 1 then + insertPrimaryCel(pch, celw*(j-1) + rofs, -celh*(i-1), celw, celh, rule, round, player) + else + break + end + end + end + + table.insert(ch, { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y)) + }, + children=pch + }) + return h +end + +function buildPrimaryRow(t, uy, x, y, w, round, gap) + local ch={} + local primaryHeight = insertRoundPrimaries(ch, 0, 0, (w-gap)/2, round, 1) + local h=primaryHeight + insertRoundPrimaries(ch, (w-gap)/2 + gap, 0, (w-gap)/2, round, 2) + table.insert(t, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + }, + children=ch + }) + return h + uy-y +end + +function buildInitiativeRow(t, uy, x, y, w, h, round) + table.insert(t, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=130, + height=h + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"" + }, + value=string.format(""Round %d initiative"", round) + } + } + }, + { + tag=""Image"", + attributes={ + class=""initiativeToggle"", + onClick=""onInitiativePressed"", + id=atrInitiative(1, round, ""toggle""), + width=h*0.75, height=h*0.75, + offsetXY = string.format(""%f 0"", -w/4) + } + }, + { + tag=""Image"", + attributes={ + class=""initiativeToggle"", + onClick=""onInitiativePressed"", + id=atrInitiative(2, round, ""toggle""), + width=h*0.75, height=h*0.75, + offsetXY = string.format(""%f 0"", w/4) + } + } + } + }) + return uy-y + h +end + +function buildPrimaryTotalRow(t, uy, x, y, w, h) + table.insert(t, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=130, + height=h + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"" + }, + value=""Primary total"" + } + } + }, + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=h*0.75, + id=""kts__primarytotal_player1"", + offsetXY = string.format(""%f 0"", -w/4) + }, + value=string.format(""0/%d"", rules.scoring.primary.max) + }, + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=h*0.75, + id=""kts__primarytotal_player2"", + offsetXY = string.format(""%f 0"", w/4) + }, + value=string.format(""0/%d"", rules.scoring.primary.max) + } + } + }) + return uy-y+h +end + +function optionsFor(t, def, id) + local ddo = {} + local ddid = {} + local opt = { + { + tag=""Option"", + attributes={ + selected=true + }, + value=def + } + } + + for k, v in pairs(t) do + table.insert(opt, { + tag=""Option"", + value=v + }) + ddo[v] = k + ddid[k] = id..k + end + + dropdowns[id] = { + items=ddo, + ids=ddid, + selected=1 + } + + return opt +end + + +function buildSecondarySelector(ch, uy, x, y, w, player, sec) + local h = 90 + local dd = atrSecondary(player, sec, ""dropdown"") + local cch = { + { + tag=""Dropdown"", + attributes={ + onValueChanged=""onSecondarySelected"", + id=dd, + rectAlignment=""UpperLeft"", + width=w, + height=40, + itemHeight=40 + }, + children=optionsFor(rules.scoring.secondary.objectives, ""Hidden Secondary"", dd) + }, + { + tag=""Text"", + attributes={ + class=""title2"", + id=atrSecondary(player, sec, ""display""), + rectAlignment=""UpperLeft"", + width=w, + height=40, + active=false + }, + value=""u cant see this"" + }, + { + tag=""Text"", + attributes={ + class=""title2"", + id=atrSecondary(player, sec, ""amount""), + rectAlignment=""LowerCenter"", + width=w, + height=40 + }, + value=""0"" + }, + { + tag=""Button"", + attributes={ + id=atrSecondary(player, sec, ""button_plus""), + onClick=""onIncreaseSecondary"", + width=80, height=32, + fontSize=28, + rectAlignment=""LowerRight"", + offsetXY=""-4 4"", + text=""+"" + } + }, + { + tag=""Button"", + attributes={ + id=atrSecondary(player, sec, ""button_minus""), + onClick=""onDecreaseSecondary"", + width=80, height=32, + fontSize=28, + rectAlignment=""LowerLeft"", + offsetXY=""4 4"", + text=""-"" + } + } + } + + table.insert(ch, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + }, + children=cch + }) + return uy-y+h +end + +function buildSecondaryCel(ch, uy, x, y, w, player) + local h = 4 + local cch = {} + for i=1,1 do + h = buildSecondarySelector(cch, h, 4, 0, w-8, player, i) + 4 + end + + table.insert(ch, { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + }, + children=cch + }) + return uy-y+h +end + +function buildSecondaryRow(ch, uy, x, y, w) + local cch = {} + local celw = (w-4)/2 + local h = buildSecondaryCel(cch, 0, 0, 0, celw, 1) + buildSecondaryCel(cch, 0, celw+4, 0, celw, 2) + + table.insert(ch, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width=w, + height=h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + }, + children=cch + }) + + return uy-y+h +end + +function buildBonusRow(ch, uy, x, y, w) + local h = 160 + local sliderw = (w-8)/2-4 + local dd = ""ktw__bonus_dropdown"" + local cch = { + --ADDED by ZAKA + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=130, + height=60, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + rectAlignment=""MiddleCenter"", + }, + value=""End of the battle"" + } + } + }, + --ADDED by ZAKA + --DELETED by ZAKA + --{ + -- tag=""Dropdown"", + -- attributes={ + -- rectAlignment=""UpperCenter"", + -- id=dd, + -- width=w/2, + -- height=40, + -- itemHeight=40, + -- offsetXY=""0 -4"" + -- }, + -- children=optionsFor(rules.scoring.bonus.objectives, ""Select bonus objective..."", dd) + --}, + --DELETED by ZAKA + { + tag=""Panel"", + attributes={ + rectAlignment=""LowerLeft"", + --rectAlignment=""MiddleLeft"", + width=sliderw, + height=80, + offsetXY=""4 4"" + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + id=""kts__bonus_display_player1"", + --rectAlignment=""LowerCenter"", + rectAlignment=""MiddleCenter"", + width=w, + height=40 + }, + value=""0"" + }, + { + tag=""Button"", + attributes={ + id=""kts__bonus_increase_player1"", + onClick=""onIncreaseBonus"", + width=80, height=32, + fontSize=28, + --rectAlignment=""LowerRight"", + rectAlignment=""MiddleRight"", + offsetXY=""-4 4"", + text=""+"" + } + }, + { + tag=""Button"", + attributes={ + id=""kts__bonus_decrease_player1"", + onClick=""onDecreaseBonus"", + width=80, height=32, + fontSize=28, + --rectAlignment=""LowerLeft"", + rectAlignment=""MiddleLeft"", + offsetXY=""4 4"", + text=""-"" + } + } + } + }, + { + tag=""Panel"", + attributes={ + rectAlignment=""LowerRight"", + --rectAlignment=""MiddleRight"", + width=sliderw, + height=80, + offsetXY=""-4 4"" + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + id=""kts__bonus_display_player2"", + --rectAlignment=""LowerCenter"", + rectAlignment=""MiddleCenter"", + width=w, + height=40 + }, + value=""0"" + }, + { + tag=""Button"", + attributes={ + id=""kts__bonus_increase_player2"", + onClick=""onIncreaseBonus"", + width=80, height=32, + fontSize=28, + --rectAlignment=""LowerRight"", + rectAlignment=""MiddleRight"", + offsetXY=""-4 4"", + text=""+"" + } + }, + { + tag=""Button"", + attributes={ + id=""kts__bonus_decrease_player2"", + onClick=""onDecreaseBonus"", + width=80, height=32, + fontSize=28, + --rectAlignment=""LowerLeft"", + rectAlignment=""MiddleLeft"", + offsetXY=""4 4"", + text=""-"" + } + } + } + } + } + --ADDED by ZAKA + table.insert(ch, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width=w, + height=h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + }, + children=cch + }) + --ADDED by ZAKA + --DELETED by ZAKA + --table.insert(ch, { + -- tag=""Panel"", + -- attributes={ + -- class=""bkgPanel"", + -- rectAlignment=""UpperLeft"", + -- width=w, + -- height=h, + -- offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + -- }, + -- children=cch + --}) + --DELETED by ZAKA + return uy-y+h +end + +function buildSecondaryTotalRow(ch, uy, x, y, w) + local h = 60 + table.insert(ch, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y-uy)) + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=130, + height=h + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"" + }, + value=""Secondary total"" + } + } + }, + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=h*0.75, + id=""kts__secondarytotal_player1"", + offsetXY = string.format(""%f 0"", -w/4) + }, + value=string.format(""0/%d"", rules.scoring.secondary.max) + }, + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=h*0.75, + id=""kts__secondarytotal_player2"", + offsetXY = string.format(""%f 0"", w/4) + }, + value=string.format(""0/%d"", rules.scoring.secondary.max) + } + } + }) + return uy-y+h +end + +function buildGrandTotalRow(ch, uy, x, y, w) + local h = 130 + table.insert(ch, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", x, y-uy) + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=130, + outline=rules.art.colors.highlight, + outlineSize=""3 -3"", + offsetXY=""-70, 0"", + height=h + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__grandtotal_player1"", + class=""finalScore"", + fontSize=100 + }, + value=""0"" + }, + { + tag=""Text"", + attributes={ + id=""kts__grandtotal_max_player1"", + class=""finalScore"", + fontSize=50, + offsetXY=""-163 0"", + active=false + }, + value=""MAX"" + } + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=130, + outline=rules.art.colors.highlight, + outlineSize=""3 -3"", + offsetXY=""70, 0"", + height=h + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__grandtotal_player2"", + class=""finalScore"", + fontSize=100 + }, + value=""0"" + }, + { + tag=""Text"", + attributes={ + id=""kts__grandtotal_max_player2"", + class=""finalScore"", + fontSize=50, + offsetXY=""163 0"", + active=false + }, + value=""MAX"" + } + } + } + } + }) + return uy-y+h +end + +function buildScoreboard(def) + local ch = {} + local uiHeight = 0 + local uiPanelWidth = rules.art.gui.scoreboard.width + local uiWidth = uiPanelWidth-10 + local halfPanel = (uiWidth-4)/2 + local bannerHeight = rules.art.gui.scoreboard.bannerHeight or 150 + local bannerWidth = rules.art.gui.scoreboard.bannerWidth or uiWidth + + --start ui parts + table.insert(ch, buildScoreBanner(0,-5,bannerWidth, bannerHeight)) + uiHeight = uiHeight + bannerHeight + 10 + + + table.insert(ch, buildNameplate(5, -uiHeight, halfPanel, 60, 1)) + table.insert(ch, buildNameplate(halfPanel+9, -uiHeight, halfPanel, 60, 2)) + uiHeight = uiHeight + 64 + + for round=1, rules.scoring.maxRounds do + uiHeight = buildInitiativeRow(ch, uiHeight, 5, 0, uiWidth, 60, round, 4) + 4 + --ADDED by ZAKA + if missionSelectedForScoreboard == ""e1bd09"" or missionSelectedForScoreboard == ""451ffb"" then + if round > 1 then + uiHeight = buildPrimaryRow(ch, uiHeight, 5, 0, uiWidth, round, 4) + 4 + end + else + uiHeight = buildPrimaryRow(ch, uiHeight, 5, 0, uiWidth, round, 4) + 4 + end + --ADDED by ZAKA + + --DELETED by ZAKA + --uiHeight = buildPrimaryRow(ch, uiHeight, 5, 0, uiWidth, round, 4) + 4 + --DELETED by ZAKA + end + --ADDED by ZAKA + if #rules.scoring.bonus.objectives > 0 then + uiHeight = buildBonusRow(ch, uiHeight, 5, 0, uiWidth) + end + --ADDED by ZAKA + uiHeight = buildPrimaryTotalRow(ch, uiHeight, 5, -5, uiWidth, 60) + 9 + + uiHeight = buildSecondaryRow(ch, uiHeight, 5, 0, uiWidth) + 4 + + -- DELETED by ZAKA + --if #rules.scoring.bonus.objectives > 0 then + -- uiHeight = buildBonusRow(ch, uiHeight, 5, 0, uiWidth) + --end + -- DELETED by ZAKA + + uiHeight = buildSecondaryTotalRow(ch, uiHeight, 5, -5, uiWidth) + 9 + uiHeight = buildGrandTotalRow(ch, uiHeight, 5, 0, uiWidth) + 5 + + local uiHalf = uiHeight/2 + local rotation + local position + if rules.art.gui.scoreboard.layFlat then + rotation=""0 0 180"" + position=""0 0 -15"" + else + rotation=""45 0 180"" + position=""0 0 -""..(math.sqrt((uiHalf*uiHalf)/2) + 150) + end + local xmt = { + def, + { + tag=""Panel"", + attributes={ + class=""mainPanel"", + active=true, + width=uiPanelWidth, + height=uiHeight, + rotation=rotation, + position=position + }, + children=ch + } + } + self.UI.setXmlTable(xmt) +end + +function buildDashboard(target, def) + local dbCont = {} + target.UI.setXmlTable({ + def, + { + tag=""Panel"", + attributes={ + color=rules.art.colors.darker, + width=1920, + height=1080, + scale=""-0.33 0.33 0.33"", + rotation=""20 0 180"", + position=""0 -300 -100"" + }, + children=dbCont + } + }) +end + +function asd(typ, atr, cls) + local atr = atr + if cls then atr.class = cls end + return { + tag=typ, + attributes=atr + } +end + +function makeDefaults(settings) + local colors = settings.art.colors + + return { + tag=""Defaults"", + children={ + asd(""Image"", { + raycastTarget=false, + preserveAspect=true + }), + asd(""Text"", { + fontSize=16, + color=colors.lighter + }), + asd(""Dropdown"", { + fontSize=24, + color=colors.background, + textColor=colors.lighter + }), + asd(""Panel"", { + color=colors.darker + }, ""mainPanel""), + asd(""Panel"", { + color=colors.background + }, ""bkgPanel""), + asd(""Text"", { + fontSize=80, + fontStyle=""BoldAndItalic"" + }, ""title""), + asd(""Text"", { + fontSize=24, + fontStyle=""Bold"" + }, ""title2""), + asd(""Text"", { + resizeTextForBestFit=true, + fontStyle=""Bold"", + color=colors.highlight, + outline=colors.darker + }, ""steamName""), + asd(""Text"", { + fontStyle=""Bold"", + color=colors.highlight, + outline=colors.darker + }, ""finalScore""), + asd(""Image"", { + raycastTarget=true, + type=""Simple"", + image=""primaryOff"" + }, ""scoreToggle""), + asd(""Image"", { + raycastTarget=true, + tooltipPosition=""Above"", + type=""Simple"", + image=""primaryOff"" + }, ""streamerScore""), + asd(""Image"", { + raycastTarget=true, + type=""Simple"", + image=""initiativeOff"" + }, ""initiativeToggle""), + asd(""Image"", { + type=""Simple"", + image=""initiativeOff"" + }, ""streamerInitiative""), + asd(""Button"", { + textColor=colors.darkest, + color=colors.background + }), + asd(""Image"", { + type=""Simple"", + image=""initiativeOn"", + showAnimation=""Grow"", + hideAnimation=""Shrink"", + active=false + }, ""initiativeDisplay"") + } + } +end + +function makeAsset(assets, n, u) + table.insert(assets,{ + name=n, + url=u + }) +end + +function makeAssetButton(assets, graphics, name) + for n, u in pairs(graphics[name]) do + makeAsset(assets, name..n, u) + end +end + +--[[function debugLogUI(ui, level) + local level = level or 0 + for _,e in pairs(ui) do + local id = """" + if e.attributes and e.attributes.id then + id = e.attributes.id + end + log(string.rep("" "", level)..e.tag.."" ""..id) + if e.children then + debugLogUI(e.children, level + 1) + end + end +end]] + +function loadAssets(graphics) + local assets = {} + if graphics.eventLogo then + makeAsset(assets, ""eventLogo"", graphics.eventLogo) + end + + if graphics.eventBanner then + makeAsset(assets, ""eventBanner"", graphics.eventBanner) + end + + makeAssetButton(assets, graphics, ""initiative"") + makeAssetButton(assets, graphics, ""primary"") + + + UI.setCustomAssets(assets) + self.UI.setCustomAssets(assets) +end + +function hudScoreElement(ch, x, y, s, layout, pl) + local grandH = math.floor(s*0.75) + local subH = s - grandH + table.insert(ch, { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + outline=rules.art.colors.highlight, + outlineSize=""2 -2"", + rectAlignment=layout, + offsetXY = string.format(""%f %f"", x, y), + width=s, + height=s + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__grandtotal_player""..pl, + class=""finalScore"", + rectAlignment=""UpperCenter"", + height=grandH, + fontSize=grandH-12 + }, + value=""0"" + }, + { + tag=""Text"", + attributes={ + class=""title2"", + height=subH, + width=s/2, + fontSize=subH-8, + rectAlignment=""LowerLeft"", + id=""kts__primarytotal_player""..pl + }, + value=string.format(""0/%d"", rules.scoring.primary.max) + }, + { + tag=""Text"", + attributes={ + class=""title2"", + height=subH, + width=s/2, + fontSize=subH-8, + rectAlignment=""LowerRight"", + id=""kts__secondarytotal_player""..pl + }, + value=string.format(""0/%d"", rules.scoring.primary.max) + } + } + }) +end + +function hudInitiativeElement(ch, x, y, s, layout, pl) + table.insert(ch,{ + tag=""Image"", + attributes={ + class=""initiativeDisplay"", + id=""kts__initiative_display_player""..pl, + width=s, height=s, + rectAlignment=layout, + offsetXY = string.format(""%f %f"", x, y) + } + }) +end + +function hudNameElement(ch, x, y, w, h, layout, pl, suffix) + local playerc = rules.packet.players[pl] + local suffix = suffix or """" + table.insert(ch,{ + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=layout, + width = w, + height = h, + offsetXY = string.format(""%f %f"", x, y) + }, + children={ + { + tag=""Text"", + attributes={ + class=""steamName"", + id=paramPlayer[pl]..suffix, + color= string.format(""#%s"", Color.fromString(playerc):toHex()) + }, + value=playerc + } + } + }) +end + +function hudCommandElement(ch, x, y, w, h, layout, pl, suffix) + local guid = self.getGUID() + local vp = rules.packet.players[pl] + local suffix = suffix or """" + table.insert(ch,{ + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=layout, + width = w, + height = h, + offsetXY = string.format(""%f %f"", x, y) + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + id=""kts__command_player""..pl..suffix + }, + value=""0 CP"" + }, + { + tag=""Button"", + attributes={ + onClick=guid..""/onCommandPointUpPressed"", + width=h-8, height=h-8, + text=""+"", fontSize=h-8, + rectAlignment=""MiddleRight"", + visibility=vp, + id=""kts__command_increase_player""..pl + } + }, + { + tag=""Button"", + attributes={ + onClick=guid..""/onCommandPointDownPressed"", + width=h-8, height=h-8, + text=""-"", fontSize=h-8, + rectAlignment=""MiddleLeft"", + visibility=vp, + id=""kts__command_increase_player""..pl + } + } + } + }) +end + +function getHudVisibilities() + local players = Player.getColors() + local isStreamer = {} + local pvis = {} + local svis = {} + + for _,v in pairs(rules.packet.streamers) do + isStreamer[v] = true + end + + for _,col in pairs(players) do + if isStreamer[col] then + table.insert(svis, col) + else + table.insert(pvis, col) + end + end + return table.concat(pvis, ""|""), table.concat(svis, ""|"") +end + +function streamerUINameRow(ch, uiWidth, uiHeight, border, sep) + local h = 35 + local nw = (uiWidth-border*2-sep)/2 + hudNameElement(ch, border, -uiHeight, nw, h, ""UpperLeft"", 1, ""_streamer"") + hudNameElement(ch, border+nw+sep, -uiHeight, nw, h, ""UpperLeft"", 2, ""_streamer"") + return uiHeight + h +end + +function streamerUICPRow(ch, uiWidth, uiHeight, border, sep) + local h = 30 + local nw = (uiWidth-border*2-sep)/2 + hudCommandElement(ch, border, -uiHeight, nw, h, ""UpperLeft"", 1, ""_streamer"") + hudCommandElement(ch, border+nw+sep, -uiHeight, nw, h, ""UpperLeft"", 2, ""_streamer"") + return uiHeight + h +end + +function streamerUIRoundRow(ch, uiWidth, uiHeight, border, sep, round) + local h = 25 + local nw = (uiWidth - border*2) + local panel = { + tag=""Panel"", + attributes={ + width=nw, + height = h, + offsetXY=string.format(""0 %f"", -uiHeight), + rectAlignment=""UpperCenter"" + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=nw/2 + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=16, + text=""Round ""..round + } + } + } + }, + { + tag=""Image"", + attributes={ + class=""streamerInitiative"", + id=atrInitiative(1, round, ""streamer""), + width=h, height=h, + rectAlignment=""MiddleLeft"", + offsetXY=""20 0"" + } + }, + { + tag=""Image"", + attributes={ + class=""streamerInitiative"", + id=atrInitiative(2, round, ""streamer""), + width=h, height=h, + rectAlignment=""MiddleRight"", + offsetXY=""-20 0"" + } + } + } + } + table.insert(ch, panel) + return uiHeight + h +end + +function streamerPrimaryCel(t, x, y, w, h, rule, round, player) + table.insert(t, + { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width = w, + height = h, + offsetXY = string.format(""%f %f"", tostring(x), tostring(y)) + }, + children={ + { + tag=""Image"", + attributes={ + id=atrPrimary(player, rule, round,""streamer""), + class=""streamerScore"", + height=h-4, + tooltip=rules.scoring.primary.objectives[rule] + } + } + } + } + ) +end + +function streamerUIPrimaryRowPart(ch, x, y, w, pl, round) + local objs = #rules.scoring.primary.objectives + local cols = math.min(objs, rules.art.gui.scoreboard.primaryColumns) + local rows = math.ceil(objs/cols) + local celw = math.floor(w/cols) + local celh = 26 + local pch = {} + local h = celh * rows + + for i=1,rows do + local rcols = math.min(cols, objs-(i-1)*cols) + local rofs = (cols - rcols)*celw*0.5 + for j=1,rcols do + local rule = ((i-1)*cols + j) + streamerPrimaryCel(pch, celw*(j-1) + rofs, -celh*(i-1), celw, celh, rule, round, pl) + end + end + + table.insert(ch,{ + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=w, height=h, + offsetXY=string.format(""%f %f"", x, y), + rectAlignment=""UpperLeft"" + }, + children=pch + }) + return h +end + +function streamerUIPrimaryRow(ch, uiWidth, uiHeight, border, sep, round) + local nw = (uiWidth-border*2-sep)/2 + local h = streamerUIPrimaryRowPart(ch, border, -uiHeight, nw, 1, round) + streamerUIPrimaryRowPart(ch, border+nw+sep, -uiHeight, nw, 2, round) + return uiHeight + h +end + +function streamerUIHiddenSecondary(ch, x, y, w, h, player) + table.insert(ch, + { + tag=""Panel"", + attributes={ + width=w, + height = h, + offsetXY=string.format(""%f %f"", x, y), + color=rules.art.colors.darker, + outline=rules.art.colors.background, + rectAlignment=""upperLeft"" + }, + children={ + { + tag=""Text"", + attributes={ + id=""ktw__streamerSecondaries_player""..player, + fontSize=16 + } + } + } + } + ) +end + +function streamerUIHiddenSecondaryRow(ch, uiWidth, uiHeight, border, sep) + local nw = (uiWidth-border*2-sep)/2 + local h = 80 + streamerUIHiddenSecondary(ch, border, -uiHeight-20, nw, 60, 1) + streamerUIHiddenSecondary(ch, border+sep+nw, -uiHeight-20, nw, 60, 2) + table.insert(ch, { + tag=""Text"", + attributes={ + rectAlignment=""UpperCenter"", + offsetXY=string.format(""0 %f"", -uiHeight), + fontSize=16, + width = uiWidth, + height = 80, + alignment=""UpperCenter"", + text = ""Hands"" + } + }) + return uiHeight + h +end + +function streamerUITotalRow(ch, uiWidth, uiHeight, border, sep, totalKind) + local nw = (uiWidth-border*2-sep)/2 + local h = 40 + + local panel = { + tag=""Panel"", + attributes={ + width=uiWidth, + height = h, + offsetXY=string.format(""0 %f"", -uiHeight), + rectAlignment=""UpperCenter"" + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiWidth/3 + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=16, + text=(totalKind:gsub(""^%l"", string.upper)) + } + } + } + }, + { + tag=""Text"", + attributes={ + class=""title2"", + id=string.format(""kts__%stotal_player1_streamer"", totalKind), + width=2*h, height=h, + rectAlignment=""MiddleLeft"", + offsetXY=""20 0"" + }, + value=""0/9"" + }, + { + tag=""Text"", + attributes={ + class=""title2"", + id=string.format(""kts__%stotal_player2_streamer"", totalKind), + width=2*h, height=h, + rectAlignment=""MiddleRight"", + offsetXY=""-20 0"" + }, + value=""0/9"" + } + } + } + table.insert(ch, panel) + return uiHeight + h +end + +function streamerUISecondaryDisplay(ch, x, y, w, player, sec) + local h = 40 + table.insert(ch,{ + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width = w, + height = h, + rectAlignment=""UpperLeft"", + offsetXY=string.format(""%f %f"", tostring(x), tostring(y)) + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + id=atrSecondary(player, sec, ""streamer""), + rectAlignment=""UpperCenter"", + fontSize=16, + height=h/2 + }, + value=""..."" + }, + { + tag=""Text"", + attributes={ + class=""title2"", + id=atrSecondary(player, sec, ""streamer_amount""), + rectAlignment=""LowerCenter"", + width=w, + fontSize=16, + height=h/2 + }, + value=""0"" + } + } + }) + return h +end + +function streamerUISecondary(ch, x, y, w, sep, player) + local h = sep + local cch = {} + for i=1,3 do + h = h + streamerUISecondaryDisplay(cch, 0, -h, w, player, i) + sep + end + + table.insert(ch, { + tag=""Panel"", + attributes={ + rectAlignment=""UpperLeft"", + width=w, + height=h, + offsetXY=string.format(""%f %f"", tostring(x), tostring(y)) + }, + children=cch + }) + return h +end + +function streamerUISecondaryRow(ch, uiWidth, uiHeight, border, sep) + local nw = (uiWidth-border*2-sep)/2 + local h = streamerUISecondary(ch, border, -uiHeight, nw, sep, 1) + streamerUISecondary(ch, border+sep+nw, -uiHeight, nw, sep, 2) + return uiHeight + h +end + +function streamerUIGrandTotal(ch, x, y, s, player) + table.insert(ch, { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + outline=rules.art.colors.highlight, + outlineSize=""2 -2"", + rectAlignment=""UpperLeft"", + offsetXY = string.format(""%f %f"", x, y), + width=s, + height=s + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__grandtotal_player""..player..""_streamer"", + class=""finalScore"", + rectAlignment=""UpperCenter"", + height=s, + fontSize=s-12 + }, + value=""0"" + } + } + }) +end + +function streamerUIGrandTotalRow(ch, uiWidth, uiHeight, border, sep) + local h = 50 + local gtx1 = uiWidth/2 - h - 50 + local gtx2 = uiWidth/2 + 50 + streamerUIGrandTotal(ch, gtx1, -uiHeight, h, 1) + streamerUIGrandTotal(ch, gtx2, -uiHeight, h, 2) + return uiHeight + h +end + +function streamerUIBonusRow(ch, uiWidth, uiHeight, border, sep) + local h = 40 + local panelw = uiWidth-border*2 + table.insert(ch,{ + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=panelw, + height = h, + rectAlignment=""UpperCenter"", + offsetXY=string.format(""0 %f"", -uiHeight) + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=20 + }, + value=""Bonus"" + }, + { + tag=""Text"", + attributes={ + class=""title2"", + id=""kts__bonus_display_player1_streamer"", + fontSize=16, + rectAlignment=""MiddleLeft"", + width=panelw/2 + }, + value=""0"" + }, + { + tag=""Text"", + attributes={ + class=""title2"", + id=""kts__bonus_display_player2_streamer"", + fontSize=16, + rectAlignment=""MiddleRight"", + width=panelw/2 + }, + value=""0"" + } + } + }) + return uiHeight + h +end + +function buildStreamerUI(svis) + local uiWidth = 360 + local uiHeight = 5 + local border = 5 + local sep = 2 + --ADDED by ZAKA + local panelID = ""kts__streamer_panel""..missionSelectedForScoreboard + --ADDED by ZAKA + --DELETED by ZAKA + --local panelID = ""kts__streamer_panel"" + --DELETED by ZAKA + local uiSubWidth = uiWidth/2 + local ch = {} + + uiHeight = streamerUINameRow(ch, uiWidth, uiHeight, border, sep) + sep + uiHeight = streamerUICPRow(ch, uiWidth, uiHeight, border, sep) + sep + uiHeight = streamerUIHiddenSecondaryRow(ch, uiWidth, uiHeight, border, sep) + sep*2 + for i=1,rules.scoring.maxRounds do + uiHeight = streamerUIRoundRow(ch, uiWidth, uiHeight, border, sep, i) + sep + + --ADDED by ZAKA + if missionSelectedForScoreboard == ""e1bd09"" or missionSelectedForScoreboard == ""451ffb"" then + if i > 1 then + uiHeight = streamerUIPrimaryRow(ch, uiWidth, uiHeight, border, sep, i) + sep*2 + end + else + uiHeight = streamerUIPrimaryRow(ch, uiWidth, uiHeight, border, sep, i) + sep*2 + end + --ADDED by ZAKA + + --DELETED by ZAKA + --uiHeight = buildPrimaryRow(ch, uiHeight, 5, 0, uiWidth, round, 4) + 4 + --DELETED by ZAKA + end + --ADDED by ZAKA + if #rules.scoring.bonus.objectives > 0 then + uiHeight = streamerUIBonusRow(ch, uiWidth, uiHeight, border, sep) + sep + end + --ADDED by ZAKA + uiHeight = streamerUITotalRow(ch, uiWidth, uiHeight, border, sep, ""primary"") + sep*3 + uiHeight = streamerUISecondaryRow(ch, uiWidth, uiHeight, border, sep) + sep + --DELETED by ZAKA + --if #rules.scoring.bonus.objectives > 0 then + -- uiHeight = streamerUIBonusRow(ch, uiWidth, uiHeight, border, sep) + sep + --end + --DELETED by ZAKA + uiHeight = streamerUITotalRow(ch, uiWidth, uiHeight, border, sep, ""secondary"") + sep*3 + uiHeight = streamerUIGrandTotalRow(ch, uiWidth, uiHeight, border, sep) + border + + return { + tag=""Panel"", + attributes={ + class=""mainPanel"", + id=panelID, + width=uiWidth, + height=uiHeight, + visibility=svis, + allowDragging=true, + returnToOriginalPositionWhenReleased=false, + rectAlignment=""LowerRight"" + }, + children=ch + } +end + +function buildHUD(def) + local guid = self.getGUID() + local uiWidth = 650 + local uiHeight = 90 + local panelID = ""kts__hud_panel"" + local chl = {} + local chr = {} + local logoVisible = rules.art.graphics.eventLogo ~= nil + local uiSubWidth = uiWidth*0.5 + local logoWidth = rules.art.gui.overlay.logoWidth + local logoHeight = rules.art.gui.overlay.logoHeight + local uiMiddleZone = 150 + local nameplateWidth = math.floor(uiSubWidth*0.5 + 32) + + local hudVisibility, streamVisibility = getHudVisibilities() + + if logoVisible then + uiMiddleZone = math.max(uiMiddleZone, logoWidth+4) + end + uiWidth = uiWidth + uiMiddleZone + + hudScoreElement(chl, 0, 5, uiHeight, ""LowerRight"", 1) + hudInitiativeElement(chl, -(uiHeight + 4), -4, 32, ""UpperRight"", 1) + hudNameElement(chl, 2, -2, nameplateWidth, uiHeight*0.33, ""UpperLeft"", 1) + hudCommandElement(chl, 2, 2, nameplateWidth, uiHeight*0.66-6, ""LowerLeft"", 1) + + hudScoreElement(chr, 0, 5, uiHeight, ""LowerLeft"", 2) + hudInitiativeElement(chr, (uiHeight + 4), -4, 32, ""UpperLeft"", 2) + hudNameElement(chr, -2, -2, nameplateWidth, uiHeight*0.33, ""UpperRight"", 2) + hudCommandElement(chr, -2, 2, nameplateWidth, uiHeight*0.66-6, ""LowerRight"", 2) + + local ch = { + { + tag=""Panel"", + attributes={ + id=""scoreBoardGUI"", + class=""mainPanel"", + width=uiMiddleZone, + height=uiHeight/2, + rectAlignment=""LowerCenter"" + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=uiHeight*0.3, + id=""kts__round_current"" + }, + value=""Pre game"" + } + } + }, + + --ADDED by ZAKA + --Activated / End TP buttons + { + tag=""Panel"", + attributes={ + active=true, + id=""kts__pregame_panel"", + class=""mainPanel"", + width=uiMiddleZone, + height=uiHeight/2, + offsetXY=""0 ""..(uiHeight/2), + rectAlignment=""LowerCenter"" + }, + children={ + { + tag=""Button"", + attributes={ + active=gameStateMachine.preGame.active, + class=""activated"", + fontSize=uiHeight*0.2, + id=""kts__show_checklist_button"", + onClick=self.getGUID()..""/onShowChecklistBtn"", + tooltip=""Click open the pre game checklist"", + width=uiMiddleZone, + }, + value=""Show Pre Game Checklist"" + }, + { + tag=""Button"", + attributes={ + active=gameStateMachine.tp1.firefight or gameStateMachine.tp2.firefight or gameStateMachine.tp3.firefight or gameStateMachine.tp4.firefight and true or false, + class=""activated"", + fontSize=10, + id=""kts__activated_button"", + onClick=self.getGUID()..""/onActivatedBtn"", + tooltip=""Click to ready Opts and save their positions"", + width=uiMiddleZone*0.5, + offsetXY=""-""..(uiMiddleZone*0.25).."" 0"", + }, + value=""Activated"" + }, + { + tag=""Button"", + attributes={ + active=gameStateMachine.tp1.firefight or gameStateMachine.tp2.firefight or gameStateMachine.tp3.firefight or gameStateMachine.tp4.firefight and true or false, + class=""activated"", + fontSize=10, + id=""kts__end_tp_button"", + onClick=self.getGUID()..""/onEndTPBtn"", + tooltip=""Click to end TP and ready all operatives"", + width=uiMiddleZone*0.5, + offsetXY=(uiMiddleZone*0.25).."" 0"", + }, + value=""End TP"" + }, + { + tag=""Button"", + attributes={ + active=gameStateMachine.tp1.scoring or gameStateMachine.tp2.scoring or gameStateMachine.tp3.scoring or gameStateMachine.tp4.scoring and true or false, + class=""activated"", + fontSize=uiHeight*0.2, + id=""kts__scoring_button"", + onClick=self.getGUID()..""/onScoringBtn"", + tooltip=""Click to end scoring phase"", + width=uiMiddleZone, + }, + value=""End scoring"" + }, + { + tag=""Button"", + attributes={ + active=gameStateMachine.tp1.ploys or gameStateMachine.tp2.ploys or gameStateMachine.tp3.ploys or gameStateMachine.tp4.ploys and true or false, + class=""activated"", + fontSize=uiHeight*0.2, + id=""kts__end_ploys_button"", + onClick=self.getGUID()..""/onEndPloysBtn"", + tooltip=""Click to move to the tacops section"", + width=uiMiddleZone, + }, + value=""End Ploys section"" + }, + { + tag=""Button"", + attributes={ + active=gameStateMachine.tp1.tacops or gameStateMachine.tp2.tacops or gameStateMachine.tp3.tacops or gameStateMachine.tp4.tacops and true or false, + class=""activated"", + fontSize=uiHeight*0.2, + id=""kts__end_tacops_button"", + onClick=self.getGUID()..""/onEndTacopsBtn"", + tooltip=""Click to start firefight phase"", + width=uiMiddleZone, + }, + value=""End tacOps section"" + }, + { + tag=""Button"", + attributes={ + active=gameStateMachine.tp2.init or gameStateMachine.tp3.init or gameStateMachine.tp4.init and true or false, + class=""activated"", + fontSize=12, + id=""kts__end_init_1_button"", + onClick=self.getGUID()..""/onEndInitP1Btn"", + tooltip=""Click to start strategy phase"", + width=uiMiddleZone*0.5, + offsetXY=""-""..(uiMiddleZone*0.25).."" 0"", + }, + value=""Red Initiative"" + }, + { + tag=""Button"", + attributes={ + active=gameStateMachine.tp2.init or gameStateMachine.tp3.init or gameStateMachine.tp4.init and true or false, + class=""activated"", + fontSize=12, + id=""kts__end_init_2_button"", + onClick=self.getGUID()..""/onEndInitP2Btn"", + tooltip=""Click to start strategy phase"", + width=uiMiddleZone*0.5, + offsetXY=(uiMiddleZone*0.25).."" 0"", + }, + value=""Blue Initiative"" + }, + { + tag=""Button"", + attributes={ + active=false, + class=""activated"", + fontSize=10, + id=""kts__loading_button"", + width=uiMiddleZone, + }, + value=""Loading..."" + }, + { + tag=""Button"", + attributes={ + active=gameStateMachine.endGame.active, + class=""activated"", + fontSize=uiHeight*0.2, + id=""kts__end_game_button"", + onClick=self.getGUID()..""/onEndGame"", + tooltip=""Click to send game data"", + width=uiMiddleZone, + }, + value=""Send Game Data"" + }, + } + }, + { + tag=""Panel"", + attributes={ + id=""kts__red_faction_ui"", + class=""mainPanel"", + width=nameplateWidth, + height=20, + offsetXY=""2 ""..uiHeight, + rectAlignment=""lowerLeft"" + }, + children={ + { + tag=""Panel"", + attributes={ + width=nameplateWidth-4, + height=16, + class=""bkgPanel"", + rectAlignment=""middleCenter"" + }, + children={ + { + tag=""Text"", + attributes={ + class=""steamName"", + id=""kts__red_faction_ui_text"", + resizeTextForBestFit=false, + color=""Red"", + fontStyle="""", + fontSize=12, + }, + value=""Red Faction"" + } + } + } + } + }, + { + tag=""Panel"", + attributes={ + id=""kts__blue_faction_ui"", + class=""mainPanel"", + width=nameplateWidth, + height=20, + offsetXY=""-2 ""..uiHeight, + rectAlignment=""lowerRight"" + }, + children={ + { + tag=""Panel"", + attributes={ + width=nameplateWidth-4, + height=16, + class=""bkgPanel"", + rectAlignment=""middleCenter"" + }, + children={ + { + tag=""Text"", + attributes={ + class=""steamName"", + id=""kts__blue_faction_ui_text"", + resizeTextForBestFit=false, + color=""Blue"", + fontStyle="""", + fontSize=12, + }, + value=""Blue Faction"" + } + } + } + } + }, + --ADDED by ZAKA + + { + tag=""Panel"", + attributes={ + class=""mainPanel"", + width=uiSubWidth, + height=uiHeight, + rectAlignment=""LowerLeft"" + }, + children=chl + }, + { + tag=""Panel"", + attributes={ + class=""mainPanel"", + width=uiSubWidth, + height=uiHeight, + rectAlignment=""LowerRight"" + }, + children=chr + }, + { + tag=""Image"", + attributes={ + rectAlignment=""LowerCenter"", + offsetXY=""0 ""..(uiHeight*0.5), + image=""eventLogo"", + width=logoWidth, + height=logoHeight, + active=logoVisible + } + } + } + + local basePanel = { + tag=""Panel"", + attributes={ + id=panelID, + width=uiWidth, + --DELETED by ZAKA + --height=uiHeight, + --DELETED by ZAKA + --ADDED by ZAKA + height=uiHeight+30, + --ADDED by ZAKA + allowDragging=true, + returnToOriginalPositionWhenReleased=false, + visibility=hudVisibility, + rectAlignment=""LowerCenter"" + }, + children = ch + } + + if Global.UI.getAttribute(""scoreBoardGUI"", ""id"") == nil then + local oldUI = Global.UI.getXmlTable() + + if oldUI == nil then + oldUI = {} + end + table.insert(oldUI, def) + table.insert(oldUI, basePanel) + + --ADDED by ZAKA + checkPanel = buildHUDCheck(def) + table.insert(oldUI, checkPanel) + --ADDED by ZAKA + + table.insert(oldUI, buildStreamerUI(streamVisibility)) + Wait.frames(function() Global.UI.setXmlTable(oldUI) end, 1) + end +end + +--ADDED by ZAKA +function buildDropdownUI(group, playerName) + optionTable = {} + for _,name in ipairs(group) do + newFaction = { + tag=""Option"", + attributes={ + selected=playerName ~= nil and checkListStatus[playerName].faction == name and true or false or true, + }, + value=name, + } + table.insert(optionTable, newFaction) + end + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=playerName ~= nil and checkListStatus[playerName].faction == ""Select One"" and true or false or true, + }, + value=""Select One"", + }) + return optionTable +end +function buildOpenMissionDropdownUI() + optionTable = {} + for k,v in pairs(missionIndexOpen) do + newFaction = { + tag=""Option"", + attributes={ + selected=checkListStatus.mission == v.code.."" ""..v.name and true or false, + }, + value=v.code.."" ""..v.name, + } + table.insert(optionTable, newFaction) + end + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=checkListStatus.mission == ""Select One"" and true or false, + }, + value=""Select One"", + }) + return optionTable +end +function buildItdMissionDropdownUI() + optionTable = {} + for k,v in pairs(missionIndexItd) do + newFaction = { + tag=""Option"", + attributes={ + selected=checkListStatus.mission == v.code.."" ""..v.name and true or false, + }, + value=v.code.."" ""..v.name, + } + table.insert(optionTable, newFaction) + end + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=checkListStatus.mission == ""Select One"" and true or false, + }, + value=""Select One"", + }) + return optionTable +end +function buildTournamentDropdownUI() + optionTable = {} + for _,name in ipairs(tournamentIndex) do + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=checkListStatus.tournament == name and true or false, + }, + value=name, + }) + end + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=true, + }, + value=""Select One"", + }) + return optionTable +end +function buildEditionDropdownUI() + optionTable = {} + for _,name in ipairs(editionIndex) do + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=checkListStatus.edition == name and true or false, + }, + value=name, + }) + end + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=true, + }, + value=""Select One"", + }) + return optionTable +end +function buildGameTypeDropdownUI() + optionTable = {} + for _,name in ipairs(gameTypeIndex) do + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=checkListStatus.gameType == name and true or false, + }, + value=name, + }) + end + table.insert(optionTable, { + tag=""Option"", + attributes={ + selected=true, + }, + value=""Select One"", + }) + return optionTable +end +function buildAllowDataCollection1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + padding=""10 0 0 0"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""Allow data collection?"" + }, + } + } + } + } +end +function buildVideoTutorial1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + padding=""10 0 0 0"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""For a video tutorial, follow this link:"" + }, + } + } + } + } +end +function buildVideoTutorial2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + onClick=self.getGUID()..""/onTutorialClick"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + padding=""10 0 0 0"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + color=""White"", + }, + value=""https://youtu.be/GV7AnrjQr9A"" + }, + } + } + } + } +end +function buildAllowDataCollection2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_red_accept"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + tooltip=""We will use your Steam name to help us getting the game data but only in game. Your name will not be sent to the database, and the data stored will be anonymous."", + tooltipPosition=""Above"", + onValueChanged=self.getGUID()..""/onRedAcceptedDataCollection"", + isOn=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].allow == ""True"" and true or false or false, + }, + }, + { + tag=""Text"", + attributes={ + id=""kts__toggle_red_accept_text"", + offsetXY=""-""..(uiMiddleZone/16).."" 0"", + text=Player['Red'].steam_name ~= nil and Player['Red'].steam_name or ""no_player"", + fontSize=12, + }, + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_blue_accept"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + tooltip=""We will use your Steam name to help us getting the game data but only in game. Your name will not be sent to the database, and the data stored will be anonymous."", + tooltipPosition=""Above"", + onValueChanged=self.getGUID()..""/onBlueAcceptedDataCollection"", + isOn=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].allow == ""True"" and true or false or false, + }, + }, + { + tag=""Text"", + attributes={ + id=""kts__toggle_blue_accept_text"", + text=Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"", + }, + }, + } + } + } + } +end +function buildSecondaryTitle(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=30, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=15, + }, + value=""Game setup checklist - Complete all in order"" + }, + } + } +end +function buildGameType1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + alignment=""MiddleCenter"" + }, + value=""Select Edition and Game type"" + }, + } + }, + } + } +end +function buildGameType2(yPos, uiWidth, uiMiddleZone, panelHeight) + local optionsEd = buildEditionDropdownUI() + local optionsGt = buildGameTypeDropdownUI() + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=35, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + padding=""10 10 3 3"", + }, + children={ + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_edition"", + width=uiMiddleZone, + fontSize=12, + onValueChanged=self.getGUID()..""/onEditionSelected"", + }, + children=optionsEd, + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + padding=""10 10 3 3"", + }, + children={ + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_game_type"", + width=uiMiddleZone, + fontSize=12, + onValueChanged=self.getGUID()..""/onGameTypeSelected"", + }, + children=optionsGt, + }, + } + }, + } + } +end +function buildTournament1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + alignment=""MiddleCenter"" + }, + value=""Select Tournament"" + }, + } + }, + } + } +end +function buildTournament2(yPos, uiWidth, uiMiddleZone, panelHeight) + local options = buildTournamentDropdownUI() + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=35, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperRight"", + padding=""10 10 3 3"", + }, + children={ + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_tournament"", + width=uiMiddleZone, + fontSize=12, + onValueChanged=self.getGUID()..""/onTournamentSelected"", + }, + children=options, + }, + }, + } + } +end +function buildKillZoneLoaded1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + alignment=""MiddleCenter"", + }, + value=""Kill Zone additively loaded?"" + }, + } + } +end +function buildKillZoneLoaded2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_kz_loaded"", + tooltip=""Did you load the Kill Zone?"", + tooltipPosition=""Above"", + onValueChanged=self.getGUID()..""/onKillZoneLoaded"", + isOn=checkListStatus.killZoneLoaded == ""True"" and true or false, + }, + }, + } + } +end +function buildSelectMission1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + alignment=""MiddleCenter"" + }, + value=""Select Mission"" + }, + } + }, + } + } +end +function buildSelectMission2(yPos, uiWidth, uiMiddleZone, panelHeight) + local optionsOpen = buildOpenMissionDropdownUI() + local optionsItd = buildItdMissionDropdownUI() + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=35, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperRight"", + padding=""10 10 3 3"", + }, + children={ + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_mission_open"", + active=checkListStatus.edition == ""KT 2021 - Open"" and true or false, + width=uiMiddleZone, + fontSize=12, + onValueChanged=self.getGUID()..""/onOpenMissionSelected"", + }, + children=optionsOpen, + }, + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_mission_itd"", + active=checkListStatus.edition == ""KT 2022 - Into The Dark"" and true or false, + width=uiMiddleZone, + fontSize=12, + onValueChanged=self.getGUID()..""/onItdMissionSelected"", + }, + children=optionsItd, + }, + }, + }, + } + } +end +function buildRollOffWinner1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiWidth/4, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + alignment=""MiddleCenter"" + }, + value=""Dropzone Rolloff winner"" + }, + } + }, + }, + } +end +function buildRollOffWinner2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_red_rolloff_winner"", + onValueChanged=self.getGUID()..""/onRedWonRollOff"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + isOn=Player['Red'].steam_name ~= nil and Player['Red'].steam_name == checkListStatus.rollOffWinner and true or false or false, + }, + }, + { + tag=""Text"", + attributes={ + id=""kts__red_roloff_winner_text"", + text=Player['Red'].steam_name ~= nil and Player['Red'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"", + }, + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_blue_rolloff_winner"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + onValueChanged=self.getGUID()..""/onBlueWonRollOff"", + isOn=Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name == checkListStatus.rollOffWinner and true or false or false, + }, + }, + { + tag=""Text"", + attributes={ + id=""kts__blue_roloff_winner_text"", + text=Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"", + }, + }, + } + }, + }, + } +end +function buildRollOffSelection1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + padding=""10 0 0 0"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""Rolloff winner selection"" + }, + } + }, + } + } +end +function buildRollOffSelection2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_attacker_selected"", + onValueChanged=self.getGUID()..""/onAttackerSelected"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + isOn=checkListStatus.rollOffAttacker, + }, + }, + { + tag=""Text"", + attributes={ + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"", + }, + value=""Attacker"" + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_defender_selected"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + onValueChanged=self.getGUID()..""/onDefenderSelected"", + isOn=checkListStatus.rollOffDefender, + }, + }, + { + tag=""Text"", + attributes={ + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"", + }, + value=""Defender"" + }, + } + }, + } + } +end +function buildFaction1(yPos, uiWidth, uiMiddleZone, panelHeight, player) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__dropdown_""..string.lower(player.color)..""_faction_text"", + fontSize=12, + text=""Faction ""..(player.steam_name ~= nil and player.steam_name or ""no_player""), + }, + }, + } + }, + } + } +end +function buildFaction2(yPos, uiWidth, uiMiddleZone, panelHeight, player) + local imperiumFactionsOpts = buildDropdownUI(imperiumFactions, player.steam_name) + local chaosFactionsOpts = buildDropdownUI(chaosFactions, player.steam_name) + local xenosFactionsOpts = buildDropdownUI(xenosFactions, player.steam_name) + local aeldariFactionsOpts = buildDropdownUI(aeldariFactions, player.steam_name) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=35, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + onMouseExit=self.getGUID()..""/on""..player.color..""FactionPanelMouseExit"", + onMouseEnter=self.getGUID()..""/on""..player.color..""FactionMouseEnter"", + }, + children={ + { + tag=""Panel"", + attributes={ + id=""kts__dropdown_""..string.lower(player.color)..""_faction"", + visibility=""Blue|""..player.color..""|Black|Grey"", + onMouseExit=self.getGUID()..""/on""..player.color..""FactionPanelMouseExit"", + onMouseEnter=self.getGUID()..""/on""..player.color..""FactionMouseEnter"", + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + padding=""10 10 3 3"", + }, + children={ + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_""..string.lower(player.color)..""_super_faction"", + fontSize=12, + onValueChanged=self.getGUID()..""/on""..player.color..""SuperFactionSelected"", + onMouseEnter=self.getGUID()..""/on""..player.color..""FactionMouseEnter"", + }, + children={ + { + tag=""Option"", + attributes={ + selected=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Select One"" and true or false or true, + }, + value=""Select One"", + }, + { + tag=""Option"", + attributes={ + selected=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Imperium"" and true or false or false, + }, + value=""Imperium"", + }, + { + tag=""Option"", + attributes={ + selected=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Chaos"" and true or false or false, + }, + value=""Chaos"", + }, + { + tag=""Option"", + attributes={ + selected=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Xenos"" and true or false or false, + }, + value=""Xenos"", + }, + { + tag=""Option"", + attributes={ + selected=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Aeldari"" and true or false or false, + }, + value=""Aeldari"", + }, + } + } + } + }, + { + tag=""Panel"", + attributes={ + id=""kts__dropdown_""..string.lower(player.color)..""_faction_1"", + visibility=""Blue|""..player.color..""|Black|Grey"", + onMouseExit=self.getGUID()..""/on""..player.color..""FactionPanelMouseExit"", + onMouseEnter=self.getGUID()..""/on""..player.color..""FactionMouseEnter"", + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + padding=""10 10 3 3"", + }, + children={ + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_""..string.lower(player.color)..""_faction_imperium"", + active=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Imperium"" and true or false or false, + fontSize=12, + onValueChanged=self.getGUID()..""/on""..player.color..""FactionSelected"", + onMouseEnter=self.getGUID()..""/on""..player.color..""FactionMouseEnter"", + }, + children=imperiumFactionsOpts, + }, + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_""..string.lower(player.color)..""_faction_chaos"", + active=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Chaos"" and true or false or false, + fontSize=12, + onValueChanged=self.getGUID()..""/on""..player.color..""FactionSelected"", + onMouseEnter=self.getGUID()..""/on""..player.color..""FactionMouseEnter"", + }, + children=chaosFactionsOpts, + }, + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_""..string.lower(player.color)..""_faction_aeldari"", + active=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Aeldari"" and true or false or false, + fontSize=12, + onValueChanged=self.getGUID()..""/on""..player.color..""FactionSelected"", + onMouseEnter=self.getGUID()..""/on""..player.color..""FactionMouseEnter"", + }, + children=aeldariFactionsOpts, + }, + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_""..string.lower(player.color)..""_faction_xenos"", + active=player.steam_name ~= nil and checkListStatus[player.steam_name].superFaction == ""Xenos"" and true or false or false, + fontSize=12, + onValueChanged=self.getGUID()..""/on""..player.color..""FactionSelected"", + onMouseEnter=self.getGUID()..""/on""..player.color..""FactionMouseEnter"", + }, + children=xenosFactionsOpts, + }, + } + }, + } + } +end +function buildTacOpsSelected1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""Tac Ops Selected?"" + }, + } + }, + } + } +end +function buildTacOpsSelected2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__toggle_red_tacops_text"", + text=Player['Red'].steam_name ~= nil and Player['Red'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"", + }, + }, + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_red_tacops"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + onValueChanged=self.getGUID()..""/onRedTacOpsSelected"", + isOn=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].tacOps == ""True"" and true or false or false, + }, + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__toggle_blue_tacops_text"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"", + text=Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name or ""no_player"", + }, + }, + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_blue_tacops"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + onValueChanged=self.getGUID()..""/onBlueTacOpsSelected"", + isOn=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].tacOps == ""True"" and true or false or false, + }, + }, + } + } + } + } +end +function buildEquipmentSelected1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""Equipment selected?"" + }, + } + }, + } + } +end +function buildEquipmentSelected2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__toggle_red_equipment_text"", + text=Player['Red'].steam_name ~= nil and Player['Red'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"" + }, + }, + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_red_equipment"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + onValueChanged=self.getGUID()..""/onRedEquipmentSelected"", + isOn=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].equipment == ""True"" and true or false or false, + }, + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__toggle_blue_equipment_text"", + text=Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"" + }, + }, + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_blue_equipment"", + offsetXY=""10 0"", + rectAlignment=""MiddleRight"", + onValueChanged=self.getGUID()..""/onBlueEquipmentSelected"", + isOn=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].equipment == ""True"" and true or false or false, + }, + }, + } + } + } + } +end +function buildBarricadePlacing1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""Barricades placed?"" + }, + } + }, + } + } +end +function buildBarricadePlacing2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__toggle_red_barricades_text"", + text=Player['Red'].steam_name ~= nil and Player['Red'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"" + }, + }, + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_red_barricades"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + onValueChanged=self.getGUID()..""/onRedBarricadesPlaced"", + isOn=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].barricades == ""True"" and true or false or false, + }, + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__toggle_blue_barricades_text"", + text=Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"" + }, + }, + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_blue_barricades"", + offsetXY=""10 0"", + rectAlignment=""MiddleRight"", + onValueChanged=self.getGUID()..""/onBlueBarricadesPlaced"", + isOn=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].barricades == ""True"" and true or false or false, + }, + }, + } + } + } + } +end +function buildDeploymentDone1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""Operatives deployed/orders given?"" + }, + } + }, + } + } +end +function buildDeploymentDone2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperLeft"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__toggle_red_deployed_text"", + text=Player['Red'].steam_name ~= nil and Player['Red'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"" + }, + }, + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_red_deployed"", + offsetXY=""10 0"", + rectAlignment=""MiddleRight"", + onValueChanged=self.getGUID()..""/onRedDeployed"", + isOn=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].deployed == ""True"" and true or false or false, + }, + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/2, + rectAlignment=""UpperRight"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__toggle_blue_deployed_text"", + text=Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name or ""no_player"", + fontSize=12, + offsetXY=""-""..(uiMiddleZone/16).."" 0"" + }, + }, + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_blue_deployed"", + rectAlignment=""MiddleRight"", + offsetXY=""10 0"", + onValueChanged=self.getGUID()..""/onBlueDeployed"", + isOn=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].deployed == ""True"" and true or false or false, + }, + }, + } + } + } + } +end +function buildAllowOverwatch1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""Allow Overwatch functionallity"" + }, + } + }, + } + } +end +function buildAllowOverwatch2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_overwatch"", + tooltip=""Do you allow the mod to help you with Overwatch?"", + tooltipPosition=""Above"", + onValueChanged=self.getGUID()..""/onAllowOverwatchSelected"", + isOn=checkListStatus.allowOW == ""True"" and true or false, + }, + }, + } + } +end +function buildScoutingPhase1(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=12, + }, + value=""Scouting Phase"" + }, + } + }, + } + } +end +function buildScoutingPhase2(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=35, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/3, + rectAlignment=""UpperLeft"", + padding=""10 10 3 3"", + visibility=""Red|Black"" + }, + children={ + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_red_scouting"", + fontSize=12, + onValueChanged=self.getGUID()..""/onRedScoutingSelected"", + }, + children={ + { + tag=""Option"", + attributes={ + selected=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].scouting == ""Select One"" and true or false or true, + }, + value=""Select One"", + }, + { + tag=""Option"", + attributes={ + selected=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].scouting == ""Fortify"" and true or false or false, + }, + value=""Fortify"", + }, + { + tag=""Option"", + attributes={ + selected=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].scouting == ""Infiltrate"" and true or false or false, + }, + value=""Infiltrate"", + }, + { + tag=""Option"", + attributes={ + selected=Player['Red'].steam_name ~= nil and checkListStatus[Player['Red'].steam_name].scouting == ""Recon"" and true or false or false, + }, + value=""Recon"", + }, + } + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/3, + rectAlignment=""UpperLeft"", + padding=""10 10 3 3"", + visibility=""Blue|Black"" + }, + children={ + { + tag=""Dropdown"", + attributes={ + id=""kts__dropdown_blue_scouting"", + fontSize=12, + onValueChanged=self.getGUID()..""/onBlueScoutingSelected"", + }, + children={ + { + tag=""Option"", + attributes={ + selected=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].scouting == ""Select One"" and true or false or true, + }, + value=""Select One"", + }, + { + tag=""Option"", + attributes={ + selected=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].scouting == ""Fortify"" and true or false or false, + }, + value=""Fortify"", + }, + { + tag=""Option"", + attributes={ + selected=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].scouting == ""Infiltrate"" and true or false or false, + }, + value=""Infiltrate"", + }, + { + tag=""Option"", + attributes={ + selected=Player['Blue'].steam_name ~= nil and checkListStatus[Player['Blue'].steam_name].scouting == ""Recon"" and true or false or false, + }, + value=""Recon"", + }, + } + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/3, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Toggle"", + attributes={ + id=""kts__toggle_reveal_scouting"", + onValueChanged=self.getGUID()..""/onRevealScouting"", + rectAlignment=""MiddleRight"", + offsetXY=""30 0"", + isOn=checkListStatus.revealed, + }, + }, + { + tag=""Text"", + attributes={ + fontSize=12, + rectAlignment=""MiddleLeft"", + }, + value=""Reveal"" + }, + } + }, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + width=uiMiddleZone/3, + rectAlignment=""UpperRight"", + }, + children={ + { + tag=""Text"", + attributes={ + id=""kts__scouting_resolution"", + fontSize=12, + }, + value=checkListStatus.winner, + }, + } + }, + } + } +end +function buildControlButtons(yPos, uiWidth, uiMiddleZone, panelHeight) + return { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=panelHeight*2, + rectAlignment=""UpperCenter"", + offsetXY=""0 ""..yPos, + }, + children={ + { + tag=""Button"", + attributes={ + id=""kts__start_over_button"", + onClick=self.getGUID()..""/onStartOverBtn"", + width=uiMiddleZone/3, + rectAlignment=""MiddleLeft"", + }, + value=""Start Over"" + }, + { + tag=""Button"", + attributes={ + id=""kts__hide_checklist_button"", + onClick=self.getGUID()..""/onHideChecklistBtn"", + width=uiMiddleZone/3, + rectAlignment=""MiddleCenter"", + }, + value=""Hide Checklist"" + }, + { + tag=""Button"", + attributes={ + id=""kts__start_game_button"", + onClick=self.getGUID()..""/onStartGameBtn"", + width=uiMiddleZone/3, + rectAlignment=""MiddleRight"", + }, + value=""Let's WAAAAAAGH!!"" + }, + } + } +end +function buildHUDCheck(def) + local guid = self.getGUID() + local uiWidth = 650 + local uiHeight = 990 + local panelHeight = 25 + local panelID = ""kts__checklist_panel"" + local chl = {} + local chr = {} + local logoVisible = rules.art.graphics.eventLogo ~= nil + local uiSubWidth = uiWidth*0.5 + local logoWidth = rules.art.gui.overlay.logoWidth + local logoHeight = rules.art.gui.overlay.logoHeight + local uiMiddleZone = 350 + local nameplateWidth = math.floor(uiSubWidth*0.5 + 32) + + if logoVisible then + uiMiddleZone = math.max(uiMiddleZone, logoWidth+4) + end + uiWidth = uiWidth + uiMiddleZone + local yPos = -31 + local yPosOffsS = 26 + local yPosOffsL1 = 36 + local yPosOffsL2 = 31 + local videoTutorialTitle = buildVideoTutorial1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local videoTutorial = buildVideoTutorial2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local allowDataCollectionTitle = buildAllowDataCollection1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local allowDataCollection = buildAllowDataCollection2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local secondaryTitle = buildSecondaryTitle(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsL2 + local gameTypeTitle = buildGameType1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local gameType = buildGameType2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsL1 + local tournamentTitle = buildTournament1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local tournament = buildTournament2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsL1 + local killZoneLoadedTitle = buildKillZoneLoaded1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local killZoneLoaded = buildKillZoneLoaded2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local selectMissionTitle = buildSelectMission1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local selectMission = buildSelectMission2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsL1 + local rollOffWinnerTitle = buildRollOffWinner1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS - 1 + local rollOffWinner = buildRollOffWinner2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local rollOffSelectionTitle = buildRollOffSelection1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local rollOffSelection = buildRollOffSelection2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local redFactionTitle = buildFaction1(yPos, uiWidth, uiMiddleZone, panelHeight, Player['Red']) + yPos = yPos - yPosOffsS + local redFaction = buildFaction2(yPos, uiWidth, uiMiddleZone, panelHeight, Player['Red']) + yPos = yPos - yPosOffsL1 + local blueFactionTitle = buildFaction1(yPos, uiWidth, uiMiddleZone, panelHeight, Player['Blue']) + yPos = yPos - yPosOffsS + local blueFaction = buildFaction2(yPos, uiWidth, uiMiddleZone, panelHeight, Player['Blue']) + yPos = yPos - yPosOffsL1 + local tacOpsSelectedTitle = buildTacOpsSelected1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local tacOpsSelected = buildTacOpsSelected2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local equipmentSelectedTitle = buildEquipmentSelected1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local equipmentSelected = buildEquipmentSelected2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local barricadePlacingTitle = buildBarricadePlacing1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local barricadePlacing = buildBarricadePlacing2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local deploymentDoneTitle = buildDeploymentDone1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local deploymentDone = buildDeploymentDone2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local allowOverwatchTitle = buildAllowOverwatch1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local allowOverwatch = buildAllowOverwatch2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local scoutingPhaseTitle = buildScoutingPhase1(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsS + local scoutingPhase = buildScoutingPhase2(yPos, uiWidth, uiMiddleZone, panelHeight) + yPos = yPos - yPosOffsL1 + local controlButtons = buildControlButtons(yPos, uiWidth, uiMiddleZone, panelHeight) + + local checkPanel = { + --Pregame Checklist + --Title + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=30, + rectAlignment=""UpperCenter"", + }, + children={ + { + tag=""Text"", + attributes={ + class=""title2"", + fontSize=20, + }, + value=""Pre-Game Checklist"" + }, + } + }, + --Video tutorial + videoTutorialTitle, + videoTutorial, + --Allow data collection + allowDataCollectionTitle, + allowDataCollection, + --Secondary title + secondaryTitle, + --Game type + gameTypeTitle, + gameType, + --Tournament + tournamentTitle, + tournament, + --Kill Zone Loaded + killZoneLoadedTitle, + killZoneLoaded, + --Mission + selectMissionTitle, + selectMission, + --Roll off winner + rollOffWinnerTitle, + rollOffWinner, + --Roll Off winner Selection + rollOffSelectionTitle, + rollOffSelection, + --Red Faction + redFactionTitle, + redFaction, + --Blue Faction + blueFactionTitle, + blueFaction, + --Tac Ops Selected + tacOpsSelectedTitle, + tacOpsSelected, + --Equipment selected + equipmentSelectedTitle, + equipmentSelected, + --Barricades placed + barricadePlacingTitle, + barricadePlacing, + --Operatives Deployed + deploymentDoneTitle, + deploymentDone, + --Allow Overwatch + allowOverwatchTitle, + allowOverwatch, + --Scouting Phase + scoutingPhaseTitle, + scoutingPhase, + --Control Buttons + controlButtons, + } + + local mainCheckPanel = { + tag=""Panel"", + attributes={ + id=panelID, + class=""mainPanel"", + width=uiMiddleZone, + height=uiHeight, + visibility=""White"", + rectAlignment=""LowerLeft"", + offsetXY=""80 30"", + }, + children = checkPanel + } + return mainCheckPanel +end +--ADDED by ZAKA + +function buildUI() + loadAssets(rules.art.graphics) + + --build the screen overlay + --screen overlay should be generated instead of a flat xml file + --it should be themed the same as everything else + --UI.setXml(uiScreenOverlay) + + --generate default UI classes + local defaults = makeDefaults(rules) + + Wait.frames(function() buildHUD(defaults) end, 20) + + + --build the main scoreboard + buildScoreboard(defaults) + + --[[ + build dashboards. + + local dashboards = getObjectsWithTag(dashboardTag) + for _, board in pairs(dashboards) do + board.UI.setCustomAssets(assets) + buildDashboard(board, defaults) + end + showUI(""kts_startHidden"")]] +end + +function loadGM() + local tabs = Notes.getNotebookTabs() + local gmn = nil + for _,t in pairs(tabs) do + if t.title == settingsNotes then + gmn = t.body + break + end + end + if gmn == nil then + broadcastToAll(setupMessage) + gmn = defaultSettings + Notes.addNotebookTab({ + title=settingsNotes, + body=gmn, + color=""Black"" + }) + end + local settings = JSON.decode(gmn) + + setup(settings) + buildUI() + Wait.frames(refresh, 10) + Timer.create({ + identifier=self.getGUID(), + function_name=""checkPlayerHands"", + delay=1, + repetitions=0 + }) +end + +function onSave() + local save = { + splayers=players, + splayerNumber=playerNumber, + srules=rules, + sscoring=scoring, + + --ADDED by ZAKA + sresult = result, + schecklist = checkListStatus, + sgamestate = gameStateMachine, + soverwatch = overwatchTable, + --ADDED by ZAKA + + } + return JSON.encode(save) +end + +function checkPlayerHands() + for pl, c in pairs(rules.packet.players) do + p = Player[c] + hobjs = p.getHandObjects() + honames = {} + for n, o in pairs(hobjs) do + table.insert(honames, o.getName()) + end + uiid = ""ktw__streamerSecondaries_player""..pl + if #honames > 0 then + if #honames > 3 then + setUIValue(uiid, ""Too many\nin hand"") + else + setUIValue(uiid, table.concat(honames,""\n"")) + end + else + setUIValue(uiid, """") + end + end +end + +function onLoad(state) + self.setTags({scoreboardTag}) + if state then + local state = JSON.decode(state) + if state then + players = state[""splayers""] or players + playerNumber = state[""splayerNumber""] or playerNumber + rules = state[""srules""] or rules + scoring = state[""sscoring""] or scoring + + --ADDED by ZAKA + result = state[""sresult""] or result + checkListStatus = state[""schecklist""] or checkListStatus + gameStateMachine = state[""sgamestate""] or gameStateMachine + overwatchTable = state[""soverwatch""] or overwatchTable + updateMegaDeck() + --ADDED by ZAKA + + end + end + + --ADDED by ZAKA + if Player[""Red""].steam_name ~= nil then + if checkListStatus[Player[""Red""].steam_name] == nil then + checkListStatus[Player[""Red""].steam_name] = { + name = """", + allow = false, + faction = ""Select One"", + tacOps = false, + equipment = false, + barricades = false, + deployed = false, + allowOW = false, + scouting = ""Select One"", + } + end + end + if Player[""Blue""].steam_name ~= nil then + if checkListStatus[Player[""Blue""].steam_name] == nil then + checkListStatus[Player[""Blue""].steam_name] = { + name = """", + allow = false, + faction = ""Select One"", + tacOps = false, + equipment = false, + barricades = false, + deployed = false, + allowOW = false, + scouting = ""Select One"", + } + end + end + --ADDED by ZAKA + + loadGM() +end + +function setSecondaryObjective(pl, sec, name) + local selector = atrSecondary(pl, sec, ""dropdown"") + local display = atrSecondary(pl, sec, ""display"") + setUIValue(display, name) + hideUI(selector) + showUI(display) + + setUIValue(atrSecondary(pl, sec, ""streamer""), name) + scoring[pl].secondary[sec][1]=name + refreshSecondaryUI(pl, sec) +end + +function onSecondarySelected(pl, val, id) + local pl, sec = string.gmatch(id, ""(%d+)_(%d+)"")() + setSecondaryObjective(tonumber(pl), tonumber(sec), val) +end + +function refreshSecondaryUI(pl, sec) + local secondary = scoring[pl].secondary[sec] + local max = rules.scoring.secondary.maxExemption[secondary[1]] or rules.scoring.secondary.maxEach + local newstr + if max > 0 then + newstr = string.format(""%d/%d"", secondary[2], max) + else + newstr = string.format(""%d"", secondary[2]) + end + setUIValue(atrSecondary(pl, sec, ""amount""), newstr) + setUIValue(atrSecondary(pl, sec, ""streamer_amount""), newstr) +end + +function setSecondaryScore(pl, sec, val) + local secondary = scoring[pl].secondary[sec] + local max = rules.scoring.secondary.maxExemption[secondary[1]] or rules.scoring.secondary.maxEach + local newval = math.max(0, math.min(val, max)) + secondary[2] = newval + + --ADDED by ZAKA + if val == newval then + setSecondaryResult(pl, sec, 1) + end + --ADDED by ZAKA + + refreshSecondaryUI(pl, sec) + updateScoreUI(pl) +end + +function refreshBonusUI(pl) + local value = scoring[pl].secondary[4] + local max = rules.scoring.bonus.max + local newstr + if max > 0 then + newstr = string.format(""%d/%d"", value, max) + else + newstr = string.format(""%d"", value) + end + setUIValue(""kts__bonus_display_player""..pl, newstr) + setUIValue(""kts__bonus_display_player""..pl..""_streamer"", newstr) +end + +function setBonusScore(pl, val) + local max = rules.scoring.bonus.max + scoring[pl].secondary[4] = math.max(0, math.min(val, max)) + + refreshBonusUI(pl) + updateScoreUI(pl) +end + +function onIncreaseSecondary(player, val, id) + local pl, sec = string.gmatch(id, ""(%d+)_(%d+)"")() + pl, sec = tonumber(pl), tonumber(sec) + if allowRecord(pl, true) then + setSecondaryScore(pl, sec, scoring[pl].secondary[sec][2] + 1) + else + showMaxRecordMessage(player) + end +end + +function onDecreaseSecondary(player, val, id) + local pl, sec = string.gmatch(id, ""(%d+)_(%d+)"")() + pl, sec = tonumber(pl), tonumber(sec) + setSecondaryScore(pl, sec, scoring[pl].secondary[sec][2] - 1) +end + +function onIncreaseBonus(player, val, id) + local pl = tonumber(string.gmatch(id, ""(%d+)"")()) + if allowRecord(pl, true) then + setBonusScore(pl, scoring[pl].secondary[4] + 1) + else + showMaxRecordMessage(player) + end +end + +function onDecreaseBonus(player, val, id) + local pl = tonumber(string.gmatch(id, ""(%d+)"")()) + setBonusScore(pl, scoring[pl].secondary[4] - 1) +end + +function updateScoreUI(pl) + local score, ps, ss = calculateScore(pl) + local primary = string.format(""%d/%d"", ps, rules.scoring.primary.max) + local secondary = string.format(""%d/%d"", ss, rules.scoring.secondary.max) + local grand = string.format(""%d"", ps + ss) + + setUIValue(""kts__primarytotal_player""..pl, primary) + setUIValue(""kts__primarytotal_player""..pl..""_streamer"", primary) + + setUIValue(""kts__secondarytotal_player""..pl, secondary) + setUIValue(""kts__secondarytotal_player""..pl..""_streamer"", secondary) + + setUIValue(""kts__grandtotal_player""..pl, grand) + setUIValue(""kts__grandtotal_player""..pl..""_streamer"", grand) + + if score == rules.scoring.max then + showUI(""kts__grandtotal_max_player""..pl) + else + hideUI(""kts__grandtotal_max_player""..pl) + end +end + +function setPrimaryUI(pl, rule, round, value) + local toggleID = atrPrimary(pl, rule, round, ""toggle"") + local displayID = atrPrimary(pl, rule, round, ""streamer"") + if value then + setUIAttribute(toggleID, ""image"", ""primaryOn"") + setUIAttribute(displayID, ""image"", ""primaryOn"") + else + setUIAttribute(toggleID, ""image"", ""primaryOff"") + setUIAttribute(displayID, ""image"", ""primaryOff"") + end +end + +function togglePrimary(pl, rule, round) + local otherPlayer = (pl==1) and 2 or 1 + local value = not scoring[pl].primary[rule][round] + local exclusive = rules.scoring.primary.exclusive[rule] + if allowRecord(pl, value, rule) then + setPrimaryUI(pl, rule, round, value) + + scoring[pl].primary[rule][round] = value + updateScoreUI(pl) + if value and exclusive and scoring[otherPlayer].primary[rule][round] == true then + togglePrimary(otherPlayer, rule, round) + end + else + return false + end + return true +end + +function onPrimaryPressed(player, val, id) + local pl, rule, round = string.gmatch(id, ""(%d+)_(%d+)_(%d+)"")() + if not togglePrimary(tonumber(pl), tonumber(rule), tonumber(round)) then + showMaxRecordMessage(player) + end +end + +function setInitiativeUI(pl, round, value) + local toggleID = atrInitiative(pl, round, ""toggle"") + local displayID = atrInitiative(pl, round, ""streamer"") + if value then + setUIAttribute(toggleID, ""image"", ""initiativeOn"") + setUIAttribute(displayID, ""image"", ""initiativeOn"") + else + setUIAttribute(toggleID, ""image"", ""initiativeOff"") + setUIAttribute(displayID, ""image"", ""initiativeOff"") + end +end + +function updateInitiativeUI() + local round = 0 + local ip, np = 0, 0 + local maxRounds = rules.scoring.maxRounds + for i=maxRounds,1,-1 do + if scoring[1].initiative[i] then + round = i + ip, np = 1, 2 + break + end + if scoring[2].initiative[i] then + round = i + ip, np = 2, 1 + break + end + end + + if round > 0 then + showUI(""kts__initiative_display_player""..ip) + hideUI(""kts__initiative_display_player""..np) + setUIValue(""kts__round_current"", ""Round ""..round) + else + hideUI(""kts__initiative_display_player1"") + hideUI(""kts__initiative_display_player2"") + setUIValue(""kts__round_current"", ""Pre game"") + end +end + +function toggleInitiative(pl, round) + local otherPlayer = (pl==1) and 2 or 1 + local si = scoring[pl].initiative + local osi = scoring[otherPlayer].initiative + local value = not si[round] + setInitiativeUI(pl, round, value) + si[round] = value + if value and osi[round] then + toggleInitiative(otherPlayer, round) + end +end + +function onInitiativePressed(player, val, id) + local pl, round = string.gmatch(id, ""(%d+)_(%d+)"")() + toggleInitiative(tonumber(pl), tonumber(round)) + updateInitiativeUI() +end + +function setDropdownItem(id, value) + local drop = dropdowns[id] + if drop then + local item = drop.items[value] + if item and item ~= drop.selected then + --setUIAttribute(id, ""selectedIndex"", item) + setUIValue(id, item) + drop.selected = item + end + end +end + +function setCommandPoints(pl, val) + scoring[pl].command = val + local ncpv = string.format(""%d CP"", val) + local uiid = ""kts__command_player""..pl + setUIValue(uiid, ncpv) + setUIValue(uiid..""_streamer"", ncpv) +end + +function onCommandPointUpPressed(player, val, id) + local pl = tonumber(string.gmatch(id, ""player(%d+)"")()) + setCommandPoints(pl, scoring[pl].command + 1) +end + +function onCommandPointDownPressed(player, val, id) + local pl = tonumber(string.gmatch(id, ""player(%d+)"")()) + setCommandPoints(pl, scoring[pl].command - 1) +end + +function allowRecord(pl, increase, primary) + local primary = primary or false + if increase and rules.scoring.limitRecordToMax then + local ts, ps, ss = calculateScore(pl) + if ts < rules.scoring.max then + if primary then + local max = rules.scoring.primary.max + local maxEach = rules.scoring.primary.maxEach + if maxEach > 0 then + local p = scoring[pl].primary[primary] + local total = 0 + for k, v in pairs(p) do + total = total + (v and 1 or 0) + end + if total >= maxEach then return false end + end + if max > 0 then + return ps < max + end + else + local max = rules.scoring.secondary.max + if max > 0 then + return ss < max + end + end + return true + end + return false + end + return true +end + +function comSetSecondary(params) + local color = params.player + local secondary = params.secondary + local name = params.name + if color and secondary and name then + local p = playerNumber[color] + if p then + setSecondaryObjective(p, secondary, name) + end + end +end + +function showMaxRecordMessage(pl) + broadcastToColor(""Can't record this point: a point limit has been reached"", pl.color, Color.red) +end + +function onChat(message, sender) + if sender.color == ""Black"" and message == ""reload scoreboard"" then + broadcastToAll(""Reloading scoreboard rules..."") + loadGM() + end + + --ADDED by ZAKA + if sender.color == ""Black"" and message == ""my turn"" then + gameStateMachine.whoToPress = sender.steam_name + setUIAttribute(""kts__activated_button"", ""textColor"", sender.color) + broadcastToAll(""Now it's ""..gameStateMachine.whoToPress.."" turn"") + end + if sender.color == ""Black"" and message == ""reset pregame data"" then + checkListStatus = { + killZoneLoaded = false, + allowOW = false, + gameType = ""Select One"", + edition = ""Select One"", + mission = ""Select One"", + rollOffWinner=""Select One"", + rollOffAttacker=false, + rollOffDefender=false, + revealed=false, + winner="""", + } + updateCheckList() + end + --ADDED by ZAKA + +end + +--ADDED by ZAKA +function onTutorialClick(player) + showYoutubeLink(player) +end +function onRedAcceptedDataCollection(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_red_accept_text"", ""text"") then + setAllowData(player, value) + checkListStatus[player.steam_name].allow = value + setUIAttribute(""kts__toggle_red_accept"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_red_accept"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_red_accept_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_red_accept"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_red_accept_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_red_accept_text"", ""text"")].allow or checkListPlayer.allow) +end +function onBlueAcceptedDataCollection(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_blue_accept_text"", ""text"") then + setAllowData(player, value) + checkListStatus[player.steam_name].allow = value + setUIAttribute(""kts__toggle_blue_accept"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_blue_accept"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_blue_accept_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_blue_accept"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_blue_accept_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_blue_accept_text"", ""text"")].allow or checkListPlayer.allow) +end +function onEditionSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + setUIAttribute(""kts__dropdown_mission_open"", ""active"", false) + setUIAttribute(""kts__dropdown_mission_itd"", ""active"", false) + result.edition = ""Select One"" + checkListStatus.edition = ""Select One"" + setUIAttribute(""kts__dropdown_edition"", ""textColor"", ""#e74f0aff"") + if value ~= ""Select One"" then + checkListStatus.edition = value + result.edition = value + if value == ""KT 2021 - Open"" then + setUIAttribute(""kts__dropdown_mission_open"", ""active"", true) + getObjectFromGUID(masterBagOpen).call(""masterPlace"") + else + setUIAttribute(""kts__dropdown_mission_itd"", ""active"", true) + getObjectFromGUID(masterBagItd).call(""masterPlace"") + end + broadcastToAll(""Edition: ""..value.."" selected"") + setUIAttribute(""kts__dropdown_edition"", ""textColor"", player.color) + end + end + changeMultiDropdown({ + ""kts__dropdown_edition"", + ""kts__dropdown_mission_open"", + ""kts__dropdown_mission_itd"", + }, + { + checkListStatus.edition, + ""Select One"", + ""Select One"", + }) +end +function onGameTypeSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + result.gameType = ""Select One"" + checkListStatus.gameType = ""Select One"" + setUIAttribute(""kts__dropdown_game_type"", ""textColor"", ""#e74f0aff"") + if value ~= ""Select One"" then + checkListStatus.gameType = value + result.gameType = value + broadcastToAll(""Game type: ""..value.."" selected"") + setUIAttribute(""kts__dropdown_game_type"", ""textColor"", player.color) + end + if value ~= ""Matched play"" then + result.tournament = ""Select One"" + checkListStatus.tournament = ""Select One"" + setUIAttribute(""kts__dropdown_tournament"", ""textColor"", ""#e74f0aff"") + Wait.frames(function () + changeDropdown(""kts__dropdown_tournament"", ""Select One"") + end, 50) + end + end + changeDropdown(""kts__dropdown_game_type"", checkListStatus.gameType) +end +function onTournamentSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + result.tournament = ""Select One"" + checkListStatus.tournament = ""Select One"" + setUIAttribute(""kts__dropdown_tournament"", ""textColor"", ""#e74f0aff"") + if value ~= ""Select One"" then + if result.gameType == ""Matched Play"" then + checkListStatus.tournament = value + result.tournament = value + broadcastToAll(""Tournament: ""..value.."" selected"") + setUIAttribute(""kts__dropdown_tournament"", ""textColor"", player.color) + else + broadcastToAll(""To choose a tournament, select 'Matched play' on Game type"") + end + end + end + changeDropdown(""kts__dropdown_tournament"", checkListStatus.tournament) +end +function onKillZoneLoaded(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + result.killZoneLoaded = value + checkListStatus.killZoneLoaded = value + setUIAttribute(""kts__toggle_kz_loaded"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + end + setUIAttribute(""kts__toggle_kz_loaded"", ""isOn"", checkListStatus.killZoneLoaded == ""True"" and true or false) +end +function onOpenMissionSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + for k,v in pairs(missionIndexOpen) do + obj = getObjectFromGUID(k) + if obj ~= nil then + obj.call(""buttonClick_recall"") + end + obj = getObjectFromGUID(v.objGuid) + if obj ~= nil then + obj.call(""buttonClick_recall"") + end + if string.match(' '..value..' ', '%A'..v.code..'%A') ~= nil then + setMission(missionIndexOpen[k]) + for k,v in pairs(missionIndexOpen) do + if v == result.mission then + Wait.frames( + function() + obj = getObjectFromGUID(k) + if obj ~= nil then + obj.call(""buttonClick_place"") + end + obj = getObjectFromGUID(v.objGuid) + Wait.frames( + function () + if obj ~= nil then + obj.call(""buttonClick_place"") + end + end, 30) + end, 30 + ) + changeMissionScoreboard(k) + end + end + checkListStatus.mission = value + setUIAttribute(""kts__dropdown_mission_open"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + end + end + end + Wait.frames(function() + changeDropdown(""kts__dropdown_mission_open"", checkListStatus.mission) + end, 10) +end +function onItdMissionSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + for k,v in pairs(missionIndexItd) do + obj = getObjectFromGUID(k) + if obj ~= nil then + obj.call(""buttonClick_recall"") + end + obj = getObjectFromGUID(v.objGuid) + if obj ~= nil then + obj.call(""buttonClick_recall"") + end + obj = getObjectFromGUID(v.terrainGuid) + if obj ~= nil then + obj.call(""buttonClick_recall"") + end + if string.match(' '..value..' ', '%A'..v.code..'%A') ~= nil then + setMission(missionIndexItd[k]) + for k,v in pairs(missionIndexItd) do + if v == result.mission then + Wait.frames( + function() + obj = getObjectFromGUID(k) + if obj ~= nil then + obj.call(""buttonClick_place"") + end + obj = getObjectFromGUID(v.objGuid) + Wait.frames( + function () + if obj ~= nil then + obj.call(""buttonClick_place"") + end + obj = getObjectFromGUID(v.terrainGuid) + Wait.frames( + function () + if obj ~= nil then + obj.call(""buttonClick_place"") + end + end, 30) + end, 30) + end, 30 + ) + changeMissionScoreboard(k) + end + end + checkListStatus.mission = value + setUIAttribute(""kts__dropdown_mission_itd"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + end + end + end + Wait.frames(function() + changeDropdown(""kts__dropdown_mission_itd"", checkListStatus.mission) + end, 10) +end +function onRedWonRollOff(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if getUIAttribute(""kts__red_rolloff_winner_text"", ""text"") ~= ""no_player"" then + checkListStatus.rollOffAttacker=false + checkListStatus.rollOffDefender=false + checkListStatus.rollOffWinner=""Select One"" + result.rollOffWinner = nil + result.rollOffLoser = nil + setUIAttribute(""kts__toggle_red_rolloff_winner"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + if value == ""True"" then + setUIAttribute(""kts__toggle_blue_rolloff_winner"", ""isOn"", false) + setUIAttribute(""kts__toggle_red_rolloff_winner"", ""isOn"", true) + setUIAttribute(""kts__toggle_blue_rolloff_winner"", ""backgroundColor"", ""White"") + for _,pl in ipairs(Player.getPlayers()) do + if pl.steam_name == getUIAttribute(""kts__red_roloff_winner_text"", ""text"") then + checkListStatus.rollOffWinner = pl.steam_name + setRollOffWinner(pl) + if pl.color == ""Red"" then + setRollOffLoser(Player[""Blue""]) + else + setRollOffLoser(Player[""Red""]) + end + end + end + end + setUIAttribute(""kts__toggle_attacker_selected"", ""isOn"", checkListStatus.rollOffAttacker) + setUIAttribute(""kts__toggle_defender_selected"", ""isOn"", checkListStatus.rollOffDefender) + else + broadcastToAll(""No one is yet here"") + end + else + setUIAttribute(""kts__toggle_red_rolloff_winner"", ""isOn"", value==""True"" and false or true) + end +end +function onBlueWonRollOff(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if getUIAttribute(""kts__blue_rolloff_winner_text"", ""text"") ~= ""no_player"" then + checkListStatus.rollOffAttacker=false + checkListStatus.rollOffDefender=false + checkListStatus.rollOffWinner=""Select One"" + result.rollOffWinner = nil + result.rollOffLoser = nil + setUIAttribute(""kts__toggle_blue_rolloff_winner"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + if value == ""True"" then + setUIAttribute(""kts__toggle_red_rolloff_winner"", ""isOn"", false) + setUIAttribute(""kts__toggle_blue_rolloff_winner"", ""isOn"", true) + setUIAttribute(""kts__toggle_red_rolloff_winner"", ""backgroundColor"", ""White"") + for _,pl in ipairs(Player.getPlayers()) do + if pl.steam_name == getUIAttribute(""kts__blue_roloff_winner_text"", ""text"") then + checkListStatus.rollOffWinner = pl.steam_name + setRollOffWinner(pl) + if pl.color == ""Red"" then + setRollOffLoser(Player[""Blue""]) + else + setRollOffLoser(Player[""Red""]) + end + end + end + end + setUIAttribute(""kts__toggle_attacker_selected"", ""isOn"", checkListStatus.rollOffAttacker) + setUIAttribute(""kts__toggle_defender_selected"", ""isOn"", checkListStatus.rollOffDefender) + else + broadcastToAll(""No one is yet here"") + end + else + setUIAttribute(""kts__toggle_blue_rolloff_winner"", ""isOn"", value==""True"" and false or true) + end +end +function onAttackerSelected(player, value) + checkListStatus.rollOffAttacker=false + checkListStatus.rollOffDefender=false + if result.rollOffWinner ~= nil then + if player.steam_name == result.rollOffWinner then + result.rollOffWinnerSelection = ""Attacker"" + checkListStatus.rollOffAttacker=true + checkListStatus.rollOffDefender=false + else + broadcastToAll(""Only ""..result.rollOffWinner.."" can select this"") + end + else + broadcastToAll(""Select roll off winner"") + end + setUIAttribute(""kts__toggle_attacker_selected"", ""isOn"", checkListStatus.rollOffAttacker) + setUIAttribute(""kts__toggle_defender_selected"", ""isOn"", checkListStatus.rollOffDefender) +end +function onDefenderSelected(player, value) + checkListStatus.rollOffAttacker=false + checkListStatus.rollOffDefender=false + if result.rollOffWinner ~= nil then + if player.steam_name == result.rollOffWinner then + result.rollOffWinnerSelection = ""Defender"" + checkListStatus.rollOffAttacker=false + checkListStatus.rollOffDefender=true + else + broadcastToAll(""Only ""..result.rollOffWinner.."" can select this"") + end + else + broadcastToAll(""Select roll off winner"") + end + setUIAttribute(""kts__toggle_attacker_selected"", ""isOn"", checkListStatus.rollOffAttacker) + setUIAttribute(""kts__toggle_defender_selected"", ""isOn"", checkListStatus.rollOffDefender) +end +function onRedSuperFactionSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if string.match(getUIAttribute(""kts__dropdown_red_faction_text"", ""text""), player.steam_name) then + setUIAttribute(""kts__dropdown_red_faction_imperium"", ""active"", false) + setUIAttribute(""kts__dropdown_red_faction_chaos"", ""active"", false) + setUIAttribute(""kts__dropdown_red_faction_aeldari"", ""active"", false) + setUIAttribute(""kts__dropdown_red_faction_xenos"", ""active"", false) + if checkListStatus[player.steam_name].superFaction ~= ""Select One"" then + setFaction(player, ""Select One"") + end + setUIAttribute(""kts__dropdown_red_faction_""..string.lower(value), ""active"", true) + checkListStatus[player.steam_name].superFaction = value + setUIAttribute(""kts__dropdown_red_super_faction"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + else + broadcastToAll(""Only ""..split(getUIAttribute(""kts__dropdown_red_faction_text"", ""text""), "" "").."" can select this"") + end + end + changeMultiDropdown({ + ""kts__dropdown_red_super_faction"", + ""kts__dropdown_red_faction_imperium"", + ""kts__dropdown_red_faction_chaos"", + ""kts__dropdown_red_faction_aeldari"", + ""kts__dropdown_red_faction_xenos"" + }, + { + checkListStatus[split(getUIAttribute(""kts__dropdown_red_faction_text"", ""text""), "" "")].superFaction, + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"" + }) +end +function onRedFactionSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if string.match(getUIAttribute(""kts__dropdown_red_faction_text"", ""text""), player.steam_name) then + setFaction(player, value) + checkListStatus[player.steam_name].faction = value + setUIAttribute(""kts__dropdown_red_faction_imperium"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + setUIAttribute(""kts__dropdown_red_faction_chaos"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + setUIAttribute(""kts__dropdown_red_faction_aeldari"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + setUIAttribute(""kts__dropdown_red_faction_xenos"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + else + broadcastToAll(""Only ""..split(getUIAttribute(""kts__dropdown_red_faction_text"", ""text""), "" "").."" can select this"") + end + end + changeDropdown(""kts__dropdown_red_faction_""..string.lower(checkListStatus[split(getUIAttribute(""kts__dropdown_red_faction_text"", ""text""), "" "")].superFaction), checkListStatus[split(getUIAttribute(""kts__dropdown_red_faction_text"", ""text""), "" "")].faction) +end +function onRedFactionMouseEnter(player) + if not string.match(getUIAttribute(""kts__dropdown_red_faction_text"", ""text""), player.steam_name) then + factVis = getUIAttribute(""kts__dropdown_red_faction"", ""visibility"") + factVis1 = getUIAttribute(""kts__dropdown_red_faction_1"", ""visibility"") + color = player.color + if string.match(factVis, color..""|"") then + setUIAttribute(""kts__dropdown_red_faction"", ""visibility"", string.gsub(factVis, color..""|"", """")) + elseif string.match(factVis, color) then + setUIAttribute(""kts__dropdown_red_faction"", ""visibility"", string.gsub(factVis, color, """")) + end + if string.match(factVis1, color..""|"") then + setUIAttribute(""kts__dropdown_red_faction_1"", ""visibility"", string.gsub(factVis1, color..""|"", """")) + elseif string.match(factVis1, color) then + setUIAttribute(""kts__dropdown_red_faction_1"", ""visibility"", string.gsub(factVis1, color, """")) + end + end +end +function onRedFactionPanelMouseExit(player) + factVis = getUIAttribute(""kts__dropdown_red_faction"", ""visibility"") + factVis1 = getUIAttribute(""kts__dropdown_red_faction_1"", ""visibility"") + color = player.color + if not string.match(factVis, color) then + setUIAttribute(""kts__dropdown_red_faction"", ""visibility"", color..""|""..factVis) + end + if not string.match(factVis1, color) then + setUIAttribute(""kts__dropdown_red_faction_1"", ""visibility"", color..""|""..factVis1) + end +end +function onBlueSuperFactionSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if string.match(getUIAttribute(""kts__dropdown_blue_faction_text"", ""text""), player.steam_name) then + setUIAttribute(""kts__dropdown_blue_faction_imperium"", ""active"", false) + setUIAttribute(""kts__dropdown_blue_faction_chaos"", ""active"", false) + setUIAttribute(""kts__dropdown_blue_faction_aeldari"", ""active"", false) + setUIAttribute(""kts__dropdown_blue_faction_xenos"", ""active"", false) + if checkListStatus[player.steam_name].superFaction ~= ""Select One"" then + changeMultiDropdown({ + ""kts__dropdown_blue_faction_imperium"", + ""kts__dropdown_blue_faction_chaos"", + ""kts__dropdown_blue_faction_aeldari"", + ""kts__dropdown_blue_faction_xenos"" + }, + { + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"" + }) + setFaction(player, ""Select One"") + end + setUIAttribute(""kts__dropdown_blue_faction_""..string.lower(value), ""active"", true) + checkListStatus[player.steam_name].superFaction = value + setUIAttribute(""kts__dropdown_blue_super_faction"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + else + broadcastToAll(""Only ""..split(getUIAttribute(""kts__dropdown_blue_faction_text"", ""text""), "" "").."" can select this"") + end + end + changeMultiDropdown({ + ""kts__dropdown_blue_super_faction"", + ""kts__dropdown_blue_faction_imperium"", + ""kts__dropdown_blue_faction_chaos"", + ""kts__dropdown_blue_faction_aeldari"", + ""kts__dropdown_blue_faction_xenos"" + }, + { + checkListStatus[split(getUIAttribute(""kts__dropdown_blue_faction_text"", ""text""), "" "")].superFaction, + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"" + }) +end +function onBlueFactionSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if string.match(getUIAttribute(""kts__dropdown_blue_faction_text"", ""text""), player.steam_name) then + setFaction(player, value) + checkListStatus[player.steam_name].faction = value + setUIAttribute(""kts__dropdown_blue_faction_imperium"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + setUIAttribute(""kts__dropdown_blue_faction_chaos"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + setUIAttribute(""kts__dropdown_blue_faction_aeldari"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + setUIAttribute(""kts__dropdown_blue_faction_xenos"", ""textColor"", value == ""Select One"" and ""#e74f0aff"" or player.color) + else + broadcastToAll(""Only ""..split(getUIAttribute(""kts__dropdown_blue_faction_text"", ""text""), "" "").."" can select this"") + end + end + changeDropdown(""kts__dropdown_blue_faction_""..string.lower(checkListStatus[split(getUIAttribute(""kts__dropdown_blue_faction_text"", ""text""), "" "")].superFaction), checkListStatus[split(getUIAttribute(""kts__dropdown_blue_faction_text"", ""text""), "" "")].faction) +end +function onBlueFactionMouseEnter(player) + if not string.match(getUIAttribute(""kts__dropdown_blue_faction_text"", ""text""), player.steam_name) then + factVis = getUIAttribute(""kts__dropdown_blue_faction"", ""visibility"") + factVis1 = getUIAttribute(""kts__dropdown_blue_faction_1"", ""visibility"") + color = player.color + if string.match(factVis, color..""|"") then + setUIAttribute(""kts__dropdown_blue_faction"", ""visibility"", string.gsub(factVis, color..""|"", """")) + elseif string.match(factVis, color) then + setUIAttribute(""kts__dropdown_blue_faction"", ""visibility"", string.gsub(factVis, color, """")) + end + if string.match(factVis1, color..""|"") then + setUIAttribute(""kts__dropdown_blue_faction_1"", ""visibility"", string.gsub(factVis1, color..""|"", """")) + elseif string.match(factVis1, color) then + setUIAttribute(""kts__dropdown_blue_faction_1"", ""visibility"", string.gsub(factVis1, color, """")) + end + end +end +function onBlueFactionPanelMouseExit(player) + factVis = getUIAttribute(""kts__dropdown_blue_faction"", ""visibility"") + factVis1 = getUIAttribute(""kts__dropdown_blue_faction_1"", ""visibility"") + color = player.color + if not string.match(factVis, color) then + setUIAttribute(""kts__dropdown_blue_faction"", ""visibility"", color..""|""..factVis) + end + if not string.match(factVis1, color) then + setUIAttribute(""kts__dropdown_blue_faction_1"", ""visibility"", color..""|""..factVis1) + end +end +function onRedTacOpsSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_red_tacops_text"", ""text"") then + printToAll(player.steam_name.."" selected TacOps"") + checkListStatus[player.steam_name].tacOps = value + setUIAttribute(""kts__toggle_red_tacops"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_red_tacops"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_red_tacops_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_red_tacops"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_red_tacops_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_red_tacops_text"", ""text"")].tacOps or checkListPlayer.tacOps) +end +function onBlueTacOpsSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_blue_tacops_text"", ""text"") then + printToAll(player.steam_name.."" selected TacOps"") + checkListStatus[player.steam_name].tacOps = value + setUIAttribute(""kts__toggle_blue_tacops"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_blue_tacops"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_blue_tacops_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_blue_tacops"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_blue_tacops_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_blue_tacops_text"", ""text"")].tacOps or checkListPlayer.tacOps) +end +function onRedEquipmentSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_red_equipment_text"", ""text"") then + printToAll(player.steam_name.."" selected equipment"") + checkListStatus[player.steam_name].equipment = value + setUIAttribute(""kts__toggle_red_equipment"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_red_equipment"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_red_equipment_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_red_equipment"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_red_equipment_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_red_equipment_text"", ""text"")].equipment or checkListPlayer.equipment) +end +function onBlueEquipmentSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_blue_equipment_text"", ""text"") then + printToAll(player.steam_name.."" selected equipment"") + checkListStatus[player.steam_name].equipment = value + setUIAttribute(""kts__toggle_blue_equipment"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_blue_equipment"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_blue_equipment_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_blue_equipment"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_blue_equipment_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_blue_equipment_text"", ""text"")].equipment or checkListPlayer.equipment) +end +function onRedBarricadesPlaced(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_red_barricades_text"", ""text"") then + printToAll(player.steam_name.."" placed barricades"") + checkListStatus[player.steam_name].barricades = value + setUIAttribute(""kts__toggle_red_barricades"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_red_barricades"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_red_barricades_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_red_barricades"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_red_barricades_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_red_barricades_text"", ""text"")].barricades or checkListPlayer.barricades) +end +function onBlueBarricadesPlaced(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_blue_barricades_text"", ""text"") then + printToAll(player.steam_name.."" placed barricades"") + checkListStatus[player.steam_name].barricades = value + setUIAttribute(""kts__toggle_blue_barricades"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_blue_barricades"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_blue_barricades_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_blue_barricades"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_blue_barricades_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_blue_barricades_text"", ""text"")].barricades or checkListPlayer.barricades) +end +function onRedDeployed(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_red_deployed_text"", ""text"") then + printToAll(player.steam_name.."" has deployed"") + checkListStatus[player.steam_name].deployed = value + setUIAttribute(""kts__toggle_red_deployed"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_red_deployed"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + Wait.frames(function() + if value == ""True"" then + showOperativeSelection(player) + else + deselectOperatives(player) + end + end, 1) + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_red_deployed_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_red_deployed"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_red_deployed_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_red_deployed_text"", ""text"")].deployed or checkListPlayer.deployed) +end +function onBlueDeployed(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + if player.steam_name == getUIAttribute(""kts__toggle_blue_deployed_text"", ""text"") then + printToAll(player.steam_name.."" has deployed"") + checkListStatus[player.steam_name].deployed = value + setUIAttribute(""kts__toggle_blue_deployed"", ""isOn"", value == ""True"" and true or false) + setUIAttribute(""kts__toggle_blue_deployed"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + Wait.frames(function() + if value == ""True"" then + showOperativeSelection(player) + else + deselectOperatives(player) + end + end, 1) + else + player.broadcast(""Only ""..getUIAttribute(""kts__toggle_blue_deployed_text"", ""text"").."" can check this"") + end + end + setUIAttribute(""kts__toggle_blue_deployed"", ""isOn"", checkListStatus[getUIAttribute(""kts__toggle_blue_deployed_text"", ""text"")] ~= nil and checkListStatus[getUIAttribute(""kts__toggle_blue_deployed_text"", ""text"")].deployed or checkListPlayer.deployed) +end +function onAllowOverwatchSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + result.allowOW = value + checkListStatus.allowOW = value + setUIAttribute(""kts__toggle_overwatch"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + end + setUIAttribute(""kts__toggle_overwatch"", ""isOn"", checkListStatus.allowOW == ""True"" and true or false) +end +function onRedScoutingSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + setScouting(player, value) + checkListStatus[player.steam_name].scouting = value + end + changeDropdown(""kts__dropdown_red_scouting"", checkListStatus[Player['Red'].steam_name].scouting) +end +function onBlueScoutingSelected(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + setScouting(player, value) + checkListStatus[player.steam_name].scouting = value + end + changeDropdown(""kts__dropdown_blue_scouting"", checkListStatus[Player['Blue'].steam_name].scouting) +end +function onRevealScouting(player, value) + if player.color == ""Red"" or player.color == ""Blue"" then + checkListStatus.revealed = false + if Player[""Blue""].steam_name ~= nil then + blueName = Player[""Blue""].steam_name + else + blueName = ""no_player"" + end + if Player[""Red""].steam_name ~= nil then + redName = Player[""Red""].steam_name + else + redName = ""no_player"" + end + if result[blueName] ~= nil and result[redName] ~= nil then + if result[blueName].scouting ~= nil and result[redName].scouting ~= nil and + result[blueName].scouting ~= ""Select One"" and result[redName].scouting ~= ""Select One"" and + checkListStatus.rollOffWinner ~= ""Select One"" and + (checkListStatus.rollOffAttacker or checkListStatus.rollOffDefender) then + checkListStatus.revealed = true + if result[blueName].scouting == ""Fortify"" and result[redName].scouting == ""Infiltrate"" or + result[blueName].scouting == ""Infiltrate"" and result[redName].scouting == ""Recon"" or + result[blueName].scouting == ""Recon"" and result[redName].scouting == ""Fortify"" then + result.scoutingWinner = blueName + checkListStatus.winner = blueName + elseif result[blueName].scouting == result[redName].scouting then + if result.rollOffWinnerSelection == ""Attacker"" then + result.scoutingWinner = result.rollOffWinner + checkListStatus.winner = result.rollOffWinner + else + result.scoutingWinner = result.rollOffLoser + checkListStatus.winner = result.rollOffLoser + end + else + result.scoutingWinner = redName + checkListStatus.winner = redName + end + setUIAttribute(""kts__toggle_reveal_scouting"", ""backgroundColor"", value == ""True"" and player.color or ""White"") + gameStateMachine.whoToPress = checkListStatus.winner + setUIValue(""kts__scouting_resolution"", checkListStatus.winner) + printToAll(""-----------"") + printToAll(""Scouting..."") + printToAll(redName.."" selected ""..result[redName].scouting) + printToAll(blueName.."" selected ""..result[blueName].scouting) + printToAll(""And the winner is ""..result.scoutingWinner) + printToAll(""-----------"") + broadcastToAll(""The scouting winner is ""..result.scoutingWinner) + else + broadcastToAll(""Both players must select a value for scouting and select roll off winner"") + end + else + broadcastToAll(""Both players must be seated"") + end + end + setUIAttribute(""kts__toggle_reveal_scouting"", ""isOn"", checkListStatus.revealed) +end +function onHideChecklistBtn(player) + if player.color == ""Red"" or player.color == ""Blue"" then + setUIAttribute(""kts__checklist_panel"", ""visibility"", string.gsub(getUIAttribute(""kts__checklist_panel"", ""visibility""), player.color..""|"", """")) + end +end +function onShowChecklistBtn(player) + if player.color == ""Red"" or player.color == ""Blue"" then + if not string.find(getUIAttribute(""kts__checklist_panel"", ""visibility""), player.color) then + setUIAttribute(""kts__checklist_panel"", ""visibility"", getUIAttribute(""kts__checklist_panel"", ""visibility"") == """" and player.color..""|""..""Black|White|Grey"" or player.color..""|""..getUIAttribute(""kts__checklist_panel"", ""visibility"")) + end + end +end +function onStartGameBtn(player) + if (player.color == ""Red"" or player.color == ""Blue"") then + printToAll(checkListStatus.gameType) + if checkListStatus.gameType == ""Select One"" then + broadcastToAll(""Select Game Type"") + return nil + end + if string.lower(tostring(checkListStatus.killZoneLoaded)) ~= ""true"" then + broadcastToAll(""Check Kill Zone Loaded"") + return nil + end + if checkListStatus.edition == ""Select One"" then + broadcastToAll(""Select Edition"") + return nil + end + if checkListStatus.mission == ""Select One"" then + broadcastToAll(""Select Mission"") + return nil + end + if checkListStatus.rollOffWinner == ""Select One"" then + broadcastToAll(""Select Roll Off winner"") + return nil + end + if (not checkListStatus.rollOffAttacker and not checkListStatus.rollOffDefender) then + broadcastToAll(""Select Attacker or Defender"") + return nil + end + if checkListStatus[Player[""Red""].steam_name].faction == ""Select One"" then + broadcastToAll(""Select Red Faction"") + return nil + end + if checkListStatus[Player[""Blue""].steam_name].faction == ""Select One"" then + broadcastToAll(""Select Blue Faction"") + return nil + end + if string.lower(tostring(checkListStatus[Player[""Red""].steam_name].tacOps)) ~= ""true"" then + broadcastToAll(""Select Red TacOps"") + return nil + end + if string.lower(tostring(checkListStatus[Player[""Red""].steam_name].equipment)) ~= ""true"" then + broadcastToAll(""Select Red equipment"") + return nil + end + if string.lower(tostring(checkListStatus[Player[""Red""].steam_name].barricades)) ~= ""true"" then + broadcastToAll(""Place Red Barricades"") + return nil + end + if string.lower(tostring(checkListStatus[Player[""Red""].steam_name].deployed)) ~= ""true"" then + broadcastToAll(""Deploy red team"") + return nil + end + if string.lower(tostring(checkListStatus[Player[""Blue""].steam_name].tacOps)) ~= ""true"" then + broadcastToAll(""Select Blue TacOps"") + return nil + end + if string.lower(tostring(checkListStatus[Player[""Blue""].steam_name].equipment)) ~= ""true"" then + broadcastToAll(""Select Blue equipment"") + return nil + end + if string.lower(tostring(checkListStatus[Player[""Blue""].steam_name].barricades)) ~= ""true"" then + broadcastToAll(""Place Blue Barricades"") + return nil + end + if string.lower(tostring(checkListStatus[Player[""Blue""].steam_name].deployed)) ~= ""true"" then + broadcastToAll(""Deploy Blue team"") + return nil + end + if checkListStatus[Player[""Red""].steam_name].scouting == ""Select One"" then + broadcastToAll(""Red select scouting"") + return nil + end + if checkListStatus[Player[""Blue""].steam_name].scouting == ""Select One"" then + broadcastToAll(""Blue select scouting"") + return nil + end + if not checkListStatus.revealed then + broadcastToAll(""Reveal scouting resolution"") + return nil + end + if checkListStatus.winner == """" then + broadcastToAll(""Reveal scouting resolution"") + return nil + end + if string.lower(checkListStatus.killZoneLoaded) == ""true"" and + checkListStatus.gameType ~= ""Select One"" and + checkListStatus.edition ~= ""Select One"" and + checkListStatus.mission ~= ""Select One"" and + checkListStatus.rollOffWinner ~= ""Select One"" and + (checkListStatus.rollOffAttacker or checkListStatus.rollOffDefender) and + (player.color == ""Red"" or player.color == ""Blue"") and + checkListStatus[Player[""Red""].steam_name].faction ~= ""Select One"" and + checkListStatus[Player[""Blue""].steam_name].faction ~= ""Select One"" and + string.lower(checkListStatus[Player[""Red""].steam_name].tacOps) == ""true"" and + string.lower(checkListStatus[Player[""Red""].steam_name].equipment) == ""true"" and + string.lower(checkListStatus[Player[""Red""].steam_name].barricades) == ""true"" and + string.lower(checkListStatus[Player[""Red""].steam_name].deployed) == ""true"" and + string.lower(checkListStatus[Player[""Blue""].steam_name].tacOps) == ""true"" and + string.lower(checkListStatus[Player[""Blue""].steam_name].equipment) == ""true"" and + string.lower(checkListStatus[Player[""Blue""].steam_name].barricades) == ""true"" and + string.lower(checkListStatus[Player[""Blue""].steam_name].deployed) == ""true"" and + checkListStatus[Player[""Red""].steam_name].scouting ~= ""Select One"" and + checkListStatus[Player[""Blue""].steam_name].scouting ~= ""Select One"" and + checkListStatus.revealed and + checkListStatus.winner ~= """" then + setUIAttribute(""kts__show_checklist_button"", ""active"", false) + setUIAttribute(""kts__checklist_panel"", ""active"", false) + result.timestamp = os.time(os.date(""!*t"")) + setUIAttribute(""kts__loading_button"", ""active"", true) + setUIAttribute(""kts__loading_button"", ""textColor"", ""Orange"") + Wait.frames(function() + setUIAttribute(""kts__loading_button"", ""active"", false) + setStateMachine(""tp1"", ""init"") + setUIAttribute(""kts__end_init_1_button"", ""active"", true) + setUIAttribute(""kts__end_init_1_button"", ""textColor"", ""Orange"") + setUIAttribute(""kts__end_init_2_button"", ""active"", true) + setUIAttribute(""kts__end_init_2_button"", ""textColor"", ""Orange"") + end, 100) + readyOperatives() + readyLooseOrders() + savePositions() + else + broadcastToAll(""Please complete all fields to start"") + end + end +end +function onStartOverBtn(player) + if player.color == ""Red"" or player.color == ""Blue"" then + if checkListStatus[Player[""Red""].steam_name] ~= nil then + checkListStatus[Player[""Red""].steam_name].allow = ""False"" + checkListStatus[Player[""Red""].steam_name].faction=""Select One"" + checkListStatus[Player[""Red""].steam_name].superFaction=""Select One"" + checkListStatus[Player[""Red""].steam_name].tacOps=""False"" + checkListStatus[Player[""Red""].steam_name].equipment=""False"" + checkListStatus[Player[""Red""].steam_name].barricades=""False"" + checkListStatus[Player[""Red""].steam_name].deployed=""False"" + checkListStatus[Player[""Red""].steam_name].scouting=""Select One"" + setFaction(Player[""Red""], ""Select One"") + setScouting(Player[""Red""], ""Select One"") + setAllowData(Player[""Red""], false) + result[Player[""Red""].steam_name] = {} + Wait.frames(function() + deselectOperatives(Player[""Red""]) + end, 10) + end + if checkListStatus[Player[""Blue""].steam_name] ~= nil then + checkListStatus[Player[""Blue""].steam_name].allow = ""False"" + checkListStatus[Player[""Blue""].steam_name].faction=""Select One"" + checkListStatus[Player[""Blue""].steam_name].superFaction=""Select One"" + checkListStatus[Player[""Blue""].steam_name].tacOps=""False"" + checkListStatus[Player[""Blue""].steam_name].equipment=""False"" + checkListStatus[Player[""Blue""].steam_name].barricades=""False"" + checkListStatus[Player[""Blue""].steam_name].deployed=""False"" + checkListStatus[Player[""Blue""].steam_name].scouting=""Select One"" + setFaction(Player[""Blue""], ""Select One"") + setScouting(Player[""Blue""], ""Select One"") + setAllowData(Player[""Blue""], false) + result[Player[""Blue""].steam_name] = {} + Wait.frames(function() + deselectOperatives(Player[""Blue""]) + end, 10) + end + checkListStatus.killZoneLoaded = false + checkListStatus.allowOW = false + checkListStatus.gameType = ""Select One"" + checkListStatus.edition = ""Select One"" + checkListStatus.mission = ""Select One"" + checkListStatus.rollOffWinner=false + checkListStatus.rollOffLoser=false + checkListStatus.rollOffAttacker=false + checkListStatus.rollOffDefender=false + checkListStatus.revealed=false + checkListStatus.winner="""" + result.killZoneLoaded = nil + result.allowOW = nil + result.gameType = nil + result.mission = nil + result.scoutingWinner = nil + result.rollOffWinner = nil + result.rollOffLoser = nil + result.rollOffWinnerSelection= nil + onOpenMissionSelected(Player[""Red""], ""Select One"") + onItdMissionSelected(Player[""Red""], ""Select One"") + updateCheckList() + end +end +function updateCheckList() + setUIAttribute(""kts__toggle_red_accept"", ""isOn"", false) + setUIAttribute(""kts__toggle_red_accept"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_blue_accept"", ""isOn"", false) + setUIAttribute(""kts__toggle_blue_accept"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_kz_loaded"", ""isOn"", false) + setUIAttribute(""kts__toggle_kz_loaded"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_red_rolloff_winner"", ""isOn"", false) + setUIAttribute(""kts__toggle_red_rolloff_winner"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_blue_rolloff_winner"", ""isOn"", false) + setUIAttribute(""kts__toggle_blue_rolloff_winner"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_defender_selected"", ""isOn"", false) + setUIAttribute(""kts__toggle_defender_selected"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_attacker_selected"", ""isOn"", false) + setUIAttribute(""kts__toggle_attacker_selected"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_red_tacops"", ""isOn"", false) + setUIAttribute(""kts__toggle_red_tacops"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_blue_tacops"", ""isOn"", false) + setUIAttribute(""kts__toggle_blue_tacops"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_red_equipment"", ""isOn"", false) + setUIAttribute(""kts__toggle_red_equipment"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_blue_equipment"", ""isOn"", false) + setUIAttribute(""kts__toggle_blue_equipment"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_red_barricades"", ""isOn"", false) + setUIAttribute(""kts__toggle_red_barricades"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_blue_barricades"", ""isOn"", false) + setUIAttribute(""kts__toggle_blue_barricades"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_red_deployed"", ""isOn"", false) + setUIAttribute(""kts__toggle_red_deployed"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_blue_deployed"", ""isOn"", false) + setUIAttribute(""kts__toggle_blue_deployed"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_overwatch"", ""isOn"", false) + setUIAttribute(""kts__toggle_overwatch"", ""backgroundColor"", ""White"") + setUIAttribute(""kts__toggle_reveal_scouting"", ""isOn"", false) + setUIAttribute(""kts__toggle_reveal_scouting"", ""backgroundColor"", ""White"") + setUIValue(""kts__scouting_resolution"", """") + changeMultiDropdown({ + ""kts__dropdown_game_type"", + ""kts__dropdown_edition"", + ""kts__dropdown_mission_open"", + ""kts__dropdown_mission_itd"", + ""kts__dropdown_red_super_faction"", + ""kts__dropdown_red_faction_imperium"", + ""kts__dropdown_red_faction_chaos"", + ""kts__dropdown_red_faction_aeldari"", + ""kts__dropdown_red_faction_xenos"", + ""kts__dropdown_red_scouting"", + ""kts__dropdown_blue_super_faction"", + ""kts__dropdown_blue_faction_imperium"", + ""kts__dropdown_blue_faction_chaos"", + ""kts__dropdown_blue_faction_aeldari"", + ""kts__dropdown_blue_faction_xenos"", + ""kts__dropdown_blue_scouting"" + }, + { + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"", + ""Select One"" + }) + setUIAttribute(""kts__dropdown_game_type"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_edition"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_mission_open"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_mission_itd"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_red_super_faction"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_red_faction_imperium"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_red_faction_chaos"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_red_faction_aeldari"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_red_faction_xenos"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_red_scouting"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_blue_super_faction"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_blue_faction_imperium"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_blue_faction_chaos"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_blue_faction_aeldari"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_blue_faction_xenos"", ""textColor"", ""#e74f0aff"") + setUIAttribute(""kts__dropdown_blue_scouting"", ""textColor"", ""#e74f0aff"") + + setUIAttribute(""kts__dropdown_blue_faction_imperium"", ""active"", false) + setUIAttribute(""kts__dropdown_blue_faction_chaos"", ""active"", false) + setUIAttribute(""kts__dropdown_blue_faction_aeldari"", ""active"", false) + setUIAttribute(""kts__dropdown_blue_faction_xenos"", ""active"", false) + setUIAttribute(""kts__dropdown_red_faction_imperium"", ""active"", false) + setUIAttribute(""kts__dropdown_red_faction_chaos"", ""active"", false) + setUIAttribute(""kts__dropdown_red_faction_aeldari"", ""active"", false) + setUIAttribute(""kts__dropdown_red_faction_xenos"", ""active"", false) +end +function onEndInitP1Btn(player) + if player.color == ""Red"" then + oldOp1, oldOp2 = getStateMachine() + if oldOp2 == ""init"" then + for i=1, 4, 1 do + if oldOp1 == ""tp""..i then + onInitiativePressed(player, true, ""kts__initiative_player1_""..i..""_toggle"") + gameStateMachine.whoToPress = player.steam_name + break + end + end + setUIAttribute(""kts__scoring_button"", ""active"", false) + setUIAttribute(""kts__end_init_1_button"", ""active"", false) + setUIAttribute(""kts__end_init_2_button"", ""active"", false) + setUIAttribute(""kts__loading_button"", ""active"", true) + setUIAttribute(""kts__loading_button"", ""textColor"", ""Orange"") + Wait.frames(function () + setUIAttribute(""kts__loading_button"", ""active"", false) + setStateMachine(oldOp1, ""ploys"") + setUIAttribute(""kts__end_ploys_button"", ""active"", true) + setUIAttribute(""kts__end_ploys_button"", ""textColor"", ""Orange"") + end, 100) + end + end +end +function onEndInitP2Btn(player) + if player.color == ""Blue"" then + oldOp1, oldOp2 = getStateMachine() + if oldOp2 == ""init"" then + for i=1, 4, 1 do + if oldOp1 == ""tp""..i then + onInitiativePressed(player, true, ""kts__initiative_player2_""..i..""_toggle"") + gameStateMachine.whoToPress = player.steam_name + break + end + end + setUIAttribute(""kts__scoring_button"", ""active"", false) + setUIAttribute(""kts__end_init_1_button"", ""active"", false) + setUIAttribute(""kts__end_init_2_button"", ""active"", false) + setUIAttribute(""kts__loading_button"", ""active"", true) + setUIAttribute(""kts__loading_button"", ""textColor"", ""Orange"") + Wait.frames(function () + setUIAttribute(""kts__loading_button"", ""active"", false) + setStateMachine(oldOp1, ""ploys"") + setUIAttribute(""kts__end_ploys_button"", ""active"", true) + setUIAttribute(""kts__end_ploys_button"", ""textColor"", ""Orange"") + end, 100) + end + end +end +function onEndPloysBtn(player) + if player.color == ""Red"" or player.color == ""Blue"" then + oldOp1, oldOp2 = getStateMachine() + if oldOp2 == ""ploys"" then + setUIAttribute(""kts__end_ploys_button"", ""active"", false) + setUIAttribute(""kts__loading_button"", ""active"", true) + setUIAttribute(""kts__loading_button"", ""textColor"", ""Orange"") + Wait.frames(function () + setUIAttribute(""kts__loading_button"", ""active"", false) + setStateMachine(oldOp1, ""tacops"") + setUIAttribute(""kts__end_tacops_button"", ""active"", true) + setUIAttribute(""kts__end_tacops_button"", ""textColor"", ""Orange"") + end, 100) + end + end +end +function onEndTacopsBtn(player) + if player.color == ""Red"" or player.color == ""Blue"" then + oldOp1, oldOp2 = getStateMachine() + if oldOp2 == ""tacops"" then + pressStopWatch(Player[scoring[1].initiative[getCurrentRound()] and 'Blue' or 'Red']) + setUIAttribute(""kts__end_tacops_button"", ""active"", false) + setUIAttribute(""kts__loading_button"", ""active"", true) + setUIAttribute(""kts__loading_button"", ""textColor"", ""Orange"") + Wait.frames(function () + setUIAttribute(""kts__loading_button"", ""active"", false) + setStateMachine(oldOp1, ""firefight"") + setUIAttribute(""kts__activated_button"", ""active"", true) + setUIAttribute(""kts__activated_button"", ""textColor"", Player[""Red""].steam_name == gameStateMachine.whoToPress and ""Red"" or ""Blue"") + setUIAttribute(""kts__end_tp_button"", ""active"", true) + setUIAttribute(""kts__end_tp_button"", ""textColor"", ""Orange"") + broadcastToAll(gameStateMachine.whoToPress..""'s turn"") + end, 100) + end + end +end +function onActivatedBtn(player) + if player.steam_name == gameStateMachine.whoToPress then + if Player['Red'].steam_name ~= nil and Player['Blue'].steam_name ~= nil then + local oldOp1, oldOp2 = getStateMachine() + if oldOp2 == ""firefight"" then + savePositions() + pressStopWatch(player) + if checkOrdersCoherency() and string.lower(result.allowOW) == ""true"" then + checkOverwatch(player) + end + gameStateMachine.whoToPress = player.color == ""Red"" and Player['Blue'].steam_name or Player['Red'].steam_name + setUIAttribute(""kts__activated_button"", ""textColor"", player.color == ""Red"" and ""Blue"" or ""Red"") + broadcastToAll(gameStateMachine.whoToPress..""'s turn"") + end + else + broadcastToAll(""Both players need to be seated to continue"") + end + else + broadcastToAll(""It's ""..gameStateMachine.whoToPress.."" turn"") + end +end +function onEndTPBtn(player) + if player.color == ""Red"" or player.color == ""Blue"" then + local oldOp1, oldOp2 = getStateMachine() + if oldOp2 == ""firefight"" then + if Player['Red'].steam_name ~= nil and Player['Blue'].steam_name ~= nil then + isOk = checkAllOperativesActivated() and checkAllLooseOrdersActivated() + if isOk then + local objs = getCMOperativesOnBoard() + for _, obj in ipairs(objs) do + for i, color in ipairs({""Red"", ""Blue""}) do + if string.find(obj.getDescription(), ""Owned by ""..Player[color].steam_name) then + if result[Player[color].steam_name] == nil then + result[Player[color].steam_name] = {} + end + if result[Player[color].steam_name].operatives == nil then + result[Player[color].steam_name].operatives = {} + end + result[Player[color].steam_name].operatives[obj.getGUID()] = { + name=obj.getName(), + desc=obj.getDescription(), + } + local pos = obj.getPosition() + if pos.x < 15 and pos.x > -15 and pos.z < 11 and pos.z > -11 then + result[Player[color].steam_name].operatives[obj.getGUID()].killed = false + else + round = getCurrentRound() + result[Player[color].steam_name].operatives[obj.getGUID()].killed = true + result[Player[color].steam_name].operatives[obj.getGUID()].roundKilled = round + end + end + end + end + stopStopWatch() + setUIAttribute(""kts__activated_button"", ""active"", false) + setUIAttribute(""kts__end_tp_button"", ""active"", false) + setUIAttribute(""kts__loading_button"", ""active"", true) + setUIAttribute(""kts__loading_button"", ""textColor"", ""Orange"") + Wait.frames(function() + setUIAttribute(""kts__loading_button"", ""active"", false) + setStateMachine(oldOp1, ""scoring"") + setUIAttribute(""kts__scoring_button"", ""active"", true) + setUIAttribute(""kts__scoring_button"", ""textColor"", ""Orange"") + end, 100) + else + broadcastToAll(""There still are ready operatives"") + end + else + broadcastToAll(""Need both players seated to continue"") + end + end + end +end +function onScoringBtn(player) + if player.color == ""Red"" or player.color == ""Blue"" then + oldOp1, oldOp2 = getStateMachine() + if oldOp2 == ""scoring"" then + setUIAttribute(""kts__scoring_button"", ""active"", false) + setUIAttribute(""kts__loading_button"", ""active"", true) + setUIAttribute(""kts__loading_button"", ""textColor"", ""Orange"") + if oldOp1 ~= ""tp4"" then + savePositions() + readyOperatives() + readyLooseOrders() + unsetHighLights() + overwatchTable = {} + overwatchTable.checked = false + oldTable = Global.UI.getXmlTable() + for i, uiTable in ipairs(oldTable) do + if uiTable.attributes.id == ""kts__red_overwatch"" then + table.remove(oldTable, i) + end + if uiTable.attributes.id == ""kts__blue_overwatch"" then + table.remove(oldTable, i) + end + end + local defaults = makeDefaults(rules) + table.insert(oldTable, defaults) + Wait.frames(function () + Global.UI.setXmlTable(oldTable) + setUIAttribute(""kts__loading_button"", ""active"", false) + setUIAttribute(""kts__scoring_button"", ""active"", false) + for i=1, 3, 1 do + if oldOp1 == ""tp""..i then + setStateMachine(""tp""..(i+1), ""init"") + break + end + end + setUIAttribute(""kts__end_init_1_button"", ""active"", true) + setUIAttribute(""kts__end_init_1_button"", ""textColor"", ""Orange"") + setUIAttribute(""kts__end_init_2_button"", ""active"", true) + setUIAttribute(""kts__end_init_2_button"", ""textColor"", ""Orange"") + end, 100) + else + Wait.frames(function() + setUIAttribute(""kts__loading_button"", ""active"", false) + setStateMachine(""endGame"", ""active"") + setUIAttribute(""kts__end_game_button"", ""active"", true) + setUIAttribute(""kts__end_game_button"", ""textColor"", ""Orange"") + broadcastToAll(""End Game. Press 'Send Data' button to send your game information."") + end, 100) + end + end + end +end +function onEndGame(player) + if player.color == ""Red"" or player.color == ""Blue"" then + if Player['Red'].steam_name ~= nil and Player['Blue'].steam_name ~= nil then + if result[Player['Red'].steam_name].allow == ""True"" and result[Player['Blue'].steam_name].allow == ""True"" then + local rounds = { + ""first"", + ""second"", + ""third"", + ""fourth"" + } + for _, player in ipairs(Player.getPlayers()) do + if result[player.steam_name] == nil then + result[player.steam_name] = {} + end + result[player.steam_name].color = player.color + end + + auxNames = {} + for i, play in ipairs({""Red"", ""Blue""}) do + pl = Player[play].steam_name + if pl == nil then + pl = ""no_player"" + end + auxNames[play] = pl + if result[pl] == nil then + result[pl] = {} + result[pl].color = Player[play].color + end + result[pl].initiative = {} + result[pl].primaries = {} + if result[pl].secondaries == nil then + result[pl].secondaries = {} + end + result[pl].primaries.total = 0 + for round=1, rules.scoring.maxRounds do + result[pl].initiative[round] = scoring[i].initiative[round] + result[pl].primaries[rounds[round]] = 0 + for k,_ in pairs(rules.scoring.primary.objectives) do + result[pl].primaries[rounds[round]] = result[pl].primaries[rounds[round]] + (scoring[i].primary[k][round] and 1 or 0) + end + if rules.scoring.primary.maxEach > 0 then + result[pl].primaries.total = result[pl].primaries.total + math.min(result[pl].primaries[rounds[round]], rules.scoring.primary.maxEach) + else + result[pl].primaries.total = result[pl].primaries.total + result[pl].primaries[rounds[round]] + end + end + result[pl].primaries[""end""] = scoring[i].secondary[4] + result[pl].primaries.total = result[pl].primaries.total + result[pl].primaries[""end""] + + result[pl].secondaries.total = 0 + for s=1, 3 do + if result[pl].secondaries[rounds[s]] == nil then + result[pl].secondaries[rounds[s]] = {} + result[pl].secondaries[rounds[s]].name = scoring[i].secondary[s][1] + result[pl].secondaries[rounds[s]].score = scoring[i].secondary[s][2] + result[pl].secondaries[rounds[s]].none = 0 + result[pl].secondaries[rounds[s]].first = 0 + result[pl].secondaries[rounds[s]].second = 0 + result[pl].secondaries[rounds[s]].third = 0 + result[pl].secondaries[rounds[s]].fourth = 0 + else + result[pl].secondaries[rounds[s]].name = scoring[i].secondary[s][1] + end + end + result[pl].secondaries.total = result[pl].secondaries[rounds[1]].score + result[pl].secondaries[rounds[2]].score + result[pl].secondaries[rounds[3]].score + result[pl].total = result[pl].primaries.total + result[pl].secondaries.total + end + + if result[auxNames[""Red""]].total > result[auxNames[""Blue""]].total then + result.winner = auxNames[""Red""] + result.loser = auxNames[""Blue""] + result.tie = false + elseif result[auxNames[""Red""]].total < result[auxNames[""Blue""]].total then + result.winner = auxNames[""Blue""] + result.loser = auxNames[""Red""] + result.tie = false + else + result.winner = auxNames[""Red""] + result.loser = auxNames[""Blue""] + result.tie = true + end + result[auxNames[""Red""]].steamId = Player['Red'].steam_id + result[auxNames[""Blue""]].steamId = Player['Blue'].steam_id + result['tournament'] = """" + --result.rollOffWinner = Player[""Red""].steam_name == result.rollOffWinner and ""red"" or ""blue"" + --result.rollOffLoser = Player[""Red""].steam_name == result.rollOffLoser and ""red"" or ""blue"" + --result.scoutingWinner = Player[""Red""].steam_name == result.scoutingWinner and ""red"" or ""blue"" + + --result.red = result[Player['Red'].steam_name ~= nil and Player['Red'].steam_name or ""no_player""] + --result.blue = result[Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name or ""no_player""] + + --result[Player['Red'].steam_name ~= nil and Player['Red'].steam_name or ""no_player""] = nil + --result[Player['Blue'].steam_name ~= nil and Player['Blue'].steam_name or ""no_player""] = nil + + local headers = { + -- We're sending a JSON body in the request + [""Content-Type""] = ""application/json"", + -- We're expecting a JSON body in the response + Accept = ""application/json"", + } + local url = ""https://killteamdata.com/gamedata"" + WebRequest.custom(url, ""POST"", true, JSON.encode(result), headers, returnEndGame) + else + setUIAttribute(""kts__checklist_panel"", ""visibility"", ""Red|Blue|Black|White|Grey"") + setUIAttribute(""kts__checklist_panel"", ""active"", true) + broadcastToAll(""Both players must accept data allowing"") + end + else + broadcastToAll(""Both players must seated"") + end + end +end + +function returnEndGame(request) + local resp = JSON.decode(request.text) + broadcastToAll(resp.status) +end + +function setMission(mission) + result.mission = mission + printToAll(result.mission.name.."" selected as mission"") +end +function setAllowData(player, value) + if result[player.steam_name] == nil then + result[player.steam_name] = {} + end + result[player.steam_name].color = player.color + result[player.steam_name].allow = value +end + +function setFaction(player, faction) + if result[player.steam_name] == nil then + result[player.steam_name] = {} + end + result[player.steam_name].color = player.color + result[player.steam_name].faction = faction + if faction ~= ""Select One"" then + printToAll(player.steam_name.."" chose ""..faction) + setUIValue(""kts__""..string.lower(player.color)..""_faction_ui_text"", faction) + else + setUIValue(""kts__""..string.lower(player.color)..""_faction_ui_text"", player.color.."" Faction"") + end + if checkListStatus[player.steam_name].factionGUID ~= nil then + oldFaction = getObjectFromGUID(checkListStatus[player.steam_name].factionGUID) + if oldFaction ~= nil then + oldFaction.call(""click_recall"") + oldFaction.destruct() + else + for _, obj in ipairs(getAllObjects()) do + if string.find(obj.getDescription(), ""faction chosen by ""..player.steam_name) then + obj.call(""click_recall"") + obj.destruct() + break + end + end + end + checkListStatus[player.steam_name].factionGUID = nil + end + obj = getObjectFromGUID(megaDeckGuid) + objects = {} + for _, containedObject in ipairs(obj.getObjects()) do + spawnedObject = obj.takeObject() + table.insert(objects, spawnedObject) + if spawnedObject.getName() == faction then + clonedObject = spawnedObject.clone() + clonedObject.setDescription(""faction chosen by ""..player.steam_name) + if player.color == ""Blue"" then + clonedObject.setPosition({-20, 4, -16}, false, false) + clonedObject.setRotation({0, -90, 0}) + else + clonedObject.setPosition({20, 4, 16}, false, false) + clonedObject.setRotation({0, 90, 0}) + end + checkListStatus[player.steam_name].factionGUID = clonedObject.getGUID() + break + end + end + for _, objectToPut in ipairs(objects) do + obj.putObject(objectToPut) + end +end +function setScouting(player, option) + if result[player.steam_name] == nil then + result[player.steam_name] = {} + end + result[player.steam_name].color = player.color + result[player.steam_name].scouting = option +end +function setRollOffWinner(player) + if player.steam_name ~= nil then + if result[player.steam_name] == nil then + result[player.steam_name] = {} + end + result.rollOffWinner = player.steam_name + result[player.steam_name].color = player.color + else + if result[""no_player""] == nil then + result[""no_player""] = {} + end + result.rollOffWinner = ""no_player"" + result[""no_player""].color = player.color + end + printToAll(result.rollOffWinner.."" Won the Roll off"") +end +function setRollOffLoser(player) + if player.steam_name ~= nil then + if result[player.steam_name] == nil then + result[player.steam_name] = {} + end + result.rollOffLoser = player.steam_name + result[player.steam_name].color = player.color + else + if result[""no_player""] == nil then + result[""no_player""] = {} + end + result.rollOffLoser = ""no_player"" + result[""no_player""].color = player.color + end + printToAll(result.rollOffLoser.."" Lose the Roll off"") +end +function setSecondaryResult(player, secondary, score) + colors = {""Red"", ""Blue""} + secs = {""first"", ""second"", ""third""} + rounds = {""none"", ""first"", ""second"", ""third"", ""fourth""} + pl = Player[colors[player]].steam_name + if pl ~= nil and scoring[player].secondary[secondary][1] ~= nil then + round = getCurrentRound() + if result[pl].secondaries == nil then + result[pl].secondaries = {} + end + if result[pl].secondaries[secs[secondary]] == nil then + result[pl].secondaries[secs[secondary]] = {} + result[pl].secondaries[secs[secondary]].name = scoring[player].secondary[secondary][1] + result[pl].secondaries[secs[secondary]].score = scoring[player].secondary[secondary][2] + result[pl].secondaries[secs[secondary]].none = 0 + result[pl].secondaries[secs[secondary]].first = 0 + result[pl].secondaries[secs[secondary]].second = 0 + result[pl].secondaries[secs[secondary]].third = 0 + result[pl].secondaries[secs[secondary]].fourth = 0 + mult = 1 + else + mult = result[pl].secondaries[secs[secondary]].score < scoring[player].secondary[secondary][2] and 1 or -1 + result[pl].secondaries[secs[secondary]].name = scoring[player].secondary[secondary][1] + result[pl].secondaries[secs[secondary]].score = scoring[player].secondary[secondary][2] + end + result[pl].secondaries[secs[secondary]][rounds[round+1]] = result[pl].secondaries[secs[secondary]][rounds[round+1]] + (1*mult) + end +end +function changeDropdown(id, value) + Wait.frames(function() + local oldUI = Global.UI.getXmlTable() + for k1, v1 in ipairs(oldUI) do + ch1 = oldUI[k1].children + for k2, v2 in ipairs(ch1) do + ch2 = oldUI[k1].children[k2].children + for k3, v3 in ipairs(ch2) do + ch3 = oldUI[k1].children[k2].children[k3].children + for k4, v4 in ipairs(ch3) do + if v4.attributes.id == id then + options = v4.children + for k5, v5 in ipairs(options) do + if v5.value == value then + oldUI[k1].children[k2].children[k3].children[k4].children[k5].attributes.selected = true + else + oldUI[k1].children[k2].children[k3].children[k4].children[k5].attributes.selected = false + end + end + end + end + end + end + end + Wait.frames(function() Global.UI.setXmlTable(oldUI) end, 10) + end, 10) +end +function changeMultiDropdown(id, value) + Wait.frames(function() + local oldUI = Global.UI.getXmlTable() + for k, v in ipairs(id) do + for k1, v1 in ipairs(oldUI) do + ch1 = oldUI[k1].children + for k2, v2 in ipairs(ch1) do + ch2 = oldUI[k1].children[k2].children + for k3, v3 in ipairs(ch2) do + ch3 = oldUI[k1].children[k2].children[k3].children + for k4, v4 in ipairs(ch3) do + if v4.attributes.id == v then + options = v4.children + for k5, v5 in ipairs(options) do + if v5.value == value[k] then + oldUI[k1].children[k2].children[k3].children[k4].children[k5].attributes.selected = true + else + oldUI[k1].children[k2].children[k3].children[k4].children[k5].attributes.selected = false + end + end + end + end + end + end + end + end + Wait.frames(function() Global.UI.setXmlTable(oldUI) end, 10) + end, 10) +end +function setStateMachine(op1, op2) + local oldOp1, oldOp2 = getStateMachine() + if oldOp1 ~= """" then + gameStateMachine[oldOp1][oldOp2]=false + end + gameStateMachine[op1][op2]=true + broadcastToAll(op1.."" ""..op2) +end +function getStateMachine() + for k1, v1 in pairs(gameStateMachine) do + for k2, v2 in pairs(gameStateMachine[k1]) do + if v2 then + return k1, k2 + end + end + end + return """", """" +end +function readyOperatives() + for _, obj in ipairs(getCMOperativesOnBoard()) do + if obj.hasTag('Operative') and obj.hasTag('Not Mustered') ~= true then + if obj.getVar('KTUI_ReadyOperative') then + obj.call('KTUI_ReadyOperative') + end + end + end +end +function readyLooseOrders() + for _, obj in ipairs(getLooseOrdersOnBoard()) do + if string.find(obj.getName(), ""_activated"") then + obj.setState(obj.getStateId()-1) + end + end +end +function getCMOperativesOnBoard() + objs = {} + for _, obj in ipairs(getAllObjects()) do + if obj.getPosition().x < 15 and obj.getPosition().x > -15 and obj.getPosition().z < 11 and obj.getPosition().z > -11 then + if obj.hasTag('Operative') and obj.hasTag('Not Mustered') ~= true then + if obj.getVar('KTUI_ReadyOperative') then + table.insert(objs, obj) + end + end + end + end + return objs +end +function getNotCMOperativesOnBoard() + objs = {} + for _, obj in ipairs(getAllObjects()) do + if obj.getPosition().x < 15 and obj.getPosition().x > -15 and obj.getPosition().z < 11 and obj.getPosition().z > -11 then + if obj.hasTag('Operative') and obj.hasTag('Not Mustered') ~= true then + if not obj.getVar('KTUI_ReadyOperative') then + table.insert(objs, obj) + end + end + end + end + return objs +end +function getLooseOrdersOnBoard() + objs = {} + for _, obj in ipairs(getAllObjects()) do + if obj.getPosition().x < 15 and obj.getPosition().x > -15 and obj.getPosition().z < 11 and obj.getPosition().z > -11 then + if string.find(obj.getName(), ""Engage_ready"") or + string.find(obj.getName(), ""Engage_activated"") or + string.find(obj.getName(), ""Conceal_ready"") or + string.find(obj.getName(), ""Conceal_activated"") then + table.insert(objs, obj) + end + end + end + return objs +end +function pressStopWatch(pl) + local stopWatch = getObjectFromGUID(""f4ee71"") + if pl.color == ""Red"" then + stopWatch.call(""Click_2"", {player=pl}) + end + if pl.color == ""Blue"" then + stopWatch.call(""Click_1"", {player=pl}) + end +end +function stopStopWatch() + local stopWatch = getObjectFromGUID(""f4ee71"") + stopWatch.call(""Pause"") +end +function savePositions() + for _, obj in ipairs(getNotCMOperativesOnBoard()) do + if obj.getVar('savePosition') then + obj.call(""savePosition"") + end + end + for _, obj in ipairs(getCMOperativesOnBoard()) do + if obj.getVar('savePosition') then + obj.call(""savePosition"") + end + end +end +function onObjectDrop(player_color, dropped_object) + if dropped_object.hasTag('Operative') and dropped_object.hasTag('Not Mustered') ~= true then + op1, op2 = getStateMachine() + if op1 ~= ""preGame"" then + local newDesc = dropped_object.getDescription() + if string.find(newDesc, Player[player_color].steam_name) then + if result[Player[player_color].steam_name] == nil then + result[Player[player_color].steam_name] = {} + end + if result[Player[player_color].steam_name].operatives == nil then + result[Player[player_color].steam_name].operatives = {} + end + result[Player[player_color].steam_name].operatives[dropped_object.getGUID()] = { + name=dropped_object.getName(), + desc=dropped_object.getDescription(), + } + local pos = dropped_object.getPosition() + if pos.x < 15 and pos.x > -15 and pos.z < 11 and pos.z > -11 then + result[Player[player_color].steam_name].operatives[dropped_object.getGUID()].killed = false + else + round = getCurrentRound() + result[Player[player_color].steam_name].operatives[dropped_object.getGUID()].killed = true + result[Player[player_color].steam_name].operatives[dropped_object.getGUID()].roundKilled = round + end + end + end + end +end +function getCurrentRound() + local round = 0 + local maxRounds = rules.scoring.maxRounds + for i=maxRounds,1,-1 do + if scoring[1].initiative[i] then + round = i + break + end + if scoring[2].initiative[i] then + round = i + break + end + end + return round +end +function checkOverwatch(pl) + if not overwatchTable.checked then + if pl.color == ""Red"" then + oPl = Player[""Blue""] + else + oPl = Player[""Red""] + end + overwatchTable[pl.steam_name] = {} + overwatchTable[oPl.steam_name] = {} + local overObjs = {} + local objs = getCMOperativesOnBoard() + local readyOps = {} + local oReadyOps = {} + local activatedOps = {} + local oActivatedOps = {} + for _, obj in ipairs(objs) do + if obj.hasTag('Operative') and obj.hasTag('Not Mustered') ~= true then + desc = obj.getDescription() + objUI = obj.UI.getXmlTable() + if string.find(desc, ""Owned by ""..pl.steam_name) then + if string.find(getOperativeOrder(objUI), ""_ready"") then + table.insert(readyOps, obj.getGUID()) + else + table.insert(activatedOps, obj.getGUID()) + end + end + if oPl.steam_name ~= nil then + if string.find(desc, ""Owned by ""..oPl.steam_name) then + if string.find(getOperativeOrder(objUI), ""_ready"") then + table.insert(oReadyOps, obj.getGUID()) + else + table.insert(oActivatedOps, obj.getGUID()) + end + end + end + end + end + if (next(oReadyOps) == nil and next(oActivatedOps) ~= nil) and (next(readyOps) ~= nil or not checkAllLooseOrdersActivated()) and next(overwatchTable[oPl.steam_name]) == nil then + overwatchTable.checked = true + for _, actObj in ipairs(oActivatedOps) do + obj = getObjectFromGUID(actObj) + objUI = obj.UI.getXmlTable() + if string.find(getOperativeOrder(objUI), ""Engage"") then + table.insert(overwatchTable[oPl.steam_name], actObj) + end + end + local defaults = makeDefaults(rules) + Wait.frames(function() updateOWXML(defaults, oPl) end, 20) + else + overwatchTable[oPl.steam_name] = {} + overwatchTable[pl.steam_name] = {} + overwatchTable.checked = false + end + end +end +function getOperativeOrder(objTable) + for k1, v1 in ipairs(objTable) do + ch1 = objTable[k1].children + if objTable[k1].children ~= nil then + for k2, v2 in ipairs(ch1) do + if objTable[k1].children[k2].children ~= nil then + ch2 = objTable[k1].children[k2].children + for k3, v3 in ipairs(ch2) do + if v3.attributes.id == ""ktcnid-status-order"" then + return v3.attributes.image + end + end + end + end + end + end + return """" +end +function updateOWXML(def, pl) + oldTable = Global.UI.getXmlTable() + if next(overwatchTable[pl.steam_name]) ~= nil then + buttonCh = {} + for _, actObj in ipairs(overwatchTable[pl.steam_name]) do + addOverwatchToggle(pl, buttonCh, actObj, _) + end + for i, uiTable in ipairs(oldTable) do + if uiTable.attributes.id == ""kts__""..string.lower(pl.color)..""_overwatch"" then + table.remove(oldTable, i) + break + end + end + table.insert(buttonCh, { + tag=""Text"", + attributes={ + class=""title2"", + text=pl.steam_name.."" Overwatch"", + fontSize=13, + offsetXY=""0 30"" + }, + }) + OWTable = { + tag=""Panel"", + attributes={ + id=""kts__""..string.lower(pl.color)..""_overwatch"", + rectAlignment=""LowerRight"", + class=""bkgPanel"", + height=80, + width=300, + offsetXY=""-10 10"", + visibility=pl.color, + active=true, + allowDragging=true, + returnToOriginalPositionWhenReleased=false + }, + children=buttonCh + } + table.insert(oldTable, def) + table.insert(oldTable, OWTable) + Wait.frames(function() Global.UI.setXmlTable(oldTable) end, 1) + end +end +function addOverwatchToggle(pl, tab, guid, ind) + for line in getObjectFromGUID(guid).getDescription():gmatch(""([^\n]*)\n?"") do + operativeName=line + break + end + table.insert(tab, + { + tag=""Panel"", + attributes={ + class=""bkgPanel"", + height=80, + width=300/#overwatchTable[pl.steam_name], + offsetXY=(300*(ind-1)/#overwatchTable[pl.steam_name]).."" 0"", + rectAlignment=""MiddleLeft"" + }, + children={ + { + tag=""Button"", + attributes={ + id=""kts__toggle_""..string.lower(pl.color)..""_overwatch_""..guid, + onClick=self.getGUID()..""/onOverWatchTogglePressed(""..ind.."")"", + onMouseEnter=self.getGUID()..""/onOverWatchToggleHover(""..guid.."")"", + tooltip=operativeName, + rectAlignment=""LowerCenter"", + offsetXY=""0 -8"", + }, + }, + { + tag=""Text"", + attributes={ + id=""kts__toggle_""..string.lower(pl.color)..""_overwatch_text_""..guid, + text=""Operative"", + fontSize=12, + offsetXY=""0 -20"", + }, + }, + } + }) +end +function onOverWatchTogglePressed(player, value) + local obj = getObjectFromGUID(overwatchTable[player.steam_name][tonumber(value)]) + obj.highlightOn(player.color) + table.remove(overwatchTable[player.steam_name], tonumber(value)) + local defaults = makeDefaults(rules) + if next(overwatchTable[player.steam_name]) == nil then + setUIAttribute(""kts__""..string.lower(player.color)..""_overwatch"", ""active"", false) + else + Wait.frames(function() updateOWXML(defaults, player) end, 20) + end +end +function onOverWatchToggleHover(player, value) + getObjectFromGUID(value).highlightOn(player.color, 0.2) +end +function checkAllOperativesActivated() + allOpsActivated = true + for _, obj in ipairs(getCMOperativesOnBoard()) do + if obj.hasTag('Operative') and obj.hasTag('Not Mustered') ~= true then + if string.find(getOperativeOrder(obj.UI.getXmlTable()), ""_ready"") then + allOpsActivated = false + end + end + end + return allOpsActivated +end +function checkAllLooseOrdersActivated() + allOrdsActivated = true + for _, obj in ipairs(getLooseOrdersOnBoard()) do + if string.find(obj.getName(), ""_ready"") then + allOrdsActivated = false + end + end + return allOrdsActivated +end +function checkOrdersCoherency() + notCMObj = getNotCMOperativesOnBoard() + looseOrders = getLooseOrdersOnBoard() + if #looseOrders ~= #notCMObj then + broadcastToAll(""Did any of you forgot to remove a loose order?"") + return false + end + return true +end +function split(s, delimiter) + stringResult = {}; + for match in (s..delimiter):gmatch(""(.-)""..delimiter) do + table.insert(stringResult, match); + end + name = """" + for i=2, #stringResult do + if name == """" then + name = stringResult[i] + else + name = name.."" ""..stringResult[i] + end + end + return name +end +function unsetHighLights() + for _, obj in ipairs(getCMOperativesOnBoard()) do + obj.highlightOff() + end +end +function showYoutubeLink(pl) + tabletObj = spawnObject({ + type = ""Tablet"", + position = {-50, 10, 0}, + rotation = {70, 90, 0}, + scale = {2, 2, 2} + }) + tabletObj.setLock(true) + Player[""Red""].lookAt({ + position = {x=-50,y=10,z=0}, + pitch = 25, + yaw = 90, + distance = 20, + }) + Player[""Blue""].lookAt({ + position = {x=-50,y=10,z=0}, + pitch = 25, + yaw = -90, + distance = 20, + }) + Wait.frames(function() tabletObj.Browser.url = 'https://www.youtube.com/watch?v=GV7AnrjQr9A' end, 50) +end +function showOperativeSelection(pl) + if getUIAttribute(""kts__""..string.lower(pl.steam_name)..""_operatives_selected"", ""width"") ~= ""400"" then + oldTable = Global.UI.getXmlTable() + selectOpTable = { + tag=""Panel"", + attributes={ + id=""kts__""..string.lower(pl.steam_name)..""_operatives_selected"", + rectAlignment=""MiddleCenter"", + allowDragging=true, + returnToOriginalPositionWhenReleased=false, + class=""bkgPanel"", + height=100, + width=400, + offsetXY=""-20 10"", + visibility=pl.color, + active=true, + }, + children={ + { + tag=""Text"", + attributes={ + fontSize=16, + offsetXY=""0 20"" + }, + value=[[Select your operatives with area selection + (left click and drag) then press OK. + No matter if you select other objects like orders, etc.]] + }, + { + tag=""Button"", + attributes={ + onClick=self.guid..""/onOperativesSelected"", + height=30, + width=100, + offsetXY=""0 -25"" + }, + value=""OK"" + }, + } + } + local defaults = makeDefaults(rules) + table.insert(oldTable, defaults) + table.insert(oldTable, selectOpTable) + Wait.frames(function() Global.UI.setXmlTable(oldTable) end, 1) + else + Global.UI.show(""kts__""..string.lower(pl.steam_name)..""_operatives_selected"") + end +end +function onOperativesSelected(player) + local selectedObjects = player.getSelectedObjects() + local count = 0 + for _, obj in ipairs(selectedObjects) do + if obj.hasTag('Operative') and obj.hasTag('Not Mustered') ~= true then + local oldDesc = obj.getDescription() + if not string.find(oldDesc, ""Owned by "") then + newDesc = oldDesc.."" Owned by ""..player.steam_name + obj.setDescription(newDesc) + count = count + 1 + end + end + end + broadcastToAll(player.steam_name.."" has ""..count.."" operatives"") + Global.UI.hide(""kts__""..string.lower(player.steam_name)..""_operatives_selected"") +end +function deselectOperatives(pl) + Global.UI.hide(""kts__""..string.lower(pl.steam_name)..""_operatives_selected"") + for _, obj in ipairs(getCMOperativesOnBoard()) do + local oldDesc = obj.getDescription() + i, j = string.find(oldDesc, ""Owned by ""..pl.steam_name) + if i then + obj.setDescription(string.sub(oldDesc, 1, i-1)) + end + end + for _, obj in ipairs(getNotCMOperativesOnBoard()) do + local oldDesc = obj.getDescription() + i, j = string.find(oldDesc, ""Owned by ""..pl.steam_name) + if i then + obj.setDescription(string.sub(oldDesc, 1, i-1)) + end + end +end +function changeMissionScoreboard(missionGUID) + if missionIndexItd[missionGUID] ~= nil then + setUIAttribute(""kts__streamer_panel""..missionSelectedForScoreboard, ""active"", false) + missionSelectedForScoreboard = missionGUID + local tabs = Notes.getNotebookTabs() + for _,t in pairs(tabs) do + if t.title == settingsNotes then + gmn = t.body + break + end + end + newSettings = JSON.decode(gmn) + newSettings.scoring.primary = missionIndexItd[missionGUID].primary + newSettings.scoring.bonus = missionIndexItd[missionGUID].bonus + gmn = JSON.encode(newSettings) + Notes.editNotebookTab({ + title=settingsNotes, + body=gmn, + color=""Black"" + }) + setup(newSettings) + buildUI() + Wait.frames(refresh, 10) + Wait.frames(function() + if Global.UI.getAttribute(""kts__streamer_panel""..missionSelectedForScoreboard, ""id"") == nil then + local oldUI = Global.UI.getXmlTable() + local hudVisibility, streamVisibility = getHudVisibilities() + if oldUI == nil then + oldUI = {} + end + table.insert(oldUI, buildStreamerUI(streamVisibility)) + Wait.frames(function() Global.UI.setXmlTable(oldUI) end, 1) + else + setUIAttribute(""kts__streamer_panel""..missionSelectedForScoreboard, ""active"", true) + end + end, 20) + else + if missionSelectedForScoreboard ~= """" then + setUIAttribute(""kts__streamer_panel""..missionSelectedForScoreboard, ""active"", false) + setUIAttribute(""kts__streamer_panel"", ""active"", true) + missionSelectedForScoreboard = """" + local tabs = Notes.getNotebookTabs() + for _,t in pairs(tabs) do + if t.title == settingsNotes then + gmn = t.body + break + end + end + newSettings = JSON.decode(gmn) + newSettings.scoring.primary = { + exclusive = JSON.decode('[false, false, false, false]'), + max = 12, + maxEach = 0, + objectives = JSON.decode('[""1+"", ""2+"", ""3+"", ""4+""]') + } + newSettings.scoring.bonus = { + max = 0, + objectives = JSON.decode('[]') + } + gmn = JSON.encode(newSettings) + Notes.editNotebookTab({ + title=settingsNotes, + body=gmn, + color=""Black"" + }) + setup(newSettings) + buildUI() + Wait.frames(refresh, 10) + end + end +end +function onObjectLeaveContainer(container, object) + if missionIndexItd[container.getGUID()] ~= nil then + if missionSelectedForScoreboard ~= container.getGUID() then + changeMissionScoreboard(container.getGUID()) + end + end +end +function updateMegaDeck() + megaDeck = getObjectFromGUID(megaDeckGuid) + oldMegaDeck = getObjectFromGUID(oldMegaDeckGuid) + for _, containedObject in ipairs(megaDeck.getObjects()) do + spawnedObject = megaDeck.takeObject() + spawnedObject.destruct() + end + objectsToPut = {} + for _, containedObject in ipairs(oldMegaDeck.getObjects()) do + table.insert(objectsToPut, oldMegaDeck.takeObject()) + end + for _, objectToPut in ipairs(objectsToPut) do + oldMegaDeck.putObject(objectToPut) + megaDeck.putObject(objectToPut) + end +end +--ADDED by ZAKA +" +wjtpPiN4,⭐ get any gift card for AF,SlyHikari03,JavaScript,Friday 22nd of November 2024 11:56:56 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #waAtwxOD6Q + +" +UkUyBTfV,⭐️ EARN $500 INSTANTLY KE,menyezisplayzz,JavaScript,Friday 22nd of November 2024 11:56:19 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #d3lexVxPzi + +" +1HePU7W7,⭐️ EARN $500 INSTANTLY⭐ NB,SlyHikari03,JavaScript,Friday 22nd of November 2024 11:48:31 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #KaEq83OAGZ + +" +ErLi7QM6,Test,BARESARK,HTML,Friday 22nd of November 2024 11:48:30 AM CDT," + + + + + KingRoll + + + + +
+
+

KingRoll

+ +
+
+ +
+
+

🔥 Хит продаж

+
+
+ +
+

🍱 Сеты

+
+
+ +
+

🍣 Роллы

+
+
+ +
+

🥤 Напитки

+
+
+
+ +
+
+
+

Корзина

+ +
+
+
Корзина пуста
+
+
+ Итого: + 0 ₽ +
+ + +
+
+
+ + + + +" +a8KQpU5D,⭐ FREE giftcards method⭐ TO,menyezisplayzz,JavaScript,Friday 22nd of November 2024 11:47:55 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #z1no0YW36E + +" +jDSiPZqj,⭐ Binance Account hack QK,SlyHikari03,JavaScript,Friday 22nd of November 2024 11:40:02 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #HWQmPTEjIA + +" +Pr8MTtgF,⭐ Binance Account hack 3B,menyezisplayzz,JavaScript,Friday 22nd of November 2024 11:39:32 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #kKRD62Z6ca + +" +VkxSpAmq,⭐ get any gift card for AF,SlyHikari03,JavaScript,Friday 22nd of November 2024 11:31:39 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #QK6uGeEuJZ + +" +E29M7Jt9,⭐ get any gift card for FREE⭐ 2I,menyezisplayzz,JavaScript,Friday 22nd of November 2024 11:31:10 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #qHOl9PBPMO + +" +faFKkyUy,⭐️ EARN $500 INSTANTLY⭐ NB,SlyHikari03,JavaScript,Friday 22nd of November 2024 11:23:16 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #hc4EqZ9LP0 + +" +WjZu9Wfd,⭐️ EARN $500 INSTANTLY KE,menyezisplayzz,JavaScript,Friday 22nd of November 2024 11:22:46 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #jHA7lthdmI + +" +4fK2uL5E,Untitled,evanescente-ondine,Ada,Friday 22nd of November 2024 11:22:03 AM CDT,"pragma Ada_2022; +with ada.text_io; +use ada.text_io; +procedure main is + generic + type Element is private; + NullElement : Element; + with FUNCTION ""<"" (E1, E2: Element) RETURN Boolean IS <>; + package dst_matrices is + type Matrix (<>) is limited private; + type Indexes is array (Positive range <>) of Positive; + function MakeMatrix (Dimensions: Indexes) return Matrix; + procedure Insert (M: in out Matrix; N: Indexes; E: Element); + procedure Retrieve (M: Matrix; N:Indexes; Value: out Element; Success: out Boolean); + private + type Node; + type Position is access Node; + type NodeKind is (ElementKind, Dummy, Index); + type Node (Kind: NodeKind) is record + Link: Position; + case Kind is + when ElementKind|Index => + Rank: Positive; + case Kind is + when ElementKind => Info: Element; + when Index => Nextdimension: Position; + when others => null; + end case; + when others => null; + end case; + end record; + type Matrix (First: Position; DimNumber: Positive) is record + Dimensions: Indexes (1..DimNumber); + end record; + end dst_matrices; + + package body dst_matrices is + function MakeMatrix (Dimensions: Indexes) return Matrix is + (new Node(Dummy), Dimensions'Length, Dimensions); + + procedure Insert (M: in out Matrix; N: Indexes; E: Element) + -- with Refined_Pre => N'Length = M.DimNumber and (for all J in N'Range => N(J) <= M.Dimensions(J)) + is + Current: Position := M.First; + begin + for A of N(1..N'Last-1) loop + while Current.Link /= null and then Current.Link.Rank < A loop + Current := @.Link; + end loop; + if Current.Link = null or else Current.Link.Rank /= A then + Current.Link := new Node'(Kind => Index, Link => @, Rank => A, NextDimension => new Node(Dummy)); + end if; + Current := @.Link.NextDimension; + end loop; + while Current.Link /= null and then Current.Link.Rank < N(N'Last) loop + Current := @.Link; + end loop; + if Current.Link = null or else Current.Link.Rank /= N(N'Last) then + Current.Link := new Node'(Kind => ElementKind, Link => @, Rank => N(N'Last), Info => E); + put_line (Current.Link.all'Image); + end if; + end Insert; + + procedure Retrieve (M: Matrix; N:Indexes; Value: out Element; Success: out Boolean) + -- with Refined_Pre => N'Length = M.DimNumber and (for all J in N'Range => N(J) <= M.Dimensions(J)) + is + Current: Position := M.First.Link; + begin + for A of N(1..N'Last-1) loop + while Current /= null and then Current.Rank < A loop + Current := @.Link; + end loop; + if Current /= null or else Current.Rank /= A then + Success := False; + return; + else + Current := @.NextDimension.Link; + end if; + end loop; + while Current /= null and then Current.Rank < N(N'Last) loop + Current := @.Link; + end loop; + if Current.Link = null or else Current.Rank /= N(N'Last) then + Success := False; + else + Value := Current.Info; + end if; + end Retrieve; + + end dst_matrices; + + package dmp is new dst_matrices (Natural, 0); + use dmp; + M: Matrix := MakeMatrix ([9,2]); + Value: Positive; + Success: Boolean; +begin + Insert (M, [1,2], 82); + Insert (M, [1,1], 87); + Insert (M, [3,2], 87); + Insert (M, [3,1], 87); + Retrieve (M, [1,1], Value, Success); + put_line (Value'Image); +end main;" +SxUrYNHV,⭐ FREE giftcards method ON,SlyHikari03,JavaScript,Friday 22nd of November 2024 11:14:52 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #fIPEadTdoY + +" +bQAnah7b,⭐ FREE giftcards method⭐ TO,menyezisplayzz,JavaScript,Friday 22nd of November 2024 11:14:21 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #uI93KO6PUX + +" +YXUxvqRm,Untitled,dllbridge,C,Friday 22nd of November 2024 11:07:36 AM CDT," + +#include + +int Dima(int n); + + +/////////////////////////////////////////// +int main() // +{ + + int nSerial = 0, // 5845 + nOst = 0, // lkjkljlkjl + n = 0; + + scanf(""%d"", &n); + + nSerial = n/7; + + nOst = n%7; + + int n2 = Dima(nOst); + + n2 = n2 + (nSerial * 5845); + + printf(""n2 = %d\n"", n2); +} + + + + + +///////////////////////////////////////////// +int Dima(int n) // +{ + + int nSumma = 0, + nPrice = 1000, + i = 1; + + while(i <= n) + { + nSumma = nSumma + nPrice; + + nPrice = nPrice - 55; + + i += 1; + } + +return nSumma; +} + + + + + + + +/* + +///////////////////////////////////////////// +int Dima(int n) // +{ + + int nSumma = 0; + + switch(n) + { + case 0: break; + case 1: nSumma = 1000; break; + case 2: nSumma = 1945; break; + case 3: return 2835; + } + +return nSumma; +} + +*/ + + + + + + + + //printf(""n = %d"", n); + + + + + + + + + + + + +/* +#include + +void foo(int, int ); + + +/////////////////////////////////////////// +int main() // +{ + + int n1 = 23, + n2 = 2045; + + foo(n2, n1); +} + + + + + + +//////////////////////////////////////////// +void foo(int n1, int n2) +{ + + printf(""n1 = %d, n2 = %d\n"", n1, n2); +} + + +*/ + + + + + + + + + + + +/* +#include + +void SONY(int n); + + +/////////////////////////////////////////// +int main() // +{ + + for(int i = 2; i < 10; i++) SONY(i); + + +} + + + +//////////////////////////////////////////// +void SONY(int n) // +{ + + for(int i = 2; i < 10; i++) + { + printf(""%d * %d =%4d\n"", n, i, n*i); + } + + printf(""\n""); +} + + + +*/ + + + + + +" +MDYyyPi1,⭐ Binance Account hack QK,SlyHikari03,JavaScript,Friday 22nd of November 2024 11:06:29 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #ANCvrSVRDy + +" +CTTPMPG0,⭐ Binance Account hack 3B,menyezisplayzz,JavaScript,Friday 22nd of November 2024 11:05:56 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #sU1KhH0GNB + +" +3zPj3quC,Nigerian Scammers and Spammers [21-11/2024],bombaires,HTML,Friday 22nd of November 2024 11:02:43 AM CDT,"lainig7777@outlook.com +mrscarllap@priest.com +laimohammedng_nig@outlook.com +oambassador39s@aol.com +usambassador32@aol.com +jemase998@gmail.com +jem.ase.9.9.8@gmail.com +j.e.ma.se.99.8@gmail.com +jemas.e.9.98@gmail.com +je.m.a.se.9.9.8@gmail.com +j.em.a.se998@gmail.com +j.e.mas.e998@gmail.com +jem.as.e9.9.8@gmail.com +j.e.ma.se9.9.8@gmail.com +jema.s.e99.8@gmail.com +j.em.as.e.9.9.8@gmail.com +je.mas.e.998@gmail.com +j.emase.99.8@gmail.com +jema.se.9.9.8@gmail.com +j.em.a.s.e.9.9.8@gmail.com +j.e.mase.9.9.8@gmail.com +jem.a.se.998@gmail.com +je.m.a.s.e.9.98@gmail.com +je.m.a.se99.8@gmail.com +j.em.ase.99.8@gmail.com +jem.a.s.e9.98@gmail.com +j.em.as.e.99.8@gmail.com +j.e.mas.e.998@gmail.com +j.em.a.s.e.9.98@gmail.com +jemas.e9.98@gmail.com +je.m.a.se.9.98@gmail.com +j.emase.9.98@gmail.com +j.emas.e9.9.8@gmail.com +j.e.mase99.8@gmail.com +jem.a.se.9.9.8@gmail.com +je.m.ase9.9.8@gmail.com +j.e.m.ase9.9.8@gmail.com +j.e.ma.se9.98@gmail.com +j.em.as.e99.8@gmail.com +j.e.m.a.s.e.998@gmail.com +jemase.9.9.8@gmail.com +jemas.e.99.8@gmail.com +j.em.a.se99.8@gmail.com +j.em.as.e.9.98@gmail.com +j.ema.s.e9.9.8@gmail.com +jem.ase99.8@gmail.com +j.e.ma.s.e.998@gmail.com +j.e.m.a.s.e998@gmail.com +je.ma.se.9.98@gmail.com +j.e.mas.e9.98@gmail.com +j.ema.s.e998@gmail.com +je.ma.se9.98@gmail.com +j.emas.e9.98@gmail.com +j.e.m.a.s.e.99.8@gmail.com +j.em.ase.9.98@gmail.com +je.m.a.se9.9.8@gmail.com +je.m.a.se.998@gmail.com +je.ma.se9.9.8@gmail.com +jem.a.se.99.8@gmail.com +j.emase.998@gmail.com +je.m.a.s.e.998@gmail.com +j.e.m.a.se9.9.8@gmail.com +jem.a.s.e998@gmail.com +jem.a.se.9.98@gmail.com +j.em.a.se.9.98@gmail.com +j.ema.se.9.9.8@gmail.com +je.mase.9.9.8@gmail.com +j.e.mas.e99.8@gmail.com +jemase998@gmail.com +j.e.m.a.se.99.8@gmail.com +j.e.mas.e.99.8@gmail.com +jem.ase9.98@gmail.com +jem.as.e9.98@gmail.com +je.m.a.se9.98@gmail.com +j.ema.se.998@gmail.com +j.e.m.a.s.e9.9.8@gmail.com +j.e.mase.9.98@gmail.com +j.e.m.as.e9.98@gmail.com +j.ema.s.e9.98@gmail.com +jemas.e998@gmail.com +jema.se.9.98@gmail.com +je.m.ase998@gmail.com +jem.a.s.e.9.98@gmail.com +j.ema.se99.8@gmail.com +je.mas.e99.8@gmail.com +je.m.as.e.9.9.8@gmail.com +j.e.ma.se.9.9.8@gmail.com +je.mas.e.9.98@gmail.com +j.e.m.ase99.8@gmail.com +jem.as.e.99.8@gmail.com +j.em.a.s.e9.98@gmail.com +j.e.m.a.se9.98@gmail.com +j.e.m.a.s.e.9.98@gmail.com +je.ma.se998@gmail.com +j.e.mas.e.9.9.8@gmail.com +jem.a.s.e99.8@gmail.com +je.m.a.s.e99.8@gmail.com +je.mas.e998@gmail.com +j.ema.s.e.9.9.8@gmail.com +je.mas.e9.9.8@gmail.com +je.m.a.s.e9.98@gmail.com +j.e.ma.s.e9.9.8@gmail.com +jema.se.99.8@gmail.com +jemase.99.8@gmail.com +j.e.mase998@gmail.com +je.m.a.s.e.9.9.8@gmail.com +je.mas.e.9.9.8@gmail.com +je.mase99.8@gmail.com +je.ma.s.e998@gmail.com +j.e.m.ase.9.98@gmail.com +jema.se9.9.8@gmail.com +j.e.m.a.se.998@gmail.com +jemas.e.9.9.8@gmail.com +j.e.m.as.e.998@gmail.com +jem.ase.9.98@gmail.com +jem.ase9.9.8@gmail.com +j.em.a.s.e.998@gmail.com +j.e.m.a.s.e99.8@gmail.com +je.mase998@gmail.com +jema.s.e998@gmail.com +j.e.ma.s.e.9.9.8@gmail.com +j.e.ma.se.998@gmail.com +j.e.m.a.se998@gmail.com +jema.s.e.9.98@gmail.com +j.e.m.a.s.e9.98@gmail.com +j.e.ma.s.e.9.98@gmail.com +je.ma.s.e9.9.8@gmail.com +jem.a.se998@gmail.com +jema.s.e.9.9.8@gmail.com +j.e.m.as.e.9.9.8@gmail.com +je.m.a.s.e.99.8@gmail.com +j.emas.e99.8@gmail.com +j.e.ma.s.e.99.8@gmail.com +j.emase99.8@gmail.com +j.emase9.9.8@gmail.com +j.e.m.ase.99.8@gmail.com +jem.as.e.9.98@gmail.com +jem.ase.998@gmail.com +j.emas.e.9.9.8@gmail.com +je.m.ase.9.98@gmail.com +je.mase9.98@gmail.com +j.e.m.as.e99.8@gmail.com +j.ema.se998@gmail.com +j.e.mase9.9.8@gmail.com +j.em.a.se9.98@gmail.com +jemase.998@gmail.com +je.m.ase9.98@gmail.com +jem.a.se9.9.8@gmail.com +jemase9.9.8@gmail.com +j.ema.se.99.8@gmail.com +j.em.a.se.998@gmail.com +je.mase.9.98@gmail.com +je.mase.99.8@gmail.com +j.em.a.s.e.99.8@gmail.com +j.em.as.e9.9.8@gmail.com +j.e.ma.se998@gmail.com +j.em.a.se.9.9.8@gmail.com +j.e.m.ase.998@gmail.com +j.e.mase.99.8@gmail.com +je.ma.se.9.9.8@gmail.com +j.ema.se.9.98@gmail.com +j.em.as.e998@gmail.com +j.emas.e.998@gmail.com +j.emas.e998@gmail.com +je.m.as.e.9.98@gmail.com +je.m.as.e.99.8@gmail.com +je.m.ase.99.8@gmail.com +j.e.m.a.se99.8@gmail.com +j.e.m.ase998@gmail.com +je.m.a.s.e9.9.8@gmail.com +j.ema.s.e.998@gmail.com +je.ma.s.e99.8@gmail.com +je.m.ase.9.9.8@gmail.com +jem.as.e.9.9.8@gmail.com +jemase99.8@gmail.com +je.m.as.e998@gmail.com +j.em.ase.9.9.8@gmail.com +jema.s.e9.9.8@gmail.com +jemas.e9.9.8@gmail.com +j.e.m.a.se.9.98@gmail.com +je.mase.998@gmail.com +je.ma.s.e.99.8@gmail.com +jem.a.se9.98@gmail.com +j.ema.s.e99.8@gmail.com +jemase9.98@gmail.com +j.em.a.s.e998@gmail.com +jema.s.e.99.8@gmail.com +jema.se.998@gmail.com +j.e.mase9.98@gmail.com +j.e.ma.se.9.98@gmail.com +je.ma.s.e.9.9.8@gmail.com +j.e.m.as.e.99.8@gmail.com +je.ma.s.e9.98@gmail.com +je.m.as.e.998@gmail.com +j.e.ma.se99.8@gmail.com +jemase.9.98@gmail.com +j.emase9.98@gmail.com +j.e.m.ase9.98@gmail.com +jemas.e.998@gmail.com +jema.se99.8@gmail.com +jema.s.e9.98@gmail.com +jem.a.s.e.998@gmail.com +je.mas.e.99.8@gmail.com +j.em.a.se.99.8@gmail.com +j.e.m.ase.9.9.8@gmail.com +jem.a.s.e.9.9.8@gmail.com +j.ema.s.e.9.98@gmail.com +j.e.m.as.e.9.98@gmail.com +je.mas.e9.98@gmail.com +j.e.mas.e9.9.8@gmail.com +j.e.mas.e.9.98@gmail.com +je.m.a.se.99.8@gmail.com +je.ma.se99.8@gmail.com +j.ema.se9.9.8@gmail.com +j.e.ma.s.e99.8@gmail.com +jema.s.e.998@gmail.com +jem.as.e99.8@gmail.com +j.emase.9.9.8@gmail.com +j.e.m.a.se.9.9.8@gmail.com +je.ma.s.e.998@gmail.com +j.e.m.a.s.e.9.9.8@gmail.com +jem.a.se99.8@gmail.com +j.em.ase.998@gmail.com +j.e.ma.s.e9.98@gmail.com +j.em.a.s.e9.9.8@gmail.com +jemas.e99.8@gmail.com +jem.as.e.998@gmail.com +j.ema.se9.98@gmail.com +j.e.m.as.e998@gmail.com +je.mase9.9.8@gmail.com +jem.ase998@gmail.com +je.m.ase99.8@gmail.com +j.em.a.s.e99.8@gmail.com +jem.ase.99.8@gmail.com +j.em.as.e9.98@gmail.com +je.ma.s.e.9.98@gmail.com +j.e.ma.s.e998@gmail.com +je.m.as.e9.98@gmail.com +je.ma.se.99.8@gmail.com +je.m.ase.998@gmail.com +jem.a.s.e9.9.8@gmail.com +j.em.ase9.98@gmail.com +j.em.ase99.8@gmail.com +j.emase998@gmail.com +j.e.m.as.e9.9.8@gmail.com +jem.a.s.e.99.8@gmail.com +je.ma.se.998@gmail.com +je.m.as.e9.9.8@gmail.com +je.m.as.e99.8@gmail.com +j.em.ase9.9.8@gmail.com +jema.se998@gmail.com +j.emas.e.9.98@gmail.com +j.e.mase.998@gmail.com +j.emas.e.99.8@gmail.com +je.m.a.s.e998@gmail.com +j.em.ase998@gmail.com +jem.as.e998@gmail.com +j.em.as.e.998@gmail.com +j.ema.s.e.99.8@gmail.com +j.em.a.se9.9.8@gmail.com +jema.se9.98@gmail.com +je.m.a.se998@gmail.com +usdepartment1414@gmail.com +u.s.dep.ar.tme.n.t.1414@gmail.com +u.s.depa.rt.ment.14.14@gmail.com +u.sd.epa.r.tment.1.414@gmail.com +usde.p.a.r.tm.e.nt1.4.1.4@gmail.com +us.dep.a.r.t.m.e.nt.1.4.1.4@gmail.com +usd.e.pa.r.t.ment1.4.14@gmail.com +u.sd.e.p.ar.tme.n.t14.1.4@gmail.com +u.s.dep.a.r.tmen.t.1.41.4@gmail.com +u.sd.e.p.a.rt.ment141.4@gmail.com +us.de.p.a.r.tment14.14@gmail.com +u.s.dep.a.rtment14.14@gmail.com +us.d.epartme.n.t.14.1.4@gmail.com +u.s.d.e.p.a.rt.me.n.t.1.414@gmail.com +u.s.de.p.art.me.n.t1.4.1.4@gmail.com +us.d.e.p.a.r.tme.n.t.1414@gmail.com +u.sd.e.p.a.r.t.m.en.t.1.41.4@gmail.com +usd.ep.ar.t.m.en.t.1.414@gmail.com +usd.e.par.tm.e.nt1.4.1.4@gmail.com +usd.ep.artm.e.n.t.1.414@gmail.com +u.s.d.ep.ar.tm.e.nt141.4@gmail.com +u.sde.par.tm.e.n.t1.4.14@gmail.com +u.sd.e.par.tm.e.n.t1.4.14@gmail.com +u.sd.epar.tment.1414@gmail.com +u.s.depa.r.t.m.ent.141.4@gmail.com +us.dep.art.me.nt1414@gmail.com +u.sde.part.me.nt1.41.4@gmail.com +usd.e.par.tm.e.n.t1414@gmail.com +u.sd.e.p.ar.tm.e.n.t.14.1.4@gmail.com +us.dep.a.r.tm.e.n.t1.414@gmail.com +u.sdep.artme.nt.1.4.14@gmail.com +u.sd.e.par.t.m.e.nt.1.41.4@gmail.com +us.d.e.p.a.rt.me.nt1.414@gmail.com +u.s.d.ep.ar.t.me.nt.1.4.1.4@gmail.com +us.depa.r.t.me.nt.1.41.4@gmail.com +us.depar.tm.e.nt1.414@gmail.com +us.depart.m.e.nt.1.41.4@gmail.com +us.dep.ar.t.m.en.t.14.1.4@gmail.com +usdep.artm.e.n.t.14.1.4@gmail.com +usd.e.p.a.r.tm.e.n.t.1.4.1.4@gmail.com +u.s.departme.n.t.141.4@gmail.com +u.s.d.epa.r.t.m.e.nt1.41.4@gmail.com +u.s.d.e.par.tmen.t.1414@gmail.com +us.d.epar.t.m.e.n.t.14.14@gmail.com +u.sd.ep.a.r.t.ment.1.414@gmail.com +us.d.epar.t.m.en.t14.14@gmail.com +us.d.e.p.ar.tm.e.nt.1414@gmail.com +us.d.e.p.a.rt.ment1.414@gmail.com +u.sd.e.pa.rtm.e.nt.141.4@gmail.com +usd.e.p.ar.tme.n.t1.4.14@gmail.com +u.s.d.e.p.a.r.t.m.ent1.4.1.4@gmail.com +u.sde.partm.en.t.1.414@gmail.com +u.s.d.e.p.a.r.t.m.e.n.t.1.41.4@gmail.com +usd.e.p.a.rt.me.n.t14.1.4@gmail.com +u.sd.e.pa.r.t.me.n.t.1.41.4@gmail.com +usd.e.pa.rt.me.n.t.14.14@gmail.com +u.sde.partm.e.nt1.4.1.4@gmail.com +u.s.dep.artm.e.nt.141.4@gmail.com +u.s.d.ep.ar.tm.en.t.1.414@gmail.com +u.sd.e.part.m.e.n.t.14.1.4@gmail.com +u.sdep.a.rt.m.e.n.t1.4.14@gmail.com +u.s.d.e.pa.r.tment.14.14@gmail.com +usdep.art.m.ent.1.4.14@gmail.com +u.sd.ep.a.rt.m.e.n.t.1.41.4@gmail.com +u.sd.epa.r.tme.n.t1.414@gmail.com +u.sdep.a.r.t.me.n.t.14.1.4@gmail.com +usd.epa.rt.men.t.1.4.14@gmail.com +us.depa.r.t.me.n.t.1.4.14@gmail.com +u.sd.e.p.a.r.tmen.t1414@gmail.com +u.s.d.e.p.ar.t.m.e.n.t14.14@gmail.com +u.s.depar.t.m.e.n.t1.41.4@gmail.com +usd.e.part.m.en.t.1.4.14@gmail.com +usdep.a.r.tmen.t14.14@gmail.com +u.sdepa.r.tme.n.t1.414@gmail.com +us.depa.rt.men.t141.4@gmail.com +u.sd.epartment14.1.4@gmail.com +u.sd.epart.me.nt1.4.1.4@gmail.com +u.sd.e.pa.r.tm.en.t.1.41.4@gmail.com +u.s.de.p.a.rtmen.t.1.41.4@gmail.com +us.de.partm.ent141.4@gmail.com +us.d.e.p.a.rt.ment.1414@gmail.com +usd.epa.r.tm.e.n.t14.1.4@gmail.com +us.dep.ar.tm.e.n.t14.1.4@gmail.com +us.dep.a.r.t.me.n.t1.4.14@gmail.com +u.s.d.e.par.tm.e.nt1414@gmail.com +usd.epar.t.ment1.41.4@gmail.com +us.d.ep.a.rt.ment.1.4.14@gmail.com +us.de.pa.rt.ment.14.1.4@gmail.com +usdepar.tm.e.n.t.1.41.4@gmail.com +us.d.e.p.a.r.tm.e.nt14.1.4@gmail.com +usdep.a.r.tment1.4.1.4@gmail.com +us.de.pa.r.tme.n.t1414@gmail.com +usd.ep.ar.tm.en.t.14.1.4@gmail.com +usd.epa.r.tmen.t.1.4.1.4@gmail.com +us.d.e.par.t.m.en.t.1414@gmail.com +usd.epar.tme.nt.1.4.1.4@gmail.com +u.sd.ep.a.r.tment.1414@gmail.com +usdepar.tm.e.n.t.14.1.4@gmail.com +us.d.epa.r.tm.e.n.t.1.41.4@gmail.com +u.s.de.p.ar.t.men.t1.41.4@gmail.com +u.s.d.epa.r.t.me.n.t.1414@gmail.com +u.s.d.e.p.ar.tm.e.n.t141.4@gmail.com +u.s.d.epart.m.e.nt14.1.4@gmail.com +u.sde.p.a.r.tme.n.t.1414@gmail.com +usd.epa.r.t.ment1.414@gmail.com +u.sd.epa.r.t.men.t.1.41.4@gmail.com +u.s.d.epar.tm.en.t1.414@gmail.com +u.sdep.art.me.nt.1.414@gmail.com +usd.ep.ar.tme.n.t.14.14@gmail.com +u.s.depa.r.tm.e.n.t.1.4.14@gmail.com +u.sde.p.ar.tm.en.t141.4@gmail.com +u.sde.p.a.r.tme.nt.141.4@gmail.com +usd.e.par.tm.e.n.t.1.4.14@gmail.com +u.s.d.e.p.art.men.t1.41.4@gmail.com +u.sde.par.tm.e.n.t1.41.4@gmail.com +u.sd.ep.a.rt.m.e.n.t.1414@gmail.com +us.d.epa.rt.m.en.t1.414@gmail.com +us.d.e.p.a.r.t.m.e.n.t1.4.1.4@gmail.com +u.sd.e.p.a.rtment.1.4.1.4@gmail.com +u.s.de.p.art.m.en.t14.1.4@gmail.com +u.s.d.epar.t.m.ent1.4.14@gmail.com +us.d.e.part.m.en.t14.1.4@gmail.com +usdepa.r.t.ment1.4.1.4@gmail.com +u.s.d.e.p.a.rt.m.en.t.1.4.1.4@gmail.com +u.s.d.ep.a.r.t.m.e.n.t141.4@gmail.com +usde.p.artment.1.41.4@gmail.com +usdep.a.r.tm.en.t.14.14@gmail.com +us.depa.r.t.m.e.n.t.1.4.1.4@gmail.com +us.dep.a.rtme.nt14.1.4@gmail.com +u.s.d.epart.ment1414@gmail.com +u.sde.p.a.r.tme.nt.1414@gmail.com +usd.epart.m.en.t.14.14@gmail.com +usdepa.rtm.ent.1.414@gmail.com +u.sde.par.tm.e.n.t1.4.1.4@gmail.com +us.d.epar.t.m.e.n.t.1.41.4@gmail.com +us.de.partment1.41.4@gmail.com +u.s.d.e.p.art.me.nt1.4.1.4@gmail.com +u.s.dep.a.rt.m.ent.14.1.4@gmail.com +u.s.dep.art.ment14.1.4@gmail.com +u.sdep.ar.tmen.t.1414@gmail.com +u.sdep.a.r.tm.en.t.1.414@gmail.com +u.s.de.part.me.n.t.14.14@gmail.com +u.sd.epa.rtm.en.t1414@gmail.com +u.s.d.epa.rt.m.e.n.t.14.14@gmail.com +us.depa.r.tment.141.4@gmail.com +usdep.a.rt.m.e.n.t.1.41.4@gmail.com +u.sde.p.a.r.t.men.t1.414@gmail.com +usde.p.ar.tm.en.t14.1.4@gmail.com +us.d.epa.r.t.m.ent.1.41.4@gmail.com +usd.e.partme.nt.1.4.1.4@gmail.com +u.s.d.e.part.men.t14.14@gmail.com +u.sde.p.a.r.t.ment.141.4@gmail.com +usd.e.part.m.e.nt1.4.14@gmail.com +u.sd.e.p.ar.tm.en.t1414@gmail.com +u.sd.e.p.a.r.tm.ent1414@gmail.com +u.s.dep.a.rtm.e.nt1.4.1.4@gmail.com +u.sd.ep.a.rtme.n.t14.1.4@gmail.com +usd.ep.a.r.tm.en.t.14.1.4@gmail.com +u.sdepar.t.me.n.t.1.41.4@gmail.com +u.sde.pa.r.tm.e.n.t.1.414@gmail.com +u.s.de.p.ar.tm.ent1.4.1.4@gmail.com +u.sd.epa.rtm.ent1.414@gmail.com +usd.ep.a.rtm.e.nt1414@gmail.com +u.sdepart.me.n.t141.4@gmail.com +u.sdepartment1.414@gmail.com +u.sd.epartm.en.t1414@gmail.com +u.sde.partment1.4.14@gmail.com +u.sde.p.a.rtm.e.nt.1414@gmail.com +us.d.e.p.a.rtm.ent.1.4.1.4@gmail.com +u.s.d.e.p.art.me.nt.1.414@gmail.com +u.sd.e.part.m.en.t.14.14@gmail.com +u.s.d.ep.ar.tm.en.t14.1.4@gmail.com +us.d.epa.r.tment14.14@gmail.com +us.depar.t.m.en.t.1.414@gmail.com +u.s.dep.a.r.t.m.e.n.t.14.1.4@gmail.com +usd.ep.ar.tme.nt.14.14@gmail.com +us.depa.r.tmen.t1.414@gmail.com +usdepart.men.t.1.41.4@gmail.com +us.de.p.a.r.t.me.n.t.1414@gmail.com +us.de.p.a.rt.m.en.t.14.14@gmail.com +us.de.p.a.rt.me.n.t14.1.4@gmail.com +u.s.de.p.a.rt.m.e.nt1.4.1.4@gmail.com +us.d.e.part.me.nt1.4.14@gmail.com +u.sdep.ar.tm.e.n.t.14.14@gmail.com +usd.e.p.art.me.nt1.414@gmail.com +u.s.d.ep.a.r.tm.e.nt.141.4@gmail.com +u.s.de.p.a.r.tm.e.n.t1414@gmail.com +us.d.epartment.141.4@gmail.com +usde.p.a.r.tment1.414@gmail.com +u.sd.e.p.ar.t.men.t1.4.1.4@gmail.com +us.dep.artm.e.n.t141.4@gmail.com +u.s.d.e.p.a.r.tme.n.t.14.14@gmail.com +u.sd.epa.rt.m.en.t.141.4@gmail.com +usd.epartm.ent.141.4@gmail.com +us.d.e.pa.rtment.14.14@gmail.com +u.sd.e.partme.nt14.1.4@gmail.com +us.depa.r.tme.nt1.4.14@gmail.com +u.s.de.par.tm.e.n.t.1.4.14@gmail.com +usd.epa.r.tmen.t.1414@gmail.com +u.s.d.epar.tment.141.4@gmail.com +us.d.epa.r.t.ment.1.4.1.4@gmail.com +u.s.d.epa.r.t.m.e.nt.14.1.4@gmail.com +u.s.d.epa.r.tme.nt.1.414@gmail.com +usdep.ar.tm.e.n.t.141.4@gmail.com +usde.p.ar.tm.en.t141.4@gmail.com +usde.p.ar.tment141.4@gmail.com +usd.e.par.tmen.t.14.1.4@gmail.com +u.s.d.epa.r.tme.n.t1.41.4@gmail.com +u.s.d.e.p.a.rtme.nt1.41.4@gmail.com +usdepa.r.tm.e.nt1.4.14@gmail.com +u.sd.epa.rt.me.nt.1.4.1.4@gmail.com +u.sd.epar.t.m.e.n.t14.14@gmail.com +u.s.d.ep.a.rt.me.nt1414@gmail.com +u.sd.ep.a.rt.me.n.t.14.1.4@gmail.com +u.sd.e.p.a.r.tmen.t.14.1.4@gmail.com +u.sdep.a.r.tment.141.4@gmail.com +u.sd.epa.r.t.me.nt.14.1.4@gmail.com +us.de.p.a.rtment1414@gmail.com +us.depa.rt.m.en.t14.14@gmail.com +u.s.de.p.art.me.nt1414@gmail.com +u.sd.epart.m.e.n.t1.41.4@gmail.com +u.sde.p.art.men.t.141.4@gmail.com +u.s.dep.a.r.tm.e.nt.1.4.14@gmail.com +u.s.d.epa.r.t.m.en.t14.14@gmail.com +usd.e.part.ment14.14@gmail.com +u.sdep.a.r.t.m.ent14.1.4@gmail.com +usdepart.me.nt.1.414@gmail.com +usd.ep.a.rt.ment1.41.4@gmail.com +us.d.ep.a.rtm.en.t.141.4@gmail.com +usd.e.p.art.m.en.t1.4.14@gmail.com +u.s.d.ep.ar.t.men.t.1.4.14@gmail.com +u.s.de.p.ar.tme.n.t1414@gmail.com +u.sd.ep.artmen.t.1.414@gmail.com +u.sd.epa.rt.m.ent.14.14@gmail.com +u.sde.par.tment14.14@gmail.com +us.depar.tme.nt1.414@gmail.com +usd.ep.ar.t.me.nt.141.4@gmail.com +us.d.e.pa.rtme.nt1414@gmail.com +usde.p.ar.tm.e.n.t14.14@gmail.com +us.d.e.p.art.m.en.t14.1.4@gmail.com +usd.epart.m.ent.14.1.4@gmail.com +usd.e.part.m.e.nt.14.14@gmail.com +u.sdepa.r.t.ment.14.1.4@gmail.com +u.sde.p.a.r.tmen.t141.4@gmail.com +u.s.d.epar.tmen.t.141.4@gmail.com +us.d.epa.r.tment.1.4.1.4@gmail.com +u.sd.epa.r.tmen.t.14.1.4@gmail.com +usde.partm.en.t.1.414@gmail.com +u.sde.p.a.rtm.en.t.14.14@gmail.com +u.s.d.epar.tm.ent1.4.1.4@gmail.com +u.s.d.epa.r.t.m.e.nt14.1.4@gmail.com +u.s.d.e.part.me.nt1.4.14@gmail.com +usde.p.ar.t.m.e.n.t.1.4.1.4@gmail.com +usd.epartmen.t.141.4@gmail.com +u.sd.ep.ar.t.ment.1.41.4@gmail.com +u.sdepar.tmen.t.1.41.4@gmail.com +u.sd.e.par.t.men.t.141.4@gmail.com +us.d.e.p.artment.14.1.4@gmail.com +us.depa.rtm.e.nt.1.414@gmail.com +us.d.e.p.a.rt.ment14.14@gmail.com +us.d.ep.a.rt.ment.1.41.4@gmail.com +us.departm.ent.1.4.14@gmail.com +u.sdep.a.rtm.en.t1.4.14@gmail.com +us.de.p.ar.tm.e.nt.14.1.4@gmail.com +u.sd.ep.a.rt.m.ent141.4@gmail.com +u.s.departm.ent1414@gmail.com +usd.ep.ar.t.m.e.n.t1.4.1.4@gmail.com +u.s.dep.a.r.t.me.n.t.141.4@gmail.com +usde.p.a.rt.me.nt1.41.4@gmail.com +usd.e.pa.r.tm.e.n.t1.41.4@gmail.com +us.dep.art.m.en.t.14.1.4@gmail.com +usd.epart.m.ent1.4.1.4@gmail.com +u.sd.e.p.art.m.en.t1.4.14@gmail.com +u.sde.p.a.rtme.n.t.1.41.4@gmail.com +usde.p.a.r.tme.nt.1414@gmail.com +usd.e.p.a.rt.m.e.nt.1.414@gmail.com +u.s.d.e.p.a.r.tment14.14@gmail.com +u.sd.ep.a.r.tmen.t.1414@gmail.com +u.s.dep.a.r.tmen.t14.14@gmail.com +u.sd.e.par.t.men.t14.1.4@gmail.com +u.s.d.e.p.ar.t.m.e.n.t.141.4@gmail.com +us.dep.ar.tm.en.t.14.14@gmail.com +u.sdepart.men.t.1.4.1.4@gmail.com +usdepartme.nt.141.4@gmail.com +u.sde.p.a.r.t.m.ent.1.4.14@gmail.com +u.sd.e.p.artm.e.nt.1.4.1.4@gmail.com +u.s.d.e.p.art.ment1.4.14@gmail.com +u.s.d.e.p.a.rtme.nt14.1.4@gmail.com +u.s.d.e.par.t.m.en.t.1414@gmail.com +usde.p.ar.t.me.n.t1.414@gmail.com +usd.e.p.artm.ent1.41.4@gmail.com +u.sdep.a.rtment.14.14@gmail.com +u.s.de.p.artm.e.n.t.141.4@gmail.com +us.d.epar.tm.ent14.14@gmail.com +us.depa.rt.m.e.n.t1.414@gmail.com +us.d.e.par.t.men.t.14.14@gmail.com +usdep.a.rt.m.ent1414@gmail.com +usd.e.pa.rtm.e.n.t141.4@gmail.com +us.de.par.t.ment1.41.4@gmail.com +u.sd.e.par.tm.e.nt1.41.4@gmail.com +us.d.epar.tm.ent141.4@gmail.com +us.d.e.p.a.rtme.n.t.1.414@gmail.com +u.sd.e.p.ar.tmen.t1414@gmail.com +us.de.p.ar.tme.n.t1.4.1.4@gmail.com +usde.pa.r.tm.en.t.14.1.4@gmail.com +u.sde.p.a.r.t.m.en.t141.4@gmail.com +u.s.de.p.a.r.tme.nt141.4@gmail.com +usdepartm.en.t1414@gmail.com +u.sd.e.p.ar.t.m.e.nt.1414@gmail.com +u.s.d.e.p.art.me.nt.14.14@gmail.com +u.s.depar.t.m.ent.1.41.4@gmail.com +us.dep.a.rtm.e.n.t.141.4@gmail.com +usd.epa.r.tmen.t.1.414@gmail.com +u.s.de.p.art.m.e.n.t14.1.4@gmail.com +u.sdepa.r.t.me.n.t.14.14@gmail.com +u.sd.e.p.a.rtm.ent1.4.14@gmail.com +usd.ep.ar.tm.e.n.t1414@gmail.com +us.d.ep.ar.t.ment1.4.14@gmail.com +usdepar.tm.en.t1414@gmail.com +u.sdepa.r.t.m.e.n.t141.4@gmail.com +us.d.ep.ar.tment14.14@gmail.com +u.s.d.epa.r.tm.ent.1.4.1.4@gmail.com +u.sd.ep.a.r.tm.e.nt141.4@gmail.com +u.sd.e.partm.e.nt.1.414@gmail.com +usd.e.partm.e.n.t.141.4@gmail.com +u.sde.p.a.r.tment.1414@gmail.com +u.sde.part.m.e.nt.1.4.14@gmail.com +u.s.dep.a.rt.m.e.n.t1414@gmail.com +us.depa.rtm.ent.1.4.1.4@gmail.com +u.s.de.part.me.nt.1.4.1.4@gmail.com +u.sdepartme.n.t1414@gmail.com +u.sd.e.part.m.ent.1.4.1.4@gmail.com +u.sdep.art.me.nt.1414@gmail.com +u.sd.e.par.tme.nt.1.4.1.4@gmail.com +usd.e.par.tme.n.t1.41.4@gmail.com +u.sde.p.a.r.tm.e.n.t.14.14@gmail.com +u.sdepa.r.tm.e.nt14.14@gmail.com +usde.partm.en.t1.414@gmail.com +us.d.epa.rt.ment.14.1.4@gmail.com +usde.pa.r.t.m.e.n.t14.14@gmail.com +usdepa.r.t.m.ent1.41.4@gmail.com +u.s.de.pa.r.tm.e.n.t1.414@gmail.com +u.s.dep.ar.t.me.n.t14.1.4@gmail.com +u.s.d.e.pa.rt.me.n.t.1414@gmail.com +usdepa.r.t.men.t.141.4@gmail.com +u.sd.e.pa.rtm.e.nt14.1.4@gmail.com +u.s.de.partm.e.n.t141.4@gmail.com +usd.e.p.a.r.t.me.nt1.4.14@gmail.com +usd.e.p.a.rtm.e.n.t1414@gmail.com +usd.e.p.a.r.t.me.n.t.1414@gmail.com +u.sde.part.m.e.n.t.1.4.14@gmail.com +u.sd.epar.t.men.t141.4@gmail.com +u.sdep.a.r.tme.nt1.414@gmail.com +u.sdepa.rtme.nt1.41.4@gmail.com +us.d.e.p.artm.en.t14.1.4@gmail.com +u.s.depa.r.tm.ent1.4.14@gmail.com +u.s.de.p.ar.tme.nt14.14@gmail.com +u.s.de.part.me.n.t141.4@gmail.com +us.de.p.ar.t.m.ent1.4.14@gmail.com +us.de.part.m.en.t1.41.4@gmail.com +u.sdep.a.r.tme.n.t.1.4.1.4@gmail.com +usd.epa.r.t.m.ent.14.14@gmail.com +usd.epa.rtm.e.nt.1.4.1.4@gmail.com +u.s.d.e.p.a.r.tm.en.t1.414@gmail.com +u.sd.epar.tme.n.t.1.4.1.4@gmail.com +usd.e.partm.e.nt.14.14@gmail.com +u.s.d.epart.me.n.t1.41.4@gmail.com +usd.ep.ar.tm.en.t.1.414@gmail.com +u.s.de.p.ar.tmen.t141.4@gmail.com +usd.ep.a.rt.m.en.t.1.41.4@gmail.com +u.s.d.epa.r.t.men.t.14.14@gmail.com +us.d.e.p.a.r.tme.nt1.4.14@gmail.com +usde.p.ar.tm.en.t14.14@gmail.com +usdep.artme.nt1.41.4@gmail.com +us.d.epa.rt.me.nt.1.414@gmail.com +usd.epartm.e.n.t.1.4.14@gmail.com +u.s.d.epar.tme.nt141.4@gmail.com +us.de.par.t.me.nt14.14@gmail.com +usd.e.p.artm.e.nt1.414@gmail.com +us.depa.rt.me.nt.14.14@gmail.com +us.de.part.me.n.t1.41.4@gmail.com +usd.e.p.ar.t.ment.1414@gmail.com +us.d.e.partm.e.nt1.41.4@gmail.com +u.s.d.ep.ar.tmen.t.1.4.1.4@gmail.com +u.sd.e.p.a.r.tm.e.nt1.4.14@gmail.com +usde.partme.nt1414@gmail.com +u.sde.p.a.rt.m.en.t1.41.4@gmail.com +u.sd.e.p.art.men.t1.4.1.4@gmail.com +usd.ep.a.rt.ment.14.14@gmail.com +u.s.d.ep.a.r.t.me.n.t14.14@gmail.com +u.s.d.e.p.ar.tm.en.t.14.14@gmail.com +u.sd.ep.ar.tme.nt14.1.4@gmail.com +u.s.d.epartm.en.t1.4.1.4@gmail.com +u.sd.e.p.a.r.t.m.en.t.141.4@gmail.com +usdepa.r.t.m.ent.1.414@gmail.com +us.d.ep.art.ment.1.414@gmail.com +u.sd.ep.ar.tm.e.nt1.4.14@gmail.com +usde.p.art.ment.1.414@gmail.com +u.s.depa.rtme.nt.141.4@gmail.com +u.s.d.e.par.tme.nt1414@gmail.com +u.s.d.epar.tm.en.t1.41.4@gmail.com +us.d.epa.rtm.e.n.t1.414@gmail.com +us.de.p.a.rtm.ent1.4.1.4@gmail.com +u.s.d.epa.rt.me.nt14.1.4@gmail.com +usd.e.pa.rtm.e.n.t1.4.14@gmail.com +u.s.d.epa.rt.ment.14.1.4@gmail.com +u.sde.p.artm.e.n.t1414@gmail.com +usde.par.tmen.t14.14@gmail.com +us.d.ep.a.r.tm.en.t.14.14@gmail.com +u.s.d.e.pa.rtm.e.n.t.1.41.4@gmail.com +u.s.dep.a.r.t.me.nt14.14@gmail.com +u.s.de.p.ar.t.ment1414@gmail.com +us.d.e.p.a.r.tment1.4.1.4@gmail.com +u.sde.pa.rt.m.e.n.t1.41.4@gmail.com +usd.e.pa.r.tmen.t.141.4@gmail.com +usd.epar.tment.1414@gmail.com +us.depar.t.ment.1.41.4@gmail.com +us.d.e.p.art.m.ent1.4.14@gmail.com +u.sde.pa.r.t.m.e.nt.1.4.1.4@gmail.com +us.d.e.p.art.men.t1.4.1.4@gmail.com +us.de.par.tme.nt.14.1.4@gmail.com +u.sd.epa.r.t.m.e.n.t.14.1.4@gmail.com +usde.par.t.m.e.n.t.1.41.4@gmail.com +u.sdep.ar.t.men.t.1.4.1.4@gmail.com +usdep.a.r.t.m.e.nt1.414@gmail.com +u.s.d.ep.a.r.t.m.ent1.414@gmail.com +usd.epa.r.t.me.n.t.1414@gmail.com +u.sd.e.p.a.rtm.ent1414@gmail.com +usdepa.r.tment1.4.1.4@gmail.com +u.sd.epar.tme.nt.1.4.14@gmail.com +usd.epart.me.nt.1.4.14@gmail.com +u.s.d.epa.rtment1.4.1.4@gmail.com +us.d.epa.rtme.n.t14.1.4@gmail.com +u.sde.p.a.r.t.me.n.t1.414@gmail.com +u.sde.partm.e.nt14.1.4@gmail.com +u.sdep.art.ment.14.14@gmail.com +u.sd.e.p.ar.t.ment1.414@gmail.com +us.depa.rtm.en.t.14.1.4@gmail.com +u.sd.e.pa.r.t.me.n.t.1414@gmail.com +usdep.artment1.41.4@gmail.com +u.sdep.a.r.tm.en.t1.4.1.4@gmail.com +us.d.e.p.ar.tme.nt.141.4@gmail.com +usd.ep.ar.t.m.e.nt.1.41.4@gmail.com +us.d.ep.art.men.t1.4.1.4@gmail.com +us.dep.art.ment141.4@gmail.com +u.sde.p.a.rt.me.nt.14.1.4@gmail.com +us.d.epart.m.e.nt1.4.14@gmail.com +us.d.e.p.a.rtme.n.t1.4.14@gmail.com +u.sde.pa.rt.men.t1.4.1.4@gmail.com +usdepar.t.m.ent.14.1.4@gmail.com +us.depa.r.t.m.en.t.1.41.4@gmail.com +johnphillip925@gmail.com +j.ohn.ph.il.li.p.92.5@gmail.com +joh.n.ph.il.li.p9.25@gmail.com +j.oh.n.phi.ll.ip9.25@gmail.com +john.phil.l.ip92.5@gmail.com +jo.hnphi.lli.p.9.2.5@gmail.com +jo.h.n.p.hi.l.lip9.25@gmail.com +j.o.h.np.h.illi.p.92.5@gmail.com +john.p.h.illi.p.925@gmail.com +j.o.h.nph.il.lip.9.25@gmail.com +j.oh.np.h.il.l.ip.925@gmail.com +jo.hn.p.h.i.l.li.p.9.25@gmail.com +j.o.h.np.h.il.l.i.p.9.25@gmail.com +j.o.h.n.phi.l.l.i.p925@gmail.com +j.o.hnp.h.i.ll.i.p.92.5@gmail.com +joh.n.p.h.il.li.p.9.25@gmail.com +j.o.hnp.h.i.llip925@gmail.com +j.o.h.n.ph.il.lip925@gmail.com +j.o.hn.phi.ll.ip9.25@gmail.com +jo.hn.p.hi.l.l.i.p9.2.5@gmail.com +jo.h.n.p.hil.lip9.2.5@gmail.com +jo.h.np.hil.l.ip925@gmail.com +joh.nphil.l.ip9.2.5@gmail.com +jo.h.n.p.hil.l.i.p.925@gmail.com +j.ohn.p.hil.l.ip9.2.5@gmail.com +jo.hn.p.h.ill.ip.9.25@gmail.com +j.ohn.phil.li.p92.5@gmail.com +joh.n.phi.l.lip.9.25@gmail.com +jo.hn.ph.i.lli.p.925@gmail.com +j.ohn.phill.ip9.25@gmail.com +j.o.h.n.phi.l.li.p92.5@gmail.com +j.oh.np.hill.i.p.9.2.5@gmail.com +j.o.hn.p.hill.i.p.925@gmail.com +joh.np.h.illip9.25@gmail.com +joh.n.phil.li.p925@gmail.com +joh.nph.ill.ip925@gmail.com +jo.hn.phi.ll.ip.925@gmail.com +j.o.hn.phi.ll.ip.9.2.5@gmail.com +j.ohnp.hi.l.lip9.2.5@gmail.com +j.ohn.p.hi.lli.p9.25@gmail.com +jo.hnp.hi.ll.i.p9.25@gmail.com +j.oh.nph.i.l.l.i.p925@gmail.com +john.p.h.i.l.lip925@gmail.com +j.oh.n.ph.i.l.li.p.9.25@gmail.com +jo.h.n.p.hi.l.l.ip92.5@gmail.com +jo.hn.p.h.illi.p92.5@gmail.com +j.o.h.n.ph.il.li.p92.5@gmail.com +j.o.h.nph.ill.ip9.25@gmail.com +j.o.hn.ph.i.llip9.2.5@gmail.com +j.oh.np.h.il.l.ip925@gmail.com +j.o.h.n.p.h.i.l.li.p9.2.5@gmail.com +joh.np.hi.l.lip.9.2.5@gmail.com +jo.hnph.i.ll.i.p9.25@gmail.com +j.ohn.ph.il.lip.925@gmail.com +j.ohn.p.h.illip925@gmail.com +jo.hnph.il.lip9.2.5@gmail.com +joh.np.hi.l.lip9.2.5@gmail.com +johnp.h.il.li.p9.2.5@gmail.com +john.p.hi.llip.925@gmail.com +j.o.hnphil.l.i.p92.5@gmail.com +jo.h.np.h.i.l.l.i.p925@gmail.com +j.ohn.phi.llip9.25@gmail.com +j.oh.n.p.hil.l.ip.92.5@gmail.com +j.oh.n.p.h.il.li.p925@gmail.com +joh.n.phillip925@gmail.com +joh.np.hil.li.p9.2.5@gmail.com +jo.h.nph.i.l.l.ip9.25@gmail.com +j.oh.np.h.illi.p.92.5@gmail.com +joh.nphil.l.i.p9.25@gmail.com +joh.np.hi.l.l.ip9.2.5@gmail.com +jo.h.n.ph.illi.p.92.5@gmail.com +johnp.hil.l.i.p92.5@gmail.com +john.p.h.i.lli.p.9.2.5@gmail.com +jo.h.n.ph.i.l.l.ip.9.25@gmail.com +jo.h.np.hi.ll.i.p.9.2.5@gmail.com +j.oh.nphi.l.l.ip9.2.5@gmail.com +j.ohnph.i.lli.p925@gmail.com +j.ohnp.h.i.l.l.ip9.25@gmail.com +j.o.hnphil.lip925@gmail.com +jo.hn.ph.i.l.li.p92.5@gmail.com +joh.np.hill.ip92.5@gmail.com +j.oh.np.hi.l.li.p92.5@gmail.com +j.oh.n.ph.i.llip.9.25@gmail.com +john.p.h.i.l.l.i.p.9.2.5@gmail.com +j.o.h.nph.i.llip92.5@gmail.com +jo.h.n.phill.ip.9.25@gmail.com +jo.hnp.hillip.9.25@gmail.com +j.oh.n.ph.i.ll.i.p9.25@gmail.com +j.ohn.ph.i.l.li.p9.2.5@gmail.com +john.p.h.il.l.ip.9.25@gmail.com +john.ph.ill.ip.92.5@gmail.com +joh.np.hi.l.lip.92.5@gmail.com +j.o.hnp.h.i.l.lip9.2.5@gmail.com +j.oh.n.ph.i.llip92.5@gmail.com +jo.hn.p.h.il.l.i.p.925@gmail.com +jo.hn.ph.ill.i.p9.2.5@gmail.com +j.o.h.nphi.l.l.i.p.925@gmail.com +j.oh.np.hil.li.p.925@gmail.com +jo.hn.p.h.i.l.l.ip92.5@gmail.com +johnph.il.l.i.p.9.25@gmail.com +jo.h.nphi.ll.ip9.25@gmail.com +j.ohnp.hilli.p.925@gmail.com +j.ohn.phi.ll.i.p92.5@gmail.com +jo.hn.phillip.9.25@gmail.com +j.ohn.ph.illip9.2.5@gmail.com +john.ph.illip9.2.5@gmail.com +j.oh.np.hil.l.i.p925@gmail.com +j.ohnph.il.lip92.5@gmail.com +j.o.hn.philli.p9.25@gmail.com +j.ohn.p.hi.l.li.p.925@gmail.com +jo.h.nphil.li.p9.2.5@gmail.com +jo.h.np.h.i.l.li.p.92.5@gmail.com +j.oh.nph.ill.ip9.25@gmail.com +j.o.h.nphill.i.p.9.2.5@gmail.com +j.ohnph.illip.92.5@gmail.com +johnphi.l.l.i.p92.5@gmail.com +jo.hnp.hi.lli.p92.5@gmail.com +j.ohn.ph.i.ll.i.p9.2.5@gmail.com +j.o.hn.ph.il.l.i.p.925@gmail.com +j.ohnp.h.i.ll.i.p.9.2.5@gmail.com +john.p.h.il.lip925@gmail.com +j.o.hn.p.hi.l.lip.925@gmail.com +jo.hnphill.i.p925@gmail.com +j.oh.n.p.h.i.llip.925@gmail.com +joh.np.h.i.l.l.i.p.925@gmail.com +jo.h.nphil.lip.9.25@gmail.com +j.oh.n.ph.illip9.25@gmail.com +j.ohnp.h.i.l.lip9.25@gmail.com +j.oh.np.h.i.l.l.i.p9.25@gmail.com +j.ohn.phi.llip.9.2.5@gmail.com +john.ph.il.l.ip.9.2.5@gmail.com +j.o.h.n.p.h.i.ll.ip.92.5@gmail.com +john.ph.i.llip92.5@gmail.com +j.o.hn.p.h.i.ll.ip.9.2.5@gmail.com +j.o.h.np.h.il.l.ip92.5@gmail.com +j.oh.np.hil.li.p925@gmail.com +j.o.h.n.ph.i.lli.p92.5@gmail.com +j.o.h.nph.il.l.ip92.5@gmail.com +joh.nphilli.p92.5@gmail.com +jo.h.n.ph.il.l.ip.9.25@gmail.com +joh.n.ph.il.lip.9.2.5@gmail.com +johnp.h.i.llip9.2.5@gmail.com +johnphi.llip.925@gmail.com +joh.n.p.h.i.l.l.ip925@gmail.com +johnp.h.i.l.li.p9.25@gmail.com +j.ohnp.hi.llip.9.2.5@gmail.com +jo.hn.phil.l.i.p.925@gmail.com +johnphillip.92.5@gmail.com +j.ohnp.hi.llip.9.25@gmail.com +j.o.hnphi.ll.ip9.25@gmail.com +jo.hn.p.hill.i.p9.25@gmail.com +john.p.hi.lli.p92.5@gmail.com +jo.h.np.h.ill.ip9.25@gmail.com +j.o.hnphilli.p925@gmail.com +joh.n.p.h.i.l.li.p.925@gmail.com +j.o.h.np.h.ill.i.p.92.5@gmail.com +j.oh.nphilli.p92.5@gmail.com +johnp.hillip.925@gmail.com +joh.n.p.h.i.ll.ip.92.5@gmail.com +jo.hn.ph.i.ll.i.p.92.5@gmail.com +j.o.h.np.h.il.lip.9.25@gmail.com +j.o.h.n.phill.ip.92.5@gmail.com +joh.nph.i.llip.925@gmail.com +j.oh.n.p.hillip.92.5@gmail.com +john.phill.ip925@gmail.com +j.o.h.n.p.h.illip9.25@gmail.com +j.oh.n.p.h.i.llip9.2.5@gmail.com +j.o.hnp.h.i.l.l.i.p.925@gmail.com +j.ohnphil.l.ip.9.25@gmail.com +j.oh.n.phill.i.p925@gmail.com +j.oh.nph.i.ll.i.p.925@gmail.com +john.ph.i.l.li.p925@gmail.com +joh.n.p.h.i.l.lip.9.2.5@gmail.com +john.phi.l.lip925@gmail.com +jo.hn.p.h.i.lli.p92.5@gmail.com +j.oh.nph.il.l.i.p925@gmail.com +jo.hnp.h.illi.p.9.2.5@gmail.com +johnphi.l.lip9.25@gmail.com +j.o.h.np.hil.l.i.p.92.5@gmail.com +j.oh.n.p.hil.l.ip9.25@gmail.com +j.oh.n.p.hilli.p92.5@gmail.com +j.oh.n.ph.i.l.li.p.925@gmail.com +j.oh.n.p.hi.lli.p9.2.5@gmail.com +j.o.hn.phi.ll.i.p.9.25@gmail.com +j.o.hnphi.lli.p.9.25@gmail.com +joh.n.phil.l.i.p.9.25@gmail.com +jo.h.np.h.i.ll.ip9.25@gmail.com +jo.h.np.hilli.p925@gmail.com +j.oh.n.ph.il.li.p92.5@gmail.com +j.o.h.np.h.illip.925@gmail.com +joh.nph.il.l.ip9.25@gmail.com +j.o.hnp.hil.l.i.p925@gmail.com +j.o.h.n.ph.i.lli.p925@gmail.com +j.oh.nphi.llip92.5@gmail.com +jo.hnph.il.lip.9.2.5@gmail.com +jo.h.np.h.il.l.i.p9.25@gmail.com +j.ohnp.hi.l.l.i.p.92.5@gmail.com +jo.hnph.i.lli.p92.5@gmail.com +j.o.h.np.hil.li.p.925@gmail.com +jo.h.n.p.hilli.p92.5@gmail.com +j.oh.np.hill.i.p9.2.5@gmail.com +j.o.hn.p.hil.l.i.p925@gmail.com +j.oh.nph.i.llip.925@gmail.com +joh.nph.i.l.l.i.p9.25@gmail.com +jo.hnp.hill.ip9.25@gmail.com +j.o.h.n.p.h.i.lli.p9.2.5@gmail.com +j.ohnphilli.p9.2.5@gmail.com +j.ohn.p.h.i.l.lip92.5@gmail.com +j.o.h.n.p.hilli.p.925@gmail.com +j.ohn.ph.ill.ip.925@gmail.com +jo.h.n.p.h.ill.ip.925@gmail.com +jo.h.n.phil.li.p92.5@gmail.com +jo.h.np.hil.li.p.92.5@gmail.com +jo.hn.phil.l.ip925@gmail.com +jo.hnp.hi.ll.ip9.2.5@gmail.com +jo.h.nph.il.l.i.p92.5@gmail.com +j.o.h.n.philli.p.92.5@gmail.com +j.o.h.nphi.llip9.2.5@gmail.com +joh.np.h.i.lli.p.9.2.5@gmail.com +j.o.h.n.philli.p925@gmail.com +j.o.h.n.p.h.i.l.l.ip.9.25@gmail.com +jo.hn.p.h.illip.92.5@gmail.com +john.p.hil.l.ip9.2.5@gmail.com +j.o.h.np.h.illi.p925@gmail.com +johnp.hil.l.i.p.925@gmail.com +jo.hn.phillip92.5@gmail.com +johnphi.l.li.p925@gmail.com +j.oh.np.hi.l.lip.925@gmail.com +j.ohn.phi.lli.p.9.2.5@gmail.com +j.ohn.p.hi.l.l.i.p9.25@gmail.com +jo.hn.p.h.ill.ip925@gmail.com +john.p.hil.li.p92.5@gmail.com +jo.h.n.phi.l.li.p.92.5@gmail.com +jo.hn.p.h.il.lip.925@gmail.com +j.ohn.phil.l.ip9.25@gmail.com +j.ohn.phi.l.l.i.p925@gmail.com +j.oh.n.phi.l.l.ip.925@gmail.com +j.o.h.np.h.ill.ip925@gmail.com +j.o.h.np.h.i.l.l.ip.92.5@gmail.com +j.oh.np.h.i.l.li.p.9.2.5@gmail.com +j.o.hn.ph.i.lli.p92.5@gmail.com +joh.nphil.li.p.925@gmail.com +j.o.h.n.p.h.i.l.lip.9.25@gmail.com +jo.h.n.phi.lli.p925@gmail.com +j.o.h.nph.i.ll.i.p.925@gmail.com +jo.h.n.ph.il.l.ip.92.5@gmail.com +j.ohnp.hi.llip925@gmail.com +j.o.hnp.hillip925@gmail.com +jo.h.n.p.h.illip92.5@gmail.com +jo.hn.p.h.ill.i.p.92.5@gmail.com +jo.h.n.phi.l.l.i.p.925@gmail.com +j.o.hn.p.hi.ll.i.p.92.5@gmail.com +john.phi.l.li.p.9.2.5@gmail.com +j.oh.np.hil.li.p.92.5@gmail.com +j.oh.n.p.h.i.llip.9.2.5@gmail.com +j.o.hnph.il.li.p9.25@gmail.com +j.ohn.p.hil.lip.9.2.5@gmail.com +joh.nph.il.l.i.p.9.2.5@gmail.com +jo.h.nph.ill.ip9.25@gmail.com +john.p.h.il.l.i.p.9.25@gmail.com +j.ohn.phil.l.ip.925@gmail.com +j.ohnphi.ll.i.p925@gmail.com +jo.h.n.p.hil.li.p925@gmail.com +john.p.hillip9.2.5@gmail.com +j.o.h.n.p.hilli.p.92.5@gmail.com +j.oh.np.hi.l.l.i.p925@gmail.com +j.oh.np.hillip.9.25@gmail.com +j.o.hn.ph.il.l.i.p92.5@gmail.com +j.ohnph.il.lip925@gmail.com +j.o.h.n.ph.i.llip92.5@gmail.com +j.o.hnp.hi.ll.i.p.92.5@gmail.com +j.ohn.p.h.ill.i.p925@gmail.com +john.ph.il.l.ip.925@gmail.com +johnp.h.illip9.2.5@gmail.com +johnph.ill.ip925@gmail.com +j.o.hnp.hill.ip9.2.5@gmail.com +j.o.h.nph.illip925@gmail.com +jo.h.n.p.hi.l.l.i.p9.25@gmail.com +j.o.h.n.p.hil.l.i.p.925@gmail.com +johnp.hi.l.l.i.p9.25@gmail.com +jo.h.np.hi.l.l.i.p925@gmail.com +jo.h.np.h.il.l.ip92.5@gmail.com +j.o.h.n.ph.i.llip925@gmail.com +johnp.h.il.li.p925@gmail.com +johnphi.l.lip.9.2.5@gmail.com +j.ohnphi.ll.i.p.9.25@gmail.com +j.oh.np.h.illip9.25@gmail.com +j.ohn.p.h.il.li.p.9.2.5@gmail.com +jo.hnp.hilli.p.92.5@gmail.com +j.o.h.n.p.h.il.l.i.p.9.25@gmail.com +j.ohnphi.llip92.5@gmail.com +j.ohnph.il.l.i.p.9.25@gmail.com +j.oh.n.p.h.i.l.li.p.925@gmail.com +j.oh.np.h.il.li.p92.5@gmail.com +john.philli.p.9.25@gmail.com +johnp.h.il.l.i.p9.25@gmail.com +jo.h.n.phill.i.p9.25@gmail.com +johnp.h.il.lip.9.25@gmail.com +jo.hn.phil.l.i.p9.25@gmail.com +jo.hn.p.hil.l.ip92.5@gmail.com +j.ohnp.hi.l.lip92.5@gmail.com +j.ohn.p.h.il.l.ip.9.2.5@gmail.com +j.oh.np.h.i.l.lip.925@gmail.com +jo.h.n.phil.l.ip.9.2.5@gmail.com +j.o.hnp.h.il.l.i.p.9.2.5@gmail.com +johnp.h.illip.9.2.5@gmail.com +joh.nph.il.l.i.p9.25@gmail.com +j.o.hn.p.h.il.l.ip.92.5@gmail.com +johnp.h.il.l.ip.925@gmail.com +j.oh.nph.il.li.p.9.2.5@gmail.com +jo.h.nph.i.llip.925@gmail.com +j.o.hnph.i.ll.i.p925@gmail.com +jo.h.nph.il.lip9.2.5@gmail.com +jo.h.n.p.hi.l.l.i.p925@gmail.com +joh.nph.il.li.p.925@gmail.com +jo.hnphi.lli.p92.5@gmail.com +j.o.hn.philli.p92.5@gmail.com +joh.n.p.hi.ll.ip92.5@gmail.com +jo.h.nph.il.li.p.925@gmail.com +j.o.h.nphi.ll.ip9.25@gmail.com +joh.n.p.h.i.llip92.5@gmail.com +j.o.h.n.p.hill.ip9.2.5@gmail.com +j.o.hn.ph.illip925@gmail.com +jo.h.n.ph.il.li.p.92.5@gmail.com +joh.nphi.lli.p9.25@gmail.com +j.ohn.phi.lli.p.9.25@gmail.com +joh.n.phi.l.l.ip9.25@gmail.com +jo.h.np.hillip.925@gmail.com +joh.np.hil.l.ip.92.5@gmail.com +jo.h.n.phil.l.i.p.9.25@gmail.com +jo.h.nphillip.92.5@gmail.com +j.ohnph.i.llip.92.5@gmail.com +j.o.hn.ph.il.l.ip92.5@gmail.com +joh.n.p.hill.ip92.5@gmail.com +jo.h.nph.il.l.ip.9.25@gmail.com +j.oh.np.h.ill.i.p.92.5@gmail.com +john.p.hil.l.i.p.9.2.5@gmail.com +j.oh.np.hi.ll.i.p925@gmail.com +j.o.h.nphi.l.li.p.925@gmail.com +jo.h.nph.i.lli.p92.5@gmail.com +j.oh.np.h.i.ll.i.p.9.25@gmail.com +jo.h.n.ph.i.ll.i.p9.25@gmail.com +j.o.hnphi.l.lip925@gmail.com +joh.nph.il.lip.925@gmail.com +joh.np.hi.l.li.p.925@gmail.com +j.o.h.np.h.il.lip.9.2.5@gmail.com +john.phillip.92.5@gmail.com +jo.h.np.h.i.llip925@gmail.com +johnp.hi.lli.p.9.2.5@gmail.com +j.oh.n.ph.ill.ip9.2.5@gmail.com +joh.np.h.illip92.5@gmail.com +jo.hnp.hi.l.l.ip.9.2.5@gmail.com +j.oh.n.p.hi.llip925@gmail.com +john.philli.p.92.5@gmail.com +jo.h.n.p.hill.i.p.92.5@gmail.com +j.o.h.np.h.il.lip9.2.5@gmail.com +jo.h.n.p.h.il.l.ip.925@gmail.com +j.o.hnph.i.lli.p925@gmail.com +john.p.h.i.ll.ip925@gmail.com +j.ohnp.h.il.li.p925@gmail.com +johnphil.lip.9.25@gmail.com +jo.hnph.i.ll.ip.9.25@gmail.com +j.ohn.phil.lip92.5@gmail.com +j.o.hnp.hill.ip925@gmail.com +j.o.h.nphi.l.l.ip92.5@gmail.com +joh.n.p.h.il.l.ip92.5@gmail.com +j.oh.n.p.h.i.ll.ip.925@gmail.com +joh.nphi.ll.ip92.5@gmail.com +joh.nphilli.p.9.2.5@gmail.com +j.oh.nphillip.925@gmail.com +j.ohn.p.hi.l.li.p92.5@gmail.com +john.phil.lip.9.25@gmail.com +j.oh.n.p.hillip925@gmail.com +j.oh.n.ph.ill.ip9.25@gmail.com +john.phil.lip.9.2.5@gmail.com +johnp.h.ill.ip9.25@gmail.com +j.ohn.ph.i.ll.ip.925@gmail.com +johnph.i.l.l.ip92.5@gmail.com +joh.n.p.hil.lip9.25@gmail.com +jo.hn.ph.i.l.lip.9.2.5@gmail.com +jo.hnph.i.l.l.i.p.9.25@gmail.com +j.ohn.ph.il.lip9.2.5@gmail.com +joh.n.phill.i.p9.2.5@gmail.com +j.o.h.nph.i.l.lip925@gmail.com +j.o.hn.p.hill.i.p9.25@gmail.com +joh.n.ph.i.ll.ip.92.5@gmail.com +j.ohnp.h.i.ll.ip925@gmail.com +j.oh.np.hil.lip.925@gmail.com +j.o.h.n.ph.i.l.l.i.p.9.2.5@gmail.com +j.o.h.nphi.l.lip.925@gmail.com +j.o.h.nphil.l.ip9.2.5@gmail.com +j.o.h.nph.il.l.i.p9.2.5@gmail.com +jo.h.np.h.i.llip9.25@gmail.com +j.ohnph.il.l.ip9.2.5@gmail.com +john.p.hi.l.li.p.9.2.5@gmail.com +johnp.h.i.ll.i.p9.2.5@gmail.com +jo.h.n.phi.l.l.ip92.5@gmail.com +j.oh.nph.il.lip9.2.5@gmail.com +j.o.hnph.illi.p.925@gmail.com +j.oh.n.p.hi.l.l.i.p925@gmail.com +johnp.h.il.li.p9.25@gmail.com +johnp.hilli.p9.25@gmail.com +john.p.h.ill.i.p925@gmail.com +j.o.hn.p.h.i.l.lip9.25@gmail.com +j.o.hnphi.llip9.25@gmail.com +j.o.h.n.ph.i.lli.p.9.2.5@gmail.com +johnph.illi.p.9.2.5@gmail.com +jo.hn.ph.i.l.l.ip925@gmail.com +j.o.h.nphi.llip.92.5@gmail.com +john.phillip.9.25@gmail.com +j.o.h.n.phillip9.25@gmail.com +j.ohnphill.ip.92.5@gmail.com +john.ph.i.l.l.ip.9.25@gmail.com +johnph.illip92.5@gmail.com +joh.n.p.h.i.l.l.ip92.5@gmail.com +jo.hn.ph.i.l.l.i.p.925@gmail.com +john.p.hi.l.l.ip9.25@gmail.com +jo.h.n.phillip92.5@gmail.com +johnp.hi.l.l.ip925@gmail.com +joh.n.phi.l.l.ip92.5@gmail.com +john.phi.lli.p.9.25@gmail.com +jo.h.n.p.h.i.ll.i.p.92.5@gmail.com +j.oh.nphil.l.ip.9.25@gmail.com +joh.nphi.lli.p9.2.5@gmail.com +johnphil.l.ip.925@gmail.com +j.ohn.phi.l.l.i.p92.5@gmail.com +joh.n.p.hil.li.p.9.2.5@gmail.com +jo.hnp.h.i.l.l.i.p.9.25@gmail.com +johnp.hi.ll.i.p.925@gmail.com +john.p.hill.i.p.92.5@gmail.com +jo.h.n.phi.l.lip9.2.5@gmail.com +j.o.hnphil.lip9.25@gmail.com +j.o.h.n.p.hil.l.i.p9.25@gmail.com +j.ohnp.h.il.l.i.p92.5@gmail.com +jo.hnp.hi.l.l.i.p92.5@gmail.com +jo.hnph.il.l.ip.925@gmail.com +jo.h.np.hillip925@gmail.com +jo.h.np.hi.l.l.i.p92.5@gmail.com +jo.hn.phi.l.li.p.925@gmail.com +j.o.h.n.p.h.i.l.l.i.p92.5@gmail.com +j.oh.n.ph.i.llip.9.2.5@gmail.com +j.oh.np.hil.l.i.p.9.25@gmail.com +j.oh.n.ph.i.l.lip.9.25@gmail.com +j.oh.nph.il.l.ip.9.2.5@gmail.com +j.o.hn.p.h.il.l.ip.9.25@gmail.com +j.o.h.np.h.i.l.l.i.p.9.25@gmail.com +jo.h.n.p.h.i.l.l.ip92.5@gmail.com +jo.hnphi.l.lip92.5@gmail.com +joh.nph.i.l.li.p92.5@gmail.com +j.oh.n.p.hil.li.p.9.2.5@gmail.com +johnph.ill.i.p.9.2.5@gmail.com +aliyaibrahim486@gmail.com +al.iy.a.ib.ra.him4.86@gmail.com +a.l.iy.a.ib.ra.him48.6@gmail.com +a.liy.a.ibr.a.h.im4.8.6@gmail.com +a.liyaib.ra.hi.m4.86@gmail.com +al.iy.a.ibrah.im.4.8.6@gmail.com +al.i.yaib.rahim.4.8.6@gmail.com +al.i.yaibra.hi.m4.86@gmail.com +a.liy.ai.bra.him4.8.6@gmail.com +al.i.y.a.ibr.a.h.im.4.86@gmail.com +al.iyaibr.ahim.4.86@gmail.com +a.l.i.yai.brahi.m.486@gmail.com +ali.y.a.ibra.hi.m4.86@gmail.com +a.l.iya.ib.rah.im4.8.6@gmail.com +al.i.y.a.ibr.ahim4.86@gmail.com +ali.yaib.ra.him.486@gmail.com +a.l.iya.ibr.a.him.4.86@gmail.com +aliya.i.brah.i.m486@gmail.com +al.i.y.ai.b.r.ah.im.48.6@gmail.com +ali.yaibr.a.h.i.m4.8.6@gmail.com +aliyai.b.rah.i.m4.86@gmail.com +a.l.i.y.a.i.brahi.m4.86@gmail.com +al.iya.i.brah.im.48.6@gmail.com +a.l.i.y.aib.ra.hi.m.486@gmail.com +a.l.i.y.aibr.a.hi.m.4.8.6@gmail.com +aliy.a.ib.ra.h.im.4.8.6@gmail.com +a.l.i.yaibrah.i.m.4.8.6@gmail.com +al.i.y.ai.b.r.ah.im.4.86@gmail.com +a.liy.a.ib.rahim.4.86@gmail.com +a.l.i.y.aib.rah.im486@gmail.com +a.li.ya.i.bra.him4.86@gmail.com +a.l.i.y.ai.b.ra.h.i.m486@gmail.com +a.liy.a.ibra.hi.m.4.86@gmail.com +al.iya.i.b.rahim.486@gmail.com +a.l.iya.ibr.ah.i.m486@gmail.com +a.liy.ai.b.rahim48.6@gmail.com +al.iy.ai.b.rahi.m4.86@gmail.com +a.l.iy.a.i.b.rah.im486@gmail.com +al.iyaibr.a.hi.m48.6@gmail.com +ali.y.ai.br.ah.i.m.486@gmail.com +a.l.iya.ibra.him.486@gmail.com +a.li.yai.b.ra.h.i.m.4.8.6@gmail.com +a.l.i.y.ai.brahi.m.4.8.6@gmail.com +a.li.y.a.i.brah.i.m.48.6@gmail.com +ali.ya.ibrah.i.m4.8.6@gmail.com +al.i.ya.ibrahi.m.4.86@gmail.com +a.li.y.aib.ra.him486@gmail.com +al.iya.i.b.r.a.hi.m.4.86@gmail.com +a.l.iyai.brahi.m.4.86@gmail.com +a.l.i.ya.ibr.ahim4.8.6@gmail.com +aliy.a.i.br.ahi.m.48.6@gmail.com +a.liy.ai.b.rahim4.86@gmail.com +ali.yaib.ra.hi.m486@gmail.com +a.l.i.ya.i.b.ra.him.4.86@gmail.com +a.l.iyai.b.r.a.h.i.m.4.8.6@gmail.com +a.li.ya.i.b.rahim.4.8.6@gmail.com +a.liy.ai.b.r.ah.i.m486@gmail.com +a.l.i.ya.ibr.a.hi.m48.6@gmail.com +a.liyai.b.r.ahi.m486@gmail.com +a.l.iy.aib.ra.him.48.6@gmail.com +al.iy.a.ib.rahim.4.8.6@gmail.com +al.i.y.a.ib.r.ah.im.486@gmail.com +al.i.ya.i.b.r.a.h.im4.86@gmail.com +a.l.i.yai.br.a.h.i.m48.6@gmail.com +a.l.i.y.ai.br.ahi.m.4.86@gmail.com +al.iy.ai.b.r.ah.i.m4.86@gmail.com +aliy.a.i.b.r.a.h.im.48.6@gmail.com +a.li.y.a.ibra.hi.m.4.8.6@gmail.com +al.i.y.a.ibra.him.48.6@gmail.com +ali.ya.ibr.ahi.m.486@gmail.com +ali.y.a.i.b.ra.h.i.m486@gmail.com +ali.yai.bra.him48.6@gmail.com +a.liy.aibr.ahi.m.4.8.6@gmail.com +a.l.i.yaib.ra.h.i.m.48.6@gmail.com +a.l.i.yaib.ra.h.i.m.4.8.6@gmail.com +a.li.ya.i.br.ah.i.m48.6@gmail.com +al.i.ya.i.b.ra.him4.86@gmail.com +al.i.yai.b.r.ahi.m48.6@gmail.com +al.iy.a.i.b.r.a.hi.m.48.6@gmail.com +aliy.aibrahi.m4.86@gmail.com +a.li.y.a.i.br.ah.im4.8.6@gmail.com +a.l.iy.a.i.b.r.ah.im48.6@gmail.com +a.li.ya.ibra.h.im.4.8.6@gmail.com +a.l.iy.aibrah.im48.6@gmail.com +a.liya.ib.r.ah.i.m.4.8.6@gmail.com +a.liya.i.br.a.h.i.m486@gmail.com +ali.yaibr.ah.im.4.86@gmail.com +aliy.a.ibr.ah.im.486@gmail.com +a.l.i.y.aibr.a.him.486@gmail.com +ali.y.a.i.b.r.ahim.486@gmail.com +aliyai.b.r.ahi.m4.86@gmail.com +al.i.ya.i.b.ra.h.i.m4.8.6@gmail.com +aliy.a.ib.rahim.4.8.6@gmail.com +a.l.iy.a.i.br.ah.im.4.8.6@gmail.com +al.iyai.b.r.ahim.486@gmail.com +a.l.iya.ib.ra.him.48.6@gmail.com +ali.ya.ibr.ah.im.4.8.6@gmail.com +a.liya.i.b.r.a.him48.6@gmail.com +aliy.ai.b.r.ahim486@gmail.com +aliy.a.i.brahim.48.6@gmail.com +aliya.ibrahi.m48.6@gmail.com +ali.ya.i.b.r.a.h.i.m4.8.6@gmail.com +a.l.iya.i.b.ra.hi.m.486@gmail.com +al.iy.a.ib.rahim486@gmail.com +a.liya.ib.r.ah.im4.86@gmail.com +al.i.y.ai.br.ah.i.m.486@gmail.com +a.l.i.yaibr.ahim4.8.6@gmail.com +al.iy.a.ib.r.a.hi.m.486@gmail.com +a.li.y.a.i.b.ra.h.im4.86@gmail.com +aliy.a.ibr.a.him.4.8.6@gmail.com +aliy.a.ib.ra.h.i.m486@gmail.com +aliy.ai.b.r.ahim.4.86@gmail.com +al.i.ya.ib.r.ahi.m4.86@gmail.com +aliyai.b.r.ahim.4.86@gmail.com +a.l.iy.a.i.bra.h.im.4.8.6@gmail.com +al.i.y.a.ibra.h.i.m4.86@gmail.com +a.l.iy.aib.rahim48.6@gmail.com +al.i.ya.i.brahim4.86@gmail.com +a.liy.aib.ra.hi.m4.86@gmail.com +a.l.i.y.aibr.a.him.4.8.6@gmail.com +al.i.y.aibr.ahim.48.6@gmail.com +aliy.ai.br.ah.im.486@gmail.com +aliy.aibr.a.h.i.m4.86@gmail.com +a.l.iyai.b.r.ah.im.4.8.6@gmail.com +a.l.iy.a.ib.rah.im.48.6@gmail.com +aliy.a.i.br.a.h.i.m.4.86@gmail.com +a.li.y.ai.b.ra.hi.m.48.6@gmail.com +a.li.ya.ibr.ahi.m.486@gmail.com +ali.yaib.ra.h.i.m.486@gmail.com +a.l.iy.ai.br.ahi.m.4.86@gmail.com +a.l.iyaib.r.ah.i.m.486@gmail.com +a.liy.aib.ra.h.i.m.48.6@gmail.com +al.iyai.b.r.ah.im.48.6@gmail.com +a.li.yaib.r.a.h.im486@gmail.com +a.l.i.y.aibra.h.im.4.86@gmail.com +aliy.a.i.brah.im.48.6@gmail.com +al.i.ya.i.br.ah.im.486@gmail.com +al.iy.a.ibra.hi.m4.86@gmail.com +aliyai.b.r.ah.i.m.4.8.6@gmail.com +al.iy.aibr.a.h.i.m48.6@gmail.com +aliya.i.bra.h.im486@gmail.com +a.l.i.y.aib.ra.h.im48.6@gmail.com +a.li.y.a.i.br.ah.im.48.6@gmail.com +a.liyaibrah.i.m486@gmail.com +aliy.a.i.bra.h.i.m48.6@gmail.com +a.li.y.ai.bra.him48.6@gmail.com +a.li.yai.b.rahi.m4.8.6@gmail.com +a.liy.aib.ra.him48.6@gmail.com +a.li.y.a.i.br.ah.i.m486@gmail.com +al.i.yai.b.r.a.hi.m4.86@gmail.com +ali.y.a.i.b.r.ah.im.4.8.6@gmail.com +a.l.i.ya.i.b.r.ah.im.4.86@gmail.com +aliy.a.i.bra.him.486@gmail.com +a.l.iyai.b.r.a.h.i.m.486@gmail.com +a.l.iy.ai.b.ra.hi.m.4.86@gmail.com +al.i.y.a.ibrahim.4.8.6@gmail.com +al.iya.i.br.a.h.im.486@gmail.com +al.iya.ibra.hi.m4.8.6@gmail.com +al.iy.ai.b.r.ahi.m.4.8.6@gmail.com +a.liy.a.ibr.a.h.im4.86@gmail.com +al.iy.aib.r.ah.im4.8.6@gmail.com +a.l.iy.ai.brah.im4.86@gmail.com +aliyaibrah.i.m486@gmail.com +a.l.iy.ai.b.ra.h.im48.6@gmail.com +a.liya.ib.r.a.h.i.m.486@gmail.com +aliy.aibrahi.m4.8.6@gmail.com +a.l.iyaib.ra.h.im.486@gmail.com +a.l.i.y.aibra.h.im.486@gmail.com +a.l.iy.aib.r.a.h.im.4.86@gmail.com +ali.y.aib.ra.hi.m.4.86@gmail.com +ali.ya.ib.ra.him4.86@gmail.com +a.l.iy.a.i.b.r.a.him48.6@gmail.com +a.li.ya.ib.r.ah.im.4.8.6@gmail.com +al.iyai.b.r.ahi.m4.86@gmail.com +a.l.iya.ibr.a.hi.m4.8.6@gmail.com +ali.y.aibra.hi.m486@gmail.com +a.l.iya.i.br.a.hi.m.4.8.6@gmail.com +a.l.iya.i.b.ra.h.im4.86@gmail.com +al.iy.a.i.b.r.ahi.m.48.6@gmail.com +a.l.iy.aibr.a.h.im4.8.6@gmail.com +a.li.ya.ib.r.a.h.i.m.486@gmail.com +al.i.y.a.ib.r.ahim.48.6@gmail.com +al.iyaib.rah.i.m.4.8.6@gmail.com +aliya.ibr.a.him.48.6@gmail.com +a.l.i.y.aib.r.ah.im.4.8.6@gmail.com +a.li.yai.b.ra.hi.m.4.8.6@gmail.com +aliyaib.ra.him4.86@gmail.com +ali.yaibr.ahi.m.486@gmail.com +a.li.y.a.ib.r.ahi.m4.8.6@gmail.com +aliy.aibra.h.i.m4.86@gmail.com +al.i.ya.ibr.a.h.i.m4.86@gmail.com +ali.ya.ibr.a.h.im.486@gmail.com +a.l.iyaib.ra.him.4.86@gmail.com +al.iy.a.i.b.rahim.4.8.6@gmail.com +al.i.ya.i.b.r.ah.i.m.4.8.6@gmail.com +a.l.iya.i.b.rahim.4.8.6@gmail.com +al.i.y.aib.ra.h.i.m4.86@gmail.com +a.liy.a.i.bra.h.i.m4.8.6@gmail.com +a.l.iya.i.brahi.m48.6@gmail.com +a.l.i.y.aib.r.ah.i.m48.6@gmail.com +a.liya.i.b.ra.h.i.m486@gmail.com +a.liy.a.ib.r.ahi.m.48.6@gmail.com +aliy.ai.b.ra.hi.m.486@gmail.com +a.liy.aibrah.i.m.4.8.6@gmail.com +aliya.i.b.ra.hi.m.486@gmail.com +al.i.y.a.ibrahim4.86@gmail.com +a.li.ya.i.bra.h.i.m4.8.6@gmail.com +ali.y.aibr.ah.im.486@gmail.com +al.iy.a.i.bra.h.im4.8.6@gmail.com +a.l.i.ya.i.b.r.a.him.48.6@gmail.com +al.i.y.aib.r.ah.i.m4.86@gmail.com +a.l.i.y.aib.r.ahi.m.4.8.6@gmail.com +a.liya.ib.ra.h.i.m48.6@gmail.com +al.i.yaibr.a.h.i.m4.86@gmail.com +a.l.iyaib.r.a.h.im.4.86@gmail.com +ali.ya.i.b.ra.h.i.m.4.86@gmail.com +ali.y.aibra.him.4.86@gmail.com +a.liy.ai.b.r.ah.im48.6@gmail.com +a.liyai.b.ra.him.48.6@gmail.com +al.iya.i.br.ah.im.48.6@gmail.com +al.i.y.a.ib.r.a.h.i.m48.6@gmail.com +a.l.i.yai.br.ahim.4.86@gmail.com +a.liy.ai.b.r.ah.i.m4.86@gmail.com +a.liya.i.br.a.him4.8.6@gmail.com +a.li.yaib.r.a.h.i.m.4.86@gmail.com +al.iy.a.i.bra.h.im.4.86@gmail.com +aliyai.br.ahi.m4.8.6@gmail.com +a.li.ya.ib.r.a.h.im.48.6@gmail.com +a.liya.ibr.a.h.i.m4.8.6@gmail.com +aliy.a.ibra.hi.m.48.6@gmail.com +aliy.ai.b.r.ah.i.m48.6@gmail.com +al.i.y.ai.br.a.him486@gmail.com +a.l.i.y.ai.b.r.ahi.m4.8.6@gmail.com +al.iy.aibrahi.m.486@gmail.com +a.liy.aib.r.ahi.m486@gmail.com +ali.ya.ibr.a.him486@gmail.com +a.l.iy.aib.r.ah.i.m.4.86@gmail.com +a.l.i.ya.i.br.ahi.m.48.6@gmail.com +ali.ya.i.br.ahim.4.86@gmail.com +aliya.ibr.ahim.4.86@gmail.com +a.liyai.b.rahi.m4.8.6@gmail.com +a.l.i.yaibr.ah.im4.86@gmail.com +aliya.ibrah.i.m4.86@gmail.com +a.li.ya.i.b.ra.h.im48.6@gmail.com +al.i.y.ai.brah.im4.86@gmail.com +aliy.ai.b.r.a.h.i.m486@gmail.com +a.l.i.yai.b.rah.im486@gmail.com +ali.y.a.ibr.ah.im.48.6@gmail.com +aliya.i.brah.i.m48.6@gmail.com +aliy.ai.b.ra.h.im.4.86@gmail.com +a.liy.a.ib.ra.hi.m4.8.6@gmail.com +a.liya.i.br.a.hi.m.4.8.6@gmail.com +a.li.y.aibrah.im.486@gmail.com +a.liy.ai.br.a.h.i.m.4.86@gmail.com +a.li.y.ai.bra.him4.86@gmail.com +al.iya.ibrah.im.48.6@gmail.com +al.iyaib.ra.hi.m48.6@gmail.com +aliya.i.b.rah.im48.6@gmail.com +a.liyai.br.a.hi.m.48.6@gmail.com +a.l.i.y.a.i.bra.h.i.m.486@gmail.com +al.i.yaibr.ahim.4.86@gmail.com +ali.yai.b.r.a.h.i.m4.86@gmail.com +a.l.i.yai.b.r.ah.i.m.4.86@gmail.com +a.li.ya.i.brah.i.m.48.6@gmail.com +a.l.i.yai.b.rahim.48.6@gmail.com +ali.y.aibrahi.m.486@gmail.com +al.i.y.aibra.h.i.m4.8.6@gmail.com +a.li.y.a.i.br.a.h.i.m4.86@gmail.com +a.liy.aibra.h.im4.8.6@gmail.com +al.i.yai.b.rah.im.4.8.6@gmail.com +a.l.iyai.b.r.a.h.im4.86@gmail.com +ali.y.aib.r.a.h.i.m.4.86@gmail.com +a.l.iy.a.ib.ra.h.i.m486@gmail.com +aliya.i.bra.him486@gmail.com +a.liy.aib.rahim486@gmail.com +a.l.i.y.a.ibr.ahim.48.6@gmail.com +ali.yaib.r.ahi.m.48.6@gmail.com +al.iya.ib.rahim.48.6@gmail.com +a.li.yaib.ra.him.4.8.6@gmail.com +al.i.yai.br.ahim.48.6@gmail.com +a.l.iy.ai.brah.im.4.86@gmail.com +al.i.y.a.ibr.a.hi.m.486@gmail.com +a.l.iy.aibrah.i.m.4.8.6@gmail.com +ali.y.a.i.b.r.a.h.i.m.4.86@gmail.com +al.iya.i.b.r.ah.im.48.6@gmail.com +al.iyaib.r.a.him48.6@gmail.com +a.l.iya.i.brahi.m4.86@gmail.com +a.li.y.a.i.bra.him.4.8.6@gmail.com +a.l.iy.ai.b.rahim48.6@gmail.com +aliya.i.b.r.ahi.m.4.8.6@gmail.com +ali.y.a.i.b.r.a.him.486@gmail.com +al.i.yaib.r.ahi.m486@gmail.com +al.iya.ib.ra.hi.m.4.86@gmail.com +a.l.i.y.ai.br.ah.im.4.86@gmail.com +a.liya.ib.r.ahim.486@gmail.com +a.liyaibrah.im48.6@gmail.com +al.iya.i.br.a.hi.m.486@gmail.com +al.iy.a.ibrahi.m.486@gmail.com +aliya.ib.r.ahi.m.4.86@gmail.com +al.iyai.bra.h.im486@gmail.com +ali.ya.ib.r.ahi.m.48.6@gmail.com +al.i.ya.i.b.r.ah.i.m48.6@gmail.com +al.iyaibrah.i.m4.8.6@gmail.com +aliyai.b.ra.h.i.m486@gmail.com +al.iyaib.r.a.h.im.48.6@gmail.com +ali.y.a.i.brah.im48.6@gmail.com +a.l.iy.aib.r.ahi.m4.86@gmail.com +a.liyai.brah.i.m4.86@gmail.com +a.l.i.yaibr.ahi.m4.86@gmail.com +al.iya.ibr.a.h.i.m4.86@gmail.com +al.iya.ib.r.ahi.m.4.8.6@gmail.com +aliy.aib.r.a.hi.m.48.6@gmail.com +ali.yaibra.hi.m486@gmail.com +aliy.aib.r.a.hi.m.4.86@gmail.com +a.l.iyaib.r.ah.im4.86@gmail.com +a.l.iyai.bra.him.4.86@gmail.com +a.l.i.y.a.i.b.rahim486@gmail.com +al.i.yai.brahim.4.86@gmail.com +al.iy.a.ibr.a.him4.86@gmail.com +a.li.ya.ibr.a.h.i.m4.8.6@gmail.com +al.i.yaibr.ah.i.m.4.8.6@gmail.com +a.li.y.ai.br.a.him48.6@gmail.com +a.li.ya.i.b.r.ah.im4.86@gmail.com +al.i.yai.br.a.hi.m4.8.6@gmail.com +a.liyaib.ra.hi.m486@gmail.com +a.li.ya.ib.r.a.him486@gmail.com +a.l.i.ya.ibr.a.him48.6@gmail.com +a.liy.aib.r.ahim.48.6@gmail.com +aliya.ibr.a.hi.m4.8.6@gmail.com +aliyaib.r.ah.im486@gmail.com +al.i.yai.b.r.a.him4.8.6@gmail.com +a.l.iy.aib.ra.h.i.m.4.8.6@gmail.com +a.liyai.b.ra.him.4.86@gmail.com +a.l.iy.a.i.br.ahi.m.4.86@gmail.com +a.li.y.aibr.ahi.m48.6@gmail.com +ali.ya.ib.r.a.h.i.m.4.8.6@gmail.com +aliy.a.i.b.ra.h.im.4.8.6@gmail.com +a.li.ya.i.brah.i.m.486@gmail.com +a.l.i.ya.i.br.ahim.486@gmail.com +a.liy.aibr.ah.i.m.48.6@gmail.com +ali.ya.i.br.a.hi.m.4.8.6@gmail.com +al.iy.a.ibra.h.i.m.4.8.6@gmail.com +aliy.aibra.h.i.m48.6@gmail.com +ali.ya.ibr.a.him4.8.6@gmail.com +al.iy.ai.b.rah.i.m48.6@gmail.com +al.i.ya.i.b.r.a.h.i.m.48.6@gmail.com +aliya.i.brah.im.48.6@gmail.com +al.i.y.a.i.b.rahim.486@gmail.com +aliy.a.ib.ra.h.im4.8.6@gmail.com +a.l.i.ya.i.b.rahim4.8.6@gmail.com +al.i.y.ai.b.ra.h.im486@gmail.com +al.iya.i.b.ra.h.i.m.4.86@gmail.com +a.li.y.a.ibra.him.486@gmail.com +aliy.a.ib.r.ahim4.8.6@gmail.com +al.iya.i.b.r.ah.i.m4.8.6@gmail.com +aliya.i.br.ahi.m.486@gmail.com +aliyai.bra.hi.m4.86@gmail.com +a.l.iyaib.r.ah.im.4.8.6@gmail.com +ali.yai.br.ahim4.8.6@gmail.com +al.iy.a.i.br.a.him4.86@gmail.com +a.l.i.y.aibr.a.him.4.86@gmail.com +aliy.ai.b.r.a.h.im4.86@gmail.com +ali.yaibrahi.m.4.8.6@gmail.com +ali.y.a.i.brahi.m48.6@gmail.com +ali.ya.ib.r.ahi.m486@gmail.com +al.i.y.aib.r.a.h.i.m48.6@gmail.com +al.iya.ibr.ahim.48.6@gmail.com +a.l.i.y.a.ib.r.ah.im.48.6@gmail.com +a.l.iy.aibr.a.h.i.m4.86@gmail.com +aliy.ai.b.rah.im48.6@gmail.com +a.li.yaibra.hi.m.4.86@gmail.com +al.i.y.ai.brah.i.m48.6@gmail.com +a.l.i.y.a.i.b.r.ah.i.m4.86@gmail.com +a.li.y.aibr.a.h.i.m.486@gmail.com +ali.yai.b.rah.im.48.6@gmail.com +aliya.i.br.ahi.m.4.8.6@gmail.com +a.li.ya.i.b.rahi.m.4.8.6@gmail.com +a.li.y.aib.ra.hi.m486@gmail.com +al.i.yaib.ra.him.486@gmail.com +a.li.yaib.r.a.h.i.m486@gmail.com +al.i.ya.ibr.ahim.4.86@gmail.com +a.l.i.y.aib.r.ahim4.8.6@gmail.com +ali.y.aib.rah.im486@gmail.com +al.iyai.brah.im48.6@gmail.com +al.iy.a.i.b.rah.im.4.86@gmail.com +a.li.y.aibrah.i.m4.86@gmail.com +a.l.i.ya.ib.r.a.h.i.m.48.6@gmail.com +a.l.iya.ib.ra.hi.m48.6@gmail.com +a.l.iyaib.rah.i.m48.6@gmail.com +al.iy.a.ibr.a.h.im4.86@gmail.com +ali.ya.i.brahim4.86@gmail.com +a.l.iy.ai.br.a.h.im48.6@gmail.com +a.liy.aibrah.i.m4.8.6@gmail.com +a.li.y.aib.r.a.h.i.m48.6@gmail.com +a.l.i.y.ai.b.r.ah.im.48.6@gmail.com +al.iya.i.b.rahi.m.4.86@gmail.com +a.l.i.ya.ib.r.ahim.4.8.6@gmail.com +a.l.iya.ib.rah.i.m.4.8.6@gmail.com +ali.yaib.rah.im48.6@gmail.com +a.liy.aibrahi.m4.86@gmail.com +a.liya.ib.r.a.hi.m.4.8.6@gmail.com +a.li.y.a.i.br.ah.im4.86@gmail.com +a.l.i.y.a.i.b.ra.hi.m.486@gmail.com +aliya.ib.r.a.h.i.m4.86@gmail.com +a.li.y.aib.ra.h.im.48.6@gmail.com +al.i.yaib.r.a.h.im.4.8.6@gmail.com +al.iya.ibr.a.h.im4.86@gmail.com +aliy.a.i.b.rahi.m486@gmail.com +al.i.yaib.rah.i.m.48.6@gmail.com +al.i.y.ai.br.a.h.im.48.6@gmail.com +aliy.a.i.brahi.m4.8.6@gmail.com +a.l.i.y.aibra.him48.6@gmail.com +al.iy.aib.rah.i.m48.6@gmail.com +ali.ya.ib.r.a.him.48.6@gmail.com +al.iyaib.ra.him.48.6@gmail.com +a.li.y.a.ibrah.im.4.8.6@gmail.com +al.iy.ai.br.a.h.i.m.4.86@gmail.com +a.l.iy.aib.r.a.hi.m4.8.6@gmail.com +a.l.i.y.a.ibr.ahim48.6@gmail.com +a.liy.a.i.brahi.m4.8.6@gmail.com +a.l.i.yai.b.rah.im4.86@gmail.com +aliy.a.ibr.ahim.486@gmail.com +a.li.y.ai.br.a.h.i.m.4.8.6@gmail.com +a.liy.a.i.br.ah.i.m.48.6@gmail.com +a.liy.aibr.a.him4.86@gmail.com +aliyaib.ra.h.im48.6@gmail.com +aliya.i.bra.h.i.m.48.6@gmail.com +al.i.y.aibrah.i.m486@gmail.com +a.l.iy.a.ib.rah.im4.8.6@gmail.com +a.l.iya.i.bra.him.48.6@gmail.com +al.i.ya.i.brah.im486@gmail.com +a.l.iyai.b.r.a.h.i.m4.86@gmail.com +aliy.a.ibr.ahim48.6@gmail.com +a.li.yai.b.r.a.h.im.48.6@gmail.com +al.i.ya.ib.rahim.4.86@gmail.com +al.i.yai.b.r.a.him.4.8.6@gmail.com +a.liy.aib.r.ahim.4.86@gmail.com +a.li.y.a.i.br.ah.im.486@gmail.com +a.l.i.ya.ibr.ahi.m48.6@gmail.com +a.l.iy.aib.rah.i.m48.6@gmail.com +al.iyai.b.r.ah.i.m4.86@gmail.com +ali.y.ai.br.a.h.i.m.48.6@gmail.com +a.l.iy.a.i.b.r.ahi.m4.8.6@gmail.com +a.l.iya.ibr.a.h.i.m48.6@gmail.com +a.li.y.a.ibrahim486@gmail.com +a.li.y.a.ib.ra.h.im4.8.6@gmail.com +aliyai.br.a.h.i.m48.6@gmail.com +al.i.y.aibrahi.m.4.86@gmail.com +aliy.aibr.ahi.m4.8.6@gmail.com +a.liy.ai.b.r.a.him4.86@gmail.com +al.iy.ai.b.r.ah.im.48.6@gmail.com" +CRT1pVAu,⭐ get any gift card for AF,SlyHikari03,JavaScript,Friday 22nd of November 2024 10:58:03 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #DcRIBBX62H + +" +uuKd5Mwx,⭐️ EARN $500 INSTANTLY KE,menyezisplayzz,JavaScript,Friday 22nd of November 2024 10:57:20 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #FOLn3CcAOZ + +" +G2BBRC8W,⭐️ EARN $500 INSTANTLY⭐ NB,SlyHikari03,JavaScript,Friday 22nd of November 2024 10:49:40 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #gvDDxzfp4C + +" +zn8NgDUK,⭐ FREE giftcards method⭐ TO,menyezisplayzz,JavaScript,Friday 22nd of November 2024 10:48:52 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #0ghWGPLAQ3 + +" +LXYLH5Vh,⭐ FREE giftcards method ON,SlyHikari03,JavaScript,Friday 22nd of November 2024 10:41:16 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #ilGwtbdH3w + +" +HRLHg1ne,⭐ Binance Account hack 3B,menyezisplayzz,JavaScript,Friday 22nd of November 2024 10:40:28 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #G78sOo3Vno + +" +bXHzps67,Winter in Rodopi mountain,monito2207,C++,Friday 22nd of November 2024 10:32:57 AM CDT,"#include +#include +#include +#include +#include +#include +using namespace std; + + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(nullptr); + long unsigned int sum = 0; + unsigned int rows, cols, days, rott_row, rott_col, rott_per_day = 0, rott_previous = 0; + cin >> rows >> cols >> days; + vector> grid(rows+1, vector(cols+1)); + sum = rows*cols; + queue > gps; + while (cin >> rott_row >> rott_col) { + grid[rott_row][rott_col] = 1; + gps.push({ rott_row, rott_col }); + rott_per_day++; + sum--; + } + + for (unsigned int i = 0; i < days; i++) + { + rott_previous = rott_per_day; + rott_per_day = 0; + for (unsigned int j = 0; j < rott_previous; j++) + { + pair cord = gps.front(); + unsigned int x = cord.first; + unsigned int y = cord.second; + if (x - 1 > 0 && grid[x - 1][y] != 1) // Take the apple above the rotten (if there is one) + { + grid[x - 1][y] = 1; + sum--; + gps.push({ x-1, y }); + rott_per_day++; + } + if (x + 1 <= rows && grid[x + 1][y] != 1) // Take the apple under the rotten (if there is one) + { + grid[x + 1][y] = 1; + sum--; + gps.push({ x+1, y }); + rott_per_day++; + } + if (y - 1 > 0 && grid[x][y - 1] != 1) // Take the apple left the rotten (if there is one) + { + grid[x][y - 1] = 1; + sum--; + gps.push({ x, y-1 }); + rott_per_day++; + } + if (y + 1 <= cols && grid[x][y + 1] != 1) // Take the apple right the rotten (if there is one) + { + grid[x][y + 1] = 1; + sum--; + gps.push({ x, y +1}); + rott_per_day++; + } + gps.pop(); + } + + } + cout << sum; + return 0; +} " +ZgXds0gL,⭐ Binance Account hack QK,SlyHikari03,JavaScript,Friday 22nd of November 2024 10:32:51 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #6uyfUlPosm + +" +7wmhzF18,⭐ get any gift card for FREE⭐ 2I,menyezisplayzz,JavaScript,Friday 22nd of November 2024 10:32:05 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #CTELDxP3bR + +" +QLkGaR0n,⭐ get any gift card for AF,SlyHikari03,JavaScript,Friday 22nd of November 2024 10:24:29 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #nwfgtMoRDz + +" +rTQPxvgE,⭐️ EARN $500 INSTANTLY KE,menyezisplayzz,JavaScript,Friday 22nd of November 2024 10:23:42 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #TBh5Hk8y4X + +" +NeqBtgjy,Harum.Malam.2022.720p.HS.WEBRip.6CH.x265.10bit.HEVC-[MUNFAQQIHA],Munfaqqiha,C++,Friday 22nd of November 2024 10:17:37 AM CDT,"+----------------------------------------------------------------------------------+ +| Harum.Malam.2022.720p.HS.WEBRip.6CH.x265.10bit.HEVC-[MUNFAQQIHA].mkv = 775.70 MB | ++----------------------------------------------------------------------------------+ +| https://pixeldrain.com/u/7GJu7ZAT | +| https://buzzheavier.com/hx5jnzggr3du | +| https://terabox.com/s/1GoRNxwEs2kgpZmOq-xY4vg | +| https://u.pcloud.link/publink/show?code=XZdM3V5ZS6xiLJ663oQTtLYygouq7uPhBUVX | ++----------------------------------------------------------------------------------+" +Q9u9KBwS,⭐️ EARN $500 INSTANTLY⭐ NB,SlyHikari03,JavaScript,Friday 22nd of November 2024 10:16:05 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #NoQZ71HQ15 + +" +0YTwFvbS,⭐ FREE giftcards method⭐ TO,menyezisplayzz,JavaScript,Friday 22nd of November 2024 10:15:17 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #qQ4xlQEREN + +" +fph7QWvD,Untitled,KiLLerBoy_001,Lua,Friday 22nd of November 2024 10:15:08 AM CDT,"Updated on: 22-11-2024 + + +AddItem(""!Skill Point"",0xf2ad8315) +AddItem(""Advanced Glider"",0x534ba901) +AddItem(""Alchemical Base"",0x8d5e7532) +AddItem(""Alchemist Apprentice Boots"",0x5a379f89) +AddItem(""Alchemist Apprentice Chest"",0xcd1535ce) +AddItem(""Alchemist Apprentice Gloves"",0xc4e3ffcd) +AddItem(""Alchemist Apprentice Hat"",0x5db83ec3) +AddItem(""Alchemist Apprentice Trousers"",0x984a3432) +AddItem(""Alchemist Showcase"",0x715f4596) +AddItem(""Alchemy Station"",0xe067fcdc) +AddItem(""Almanach of Plants and Seedlings"",0x33cfd09a) +AddItem(""Aloe"",0x2d8e23b7) +AddItem(""Amber"",0x6f0139e1) +AddItem(""Amethist"",0x770b83eb) +AddItem(""Ammo/Arrow - Bone Arrow"",0x4a552b18) +AddItem(""Ammo/Arrow - Bronze Arrow"",0xede078cf) +AddItem(""Ammo/Arrow - Copper Arrow"",0xf12faa48) +AddItem(""Ammo/Arrow - Copper Poison Arrow"",0xae01020a) +AddItem(""Ammo/Arrow - Eternal Frost Arrow"",0x17b40657) +AddItem(""Ammo/Arrow - Exploding Arrow"",0x3decc63b) +AddItem(""Ammo/Arrow - Flare Arrow"",0xd1484f63) +AddItem(""Ammo/Arrow - Flint Arrow"",0x54c54cd4) +AddItem(""Ammo/Arrow - Fossilized Bone Arrow"",0x5b9117ea) +AddItem(""Ammo/Arrow - Iron Arrow"",0x56b0f8fe) +AddItem(""Ammo/Arrow - Obsidian Arrow"",0x817e7f72) +AddItem(""Ammo/Arrow - Poisoned Iron Arrow"",0x8d3cf68a) +AddItem(""Ammo/Arrow - Scrap Arrow"",0x6715c2dd) +AddItem(""Ammo/Arrow - Shroud Arrow"",0xe036aeb0) +AddItem(""Ammo/Arrow - Steel Arrow"",0xd42aedf2) +AddItem(""Ammo/Arrow - Stun Arrow"",0x8d55f4f2) +AddItem(""Ammo/Arrow - Wooden Arrow"",0xb03f58c9) +AddItem(""Ammo/Spell - Acid Bite"",0x1c1f749b) +AddItem(""Ammo/Spell - Chain Heal I"",0xe72d214c) +AddItem(""Ammo/Spell - Chain Heal II"",0xbfb92613) +AddItem(""Ammo/Spell - Chain Lightning"",0x3e7f92e5) +AddItem(""Ammo/Spell - Eternal Acid Bite"",0xffcdab9c) +AddItem(""Ammo/Spell - Eternal Chain Heal"",0x47b8ec3e) +AddItem(""Ammo/Spell - Eternal Fireball"",0x72022b44) +AddItem(""Ammo/Spell - Eternal Heal Channel"",0x8b4de09b) +AddItem(""Ammo/Spell - Eternal Ice Bolt"",0x52e7f0c0) +AddItem(""Ammo/Spell - Eternal Light Burst"",0x44d91d8) +AddItem(""Ammo/Spell - Fireball I"",0xe988b200) +AddItem(""Ammo/Spell - Fireball II"",0x6d4c9023) +AddItem(""Ammo/Spell - Heal Channel"",0x713cc0e6) +AddItem(""Ammo/Spell - Ice Bolt I"",0xbce7922f) +AddItem(""Ammo/Spell - Ice Bolt II"",0x5b63fa78) +AddItem(""Ammo/Spell - Light Burst"",0x2c0c36d4) +AddItem(""Ammo/Spell - Lighting Channel"",0x647c48ca) +AddItem(""Ammo/Spell - Shroud Meteor"",0xeae19975) +AddItem(""Ammonia Gland"",0x78da83c4) +AddItem(""Ammonite Imprint"",0xe7fa4cb4 ) +AddItem(""Animal Fur"",0x3aaa39a7) +AddItem(""Antiseptic"",0x26b09da6) +AddItem(""Archmage Boots"",0x74707c83) +AddItem(""Archmage Chest"",0x4d6fa9a9) +AddItem(""Archmage Gloves"",0x17ba70dc) +AddItem(""Archmage Hat"",0xb62c963f) +AddItem(""Archmage Trousers"",0x605a15de) +AddItem(""Assassin Boots"",0xefe6dea7) +AddItem(""Assassin Chest"",0xa7092849) +AddItem(""Assassin Gloves"",0x32e1cb66) +AddItem(""Assassin Hood"",0x42fb6e86) +AddItem(""Assassin Trousers"",0xcb7503b3) +AddItem(""Athanor"",0xd2c882c0) +AddItem(""Aureolin Flower"",0xf927bc27) +AddItem(""Azure Russula"",0x4dc5e916) +AddItem(""Azure Russula Seedling"",0xe113280b) +AddItem(""Balefire Brazier"",0xca5f0397) +AddItem(""Bandage"",0x5bc2b4bd) +AddItem(""Beehive Smoker"",0x6b29c011) +AddItem(""Bell Pepper"",0xf40a4e3f) +AddItem(""Bell Pepper Seedling"",0x8aecef1c) +AddItem(""Big Ammonite"",0xd5b4aab8 ) +AddItem(""Black Cauldron"",0x12913e04) +AddItem(""Black Powder"",0x6cfeac45) +AddItem(""Blue Fabric"",0x17bb2c00) +AddItem(""Boiled Eggs"",0x43be4ab4) +AddItem(""Bonemeal"",0xb1c8eec6) +AddItem(""Bones"",0x7a6407ea) +AddItem(""Broadleaf Tree Seedling"",0xb6fc5e0) +AddItem(""Bronze Axe"",0x3c55b420) +AddItem(""Bronze Bars"",0x26442eb9) +AddItem(""Bronze Block"",0x330f8ff) +AddItem(""Bronze Pickaxe"",0x8facaa63) +AddItem(""Bug Dust"",0x390d22ae) +AddItem(""Buildblock - Blue Luminescent Block"",0x0b7f9c4b) +AddItem(""Buildblock - Bone Block"",0x462350fa) +AddItem(""Buildblock - Brick Timbered Block"",0x25668ba0) +AddItem(""Buildblock - Bronze Block"",0x0330f8ff) +AddItem(""Buildblock - Castle Wall Stone Block"",0x59cabd6d) +AddItem(""Buildblock - Citywall Block"",0x749c6e1d) +AddItem(""Buildblock - Conifer Wood Block"",0x9bde0344) +AddItem(""Buildblock - Copper Block"",0x60876270) +AddItem(""Buildblock - Desert City Wall"",0xbd6da8d3) +AddItem(""Buildblock - Desert Temple Block"",0xab5d35e2) +AddItem(""Buildblock - Fancy Stone Block"",0xd8378fb2) +AddItem(""Buildblock - Fired Brick Block"",0xe10d54dc) +AddItem(""Buildblock - Granite Block"",0x31c90b50) +AddItem(""Buildblock - Half Timbered Block"",0xab2b6c51) +AddItem(""Buildblock - Highly Polished Stone Block"",0x22bd4fe5) +AddItem(""Buildblock - Hollow Halls Block"",0x79a8f854) +AddItem(""Buildblock - Limestone Block"",0x8d003fd7) +AddItem(""Buildblock - Metal Block"",0x1ce951b4) +AddItem(""Buildblock - Mixed Sandstone Block"",0xc96c88c1) +AddItem(""Buildblock - Mycelium Overgrown Block"",0x97a19022) +AddItem(""Buildblock - Palm Wood Block"",0xa867c32f) +AddItem(""Buildblock - Polished Granite Block"",0xeb78408a) +AddItem(""Buildblock - Refined Sandstone Block"",0x5cb6c9d3) +AddItem(""Buildblock - Refined Stone Block"",0x11ad3094) +AddItem(""Buildblock - Refined Wood Block"",0x50f99da9) +AddItem(""Buildblock - Regular Sandstone Block"",0x841a1bee) +AddItem(""Buildblock - Regular Stone Block"",0xc56bc6d5) +AddItem(""Buildblock - Rough Flintstone Block"",0x53c48cd0) +AddItem(""Buildblock - Rough Sandstone Block"",0x4586087) +AddItem(""Buildblock - Rough Stone Block"",0x81ae592d) +AddItem(""Buildblock - Rough Wood Block"",0x77f3eb92) +AddItem(""Buildblock - Roughly Cut Stone Block"",0xc6f2e604) +AddItem(""Buildblock - Shroud Wood Block"",0x99e546cc) +AddItem(""Buildblock - Tarred Wood Block"",0x6eabef99) +AddItem(""Buildblock - Weathered Stone Block"",0x53d37532) +AddItem(""Buildblock - Well Block"",0x127c31a5) +AddItem(""Buildblock - White Luminnescent Block"",0x89b9bb1b) +AddItem(""Chamomile"",0xcf5b015a) +AddItem(""Chamomile Seedling"",0x978b7537 ) +AddItem(""Chamomile Tea"",0x8b59aafa) +AddItem(""Charcoal"",0x162cb6d2) +AddItem(""Charcoal Kiln"",0x5e4e52e) +AddItem(""Chicken Soup"",0x672a1d1d) +AddItem(""Cleaned Bandage"",0xc1674c6e) +AddItem(""Coal Powder"",0xfc210a01) +AddItem(""Commander's Ring"",0x76ce1020) +AddItem(""Commander's Ring"",0x76ce1020) +AddItem(""Construction Hammer"",0xc6ff4677) +AddItem(""Construction Hammer"",0x766da1db) +AddItem(""Copper Axe"",0x75ef886a) +AddItem(""Copper Bar"",0xa2c835d) +AddItem(""Copper Bars"",0xa2c835d) +AddItem(""Copper Ore"",0x2b9d5b6f) +AddItem(""Copper Pickaxe"",0x9f3729b9) +AddItem(""Corn Seedling"",0xda32ee05) +AddItem(""Corncob"",0xb9e52caa) +AddItem(""Cornifer logs"",0x57f0f395) +AddItem(""Crafters - The Alchemist"",0xf72a4c04) +AddItem(""Crafters - The Bard"",0x419af480) +AddItem(""Crafters - The Blacksmith"",0x2ee18a0f) +AddItem(""Crafters - The Carpenter"",0x44836d45) +AddItem(""Crafters - The Collector"",0xe05f1fdf) +AddItem(""Crafters - The Farmer"",0x3bddd3a9) +AddItem(""Crafters - The Hunter"",0x4fe25661) +AddItem(""Critter Parts"",0xc29a4d76) +AddItem(""Crucible"",0xf517dd48) +AddItem(""Dawning Sun Hammer"",0xb45986c9) +AddItem(""Deadeye Boots"",0x149167a5) +AddItem(""Deadeye Gloves"",0xb738f874) +AddItem(""Deadeye Hood"",0xbb3e6026) +AddItem(""Deadeye Trousers"",0x795863a5) +AddItem(""Deadeye Vest"",0xcdc8698e) +AddItem(""Deerstalker Boots"",0xcfcb5a0d) +AddItem(""Deerstalker Chest"",0x393b421b) +AddItem(""Deerstalker Gloves"",0x89a1bcc4) +AddItem(""Deerstalker Hood"",0x9ef21f38) +AddItem(""Deerstalker Trousers"",0x42efdd80) +AddItem(""Dried Fur"",0xcbe0b1f9) +AddItem(""Dried Purple Berry"",0xa854fa99) +AddItem(""Drying Rack"",0xd1666847) +AddItem(""Eagle Eye Boots"",0xed5c34dd) +AddItem(""Eagle Eye Chest"",0xce2e1f89) +AddItem(""Eagle Eye Gloves"",0x3b316b84) +AddItem(""Eagle Eye Helmet"",0x16c8e798) +AddItem(""Eagle Eye Trousers"",0x88a1302d) +AddItem(""Ectoplasm Fragment"",0x9bfd9983) +AddItem(""Eggs"",0x7106e3cc) +AddItem(""Elder Boots"",0x713de2be) +AddItem(""Elder Chest"",0xe9a524dc) +AddItem(""Elder Gloves"",0x7f1bab11) +AddItem(""Elder Hat"",0x5814d36f) +AddItem(""Elder Trousers"",0xff224a43) +AddItem(""Elixir"",0x838b5002) +AddItem(""Enshrouded Oil"",0x50809ec9) +AddItem(""Ethereal Plane"",0x902430a6) +AddItem(""Evergreen Tree Seedling"",0x290a7c9f) +AddItem(""Exceptional Harp"",0x38607db5) +AddItem(""Experience Scroll"",0x4848d40d) +AddItem(""Explosive Barrel"",0xce5cd929) +AddItem(""Explosive Powder Ball"",0x88175069) +AddItem(""Explosive Powder Ball Net"",0xfc53041d) +AddItem(""Explosive Powder Grenade"",0x6042ecbc) +AddItem(""Extraordinary Glider"",0x10f14447) +AddItem(""Fabric"",0x7ede9d9f) +AddItem(""Feather"",0xe4d1113b) +AddItem(""Fell Monstrosity Head"",0x43dfb1fd) +AddItem(""Fell Sicklescythe Head"",0xccec8f00) +AddItem(""Fell Thunderbrute Head"",0xa190bb6a) +AddItem(""Fertilised Farm Soil"",0xf8153bb) +AddItem(""Fire Fly"",0x3c7e24a5) +AddItem(""Fire Wisp Summon"",0x3114e919) +AddItem(""Fired Brick"",0x4b379373) +AddItem(""Fireplace"",0xca8693ca) +AddItem(""Flame Mosiac Piece 1 (TR)"",0xf4c4bfc6) +AddItem(""Flame Mosiac Piece 2 (TC)"",0x5fc1216d ) +AddItem(""Flame Mosiac Piece 3 (TL)"",0x7faaeef7) +AddItem(""Flame Mosiac Piece 4 (BL)"",0xb004760) +AddItem(""Flame Mosiac Piece 5 (BC)"",0x45cc4aed) +AddItem(""Flame Mosiac Piece 6 (BR)"",0x4c98fa06) +AddItem(""Flame Mosiac Piece 7 (MR)"",0x8ea5dae1) +AddItem(""Flame Mosiac Piece 8 (ML)"",0x7227ed23) +AddItem(""Flame Mosiac Showcase"",0xd7e574e6) +AddItem(""Flame Shield"",0x11cf7d54) +AddItem(""Flammable Goo"",0x34ea2a1a) +AddItem(""Flask of the Fell"",0x9d1b0484) +AddItem(""Flax"",0xe863af88) +AddItem(""Flax Seedling"",0x20e3c6a) +AddItem(""Flintstone"",0x5e8e867a) +AddItem(""Flour"",0x0a1adb1c) +AddItem(""Flower Soil"",0xd6dda79f) +AddItem(""Food - Flat Bread"",0x80c0308f) +AddItem(""Food - Grilled Bird Meat"",0x78e7c62b) +AddItem(""Food - Grilled Fatty Meat"",0x01dcf34f) +AddItem(""Food - Grilled Game"",0x0102fad6) +AddItem(""Food - Grilled Lean Meat"",0x7c9f7632) +AddItem(""Food - Grilled Red Mushroom"",0x5a1c2f2f) +AddItem(""Food - Grilled Sand Digger Meat"",0x2657f258) +AddItem(""Food - Grilled Wolf Meat"",0xc9199bb0) +AddItem(""Food - Grilled Yucca Fruit"",0x2cb0194d) +AddItem(""Food - Raw Bird Meat"",0x170026bf) +AddItem(""Food - Raw Fattty Meat"",0x897e7ac8) +AddItem(""Food - Raw Game"",0x95c119cb) +AddItem(""Food - Raw Lean Meat"",0x58fbbb1c) +AddItem(""Food - Raw Sand Digger Meat"",0x570efd21) +AddItem(""Food - Raw Wolf Meat"",0xb0f45532) +AddItem(""Food - Roasted Azure Russula"",0x7655ef78) +AddItem(""Food - Roasted Corncob"",0xffedc712) +AddItem(""Forest Beet"",0xd32b42e1) +AddItem(""Forge"",0x2df036b6) +AddItem(""Fossilized Bone"",0xb8841be2) +AddItem(""Fossilized Bone Dust"",0xb72db570) +AddItem(""Fruit Bolw"",0x36acf603) +AddItem(""Fur Boots"",0x2efa3d10) +AddItem(""Fur Chest"",0x45458b76) +AddItem(""Fur Gloves"",0xf892a8bc) +AddItem(""Fur Hood"",0x69b3cab9) +AddItem(""Fur Patch"",0x27667708) +AddItem(""Fur Trousers"",0x407be3bb) +AddItem(""Gemini Ring"",0x499a6088) +AddItem(""Gentian Seedling"",0x3951b134) +AddItem(""Ghost Glider"",0xc81fa83c) +AddItem(""Ghostly Shield"",0x8af746dd) +AddItem(""Glass"",0x85e3f499) +AddItem(""Glass Shards"",0x9d683f7f) +AddItem(""Glider"",0x3d4a78dd) +AddItem(""Gloom Monarch Boots"",0x79cf3b09) +AddItem(""Gloom Monarch Chestplate"",0x184d0dff) +AddItem(""Gloom Monarch Gloves"",0xfc664e80) +AddItem(""Gloom Monarch Helmet"",0x421f09a4) +AddItem(""Gloom Monarch Trousers"",0x2eb8568) +AddItem(""Glow Dust"",0x6d15e5c6) +AddItem(""Glow Soup"",0x223c0c0d) +AddItem(""Goo"",0xcae4db22) +AddItem(""Grapple Plant"",0x7b1c9ff6) +AddItem(""Grappling Hook"",0x55bf8eb8) +AddItem(""Grappling Hook Pull Anchor"",0xdc5e1245) +AddItem(""Grappling Hook Swing Ancho"",0x3b6b988f) +AddItem(""Greater Antidote"",0x97b46474) +AddItem(""Greater Health Potion"",0xb8f2de47) +AddItem(""Greater Mana Potion"",0x7c516c66) +AddItem(""Greater Shroud Survival Flask"",0xc7cae5c) +AddItem(""Green Fabric"",0x885e307a) +AddItem(""Grinding Stones"",0xfcf23fbe) +AddItem(""Guard of the North Boots"",0x490631e2) +AddItem(""Guard of the North ChestPlate"",0xc2b599ae) +AddItem(""Guard of the North Gloves"",0xb389368e) +AddItem(""Guard of the North Helmet"",0x83e4b1a0) +AddItem(""Guard of the North Trousers"",0x4fd68da5) +AddItem(""Hair Splitter"",0x45fa1c87) +AddItem(""Hallow's Eve Pumpkin"",0x494bd7f2) +AddItem(""Hand Spindle"",0x5f0c3af2) +AddItem(""Hardened Leather"",0x6871e534) +AddItem(""Hardwood"",0x693dc809) +AddItem(""Hawk Boots"",0xa2c835d) +AddItem(""Hawk Chest"",0xf2105396) +AddItem(""Hawk Gloves"",0x6d2db490) +AddItem(""Hawk Helmet"",0xdb3f96c4) +AddItem(""Hawk Trousers"",0x74d35075) +AddItem(""Hazelnut"",0xc84ecf0a) +AddItem(""Health Potion"",0xccd46f7a) +AddItem(""Hero's Shield"",0x262764a) +AddItem(""Honey"",0xd89ee9b) +AddItem(""Honey Beehive"",0xa6700b01) +AddItem(""Huge Chest"",0xa8ef01ce) +AddItem(""Huge Magic Chest"",0xf7d5170c) +AddItem(""Hunter Boots"",0x9a51988) +AddItem(""Hunter Gloves"",0x16d52ebb) +AddItem(""Hunter Hood"",0x3a470fea) +AddItem(""Hunter Trousers"",0x49ace713) +AddItem(""Hunter Vest"",0x867566d8) +AddItem(""Ice Blade"",0xffbab9de) +AddItem(""Improved Bandage"",0x8e6397df) +AddItem(""Improved Grappling Hook"",0x6aa6a1d4) +AddItem(""Improved Water Well"",0x44e3709b) +AddItem(""Indigo Plant"",0xfee6a7a9) +AddItem(""Indigo Seedling"",0x5b6024db) +AddItem(""Iron Axe"",0xf63f03e5) +AddItem(""Iron Bars"",0x97be3ae) +AddItem(""Iron Bars"",0x97be3ae) +AddItem(""Iron Block"",0x107eca7c) +AddItem(""Iron Ore"",0x1b29335d) +AddItem(""Iron Pickaxe"",0x50320935) +AddItem(""Kettle"",0xfb740875) +AddItem(""Key To The Pike"",0xe3076566) +AddItem(""Kiln"",0x14977d3) +AddItem(""Kindlewastes Flower"",0x3d132b37) +AddItem(""Laboratory"",0x68555285) +AddItem(""Lapislazuli"",0xb57ce1c6) +AddItem(""Large Backpack"",0xbaa1776a) +AddItem(""Large Chest"",0xfaa0e9f1) +AddItem(""Large Magic Chest"",0xdb6ac612) +AddItem(""Leather"",0xf67a812e) +AddItem(""Linen"",0x6c352cb4) +AddItem(""Lockpick"",0xacb994b8) +AddItem(""Loom"",0x2e355f3) +AddItem(""Lumb of Clay"",0x72bd4309) +AddItem(""Luminescent Block"",0xb7f9c4b) +AddItem(""Luminous Growth"",0xbbed8b2d) +AddItem(""Mana Potion"",0x4f64485) +AddItem(""Marksman Boots"",0x462fd8c4) +AddItem(""Marksman Gloves"",0xf250b200) +AddItem(""Marksman Hood"",0x6233c43b) +AddItem(""Marksman Trousors"",0xa97fda22) +AddItem(""Marksman Vest"",0x47efd3ff) +AddItem(""Masonry Tools"",0x77ce9b68) +AddItem(""Mauvine"",0xf5cd7308 ) +AddItem(""Meat Wrap"",0xdf31ed48) +AddItem(""Medium Backpack"",0xf19bc16c) +AddItem(""Medium Chest"",0xd919ac26 ) +AddItem(""Medium Chest"",0xd919ac26) +AddItem(""Medium Magic Chest"",0x92d92d5f ) +AddItem(""Medium Magic Chest"",0x92d92d5f) +AddItem(""Mercenary Boots"",0x1ff43f21) +AddItem(""Mercenary Chest"",0xe285921c) +AddItem(""Mercenary Gloves"",0x8349eae5) +AddItem(""Mercenary Helmet"",0xc20a2f3c) +AddItem(""Mercenary Trousers"",0x7949bb1b) +AddItem(""Metal Scraps"",0x7e67b5b) +AddItem(""Metal Sheets"",0xfe9ff6a2) +AddItem(""Mint Mushroom Meat"",0x5664746) +AddItem(""Mint Mushroom Meat"",0x5664746) +AddItem(""Mortar"",0xa5909476) +AddItem(""Mother's Eye"",0x8fed8d38) +AddItem(""Mushroom Omelet"",0x8cf3a59c) +AddItem(""Mycelium"",0xd127476b) +AddItem(""Nails"",0xa3872f64) +AddItem(""Nettle Seedling"",0x8901e9d5) +AddItem(""Nitrate"",0x838a4980) +AddItem(""Obsidian"",0xc944e0e9) +AddItem(""Obsidian Dust"",0x49f535d0) +AddItem(""Old Books"",0x9b99eafe) +AddItem(""Open Sandwich"",0x2f1c7474) +AddItem(""Oven"",0xca8693ca) +AddItem(""Padding"",0x65ff9103) +AddItem(""Palm Wood Logs"",0xb025483c) +AddItem(""Paper"",0x111b8fb0) +AddItem(""Pet: Tyger"",0xf86045be) +AddItem(""Pickaxe"",0x2525bb44) +AddItem(""Pikemead's Bulwark"",0x6cf61d2e) +AddItem(""Plant Fiber"",0xc5a97b68) +AddItem(""Pocket Heater"",0x9a202c28) +AddItem(""Poison Sack"",0x599f74ae) +AddItem(""Popcorn"",0x8e00a463) +AddItem(""Prayer of the Flame Scroll"",0x7ab33fcf) +AddItem(""Pumpkin"",0xfc6438af) +AddItem(""Purple Berries"",0xdcf8790d) +AddItem(""Radiant Paladin Chestplate"",0xe5beeb7c) +AddItem(""Radiant Paladin Boots"",0xe4f365e8) +AddItem(""Radiant Paladin Gloves"",0x1c3559ec) +AddItem(""Radiant Paladin Helmet"",0x461e3dad) +AddItem(""Radiant Paladin Trousers"",0x8640f9cf) +AddItem(""Ragged Shirt"",0x6bab5640) +AddItem(""Raw Wool"",0x75fe69b5) +AddItem(""Red Fabric"",0xec0a4c32) +AddItem(""Red Marble Fragment"",0x96d5e919) +AddItem(""Red Mushroom"",0x23d06ec5) +AddItem(""Reptile Hide"",0xa99c63f8) +AddItem(""Reptile Leather"",0x1163c9ce) +AddItem(""Resin"",0xf4f57bb1) +AddItem(""Resin Torch"",0x1fabd22f) +AddItem(""Revitalizing Health Potion"",0xdcb1dded) +AddItem(""Ring of Endless Life"",0x9ef25a09) +AddItem(""Ring of Health I"",0x3993797a) +AddItem(""Ring of Health II"",0xf29b7aa9) +AddItem(""Ring of Health III"",0x195fb4f0) +AddItem(""Ring of Health IV"",0x7822499d) +AddItem(""Ring of Mana I"",0xad916cf8) +AddItem(""Ring of Mana II"",0xe821068) +AddItem(""Ring of Rapacity"",0x47748781) +AddItem(""Ring of Stamina I"",0x33182243) +AddItem(""Ring of Stamina II"",0xa044cd03) +AddItem(""Ring of the Ancients"",0x3c71bf20) +AddItem(""Ring of the Burning Light"",0x79442800) +AddItem(""Ring of the Flame"",0xfed85bec) +AddItem(""Ripped Alchemist's Wall Hanging (L)"",0x8cfa0e25) +AddItem(""Ripped Alchemist's Wall Hanging (R)"",0x51c91c62) +AddItem(""Rising Fighter Shield"",0x98fe56a5) +AddItem(""Rogue Boots"",0xd7cfb854) +AddItem(""Rogue Chestplate"",0x63e9794b) +AddItem(""Rogue Gloves"",0x2a1e4866) +AddItem(""Rogue Helmet"",0x66ba50e) +AddItem(""Rogue Trousers"",0x6bdfaae9) +AddItem(""Roof - Granite Shingle Roof Block"",0xbb93d200) +AddItem(""Roof - Plant Fiber Roof Block"",0xf303e04f) +AddItem(""Roof - Roof Tiles Block"",0x0bbb57fb) +AddItem(""Roof - Stone Shingle Roof Block"",0x654a9afa) +AddItem(""Roof - Straw Roof Block"",0x20da5e12) +AddItem(""Roof - Tarred Shingle Roof Block"",0xd0cb20e6) +AddItem(""Roof - Tarred Straw Block"",0xca09edca) +AddItem(""Rooibos"",0x61119bee) +AddItem(""Rooibos Seedling"",0xe0610514) +AddItem(""Rooibos Tea"",0xb1cce55b ) +AddItem(""Rubble"",0x4af862a6) +AddItem(""Runes"",0x41a792dc) +AddItem(""Saffron"",0xdc4f0fed) +AddItem(""Sage Boots"",0xd7873edc) +AddItem(""Sage Gloves"",0x6ac0f96b) +AddItem(""Sage Headwrap"",0xcef54170) +AddItem(""Sage Leaves"",0xd4577120) +AddItem(""Sage Pants"",0xbdc46498) +AddItem(""Sage Seedling"",0xef8839e2) +AddItem(""Sage Tunic"",0x740e2f5b) +AddItem(""Salt"",0x5d3ef433) +AddItem(""Scales"",0xf321a3a6) +AddItem(""Scare Crow"",0xaf23a770) +AddItem(""Scavemger Matron Head"",0xd50cc32c) +AddItem(""Scientific Instruments"",0x356376c4) +AddItem(""Scrappy Axe"",0xa78e2d44) +AddItem(""Scrappy Pickaxe"",0xf4bf035) +AddItem(""Scrappy Rake"",0x81bb769f) +AddItem(""Seedbed"",0xab204788) +AddItem(""Sharpshooter Boots"",0x5b9b6120) +AddItem(""Sharpshooter Gloves"",0x4416cce) +AddItem(""Sharpshooter Hood"",0xaa96c026) +AddItem(""Sharpshooter Trousers"",0x634f0b88) +AddItem(""Sharpshooter Vest"",0x115db875) +AddItem(""Shield"",0x29335b11) +AddItem(""Shield of Light"",0x9a07ae22) +AddItem(""Shroud Core"",0x5b1c6f3a) +AddItem(""Shroud Liquid"",0x334c64a4) +AddItem(""Shroud Meteor Shower"",0x79e249c) +AddItem(""Shroud Sack"",0x6701c6e0) +AddItem(""Shroud Spores"",0x98946174) +AddItem(""Shroud Survival Flask"",0x6a466200) +AddItem(""Shroud Wood"",0x4ebb5403) +AddItem(""Shrub Seedling"",0xf13e32e2) +AddItem(""Sigil Ring of the Elder Guard"",0xc8cc5263) +AddItem(""Silver Ore"",0xc017a732) +AddItem(""Small Backpack"",0xfc3d5c4c) +AddItem(""Small Chest"",0xcc076a8) +AddItem(""Small Magic Chest"",0xf1147751) +AddItem(""Smelter"",0x8c2accb) +AddItem(""Smithing Tools"",0x26051d2d) +AddItem(""Soldier Boots"",0x24f5302d) +AddItem(""Soldier Chestplate"",0x5d6694ee) +AddItem(""Soldier Gloves"",0x58228a4c) +AddItem(""Soldier Helmet"",0xb84763e1) +AddItem(""Soldier Trousers"",0xb71e5e65) +AddItem(""Spark"",0x5b9329b8) +AddItem(""Spellbinder Pants"",0xd1fe6984) +AddItem(""Spellbinder Boots"",0xbcc8bee1) +AddItem(""Spellbinder Chest"",0xd45d5004) +AddItem(""Spellbinder Gloves"",0x5cf665f9) +AddItem(""Spellbinder Hat"",0xafcb850d) +AddItem(""Spice"",0x431eb948) +AddItem(""Spiced Tea"",0x4b50d6aa) +AddItem(""Spinning Wheel"",0x2af2bac2) +AddItem(""Steel Bars"",0xbc1d395a) +AddItem(""Stinging Nettle"",0x888c46fd) +AddItem(""Stir-Fried Vegetables"",0x41ebb2d4) +AddItem(""Stone"",0x25a43c2f) +AddItem(""Straw"",0xe9ba3050) +AddItem(""Strawberry"",0xcf65ebd7) +AddItem(""String"",0x18feb214) +AddItem(""Sugar"",0x6b58413a) +AddItem(""Sugar Cane"",0x9270781a) +AddItem(""Sugar Cane Seedling"",0x214abc0) +AddItem(""Sulfur"",0xa811bd6e) +AddItem(""Summoning Staff"",0x46783e00) +AddItem(""Superior Health Potion"",0x8f5b4ba7) +AddItem(""Table Saw"",0xfd32f816) +AddItem(""Tanning Station"",0xacf37e75) +AddItem(""Tar"",0x66332507) +AddItem(""Terrain/Ground - Dirt"",0x5cdef690) +AddItem(""Terrain/Ground - Farm Soil"",0x6cb3103a) +AddItem(""Terrain/Ground - Granite"",0xe66e1ce9) +AddItem(""Terrain/Ground - Ice"",0xfa53db5d) +AddItem(""Terrain/Ground - Limestone"",0xcd603dcd) +AddItem(""Terrain/Ground - Sand"",0x94a506e7) +AddItem(""Terrain/Ground - Sandstone"",0x538b2f00) +AddItem(""Terrain/Ground - Snow"",0x9780dea7) +AddItem(""Terrain/Path - Dirt Road Block"",0x1aaf5161) +AddItem(""Terrain/Path - Rough Stone Road Block"",0xeac0f57a) +AddItem(""Terrain/Path - Smooth Stone Road Block"",0x1348363c) +AddItem(""Threadbare Pants"",0xecc1c60c) +AddItem(""Tin Bars"",0x3fed66ec) +AddItem(""Tin Ore"",0xdf7d7424) +AddItem(""Tiny Chest"",0x2f09172) +AddItem(""Tomato"",0x3dc85885) +AddItem(""Tomato Seedling"",0x55c4687e) +AddItem(""Torch"",0xcf128197) +AddItem(""Torn Cloth"",0x592f94df) +AddItem(""Transcendental Screen"",0xa8273d74) +AddItem(""Trilobites"",0x6766cae6 ) +AddItem(""Twigs"",0x6b356a28) +AddItem(""Valiant Shield"",0x80bb0b51) +AddItem(""Vegetable Puree"",0xa6807b30) +AddItem(""Vegetable Soup"",0xb5ca45f6) +AddItem(""Violet Fabric"",0xd1ef11eb) +AddItem(""Vukah Brawler Head"",0x8b6b5aff) +AddItem(""Warden Boots"",0x3f1735fc) +AddItem(""Warden Chestplate"",0x180e1bce) +AddItem(""Warden Gloves"",0x6d9c27f6) +AddItem(""Warden Helmet"",0xab177147) +AddItem(""Warden Trousers"",0xe5dbb801) +AddItem(""Warlock Boots"",0xd1b636f) +AddItem(""Warlock Gloves"",0xd973441f) +AddItem(""Warlock Helmet"",0x4718b318) +AddItem(""Warlock Pants"",0x5d30576d) +AddItem(""Warlock Shirt"",0x4f588182) +AddItem(""Warm Padding"",0x229744c2) +AddItem(""Water"",0xf262a2a9) +AddItem(""Water Well"",0x7f5802d9) +AddItem(""Wax"",0x5682c2ab) +AddItem(""Wax Torch"",0xe9430638) +AddItem(""Weapon/Axe's - Acid Cleaver"",0x032d9171) +AddItem(""Weapon/Axe's - Axe"",0x1da5f1f1) +AddItem(""Weapon/Axe's - Deeproot Axe"",0x73adb5cf) +AddItem(""Weapon/Axe's - Executioner's Axe"",0xc4f3ef68) +AddItem(""Weapon/Axe's - Guillotine"",0xcfd07ae4) +AddItem(""Weapon/Axe's - Hatchet"",0x413bf00f) +AddItem(""Weapon/Axe's - Lightforged Axe"",0x90aa51c2) +AddItem(""Weapon/Axe's - Lumenshade Axe"",0x7f00f657) +AddItem(""Weapon/Axe's - Meat Chopper"",0xa8cf4d1d) +AddItem(""Weapon/Axe's - Tainted Axe"",0xbf092a48) +AddItem(""Weapon/Axe's - Wolf Pack Axe"",0xf2ee3563) +AddItem(""Weapon/Axe's - Wolf's Claw"",0xe10d50ce) +AddItem(""Weapon/Bows - Arsonist's Bow"",0x384c37fd) +AddItem(""Weapon/Bows - Banebringer"",0x88dccf6f) +AddItem(""Weapon/Bows - Bow"",0xd2479ec1) +AddItem(""Weapon/Bows - Composite Bow"",0x85601037) +AddItem(""Weapon/Bows - Forest Longbow"",0x13800730) +AddItem(""Weapon/Bows - Forsaken"",0x1b3f153d) +AddItem(""Weapon/Bows - Horned Beast Bow"",0xab8d8d35) +AddItem(""Weapon/Bows - Ignited Bow"",0x56dcc06d) +AddItem(""Weapon/Bows - Ornate Wood Bow"",0x1c6b8fff) +AddItem(""Weapon/Bows - Shadowbane"",0xfa85a3e3) +AddItem(""Weapon/Bows - Snowflake Splicer"",0x25c3d403) +AddItem(""Weapon/Bows - Spiked Bow"",0x94778b82) +AddItem(""Weapon/Bows - Wildwood Shortbow"",0x85a58fee) +AddItem(""Weapon/Bows - Wolf's Snarl Longbow"",0x29433573) +AddItem(""Weapon/Bows - Fell Commander's Bow"",0x9ecd0c33 ) +AddItem(""Weapon/Clubs - Club"",0x3a67584f) +AddItem(""Weapon/Clubs - Club of Defiance"",0x7dc2a3db) +AddItem(""Weapon/Clubs - Fearsome Club"",0xd2ad15d7) +AddItem(""Weapon/Clubs - Feathered Mace"",0x57e67982) +AddItem(""Weapon/Clubs - Fleshgrinder"",0x406be4c6) +AddItem(""Weapon/Clubs - Gorestriker"",0x2df95952) +AddItem(""Weapon/Clubs - Ignited Hammer"",0xc732f017) +AddItem(""Weapon/Clubs - Mace of Denial"",0xc47c1f62) +AddItem(""Weapon/Clubs - Mace-like Club"",0x8828c46b) +AddItem(""Weapon/Clubs - Metalstar Mace"",0xf4ff735a) +AddItem(""Weapon/Clubs - Misfortune Mace"",0xc85c609) +AddItem(""Weapon/Clubs - Misfortune Mace"",0xc85c609) +AddItem(""Weapon/Clubs - Rotblood"",0xd1ec44f8) +AddItem(""Weapon/Clubs - Spiked Club"",0x765e1c9d) +AddItem(""Weapon/Clubs - Sun Hammer"",0xeaa67e40) +AddItem(""Weapon/Clubs - Twin Soul Mace"",0x63e7142c) +AddItem(""Weapon/Clubs - Wolf's Hydra"",0x20754f9e ) +AddItem(""Weapon/Daggers - Baroness Daggers"",0x3c1646b6) +AddItem(""Weapon/Daggers - Falk Fall Daggers"",0x044d25c2) +AddItem(""Weapon/Daggers - Sleek Daggers"",0x176b175c) +AddItem(""Weapon/Daggers - Valor Heart Daggers"",0xa0fc0934) +AddItem(""Weapon/Staves - Blackened Staff"",0xb834f7f6) +AddItem(""Weapon/Staves - Clearwater Staff"",0xcebea0b5) +AddItem(""Weapon/Staves - Elder's Staff"",0xda05e03a) +AddItem(""Weapon/Staves - Hopeful Glimmer"",0x42104d68) +AddItem(""Weapon/Staves - Mirage"",0x76bc31be ) +AddItem(""Weapon/Staves - Root Staff"",0x95e85c0c) +AddItem(""Weapon/Staves - Shepherd's Lightning"",0xc8f9131d) +AddItem(""Weapon/Staves - Shepherd's Staff"",0x44fad060) +AddItem(""Weapon/Staves - Shroud Weaver"",0xbe4dd183) +AddItem(""Weapon/Staves - Spiritual Cane"",0xd2c882c0) +AddItem(""Weapon/Staves - Staff"",0x482345a2) +AddItem(""Weapon/Staves - Staff of the Ram"",0x1eb7015d) +AddItem(""Weapon/Staves - Undergrowth Staff"",0x4ad17068) +AddItem(""Weapon/Swords - White Wolf Sword"",0xc10e0e09) +AddItem(""Weapon/Swords - Bronze Sword"",0x43108313) +AddItem(""Weapon/Swords - Enflamed Sword"",0x1ee67060) +AddItem(""Weapon/Swords - Extinguished Sword"",0xd0c477d9) +AddItem(""Weapon/Swords - Hailscourge"",0x214bd402) +AddItem(""Weapon/Swords - Major Arcana"",0xd6cbe9a) +AddItem(""Weapon/Swords - Noble Sword"",0xcbb09c0) +AddItem(""Weapon/Swords - Nova"",0xcafbc2bf) +AddItem(""Weapon/Swords - Rune Master's Sword"",0x39f222da) +AddItem(""Weapon/Swords - Rusty Short Sword"",0x466db1e9) +AddItem(""Weapon/Swords - Scrappy Sword"",0x4c0d3e02) +AddItem(""Weapon/Swords - Stonewrought Sword"",0xf6bb631e) +AddItem(""Weapon/Swords - Sunbeam"",0x9efc077f) +AddItem(""Weapon/Swords - Sword of Radiance"",0xd295e211) +AddItem(""Weapon/Swords - Wailing Blade"",0x7265dc3c) +AddItem(""Weapon/Wands - Blazing Wand"",0x9675b7f1) +AddItem(""Weapon/Wands - Crackling Wand"",0x64f5c6e5) +AddItem(""Weapon/Wands - Cryptic Wand"",0xdee62afb) +AddItem(""Weapon/Wands - Frost Wand"",0xdf9377d2) +AddItem(""Weapon/Wands - Frozen Core Wand"",0xcbccb69e) +AddItem(""Weapon/Wands - Helix"",0x8964e067) +AddItem(""Weapon/Wands - Luminous Wand"",0x6ad4933c) +AddItem(""Weapon/Wands - Mythic wand"",0x98c37576) +AddItem(""Weapon/Wands - Ritual Tempest Wand"",0xf4a77a8f) +AddItem(""Weapon/Wands - Scorching Wand"",0xe589d7a4) +AddItem(""Weapon/Wands - Shocking Ice Wand"",0xf8a24363) +AddItem(""Weapon/Wands - Silver Storm"",0xf5a0652d) +AddItem(""Weapon/Wands - Twisting Wand"",0x9915e663 ) +AddItem(""Weapon/Wands - Wand"",0xdf6897ff) +AddItem(""Wheat Grains"",0x91256dd9) +AddItem(""Wheat Seedling"",0x6bfc3047) +AddItem(""White Glowing Substance"",0xec2efacc) +AddItem(""Wisp of Light"",0x857a3d9e) +AddItem(""Wood Acid"",0x6177b424) +AddItem(""Wood Logs"",0x2b0cf1d5) +AddItem(""Wood Planks"",0x60ef3ad1) +AddItem(""Wool"",0xa91eefa9) +AddItem(""Workbench"",0x771b4c5d) +AddItem(""Yellow Fabric"",0xccd6cdee) +AddItem(""Yucca Fruit"",0x77b6f21b)" +Vzmbfrw6,Event01Script(Local Script),Anukun_Lucifer,Lua,Friday 22nd of November 2024 10:15:03 AM CDT,"local RS = game:GetService(""ReplicatedStorage"") +local Players = game:GetService(""Players"") + +local player = Players.LocalPlayer +local HorrorSoundPart = workspace:WaitForChild(""HorrorSoundPart"") +local EventSoundPart = HorrorSoundPart:WaitForChild(""EventSoundPart"") +local Sound = HorrorSoundPart:WaitForChild(""SoundDoor1""):WaitForChild(""Piano Keys Impact 7 (SFX)"") + +local ModelRe = RS:WaitForChild(""ModelRe"") +local Mali = ModelRe:WaitForChild(""Mali"") + +local Check = false + +EventSoundPart.Touched:Connect(function(touchPart) + if Check == false then + Check = true + local character = touchPart.Parent + local player = Players:GetPlayerFromCharacter(character) + local hmn = character:FindFirstChild(""Humanoid"") + + Sound:Play() + EventSoundPart:Destroy() + local MaliClone = Mali:Clone() + + MaliClone.Parent = workspace + task.wait(3) + + workspace:FindFirstChild(""Mali""):Destroy() + script:Destroy() + end + +end)" +ckQDbsBt,⭐ Binance Account hack QK,SynoOwner,JavaScript,Friday 22nd of November 2024 10:07:30 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #22QjqCAqlQ + +" +7urLSMtU,⭐ Binance Account hack 3B,DEBINHA2019,JavaScript,Friday 22nd of November 2024 10:06:54 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #HsE0UddDVG + +" +8GqXZpxJ,⭐ get any gift card for AF,SynoOwner,JavaScript,Friday 22nd of November 2024 09:59:02 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #epP6PRUKd9 + +" +gj2pratS,⭐ get any gift card for FREE⭐ 2I,DEBINHA2019,JavaScript,Friday 22nd of November 2024 09:58:30 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #5ktGT5SIrI + +" +5PPfVWxN,Minecraft ComputerCraft Modem Composter v2.0 Above and Beyond,hornedcommando,Lua,Friday 22nd of November 2024 09:52:29 AM CDT,"--- +---Desc: A Composter program which automatically searches Occultism storage +---and moves compostable items to a destination hopper for composting. +---Extracts bonemeal output back into Occultism storage. +---Does not run if bonemeal count > fir_sapling (limiter helps balance inventory). +---This is an upgrade from the first iteration because it interacts with the higher tier Occultism storage +---Review IMPORTANT comments, these are configurables that will likely change based on your setup. +--- + +--By: hornedcommando + +-- Define peripherals +local compostHopper = peripheral.wrap(""minecraft:hopper_4"") -- IMPORTANT: Change this to the hopper on top of the composter +local outputHopper = peripheral.wrap(""minecraft:hopper_5"") -- IMPORTANT: Change this to the hopper where bonemeal is output +local occultism = peripheral.wrap(""occultism:storage_controller_3"") -- Occultism storage controller + +-- Check if peripherals are wrapped correctly +if not compostHopper then + error(""Compost hopper peripheral not found!"") +end + +if not outputHopper then + error(""Output hopper peripheral not found!"") +end + +if not occultism then + error(""Occultism storage controller peripheral not found!"") +end + +-- List of specific items to find +local specificItems = { + [""minecraft:wheat_seeds""] = true, + [""minecraft:beetroot_seeds""] = true, + [""farmersdelight:cabbage_seeds""] = true, + [""supplementaries:flax_seed""] = true, + [""minecraft:tomato_seeds""] = true, + [""biomesoplenty:fir_sapling""] = true +} + +-- Function to count specific items in the Occultism storage +local function countItems(storage, itemName) + local count = 0 + for slot, item in pairs(storage.list()) do + if item.name == itemName then + count = count + item.count + end + end + return count +end + +-- Function to push items from Occultism storage to the composter hopper +local function pushItemsFromStorage(storage) + local boneMealCount = countItems(storage, ""minecraft:bone_meal"") -- IMPORTANT: Change this to adjust the limiter for different farms + local firSaplingCount = countItems(storage, ""biomesoplenty:fir_sapling"") -- IMPORTANT: Change this to the ingredient you get the most of for the specific farm + + if boneMealCount > firSaplingCount then + print(""More bone meal than fir saplings. Skipping composting for 10 seconds."") + return true -- Skip composting + end + + for slot, item in pairs(storage.list()) do + if specificItems[item.name] then + local success = storage.pushItems(peripheral.getName(compostHopper), slot, item.count) + if success == 0 then + print(""Failed to push item: "" .. item.name) + return false -- Failed push, continue checking other items + else + print(""Pushed "" .. item.count .. "" of "" .. item.name .. "" to composter hopper."") + end + end + end + return true -- Successfully processed all items in the storage +end + +-- Function to move bonemeal from the output hopper to the Occultism storage +local function moveBoneMealToStorage(storage) + local outputItems = outputHopper.list() + for slot, item in pairs(outputItems) do + if item.name == ""minecraft:bone_meal"" then + local success = outputHopper.pushItems(peripheral.getName(storage), slot, item.count) + if success == 0 then + print(""Cannot push bonemeal to storage! Check storage capacity."") + return false -- Failed push, continue checking other items + else + print(""Moved "" .. item.count .. "" of bonemeal to storage."") + end + end + end + return true -- Successfully processed all bonemeal items +end + +-- Main loop function +local function main() + while true do + local success = pushItemsFromStorage(occultism) + + os.sleep(30) -- Wait 30 seconds to allow composting to finish + moveBoneMealToStorage(occultism) + end +end + +-- Start the main function +main()" +vJ4wjrpB,⭐️ EARN $500 INSTANTLY⭐ NB,SynoOwner,JavaScript,Friday 22nd of November 2024 09:50:38 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #h3CJkOyU2p + +" +GESQuwCV,⭐️ EARN $500 INSTANTLY KE,DEBINHA2019,JavaScript,Friday 22nd of November 2024 09:50:06 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #808GTLiAWN + +" +nXmV5HTu,SGD v008a1 test js FILTER only,plirof2,JavaScript,Friday 22nd of November 2024 09:45:10 AM CDT,"document.addEventListener('DOMContentLoaded', () => { + const gameItems = document.querySelectorAll('.game-item'); + const form = document.getElementById('game-form'); + const fields = ; + const gameImage = document.getElementById('game-screenshot'); + const gameImageContainer = document.getElementById('game-image'); + const filterInput = document.getElementById('filter-input'); + const filterSelect = document.getElementById('filter-select'); + const toggleRightPanelButton = document.getElementById('toggle-right-panel'); + const rightPanel = document.getElementById('right-panel'); + const games = ; // Make games available to JavaScript + + // Attach click handlers to game items + gameItems.forEach(item => { + item.addEventListener('click', () => { + // Remove active class from all items + document.querySelectorAll('.game-item').forEach(i => i.classList.remove('active')); + item.classList.add('active'); + + // Load game data into form + const gameData = JSON.parse(item.dataset.game); + fields.forEach(field => { + const input = form.querySelector(`[name=""${field}""]`); + if (input) input.value = gameData[field]; + }); + form.querySelector('[name=""lineIndex""]').value = item.dataset.index; // Store the index for the form submission + + // Load and display the game image + const pcName = gameData['PC-Name']; // Get the PC-Name from the game data + const imagePath = `SCRSHOT/${pcName}.gif`; // Create the image path + + // Set the image source + gameImage.src = imagePath; + + // Check if the image exists, then display it + const img = new Image(); + img.onload = () => { + gameImage.style.display = 'block'; // Show the image if it loads + gameImage.src = imagePath; // Set the image source + }; + img.onerror = () => { + gameImage.style.display = 'none'; // Hide image if it doesn't exist + }; + img.src = imagePath; // Trigger the image load + updateGameDirectoryDisplay();//console.log(""updateGameDirectoryDisplay();""); + }); + }); + + // Handle form submission + form.addEventListener('submit', (e) => { + e.preventDefault(); + const formData = new FormData(form); + + fetch('', { + method: 'POST', + body: formData + }) + .then(response => response.json()) + .then(data => { + if (data.status === 'success') { + // Update the left panel with the updated game + const updatedGame = data.updatedGame; + const lineIndex = data.lineIndex; + const updatedGameItem = document.querySelector(`.game-item[data-index=""${lineIndex}""]`); + if (updatedGameItem) { + updatedGameItem.dataset.game = JSON.stringify(updatedGame); + updatedGameItem.querySelector('strong').textContent = updatedGame.Name; + } + + alert('Game updated successfully!'); + } + }); + }); + + // Filter game list + filterInput.addEventListener('input', filterGames); + filterSelect.addEventListener('change', filterGames); + +function filterGames() { + const filterValue = filterInput.value.toLowerCase(); + const filterField = filterSelect.value; + + const filteredGames = games.filter(game => { + if (filterField === 'Name') { + return game.Name.toLowerCase().includes(filterValue); + } else if (filterField === 'Type') { + return game.Type.toLowerCase().includes(filterValue); + } else if (filterField === 'Year') { + return game.Year.includes(filterValue); + } else if (filterField === 'FirstLetter') { + return game.Name.toLowerCase().startsWith(filterValue); + } else { + return true; // Show all games if no filter is selected + } + }); + + // Update the game list in the left panel + const gameList = document.getElementById('game-list'); + gameList.innerHTML = ''; + + filteredGames.forEach((game, index) => { + const gameItem = document.createElement('tr'); + gameItem.classList.add('game-item'); + gameItem.dataset.game = JSON.stringify(game); + gameItem.dataset.index = index; + gameItem.innerHTML = ` + ${game.Name} + ${game.Type} + ${game.Year} + ${game['PC-Name']} + ${game.Author} + `; + gameList.appendChild(gameItem); + + // Attach click handler to the newly created item + gameItem.addEventListener('click', () => { + // Remove active class from all items + document.querySelectorAll('.game-item').forEach(i => i.classList.remove('active')); + gameItem.classList.add('active'); + + // Load game data into form + const gameData = JSON.parse(gameItem.dataset.game); + fields.forEach(field => { + const input = form.querySelector(`[name=""${field}""]`); + if (input) input.value = gameData[field]; + }); + form.querySelector('[name=""lineIndex""]').value = gameItem.dataset.index; // Store the index for the form submission + + // Load and display the game image + const pcName = gameData['PC-Name']; // Get the PC-Name from the game data + const imagePath = `SCRSHOT/${pcName}.gif`; // Create the image path + + // Set the image source + gameImage.src = imagePath; + + // Check if the image exists, then display it + const img = new Image(); + img.onload = () => { + gameImage.style.display = 'block'; // Show the image if it loads + gameImage.src = imagePath; // Set the image source + }; + img.onerror = () => { + gameImage.style.display = 'none'; // Hide image if it doesn't exist + }; + img.src = imagePath; // Trigger the image load + + // Call to update the game directory display based on the PathIndex + updateGameDirectoryDisplay(); + }); + }); +} + +});" +hC11zmMg,**System Control** rev_02,pleasedontcode,Arduino,Friday 22nd of November 2024 09:44:38 AM CDT,"/********* Pleasedontcode.com ********** + + Pleasedontcode thanks you for automatic code generation! Enjoy your code! + + - Terms and Conditions: + You have a non-exclusive, revocable, worldwide, royalty-free license + for personal and commercial use. Attribution is optional; modifications + are allowed, but you're responsible for code maintenance. We're not + liable for any loss or damage. For full terms, + please visit pleasedontcode.com/termsandconditions. + + - Project: **System Control** + - Source Code NOT compiled for: Arduino Uno + - Source Code created on: 2024-11-22 15:43:35 + +********* Pleasedontcode.com **********/ + +/****** SYSTEM REQUIREMENTS *****/ +/****** SYSTEM REQUIREMENT 1 *****/ + /* 20*4 lcd i2c, ds3231 rtc, 3 switches to 3 outputs, */ + /* 1 switch to pump motor with low level and high */ + /* level input controls */ +/****** SYSTEM REQUIREMENT 2 *****/ + /* 20*4 lcd i2c,, 3 switches to 3 separate outputs 1 */ + /* manual switch to pump motor with low level ""motor */ + /* on"" and high level ""motor off"" input controls, and */ + /* pump motor & 3 separate outputs are contolled by */ + /* timer alarm rtc ds3231 and sms sim 900A gsm modu */ +/****** END SYSTEM REQUIREMENTS *****/ + +/* START CODE */ + +/****** DEFINITION OF LIBRARIES *****/ +#include +#include +#include +#include + +/****** FUNCTION PROTOTYPES *****/ +void setup(void); +void loop(void); + +// Constants for the LCD +#define LCD_ADDRESS 0x27 // I2C address of the LCD +#define LCD_COLUMNS 20 +#define LCD_ROWS 4 + +// Pin definitions +const int switch1Pin = 2; // Switch for output 1 +const int switch2Pin = 3; // Switch for output 2 +const int switch3Pin = 4; // Switch for output 3 +const int pumpSwitchPin = 5; // Manual switch for pump motor + +// Output pins +const int output1Pin = 6; // Output 1 +const int output2Pin = 7; // Output 2 +const int output3Pin = 8; // Output 3 +const int pumpMotorPin = 9; // Pump motor control + +// Create instances of the libraries +LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS); +RTC_DS3231 rtc; +SoftwareSerial gsm(10, 11); // RX, TX for GSM module + +void setup(void) +{ + // Initialize the LCD + lcd.begin(LCD_COLUMNS, LCD_ROWS); + lcd.backlight(); + lcd.print(""System Init...""); + + // Initialize the RTC + if (!rtc.begin()) { + lcd.print(""RTC Error!""); + while (1); + } + + // Set up pin modes + pinMode(switch1Pin, INPUT); + pinMode(switch2Pin, INPUT); + pinMode(switch3Pin, INPUT); + pinMode(pumpSwitchPin, INPUT); + pinMode(output1Pin, OUTPUT); + pinMode(output2Pin, OUTPUT); + pinMode(output3Pin, OUTPUT); + pinMode(pumpMotorPin, OUTPUT); + + // Initialize GSM module + gsm.begin(9600); +} + +void loop(void) +{ + // Read switch states + bool switch1State = digitalRead(switch1Pin); + bool switch2State = digitalRead(switch2Pin); + bool switch3State = digitalRead(switch3Pin); + bool pumpSwitchState = digitalRead(pumpSwitchPin); + + // Control outputs based on switch states + digitalWrite(output1Pin, switch1State); + digitalWrite(output2Pin, switch2State); + digitalWrite(output3Pin, switch3State); + + // Control pump motor based on manual switch + if (pumpSwitchState) { + digitalWrite(pumpMotorPin, HIGH); // Motor ON + } else { + digitalWrite(pumpMotorPin, LOW); // Motor OFF + } + + // Get current time from RTC + DateTime now = rtc.now(); + lcd.setCursor(0, 1); + lcd.print(now.year(), DEC); + lcd.print('/'); + lcd.print(now.month(), DEC); + lcd.print('/'); + lcd.print(now.day(), DEC); + lcd.print("" ""); + lcd.print(now.hour(), DEC); + lcd.print(':'); + lcd.print(now.minute(), DEC); + lcd.print(':'); + lcd.print(now.second(), DEC); + + // Add any additional functionality here (e.g., timer alarms, SMS notifications) + + delay(1000); // Update every second +} + +/* END CODE */" +i0jJhHfb,⭐ FREE giftcards method ON,SynoOwner,JavaScript,Friday 22nd of November 2024 09:42:14 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #rZZlFz2vCr + +" +wpS9WxHE,⭐ FREE giftcards method⭐ TO,DEBINHA2019,JavaScript,Friday 22nd of November 2024 09:41:40 AM CDT," +⭐️ BONUS ⭐️ Free giftcard method https://t.me/ExploitPaid/21 ⭐ + +https://t.me/ExploitPaid <--- accounts and methods are posted daily on our telegram -* #zP8kipu6iF + +" +NAR9YHvP,**Button Control** rev_01,pleasedontcode,Arduino,Friday 22nd of November 2024 09:36:05 AM CDT,"/********* Pleasedontcode.com ********** + + Pleasedontcode thanks you for automatic code generation! Enjoy your code! + + - Terms and Conditions: + You have a non-exclusive, revocable, worldwide, royalty-free license + for personal and commercial use. Attribution is optional; modifications + are allowed, but you're responsible for code maintenance. We're not + liable for any loss or damage. For full terms, + please visit pleasedontcode.com/termsandconditions. + + - Project: **Button Control** + - Source Code NOT compiled for: Arduino Uno + - Source Code created on: 2024-11-22 15:34:59 + +********* Pleasedontcode.com **********/ + +/****** SYSTEM REQUIREMENTS *****/ +/****** SYSTEM REQUIREMENT 1 *****/ + /* 20*4 lcd i2c, ds3231 rtc, 3 switches to 3 outputs, */ + /* 1 switch to pump motor with low level and high */ + /* level input controls */ +/****** END SYSTEM REQUIREMENTS *****/ + +/* START CODE */ + +/****** DEFINITION OF LIBRARIES *****/ +#include +#include +#include +#include + +/****** FUNCTION PROTOTYPES *****/ +void setup(void); +void loop(void); + +// Constants for pin assignments +const int switch1Pin = 2; // Pin for switch 1 +const int switch2Pin = 3; // Pin for switch 2 +const int switch3Pin = 4; // Pin for switch 3 +const int pumpSwitchPin = 5; // Pin for pump control +const int output1Pin = 6; // Output pin for switch 1 +const int output2Pin = 7; // Output pin for switch 2 +const int output3Pin = 8; // Output pin for switch 3 + +// Create LCD object +LiquidCrystal_I2C lcd(0x27, 20, 4); // Change the address according to your LCD + +// Create RTC object +RTC_DS3231 rtc; + +// Create EasyButton objects +EasyButton button1(switch1Pin); +EasyButton button2(switch2Pin); +EasyButton button3(switch3Pin); +EasyButton pumpButton(pumpSwitchPin); + +void setup(void) +{ + // Initialize the LCD + lcd.begin(20, 4); + lcd.backlight(); + lcd.print(""System Init...""); + + // Initialize the RTC + if (!rtc.begin()) { + lcd.print(""RTC not found!""); + while (1); + } + + // Initialize buttons + button1.begin(); + button2.begin(); + button3.begin(); + pumpButton.begin(); + + // Set pin modes for outputs + pinMode(output1Pin, OUTPUT); + pinMode(output2Pin, OUTPUT); + pinMode(output3Pin, OUTPUT); + pinMode(pumpSwitchPin, OUTPUT); +} + +void loop(void) +{ + // Update button states + button1.update(); + button2.update(); + button3.update(); + pumpButton.update(); + + // Handle button presses + if (button1.isPressed()) { + digitalWrite(output1Pin, HIGH); + lcd.setCursor(0, 1); + lcd.print(""Output 1 ON ""); + } else { + digitalWrite(output1Pin, LOW); + lcd.setCursor(0, 1); + lcd.print(""Output 1 OFF ""); + } + + if (button2.isPressed()) { + digitalWrite(output2Pin, HIGH); + lcd.setCursor(0, 2); + lcd.print(""Output 2 ON ""); + } else { + digitalWrite(output2Pin, LOW); + lcd.setCursor(0, 2); + lcd.print(""Output 2 OFF ""); + } + + if (button3.isPressed()) { + digitalWrite(output3Pin, HIGH); + lcd.setCursor(0, 3); + lcd.print(""Output 3 ON ""); + } else { + digitalWrite(output3Pin, LOW); + lcd.setCursor(0, 3); + lcd.print(""Output 3 OFF ""); + } + + // Handle pump control + if (pumpButton.isPressed()) { + digitalWrite(pumpSwitchPin, HIGH); // Activate pump + lcd.setCursor(0, 0); + lcd.print(""Pump ON ""); + } else { + digitalWrite(pumpSwitchPin, LOW); // Deactivate pump + lcd.setCursor(0, 0); + lcd.print(""Pump OFF ""); + } + + delay(100); // Small delay to debounce +} + +/* END CODE */"