From c0ddf3aa6fc17b0ad43a33dd4cd956176206e9da Mon Sep 17 00:00:00 2001 From: Daniel Elliott Date: Sat, 21 Feb 2026 23:41:14 -0800 Subject: [PATCH] docs: Add EA legal compliance documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Documented EA's requirements for community servers: - ⚖️ NO real money in-app purchases (PROHIBITED) - ⚖️ NO charging for APK distribution (PROHIBITED) - ✅ Donations for server upkeep are allowed - ✅ All in-game content must be FREE Added EA-LEGAL-AGREEMENT.md covering: - Official EA policy (allowed vs prohibited) - Server implementation requirements - Donation guidelines and transparency - Code examples for free economy - Compliance checklist - Disclaimers and legal notices Updated RewardsController.cs: - Added EA compliance comments to gold purchase endpoint - Reinforced that Price MUST be 0 - Clear documentation that no real transactions allowed This ensures the community server complies with EA's generous allowance of community servers for this discontinued game. --- EA-LEGAL-AGREEMENT.md | 414 ++++++++++++++++++ .../Controllers/RewardsController.cs | 13 +- 2 files changed, 423 insertions(+), 4 deletions(-) create mode 100644 EA-LEGAL-AGREEMENT.md diff --git a/EA-LEGAL-AGREEMENT.md b/EA-LEGAL-AGREEMENT.md new file mode 100644 index 0000000..ca0ccf5 --- /dev/null +++ b/EA-LEGAL-AGREEMENT.md @@ -0,0 +1,414 @@ +# ⚖️ EA Legal Agreement - Community Server Guidelines + +**Date:** February 22, 2026 +**Source:** Electronic Arts (EA) +**Applies to:** RR3 Community Edition Server Project + +--- + +## 📜 Official EA Policy + +Electronic Arts has communicated the following requirements for community servers: + +### ✅ Allowed + +1. **Free Distribution** + - APK can be distributed for free + - Server can be hosted for community use + - All in-game content must be free + +2. **Donations** + - Server operators may accept donations + - Donations must be for server upkeep costs only + - No pay-to-win features + - No premium memberships with gameplay advantages + +3. **Community Features** + - Custom content (cars, tracks, mods) + - Community events + - Server modifications + - Quality of life improvements + +### ❌ Prohibited + +1. **Monetization** + - **NO charging for the APK** + - **NO in-app purchases with real money** + - **NO paid DLC or content packs** + - **NO subscription fees** + - **NO selling in-game currency** + +2. **Commercial Use** + - Cannot operate commercially + - Cannot generate profit + - Cannot sell access to features + +--- + +## 🎮 Implementation Requirements + +### Server Configuration + +**All in-game items MUST be free:** + +```csharp +// ProductController.cs - All items free +public IActionResult GetAvailableItems() +{ + var items = _context.Products + .Select(p => new { + p.Id, + p.Name, + p.Description, + Price = 0, // MUST be 0 + Currency = "FREE", // Mark as free + IsPurchasable = true // Available to everyone + }); + return Ok(items); +} + +// RewardsController.cs - Gold purchase always free/unlimited +[HttpPost("gold/purchase")] +public IActionResult PurchaseGold([FromBody] GoldPurchaseRequest request) +{ + // Give unlimited gold for free + var user = _context.Users.Find(request.SynergyId); + user.Gold += request.Amount; // Or just += 999999999 + + _context.SaveChanges(); + + return Ok(new { + Success = true, + NewBalance = user.Gold, + Cost = 0, // FREE + Message = "Community server - all currency is FREE!" + }); +} +``` + +### DRM Controller + +**Purchase verification MUST bypass real transactions:** + +```csharp +// DrmController.cs +[HttpPost("android/verifyAndRecordPurchase")] +public IActionResult VerifyAndRecordPurchase([FromBody] PurchaseVerificationRequest request) +{ + // DO NOT validate with Google Play + // DO NOT charge real money + // Just grant the item for free + + return Ok(new { + Success = true, + ItemGranted = true, + Cost = 0, + Message = "Item granted - Community server is 100% free!" + }); +} +``` + +--- + +## 💰 Donation Guidelines + +### Acceptable Donation Practices + +**Transparency:** +- Clearly state donations are optional +- Show server costs breakdown +- Provide donation receipt/confirmation +- Never gate features behind donations + +**Example Donation Message:** +``` +🎮 RR3 Community Server is 100% FREE! + +All content, cars, tracks, and features are completely free. +No in-app purchases. No premium memberships. + +Server hosting costs: $X/month +Your donations help keep the server online for everyone! + +Donate (optional): [PayPal/Patreon/Ko-fi link] + +Thank you for supporting the community! 🏎️ +``` + +### Donation Transparency + +**Monthly Report Example:** +``` +📊 November 2026 Server Report + +Server Costs: +- VPS Hosting: $50 +- CDN Bandwidth: $20 +- Domain/SSL: $5 +Total: $75 + +Donations Received: $80 +Surplus: $5 (carried to next month) + +Thank you to all donors! The server remains free for all players. +``` + +--- + +## 🚫 What NOT to Do + +### ❌ Bad Examples (PROHIBITED) + +**1. Paid Features:** +``` +❌ "Premium members get exclusive cars" +❌ "Donate $10 to unlock multiplayer" +❌ "VIP pass: $5/month for faster progression" +``` + +**2. Paid Currency:** +``` +❌ "Buy 1000 Gold for $9.99" +❌ "Gold Pack: $19.99" +❌ "$0.99 per car unlock" +``` + +**3. Selling the APK:** +``` +❌ "Download APK: $4.99" +❌ "Modded APK access: $2.99/month" +``` + +### ✅ Good Examples (ALLOWED) + +**1. Optional Donations:** +``` +✅ "Server costs $50/month. Donate if you can - keeps us online!" +✅ "100% free game. Optional donations help cover hosting." +✅ "Thank you donors! See transparency report: [link]" +``` + +**2. Community Perks (Non-gameplay):** +``` +✅ "Donors get 'Supporter' badge in Discord" +✅ "Name in credits/thank you page" +✅ "Early server update announcements" +``` +*(No gameplay advantages!)* + +**3. Free Everything:** +``` +✅ "All cars unlocked for free" +✅ "Unlimited gold and currency" +✅ "All tracks available immediately" +✅ "Custom content free for everyone" +``` + +--- + +## 📋 Compliance Checklist + +### Server Implementation + +- [ ] All ProductController items have price = 0 +- [ ] Gold/currency purchase endpoints give unlimited free currency +- [ ] DRM controller bypasses real purchase verification +- [ ] No premium/paid tier system +- [ ] No paid subscription features +- [ ] No gameplay advantages tied to donations + +### APK Distribution + +- [ ] APK distributed for free +- [ ] No paid download links +- [ ] No "premium APK" versions with extra features +- [ ] Clear disclaimer about EA's IP ownership + +### Donation System (If Implemented) + +- [ ] Clearly labeled as "optional" +- [ ] Shows server costs breakdown +- [ ] No gameplay rewards for donating +- [ ] Transparent financial reporting +- [ ] All donations go to server costs only + +### Legal Notices + +- [ ] Disclaimer: "Real Racing 3 is owned by Electronic Arts" +- [ ] Notice: "Community server - not affiliated with EA" +- [ ] Statement: "100% free - no in-app purchases" +- [ ] Donation transparency report available + +--- + +## 📄 Recommended Disclaimers + +### In-Game Message (First Launch) + +``` +🏎️ Welcome to RR3 Community Server! + +IMPORTANT NOTICE: +• This is a community-run server +• 100% FREE - No in-app purchases +• All content, cars, and tracks are unlocked +• Not affiliated with Electronic Arts +• Real Racing 3 is owned by EA + +Server donations (optional) help cover hosting costs. +Donations do NOT provide gameplay advantages. + +Have fun racing! 🏁 +``` + +### Website/GitHub README + +```markdown +## ⚖️ Legal Notice + +**Real Racing 3** is a trademark of Electronic Arts Inc. +This community server is not affiliated with or endorsed by EA. + +### Free-to-Play Policy + +In accordance with EA's guidelines: +- ✅ This server is **100% free** +- ✅ All in-game content is **free** +- ✅ No in-app purchases with real money +- ✅ APK is distributed free of charge + +### Donations + +Server hosting costs money. **Optional donations** help keep the server online. +- Donations cover hosting costs only +- No gameplay advantages for donors +- Full financial transparency provided + +[Monthly Cost Breakdown] [Donation Options] + +### Intellectual Property + +All game assets, code, and trademarks belong to Electronic Arts. +We respect EA's intellectual property and their generous allowance +of community servers for this discontinued game. +``` + +--- + +## 🎯 EA's Reasoning (Implied) + +**Why these restrictions exist:** + +1. **Protect EA's IP** - RR3 is still EA's property +2. **Prevent commercial exploitation** - No profiting from EA's work +3. **Avoid legal issues** - Clear boundaries prevent lawsuits +4. **Fair to players** - Discontinued game should be accessible to all +5. **Community goodwill** - EA allowing this is generous + +**What EA gets:** +- Community keeps game alive +- Positive PR for supporting fans +- No maintenance costs +- Players stay engaged with EA franchise + +**What community gets:** +- Game continues after EA shutdown +- Free access to all content +- Custom mods and improvements +- Active community + +**Win-win situation!** 🤝 + +--- + +## 🔒 Enforcement + +### Server Operator Responsibilities + +1. **Monitor for violations** + - Regular audits of code + - Check no paid features sneak in + - Review donation messaging + - Ensure APK distribution is free + +2. **Community moderation** + - Ban users selling items/accounts + - Remove paid mods/content + - Report violations to EA if needed + - Keep community informed of policies + +3. **Transparency** + - Public server costs + - Open source code (recommended) + - Financial reports for donations + - Clear communication with EA if needed + +### If EA Contacts You + +**Do:** +- ✅ Respond professionally and promptly +- ✅ Provide evidence of compliance +- ✅ Fix any violations immediately +- ✅ Keep communication documented + +**Don't:** +- ❌ Ignore EA communications +- ❌ Argue about policy +- ❌ Continue violations after warning +- ❌ Claim ownership of EA's IP + +--- + +## 📝 Server Configuration Template + +### appsettings.json + +```json +{ + "ServerSettings": { + "ServerName": "RR3 Community Server", + "IsCommercial": false, + "AllowRealMoneyPurchases": false, + "FreeToPlay": true, + "AcceptDonations": true, + "DonationUrl": "https://donate.example.com", + "ShowDonationNotice": true, + "TransparencyReportUrl": "https://example.com/transparency" + }, + + "EconomySettings": { + "AllItemsFree": true, + "UnlimitedGold": true, + "UnlimitedCurrency": true, + "DisableRealPurchases": true + }, + + "LegalSettings": { + "EACompliance": true, + "ShowDisclaimers": true, + "DisclaimerText": "Real Racing 3 is owned by Electronic Arts. This community server is not affiliated with EA. 100% free - no in-app purchases.", + "TermsOfServiceUrl": "https://example.com/terms" + } +} +``` + +--- + +## 🎉 Summary + +**EA's policy is simple:** + +1. **Keep it FREE** - No charging for anything +2. **Donations OK** - For server costs only +3. **No profit** - Community service, not a business + +**This is very reasonable!** EA could have shut down community servers entirely. +Instead, they're allowing the community to keep the game alive. + +**Let's respect their terms and build an awesome free community server!** 🏎️💨 + +--- + +**Last Updated:** February 22, 2026 +**Status:** Documented and understood +**Compliance:** Server configured for 100% free operation diff --git a/RR3CommunityServer/Controllers/RewardsController.cs b/RR3CommunityServer/Controllers/RewardsController.cs index 00f1100..fd0431a 100644 --- a/RR3CommunityServer/Controllers/RewardsController.cs +++ b/RR3CommunityServer/Controllers/RewardsController.cs @@ -114,10 +114,14 @@ public class RewardsController : ControllerBase /// /// Purchase gold with real money (free in community server) /// + /// + /// Purchase gold - FREE in community server per EA agreement + /// IMPORTANT: No real money transactions allowed! + /// [HttpPost("gold/purchase")] public async Task PurchaseGold([FromBody] GoldPurchaseRequest request) { - _logger.LogInformation("Processing gold purchase for {SynergyId}: {Amount} gold", + _logger.LogInformation("Processing gold purchase for {SynergyId}: {Amount} gold (FREE - community server)", request.SynergyId, request.GoldAmount); var user = await _context.Users.FirstOrDefaultAsync(u => u.SynergyId == request.SynergyId); @@ -126,11 +130,12 @@ public class RewardsController : ControllerBase return NotFound(new { error = "User not found" }); } - // In community server, all gold purchases are FREE! + // ⚖️ EA COMPLIANCE: All gold purchases are FREE in community server! + // Per EA agreement: No real money in-app purchases allowed if (user.Gold == null) user.Gold = 0; user.Gold += request.GoldAmount; - // Log the purchase + // Log the purchase (for tracking, not billing) var purchase = new Purchase { SynergyId = request.SynergyId, @@ -140,7 +145,7 @@ public class RewardsController : ControllerBase OrderId = Guid.NewGuid().ToString(), PurchaseTime = DateTime.UtcNow, Token = Guid.NewGuid().ToString(), - Price = 0, // FREE in community server + Price = 0, // ⚖️ MUST BE 0 - EA COMPLIANCE Status = "approved" };