diff --git a/.github/workflows/pr-stale.yml b/.github/workflows/pr-stale.yml index 6627748b4..81b3b0eb7 100644 --- a/.github/workflows/pr-stale.yml +++ b/.github/workflows/pr-stale.yml @@ -13,10 +13,14 @@ jobs: steps: - uses: actions/stale@8f717f0dfca33b78d3c933452e42558e4456c8e7 with: - days-before-close: 14 - days-before-stale: 14 + days-before-pr-close: 14 + days-before-pr-stale: 14 + days-before-issue-close: -1 + days-before-issue-stale: -1 exempt-draft-pr: true exempt-pr-assignees: evanpelle - stale-pr-label: "stale" + exempt-pr-labels: "will not stale" + stale-pr-label: "Stale" stale-pr-message: "This pull request is stale because it has been open for 14 days with no activity. If you want to keep this pull request open, add a comment or update the branch." - start-date: 2025-09-03T00:00:00+00:00 + close-pr-message: "This pull request has been closed because twenty-eight days have passed without activity. If someone wants to keep working on it, feel free to take the code." + close-pr-label: "Orphaned" diff --git a/jest.config.ts b/jest.config.ts index 52d147124..80fb0365d 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -17,8 +17,8 @@ export default { coverageThreshold: { global: { statements: 21.5, - branches: 16.5, - lines: 22.0, + branches: 16, + lines: 21.0, functions: 20.5, }, }, diff --git a/resources/ads.txt b/resources/ads.txt new file mode 100644 index 000000000..af580bd85 --- /dev/null +++ b/resources/ads.txt @@ -0,0 +1,1011 @@ +# Publift Fuse ads.txt # +# Updated: Sep 2025 # +# Contact: support@publift.com # + + +# Publift + +OWNERDOMAIN=openfront.io +MANAGERDOMAIN=publift.com +publift.com, 01K62JJMRS9RQ7CND6PN13CYK7, DIRECT + +# Google + +google.com, pub-5884294479391638, RESELLER, f08c47fec0942fa0 + + +# Pubmatic + +pubmatic.com, 156230, RESELLER, 5d62403b186f2ace +pubmatic.com, 156762, RESELLER, 5d62403b186f2ace +pubmatic.com, 156974, RESELLER, 5d62403b186f2ace +pubmatic.com, 157586, RESELLER, 5d62403b186f2ace + + +# AppNexus + +appnexus.com, 9623, DIRECT, f5ab79cb980f11d1 + + +# Rubicon + +rubiconproject.com, 11504, DIRECT, 0bfd66d529a55807 +rubiconproject.com, 20884, DIRECT, 0bfd66d529a55807 +rubiconproject.com, 17348, RESELLER, 0bfd66d529a55807 + + +# OpenX + +openx.com, 540717835, RESELLER, 6a698e2ec38604c6 +openx.com, 540938618, DIRECT, 6a698e2ec38604c6 +openx.com, 557939709, DIRECT, 6a698e2ec38604c6 + + +# Criteo + +themediagrid.com, U9IDX4, DIRECT, 35d5010d7789b49d + + +# Teads + +teads.tv, 19340, DIRECT, 15a9c44f6d26cbe1 + + +# Index Exchange + +indexexchange.com, 186270, RESELLER, 50b1c356f2c5c8fc + + +# Sovrn + +lijit.com, 267370, DIRECT, fafdf38b16bf6b2b #SOVRN +lijit.com, 267370-eb, DIRECT, fafdf38b16bf6b2b #SOVRN +openx.com, 538959099, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 137711, RESELLER, 5d62403b186f2ace +pubmatic.com, 156212, RESELLER, 5d62403b186f2ace +rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807 +appnexus.com, 1019, RESELLER, f5ab79cb980f11d1 +video.unrulymedia.com, 2444764291, RESELLER +krushmedia.com, AJxF6R572a9M6CaTvK, RESELLER, +motorik.io, 100463, RESELLER +smaato.com, 1100056344, RESELLER, 07bcf65f187117b4 +smartadserver.com, 4926, RESELLER, 060d053dcf45cbf3 + + +# GumGum + +gumgum.com,13654,DIRECT,ffdef49475d318a9 +rubiconproject.com,23434,RESELLER,0bfd66d529a55807 +pubmatic.com,157897,RESELLER,5d62403b186f2ace +appnexus.com,2758,RESELLER,f5ab79cb980f11d1 +contextweb.com,558355,RESELLER,89ff185a4c4e857c +openx.com,537149485,RESELLER,6a698e2ec38604c6 +improvedigital.com,1884,RESELLER +conversantmedia.com,100978,RESELLER,03113cd04947736d + + +# TripleLift + +triplelift.com, 3084, DIRECT, 6c33edb13117fd86 +triplelift.com, 3084-EB, DIRECT, 6c33edb13117fd86 +themediagrid.com, GODNC4, RESELLER, 35d5010d7789b49d + + +# Amazon + +aps.amazon.com,8b48e249-e9e6-4a52-8b48-396ea93403e8,DIRECT +pubmatic.com,160006,RESELLER,5d62403b186f2ace +pubmatic.com,160096,RESELLER,5d62403b186f2ace +pubmatic.com,157150,RESELLER,5d62403b186f2ace +appnexus.com,1908,RESELLER,f5ab79cb980f11d1 +smaato.com,1100044650,RESELLER,07bcf65f187117b4 +ad-generation.jp,12474,RESELLER,7f4ea9029ac04e53 +districtm.io,100962,RESELLER,3fd707be9c4527c3 +yieldmo.com,2719019867620450718,RESELLER +appnexus.com,3663,RESELLER,f5ab79cb980f11d1 +rhythmone.com,1654642120,RESELLER,a670c89d4a324e47 +yahoo.com,55029,RESELLER,e1a5b5b6e3255540 +gumgum.com,14141,RESELLER,ffdef49475d318a9 +admanmedia.com,726,RESELLER +sharethrough.com,7144eb80,RESELLER,d53b998a7bd4ecd2 +emxdgt.com,2009,RESELLER,1e1d41537f7cad7f +contextweb.com,562541,RESELLER,89ff185a4c4e857c +themediagrid.com,JTQKMP,RESELLER,35d5010d7789b49d +beachfront.com,14804,RESELLER,e2541279e8e2ca4d +improvedigital.com,2050,RESELLER +mintegral.com,10043,RESELLER,0aeed750c80d6423 +sonobi.com,7f5fa520f8,RESELLER,d1a215d9eb5aee9e +triplelift.com,2985,DIRECT,6c33edb13117fd86 +indexexchange.com,200570,DIRECT,50b1c356f2c5c8fc +media.net,8CUZ1MK22,RESELLER +risecodes.com,63832beef8189a00015cb6d3,RESELLER +uis.mobfox.com,93308,RESELLER,5529a3d1f59865be +mediago.io,045ac24b888bcf59a09731e7f0f2084f,RESELLER +adyoulike.com,7463c359225e043c111036d7a29affa5,RESELLER,4ad745ead2958bf7 +minutemedia.com,01gya4708ddm,RESELLER +visiblemeasures.com,1052,RESELLER +undertone.com,4205,RESELLER,d954590d0cb265b9 +imds.tv,82606,RESELLER,ae6c32151e71f19d +kargo.com,8824,RESELLER +nativo.com,5711,RESELLER,59521ca7cc5e9fee +start.io,123111883,RESELLER +supply.colossusssp.com,836,RESELLER,6c5b49d96ec1b458 +opera.com,pub12058951686464,RESELLER,55a0c5fd61378de3 +richaudience.com,MMuGgvZcVd,RESELLER + + +# ConnectAd + +connectad.io, 152, DIRECT, 85ac85a30c93b3e5 +adform.com, 768, RESELLER, 9f5210a2f0999e32 +rubiconproject.com, 26800, RESELLER, 0bfd66d529a55807 + +# ConnectAd - Extended +openx.com, 537145117, RESELLER, 6a698e2ec38604c6 +lijit.com, 244287, RESELLER, fafdf38b16bf6b2b + + +# AdaptMX + +amxrtb.com, 105199401, DIRECT +appnexus.com, 12290, RESELLER, f5ab79cb980f11d1 +adform.com, 2865, RESELLER +appnexus.com, 9393, RESELLER, f5ab79cb980f11d1 +openx.com, 559680764, RESELLER, 6a698e2ec38604c6 +rubiconproject.com, 23844, RESELLER, 0bfd66d529a55807 +pubmatic.com, 161527, RESELLER, 5d62403b186f2ace +pubmatic.com, 158355, RESELLER, 5d62403b186f2ace +lijit.com, 260380, RESELLER, fafdf38b16bf6b2b +appnexus.com, 11924, RESELLER, f5ab79cb980f11d1 +appnexus.com, 11786, RESELLER, f5ab79cb980f11d1 +sharethrough.com, a6a34444, RESELLER, d53b998a7bd4ecd2 + + +# Kargo + +kargo.com, 8538, DIRECT +rubiconproject.com, 11864, RESELLER, 0bfd66d529a55807 +appnexus.com, 8173, RESELLER, f5ab79cb980f11d1 +contextweb.com, 562001, RESELLER, 89ff185a4c4e857c +video.unrulymedia.com, 1858504412, RESELLER + + +# 33Across + +33across.com, 0010b00002QKn54AAD, DIRECT, bbea06d9c4d2853c #33Across #hb #tag + +# 33Across - Rubicon +rubiconproject.com, 16414, RESELLER, 0bfd66d529a55807 #33Across #hb #tag +rubiconproject.com, 21642, RESELLER, 0bfd66d529a55807 #33Across #hb #tag #viewable +rubiconproject.com, 21434, RESELLER, 0bfd66d529a55807 #33Across #tag #ebda +rubiconproject.com, 21720, RESELLER, 0bfd66d529a55807 #33Across EU #hb #tag + +# 33Across - PubMatic +pubmatic.com, 156423, RESELLER, 5d62403b186f2ace #33Across #hb #tag #video +pubmatic.com, 158136, RESELLER, 5d62403b186f2ace #33Across EU #hb #tag +pubmatic.com, 158569, RESELLER, 5d62403b186f2ace #33Across #tag #ebda + +# 33Across - AppNexus +appnexus.com, 10239, RESELLER, f5ab79cb980f11d1 #33Across #hb #tag #viewable +appnexus.com, 1001, RESELLER, f5ab79cb980f11d1 #33Across #tag +appnexus.com, 3135, RESELLER, f5ab79cb980f11d1 #33Across #tag + +# 33Across - OpenX +openx.com, 537120563, RESELLER, 6a698e2ec38604c6 #33Across #hb #tag #video +openx.com, 539392223, RESELLER, 6a698e2ec38604c6 #33Across #tag #ebda + +# 33Across - Verizon Media +yahoo.com, 57289, RESELLER, e1a5b5b6e3255540 #33Across #hb #tag + +# 33Across - Index Exchange +indexexchange.com, 190966, RESELLER, 50b1c356f2c5c8fc #33Across #tag #ebda +indexexchange.com, 191973, RESELLER, 50b1c356f2c5c8fc #33Across #hb #tag #viewable #video + +# 33Across - Conversant Media +conversantmedia.com, 100141, RESELLER, 03113cd04947736d #hb #tag #video +appnexus.com, 4052, RESELLER,f5ab79cb980f11d1 #33Across #hb +contextweb.com, 561998, RESELLER, 89ff185a4c4e857c #33Across #hb +openx.com, 540031703, RESELLER, 6a698e2ec38604c6 #33Across #hb +pubmatic.com, 158100, RESELLER, 5d62403b186f2ace #33Across #hb +yahoo.com, 55771, RESELLER, e1a5b5b6e3255540 #33Across #hb +appnerve.com, 187287, RESELLER #hb +smartyads.com,300045, RESELLER, fd2bde0ff2e62c5d #hb +e-planning.net,1bf7b5d803f178c4,RESELLER,c1ba615865ed87b2 +video.unrulymedia.com, 645663965, RESELLER + +# 33Across - Google +google.com, pub-9557089510405422, RESELLER, f08c47fec0942fa0 #33Across #tag + +# 33Across - Sonobi +sonobi.com, a416546bb7, RESELLER, d1a215d9eb5aee9e #33Across #tag #ebda + +# 33Across - Amazon +aps.amazon.com, 2840f06c-5d89-4853-a03e-3bfa567dd33c, DIRECT #33Across #tag +openx.com, 540191398, RESELLER, 6a698e2ec38604c6 +rubiconproject.com, 18020, RESELLER, 0bfd66d529a55807 +adtech.com, 12068, RESELLER, e1a5b5b6e3255540 #33Across #tag + +# 33Across - Pulsepoint +contextweb.com, 561516, RESELLER, 89ff185a4c4e857c #33Across #hb #tag + +# 33Across - TripleLift +triplelift.com, 12503, RESELLER, 6c33edb13117fd86 + +# 33Across - Acuity Ads +admanmedia.com, 1055, RESELLER +visiblemeasures.com, 1055, RESELLER +yahoo.com, 59674, RESELLER, e1a5b5b6e3255540 + +# 33Across - LoopMe +loopme.com,11575,RESELLER,6c8d5f95897a5a3b +xandr.com, 13799, RESELLER +lijit.com, 400766, RESELLER, fafdf38b16bf6b2b +freewheel.tv, 1137745, RESELLER +freewheel.tv, 1138513, RESELLER +sharethrough.com, 6qlnf8SY, RESELLER, d53b998a7bd4ecd2 +triplelift.com, 12158, RESELLER, 6c33edb13117fd86 +rubiconproject.com, 20744, RESELLER, 0bfd66d529a55807 +pubmatic.com, 158154, RESELLER, 5d62403b186f2ace +sonobi.com, b43e9530e7, RESELLER, d1a215d9eb5aee9e + +# 33Across - Unruly +video.unrulymedia.com, 2439829435, RESELLER + +# 33Across - OpenWeb +adyoulike.com, 1f301d3bcd723f5c372070bdfd142940, RESELLER, 4ad745ead2958bf7 +loopme.com, 11480, RESELLER, 6c8d5f95897a5a3b +pubmatic.com, 160925, RESELLER, 5d62403b186f2ace +rubiconproject.com, 20736, RESELLER, 0bfd66d529a55807 +spotim.market, sp_AYL2022, RESELLER, 077e5f709d15bdbb +betweendigital.com, 44774, RESELLER +lijit.com, 408376, RESELLER, fafdf38b16bf6b2b #SOVRN +lijit.com, 408376-eb, RESELLER, fafdf38b16bf6b2b #SOVRN +smartadserver.com, 4144, RESELLER +onetag.com, 7a07370227fc000, RESELLER +admixer.net, 5e789729-1e92-41ca-8b4f-987c6edae9fe, RESELLER +nativo.com, 5848, RESELLER, 59521ca7cc5e9fee +33across.com, 0015a00003HljHyAAJ, RESELLER +video.unrulymedia.com, 297618916, RESELLER +risecodes.com, 64c7a4acd6298f0001a7d867, RESELLER + +# 33Across - IQZone +iqzone.com,IQ299,RESELLER +zetaglobal.net,998,RESELLER +lijit.com,456186,RESELLER,fafdf38b16bf6b2b +video.unrulymedia.com,5336134699710583737,RESELLER +freewheel.tv,1599302,RESELLER +freewheel.tv,1599303,RESELLER + +# 33Across - Krush Media +krushmedia.com, AJxF6R615a9M6CaTvK, RESELLER +google.com, pub-7734005103835923, RESELLER, f08c47fec0942fa0 +loopme.com,12858,RESELLER,6c8d5f95897a5a3b +onetag.com, 848879e82ca5940, RESELLER +freewheel.tv, 1522514, RESELLER +freewheel.tv, 1522338, RESELLER +media.net, 8CUT87EOU, RESELLER + +# 33Across - BetweenX +betweendigital.com, 43962, RESELLER +lijit.com, 273644, RESELLER, fafdf38b16bf6b2b +contextweb.com, 562827, RESELLER, 89ff185a4c4e857c +pubmatic.com, 159668, RESELLER, 5d62403b186f2ace +onetag.com, 5d1628750185ace, RESELLER +smartadserver.com, 4467, RESELLER +richaudience.com, 4AoWPWXbVu, RESELLER + + +# Inmobi + +inmobi.com, 4fcebe6f9a714a95b066cfdbd5d354d4, DIRECT, 83e75a7ae333ca9d +rubiconproject.com, 11726, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 12266, RESELLER, 0bfd66d529a55807 +conversantmedia.com, 40881, RESELLER, 03113cd04947736d +loopme.com, 9724, RESELLER, 6c8d5f95897a5a3b +lijit.com, 502742, RESELLER, fafdf38b16bf6b2b +pubmatic.com, 156931, RESELLER, 5d62403b186f2ace +pubmatic.com, 157097, RESELLER, 5d62403b186f2ace +verve.com, 5897, RESELLER, 0c8f5958fc2d6270 +blis.com, 33, RESELLER, 61453ae19a4b73f4 +pubmatic.com, 159035, RESELLER, 5d62403b186f2ace +axonix.com, 57716, RESELLER +thebrave.io, 1234568, RESELLER, c25b2154543746ac +se7en.es, 212430, RESELLER, 064bc410192443d8 +gamaigroup.com, 320201, RESELLER +iqzone.com, IQ87, RESELLER +yeahmobi.com, 5135082, RESELLER +pubnative.net, 1006951, RESELLER, d641df8625486a7b +appnexus.com, 14077, RESELLER, f5ab79cb980f11d1 +admanmedia.com, 2063, RESELLER +themediagrid.com, B8N9YH, RESELLER, 35d5010d7789b49d +video.unrulymedia.com, 188404962, RESELLER +contextweb.com, 558638, RESELLER, 89ff185a4c4e857c + + +# Nobid + +nobid.io, 22013853948, DIRECT +zetaglobal.net, 693, RESELLER +sharethrough.com, aRE1degH, RESELLER, d53b998a7bd4ecd2 +rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 24434, RESELLER, 0bfd66d529a55807 +amxrtb.com, 105199579, RESELLER +33across.com, 0010b00002Mq2FYAAZ, RESELLER, bbea06d9c4d2853c +lijit.com, 273657, RESELLER, fafdf38b16bf6b2b +video.unrulymedia.com, 347774562, RESELLER +pubmatic.com, 159277, RESELLER, 5d62403b186f2ace +inmobi.com, 8f261ace12c3486ba2e0d2011cd97976, RESELLER, 83e75a7ae333ca9d +media.net, 8CUV34PJ4, RESELLER +rubiconproject.com, 15268, RESELLER, 0bfd66d529a55807 +yieldmo.com, 3819255242365542618, DIRECT +media.net, 8CU3M1HM4, DIRECT + + +# Smart + +smartadserver.com, 4191, RESELLER, 060d053dcf45cbf3 +smartadserver.com, 4191-OB, RESELLER, 060d053dcf45cbf3 +pubmatic.com, 156439, RESELLER, 5d62403b186f2ace +pubmatic.com, 154037, RESELLER, 5d62403b186f2ace +openx.com, 537149888, RESELLER, 6a698e2ec38604c6 +appnexus.com, 3703, RESELLER, f5ab79cb980f11d1 +loopme.com, 5679, RESELLER, 6c8d5f95897a5a3b +xad.com, 958, RESELLER, 81cbf0a75a5e0e9a +video.unrulymedia.com, 2564526802, RESELLER, 6f752381ad5ec0e5 +smaato.com, 1100044045, RESELLER, 07bcf65f187117b4 +pubnative.net, 1006576, RESELLER, d641df8625486a7b +verve.com, 15503, RESELLER, 0c8f5958fc2d6270 +adyoulike.com, b4bf4fdd9b0b915f746f6747ff432bde, RESELLER, 4ad745ead2958bf7 +axonix.com, 57264, RESELLER, bc385f2b4a87b721 +admanmedia.com, 43, RESELLER +sharethrough.com, OAW69Fon, RESELLER, d53b998a7bd4ecd2 +contextweb.com, 560288, RESELLER, 89ff185a4c4e857c +rhebus.works, 5252004478, RESELLER +contextweb.com, 563115, RESELLER, 89ff185a4c4e857c +ogury.com, ede8d6ba-5a3f-4dfa-85aa-8cfb3c42f970, RESELLER + + +# Adagio + +adagio.io, 1140, DIRECT + +# Adagio - Magnite +rubiconproject.com, 19116, RESELLER, 0bfd66d529a55807 + +# Adagio - Pubmatic +pubmatic.com, 159110, RESELLER, 5d62403b186f2ace + +# Adagio - Improve Digital +improvedigital.com, 1790, RESELLER + +# Adagio - Onetag +onetag.com, 6b859b96c564fbe, RESELLER + +# Adagio - Index Exchange +indexexchange.com, 194558, RESELLER, 50b1c356f2c5c8fc + +# Adagio - 33Across +33across.com, 0015a00002oUk4aAAC, RESELLER, bbea06d9c4d2853c + +# Adagio - Equativ +smartadserver.com, 3554, RESELLER + +# Adagio - Sovrn +lijit.com, 367236, RESELLER, fafdf38b16bf6b2b + +# Adagio - OpenX +openx.com, 558899373, RESELLER, 6a698e2ec38604c6 + +# Adagio - Triplelift +triplelift.com, 13482, RESELLER, 6c33edb13117fd86 + +# Adagio - E-Planning +e-planning.net, 83c06e81531537f4, RESELLER, c1ba615865ed87b2 +rubiconproject.com, 12186, RESELLER, 0bfd66d529a55807 +zetaglobal.net, 891, RESELLER +appnexus.com, 15941, RESELLER, f5ab79cb980f11d1 + +# Adagio - Illumin +admanmedia.com, 2216, RESELLER + +# Adagio - ConnectAd +connectad.io, 456, RESELLER, 85ac85a30c93b3e5 + + +# Sharethrough + +sharethrough.com, EU8CIOkx, RESELLER, d53b998a7bd4ecd2 + + +# Onetag + +onetag.com, 77253abd802c05e, DIRECT +onetag.com, 77253abd802c05e-OB, DIRECT +appnexus.com, 13099, RESELLER, f5ab79cb980f11d1 +pubmatic.com, 161593, RESELLER, 5d62403b186f2ace +rubiconproject.com, 11006, RESELLER, 0bfd66d529a55807 +video.unrulymedia.com, 586616193, RESELLER + + +# Ogury + +ogury.com, 5a93b205-d86c-4e96-a62e-01f593889ed0, DIRECT +appnexus.com, 11470, RESELLER, f5ab79cb980f11d1 +pubmatic.com, 163238, RESELLER, 5d62403b186f2ace +smartadserver.com, 4537, RESELLER, 060d053dcf45cbf3 +rubiconproject.com, 25198, RESELLER, 0bfd66d529a55807 +thebrave.io, 1234746, RESELLER, c25b2154543746ac +toponad.com, 16719c20554a4f, RESELLER, 1d49fe424a1a456d +video.unrulymedia.com, 533898005, RESELLER #Nexxen +dauup.com, 34141, RESELLER #Edge226 + + +# OMS + +onlinemediasolutions.com, 20605, DIRECT, b3868b187e4b6402 +onomagic.com, 206051, DIRECT +amxrtb.com, 105199514, RESELLER +pubmatic.com, 161332, RESELLER, 5d62403b186f2ace +rubiconproject.com, 20416, RESELLER, 0bfd66d529a55807 +onetag.com, 75753f1ebcc343c, RESELLER +lijit.com, 374814, RESELLER, fafdf38b16bf6b2b +openx.com, 537153209, RESELLER, 6a698e2ec38604c6 +media.net, 8CUB46Z7R, RESELLER +onetag.com, 7b561459c997848, RESELLER +audienciad.com, 206052, DIRECT +video.unrulymedia.com, 6694405583287859332, RESELLER +aps.amazon.com, 48266a61-b3d9-4cb7-b172-553abc6a42a4, RESELLER +yieldmo.com, 2757543169808605705, RESELLER +rubiconproject.com, 24364, RESELLER, 0bfd66d529a55807 +getmediamx.com, 1220605, DIRECT +appnexus.com, 11801, RESELLER, f5ab79cb980f11d1 +appnexus.com, 15629, RESELLER, f5ab79cb980f11d1 +appnexus.com, 15127, RESELLER, f5ab79cb980f11d1 +loopme.com, 12733, RESELLER, 6c8d5f95897a5a3b +themediagrid.com, IRK975, RESELLER, 35d5010d7789b49d +sonobi.com, 3aed893727, RESELLER, d1a215d9eb5aee9e +sharethrough.com, LxFeZvU4, RESELLER, d53b998a7bd4ecd2 +advibe.media, 820605, DIRECT +adyoulike.com, e9a771d72c076dbe3cafc2c6477f9238, RESELLER, 4ad745ead2958bf7 +33across.com, 001Pg00000eHKL7IAO, RESELLER, bbea06d9c4d2853c +adform.com, 3251, RESELLER, 9f5210a2f0999e32 + + +# Sonobi + +sonobi.com, 54feb57a02, DIRECT, d1a215d9eb5aee9e +freewheel.tv, sg1253047, RESELLER +freewheel.tv, 533600-r-523319, RESELLER + + +# Primis + +primis.tech, 30278, DIRECT, b6b21d256ef43532 +pubmatic.com, 156595, RESELLER, 5d62403b186f2ace +google.com, pub-1320774679920841, RESELLER, f08c47fec0942fa0 +openx.com, 540258065, RESELLER, 6a698e2ec38604c6 +rubiconproject.com, 20130, RESELLER, 0bfd66d529a55807 +freewheel.tv, 19133, RESELLER, 74e8e47458f74754 +smartadserver.com, 3436, RESELLER, 060d053dcf45cbf3 +indexexchange.com, 191923, RESELLER, 50b1c356f2c5c8fc +adform.com, 2078, RESELLER +media.net, 8CU695QH7, RESELLER +video.unrulymedia.com, 2338962694, RESELLER +triplelift.com, 8210, RESELLER, 6c33edb13117fd86 +sharethrough.com, flUyJowI, RESELLER, d53b998a7bd4ecd2 +appnexus.com, 16007, RESELLER, f5ab79cb980f11d1 +yahoo.com, 59260, RESELLER +sharethrough.com, jbYv3ec8, RESELLER, d53b998a7bd4ecd2 +stroeer.com, 22739, DIRECT +ottadvisors.com, 122034096467, RESELLER +video.unrulymedia.com, 776418614052335749, RESELLER +the-ozone-project.com, OZONEPRS0001, DIRECT +appnexus.com, 9979, RESELLER, f5ab79cb980f11d1 +openx.com, 540731760, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 160557, RESELLER, 5d62403b186f2ace +indexexchange.com, 206233, RESELLER, 50b1c356f2c5c8fc +pmc.com, 1240739, DIRECT, 8dd52f825890bb44 +rubiconproject.com, 10278, RESELLER, 0bfd66d529a55807 + + +# Medianet + +media.net, 8CUC2JYNF, DIRECT +media.net, 8CU995W35, DIRECT +openx.com, 537100188, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 159463, RESELLER, 5d62403b186f2ace +appnexus.com, 1356, RESELLER, f5ab79cb980f11d1 +google.com, pub-7439041255533808, RESELLER, f08c47fec0942fa0 +rubiconproject.com, 19396, RESELLER, 0bfd66d529a55807 +onetag.com, 5d49f482552c9b6, RESELLER +sharethrough.com, koRtppYA, RESELLER, d53b998a7bd4ecd2 +trustedstack.com, TS9V5HI46, RESELLER + + +# Yandex + +yandex.com, 97916741, RESELLER +improvedigital.com, 2031, RESELLER +betweendigital.com, 43554, RESELLER +uis.mobfox.com, 165, RESELLER +contextweb.com, 562899,RESELLER,89ff185a4c4e857c +hyperad.tech, 150, RESELLER +hyperad.tech, 215, RESELLER +google.com, pub-5533854580432370, RESELLER, f08c47fec0942fa0 + + +# Epsilon/Conversant Media + +conversantmedia.com, 41333, DIRECT, 03113cd04947736d +rubiconproject.com, 23644, RESELLER, 0bfd66d529a55807 +lijit.com, 411121, RESELLER, fafdf38b16bf6b2b #SOVRN +admanmedia.com, 2050, RESELLER + + +# Blockthrough + +blockthrough.com, 5708166709903360, DIRECT +pubmatic.com, 160377, RESELLER, 5d62403b186f2ace +indexexchange.com, 194341, RESELLER, 50b1c356f2c5c8fc +rubiconproject.com, 23718, RESELLER, 0bfd66d529a55807 +appnexus.com, 6979, RESELLER, f5ab79cb980f11d1 +lijit.com, 251666, RESELLER, fafdf38b16bf6b2b +lijit.com, 251666-eb, RESELLER, fafdf38b16bf6b2b +themediagrid.com, 7E2DLW, RESELLER +sharethrough.com, 9zUewtvl, RESELLER, d53b998a7bd4ecd2 +yahoo.com, 59531, RESELLER, e1a5b5b6e3255540 +smartadserver.com, 4342, RESELLER +smartadserver.com, 4012, RESELLER +contextweb.com, 562926, RESELLER, 89ff185a4c4e857c + + +# Vidazoo + +vidazoo.com, 66bd9d72ba3d00c6d7fcf12d, DIRECT, b6ada874b4d7d0b2 +rubiconproject.com, 17130, RESELLER, 0bfd66d529a55807 +lijit.com, 222372, RESELLER, fafdf38b16bf6b2b +themediagrid.com, 3AW9JB, RESELLER, 35d5010d7789b49d +pubmatic.com, 159988, RESELLER, 5d62403b186f2ace +appnexus.com, 2794, RESELLER, f5ab79cb980f11d1 +openx.com, 541017750, RESELLER, 6a698e2ec38604c6 +video.unrulymedia.com, 2743945877, RESELLER +media.net, 8CUN4Y5Y3, RESELLER +sharethrough.com, S2rESyUH, RESELLER, d53b998a7bd4ecd2 +supply.colossusssp.com, 181, RESELLER, 6c5b49d96ec1b458 +triplelift.com, 11883, RESELLER, 6c33edb13117fd86 +ottadvisors.com, 122744684168, RESELLER + + +# Smile Wanted + +smilewanted.com, 5288, DIRECT +rubiconproject.com, 19814, RESELLER, 0bfd66d529a55807 +appnexus.com, 10040, RESELLER, f5ab79cb980f11d1 +smartadserver.com, 2491, RESELLER +pubmatic.com, 158810, RESELLER, 5d62403b186f2ace +openx.com, 557083110, RESELLER, 6a698e2ec38604c6 +adform.com, 3027, RESELLER +video.unrulymedia.com, 1767448067723954599, RESELLER +sharethrough.com, TZ1ahFV8, RESELLER, d53b998a7bd4ecd2 +onetag.com, 7f5d22b0006ab5a, RESELLER + + +# iion + +iion.io, 10184, DIRECT, 013a29748465dc57 +adsparc.com, 2056, RESELLER +sonobi.com, 35f7241993, RESELLER, d1a215d9eb5aee9e +lijit.com, 270673, RESELLER, fafdf38b16bf6b2b +appnexus.com, 14538, RESELLER, f5ab79cb980f11d1 +adform.com, 2985, RESELLER, 9f5210a2f0999e32 +video.unrulymedia.com, 346830101, RESELLER, 29bc7d05d309e1bc +loopme.com, 11594, RESELLER, 6c8d5f95897a5a3b +improvedigital.com, 2226, RESELLER +rubiconproject.com, 25322, RESELLER, 0bfd66d529a55807 +pubmatic.com, 164778, RESELLER, 5d62403b186f2ace +smartadserver.com, 4618, RESELLER, 060d053dcf45cbf3 +onetag.com, 89dd525077ba15e, RESELLER +media.net, 8CU8564R6, RESELLER +sharethrough.com, 249198ac, RESELLER, d53b998a7bd4ecd2 +smilewanted.com, 5098, RESELLER +richaudience.com, 6InWSNO0Xo, RESELLER +insticator.com, f01725e4-53f4-40e0-95bb-c4206ee0b577, RESELLER, b3511ffcafb23a32 +adyoulike.com, c614fe3fe0114cbf1f9d7d878e6e7ee7, RESELLER, 4ad745ead2958bf7 +smaato.com, 1100057454, RESELLER, 07bcf65f187117b4 +thebrave.io, 1234647, RESELLER, c25b2154543746ac +admanmedia.com, 2160, RESELLER +minutemedia.com, 01j6arbm5tne, RESELLER +pubmatic.com, 161683, RESELLER, 5d62403b186f2ace +appnexus.com, 8381, RESELLER, f5ab79cb980f11d1 +rubiconproject.com, 17598, RESELLER, 0bfd66d529a55807 +cpmstar.com, 54333, RESELLER, 1b929e6459dfc260 +rubiconproject.com, 23330, RESELLER, 0bfd66d529a55807 +appnexus.com, 9624, RESELLER, f5ab79cb980f11d1 +openx.com, 541079309, RESELLER, 6a698e2ec38604c6 +risecodes.com, 67d9a758597e640001744af3, RESELLER +toponad.com, 168119612ada3d, RESELLER, 1d49fe424a1a456d +programmaticx.ai, 6244523, RESELLER, b42d42eb28400efa +datawrkz.com, 2585, RESELLER +eskimi.com, 2020001133, RESELLER +opera.com, pub13158599038336, RESELLER, 55a0c5fd61378de3 + + +# Kueez + +kueez.com, afdc2db641e0e1aaa6d4da5e9b438abf, DIRECT +appnexus.com, 8826,RESELLER, f5ab79cb980f11d1 +sharethrough.com, n98xDzeL, RESELLER, d53b998a7bd4ecd2 +media.net,8CU4JTRF9, RESELLER +lijit.com, 407406, RESELLER, fafdf38b16bf6b2b #SOVRN +yieldmo.com, 3133660606033240149, RESELLER +pubmatic.com, 162110, RESELLER, 5d62403b186f2ace +themediagrid.com, UOT45Z, RESELLER, 35d5010d7789b49d +openx.com, 557564833, RESELLER, 6a698e2ec38604c6 +rubiconproject.com, 16920, RESELLER, 0bfd66d529a55807 +sonobi.com, 4c4fba1717, RESELLER, d1a215d9eb5aee9e +smartadserver.com,4288,RESELLER,060d053dcf45cbf3 +onetag.com,6e053d779444c00, RESELLER +adform.com,2926,RESELLER +zetaglobal.com, 108, RESELLER +improvedigital.com,2106,RESELLER +33across.com, 0010b00002ODU4HAAX, RESELLER, bbea06d9c4d2853c +video.unrulymedia.com, 3486482593, RESELLER +start.io, 185522363, RESELLER +loopme.com, 11576, RESELLER, 6c8d5f95897a5a3b +trustedstack.com, TSIO6G4I5, RESELLER +themediagrid.com, 7H3QAS, RESELLER, 35d5010d7789b49d +smaato.com, 1100059464, RESELLER, 07bcf65f187117b4 +smaato.com, 1100004890, RESELLER, 07bcf65f187117b4 + + +# Seedtag + +seedtag.com,67a4eeefe958720006afb8aa, DIRECT +xandr.com, 4009, RESELLER, f5ab79cb980f11d1 +beachfront.com, 15250, RESELLER, e2541279e8e2ca4d +smartadserver.com, 3050, RESELLER +rubiconproject.com, 17280, RESELLER, 0bfd66d529a55807 +pubmatic.com, 157743, RESELLER, 5d62403b186f2ace +openx.com, 558758631, RESELLER, 6a698e2ec38604c6 +lijit.com, 397546, RESELLER, fafdf38b16bf6b2b +onetag.com, 75601b04186d260, RESELLER +sharethrough.com, AXS5NfBr, RESELLER, d53b998a7bd4ecd2 +loopme.com, 11712, RESELLER, 6c8d5f95897a5a3b +video.unrulymedia.com, 724823153, RESELLER +adform.com, 1889, RESELLER +33across.com, 0010b00002MptHCAAZ, RESELLER, bbea06d9c4d2853c +adyoulike.com, 83d15ef72d387a1e60e5a1399a2b0c03, RESELLER, 4ad745ead2958bf7 +improvedigital.com, 1680, RESELLER + + +# OptiDigital + +optidigital.com,p321,DIRECT +pubmatic.com,158939,RESELLER,5d62403b186f2ace +rubiconproject.com,20336,RESELLER,0bfd66d529a55807 +smartadserver.com,3379,RESELLER,060d053dcf45cbf3 +themediagrid.com,3ETIX5,RESELLER,35d5010d7789b49d +triplelift.com,8183,RESELLER,6c33edb13117fd86 +appnexus.com,12190,RESELLER,f5ab79cb980f11d1 +onetag.com,806eabb849d0326,RESELLER +rtbhouse.com,mSu1piUSmB9TF4AQDGk4,RESELLER +33across.com,001Pg00000HMy0YIAT,RESELLER,bbea06d9c4d2853c +e-planning.net,a76893b96338e7e9,RESELLER,c1ba615865ed87b2 +video.unrulymedia.com,731539260,RESELLER + + +# Datablocks + +datablocks.net, 2729574, DIRECT, a5dfa362888cedea +rubiconproject.com, 26288, RESELLER, 0bfd66d529a55807 +appnexus.com, 11794, RESELLER, f5ab79cb980f11d1 +openx.com, 541013810, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 162168, RESELLER, 5d62403b186f2ace +sharethrough.com, a47bc2a5, RESELLER, d53b998a7bd4ecd2 +152media.info, 152M72, RESELLER +media.net, 8CUM6VBVM, RESELLER +onetag.com, 74c8f583aa2ba05, RESELLER +amxrtb.com, 105199438, RESELLER +gumgum.com,14204,RESELLER,ffdef49475d318a9 +lijit.com, 273900, RESELLER, fafdf38b16bf6b2b +sonobi.com, 911eaf6707, RESELLER, d1a215d9eb5aee9e +zetaglobal.net, 505, RESELLER + + +# Insticator/Cool Media + +insticator.com,ea7873c5-662b-4e03-a3f3-cec1a01d8a95,DIRECT,b3511ffcafb23a32 +sharethrough.com,Q9IzHdvp,RESELLER,d53b998a7bd4ecd2 +rubiconproject.com,17062,RESELLER,0bfd66d529a55807 +risecodes.com,6124caed9c7adb0001c028d8,RESELLER +pubmatic.com,95054,RESELLER,5d62403b186f2ace +video.unrulymedia.com,136898039,RESELLER +openx.com,558230700,RESELLER,6a698e2ec38604c6 +lijit.com,257618,RESELLER,fafdf38b16bf6b2b +appnexus.com,3695,RESELLER,f5ab79cb980f11d1 +minutemedia.com,01garg96c88b,RESELLER + + +# Rich Audience + +richaudience.com, uUzZIc9lYN, DIRECT +appnexus.com, 8233, RESELLER, f5ab79cb980f11d1 +pubmatic.com, 81564, RESELLER, 5d62403b186f2ace +pubmatic.com, 156538, RESELLER, 5d62403b186f2ace +rubiconproject.com, 13510, RESELLER, 0bfd66d529a55807 +adform.com, 1942, RESELLER +lijit.com, 249425, RESELLER, fafdf38b16bf6b2b +video.unrulymedia.com, 592728597, RESELLER +smartadserver.com, 2640, RESELLER +adyoulike.com, f1dfbb7f133fbdb25c96e7d85a5e628b, RESELLER, 4ad745ead2958bf7 +themediagrid.com, P19GFJ, RESELLER, 35d5010d7789b49d +onetag.com, 8d4b087143c49f0, RESELLER +openx.com, 539625136, RESELLER, 6a698e2ec38604c6 + + +# InfoLinks + +infolinks.com, 3434212, DIRECT +pubmatic.com, 156872, RESELLER, 5d62403b186f2ace +xandr.com, 3251, RESELLER +lijit.com, 268479, RESELLER, fafdf38b16bf6b2b +media.net, 8CUY6IX4H, RESELLER +openx.com, 543174347, RESELLER, 6a698e2ec38604c6 +video.unrulymedia.com, 2221906906, RESELLER +improvedigital.com, 2016, RESELLER +33across.com, 0010b00002CpYhEAAV, RESELLER +sharethrough.com, 1SghQadK, RESELLER +kueez.com, f3b3789cda3d7eb0e9fa1c41057da524, RESELLER + + +# Tappx + +tappx.com,43594,DIRECT,9f375a07da0318ec +tappx.com,43574,DIRECT,9f375a07da0318ec +pubmatic.com,92509,RESELLER,5d62403b186f2ace +pubmatic.com,158111,RESELLER,5d62403b186f2ace +smartadserver.com,1692,RESELLER,060d053dcf45cbf3 +loopme.com,11227,RESELLER,6c8d5f95897a5a3b +lijit.com,396126,RESELLER,fafdf38b16bf6b2b +rubiconproject.com,13856,RESELLER,0bfd66d529a55807 +sharethrough.com,iHIgeRWP,RESELLER,d53b998a7bd4ecd2 +videoheroes.tv,212473,RESELLER,064bc410192443d8 +video.unrulymedia.com,3341072718,RESELLER +thebrave.io,1234661,RESELLER,c25b2154543746ac +improvedigital.com,1934,RESELLER +33across.com,0010b00001siQHqAAM,RESELLER,bbea06d9c4d2853c +appnexus.com,10824,RESELLER,f5ab79cb980f11d1 +appnexus.com,9569,RESELLER,f5ab79cb980f11d1 +keenkale.com,170624,RESELLER +themediagrid.com,4FDQYH,RESELLER,35d5010d7789b49d +inmobi.com,ec6f6ceb8bb1440ba5455644ec96c275,RESELLER,83e75a7ae333ca9d + + +# Illumin + +admanmedia.com, 2305, DIRECT +pubmatic.com, 165117, RESELLER, 5d62403b186f2ace +pubmatic.com, 158481, RESELLER, 5d62403b186f2ace +pubmatic.com, 162974, RESELLER, 5d62403b186f2ace +rubiconproject.com, 14558, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 25386, RESELLER, 0bfd66d529a55807 +openx.com, 540866936, RESELLER, 6a698e2ec38604c6 +appnexus.com, 15349, RESELLER, f5ab79cb980f11d1 +appnexus.com, 12700, RESELLER, f5ab79cb980f11d1 +video.unrulymedia.com, 3948367200, RESELLER +sharethrough.com, XeKuhSkz, RESELLER, d53b998a7bd4ecd2 +33across.com, 0015a00002egvRSAAY, RESELLER, bbea06d9c4d2853c +smartadserver.com, 3713, RESELLER, 060d053dcf45cbf3 +zetaglobal.net, 757, RESELLER +adyoulike.com, a2226c27fc2a6773f6a2b365e013513a, RESELLER, 4ad745ead2958bf7 +loopme.com, 11386, RESELLER, 6c8d5f95897a5a3b +adform.com, 2671, RESELLER +smaato.com, 1100058015, RESELLER, 07bcf65f187117b4 +richaudience.com, iKKFhsvJ2v, RESELLER +yieldmo.com, 2807970144171533194, RESELLER +conversantmedia.com, 100308, RESELLER, 03113cd04947736d +themediagrid.com, A8X5S7, RESELLER, 35d5010d7789b49d +lijit.com, 417620, RESELLER, fafdf38b16bf6b2b +sonobi.com, 7b37f8ccbc, RESELLER, d1a215d9eb5aee9e +triplelift.com, 12456, RESELLER, 6c33edb13117fd86 +amxrtb.com, 105199820, RESELLER +media.net, 8CU58PCO4, RESELLER +trustedstack.com, TS5UCV3O4, RESELLER +improvedigital.com, 2316, RESELLER + + +# Trustedstack + +trustedstack.com, TS6Q2XDD0, DIRECT +rubiconproject.com, 26144, RESELLER, 0bfd66d529a55807 +openx.com, 559911747, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 164187, RESELLER, 5d62403b186f2ace +onetag.com, 87f58fe90234d0e, RESELLER +video.unrulymedia.com, 799061815, RESELLER +sharethrough.com, KGPeiFc6, RESELLER, d53b998a7bd4ecd2 +lijit.com, 551846, RESELLER, fafdf38b16bf6b2b + + +# Legacy or Unique + +playwire.com,1025558,DIRECT + +managerdomain=playwire.com +ownerdomain=openfront.io + +# Playwire Ads.txt file v10.2 +contact=sales@playwire.com + +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @ @ +# @ @@ @ +# @ @@ @@@ @ +# @ @@@@@@@@@@ @@ @@@@@@@@@@ @@ @@@ @@ @@@@ @@@ @@@ @@@@@@@@ @@@@@@@@@ @ +# @ @@@ @@ @@ @@@@@@@@@@ @@ @@@ @@ @@@@@@ @@@ @@@ @@ @@@@@@@@@ @ +# @ @@@ @@ @@ @@@ @@ @@ @@@ @@@@ @@@@ @@@ @@ @@ @ +# @ @@@@@@@@ @@ @@@@@@@@ @@@@@@@@ @@ @@ @@@ @@ @@@@@@@ @ +# @ @@@ @@@@@@@@@ @ +# @ @ +# @ @ +# @ Content Owners, no other company will demand more for you than Playwire. @ +# @ Get the demand you want by working with Playwire to amplify your revenue and @ +# @ monetize your content at scale. Visit playwire.com to learn more. @ +# @ @ +# @ Advertisers, Playwire is your one partner and all-in-one solution. Supply, @ +# @ Creative, Display, Data, Social Extension, OOH, and Experiential - we manage @ +# @ your entire multiplatform media process with a focus on brand safety. You get @ +# @ more with Playwire. Visit playwire.com/advertisers for more information. @ +# @ @ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +#A9 +aps.amazon.com,bd056b42-51db-43ce-9a8e-3b11319b5d1f,DIRECT +rubiconproject.com,18020,DIRECT,0bfd66d529a55807 +risecodes.com, 63832beef8189a00015cb6d3, DIRECT +appnexus.com,3663,DIRECT,f5ab79cb980f11d1 +appnexus.com,1908,DIRECT,f5ab79cb980f11d1 +appnexus.com,1356,DIRECT,f5ab79cb980f11d1 + +#Appnexus +appnexus.com, 7140, DIRECT, f5ab79cb980f11d1 + +#Blis +blis.com, 1223, DIRECT, 61453ae19a4b73f4 +rubiconproject.com, 16928, RESELLER, 0bfd66d529a55807 + +#Conversant +conversantmedia.com, 40510, DIRECT, 03113cd04947736d + +#Google +google.com, pub-3004679189235742, DIRECT, f08c47fec0942fa0 +google.com, pub-5812357352335075, DIRECT, f08c47fec0942fa0 +google.com, pub-9728353415461720, DIRECT, f08c47fec0942fa0 + +#Gumgum +gumgum.com, 11602, DIRECT, ffdef49475d318a9 +improvedigital.com, 1884, RESELLER +google.com, pub-3848273848634341, RESELLER, f08c47fec0942fa0 +contextweb.com, 558355, RESELLER, 89ff185a4c4e857c + +#Index Exchange +indexexchange.com, 192410, DIRECT, 50b1c356f2c5c8fc +indexexchange.com, 186266, DIRECT, 50b1c356f2c5c8fc +indexexchange.com, 193336, DIRECT, 50b1c356f2c5c8fc +indexexchange.com, 186779, DIRECT, 50b1c356f2c5c8fc +indexexchange.com, 209857, DIRECT, 50b1c356f2c5c8fc + +#Inmobi +inmobi.com, 6801ebe3b36d4afba25f67b2d0e9d9ed, DIRECT, 83e75a7ae333ca9d + +#Kulture +dxkulture.com, 12005, DIRECT + +#MediaGrid +themediagrid.com, 5A8D1U, DIRECT, 35d5010d7789b49d +themediagrid.com, 6QY7B4, DIRECT, 35d5010d7789b49d +themediagrid.com, KA3Q45, DIRECT, 35d5010d7789b49d + +#Media.net +media.net, 8CUIBM874, DIRECT +media.net, 8CUP47128, DIRECT +media.net, 8CU11059L, DIRECT + +#Nativo +nativo.com, 5722, DIRECT, 59521ca7cc5e9fee + +#Nexxen +video.unrulymedia.com, 3832544212, DIRECT + +#OpenX +openx.com, 537145215, DIRECT, 6a698e2ec38604c6 +openx.com, 542511403, DIRECT, 6a698e2ec38604c6 +openx.com, 543969731, DIRECT, 6a698e2ec38604c6 +openx.com, 539872073, DIRECT, 6a698e2ec38604c6 + +#Pubmatic +pubmatic.com, 158326, DIRECT, 5d62403b186f2ace +pubmatic.com, 159344, DIRECT, 5d62403b186f2ace + +#RiseCodes +risecodes.com, 6280c6f1899612000123320b, DIRECT +risecodes.com, 66fac9081efdb80001a3dc64, DIRECT +sharethrough.com, 5926d422, RESELLER, d53b998a7bd4ecd2 +pubmatic.com, 160295, RESELLER, 5d62403b186f2ace +rubiconproject.com, 23876, RESELLER, 0bfd66d529a55807 +xandr.com, 14082, RESELLER +media.net, 8CUQ6928Q, RESELLER +video.unrulymedia.com, 335119963, RESELLER +loopme.com, 11362, RESELLER, 6c8d5f95897a5a3b +lijit.com, 405318, RESELLER, fafdf38b16bf6b2b +yieldmo.com, 2754490424016969782, RESELLER +gumgum.com, 16112, RESELLER, ffdef49475d318a9 +onetag.com, 69f48c2160c8113, RESELLER + +#Rubicon +rubiconproject.com, 12556, DIRECT, 0bfd66d529a55807 +rubiconproject.com, 18110, DIRECT, 0bfd66d529a55807 +rubiconproject.com, 27232, DIRECT, 0bfd66d529a55807 #flex + +#Sharethrough +sharethrough.com, 5b0da9d4, DIRECT, d53b998a7bd4ecd2 +pubmatic.com, 156557, RESELLER, 5d62403b186f2ace +rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 +openx.com, 540274407, RESELLER, 6a698e2ec38604c6 +video.unrulymedia.com, 266978658, RESELLER +smartadserver.com, 5247, DIRECT, 060d053dcf45cbf3 +sharethrough.com, 5247, DIRECT, d53b998a7bd4ecd2 + +#Sonobi +sonobi.com, 2da7a08406, DIRECT, d1a215d9eb5aee9e +sonobi.com, 0f403b451d, DIRECT, d1a215d9eb5aee9e + +#Sovrn +lijit.com, 230297, DIRECT, fafdf38b16bf6b2b + +#Teads +teads.tv, 16934, DIRECT, 15a9c44f6d26cbe1 + +#TradeDesk +playwire.com, 1, DIRECT + +#TripleLift +triplelift.com, 6644, DIRECT, 6c33edb13117fd86 +triplelift.com, 6732, DIRECT, 6c33edb13117fd86 +triplelift.com, 6616, DIRECT, 6c33edb13117fd86 +triplelift.com, 6613, DIRECT, 6c33edb13117fd86 +triplelift.com, 6644-EB, DIRECT, 6c33edb13117fd86 +triplelift.com, 6616-EB, DIRECT, 6c33edb13117fd86 +triplelift.com, 6732-EB, DIRECT, 6c33edb13117fd86 +triplelift.com, 8916, DIRECT, 6c33edb13117fd86 +triplelift.com, 8916-EB, DIRECT, 6c33edb13117fd86 +triplelift.com, 13434, DIRECT, 6c33edb13117fd86 +triplelift.com, 13434-EB, DIRECT, 6c33edb13117fd86 +triplelift.com, 13598, DIRECT, 6c33edb13117fd86 +triplelift.com, 4703, DIRECT, 6c33edb13117fd86 + +#TrustX +trustx.org, 100128, DIRECT, 1d2c8a747a749d25 +trustx.org, 6163, DIRECT, 1d2c8a747a749d25 + +#Vidazoo +vidazoo.com, 66f94ed86cb7baf371858cad, DIRECT, b6ada874b4d7d0b2 +video.unrulymedia.com, 2743945877, RESELLER +rubiconproject.com, 17130, RESELLER, 0bfd66d529a55807 +appnexus.com, 2794, RESELLER, f5ab79cb980f11d1 +openx.com, 541017750, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 159988, RESELLER, 5d62403b186f2ace +lijit.com, 222372, RESELLER, fafdf38b16bf6b2b + +#Wunderkind +wunderkind.co, 7202, DIRECT +themediagrid.com, N71MIF, DIRECT, 35d5010d7789b49d +pubmatic.com, 156512, RESELLER, 5d62403b186f2ace +indexexchange.com, 183753, RESELLER, 50b1c356f2c5c8fc +rubiconproject.com, 20986, RESELLER, 0bfd66d529a55807 + +#Yieldmo +yieldmo.com, 2990721854664024411, DIRECT + +#SHE +pmc.com, 1243186, DIRECT, 8dd52f825890bb44 +rubiconproject.com, 10278, RESELLER, 0bfd66d529a55807 \ No newline at end of file diff --git a/resources/lang/en.json b/resources/lang/en.json index 860f3f7ae..c31101bc9 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -6,7 +6,18 @@ "lang_code": "en" }, "common": { - "close": "Close" + "close": "Close", + "available": "Available", + "preset_max": "Max", + "summary_send": "Send", + "summary_keep": "Keep", + "cancel": "Cancel", + "send": "Send", + "cap_label": "Cap", + "cap_tooltip": "Recipient’s remaining capacity", + "target_dead": "Target eliminated", + "target_dead_note": "You can't send resources to an eliminated player.", + "none": "None" }, "main": { "title": "OpenFront (ALPHA)", @@ -590,8 +601,6 @@ "troops": "Troops", "betrayals": "Betrayals", "traitor": "Traitor", - "stable": "Stable", - "trust": "Trust", "trading": "Trading", "active": "Active", "stopped": "Stopped", @@ -600,9 +609,6 @@ "nuke": "Nukes sent by them to you", "start_trade": "Start Trading", "stop_trade": "Stop Trading", - "yes": "Yes", - "no": "No", - "none": "None", "alliances": "Alliances", "flag": "Flag", "chat": "Chat", @@ -615,6 +621,23 @@ "send_gold": "Send Gold", "emotes": "Emojis" }, + "send_troops_modal": { + "title_with_name": "Send Troops to {name}", + "available_tooltip": "Your current available troops", + "min_keep": "Min keep", + "min_keep_pct": "(30%)", + "slider_tooltip": "{{percent}}% • {{amount}}", + "toggle_attack_bar_mode": "Use attack bar to send troops", + "warning_attackbar": "Once enabled, you can't open this modal directly. You'll only send troops via the attack bar.", + "aria_slider": "Troops slider", + "capacity_note": "Receiver can accept only {{amount}} right now." + }, + "send_gold_modal": { + "title_with_name": "Send Gold to {name}", + "available_tooltip": "Your current available gold", + "aria_slider": "Amount slider", + "slider_tooltip": "{{percent}}% • {{amount}}" + }, "replay_panel": { "replay_speed": "Replay speed", "game_speed": "Game speed", @@ -633,7 +656,8 @@ "choose_spawn": "Choose a starting location" }, "territory_patterns": { - "title": "Select Territory Skin", + "title": "Skins", + "colors": "Colors", "purchase": "Purchase", "blocked": { "login": "You must be logged in to access this pattern.", diff --git a/resources/lang/eo.json b/resources/lang/eo.json index 1f96be7c9..4703c919d 100644 --- a/resources/lang/eo.json +++ b/resources/lang/eo.json @@ -130,9 +130,8 @@ "disable_nations": "Malŝalti naciojn", "instant_build": "Tujkonstruaĵo", "infinite_gold": "Senfina oro", - "donate_gold": "Donaci oron", "infinite_troops": "Senfinaj trupoj", - "donate_troops": "Donaci trupojn", + "compact_map": "Karteto", "disable_nukes": "Malŝalti nukleajn armilojn", "enables_title": "Ebligi Agordojn", "start": "Komenci la ludon" @@ -177,8 +176,10 @@ "halkidiki": "Ĥalkidiko", "straitofgibraltar": "Ĝibraltara Markolo", "italia": "Italio", + "japan": "Japanio", "yenisei": "Jenisejo", - "pluto": "Plutono" + "pluto": "Plutono", + "montreal": "Montrealo" }, "map_categories": { "continental": "Kontinenta", @@ -196,8 +197,9 @@ "join_lobby": "Aliĝi al la ludejo", "checking": "Kontrolado de la ludejo...", "not_found": "Ludejo ne trovita. Bonvolu kontroli la ID kaj reprovi.", - "error": "Eraro okazis. Bonvolu provi denove.", - "joined_waiting": "Sukcese aliĝis! Atendante la komencon de la ludo..." + "error": "Eraro okazis. Bonvolu reprovi aŭ kontaktu helpon.", + "joined_waiting": "Sukcese aliĝis! Atendante la komencon de la ludo...", + "version_mismatch": "Ĉi tiu ludo estis kreita kun malsama versio. Ne eblas aliĝi." }, "public_lobby": { "join": "Kunigi la baldaŭan ludon", @@ -227,6 +229,7 @@ "donate_gold": "Donacu oron", "infinite_troops": "Senfinaj trupoj", "donate_troops": "Donacu trupojn", + "compact_map": "Karteto", "enables_title": "Ebligi Agordojn", "player": "Ludanto", "players": "Ludantoj", @@ -314,6 +317,8 @@ "territory_patterns_desc": "Elektu ĉu montri teritoriajn ŝablonajn dezajnojn en la ludo", "performance_overlay_label": "Efikeco Supermetaĵo", "performance_overlay_desc": "Ŝalti la efikecon supermetaĵon. Kiam ebligita, la efikeco supermetaĵo estos montrata. Premu la Majuskligan klavon\n+ D dum la ludo por ŝalti.", + "performance_overlay_enabled": "Funkciada supermetaĵo ŝaltita", + "performance_overlay_disabled": "Funkciada supermetaĵo malŝaltita", "easter_writing_speed_label": "Rapidskriba multiganto", "easter_writing_speed_desc": "Alĝustigu kiom rapide vi ŝajnigas kodi (x1–x100)", "easter_bug_count_label": "Nombro da cimoj", @@ -494,7 +499,8 @@ "nation": "Nacio", "player": "Ludanto", "team": "Teamo", - "d_troops": "Defendante trupoj", + "alliance_timeout": "Alianco finiĝas en", + "troops": "Trupoj", "a_troops": "Atakante trupoj", "gold": "Oro", "ports": "Havenoj", @@ -585,7 +591,7 @@ "choose_spawn": "Elektu komencan lokon" }, "territory_patterns": { - "title": "Elekti Teritoriajn Ŝablonojn", + "title": "Elekti Teritoria Ŝablono", "purchase": "Aĉeti", "blocked": { "login": "Vi devas esti ensalutinta por aliri ĉi tiun ŝablonon.", @@ -644,5 +650,63 @@ "radial_menu": { "delete_unit_title": "Forigi trupunon", "delete_unit_description": "Alklaku por forigi la plej proksiman trupunon" + }, + "discord_user_header": { + "avatar_alt": "Profilbildo" + }, + "player_stats_table": { + "building_stats": "Konstruaĵaj statistikoj", + "ship_arrivals": "Ŝipoj alvenoj", + "nuke_stats": "Bomboj statistikoj", + "player_metrics": "Ludanta statistikoj", + "building": "Konstruaĵo", + "ship_type": "Ŝipa tipo", + "weapon": "Armilo", + "built": "Konstruita", + "destroyed": "Detruita", + "captured": "Ekkaptita", + "lost": "Perdita", + "hits": "Frapoj", + "launched": "Lanĉita", + "landed": "Surterigita", + "sent": "Sendita", + "arrived": "Alveninta", + "attack": "Atako", + "received": "Ricevita", + "cancelled": "Nuligita", + "count": "Nombro", + "gold": "Oro", + "workers": "Laboristoj", + "war": "Milito", + "trade": "Komerci", + "steal": "Ŝteli", + "unit": { + "city": "Urbo", + "port": "Haveno", + "defp": "Defenda Posteno", + "saml": "SAM-lanĉilo", + "silo": "Misila Silo", + "wshp": "Militŝipo", + "fact": "Fabriko", + "trade": "Komerca ŝipo", + "trans": "Transporta ŝipo", + "abomb": "Atombombo", + "hbomb": "Hidrogenbombo", + "mirv": "MIRV", + "mirvw": "MIRV-kapo" + } + }, + "game_list": { + "recent_games": "Lastaj ludoj", + "game_id": "Ludo ID", + "mode": "Reĝimo", + "mode_ffa": "Ĉiu por si", + "mode_team": "Teamo", + "view": "Vido", + "details": "Detaloj", + "started": "Komencita", + "map": "Karto", + "difficulty": "Malfacileco", + "type": "Tipo" } } diff --git a/resources/lang/fr.json b/resources/lang/fr.json index f74148320..fda7077c5 100644 --- a/resources/lang/fr.json +++ b/resources/lang/fr.json @@ -130,9 +130,8 @@ "disable_nations": "Désactiver les nations", "instant_build": "Construction instantanée", "infinite_gold": "Or infini", - "donate_gold": "Donner de l'or", "infinite_troops": "Troupes infinies", - "donate_troops": "Donner des troupes", + "compact_map": "Mini-carte", "disable_nukes": "Désactiver les armes nucléaires", "enables_title": "Activer les paramètres", "start": "Commencer la partie" @@ -177,8 +176,10 @@ "halkidiki": "Chalcidique", "straitofgibraltar": "Détroit de Gibraltar", "italia": "Italie", + "japan": "Japon", "yenisei": "Ienisseï", - "pluto": "Pluton" + "pluto": "Pluton", + "montreal": "Montréal" }, "map_categories": { "continental": "Continental", @@ -196,8 +197,9 @@ "join_lobby": "Rejoindre le salon", "checking": "Vérification du salon...", "not_found": "Salon introuvable. Veuillez vérifier l'ID et réessayer.", - "error": "Une erreur est survenue. Veuillez réessayer.", - "joined_waiting": "Rejoint avec succès ! En attente du début de la partie..." + "error": "Une erreur s'est produite. Veuillez réessayer ou contacter le support.", + "joined_waiting": "Rejoint avec succès ! En attente du début de la partie...", + "version_mismatch": "Cette partie a été créée avec une version différente. Impossible de rejoindre." }, "public_lobby": { "join": "Rejoindre la prochaine partie", @@ -227,6 +229,7 @@ "donate_gold": "Donner de l'or", "infinite_troops": "Troupes infinies", "donate_troops": "Donner des troupes", + "compact_map": "Mini-carte", "enables_title": "Activer les paramètres", "player": "Joueur", "players": "Joueurs", @@ -314,6 +317,8 @@ "territory_patterns_desc": "Choisissez si vous voulez afficher les motifs de territoire en jeu", "performance_overlay_label": "Surcouche de performances", "performance_overlay_desc": "Activer/désactiver la surcouche de performances. Lorsqu'elle est activée, la surcouche de performances sera affichée. Appuyez sur Maj+D pendant le jeu pour l\"activer.", + "performance_overlay_enabled": "Affichage des performances activé", + "performance_overlay_disabled": "Affichage des performances désactivé", "easter_writing_speed_label": "Multiplicateur de vitesse d'écriture", "easter_writing_speed_desc": "Ajuster la vitesse à laquelle vous prétendez coder (x1–x100)", "easter_bug_count_label": "Nombre de bugs", @@ -494,7 +499,8 @@ "nation": "Nation", "player": "Joueur", "team": "Équipe", - "d_troops": "Troupes en défense", + "alliance_timeout": "L'alliance se termine dans", + "troops": "Troupes", "a_troops": "Troupes en attaque", "gold": "Or", "ports": "Ports", @@ -585,7 +591,7 @@ "choose_spawn": "Choisissez un emplacement de départ" }, "territory_patterns": { - "title": "Sélectionnez un motif de territoire", + "title": "Sélectionner un motif de territoire", "purchase": "Acheter", "blocked": { "login": "Vous devez être connecté pour accéder à ce motif.", @@ -644,5 +650,63 @@ "radial_menu": { "delete_unit_title": "Supprimer une unité", "delete_unit_description": "Cliquez pour supprimer l'unité la plus proche" + }, + "discord_user_header": { + "avatar_alt": "Avatar" + }, + "player_stats_table": { + "building_stats": "Statistiques de construction", + "ship_arrivals": "Arrivées de navire", + "nuke_stats": "Statistiques de bombes", + "player_metrics": "Statistiques du joueur", + "building": "Batîment", + "ship_type": "Type de navire", + "weapon": "Arme", + "built": "Construit", + "destroyed": "Détruit", + "captured": "Capturé", + "lost": "Perdu", + "hits": "Coups", + "launched": "Lancés", + "landed": "Atterris", + "sent": "Envoyés", + "arrived": "Arrivés", + "attack": "Attaque", + "received": "Reçu", + "cancelled": "Annulé", + "count": "Compte", + "gold": "Or", + "workers": "Ouvriers", + "war": "Guerre", + "trade": "Commercer", + "steal": "Voler", + "unit": { + "city": "Ville", + "port": "Port", + "defp": "Poste de défense", + "saml": "Lanceur de SAM", + "silo": "Silo à missiles", + "wshp": "Navire de guerre", + "fact": "Usine", + "trade": "Bateau de commerce", + "trans": "Bateau de transport", + "abomb": "Bombe atomique", + "hbomb": "Bombe à hydrogène", + "mirv": "MIRV", + "mirvw": "Ogive de MIRV" + } + }, + "game_list": { + "recent_games": "Parties récentes", + "game_id": "ID de la partie", + "mode": "Mode", + "mode_ffa": "Chacun pour soi", + "mode_team": "Équipe", + "view": "Vue", + "details": "Détails", + "started": "Débuté", + "map": "Carte", + "difficulty": "Difficulté", + "type": "Type" } } diff --git a/resources/lang/hu.json b/resources/lang/hu.json index 95a9982a1..343380f01 100644 --- a/resources/lang/hu.json +++ b/resources/lang/hu.json @@ -130,9 +130,8 @@ "disable_nations": "Letiltott nemzetek", "instant_build": "Instant építés", "infinite_gold": "Végtelen arany", - "donate_gold": "Arany adományomzása", "infinite_troops": "Végtelen katonák", - "donate_troops": "Katonák adományozása", + "compact_map": "Mini térkép", "disable_nukes": "Nukleáris fegyverek letiltása", "enables_title": "Beállítások engedélyezése", "start": "Játék indítása" @@ -177,8 +176,10 @@ "halkidiki": "Halkidiki", "straitofgibraltar": "Gibraltári-szoros", "italia": "Olaszország", + "japan": "Japán", "yenisei": "Jenisej", - "pluto": "Plútó" + "pluto": "Plútó", + "montreal": "Montreal" }, "map_categories": { "continental": "Kontinentális", @@ -196,8 +197,9 @@ "join_lobby": "Csatlakozás lobbyhoz", "checking": "Lobby ellenőrzése...", "not_found": "Lobby nem található. Kérlek, ellenőrizd az azonosítót, és próbáld újra.", - "error": "Hiba történt. Kérlek, próbáld újra.", - "joined_waiting": "Sikeresen csatlakoztál! Várakozás a játék kezdésére..." + "error": "Hiba történt. \nKérjük próbáld újra, vagy lépj kapcsolatba velünk.", + "joined_waiting": "Sikeresen csatlakoztál! Várakozás a játék kezdésére...", + "version_mismatch": "Ez a játék egy másik verzióval lett létrehozva. Nem lehet csatlakozni." }, "public_lobby": { "join": "Csatlakozás a következő játékhoz", @@ -227,6 +229,7 @@ "donate_gold": "Arany adományozása", "infinite_troops": "Végtelen katonák", "donate_troops": "Katonák adományozása", + "compact_map": "Mini térkép", "enables_title": "Beállítások engedélyezése", "player": "Játékos", "players": "Játékosok", @@ -264,10 +267,10 @@ }, "unit_type": { "city": "Város", - "defense_post": "Védelmi poszt", + "defense_post": "Védelmi állás", "port": "Kikötő", "warship": "Hadihajó", - "missile_silo": "Rakéta siló", + "missile_silo": "Rakétasiló", "sam_launcher": "Rakétaelhárító rendszer", "atom_bomb": "Atombomba", "hydrogen_bomb": "Hidrogénbomba", @@ -314,6 +317,8 @@ "territory_patterns_desc": "Válaszd ki, hogy megjelenjenek-e a területmintázatok a játékban", "performance_overlay_label": "Teljesítmény kijelző", "performance_overlay_desc": "Kapcsoló a teljesítmény kijelzőhöz. Ha engedélyezve van, a teljesítmény kijelző megjelenik. A játék közben nyomd meg a Shift-D-t a váltáshoz.", + "performance_overlay_enabled": "Teljesítmény kijelző engedélyezve", + "performance_overlay_disabled": "Teljesítmény kijelző letiltva", "easter_writing_speed_label": "Írási sebesség szorzó", "easter_writing_speed_desc": "Állítsd be, milyen gyorsan szimulálod a kódolást (x1–x100)", "easter_bug_count_label": "Hiba számláló", @@ -494,7 +499,8 @@ "nation": "Nemzet", "player": "Játékos", "team": "Csapat", - "d_troops": "Védekező katonák", + "alliance_timeout": "Szövetség felbomlik", + "troops": "Katonák", "a_troops": "Támadó katonák", "gold": "Arany", "ports": "Kikötők", @@ -644,5 +650,63 @@ "radial_menu": { "delete_unit_title": "Egység törlése", "delete_unit_description": "Kattints a legközelebbi egység törléséhez" + }, + "discord_user_header": { + "avatar_alt": "Profilkép" + }, + "player_stats_table": { + "building_stats": "Épületstatisztikák", + "ship_arrivals": "Hajóérkezések", + "nuke_stats": "Nukleáris statisztikák", + "player_metrics": "Játékos mutatók", + "building": "Épület", + "ship_type": "Hajó típus", + "weapon": "Fegyver", + "built": "Épített", + "destroyed": "Megsemmisült", + "captured": "Elfoglalva", + "lost": "Elveszett", + "hits": "Találatok", + "launched": "Elindított", + "landed": "Célba ért", + "sent": "Elküldött", + "arrived": "Megérkezett", + "attack": "Támadás", + "received": "Fogadott", + "cancelled": "Megszakítva", + "count": "Mennyiség", + "gold": "Arany", + "workers": "Munkások", + "war": "Háború", + "trade": "Kereskedelem", + "steal": "Lopás", + "unit": { + "city": "Város", + "port": "Kikötő", + "defp": "Védelmi állás", + "saml": "Rakétaelhárító rendszer", + "silo": "Rakétasiló", + "wshp": "Hadihajó", + "fact": "Gyár", + "trade": "Kereskedelmi hajó", + "trans": "Szállítóhajó", + "abomb": "Atombomba", + "hbomb": "Hidrogénbomba", + "mirv": "MIRV", + "mirvw": "MIRV robbanófej" + } + }, + "game_list": { + "recent_games": "Legutóbbi Játékok", + "game_id": "Játék azonosító", + "mode": "Mód", + "mode_ffa": "Mindenki mindenki ellen", + "mode_team": "Csapat", + "view": "Nézet", + "details": "Részletek", + "started": "Elkezdődött", + "map": "Térkép", + "difficulty": "Nehézség", + "type": "Típus" } } diff --git a/resources/lang/ja.json b/resources/lang/ja.json index 39432afd1..087cad4f0 100644 --- a/resources/lang/ja.json +++ b/resources/lang/ja.json @@ -130,9 +130,8 @@ "disable_nations": "国家を無効化", "instant_build": "即時建設", "infinite_gold": "資金無限", - "donate_gold": "資金援助", "infinite_troops": "兵士無限", - "donate_troops": "軍事支援", + "compact_map": "ミニマップ", "disable_nukes": "核兵器使用禁止", "enables_title": "機能の有効化", "start": "ゲーム開始" @@ -177,8 +176,10 @@ "halkidiki": "ハルキディキ半島", "straitofgibraltar": "ジブラルタル海峡", "italia": "イタリア", + "japan": "日本", "yenisei": "エニセイ川", - "pluto": "冥王星" + "pluto": "冥王星", + "montreal": "モントリオール" }, "map_categories": { "continental": "大陸", @@ -196,8 +197,9 @@ "join_lobby": "ロビーに参加", "checking": "ロビーを確認中...", "not_found": "ロビーが見つかりません。IDを確認してもう一度お試しください。", - "error": "エラーが発生しました。もう一度お試しください。", - "joined_waiting": "参加に成功しました!ゲーム開始をお待ちください..." + "error": "エラーが発生しました。もう一度試すか、サポートにお問い合わせください。", + "joined_waiting": "参加に成功しました!ゲーム開始をお待ちください...", + "version_mismatch": "このゲームは別のバージョンで作成されました。参加できません。" }, "public_lobby": { "join": "次のゲームに参加", @@ -227,6 +229,7 @@ "donate_gold": "資金援助", "infinite_troops": "兵士無限", "donate_troops": "軍事支援", + "compact_map": "ミニマップ", "enables_title": "機能設定", "player": "プレイヤー", "players": "プレイヤー", @@ -314,6 +317,8 @@ "territory_patterns_desc": "ゲーム内で領土の模様を表示するかどうか", "performance_overlay_label": "パフォーマンスオーバーレイ", "performance_overlay_desc": "パフォーマンス表示(オーバーレイ)を切り替えます。有効にすると画面上にパフォーマンスオーバーレイが表示されます。ゲーム中は Shift+D を押して切り替えられます。", + "performance_overlay_enabled": "パフォーマンスオーバーレイ有効", + "performance_overlay_disabled": "パフォーマンスオーバーレイ無効", "easter_writing_speed_label": "書き込み速度の倍率", "easter_writing_speed_desc": "コードを書く速さを調節する(x1-x100)", "easter_bug_count_label": "バグの個数", @@ -494,7 +499,8 @@ "nation": "国家", "player": "プレイヤー", "team": "チーム", - "d_troops": "防衛兵士数", + "alliance_timeout": "同盟終了まで", + "troops": "軍隊", "a_troops": "攻撃兵士数", "gold": "資金", "ports": "港", @@ -585,7 +591,7 @@ "choose_spawn": "スタート地点を選んで下さい" }, "territory_patterns": { - "title": "領土の模様を選択", + "title": "領土スキンを選択", "purchase": "購入", "blocked": { "login": "このページにアクセスするにはログインしてください。", @@ -644,5 +650,63 @@ "radial_menu": { "delete_unit_title": "ユニットを削除する", "delete_unit_description": "クリックで最も近いユニットを削除します" + }, + "discord_user_header": { + "avatar_alt": "アバター" + }, + "player_stats_table": { + "building_stats": "建築物統計情報", + "ship_arrivals": "船舶到着数", + "nuke_stats": "核兵器統計情報", + "player_metrics": "プレイヤー統計情報", + "building": "建築物", + "ship_type": "船舶の種類", + "weapon": "兵器", + "built": "建設", + "destroyed": "破壊", + "captured": "鹵獲", + "lost": "損失", + "hits": "着弾", + "launched": "発射", + "landed": "着陸", + "sent": "送信", + "arrived": "到着", + "attack": "攻撃", + "received": "受信", + "cancelled": "取消", + "count": "数", + "gold": "資金", + "workers": "労働者", + "war": "戦争", + "trade": "取引", + "steal": "略奪", + "unit": { + "city": "都市", + "port": "港", + "defp": "防衛ポスト", + "saml": "SAMランチャー", + "silo": "ミサイル格納庫", + "wshp": "戦艦", + "fact": "工場", + "trade": "交易船", + "trans": "輸送船", + "abomb": "原子爆弾", + "hbomb": "水素爆弾", + "mirv": "MIRV", + "mirvw": "MIRV 弾頭" + } + }, + "game_list": { + "recent_games": "最近のゲーム", + "game_id": "ゲームID", + "mode": "モード", + "mode_ffa": "バトルロワイヤル", + "mode_team": "チーム", + "view": "見る", + "details": "詳細", + "started": "既に開始", + "map": "地図", + "difficulty": "難易度", + "type": "タイプ" } } diff --git a/resources/lang/ru.json b/resources/lang/ru.json index a7ea8c19f..a71adfafc 100644 --- a/resources/lang/ru.json +++ b/resources/lang/ru.json @@ -130,9 +130,8 @@ "disable_nations": "Отключить нации", "instant_build": "Мгновенная стройка", "infinite_gold": "Неограниченное золото", - "donate_gold": "Пожертвовать золото", "infinite_troops": "Неограниченные войска", - "donate_troops": "Пожертвовать войска", + "compact_map": "Мини-карта", "disable_nukes": "Отключить бомбы", "enables_title": "Разрешения", "start": "Начать игру" @@ -177,8 +176,10 @@ "halkidiki": "Халкидики", "straitofgibraltar": "Гибралтарский пролив", "italia": "Италия", + "japan": "Япония", "yenisei": "Енисей", - "pluto": "Плутон" + "pluto": "Плутон", + "montreal": "Монреаль" }, "map_categories": { "continental": "Континентальные", @@ -196,8 +197,9 @@ "join_lobby": "Присоединиться к лобби", "checking": "Проверка лобби...", "not_found": "Лобби не найдено. Пожалуйста, проверьте правильность ID и попробуйте ещё раз.", - "error": "Произошла ошибка. Пожалуйста, попробуйте ещё раз.", - "joined_waiting": "Вы успешно присоединились! Ожидание начала игры..." + "error": "Произошла ошибка. Пожалуйста, попробуйте ещё раз или обратитесь в службу поддержки.", + "joined_waiting": "Вы успешно присоединились! Ожидание начала игры...", + "version_mismatch": "Эта игра была создана в другой версии. Невозможно присоединиться." }, "public_lobby": { "join": "Присоединиться к следующей игре", @@ -227,6 +229,7 @@ "donate_gold": "Пожертвование золота", "infinite_troops": "Неограниченные войска", "donate_troops": "Пожертвование войск", + "compact_map": "Мини-карта", "enables_title": "Разрешения", "player": "Игрок", "players": "Игрока(-ов)", @@ -314,6 +317,8 @@ "territory_patterns_desc": "Выберите, показывать ли узоры территорий в игре", "performance_overlay_label": "Оверлей производительности", "performance_overlay_desc": "Включить/выключить оверлей производительности. Если включено, будет отображаться оверлей производительности. Нажмите Shift+D во время игры для включения/выключения.", + "performance_overlay_enabled": "Оверлей производительности включён", + "performance_overlay_disabled": "Оверлей производительности выключен", "easter_writing_speed_label": "Множитель скорости печати", "easter_writing_speed_desc": "Настройте скорость, с которой вы делаете вид, что программируете (x1–x100)", "easter_bug_count_label": "Количество багов", @@ -494,7 +499,8 @@ "nation": "Нация", "player": "Игрок", "team": "Команда", - "d_troops": "Войска защиты", + "alliance_timeout": "Конец союза через", + "troops": "Войска", "a_troops": "Войска атаки", "gold": "Золото", "ports": "Порты", @@ -644,5 +650,63 @@ "radial_menu": { "delete_unit_title": "Удалить объект", "delete_unit_description": "Нажмите, чтобы удалить ближайший объект" + }, + "discord_user_header": { + "avatar_alt": "Аватар" + }, + "player_stats_table": { + "building_stats": "Статистика строительства", + "ship_arrivals": "Прибытия кораблей", + "nuke_stats": "Статистика бомбардирования", + "player_metrics": "Статистика игрока", + "building": "Строительство", + "ship_type": "Тип корабля", + "weapon": "Оружие", + "built": "Построено", + "destroyed": "Уничтожено", + "captured": "Захвачено", + "lost": "Утеряно", + "hits": "Удары", + "launched": "Запущено", + "landed": "Приземлено", + "sent": "Отправлено", + "arrived": "Прибыло", + "attack": "Атака", + "received": "Получено", + "cancelled": "Отменено", + "count": "Количество", + "gold": "Золото", + "workers": "Рабочие", + "war": "Войны", + "trade": "Обмен", + "steal": "Украдено", + "unit": { + "city": "Город", + "port": "Порт", + "defp": "Укрепление", + "saml": "Пусковая установка ЗРК", + "silo": "Ракетная шахта", + "wshp": "Военный корабль", + "fact": "Фабрика", + "trade": "Торговый корабль", + "trans": "Транспортный корабль", + "abomb": "Атомная бомба", + "hbomb": "Водородная бомба", + "mirv": "РГЧ ИН", + "mirvw": "Боеголовка РГЧ ИН" + } + }, + "game_list": { + "recent_games": "Недавние игры", + "game_id": "ID игры", + "mode": "Режим", + "mode_ffa": "Каждый против каждого", + "mode_team": "Команда", + "view": "Осмотреть", + "details": "Подробности", + "started": "Начато", + "map": "Карта", + "difficulty": "Сложность", + "type": "Тип" } } diff --git a/resources/lang/uk.json b/resources/lang/uk.json index 8c697f880..6e25d2ee8 100644 --- a/resources/lang/uk.json +++ b/resources/lang/uk.json @@ -130,9 +130,8 @@ "disable_nations": "Вимкнути нації", "instant_build": "Миттєве будівництво", "infinite_gold": "Необмежене золото", - "donate_gold": "Пожертвувати золото", "infinite_troops": "Необмежені війська", - "donate_troops": "Пожертвувати війська", + "compact_map": "Мінімапа", "disable_nukes": "Вимкнути бомби", "enables_title": "Дозволи", "start": "Розпочати гру" @@ -177,8 +176,10 @@ "halkidiki": "Халкідіки", "straitofgibraltar": "Гібралтарська протока", "italia": "Італія", + "japan": "Японія", "yenisei": "Єнісей", - "pluto": "Плутон" + "pluto": "Плутон", + "montreal": "Монреаль" }, "map_categories": { "continental": "Континентальні", @@ -196,8 +197,9 @@ "join_lobby": "Приєднатися до лобі", "checking": "Перевірка лобі...", "not_found": "Лобі не знайдено. Будь ласка, перевірте дійсність ID і спробуйте знову.", - "error": "Сталася помилка. Будь ласка, спробуйте знову.", - "joined_waiting": "Ви успішно приєдналися! Очікування початку гри..." + "error": "Сталася помилка. Спробуйте ще раз або зверніться до служби підтримки.", + "joined_waiting": "Ви успішно приєдналися! Очікування початку гри...", + "version_mismatch": "Цю гру створено в іншій версії. Неможливо приєднатися." }, "public_lobby": { "join": "Приєднатися до наступної гри", @@ -211,7 +213,7 @@ "enter_username": "Введіть своє ім'я гравця", "not_string": "Ім'я гравця має бути рядком.", "too_short": "Ім'я гравця повинно містити щонайменше {min} символів.", - "too_long": "Ім'я гравця не повинно перевищувати {max} символів.", + "too_long": "Довжина ім'я гравця не повинна перевищувати {max} символів.", "invalid_chars": "Ім'я гравця може містити лише латинські літери, цифри, пробіли, знаки підкреслення та [квадратні дужки]." }, "host_modal": { @@ -227,6 +229,7 @@ "donate_gold": "Пожертвування золота", "infinite_troops": "Безмежні війська", "donate_troops": "Пожертвування військ", + "compact_map": "Мінімапа", "enables_title": "Дозволи", "player": "Гравець", "players": "Гравці(в)", @@ -314,6 +317,8 @@ "territory_patterns_desc": "Виберіть, чи показувати візерунки територій у грі", "performance_overlay_label": "Оверлей продуктивности", "performance_overlay_desc": "Увімкнення/вимкнення оверлея продуктивности. Якщо ввімкнено, буде показано оверлей продуктивности. Натисніть Shift+D під час гри, щоб увімкнути/вимкнути його.", + "performance_overlay_enabled": "Оверлей продуктивності увімкнено", + "performance_overlay_disabled": "Оверлей продуктивності вимкнено", "easter_writing_speed_label": "Множник швидкості друку", "easter_writing_speed_desc": "Налаштуйте швидкість, з якою ви удаєте, що програмуєте (x1–x100)", "easter_bug_count_label": "Кількість багів", @@ -494,7 +499,8 @@ "nation": "Нація", "player": "Гравець", "team": "Команда", - "d_troops": "Оборонні війська", + "alliance_timeout": "Кінець союзу через", + "troops": "Війська", "a_troops": "Наступальні війська", "gold": "Золото", "ports": "Порти", @@ -511,14 +517,14 @@ "retreating": "відступає", "boat": "Човен", "alliance_request_status": "{name} {status} запрошення до союзу", - "alliance_accepted": "прийняв", - "alliance_rejected": "відхилив", + "alliance_accepted": "приймає", + "alliance_rejected": "відхиляє", "duration_second": "1 сек", "betrayal_description": "Ви розірвали союз із {name}, ставши ЗРАДНИКОМ (оборону знижено на {malusPercent}% протягом {durationText})", "duration_seconds_plural": "{seconds} сек", - "betrayed_you": "{name} розірвав союз із вами", - "about_to_expire": "Ваш союз із {name} скоро закінчиться!", - "alliance_expired": "Ваш союз із {name} закінчився", + "betrayed_you": "{name} розриває союз із вами", + "about_to_expire": "Союз із {name} скоро закінчиться!", + "alliance_expired": "Союз із {name} закінчився", "attack_request": "{name} просить вас атакувати {target}", "sent_emoji": "Надіслано {name}: {emoji}", "renew_alliance": "Запит на поновлення", @@ -526,7 +532,7 @@ "focus": "Оглянути", "accept_alliance": "Прийняти", "reject_alliance": "Відхилити", - "alliance_renewed": "Ваш союз із {name} було поновлено", + "alliance_renewed": "Союз із {name} було поновлено", "ignore": "Ігнорувати", "unit_voluntarily_deleted": "Об'єкт добровільно видалено" }, @@ -585,7 +591,7 @@ "choose_spawn": "Виберіть початкове розташування" }, "territory_patterns": { - "title": "Виберіть візерунок території", + "title": "Вибір візерунка території", "purchase": "Придбати", "blocked": { "login": "Ви повинні ввійти, щоб отримати доступ до цього візерунку.", @@ -644,5 +650,63 @@ "radial_menu": { "delete_unit_title": "Видалити об'єкт", "delete_unit_description": "Клацніть, щоб видалити найближчий об'єкт" + }, + "discord_user_header": { + "avatar_alt": "Аватар" + }, + "player_stats_table": { + "building_stats": "Статистика будівництва", + "ship_arrivals": "Прибуття кораблів", + "nuke_stats": "Статистика бомбардувань", + "player_metrics": "Статистика гравця", + "building": "Будівництво", + "ship_type": "Тип корабля", + "weapon": "Зброя", + "built": "Побудовано", + "destroyed": "Знищено", + "captured": "Захоплено", + "lost": "Втрачено", + "hits": "Удари", + "launched": "Запущено", + "landed": "Приземлено", + "sent": "Відправлено", + "arrived": "Прибуло", + "attack": "Атаки", + "received": "Отримано", + "cancelled": "Скасовано", + "count": "Кількість", + "gold": "Золото", + "workers": "Робітники", + "war": "Війни", + "trade": "Обмін", + "steal": "Украдено", + "unit": { + "city": "Місто", + "port": "Порт", + "defp": "Пункт оборони", + "saml": "Пускова установка ЗРК", + "silo": "Ракетна шахта", + "wshp": "Військовий корабель", + "fact": "Фабрика", + "trade": "Торговий корабель", + "trans": "Транспортний корабель", + "abomb": "Атомна бомба", + "hbomb": "Воднева бомба", + "mirv": "РГЧ ІН", + "mirvw": "Боєголовка РГЧ ІН" + } + }, + "game_list": { + "recent_games": "Нещодавні ігри", + "game_id": "ID гри", + "mode": "Режим", + "mode_ffa": "Всі проти всіх", + "mode_team": "Команда", + "view": "Оглянути", + "details": "Подробиці", + "started": "Почато", + "map": "Мапа", + "difficulty": "Складність", + "type": "Тип" } } diff --git a/src/client/AccountModal.ts b/src/client/AccountModal.ts index b55929222..93bf0ff96 100644 --- a/src/client/AccountModal.ts +++ b/src/client/AccountModal.ts @@ -4,7 +4,7 @@ import { UserMeResponse } from "../core/ApiSchemas"; import "./components/Difficulties"; import "./components/PatternButton"; import { discordLogin, getApiBase, getUserMe, logOut } from "./jwt"; -import { translateText } from "./Utils"; +import { isInIframe, translateText } from "./Utils"; @customElement("account-modal") export class AccountModal extends LitElement { @@ -268,6 +268,10 @@ export class AccountButton extends LitElement { } render() { + if (isInIframe()) { + return html``; + } + if (!this.isVisible) { return html``; } diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index 6da474639..a0a4acb89 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -5,7 +5,7 @@ import { GameID, GameRecord, GameStartInfo, - PlayerPattern, + PlayerCosmeticRefs, PlayerRecord, ServerMessage, } from "../core/Schemas"; @@ -52,8 +52,7 @@ import { SoundManager } from "./sound/SoundManager"; export interface LobbyConfig { serverConfig: ServerConfig; - pattern: PlayerPattern | undefined; - flag: string; + cosmetics: PlayerCosmeticRefs; playerName: string; clientID: ClientID; gameID: GameID; diff --git a/src/client/InputHandler.ts b/src/client/InputHandler.ts index 69eb3b2e7..61f4f9635 100644 --- a/src/client/InputHandler.ts +++ b/src/client/InputHandler.ts @@ -188,9 +188,10 @@ export class InputHandler { buildDefensePost: "Digit4", buildMissileSilo: "Digit5", buildSamLauncher: "Digit6", - buildAtomBomb: "Digit7", - buildHydrogenBomb: "Digit8", - buildWarship: "Digit9", + buildWarship: "Digit7", + buildAtomBomb: "Digit8", + buildHydrogenBomb: "Digit9", + buildMIRV: "Digit0", ...saved, }; @@ -409,6 +410,11 @@ export class InputHandler { this.uiState.ghostStructure = UnitType.Warship; } + if (e.code === this.keybinds.buildMIRV) { + e.preventDefault(); + this.uiState.ghostStructure = UnitType.MIRV; + } + // Shift-D to toggle performance overlay console.log(e.code, e.shiftKey, e.ctrlKey, e.altKey, e.metaKey); if (e.code === "KeyD" && e.shiftKey) { diff --git a/src/client/Main.ts b/src/client/Main.ts index 9d4f1eba8..d5acbe4ab 100644 --- a/src/client/Main.ts +++ b/src/client/Main.ts @@ -34,6 +34,7 @@ import { UsernameInput } from "./UsernameInput"; import { generateCryptoRandomUUID, incrementGamesPlayed, + isInIframe, translateText, } from "./Utils"; import "./components/NewsButton"; @@ -207,6 +208,10 @@ class Client { const patternButton = document.getElementById( "territory-patterns-input-preview-button", ); + if (isInIframe() && patternButton) { + patternButton.style.display = "none"; + } + this.patternsModal instanceof TerritoryPatternsModal; if (patternButton === null) throw new Error("territory-patterns-input-preview-button"); @@ -504,18 +509,24 @@ class Client { } const config = await getServerConfigFromClient(); + const pattern = this.userSettings.getSelectedPatternName( + await fetchCosmetics(), + ); + this.gameStop = joinLobby( this.eventBus, { gameID: lobby.gameID, serverConfig: config, - pattern: - this.userSettings.getSelectedPatternName(await fetchCosmetics()) ?? - undefined, - flag: - this.flagInput === null || this.flagInput.getCurrentFlag() === "xx" - ? "" - : this.flagInput.getCurrentFlag(), + cosmetics: { + color: this.userSettings.getSelectedColor() ?? undefined, + patternName: pattern?.name ?? undefined, + patternColorPaletteName: pattern?.colorPalette?.name ?? undefined, + flag: + this.flagInput === null || this.flagInput.getCurrentFlag() === "xx" + ? "" + : this.flagInput.getCurrentFlag(), + }, playerName: this.usernameInput?.getCurrentUsername() ?? "", token: getPlayToken(), clientID: lobby.clientID, diff --git a/src/client/SinglePlayerModal.ts b/src/client/SinglePlayerModal.ts index 0b36b715a..01e62f928 100644 --- a/src/client/SinglePlayerModal.ts +++ b/src/client/SinglePlayerModal.ts @@ -449,6 +449,8 @@ export class SinglePlayerModal extends LitElement { ? (this.userSettings.getDevOnlyPattern() ?? null) : null; + const selectedColor = this.userSettings.getSelectedColor(); + this.dispatchEvent( new CustomEvent("join-lobby", { detail: { @@ -466,6 +468,7 @@ export class SinglePlayerModal extends LitElement { ? "" : flagInput.getCurrentFlag(), pattern: selectedPattern ?? undefined, + color: selectedColor ? { color: selectedColor } : undefined, }, }, ], diff --git a/src/client/TerritoryPatternsModal.ts b/src/client/TerritoryPatternsModal.ts index b0a9b45b4..baf75e7be 100644 --- a/src/client/TerritoryPatternsModal.ts +++ b/src/client/TerritoryPatternsModal.ts @@ -25,6 +25,9 @@ export class TerritoryPatternsModal extends LitElement { public previewButton: HTMLElement | null = null; @state() private selectedPattern: PlayerPattern | null; + @state() private selectedColor: string | null = null; + + @state() private activeTab: "patterns" | "colors" = "patterns"; private cosmetics: Cosmetics | null = null; @@ -44,6 +47,7 @@ export class TerritoryPatternsModal extends LitElement { if (userMeResponse === null) { this.userSettings.setSelectedPatternName(undefined); this.selectedPattern = null; + this.selectedColor = null; } this.userMeResponse = userMeResponse; this.cosmetics = await fetchCosmetics(); @@ -51,6 +55,7 @@ export class TerritoryPatternsModal extends LitElement { this.cosmetics !== null ? this.userSettings.getSelectedPatternName(this.cosmetics) : null; + this.selectedColor = this.userSettings.getSelectedColor() ?? null; this.refresh(); } @@ -58,6 +63,31 @@ export class TerritoryPatternsModal extends LitElement { return this; } + private renderTabNavigation(): TemplateResult { + return html` +