### 一、核心需求与技术难点
在传奇私人服务器中实现 **"每个IP仅限领取一次待遇"** 的功能,需解决以下关键问题:
1. **IP精准获取**:实时捕捉玩家登录IP地址(IPv4/IPv6)
2. **数据持久化存储**:建立IP地址与领取状态的映射关系
3. **动态检测与拦截**:在玩家触发领取动作时验证IP合法性
4. **反作弊防护**:应对代理IP、动态IP池等绕过手段
---
### 二、基础脚本实现(GOM/GEE引擎)
#### 1. **IP检测与记录模块**
```lua
-- QFunction-0.txt 中绑定领取事件
[@领取待遇]
#IF
CheckIPList ..\QuestDiary\IP记录库\已领取IP.txt // 检测IP是否已记录
#ACT
MessageBox 你的IP地址已领取过新手礼包,请勿重复操作!\
<关闭/@exit>
BREAK
#IF
#ACT
GetClientIP S1 // 获取客户端真实IP
AddTextListEx ..\QuestDiary\IP记录库\已领取IP.txt <$STR(S1)>
GIVE 金条 1
GIVE 圣战套装 1
SendMsg 6 [系统] 玩家<$USERNAME>(IP:<$STR(S1)>)成功领取新人礼包!
```
#### 2. **IP库自动维护机器人脚本**
```lua
-- AutoRunRobot.txt 每日凌晨清空IP库
#AutoRun NPC DAY 0 @IP库维护
[@IP库维护]
#ACT
ClearNameList ..\QuestDiary\IP记录库\已领取IP.txt
AddTextList ..\QuestDiary\操作日志\IP清理记录.txt [<$DATE>] IP库已重置
```
---
### 三、进阶方案:多维度检测与防护
#### 1. **复合型验证矩阵**
| 检测维度 | 脚本实现方式 | 作用描述 |
|----------------|----------------------------------------|-----------------------|
| IP地址 | `CheckIPList` + `GetClientIP` | 基础IP过滤 |
| 设备指纹 | `CheckMachineCode` | 防虚拟机/沙箱 |
| 账号-IP绑定 | `CHECKACCOUNTIPLIST` | 限制账号切换IP领取 |
| 时间窗口 | `CheckBetweenTime 08:00-24:00` | 控制领取时段 |
#### 2. **动态IP池对抗方案**
```lua
-- 启用IP段封禁(屏蔽常见VPN段)
[@OnTimerIP检测]
#IF
CheckIPRange 192.168.1.1-192.168.1.255 // 内网IP直接放行
#ACT
BREAK
#IF
CheckIPRange 58.96.0.0-58.127.255.255 // 已知代理IP段
#ACT
Kick
AddTextList ..\QuestDiary\黑名单\异常IP.txt <$CLIENTIP>
```
#### 3. **日志追踪与分析系统**
```lua
#ACT
AddTextListEx ..\QuestDiary\审计日志\IP领取记录.txt `
[<$DATETIME>] 玩家=<$USERNAME> IP=<$CLIENTIP> MAC=<$MACHINECODE> 地图=<$CURMAP>
```
---
### 四、商业级解决方案(需插件支持)
#### 1. **硬件级防护(ESP插件示例)**
```lua
; ESPConfiguration.ini
[IP限制]
Enable=1
MaxPerIP=1 // 单IP允许领取次数
CheckInterval=3600 // 检测间隔(秒)
```
#### 2. **云端IP信誉库对接**
```lua
#IF
CheckCloudIPRisk <$CLIENTIP> // 查询云端风险库
#ACT
Kick
SendMsg 0 [安全警报] 高风险IP:<$CLIENTIP> 尝试非法领取!
```
---
### 五、常见问题与调试方案
#### 1. **IP获取异常排查**
- **现象**:`GetClientIP`返回127.0.0.1
- **解决方案**:
1. 检查LoginGate配置中的`UseNat=1`
2. 验证DBServer的`serveraddr.txt`是否为外网IP
#### 2. **IP库写入失败处理**
```lua
#IF
Not CheckFileExist ..\QuestDiary\IP记录库\已领取IP.txt
#ACT
CreateFile ..\QuestDiary\IP记录库\已领取IP.txt // 自动创建文件
```
#### 3. **性能优化建议**
- 采用哈希分片存储:
```lua
; 根据IP末两位分片存储
Mov S2 <$CLIENTIP>
GetStringPos S2 . 3
StrLen S3 S2
Dec S3 2
MidStr S4 S2 <$STR(S3)> 2
AddTextList ..\QuestDiary\IP分片\<$STR(S4)>.txt <$STR(S2)>
```
---
### 六、扩展应用场景
#### 1. **活动推广系统**
```lua
#IF
CheckIPList ..\QuestDiary\推广IP库\合作网吧.txt // 指定IP段奖励加成
#ACT
GIVE 双倍经验卷 1
SendMsg 6 合作网吧用户专属福利已发放!
```
#### 2. **地域化运营策略**
```lua
#IF
CheckIPArea <$CLIENTIP> 上海 // 基于IP地理信息
#ACT
GIVE 沪上专属礼盒 1
```
---
### 结语
通过上述方案,可构建从基础到企业级的IP限制领取系统。建议开发时注意:
1. **法律合规**:在登录界面明确告知IP采集用途
2. **动态调整**:定期分析`IP领取记录.txt`优化规则
3. **多层防御**:结合设备指纹、行为分析等多维度验证
(附测试用IP库与日志分析工具包,需根据引擎版本调整路径参数)

