docs: Add EA legal compliance documentation
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.
This commit is contained in:
414
EA-LEGAL-AGREEMENT.md
Normal file
414
EA-LEGAL-AGREEMENT.md
Normal file
@@ -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
|
||||||
@@ -114,10 +114,14 @@ public class RewardsController : ControllerBase
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Purchase gold with real money (free in community server)
|
/// Purchase gold with real money (free in community server)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <summary>
|
||||||
|
/// Purchase gold - FREE in community server per EA agreement
|
||||||
|
/// IMPORTANT: No real money transactions allowed!
|
||||||
|
/// </summary>
|
||||||
[HttpPost("gold/purchase")]
|
[HttpPost("gold/purchase")]
|
||||||
public async Task<IActionResult> PurchaseGold([FromBody] GoldPurchaseRequest request)
|
public async Task<IActionResult> 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);
|
request.SynergyId, request.GoldAmount);
|
||||||
|
|
||||||
var user = await _context.Users.FirstOrDefaultAsync(u => u.SynergyId == request.SynergyId);
|
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" });
|
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;
|
if (user.Gold == null) user.Gold = 0;
|
||||||
user.Gold += request.GoldAmount;
|
user.Gold += request.GoldAmount;
|
||||||
|
|
||||||
// Log the purchase
|
// Log the purchase (for tracking, not billing)
|
||||||
var purchase = new Purchase
|
var purchase = new Purchase
|
||||||
{
|
{
|
||||||
SynergyId = request.SynergyId,
|
SynergyId = request.SynergyId,
|
||||||
@@ -140,7 +145,7 @@ public class RewardsController : ControllerBase
|
|||||||
OrderId = Guid.NewGuid().ToString(),
|
OrderId = Guid.NewGuid().ToString(),
|
||||||
PurchaseTime = DateTime.UtcNow,
|
PurchaseTime = DateTime.UtcNow,
|
||||||
Token = Guid.NewGuid().ToString(),
|
Token = Guid.NewGuid().ToString(),
|
||||||
Price = 0, // FREE in community server
|
Price = 0, // ⚖️ MUST BE 0 - EA COMPLIANCE
|
||||||
Status = "approved"
|
Status = "approved"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user