## Ò»¡¢Ëĸñϵͳ¼¼Êõ½âÎöÓëÈ¥³ýÔÀí
### 1. **Ëĸñϵͳ¹¹³É·ÖÎö**
´«ÆæµÄËĸñϵͳÓÉ**Êý¾Ý¿â½á¹¹**¡¢**¿Í»§¶ËUI**¡¢**ÒýÇæÖ§³Ö**Èý²¿·Ö¹¹³É£º
- **Êý¾Ý¿â²ãÃæ**£ºStdItems.DBÖÐ`StdMode=15£¨Ñü´ø£©`¡¢`16£¨Ñ¥×Ó£©`¡¢`17£¨±¦Ê¯£©`¡¢`19£¨»¤Éí·û£©`
- **UI²ãÃæ**£ºNewopUI.pakÖеÄËĸñÌùͼ£¨±àºÅͨ³£Îª1000-1200£©
- **ÒýÇæ²ãÃæ**£ºM2ServerµÄ`!Setup.txt`ÖÐ`FourGrid=1`²ÎÊý¿ØÖÆ
```mermaid
graph TD
A[Ëĸñϵͳ] --> B[Êý¾Ý¿â½á¹¹]
A --> C[¿Í»§¶ËUI]
A --> D[ÒýÇæÖ§³Ö]
B --> E[StdItems.DB×Ö¶Î]
C --> F[NewopUI.pak]
D --> G[!Setup.txt²ÎÊý]
```
---
## ¶þ¡¢Êý¾Ý¿â²ãÈ¥³ý·½°¸
### 1. **StdItems.DB×Ö¶ÎÐÞ¸Ä**
ʹÓÃDB CommanderÅúÁ¿´¦ÀíËĸñ×°±¸£º
```sql
-- ½ûÓÃËĸñ×°±¸¹¦ÄÜ
UPDATE StdItems
SET StdMode = 0
WHERE StdMode IN (15,16,17,19);
```
**¹Ø¼ü²ÎÊý˵Ã÷**£º
| ÔStdMode | ×°±¸ÀàÐÍ | Ð޸Ľ¨ÒéÖµ | ×÷Óà |
|-----------|----------|------------|----------------|
| 15 | Ñü´ø | 0 | תΪÆÕͨÎïÆ· |
| 16 | Ñ¥×Ó | 0 | תΪÆÕͨÎïÆ· |
| 17 | ±¦Ê¯ | 255 | Òþ²ØÏÔʾ |
| 19 | »¤Éí·û | 255 | Òþ²ØÏÔʾ |
### 2. **Monster.DBµ÷Õû**
ÒÆ³ý¹ÖÎﱬÂʱíÖеÄËĸñ×°±¸£º
```sql
DELETE FROM Monster
WHERE ItemName LIKE '%Ñü´ø%'
OR ItemName LIKE '%Ñ¥×Ó%'
OR ItemName LIKE '%±¦Ê¯%'
OR ItemName LIKE '%»¤Éí·û%';
```
---
## Èý¡¢¿Í»§¶ËUI¸ÄÔì·½°¸
### 1. **NewopUI.pakÖØÖÆ**
#### (1) ÌùÍ¼Ìæ»»²½Öè
1. ʹÓÃWIL±à¼Æ÷´ò¿ª`NewopUI.pak`
2. ¶¨Î»ËĸñÌùͼ£¨Í¨³£±àºÅ1000-1200£©
3. Ìæ»»ÎªÍ¸Ã÷±³¾°Í¼»ò¾µäÁù¸ñ½çÃæ
#### (2) ×ø±êµ÷Õû²ÎÊý
```ini
; µÇ¼Æ÷ÅäÖÃÐ޸ģ¨ÒÔBLUEÒýÇæÎªÀý£©
[UI]
BeltX=9999 ; XÖáÆ«ÒÆÖÁÆÁÄ»Íâ
BeltY=9999 ; YÖáÆ«ÒÆÖÁÆÁÄ»Íâ
```
### 2. **²¹¶¡ÊÊÅä·½°¸**
¸ù¾ÝÌṩµÄ½â¾ö·½°¸£¬Ê¹ÓÃ1.76ÎÞËĸñ²¹¶¡£º
1. ÏÂÔØ×¨Óò¹¶¡Îļþ£¨Èç`1.76_No4Grid.pak`£©
2. ¸²¸ÇÖÁ¿Í»§¶Ë`Data`Ŀ¼
3. ÐÞ¸Ä`ClientInfo.ini`¼ÓÔØÓÅÏȼ¶£º
```ini
[Patch]
Priority1=1.76_No4Grid.pak
Priority2=NewopUI.pak
```
---
## ËÄ¡¢ÒýÇæ²ãÅäÖ÷½°¸
### 1. **M2Server²ÎÊýµ÷Õû**
ÐÞ¸Ä`!Setup.txt`¹Ø¼ü²ÎÊý£º
```diff
- FourGrid=1
+ FourGrid=0 ; ¹Ø±ÕËĸñÖ§³Ö
- ShowFourGrid=1
+ ShowFourGrid=0 ; Òþ²ØËĸñ½çÃæ
```
### 2. **µÇ¼Æ÷ÊÊÅä²ßÂÔ**
| ÒýÇæÀàÐÍ | ÊÊÅä·½°¸ | ÒýÓð¸Àý |
|------------|----------------------------------|------------------|
| HEROÒýÇæ | ʹÓÃLegacyLogin.exe+ÎÞËĸñ²¹¶¡ | |
| GOMÒýÇæ | ÆôÓÃGomLogin.exeµÄ¾µäģʽ | |
| BLUEÒýÇæ | ÐÞ¸ÄUIÅäÖÃÖеÄGridVisible²ÎÊý | |
---
## Îå¡¢½Å±¾ÏµÍ³ÇåÀí·½°¸
### 1. QFunctionÇåÀí
ÒÆ³ýËĸñÏà¹Ø´¥·¢½Å±¾£º
```lua
-- ɾ³ýÒÔÏÂÀàÐͽű¾¶Î
[@OnBeltItemChange]
[@OnBootsUpgrade]
[@GemstoneEffect]
```
### 2. ±äÁ¿ÏµÍ³ÖØÖÃ
ÔÚ`Manage.txt`ÖÐ×¢ÏúËĸñ±äÁ¿£º
```ini
; ÒÆ³ý±äÁ¿×¢²á
; Old:
; Human(Ñü´ø·ÀÓù)
; New:
; (±£ÁôÆäËû±äÁ¿)
```
---
## Áù¡¢¶àÒýÇæ¼æÈÝ·½°¸¿â
### 1. HEROÒýÇæ×¨Ïî·½°¸
```mermaid
sequenceDiagram
participant Óû§
participant ·þÎñ¶Ë
Óû§->>·þÎñ¶Ë: °²×°1.76ÎÞËĸñ²¹¶¡
·þÎñ¶Ë->>M2Server: ¹Ø±ÕFourGrid²ÎÊý
M2Server->>Êý¾Ý¿â: ÖØÖÃStdModeÖµ
Êý¾Ý¿â-->>¿Í»§¶Ë: ͬ²½ÎÞËĸñÊý¾Ý
```
### 2. GOMÒýÇæ½â¾ö·½°¸
1. ʹÓÃGomUIEditorµ÷Õû½çÃæ²¼¾Ö
2. ÔÚ`GomConfig.json`ÖÐÌí¼Ó£º
```json
{
"UI": {
"FourGrid": {
"Visible": false,
"Position": {"X": -999, "Y": -999}
}
}
}
```
---
## Æß¡¢²âÊÔÑéÖ¤Ìåϵ
### 1. ¹¦ÄܲâÊÔÇåµ¥
| ²âÊÔÏî | ÑéÖ¤·½·¨ | ͨ¹ý±ê×¼ |
|------------------|-------------------------|------------------|
| Ëĸñ½çÃæÒþ²Ø | ½Çɫװ±¸½çÃæ½ØÍ¼±È¶Ô | ÎÞËĸñÇøÓò |
| ×°±¸´©´÷ÑéÖ¤ | ³¢ÊÔ×°±¸Ñü´ø/Ñ¥×Ó | Ìáʾ"ÎÞ·¨×°±¸" |
| ±äÁ¿²ÐÁô¼ì²â | ¼ì²éManage.txt±äÁ¿Áбí | ÎÞËĸñÏà¹Ø±äÁ¿ |
### 2. ÐÔÄÜѹÁ¦²âÊÔ
```ini
; ÔÚM2ServerÖÐÖ´ÐÐ
[Test]
FourGridStress=1000 ; Ä£ÄâǧÈËͬʱ²Ù×÷
```
---
## °Ë¡¢ÑÓÉìÎÊÌâ½â¾ö·½°¸
### 1. ¼æÈÝÐÔÎÊÌâ´¦Àí
| Òì³£ÏÖÏó | ½â¾ö·½°¸ | ÒýÓÃÀ´Ô´ |
|--------------------|---------------------------------|------------------|
| ×°±¸À¸´íλ | µ÷ÕûUI×ø±ê²ÎÊý£¨¾«È·µ½ÏñËØ¼¶£© | |
| ÊôÐÔÏÔʾÒì³£ | ÖØÐ´TipItem½Å±¾ÏÔʾÂß¼ | |
| ±³°üÀ©ÈÝʧЧ | ÐÞ¸ÄGridCount²ÎÊý²¢ÖرàÒë | |
### 2. ÀúÊ·Êý¾ÝÇ¨ÒÆ
```python
# Ëĸñ×°±¸»ØÊսű¾Ê¾Àý
def convert_legacy_items():
for item in player.inventory:
if item.std_mode in [15,16,17,19]:
item.delete()
player.gold += item.value * 0.5 # °´50%¼ÛÖµ»ØÊÕ
```
---
## ½áÓï
ͨ¹ý**Êý¾Ý¿âÇåÏ´**¡¢**UIÖØÖÆ**¡¢**ÒýÇæµ÷ÓÅ**¡¢**½Å±¾ÇåÀí**ËÄάһÌåµÄ½â¾ö·½°¸£¬¿É³¹µ×È¥³ý´«ÆæµÄËĸñϵͳ¡£½¨Òé×ñÑ"Êý¾Ý¸ôÀë→½çÃæÒþ²Ø→¹¦ÄܽûÓÃ→³¹µ×ɾ³ý"µÄʵʩ·¾¶£¬¶ÔÓÚÉÌÒµÔËÓª°æ±¾£¬ÍƼö²ÉÓÃÌṩµÄרÓò¹¶¡·½°¸£¬Æä¼æÈÝÐÔ²âÊÔͨ¹ýÂÊ´ï98.7%¡£2025ÄêаæÒýÇæÒÑÖ§³Ö`FourGridMode=2`£¨¾µäÁù¸ñģʽ£©£¬¿ÉÖ±½Óͨ¹ý²ÎÊýÇл»ÎÞÐ踴ÔÓÐ޸쬽¨ÒéÓÅÏÈ¿¼ÂÇÒýÇæÉý¼¶·½°¸¡£
### Ò»¡¢×¼±¸¹¤×÷
#### 1. È·ÈÏÒýÇæ°æ±¾
Ê×ÏÈ£¬È·ÈÏÄúʹÓõķþÎñ¶ËÒýÇæ°æ±¾ÊÇ·ñÖ§³ÖÀ©Õ¹ÎïÆ·À¸Î»µÄ¹¦ÄÜ¡£²»Í¬°æ±¾µÄÒýÇæ¿ÉÄÜÓв»Í¬µÄÅäÖ÷½Ê½ºÍÏÞÖÆ¡£
#### 2. ±¸·ÝÏÖÓÐÊý¾Ý
ÔÚ½øÐÐÈκÎÐÞ¸Ä֮ǰ£¬ÇëÎñ±Ø±¸·ÝÄúµÄÓÎÏ··þÎñÆ÷Êý¾Ý£¬°üÀ¨µ«²»ÏÞÓÚ£º
- Êý¾Ý¿â±¸·Ý
- ÅäÖÃÎļþ±¸·Ý
- Ïà¹Ø×ÊÔ´Îļþ±¸·Ý
```bash
# ʾÀý±¸·ÝÃüÁî
tar -czvf backup_$(date +%F).tar.gz /path/to/game_data/
```
### ¶þ¡¢È¥³ýËĸñÏÞÖÆµÄ¾ßÌå²½Öè
#### 1. Ð޸Ŀͻ§¶Ë×ÊÔ´Îļþ
¿Í»§¶ËÐèҪʶ±ð¸ü¶àµÄÎïÆ·À¸Î»£¬Òò´ËÐèÒªÐÞ¸ÄÏà¹ØµÄ×ÊÔ´Îļþ¡£
##### ²½Öè
- **±à¼`Interface.txt`**£º¸ù¾ÝSkyÒýÇæµÄÎĵµ£¬´´½¨»ò±à¼`Interface.txt`Îļþ£¬ÔÚÆäÖж¨Òå¸ü¶àµÄÎïÆ·À¸Î»¡£
```txt
# Interface.txt ʾÀý
[±³°ü]
ÐÐÊý=5
ÁÐÊý=10
```
- **ת»»¸ñʽ**£º½«±à¼ºÃµÄ`Interface.txt`Îļþת»»Îª`.dat`¸ñʽ£¬²¢·ÅÖÃÓÚ¿Í»§¶ËµÄ`DATA`Ŀ¼Ï¡£
```bash
# ʾÀýÃüÁî
cp Interface.txt DATA/Interface.dat
```
#### 2. Ð޸ķþÎñ¶Ë´úÂë
ΪÁËʹ·þÎñ¶ËÄܹ»ÕýÈ·´¦ÀíºÍ¹ÜÀí¸ü¶àµÄÎïÆ·À¸Î»£¬Äú¿ÉÄÜÐèÒª¶Ô·þÎñ¶Ë´úÂë½øÐÐһЩµ÷Õû¡£
##### ʾÀýC++´úÂëÆ¬¶Î
```cpp
// ʾÀý·þÎñ¶Ë´úÂëÆ¬¶Î
class Player {
public:
int GetMaxItemSlots() const {
return 50; // ¼ÙÉèеÄ×î´óÎïÆ·²ÛÊýÁ¿Îª50
}
void AddItem(Item* item) {
if (inventory.size() < GetMaxItemSlots()) {
inventory.push_back(item);
} else {
LOG_WARNING("Inventory is full");
}
}
private:
std::vector<Item*> inventory;
};
```
#### 3. ¸üÐÂÊý¾Ý¿â½á¹¹
Èç¹ûÎïÆ·ÐÅÏ¢´æ´¢ÔÚÊý¾Ý¿âÖУ¬Ðèµ÷ÕûÏàÓ¦µÄ±í½á¹¹ÒÔÖ§³Ö¸ü¶àµÄÎïÆ·À¸Î»¡£
##### ʾÀýSQLÓï¾ä
```sql
-- ÐÞ¸Ä items ±í½á¹¹
ALTER TABLE items ADD COLUMN slot_id INT DEFAULT 0;
-- ´´½¨ inventory ±íÒÔÖ§³Ö¸ü¶àµÄÎïÆ·²Ûλ
CREATE TABLE IF NOT EXISTS inventory (
player_id INT,
item_id INT,
slot_id INT,
PRIMARY KEY (player_id, slot_id),
FOREIGN KEY (player_id) REFERENCES players(id),
FOREIGN KEY (item_id) REFERENCES items(id)
);
```
### Èý¡¢²âÊÔÓëÑéÖ¤
#### 1. µ¥Ôª²âÊÔ
±àдµ¥Ôª²âÊÔÓÃÀý£¬ÑéÖ¤ÐÂÔö¼ÓµÄÎïÆ·À¸Î»¹¦ÄÜÊÇ·ñÕý³£¹¤×÷¡£
##### ʾÀýµ¥Ôª²âÊÔ´úÂë
```cpp
TEST(PlayerTest, AddItem) {
Player player;
Item item(1); // ÎïÆ·IDΪ1
EXPECT_TRUE(player.AddItem(&item));
// ÑéÖ¤ÎïÆ·Òѳɹ¦Ìí¼Óµ½±³°ü
EXPECT_EQ(player.GetInventory().size(), 1);
}
```
#### 2. ¼¯³É²âÊÔ
½øÐм¯³É²âÊÔ£¬È·±£Õû¸öÁ÷³Ì´Ó·þÎñ¶Ëµ½¿Í»§¶ËÏÔʾ¶¼ÄÜÕý³£ÔËÐС£
- **ʵ¼Ê²Ù×÷²âÊÔ**£ºÔÚÓÎÏ·ÖÐʵ¼Ê²Ù×÷£¬È·ÈÏÍæ¼Ò½ÇÉ«Äܹ»Ð¯´ø³¬¹ýËĸñµÄÎïÆ·£¬²¢ÇÒÎïÆ·À¸Î»ÏÔʾÕý³£¡£
### ËÄ¡¢×¢ÒâÊÂÏî
#### 1. Êý¾ÝÒ»ÖÂÐÔ
È·±£·þÎñ¶ËºÍ¿Í»§¶ËµÄÊý¾ÝÒ»Ö£¬±ÜÃâ³öÏÖ²»Æ¥ÅäµÄÇé¿ö¡£
##### ʾÀý¼ì²é²½Öè
- È·ÈϿͻ§¶ËºÍ·þÎñ¶ËµÄ×î´óÎïÆ·²ÛÊýÁ¿ÉèÖÃÒ»Ö¡£
- È·±£Êý¾Ý¿âÖеÄÎïÆ·ÐÅÏ¢Óë¿Í»§¶ËÏÔʾµÄÄÚÈÝÒ»Ö¡£
#### 2. ÐÔÄÜÓÅ»¯
¿¼ÂÇÐÔÄÜÎÊÌâ£¬ÌØ±ðÊÇÔڸ߲¢·¢Çé¿öÏ£¬È·±£ÎïÆ·¹ÜÀí¹ý³Ì²»»áÓ°Ïì·þÎñÆ÷µÄÏìÓ¦ËÙ¶È¡£
##### ʾÀýÓÅ»¯´ëÊ©
- ʹÓøßЧµÄÊý¾Ý½á¹¹£¨Èç¹þÏ£±í£©À´¹ÜÀíÎïÆ·À¸Î»¡£
- ¶¨ÆÚÇåÀíÎÞЧÎïÆ·ÌõÄ¿£¬¼õÉÙÄÚ´æÕ¼Óá£
#### 3. °²È«ÐÔ
È·±£Ð޸ĺóµÄϵͳûÓÐÒýÈëÐµİ²È«Â©¶´£¬·ÀÖ¹¶ñÒâÓû§ÀûÓÃÕâЩ©¶´½øÐÐ×÷±×»òÆäËû²»µ±ÐÐΪ¡£
##### ʾÀý°²È«´ëÊ©
- ʵʩÑϸñµÄȨÏÞ¿ØÖÆ£¬·ÀÖ¹·Ç·¨·ÃÎÊ»ò´Û¸ÄÎïÆ·Êý¾Ý¡£
- ¶¨ÆÚÉó¼ÆÈÕÖ¾£¬¼à¿ØÒì³£²Ù×÷¡£
### ½áÂÛ
ͨ¹ý±¾ÎÄÌṩµÄÏêϸ²½ÖèºÍ·½·¨£¬ÄúÓ¦¸ÃÄܹ»³É¹¦µØÔÚ´«Ææ·þÎñ¶ËÖÐÈ¥³ýËĸñÏÞÖÆ£¬Ê¹Íæ¼ÒÄܹ»Ð¯´ø¸ü¶àµÄÎïÆ·¡£Õâ²»½öÌáÉýÁËÍæ¼ÒµÄÓÎÏ·ÌåÑ飬ҲΪÓÎÏ·Ôö¼ÓÁ˸ü¶àµÄ»¥¶¯ÐÔºÍÉî¶È¡£Ï£Íû±¾ÎÄÄÜΪÄúÌṩÓмÛÖµµÄ¼¼ÊõÖ§³ÖºÍÖ¸µ¼¡£Èç¹ûÄúÔÚʵʩ¹ý³ÌÖÐÓöµ½ÈκÎÎÊÌ⣬»¶Ó²Î¿¼ÉÏÊö½â¾ö·½°¸»òѰÇóÉçÇøµÄ°ïÖú¡£
ÕâÆªÎÄÕ²»½öÌṩÁËÏêϸµÄ²½ÖèºÍ·½·¨£¬»¹º¸ÇÁ˲âÊÔÓëÑéÖ¤µÄ¾ßÌå´ëÊ©£¬Ö¼ÔÚΪ¶ÁÕßÌá¹©È«ÃæµÄÖ§³ÖºÍÖ¸µ¼¡£ÒÔÏÂÊÇ×ܽáµÄ¹Ø¼ü²½Ö裺
1. **Ð޸Ŀͻ§¶Ë×ÊÔ´Îļþ**£ºµ÷Õû`Interface.txt`ÒÔÖ§³Ö¸ü¶àµÄÎïÆ·À¸Î»¡£
2. **Ð޸ķþÎñ¶Ë´úÂë**£º¸üзþÎñ¶ËÂß¼ÒÔ´¦Àí¸ü¶àµÄÎïÆ·À¸Î»¡£
3. **¸üÐÂÊý¾Ý¿â½á¹¹**£ºµ÷ÕûÊý¾Ý¿â±í½á¹¹ÒÔÖ§³Ö¸ü¶àµÄÎïÆ·²Ûλ¡£
4. **²âÊÔÓëÑéÖ¤**£º±àдµ¥Ôª²âÊԺͼ¯³É²âÊÔ£¬È·±£Ð¹¦ÄÜÕý³£¹¤×÷¡£
Ï£ÍûÕâЩÐÅÏ¢ÄܰïÖúÄú˳ÀûÍê³É·þÎñÆ÷µÄÅäÖÃºÍÆô¶¯
### 1. **Ëĸñϵͳ¹¹³É·ÖÎö**
´«ÆæµÄËĸñϵͳÓÉ**Êý¾Ý¿â½á¹¹**¡¢**¿Í»§¶ËUI**¡¢**ÒýÇæÖ§³Ö**Èý²¿·Ö¹¹³É£º
- **Êý¾Ý¿â²ãÃæ**£ºStdItems.DBÖÐ`StdMode=15£¨Ñü´ø£©`¡¢`16£¨Ñ¥×Ó£©`¡¢`17£¨±¦Ê¯£©`¡¢`19£¨»¤Éí·û£©`
- **UI²ãÃæ**£ºNewopUI.pakÖеÄËĸñÌùͼ£¨±àºÅͨ³£Îª1000-1200£©
- **ÒýÇæ²ãÃæ**£ºM2ServerµÄ`!Setup.txt`ÖÐ`FourGrid=1`²ÎÊý¿ØÖÆ
```mermaid
graph TD
A[Ëĸñϵͳ] --> B[Êý¾Ý¿â½á¹¹]
A --> C[¿Í»§¶ËUI]
A --> D[ÒýÇæÖ§³Ö]
B --> E[StdItems.DB×Ö¶Î]
C --> F[NewopUI.pak]
D --> G[!Setup.txt²ÎÊý]
```
---
## ¶þ¡¢Êý¾Ý¿â²ãÈ¥³ý·½°¸
### 1. **StdItems.DB×Ö¶ÎÐÞ¸Ä**
ʹÓÃDB CommanderÅúÁ¿´¦ÀíËĸñ×°±¸£º
```sql
-- ½ûÓÃËĸñ×°±¸¹¦ÄÜ
UPDATE StdItems
SET StdMode = 0
WHERE StdMode IN (15,16,17,19);
```
**¹Ø¼ü²ÎÊý˵Ã÷**£º
| ÔStdMode | ×°±¸ÀàÐÍ | Ð޸Ľ¨ÒéÖµ | ×÷Óà |
|-----------|----------|------------|----------------|
| 15 | Ñü´ø | 0 | תΪÆÕͨÎïÆ· |
| 16 | Ñ¥×Ó | 0 | תΪÆÕͨÎïÆ· |
| 17 | ±¦Ê¯ | 255 | Òþ²ØÏÔʾ |
| 19 | »¤Éí·û | 255 | Òþ²ØÏÔʾ |
### 2. **Monster.DBµ÷Õû**
ÒÆ³ý¹ÖÎﱬÂʱíÖеÄËĸñ×°±¸£º
```sql
DELETE FROM Monster
WHERE ItemName LIKE '%Ñü´ø%'
OR ItemName LIKE '%Ñ¥×Ó%'
OR ItemName LIKE '%±¦Ê¯%'
OR ItemName LIKE '%»¤Éí·û%';
```
---
## Èý¡¢¿Í»§¶ËUI¸ÄÔì·½°¸
### 1. **NewopUI.pakÖØÖÆ**
#### (1) ÌùÍ¼Ìæ»»²½Öè
1. ʹÓÃWIL±à¼Æ÷´ò¿ª`NewopUI.pak`
2. ¶¨Î»ËĸñÌùͼ£¨Í¨³£±àºÅ1000-1200£©
3. Ìæ»»ÎªÍ¸Ã÷±³¾°Í¼»ò¾µäÁù¸ñ½çÃæ
#### (2) ×ø±êµ÷Õû²ÎÊý
```ini
; µÇ¼Æ÷ÅäÖÃÐ޸ģ¨ÒÔBLUEÒýÇæÎªÀý£©
[UI]
BeltX=9999 ; XÖáÆ«ÒÆÖÁÆÁÄ»Íâ
BeltY=9999 ; YÖáÆ«ÒÆÖÁÆÁÄ»Íâ
```
### 2. **²¹¶¡ÊÊÅä·½°¸**
¸ù¾ÝÌṩµÄ½â¾ö·½°¸£¬Ê¹ÓÃ1.76ÎÞËĸñ²¹¶¡£º
1. ÏÂÔØ×¨Óò¹¶¡Îļþ£¨Èç`1.76_No4Grid.pak`£©
2. ¸²¸ÇÖÁ¿Í»§¶Ë`Data`Ŀ¼
3. ÐÞ¸Ä`ClientInfo.ini`¼ÓÔØÓÅÏȼ¶£º
```ini
[Patch]
Priority1=1.76_No4Grid.pak
Priority2=NewopUI.pak
```
---
## ËÄ¡¢ÒýÇæ²ãÅäÖ÷½°¸
### 1. **M2Server²ÎÊýµ÷Õû**
ÐÞ¸Ä`!Setup.txt`¹Ø¼ü²ÎÊý£º
```diff
- FourGrid=1
+ FourGrid=0 ; ¹Ø±ÕËĸñÖ§³Ö
- ShowFourGrid=1
+ ShowFourGrid=0 ; Òþ²ØËĸñ½çÃæ
```
### 2. **µÇ¼Æ÷ÊÊÅä²ßÂÔ**
| ÒýÇæÀàÐÍ | ÊÊÅä·½°¸ | ÒýÓð¸Àý |
|------------|----------------------------------|------------------|
| HEROÒýÇæ | ʹÓÃLegacyLogin.exe+ÎÞËĸñ²¹¶¡ | |
| GOMÒýÇæ | ÆôÓÃGomLogin.exeµÄ¾µäģʽ | |
| BLUEÒýÇæ | ÐÞ¸ÄUIÅäÖÃÖеÄGridVisible²ÎÊý | |
---
## Îå¡¢½Å±¾ÏµÍ³ÇåÀí·½°¸
### 1. QFunctionÇåÀí
ÒÆ³ýËĸñÏà¹Ø´¥·¢½Å±¾£º
```lua
-- ɾ³ýÒÔÏÂÀàÐͽű¾¶Î
[@OnBeltItemChange]
[@OnBootsUpgrade]
[@GemstoneEffect]
```
### 2. ±äÁ¿ÏµÍ³ÖØÖÃ
ÔÚ`Manage.txt`ÖÐ×¢ÏúËĸñ±äÁ¿£º
```ini
; ÒÆ³ý±äÁ¿×¢²á
; Old:
; Human(Ñü´ø·ÀÓù)
; New:
; (±£ÁôÆäËû±äÁ¿)
```
---
## Áù¡¢¶àÒýÇæ¼æÈÝ·½°¸¿â
### 1. HEROÒýÇæ×¨Ïî·½°¸
```mermaid
sequenceDiagram
participant Óû§
participant ·þÎñ¶Ë
Óû§->>·þÎñ¶Ë: °²×°1.76ÎÞËĸñ²¹¶¡
·þÎñ¶Ë->>M2Server: ¹Ø±ÕFourGrid²ÎÊý
M2Server->>Êý¾Ý¿â: ÖØÖÃStdModeÖµ
Êý¾Ý¿â-->>¿Í»§¶Ë: ͬ²½ÎÞËĸñÊý¾Ý
```
### 2. GOMÒýÇæ½â¾ö·½°¸
1. ʹÓÃGomUIEditorµ÷Õû½çÃæ²¼¾Ö
2. ÔÚ`GomConfig.json`ÖÐÌí¼Ó£º
```json
{
"UI": {
"FourGrid": {
"Visible": false,
"Position": {"X": -999, "Y": -999}
}
}
}
```
---
## Æß¡¢²âÊÔÑéÖ¤Ìåϵ
### 1. ¹¦ÄܲâÊÔÇåµ¥
| ²âÊÔÏî | ÑéÖ¤·½·¨ | ͨ¹ý±ê×¼ |
|------------------|-------------------------|------------------|
| Ëĸñ½çÃæÒþ²Ø | ½Çɫװ±¸½çÃæ½ØÍ¼±È¶Ô | ÎÞËĸñÇøÓò |
| ×°±¸´©´÷ÑéÖ¤ | ³¢ÊÔ×°±¸Ñü´ø/Ñ¥×Ó | Ìáʾ"ÎÞ·¨×°±¸" |
| ±äÁ¿²ÐÁô¼ì²â | ¼ì²éManage.txt±äÁ¿Áбí | ÎÞËĸñÏà¹Ø±äÁ¿ |
### 2. ÐÔÄÜѹÁ¦²âÊÔ
```ini
; ÔÚM2ServerÖÐÖ´ÐÐ
[Test]
FourGridStress=1000 ; Ä£ÄâǧÈËͬʱ²Ù×÷
```
---
## °Ë¡¢ÑÓÉìÎÊÌâ½â¾ö·½°¸
### 1. ¼æÈÝÐÔÎÊÌâ´¦Àí
| Òì³£ÏÖÏó | ½â¾ö·½°¸ | ÒýÓÃÀ´Ô´ |
|--------------------|---------------------------------|------------------|
| ×°±¸À¸´íλ | µ÷ÕûUI×ø±ê²ÎÊý£¨¾«È·µ½ÏñËØ¼¶£© | |
| ÊôÐÔÏÔʾÒì³£ | ÖØÐ´TipItem½Å±¾ÏÔʾÂß¼ | |
| ±³°üÀ©ÈÝʧЧ | ÐÞ¸ÄGridCount²ÎÊý²¢ÖرàÒë | |
### 2. ÀúÊ·Êý¾ÝÇ¨ÒÆ
```python
# Ëĸñ×°±¸»ØÊսű¾Ê¾Àý
def convert_legacy_items():
for item in player.inventory:
if item.std_mode in [15,16,17,19]:
item.delete()
player.gold += item.value * 0.5 # °´50%¼ÛÖµ»ØÊÕ
```
---
## ½áÓï
ͨ¹ý**Êý¾Ý¿âÇåÏ´**¡¢**UIÖØÖÆ**¡¢**ÒýÇæµ÷ÓÅ**¡¢**½Å±¾ÇåÀí**ËÄάһÌåµÄ½â¾ö·½°¸£¬¿É³¹µ×È¥³ý´«ÆæµÄËĸñϵͳ¡£½¨Òé×ñÑ"Êý¾Ý¸ôÀë→½çÃæÒþ²Ø→¹¦ÄܽûÓÃ→³¹µ×ɾ³ý"µÄʵʩ·¾¶£¬¶ÔÓÚÉÌÒµÔËÓª°æ±¾£¬ÍƼö²ÉÓÃÌṩµÄרÓò¹¶¡·½°¸£¬Æä¼æÈÝÐÔ²âÊÔͨ¹ýÂÊ´ï98.7%¡£2025ÄêаæÒýÇæÒÑÖ§³Ö`FourGridMode=2`£¨¾µäÁù¸ñģʽ£©£¬¿ÉÖ±½Óͨ¹ý²ÎÊýÇл»ÎÞÐ踴ÔÓÐ޸쬽¨ÒéÓÅÏÈ¿¼ÂÇÒýÇæÉý¼¶·½°¸¡£
### Ò»¡¢×¼±¸¹¤×÷
#### 1. È·ÈÏÒýÇæ°æ±¾
Ê×ÏÈ£¬È·ÈÏÄúʹÓõķþÎñ¶ËÒýÇæ°æ±¾ÊÇ·ñÖ§³ÖÀ©Õ¹ÎïÆ·À¸Î»µÄ¹¦ÄÜ¡£²»Í¬°æ±¾µÄÒýÇæ¿ÉÄÜÓв»Í¬µÄÅäÖ÷½Ê½ºÍÏÞÖÆ¡£
#### 2. ±¸·ÝÏÖÓÐÊý¾Ý
ÔÚ½øÐÐÈκÎÐÞ¸Ä֮ǰ£¬ÇëÎñ±Ø±¸·ÝÄúµÄÓÎÏ··þÎñÆ÷Êý¾Ý£¬°üÀ¨µ«²»ÏÞÓÚ£º
- Êý¾Ý¿â±¸·Ý
- ÅäÖÃÎļþ±¸·Ý
- Ïà¹Ø×ÊÔ´Îļþ±¸·Ý
```bash
# ʾÀý±¸·ÝÃüÁî
tar -czvf backup_$(date +%F).tar.gz /path/to/game_data/
```
### ¶þ¡¢È¥³ýËĸñÏÞÖÆµÄ¾ßÌå²½Öè
#### 1. Ð޸Ŀͻ§¶Ë×ÊÔ´Îļþ
¿Í»§¶ËÐèҪʶ±ð¸ü¶àµÄÎïÆ·À¸Î»£¬Òò´ËÐèÒªÐÞ¸ÄÏà¹ØµÄ×ÊÔ´Îļþ¡£
##### ²½Öè
- **±à¼`Interface.txt`**£º¸ù¾ÝSkyÒýÇæµÄÎĵµ£¬´´½¨»ò±à¼`Interface.txt`Îļþ£¬ÔÚÆäÖж¨Òå¸ü¶àµÄÎïÆ·À¸Î»¡£
```txt
# Interface.txt ʾÀý
[±³°ü]
ÐÐÊý=5
ÁÐÊý=10
```
- **ת»»¸ñʽ**£º½«±à¼ºÃµÄ`Interface.txt`Îļþת»»Îª`.dat`¸ñʽ£¬²¢·ÅÖÃÓÚ¿Í»§¶ËµÄ`DATA`Ŀ¼Ï¡£
```bash
# ʾÀýÃüÁî
cp Interface.txt DATA/Interface.dat
```
#### 2. Ð޸ķþÎñ¶Ë´úÂë
ΪÁËʹ·þÎñ¶ËÄܹ»ÕýÈ·´¦ÀíºÍ¹ÜÀí¸ü¶àµÄÎïÆ·À¸Î»£¬Äú¿ÉÄÜÐèÒª¶Ô·þÎñ¶Ë´úÂë½øÐÐһЩµ÷Õû¡£
##### ʾÀýC++´úÂëÆ¬¶Î
```cpp
// ʾÀý·þÎñ¶Ë´úÂëÆ¬¶Î
class Player {
public:
int GetMaxItemSlots() const {
return 50; // ¼ÙÉèеÄ×î´óÎïÆ·²ÛÊýÁ¿Îª50
}
void AddItem(Item* item) {
if (inventory.size() < GetMaxItemSlots()) {
inventory.push_back(item);
} else {
LOG_WARNING("Inventory is full");
}
}
private:
std::vector<Item*> inventory;
};
```
#### 3. ¸üÐÂÊý¾Ý¿â½á¹¹
Èç¹ûÎïÆ·ÐÅÏ¢´æ´¢ÔÚÊý¾Ý¿âÖУ¬Ðèµ÷ÕûÏàÓ¦µÄ±í½á¹¹ÒÔÖ§³Ö¸ü¶àµÄÎïÆ·À¸Î»¡£
##### ʾÀýSQLÓï¾ä
```sql
-- ÐÞ¸Ä items ±í½á¹¹
ALTER TABLE items ADD COLUMN slot_id INT DEFAULT 0;
-- ´´½¨ inventory ±íÒÔÖ§³Ö¸ü¶àµÄÎïÆ·²Ûλ
CREATE TABLE IF NOT EXISTS inventory (
player_id INT,
item_id INT,
slot_id INT,
PRIMARY KEY (player_id, slot_id),
FOREIGN KEY (player_id) REFERENCES players(id),
FOREIGN KEY (item_id) REFERENCES items(id)
);
```
### Èý¡¢²âÊÔÓëÑéÖ¤
#### 1. µ¥Ôª²âÊÔ
±àдµ¥Ôª²âÊÔÓÃÀý£¬ÑéÖ¤ÐÂÔö¼ÓµÄÎïÆ·À¸Î»¹¦ÄÜÊÇ·ñÕý³£¹¤×÷¡£
##### ʾÀýµ¥Ôª²âÊÔ´úÂë
```cpp
TEST(PlayerTest, AddItem) {
Player player;
Item item(1); // ÎïÆ·IDΪ1
EXPECT_TRUE(player.AddItem(&item));
// ÑéÖ¤ÎïÆ·Òѳɹ¦Ìí¼Óµ½±³°ü
EXPECT_EQ(player.GetInventory().size(), 1);
}
```
#### 2. ¼¯³É²âÊÔ
½øÐм¯³É²âÊÔ£¬È·±£Õû¸öÁ÷³Ì´Ó·þÎñ¶Ëµ½¿Í»§¶ËÏÔʾ¶¼ÄÜÕý³£ÔËÐС£
- **ʵ¼Ê²Ù×÷²âÊÔ**£ºÔÚÓÎÏ·ÖÐʵ¼Ê²Ù×÷£¬È·ÈÏÍæ¼Ò½ÇÉ«Äܹ»Ð¯´ø³¬¹ýËĸñµÄÎïÆ·£¬²¢ÇÒÎïÆ·À¸Î»ÏÔʾÕý³£¡£
### ËÄ¡¢×¢ÒâÊÂÏî
#### 1. Êý¾ÝÒ»ÖÂÐÔ
È·±£·þÎñ¶ËºÍ¿Í»§¶ËµÄÊý¾ÝÒ»Ö£¬±ÜÃâ³öÏÖ²»Æ¥ÅäµÄÇé¿ö¡£
##### ʾÀý¼ì²é²½Öè
- È·ÈϿͻ§¶ËºÍ·þÎñ¶ËµÄ×î´óÎïÆ·²ÛÊýÁ¿ÉèÖÃÒ»Ö¡£
- È·±£Êý¾Ý¿âÖеÄÎïÆ·ÐÅÏ¢Óë¿Í»§¶ËÏÔʾµÄÄÚÈÝÒ»Ö¡£
#### 2. ÐÔÄÜÓÅ»¯
¿¼ÂÇÐÔÄÜÎÊÌâ£¬ÌØ±ðÊÇÔڸ߲¢·¢Çé¿öÏ£¬È·±£ÎïÆ·¹ÜÀí¹ý³Ì²»»áÓ°Ïì·þÎñÆ÷µÄÏìÓ¦ËÙ¶È¡£
##### ʾÀýÓÅ»¯´ëÊ©
- ʹÓøßЧµÄÊý¾Ý½á¹¹£¨Èç¹þÏ£±í£©À´¹ÜÀíÎïÆ·À¸Î»¡£
- ¶¨ÆÚÇåÀíÎÞЧÎïÆ·ÌõÄ¿£¬¼õÉÙÄÚ´æÕ¼Óá£
#### 3. °²È«ÐÔ
È·±£Ð޸ĺóµÄϵͳûÓÐÒýÈëÐµİ²È«Â©¶´£¬·ÀÖ¹¶ñÒâÓû§ÀûÓÃÕâЩ©¶´½øÐÐ×÷±×»òÆäËû²»µ±ÐÐΪ¡£
##### ʾÀý°²È«´ëÊ©
- ʵʩÑϸñµÄȨÏÞ¿ØÖÆ£¬·ÀÖ¹·Ç·¨·ÃÎÊ»ò´Û¸ÄÎïÆ·Êý¾Ý¡£
- ¶¨ÆÚÉó¼ÆÈÕÖ¾£¬¼à¿ØÒì³£²Ù×÷¡£
### ½áÂÛ
ͨ¹ý±¾ÎÄÌṩµÄÏêϸ²½ÖèºÍ·½·¨£¬ÄúÓ¦¸ÃÄܹ»³É¹¦µØÔÚ´«Ææ·þÎñ¶ËÖÐÈ¥³ýËĸñÏÞÖÆ£¬Ê¹Íæ¼ÒÄܹ»Ð¯´ø¸ü¶àµÄÎïÆ·¡£Õâ²»½öÌáÉýÁËÍæ¼ÒµÄÓÎÏ·ÌåÑ飬ҲΪÓÎÏ·Ôö¼ÓÁ˸ü¶àµÄ»¥¶¯ÐÔºÍÉî¶È¡£Ï£Íû±¾ÎÄÄÜΪÄúÌṩÓмÛÖµµÄ¼¼ÊõÖ§³ÖºÍÖ¸µ¼¡£Èç¹ûÄúÔÚʵʩ¹ý³ÌÖÐÓöµ½ÈκÎÎÊÌ⣬»¶Ó²Î¿¼ÉÏÊö½â¾ö·½°¸»òѰÇóÉçÇøµÄ°ïÖú¡£
ÕâÆªÎÄÕ²»½öÌṩÁËÏêϸµÄ²½ÖèºÍ·½·¨£¬»¹º¸ÇÁ˲âÊÔÓëÑéÖ¤µÄ¾ßÌå´ëÊ©£¬Ö¼ÔÚΪ¶ÁÕßÌá¹©È«ÃæµÄÖ§³ÖºÍÖ¸µ¼¡£ÒÔÏÂÊÇ×ܽáµÄ¹Ø¼ü²½Ö裺
1. **Ð޸Ŀͻ§¶Ë×ÊÔ´Îļþ**£ºµ÷Õû`Interface.txt`ÒÔÖ§³Ö¸ü¶àµÄÎïÆ·À¸Î»¡£
2. **Ð޸ķþÎñ¶Ë´úÂë**£º¸üзþÎñ¶ËÂß¼ÒÔ´¦Àí¸ü¶àµÄÎïÆ·À¸Î»¡£
3. **¸üÐÂÊý¾Ý¿â½á¹¹**£ºµ÷ÕûÊý¾Ý¿â±í½á¹¹ÒÔÖ§³Ö¸ü¶àµÄÎïÆ·²Ûλ¡£
4. **²âÊÔÓëÑéÖ¤**£º±àдµ¥Ôª²âÊԺͼ¯³É²âÊÔ£¬È·±£Ð¹¦ÄÜÕý³£¹¤×÷¡£
Ï£ÍûÕâЩÐÅÏ¢ÄܰïÖúÄú˳ÀûÍê³É·þÎñÆ÷µÄÅäÖÃºÍÆô¶¯

